<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;Ck8NRno4eCp7ImA9WxNUFUs.&quot;"><id>tag:blogger.com,1999:blog-2296791868291929959</id><updated>2009-11-07T04:28:17.430+02:00</updated><title>All your base are belong to us</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://ilkinbalkanay.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://ilkinbalkanay.blogspot.com/" /><link rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>İlkin Ulaş BALKANAY</name><uri>http://www.blogger.com/profile/01068439091401215925</uri><email>ilkinulas@gmail.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>41</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="self" href="http://feeds.feedburner.com/ilkinbalkanayonblogspot" type="application/atom+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry gd:etag="W/&quot;DU4AQXk9eyp7ImA9WxNRGUg.&quot;"><id>tag:blogger.com,1999:blog-2296791868291929959.post-442002663880773093</id><published>2009-09-12T17:06:00.016+03:00</published><updated>2009-09-14T22:52:20.763+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-14T22:52:20.763+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Planet" /><category scheme="http://www.blogger.com/atom/ns#" term="flickr" /><category scheme="http://www.blogger.com/atom/ns#" term="API" /><category scheme="http://www.blogger.com/atom/ns#" term="facebook" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="mashup" /><title>Python API for Flickr Services - Part I</title><content type="html">These days I am working on a facebook application that mashes up servises from &lt;a href="http://www.facebook.com"&gt;Facebook&lt;/a&gt; and &lt;a href="http://www.flickr.com"&gt;Flickr&lt;/a&gt;. The application is hosted by &lt;a href="http://appengine.google.com"&gt;Google Appengine&lt;/a&gt; and I am developing on &lt;a href="http://www.djangoproject.com"&gt;Django&lt;/a&gt; web application framework. &lt;br /&gt;&lt;br /&gt;Flickr has an easy to use API which is called &lt;a href="http://www.flickr.com/services/api/"&gt;Flickr Services&lt;/a&gt;. Here are some interesting things you can do with the Flickr Services:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;You can upload photos from anywhere (web application, desktop application or mobile application)&lt;br /&gt;&lt;li&gt;You can search for images. Flickr Services lets you search images by&lt;br /&gt;            - tags&lt;br /&gt;            - geo location&lt;br /&gt;            - photo taken time / photo upload time&lt;br /&gt;            - and &lt;a href="http://www.flickr.com/services/api/flickr.photos.search.html"&gt;more...&lt;/a&gt;&lt;br /&gt;&lt;li&gt;execute methods that require authentication&lt;br /&gt;           - create, edit, remove tags&lt;br /&gt;           - create, edit, remove photo sets&lt;br /&gt;           - replace, remove photos&lt;br /&gt;&lt;/ul&gt;     &lt;br /&gt;There are two Python APIs listed in the Flickr Services page:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;    &lt;li&gt;&lt;a href="http://www.stuvel.eu/projects/flickrapi"&gt;http://www.stuvel.eu/projects/flickrapi&lt;/a&gt;&lt;br /&gt;    &lt;li&gt;&lt;a href="http://code.google.com/p/flickrpy/"&gt;http://code.google.com/p/flickrpy/&lt;/a&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;I have implemented Flickr services in Python. Don't think this as &lt;i&gt;"reinventing the wheel"&lt;/i&gt; because it was a coding practice for me. Plus, i have my own, customized, shortcut methods ;)&lt;br /&gt;&lt;br /&gt;You can download the library from &lt;a href="http://code.google.com/p/ilkinulassandbox/source/browse/#svn/trunk/python/flickr"&gt;http://code.google.com/p/ilkinulassandbox/&lt;/a&gt;. There are also some other javascript and python code snippets there.&lt;br /&gt;&lt;br /&gt;Here is a basic usage of the API:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;&gt;&gt;&gt; import flickr&lt;br /&gt;&gt;&gt;&gt; api = flickr.FlickrAPI('API_KEY','SECRET_KEY')&lt;br /&gt;&gt;&gt;&gt; api.search({'tags':'python', 'per_page':'3'})&lt;br /&gt;{'photos': {'page': 1,&lt;br /&gt;            'pages': 8326,&lt;br /&gt;            'perpage': 3,&lt;br /&gt;            'photo': [{'farm': 4,&lt;br /&gt;                       'id': '3911963732',&lt;br /&gt;                       'isfamily': 0,&lt;br /&gt;                       'isfriend': 0,&lt;br /&gt;                       'ispublic': 1,&lt;br /&gt;                       'owner': '30041312@N03',&lt;br /&gt;                       'secret': '44aae23e98',&lt;br /&gt;                       'server': '3090',&lt;br /&gt;                       'title': 'Centralian Carpet Python (Apophis)'},&lt;br /&gt;                      {'farm': 3,&lt;br /&gt;                       'id': '3911184515',&lt;br /&gt;                       'isfamily': 0,&lt;br /&gt;                       'isfriend': 0,&lt;br /&gt;                       'ispublic': 1,&lt;br /&gt;                       'owner': '30041312@N03',&lt;br /&gt;                       'secret': '0aae3c8127',&lt;br /&gt;                       'server': '2513',&lt;br /&gt;                       'title': 'Centralian Carpet Python (Apophis)'},&lt;br /&gt;                      {'farm': 3,&lt;br /&gt;                       'id': '3911127131',&lt;br /&gt;                       'isfamily': 0,&lt;br /&gt;                       'isfriend': 0,&lt;br /&gt;                       'ispublic': 1,&lt;br /&gt;                       'owner': '31355375@N02',&lt;br /&gt;                       'secret': '2921fea364',&lt;br /&gt;                       'server': '2564',&lt;br /&gt;                       'title': 'Sendra Python Nails 122 01'}],&lt;br /&gt;            'total': '24977'},&lt;br /&gt; 'stat': 'ok'}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Methods of the API returns a dictionary instance. Caller must handle the returned result. &lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;&gt;&gt;&gt; result = api.search({'tags':'python', 'per_page':'3'})&lt;br /&gt;&gt;&gt;&gt; result['photos']['photo'][0]['id']&lt;br /&gt;'3911751961'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Flickr photo url construction is described &lt;a href="http://www.flickr.com/services/api/misc.urls.html"&gt;here&lt;/a&gt; in details. You can easily get the url of a returned photo search result by using &lt;i&gt;build_photo_url&lt;/i&gt;. Default image size is 'm' which means 'normal'&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;&gt;&gt;&gt; api.build_photo_url(result['photos']['photo'][0])&lt;br /&gt;'http://farm4.static.flickr.com/3462/3911751961_43d409cf7c_m.jpg'&lt;br /&gt;&gt;&gt;&gt; api.build_photo_url(result['photos']['photo'][1], size='s')&lt;br /&gt;'http://farm3.static.flickr.com/2613/3911666353_ac0cc98871_s.jpg'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Lets search for pictures tagged 'fun' around point &lt;a href="http://maps.google.com/?ie=UTF8&amp;ll=41.034046,28.980217&amp;spn=0.187757,0.465889&amp;z=12"&gt;&lt;i&gt;(lat=41.070293, lon=28.24894)&lt;/i&gt;&lt;/a&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;&gt;&gt;&gt; pictures = api.search({'lat':'41.034046', 'lon':'28.980217', 'radius':'10', 'radius_units':'km','tags':'fun'})&lt;br /&gt;&gt;&gt;&gt; api.build_photo_url(fun_pictures['photos']['photo'][20])&lt;br /&gt;'http://farm1.static.flickr.com/116/293251976_ce5337908d_m.jpg'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The next post of "Python API for Flickr Services" will show how you can call methods that require authentication.  For the curious readers the api is ready &lt;a href="http://code.google.com/p/ilkinulassandbox/source/browse/#svn/trunk/python/flickr"&gt;http://code.google.com/p/ilkinulassandbox/&lt;/a&gt;. But it lacks documentation :(&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;NOTE : I use this python API in my facebook application  "&lt;a href="http://apps.facebook.com/turkiye_flickr"&gt;Türkiye'yi ne kadar iyi tanıyorsun?&lt;/a&gt;".  Application is a simple guessing game. You see a geo tagged picture from flickr and you answer which city this picture belongs.&lt;br /&gt;&lt;br /&gt;UPDATE : This library returns native Python datatypes rather than XML trees or unparsed JSON, which the other Flickr APIs have a tendency to do. (Thanks &lt;a href="http://news.ycombinator.com/user?id=martian"&gt;martian&lt;/a&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2296791868291929959-442002663880773093?l=ilkinbalkanay.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkinbalkanayonblogspot/~4/XiM20zZgUaY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ilkinbalkanay.blogspot.com/feeds/442002663880773093/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2296791868291929959&amp;postID=442002663880773093" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/442002663880773093?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/442002663880773093?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ilkinbalkanayonblogspot/~3/XiM20zZgUaY/python-api-for-flickr-services-part-i.html" title="Python API for Flickr Services - Part I" /><author><name>İlkin Ulaş BALKANAY</name><uri>http://www.blogger.com/profile/01068439091401215925</uri><email>ilkinulas@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="07256384748112435996" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://ilkinbalkanay.blogspot.com/2009/09/python-api-for-flickr-services-part-i.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcEQXk_cCp7ImA9WxJaE0w.&quot;"><id>tag:blogger.com,1999:blog-2296791868291929959.post-1584646567778763666</id><published>2009-08-03T12:49:00.009+03:00</published><updated>2009-08-03T18:23:20.748+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-03T18:23:20.748+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Planet" /><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="jquery" /><title>Div Roller : jQuery plugin for rotating html div elements</title><content type="html">In this post I want to introduce a jQuery plugin that i have written for one of my projects.&lt;br /&gt;&lt;i&gt;jquery.divroller&lt;/i&gt; plugin is written to rotate messages displayed in the home page of &lt;a href="http://www.bahele.com/"&gt;www.bahele.com&lt;/a&gt;. &lt;b&gt;bahele&lt;/b&gt; is a &lt;a href="http://developers.facebook.com/connect.php"&gt;facebook connect&lt;/a&gt; site where users can login with their facebook accounts and write messages about what they like or dislike. (&lt;b&gt;Bahele&lt;/b&gt; is only available in Turkish for now.)&lt;br /&gt;&lt;br /&gt;For the ones who have not heard of this library here's the motto from &lt;a href="http://www.jquery.com"&gt;jquery.com&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;"jQuery is a fast and concise JavaScript Library that simplifies HTML document &lt;br /&gt;traversing, event handling, animating, and Ajax interactions for rapid web &lt;br /&gt;development. jQuery is designed to change the way that you write JavaScript."&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://www.google.com/search?q=jquery"&gt;jQuery&lt;/a&gt; is a widely used javascript library. There are tons of javascript libraries in the wild, each has its own clever implementations. jQuery differs from other frameworks by its chaining property. Most of the methods in the library returns a jQuery object. You can call a jQuery function on a return value of another jQuery function. Here is what i mean:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;       $("a[href$='.pdf']")&lt;br /&gt;           .addClass("external_link")&lt;br /&gt;           .append("&amp;lt;img src="http://www.blogger.com/images/pdf.png" /&amp;gt;")&lt;br /&gt;           .click(pdfLinkClicked);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;One line of javascript is splitted into four lines for better readability.&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;The first line selects all the links in the page whose &lt;i&gt;'href'&lt;/i&gt; attribute ends with &lt;i&gt;'.pdf'&lt;/i&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The second line adds &lt;i&gt;'external_link'&lt;/i&gt;  css class to selected link elements.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The third line places an image after the link element in order to specify that is a link to download a pdf file.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The last line binds &lt;i&gt;'pdfLinkClicked'&lt;/i&gt; function to the click event of link element.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Enough for a short introduction, now lets look how we can take advantage of &lt;b&gt;jquery.divroller&lt;/b&gt;. Below is a simple usage scenario. Plugin is applied to the html div element whose id attrubute is equal to "divroller_container". There are two configuration parameters:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;   &lt;li&gt;&lt;b&gt;pause&lt;/b&gt; : Sleep duration between two rotations. This parameter determines the speed of the rolling divs.&lt;br /&gt;   &lt;/li&gt;&lt;li&gt;&lt;b&gt;visible&lt;/b&gt; : Number of visible html elements inside the container.  Plugin shows only "visible" number of elements, the others are hidden.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;&amp;lt;div id="divroller_container"&amp;gt;&lt;br /&gt;&amp;lt;div class="box_dark box_size" id="item1"&amp;gt;&lt;br /&gt;&amp;lt;a href="http://ilkinbalkanay.blogspot.com/2007/11/my-favorite-shell-commands.html"&amp;gt;&lt;br /&gt;My favorite shell commands&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div class="box_light box_size" id="item2"&amp;gt;&lt;br /&gt;&amp;lt;a href="http://ilkinbalkanay.blogspot.com/2007/10/volatile-variables-in-java.html"&amp;gt;&lt;br /&gt;Volatile Variables In JAVA&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div class="box_dark box_size" id="item3"&amp;gt;&lt;br /&gt;&amp;lt;a href="http://ilkinbalkanay.blogspot.com/2007/09/power-off-shell.html"&amp;gt;&lt;br /&gt;The power off shell&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div class="box_light box_size" id="item4"&amp;gt;&lt;br /&gt;&amp;lt;a href="http://ilkinbalkanay.blogspot.com/2007/09/seach-java-class-files-in-jars.html"&amp;gt;&lt;br /&gt; Search java class files in jars. &amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div class="box_dark box_size" id="item5"&amp;gt;&lt;br /&gt;&amp;lt;a href="http://ilkinbalkanay.blogspot.com/2008/01/readwritelock-example-in-java.html"&amp;gt;&lt;br /&gt;ReadWriteLock example in Java&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div class="box_light box_size" id="item6"&amp;gt;&lt;br /&gt;&amp;lt;a href="http://ilkinbalkanay.blogspot.com/2008/01/how-to-change-gnome-desktop-wallpaper.html"&amp;gt;&lt;br /&gt;How to change GNOME desktop wallpaper programmatically&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;$("#divroller_container").divroller({pause:2000, visible:3});&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;You can see the plugin in action : &lt;a href="http://ilkinulas.googlepages.com/demo.html"&gt;Live demonstration&lt;/a&gt;&lt;br /&gt;You can also  &lt;a href="http://ilkinulassandbox.googlecode.com/files/jquery.divroller.js"&gt;download&lt;/a&gt; the javascript source.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Note : There are countless jQuery plugins available on the internet. Before writing your own plugin you should check &lt;a href="http://plugins.jquery.com/"&gt; http://plugins.jquery.com/&lt;/a&gt;, you might be reinventing the wheel.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2296791868291929959-1584646567778763666?l=ilkinbalkanay.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkinbalkanayonblogspot/~4/dcJqNjQdRF4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ilkinbalkanay.blogspot.com/feeds/1584646567778763666/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2296791868291929959&amp;postID=1584646567778763666" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/1584646567778763666?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/1584646567778763666?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ilkinbalkanayonblogspot/~3/dcJqNjQdRF4/div-roller-jquery-plugin-for-rotating.html" title="Div Roller : jQuery plugin for rotating html div elements" /><author><name>İlkin Ulaş BALKANAY</name><uri>http://www.blogger.com/profile/01068439091401215925</uri><email>ilkinulas@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="07256384748112435996" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total><feedburner:origLink>http://ilkinbalkanay.blogspot.com/2009/08/div-roller-jquery-plugin-for-rotating.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQAQXk8eyp7ImA9WxJaEk4.&quot;"><id>tag:blogger.com,1999:blog-2296791868291929959.post-5264485748348986586</id><published>2009-07-28T23:42:00.008+03:00</published><updated>2009-08-02T21:05:40.773+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-02T21:05:40.773+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Gezegen" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>Oracle'ın Linux stratejisi Ubuntu mu olmalı?</title><content type="html">&lt;a href="http://news.cnet.com/8301-13505_3-10272966-16.html"&gt;Bu adresteki&lt;/a&gt; haberin Türkçe çevirisini paylaşmak istiyorum. Elimden geldiğince cevirmeye çalıştım. Keyifli okumalar:&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;Oracle geçtiğimiz yıllarda yaptığı satın almalarla, pazarda önde gelen teknolojileri portföyünde topladı. Fakat tüm bu satın almalara rağmen, hala eksik kalan bir şey var: işletim sistemi. Her ne kadar, yıllardır Red Hat'ı satın alınacaklar listesinde tutsa da, işletim sistemi olarak Ubuntu'yu seçmek Oracle için daha iyi olabilir.&lt;br /&gt;&lt;br /&gt;Evet, Oracle Sun'u satın alarak Solaris işletim sistemini de elde etmiş oldu, fakat &lt;a href="http://news.cnet.com/8301-13505_3-10272310-16.html"&gt;Red Hat  yönetim kurulu başkanı Jim Whitehurst'un Çarşamba günü, finansal raporları açıklarken belirttiği gibi&lt;/a&gt;, Solaris'ten Linux'e olan kullanıcı göçü hızla devam ediyor ve Sun'ın Linux'a olan eğilime karşı geliştirdiği OpenSolaris bu göçü durdurmak için etkisiz kaldı.&lt;br /&gt;&lt;br /&gt;Red Hat'ın en büyük 25 anlaşmasını, &lt;a href="http://news.cnet.com/8301-13505_3-10108675-16.html"&gt;Oracle'a kaptırmadan  yenilemesi ile birlikte&lt;/a&gt;, bir Red Hat Enterprice (Kurumsal) Linux (RHEL) klonu olan Oracle Enterprise Linux (OEL), Red Hat'ın egemenliğine son vermek yolunda büyük darbe aldı. RHEL'nin piyasadaki egemenliği Oracle'ın herşeyi içinde olan bir kurumsal yazılım paketine sahip olma hedefinin önünde büyük bir engel olarak durmakta. Red Hat'in elinde böyle bir kurumsal yazılım paketinin olması Oracle için gerçek bir tehdit olarak görülüyor.&lt;br /&gt;&lt;br /&gt;Oracle satış ekiplerinin Oracle uygulamalarını ve veritabanlarını RHEL platformu  üzerinde OEL'e göre daha kolay satması, OEL'in zamanla yok olacağına bir işaret gibi gözüküyor.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.theregister.co.uk/2009/06/25/redhat_fq12010_numbers/"&gt;The Register'in da belirttiği gibi&lt;/a&gt; Oracle, Red Hat'i alabilir fakat sabit ve yüksek gelirleriyle Red Hat, Oracle için pahalı bir satın alma hedefi olarak görülüyor. Bununla birlikte, Red Hat, Redwood Shores'daki (California'da Oracle'in merkezinin bulunduğu yer) ortağı ve rakibi olan Oracle'ın kollarına atlamak için can atmıyor.&lt;br /&gt;&lt;br /&gt;Tüm bu bilgiler ışığında, Red Hat ile devam etmek yerine Canonical, ticari Ubuntu  sponsoru, ile güçlü bir ortaklık Oracle için doğru bir Linux stratejisi olacaktır.&lt;br /&gt;&lt;br /&gt;Açık şekilde görülüyor ki, Masaüstünde egemenliği elinde tutan ve ticari sunucularda da güçlü bir yeri olduğunu iddia eden Ubuntu, &lt;a href="http://www.starryhope.com/linux/ubuntu/2007/ubuntu-just-how-popular-is-it/"&gt;Linux dağıtımları içinde en çok tercih edilen dağıtım.&lt;/a&gt; OEL, Oracle satış ekibi için pazarlaması zor olan bir ürün olduğu için Ubuntu'yu Oracle teknolojilerini tamamlayan bir ürün olarak pazarlamak daha kolay olacaktır.&lt;br /&gt;&lt;br /&gt;OEL'i satmak için istek var fakat derman yok.&lt;br /&gt;&lt;br /&gt;Sahibi olduğum, açık kaynak kodlu içerik yönetimi uygulamarı satan şirketin, Alfresco, verilerine bakılacak olursa Ubuntu Kurumsal ürünlerdeki yüzde 37'lik payıyla, yüzde 28 pay alan RHEL ve Fedorayı geride bırakmış durumda.&lt;br /&gt;&lt;br /&gt;Bir yıl önce &lt;a href="http://news.cnet.com/8301-13505_3-9868873-16.html"&gt;Ubuntu ciddi bir ilerleme içindeydi&lt;/a&gt;, bugün ise gerçek kurumsal kurulumlarda tercih edilen dağıtım Ubuntu olmuş gözüküyor.&lt;br /&gt;&lt;br /&gt;Özetle, Ubuntu arkasına camianın desteğini almış durumda. Tek eksiğinin bir yazılım devinin desteği olduğunu düşünüyorum.  Hala aklına gelmemesine rağmen, Oracle, Ubuntu'yu kurumsal bir marka yapabilecek güçte.&lt;br /&gt;&lt;br /&gt;Oracle'ın yıllar önce Red Hat'a elini uzatması tesadüfi değildi. Oracle'ın Red Hat Kurumsal Linux dağıtımına (RHEL) verdiği destek olmasaydı, bugün RHEL'in olduğu yerde Novell'in SUSE'sini ya da diğer Linux dağıtımlarını görebilirdik.&lt;br /&gt;&lt;br /&gt;Oracle'ın elinde Ubuntu'yu başlıca tercih edilen kurumsal sunucu yapma gücü var. Fakat akıllardaki soru, Oracle bunu istiyor mu?&lt;br /&gt;&lt;br /&gt;"The 451 Group" ile çalışan analist Matt Aslett'in bana dediği gibi, "Oracle'ın Linux stratejisi mevcut müşterilerine hizmet vermek." Ve Oracle RHEL kullanan Oracle müşterileri Ubuntu kullanan müşterilerden fazla. Sean Michael Kerner'in belittiği gibi Oracle ürünlerini Ubuntu üzerinde çalıştırmadan önce hepsinin Ubuntu üzerinde problemsiz çalıştığını belgelendirmek zorunda. Bu yüzden RHEL (ve onun klonu OEL) Oracle için daha güvenli bir seçim gibi gözüküyor.&lt;br /&gt;&lt;br /&gt;Pazar RHEL (parasını veren kurumsal müşteriler) ve Ubuntu'dan (para ödemeyen Linux camiası) yanayken, Oracle'ın OEL için neden bir sürü kaynak ayırdığını anlamak zor. Ya git OEL yerine RHEL üzerine yoğunlaş ya da Ubuntu'ya bir fırsat ver.&lt;br /&gt;&lt;br /&gt;Oracle Ubuntu'yu seçerek hem bir işletim sistemi sahibine sahip olur hem de Ubuntu'nun populerliğini kazanç kapısına çevirebilir.&lt;br /&gt;&lt;br /&gt;Siz ne düşünüyorsunuz? Ubuntu, Oracle için iyi bir hamle olabilir mi? Yoksa Oracle'ın sonradan aklına gelen Linux pazarında, RedHat ile devam etmek Oracle için daha mı iyi olur?&lt;br /&gt;&lt;hr&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2296791868291929959-5264485748348986586?l=ilkinbalkanay.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkinbalkanayonblogspot/~4/cnky2ZxjtMo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ilkinbalkanay.blogspot.com/feeds/5264485748348986586/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2296791868291929959&amp;postID=5264485748348986586" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/5264485748348986586?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/5264485748348986586?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ilkinbalkanayonblogspot/~3/cnky2ZxjtMo/oraclen-linux-stratejisi-ubuntu-mu.html" title="Oracle'ın Linux stratejisi Ubuntu mu olmalı?" /><author><name>İlkin Ulaş BALKANAY</name><uri>http://www.blogger.com/profile/01068439091401215925</uri><email>ilkinulas@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="07256384748112435996" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://ilkinbalkanay.blogspot.com/2009/07/oraclen-linux-stratejisi-ubuntu-mu.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUNQHk-fyp7ImA9WxJaEk4.&quot;"><id>tag:blogger.com,1999:blog-2296791868291929959.post-2564643000968537897</id><published>2009-07-27T20:54:00.005+03:00</published><updated>2009-08-02T21:04:51.757+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-02T21:04:51.757+03:00</app:edited><title>Java LineNumberReader</title><content type="html">Bu yazıyı ingilizce yazarım diye düşünüyordum fakat klavyenin başına geçince iş değişti. Bu sefer de işin kolayına kaçıyorum. Bu günlüğe ilk başladığım zamanlarda yazılarım ingilizceydi. Bakınız : &lt;a href="http://ilkinbalkanay.blogspot.com/2007/10/volatile-variables-in-java.html"&gt;Volatile Variables In JAVA&lt;/a&gt;. İngilizce yazmanın şöyle bir avantajı oluyor, yazınızı &lt;a href="http://www.dzone.com"&gt;dzone&lt;/a&gt;, &lt;a href="http://www.digg.com"&gt;digg&lt;/a&gt; gibi sosyal link paylaşım sitelerine gönderdiğiniz anda tahmin edemeyeceğiniz kadar çok ziyaretçi geliyor sitenize. dzone, reddit, digg benzeri türkçe link paylaşım sitelerini pek bilmiyorum ama araştırıp yazıları oraya eklesem iyi olacak galiba ;) Sonuçta bu yazıları benim gibi yazılım meraklıları okusun diye yazıyorum. Fikirlerimi ve yazılarımı ne kadar çok kişi okursa o kadar çok geribesleme alabilirim diye düşünüyorum. Google'ın satın aldığı &lt;a href="http://www.feedburner.com"&gt;feedburner&lt;/a&gt; servisinin söylediğine göre ben dahil bu günlüğü takip eden 16 kişi var :D&lt;br /&gt;&lt;br /&gt;İstanbul'da 3 büyük GSM operatöründen birisinde yazılım geliştirme departmanında çalışıyorum. (Hangi operatorde çalıştığımı merak edenler için ipucu: "Fark var!!!"). İçinde milyonlarca satır olan bir text dosyasını işleyecek bir java uygulaması yazmam gerekti. Uygulamanın yapacağı iş çok basit, satır satır tüm dosyayı okuyup her satır için belirli işleri çalıştıracak. &lt;br /&gt;&lt;br /&gt;İşlenecek dosya içinde çok fazla satır olduğu için uygulamanın çalışma süresi de yarım saatten fazla oluyor. Uygulamayı başlattıktan sonra işin yüzde kaçının tamamlandığını ekrana yazdırmak için başlangıçta dosya içinde kaç satır olduğunu bilmek yeterli. Bunun için iki yöntem var. &lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;Birinci yöntem dosyayı açıp satır satır taramak ve her satırda satır sayısı sayacını bir artırmak.&lt;br /&gt; &lt;li&gt;İkinci yöntem &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/io/LineNumberReader.html"&gt;java.util.LineNumberReader&lt;/a&gt; sınıfını kullanmak.&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Aşağıdaki kod parçası iki yöntemin çalışma sürelerini karşılaştırmak için yazıldı. 10 milyon satırlı bir deneme dosyası ile 100 iterasyonun ortalamasını alarak elde ettiğim sonuç:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;LineNumberReader average : 388 miliseconds.&lt;br /&gt;FileScanner average : 839 miliseconds.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Birinci yöntem ile 10 milyon satırlı bir dosyanın satır sayısını bulmak 839 milisaniye sürerken ikinci yöntem ile 388 milisaniye sürmüş.&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;package util;&lt;br /&gt;&lt;br /&gt;import java.io.BufferedReader;&lt;br /&gt;import java.io.File;&lt;br /&gt;import java.io.FileReader;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.LineNumberReader;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class LineNumberReaderTest {&lt;br /&gt;&lt;br /&gt; public static void main(String[] args) throws IOException {&lt;br /&gt;  LineNumberReaderTest test = new LineNumberReaderTest();&lt;br /&gt;  String filePath = args[0];  &lt;br /&gt;  File textFile = new File(filePath);&lt;br /&gt;  int numberOfIterations = 100;&lt;br /&gt;  int result_1 = test.testByLineNumberReader(numberOfIterations, textFile);&lt;br /&gt;  int result_2 = test.testByFileScan(numberOfIterations, textFile);&lt;br /&gt;  assert result_1 == result_2;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; private int testByLineNumberReader(int numberOfIterations, File textFile) throws IOException {&lt;br /&gt;  int numberOfLines = 0;&lt;br /&gt;  long start = System.currentTimeMillis();&lt;br /&gt;  for (int i = 0; i &lt; numberOfIterations; i++) {&lt;br /&gt;   numberOfLines = this.numberOfLinesByLineNumberReader(textFile);&lt;br /&gt;  }&lt;br /&gt;  long diff = System.currentTimeMillis() - start;  &lt;br /&gt;  System.out.println("LineNumberReader average : " +  diff/numberOfIterations + " miliseconds.");&lt;br /&gt;  return numberOfLines;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; public int testByFileScan(int numberOfIterations, File textFile) throws IOException {&lt;br /&gt;  int numberOfLines = 0;&lt;br /&gt;  long start = System.currentTimeMillis();&lt;br /&gt;  for (int i = 0; i &lt; numberOfIterations; i++) {&lt;br /&gt;   numberOfLines = this.numberOfLinesByScanningFile(textFile);&lt;br /&gt;  }&lt;br /&gt;  long diff = System.currentTimeMillis() - start;  &lt;br /&gt;  System.out.println("FileScanner average : " + diff/numberOfIterations + " miliseconds.");&lt;br /&gt;  return numberOfLines;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Dosyayı satir satir gezerek satir sayisini bulmaya yarar&lt;br /&gt;  * @param textFile&lt;br /&gt;  * @return dosyadaki satir sayisi&lt;br /&gt;  * @throws IOException&lt;br /&gt;  */&lt;br /&gt; public int numberOfLinesByScanningFile(File textFile) throws IOException {&lt;br /&gt;  BufferedReader bufferedReader = new BufferedReader(new FileReader(textFile));&lt;br /&gt;  int numberOfLines = 0;&lt;br /&gt;  while(bufferedReader.readLine() != null) {&lt;br /&gt;   numberOfLines++;&lt;br /&gt;  }&lt;br /&gt;  return numberOfLines;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; /**&lt;br /&gt;  * LineNumberReader sinifini kullanarak satir sayisini verir.&lt;br /&gt;  * @param textFile&lt;br /&gt;  * @return dosyadaki satir sayisi&lt;br /&gt;  * @throws IOException&lt;br /&gt;  */&lt;br /&gt; public int numberOfLinesByLineNumberReader(File textFile) throws IOException {&lt;br /&gt;  LineNumberReader lineNumberReader = new LineNumberReader(new FileReader(textFile));&lt;br /&gt;  lineNumberReader.skip(textFile.length());&lt;br /&gt;  return lineNumberReader.getLineNumber();&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Merak ettiğim bir konu var. Ben bu LineNumberReader sınıfına ilk defa iki gün önce rastladım. Siz böyle bir sınıfın varlığını biliyor muydunuz?&lt;br /&gt;&lt;br /&gt;Son olarak aklımdayken söyleyeyim. 10 milyon satırlık test dosyasını aşağıdaki komut ile oluşturdum:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;ilkinulas@tututil:/tmp$ seq 10000000 &gt; deneme.txt&lt;br /&gt;ilkinulas@tututil:/tmp$ wc -l deneme.txt &lt;br /&gt;10000000 deneme.txt&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2296791868291929959-2564643000968537897?l=ilkinbalkanay.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkinbalkanayonblogspot/~4/AG1emX2poyw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ilkinbalkanay.blogspot.com/feeds/2564643000968537897/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2296791868291929959&amp;postID=2564643000968537897" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/2564643000968537897?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/2564643000968537897?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ilkinbalkanayonblogspot/~3/AG1emX2poyw/java-linenumberreader.html" title="Java LineNumberReader" /><author><name>İlkin Ulaş BALKANAY</name><uri>http://www.blogger.com/profile/01068439091401215925</uri><email>ilkinulas@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="07256384748112435996" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://ilkinbalkanay.blogspot.com/2009/07/java-linenumberreader.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUNQHk-fyp7ImA9WxJaEk4.&quot;"><id>tag:blogger.com,1999:blog-2296791868291929959.post-8939469203968997664</id><published>2009-07-26T19:55:00.001+03:00</published><updated>2009-08-02T21:04:51.757+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-02T21:04:51.757+03:00</app:edited><title>Bahele. Artık mesajlara yorum yazabilirsin</title><content type="html">Vakit buldukça &lt;a href="http://www.bahele.com"&gt;Bahele.com&lt;/a&gt;'a yeni özellikler eklemeyi sürdürüyorum. Site çok fazla kullanılmasa da motivasyonum yüksek. Önceleri yabancı olduğum web teknolojilerini deneyebilmem için iyi fırsat oldu. Ve işte Bahele'deki son değişiklikler:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Mesajlara yorum yazılabiliyor. Yazılan bu yorumlar yorumu yapanın facebook feed'leri arasına gönderiliyor.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Yeni facebook feed şablonları ekledim. Facebook'ta ana sayfayada gözüken feed'ler arasına birşeyler göndermek isterseniz facebook feed şablonlarını kullanmanız gerekiyor. Şablonları biraz daha göze batacak hale getirdim.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;İnternette dolanırken &lt;a href="http://www.programmableweb.com/"&gt;programmableweb&lt;/a&gt; diye bir siteye rastladım. Aklınıza gelebilecek her türlü &lt;a href="http://en.wikipedia.org/wiki/Mashup_%28web_application_hybrid%29"&gt;mashup&lt;/a&gt; ile ilgili bilgi bulabileceğiniz bir site. Bu aralar flickr, google, yahoo, twitter ve facebook api'lerini inceliyorum. Bu devlerin servislerini kullanarak geliştirilebilecek yeni uygulamalar, servisler üzerine kafa yormaya başladım. &lt;br /&gt;&lt;br /&gt;Hemen bir örnek site tanıtayım: &lt;a href="http://nearbytweets.com/"&gt;nearbytweets.com&lt;/a&gt;. Google Maps ve Twitter API'lerini kullanarak geliştirilmiş bu site sizin yerinizi buluyor (google sağolsun) sonra da twitter API'si ile arama yaparak yakınlarınızdan yazılan twitter mesajlarını listeliyor. Bence çok başarılı bir mashup örneği.&lt;br /&gt;&lt;br /&gt;Nereden nereye geldik. Bahele ile başladık mashup ile bitiriyoruz. Haydi görüşmek üzere...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2296791868291929959-8939469203968997664?l=ilkinbalkanay.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkinbalkanayonblogspot/~4/-vik_yvviS0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ilkinbalkanay.blogspot.com/feeds/8939469203968997664/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2296791868291929959&amp;postID=8939469203968997664" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/8939469203968997664?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/8939469203968997664?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ilkinbalkanayonblogspot/~3/-vik_yvviS0/bahele-artk-mesajlara-yorum.html" title="Bahele. Artık mesajlara yorum yazabilirsin" /><author><name>İlkin Ulaş BALKANAY</name><uri>http://www.blogger.com/profile/01068439091401215925</uri><email>ilkinulas@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="07256384748112435996" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://ilkinbalkanay.blogspot.com/2009/07/bahele-artk-mesajlara-yorum.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUGR387cCp7ImA9WxJWEEQ.&quot;"><id>tag:blogger.com,1999:blog-2296791868291929959.post-8024913757558776554</id><published>2009-06-15T22:27:00.003+03:00</published><updated>2009-06-15T23:20:26.108+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-15T23:20:26.108+03:00</app:edited><title>www.bahele.com beta versiyonu yayında</title><content type="html">Günlük yazmak gerçekten zor bir iş. Düzenli olarak kaliteli yazılar yazan blog yazarlarını çok kıskanıyorum. Notlarım arasında yazılmayı bekleyen 20-25 tane yazı var. Ne zaman bilgisayarın başına oturup birisini yazayım desem hemen dikkatim dağılıyor. Google Reader içindeki yazılara dalıp gidiyorum. İnternetten bugüne kadar çok şey öğrendim. Hep al hep al olmuyor, biraz da benim internete birşeyler katmam lazım diye düşünüyorum. &lt;br /&gt;&lt;br /&gt;Bu günlükteki 41. yazımda (41 kere maşallah :) ) son 4 aydır uğraştığım bir web sitesini tanıtmak istiyorum. Liseden arkadaşlarım Sefa ve Taylan ile beraber hayata geçirdiğimiz bu eğlenceli web sitesinin adresi &lt;a href="http://www.bahele.com"&gt;http://www.bahele.com&lt;/a&gt;. Eğlenceli diyorum çünkü biz yaparken çok eğlendik umarım sizler de kullanırken çok eğlenirsiniz.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Bahele.com nedir?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Bahele.com, insanların sevdiklerini ve sevmediklerini tüm internet ile  paylaşabilecekleri  bir sosyal ortamdır. Sevdiklerinize, onları sevdiğinizi söylemek size de zor geliyorsa &lt;b&gt;bahele.com&lt;/b&gt; tam size göre. &lt;b&gt;Bahele.com&lt;/b&gt;'u benzer diğer web sitelerinden ayıran en önemli özelliği &lt;a href="http://developers.facebook.com/connect.php"&gt;facebook-connect&lt;/a&gt; alt yapısını kullanmasıdır. Facebook-connect sayesinde &lt;b&gt;bahele.com&lt;/b&gt;'u mevcut facebook hesaplarınız ile kullanabilirsiz. &lt;b&gt;Bahele.com&lt;/b&gt;'da yazdığınız mesajlar isterseniz facebook profilinizde yayınlanır. &lt;b&gt;Bahele.com&lt;/b&gt; ile ilgili detaylı bilgiyi &lt;a href="http://www.bahele.com/yardim/"&gt;yardım sayfalarında&lt;/a&gt; bulabilirsiniz.&lt;br /&gt;&lt;br /&gt;Ben bu yazıda &lt;b&gt;bahele.com&lt;/b&gt;'u yaparken hangi teknolojileri kullandık ondan bahsetmek istiyorum. &lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Siteyi &lt;a href="http://www.djangoproject.com"&gt;django web framework&lt;/a&gt; kullanarak kodladık. Daha önceden java ile web uygulaması geliştirme tecrübelerim olmuştu. Java ne kadar güçlü bir dil olsa da konu kısa sürede çalışır projeler ortaya koymak olunca python'un eline su dökemez. &lt;br /&gt;&lt;li&gt;Veritabanı olarak sizin de tahmin edebileceğiniz gibi mysql kullanıyoruz. &lt;br /&gt;&lt;li&gt;Veritabanı işlemlerini biraz da olsa rahatlatmak için &lt;a href="http://ilkinbalkanay.blogspot.com/2008/02/memcached-datml-distributed-nbellek.html"&gt;memcached&lt;/a&gt; kullandık. Şimdilik çok fazla trafik gelmiyor ama ileride trafik arttığında veritabanı sorgularını azaltacağı için önbellek çok işimize yarayacak biliyorum.&lt;br /&gt;&lt;li&gt;Facebook ile entegrasyonu &lt;a href="http://code.google.com/p/pyfacebook/"&gt;pyfacebook&lt;/a&gt; API ile yaptık. &lt;br /&gt;&lt;li&gt;Siteyi &lt;a href="http://www.webfaction.com"&gt;webfaction'da&lt;/a&gt; barındırıyoruz. İnternette yaptığım araştırmalar sonucunda webfaction'ı seçtim. Şimdiye kadar ki gözlemlerim seçimimde hata yapmadığımı gösteriyor.&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Geçen 4 ay içinde akşamları ya da haftasonları vakit buldukça kodladığım bu web sitesi beni çok heyecanlandırıyor. 9 milyonu aşkın Türk abonesi olan bir platform (facebook) ile entegre çalışabilen &lt;b&gt;bahele.com&lt;/b&gt; django kullanarak yaptığım ilk web uygulaması. Bakalım &lt;b&gt;bahele.com&lt;/b&gt;'un geleceği nasıl olacak? İnternetin karanlık sularında kayıp mı olacak yoksa  hatırı sayılır bir ziyaretçi kitlesine mi sahip olacak. Bunları zamanla göreceğiz.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2296791868291929959-8024913757558776554?l=ilkinbalkanay.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkinbalkanayonblogspot/~4/0Q0syByrEYo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ilkinbalkanay.blogspot.com/feeds/8024913757558776554/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2296791868291929959&amp;postID=8024913757558776554" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/8024913757558776554?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/8024913757558776554?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ilkinbalkanayonblogspot/~3/0Q0syByrEYo/wwwbahelecom-beta-versiyonu-yaynda.html" title="www.bahele.com beta versiyonu yayında" /><author><name>İlkin Ulaş BALKANAY</name><uri>http://www.blogger.com/profile/01068439091401215925</uri><email>ilkinulas@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="07256384748112435996" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://ilkinbalkanay.blogspot.com/2009/06/wwwbahelecom-beta-versiyonu-yaynda.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUNQHk-fyp7ImA9WxJaEk4.&quot;"><id>tag:blogger.com,1999:blog-2296791868291929959.post-114542747854623932</id><published>2009-01-18T21:57:00.008+02:00</published><updated>2009-08-02T21:04:51.757+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-02T21:04:51.757+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java IntegerCache Integer.valueOf" /><title>Java IntegerCache</title><content type="html">&lt;div style="text-align: justify;"&gt;Şirkette yazdığımız bir kodu Eclipse FindBugs plugini ile incelerken kodun sarı renkli böcekler tarafından istila edildiğini gördük. Integer sınıfını kullandığımız hemen hemen her sınıf içinde FindBugs bize aşağıdaki uyarıyı veriyordu:&lt;br /&gt;&lt;pre&gt;Method invokes inefficient Number constructor; use static valueOf instead&lt;/pre&gt;&lt;br /&gt;"Yav bırak allah aşkına, alt tarafı bir Integer yaratacaksın" deyip FindBugs uyarısını görmezden gelme varsayılan davranışımdır fakat bugün can sıkıntısının da etkisi ile Java SDK içindeki Integer sınıfının koduna baktım. &lt;i&gt;"new Integer(5)" &lt;/i&gt; ile &lt;i&gt;"Integer.valueOf(5)"&lt;/i&gt; arasında ne gibi bir fark olabilir çok merak ediyordum. Integer.java sınıfı içerisinde fark yaratan kod aşağıdaki IntegerCache sınıfıymış. JVM sizin için 256 adet tam sayıyı önbelleğe alıyor. -128'den +127'ye kadar olan tam sayılar için Integer.valueOf size hep aynı Integer instance'ını veriyor.&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;  private static class IntegerCache {&lt;br /&gt;     private IntegerCache(){}&lt;br /&gt;&lt;br /&gt;     static final Integer cache[] = new Integer[-(-128) + 127 + 1];&lt;br /&gt;&lt;br /&gt;     static {&lt;br /&gt;         for(int i = 0; i &lt; cache.length; i++)&lt;br /&gt;            cache[i] = new Integer(i - 128);&lt;br /&gt;     }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * Returns a &lt;tt&gt;Integer&lt;/tt&gt; instance representing the specified&lt;br /&gt;   * &lt;tt&gt;int&lt;/tt&gt; value.&lt;br /&gt;   * If a new &lt;tt&gt;Integer&lt;/tt&gt; instance is not required, this method&lt;br /&gt;   * should generally be used in preference to the constructor&lt;br /&gt;   * {@link #Integer(int)}, as this method is likely to yield&lt;br /&gt;   * significantly better space and time performance by caching&lt;br /&gt;   * frequently requested values.&lt;br /&gt;   *&lt;br /&gt;   * @param  i an &lt;code&gt;int&lt;/code&gt; value.&lt;br /&gt;   * @return a &lt;tt&gt;Integer&lt;/tt&gt; instance representing &lt;tt&gt;i&lt;/tt&gt;.&lt;br /&gt;   * @since  1.5&lt;br /&gt;   */&lt;br /&gt; public static Integer valueOf(int i) {&lt;br /&gt;     final int offset = 128;&lt;br /&gt;     if (i &gt;= -128 &amp;&amp; i &lt;= 127) { // must cache &lt;br /&gt;         return IntegerCache.cache[i + offset];&lt;br /&gt;     }&lt;br /&gt;     return new Integer(i);&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Küçük bir örnekle konuya nokta koymak istiyorum. Bğyle ufak tefek performans optimizasyonları ile işim olmaz fakat java 1.5'ten beri aktif olan bu özelliği daha yeni öğrendiğim için ilgimi çekti sizinle de paylaşmak istedim.&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;public class IntegerCacheTest {&lt;br /&gt;public static void main(String[] args) {&lt;br /&gt; Integer int1 = Integer.valueOf(5);&lt;br /&gt; Integer int2 = Integer.valueOf(5);&lt;br /&gt; Integer int3 = new Integer(5);&lt;br /&gt; Integer int4 = 5; &lt;br /&gt; if ( int1 == int2) {&lt;br /&gt;  System.out.println("int1 ve int2 ayni instance.");&lt;br /&gt; } &lt;br /&gt; if( int1!= int3) {&lt;br /&gt;  System.out.println("Fakat int1 ve int3 farkli instance'lar");&lt;br /&gt; } &lt;br /&gt; if (int1 == int4) {&lt;br /&gt;  System.out.println("int1 ve int4 de aynı instance");&lt;br /&gt; } &lt;br /&gt; if (int1.equals(int2) &amp;amp;&amp;amp; int2.equals(int3) &amp;amp;&amp;amp; int3.equals(int4)) {&lt;br /&gt;  System.out.println("ve son olarak hepsinin değeri aynı :)");&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Yukarıdaki kod parçasını çalıştırırsanız aşağıdaki gibi bir çıktı alırsınız.&lt;br /&gt;&lt;pre&gt;int1 ve int2 ayni instance.&lt;br /&gt;Fakat int1 ve int3 farkli instance'lar&lt;br /&gt;int1 ve int4 de aynı instance&lt;br /&gt;ve son olarak hepsinin değeri aynı :)&lt;/pre&gt;&lt;br /&gt;Fakat bu sonuç sizi beni şaşırttığı kadar şaşırtmayabilir :)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2296791868291929959-114542747854623932?l=ilkinbalkanay.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkinbalkanayonblogspot/~4/XHdd03QbWZ0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ilkinbalkanay.blogspot.com/feeds/114542747854623932/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2296791868291929959&amp;postID=114542747854623932" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/114542747854623932?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/114542747854623932?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ilkinbalkanayonblogspot/~3/XHdd03QbWZ0/java-integercache.html" title="Java IntegerCache" /><author><name>İlkin Ulaş BALKANAY</name><uri>http://www.blogger.com/profile/01068439091401215925</uri><email>ilkinulas@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="07256384748112435996" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://ilkinbalkanay.blogspot.com/2009/01/java-integercache.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUNQHk-cCp7ImA9WxJaEk4.&quot;"><id>tag:blogger.com,1999:blog-2296791868291929959.post-73440089389656683</id><published>2009-01-09T22:18:00.002+02:00</published><updated>2009-08-02T21:04:51.758+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-02T21:04:51.758+03:00</app:edited><title>Akış Diyagramı</title><content type="html">&lt;a href="http://xkcd.com/518/"&gt;http://xkcd.com/518/&lt;/a&gt; adresinden :&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://imgs.xkcd.com/comics/flow_charts.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 740px; height: 534px;" src="http://imgs.xkcd.com/comics/flow_charts.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2296791868291929959-73440089389656683?l=ilkinbalkanay.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkinbalkanayonblogspot/~4/ChESwmuV8Yg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ilkinbalkanay.blogspot.com/feeds/73440089389656683/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2296791868291929959&amp;postID=73440089389656683" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/73440089389656683?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/73440089389656683?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ilkinbalkanayonblogspot/~3/ChESwmuV8Yg/ak-diyagram.html" title="Akış Diyagramı" /><author><name>İlkin Ulaş BALKANAY</name><uri>http://www.blogger.com/profile/01068439091401215925</uri><email>ilkinulas@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="07256384748112435996" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://ilkinbalkanay.blogspot.com/2009/01/ak-diyagram.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUNQHk-cCp7ImA9WxJaEk4.&quot;"><id>tag:blogger.com,1999:blog-2296791868291929959.post-4332346049401570816</id><published>2009-01-08T17:17:00.012+02:00</published><updated>2009-08-02T21:04:51.758+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-02T21:04:51.758+03:00</app:edited><title>Web uygulamasını deploy ederken python yardımı</title><content type="html">&lt;div style="text-align: justify;"&gt;Yazdığım bir web uygulamasının dosyalarını web sunucusuna ftp ile göndermeye çalışırken çektiğim eziyet yüzünden aşağıdaki özellikleri içeren bir script yazmaya karar verdim. &lt;br /&gt;&lt;/div&gt;&lt;ol style="text-align: justify;"&gt;Script;&lt;li&gt; Benim seçeceğim bir klasör altındaki tüm dosyaları tarayacak.&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Benim belirteceğim süre içerisinde güncellenmiş dosyaları bulacak. &lt;/li&gt;&lt;br /&gt;&lt;li&gt; Bulduğu dosyalar CVS (.cvs) ya da SVN (.svn) tarafından kullanılan dosyalar olmayacak&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Seçilen dosyaları belirteceğim bir sunucunun belirteceğim bir klasörüne secure ftp ile kopyalacak.&lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Python standart library içerisisinda ftp istemcisi için &lt;a href="http://docs.python.org/library/ftplib.html"&gt;&lt;b&gt;ftplib&lt;/b&gt;&lt;/a&gt; modülü bulunuyor. Fakat bu modül güvenli bağlantıyı (SSH2) desteklemiyor. Bu devirde de ssh  haricinde bağlantı kabul eden hosting firması yoktur diye tahmin ediyorum. Google'a arama yaparken &lt;a href="http://www.blogger.com/%3Cb%3Eftplib%3C/b%3E"&gt;&lt;b&gt;Paramiko&lt;/b&gt;&lt;/a&gt; adındaki modülü buldum. Eğer &lt;i&gt;easy_install&lt;/i&gt; kurulu ise paramiko'yu kurmak çok kolay. Burada paramiko kurulumundan bahsetmeye gerek yok zaten README dosyasında detaylı bir şekilde anlatmış adam. Bir hayırsever de paramiko modulünü almış ve üzerine basitleştirilmiş, &lt;a href="http://media.commandline.org.uk/code/ssh.txt"&gt;http://media.commandline.org.uk/code/ssh.txt&lt;/a&gt; adresinden indirebileceğiniz python kodunu yazmış. Ben de bu kadar hazır yazılmış kodun üzerine asağıdaki satırları yazdım.&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;import subprocess&lt;br /&gt;import sys &lt;br /&gt;from ssh import Connection&lt;br /&gt;&lt;br /&gt;if len(sys.argv)&lt;4:&lt;br /&gt;    print 'usage : python ' + sys.argv[0] + ' source_dir destination_dir hour(s)'&lt;br /&gt;    sys.exit()&lt;br /&gt;    &lt;br /&gt;source_dir = sys.argv[1]&lt;br /&gt;destination_dir = sys.argv[2]&lt;br /&gt;minutes = 60 * int(sys.argv[3])&lt;br /&gt;&lt;br /&gt;findCommand = 'find ' + source_dir + ' -type f -mmin -' + str(minutes)&lt;br /&gt;process1 = subprocess.Popen(findCommand.split(), stdout=subprocess.PIPE)&lt;br /&gt;process2 = subprocess.Popen('grep -v .svn'.split(), stdin=process1.stdout, stdout=subprocess.PIPE)&lt;br /&gt;&lt;br /&gt;files = process2.stdout.read().strip().split('\n')&lt;br /&gt;host = 'HOST'&lt;br /&gt;username = 'USER'&lt;br /&gt;password = 'PASSWORD'&lt;br /&gt;print 'connecting to ', host&lt;br /&gt;ftp = Connection(host, username=username, password=password)&lt;br /&gt;print 'connected.'&lt;br /&gt;for file in files:&lt;br /&gt;    local = file&lt;br /&gt;    remote = destination_dir + file.split(source_dir)[1]&lt;br /&gt;    print 'sending file ', local, ' to ', remote&lt;br /&gt;    ftp.put(local, remote)&lt;br /&gt;ftp.close()&lt;br /&gt;print 'connection closed.'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Yeni güncellenmiş dosyaları bulup bunlar arasından SVN(subversion) dosyaları ayıklamak için linux &lt;i&gt;find&lt;/i&gt; ve &lt;i&gt;grep&lt;/i&gt; komutlarından yararlandım. Örneğin:&lt;br /&gt;&lt;pre&gt;find . -type f -mmin -60 |grep -v 'svn'&lt;/pre&gt;&lt;br /&gt;komutu bulunduğun dizindeki dosyalardan (klasörler hariç) son 60 dakika içinde güncellenenleri bulur. (subversion dosyalari hariç) &lt;br /&gt;Python ile sistem komutlarını çalıştırmak için &lt;a href="http://docs.python.org/library/subprocess.html"&gt;subprocess&lt;/a&gt; modülünü kullandım. Subprocess modülü ile&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Sistem komutları çalıştırılabilir.&lt;/li&gt;&lt;li&gt;Bir process'in çıktısı başka bir process'e girdi olarak yönlendirilebilir(pipe)&lt;/li&gt;&lt;li&gt;Çalıştırılan process'in çıktısı python script'i içinden okunabilir.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Yukarıdaki script'te find komutu  çıktısı subprocess modulu yardımı ile grep komutuna veriliyor ve sonuç grep process'inin stdout alanından okunuyor. Yukarıdaki script'i ftp.py olarak kaydettim. &lt;i&gt;/home/ilkinulas/projects/webapps/test&lt;/i&gt; dizini altındaki son 5 saat içinde güncellenmiş dosyaları ftp ile web sunucusundaki &lt;i&gt;/home/ilkinulas/webapps/&lt;/i&gt; dizinine atmak için aşağıdaki komutu yazmak yeterli oluyor.&lt;br /&gt;&lt;pre&gt;python ftp.py /home/ilkinulas/projects/webapps/test /home/ilkinulas/webapps 5&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2296791868291929959-4332346049401570816?l=ilkinbalkanay.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkinbalkanayonblogspot/~4/7rpWL73UUcs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ilkinbalkanay.blogspot.com/feeds/4332346049401570816/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2296791868291929959&amp;postID=4332346049401570816" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/4332346049401570816?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/4332346049401570816?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ilkinbalkanayonblogspot/~3/7rpWL73UUcs/web-uygulasn-deploy-ederken-python.html" title="Web uygulamasını deploy ederken python yardımı" /><author><name>İlkin Ulaş BALKANAY</name><uri>http://www.blogger.com/profile/01068439091401215925</uri><email>ilkinulas@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="07256384748112435996" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://ilkinbalkanay.blogspot.com/2009/01/web-uygulasn-deploy-ederken-python.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUNQHk-cCp7ImA9WxJaEk4.&quot;"><id>tag:blogger.com,1999:blog-2296791868291929959.post-3127240555179272911</id><published>2008-12-04T18:37:00.005+02:00</published><updated>2009-08-02T21:04:51.758+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-02T21:04:51.758+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python django" /><title>Django uygulamasını deploy etmek</title><content type="html">&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Django uygulamamı deploy ederken karşılaştığım sorunu ve sorunun çözümünü paylaşmak istiyorum. &lt;a href="http://www.bilisimterimleri.com/?arananterim=deploy&amp;dil=eng"&gt;Bilişim Terimleri&lt;/a&gt; sitesi deploy teriminin Türkçe karşılığı icin &lt;span style="font-style:italic;"&gt;yerleştirme, konuşlandırma&lt;/span&gt; terimlerini kullanmış. Fakat bu karşılıklar bana biraz komik geldiği için ("Abi dün gece uygulamayı yerleştirirken problem oldu" gibi), ben "deploy" terimini Türkçeye çevirmeden kullanmaya devam edeceğim.&lt;br /&gt;&lt;br /&gt;Bu yazıda bahsettiğim Django (cango diye okunuyor) Tatlı Kaçıklar dizisinde oynayan Mehmet Ali Erbil'in köpeği değil Python ile geliştirilmiş bir Web Framework. Python ile geliştirilmiş onca web framework arasından Django'yu seçmemin nedeni çok iyi bir dokümantasyona sahip olması (gerçekten çok iyi, abartmıyorum) ve web sitesinde yapılan şu Django tanımı oldu : &lt;br /&gt;&lt;h2&gt; Web Framework For Perfectionists With Deadlines &lt;/h2&gt;&lt;br /&gt;Kısaca Django reklamı yaptıktan sonra ana meseleye gelelim. Yazının bundan sonrası Django ile ilgilenmeyenler için sıkıcı olabilir baştan söyleyeyim.&lt;br /&gt;Django, uygulama ayarlarını &lt;span style="font-style:italic;"&gt;setting.py&lt;/span&gt; dosyasından okur. Genelde development ve test yaparken kullandığınız ayarlar ile production ortamında kullandığınız ayarlar aynı olmaz. En basit örneği database ayarları: url, database adı, kullanıcı adı, şifre gibi.. &lt;span style="font-style:italic;"&gt;settings.py&lt;/span&gt; dosyasını production sunucusuna upload ettikten sonra her seferinde gidip settings.py'de production ayarlarını yapmak bir süre sonra insanı bayar. Uygulamayı deploy ettikten sonra sağını solunu değiştirmeden çalıştırabilmek için setting.py dosyasına aşağıdaki numarayı çekiyoruz: (Dosyanın sonuna bu satırları yazıyoruz)&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;try:&lt;br /&gt;    from settings_local import *&lt;br /&gt;except ImportError:&lt;br /&gt;    pass&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Bu sayede Django &lt;span style="font-style:italic;"&gt;settings.py&lt;/span&gt;'deki ayarları yükledikten sonra  &lt;span style="font-style:italic;"&gt;settings_local.py&lt;/span&gt; dosyamızdaki ayarları yükler. &lt;span style="font-style:italic;"&gt;settings_local.py&lt;/span&gt; dosyasında development ve test platformunda kullanmak istediğimiz ayarları yazarız. &lt;span style="font-style:italic;"&gt;settings_local.py&lt;/span&gt; dosyasını production sunucusuna upload etmemize gerek yok, çünkü bu dosyada çalışma ortamımızın  production ortamından farkını yazıyoruz. Örnek bir settings_local.py dosyası şu şekildedir:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;DEBUG = True&lt;br /&gt;&lt;br /&gt;DATABASE_ENGINE = 'mysql'&lt;br /&gt;DATABASE_NAME = 'tututil'&lt;br /&gt;DATABASE_USER = 'nikli'&lt;br /&gt;DATABASE_PASSWORD = 'drowssap&lt;br /&gt;DATABASE_HOST = ''&lt;br /&gt;DATABASE_PORT = ''&lt;br /&gt;&lt;br /&gt;MEDIA_ROOT = '/var/www/GOF'&lt;br /&gt;MEDIA_URL = 'http://localhost/gof/'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;settings_local.py dosyası settings.py ile aynı klasörde olmalıdır. Dosyalarınızı FTP ile production sunucusuna gönderirken aman dikkat edin settings_local.py dosyasını göndermeyin.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2296791868291929959-3127240555179272911?l=ilkinbalkanay.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkinbalkanayonblogspot/~4/2gLT-awxSqc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ilkinbalkanay.blogspot.com/feeds/3127240555179272911/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2296791868291929959&amp;postID=3127240555179272911" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/3127240555179272911?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/3127240555179272911?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ilkinbalkanayonblogspot/~3/2gLT-awxSqc/django-uygulamasn-deploy-etmek.html" title="Django uygulamasını deploy etmek" /><author><name>İlkin Ulaş BALKANAY</name><uri>http://www.blogger.com/profile/01068439091401215925</uri><email>ilkinulas@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="07256384748112435996" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://ilkinbalkanay.blogspot.com/2008/12/django-uygulamasn-deploy-etmek.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUDQH45fip7ImA9WxRWE0w.&quot;"><id>tag:blogger.com,1999:blog-2296791868291929959.post-2849401521069316273</id><published>2008-10-29T23:06:00.004+02:00</published><updated>2008-10-29T23:37:51.026+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-29T23:37:51.026+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="balayı" /><category scheme="http://www.blogger.com/atom/ns#" term="maldives" /><category scheme="http://www.blogger.com/atom/ns#" term="tatil" /><category scheme="http://www.blogger.com/atom/ns#" term="maldivler" /><title>Sonunda evlilik telaşı bitti</title><content type="html">&lt;div style="text-align: justify;"&gt;22 Ekim'de balayı tatilinden dönüp, 23 Ekim'de iş başı yaptım. Daha yeni yeni tatil havasından çıkıyorum. Söz verdiğim gibi yazılara evlilik sonrası daha çok zaman ayıracağım.&lt;br /&gt;&lt;br /&gt;Geçenlerde günlüğe yeni bir yazı yazmak için kolları sıvamıştım ki ne göreyim TELEKOMÜNİKASYON İLETİŞİM BAŞKANLIĞI yine yapacağını yapmış; Blogger servisine Türkiye'den erişimi kapatmış. Tünel servisleri aracılığı ile erişim açık olmasına rağmen içimdeki yazma hevesini kırdığı için tatil sonrası ilk yazım bugüne kadar sarktı.&lt;br /&gt;&lt;br /&gt;Balayı tatilimiz için Nurten'le Maldivler'e gittik. Yüzlerce adadan oluşan bu ülkede kendi bütçemize göre bir ada seçtik ve çantamızı sırtlanıp Maldivler'in yolunu tuttuk. Katar aktarmalı 10 saatlik bir uçak yolculuğundan sonra Maldivler'in başkenti Male'ye ulaştık. Male'den tatilimizi geçireceğimiz &lt;a href="http://www.sunislandmaldives.com/"&gt;Sun Island&lt;/a&gt; adasına transferimiz de deniz uçağı ile oldu. &lt;b&gt;Yeryüzündeki cennete&lt;/b&gt; benzetilen Maldivler'de 6 gün geçirdikten sonra gözümüz arkada kalarak dönüş yolculuğuna başladık.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/ilkinulas/MaldivesEkim2008"&gt;http://picasaweb.google.com/ilkinulas/MaldivesEkim2008&lt;/a&gt; adresinde tatilde çektiğimiz fotoğraflara göz atabilirsiniz.&lt;br /&gt;&lt;br /&gt;Aşağıda fotoğraf makinası ile çektiğim ve benim ilginç olduğunu düşündüğüm videolar var. İlk video &lt;b&gt; Sting ray&lt;/b&gt; denilen balığın (bu balığın türkçe ismini bilmiyorum. Bilen varsa söylesin lütfen) kendini insanlara nasıl sevdirdiğini, insanların elinden nasıl yemek yediğini görebilirsiniz.&lt;br /&gt;&lt;br /&gt;&lt;embed id="VideoPlayback" src="http://video.google.com/googleplayer.swf?docid=-4867324664508946946&amp;amp;hl=tr&amp;amp;fs=true" style="width: 400px; height: 326px;" allowfullscreen="true" allowscriptaccess="always" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;İkinci videoda ise su altı kamerasına alternatif olarak su üstü kamerası ile yaptığım çekimleri izleyebilirsiniz :)&lt;br /&gt;&lt;br /&gt;&lt;embed id="VideoPlayback" src="http://video.google.com/googleplayer.swf?docid=-2306701613797376156&amp;amp;hl=tr&amp;amp;fs=true" style="width: 400px; height: 326px;" allowfullscreen="true" allowscriptaccess="always" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;Maldivler bizim için unutulmaz bir deneyim oldu. İlk başta Maldivler'de bir hafta tatil için harcayacığımız para ile Türkiye'de bir ay tatil yaparız diye düşünüyordum. Fakat beyaz kumlar üzerinde güneşlenip,ılık okyanus suyunda mercanlar ve rengarenk balıklar arasında  yüzdükten sonra balayımız için Maldivler'i seçmenin ne kadar iyi bir tercih olduğunu anladım. &lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2296791868291929959-2849401521069316273?l=ilkinbalkanay.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkinbalkanayonblogspot/~4/9ETekxQa3gs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ilkinbalkanay.blogspot.com/feeds/2849401521069316273/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2296791868291929959&amp;postID=2849401521069316273" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/2849401521069316273?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/2849401521069316273?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ilkinbalkanayonblogspot/~3/9ETekxQa3gs/sonunda-evlilik-tela-bitti.html" title="Sonunda evlilik telaşı bitti" /><author><name>İlkin Ulaş BALKANAY</name><uri>http://www.blogger.com/profile/01068439091401215925</uri><email>ilkinulas@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="07256384748112435996" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://ilkinbalkanay.blogspot.com/2008/10/sonunda-evlilik-tela-bitti.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIBQXg_fip7ImA9WxRRFE4.&quot;"><id>tag:blogger.com,1999:blog-2296791868291929959.post-4687453945998850597</id><published>2008-09-26T11:48:00.004+03:00</published><updated>2008-09-26T16:42:30.646+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-26T16:42:30.646+03:00</app:edited><title>Evleniyorum...</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xwxnlWIalMQ/SNy1Q7v8c0I/AAAAAAAAAdQ/sC_a6my6IXY/s1600-h/nurten_ilkin_davetiye.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_xwxnlWIalMQ/SNy1Q7v8c0I/AAAAAAAAAdQ/sC_a6my6IXY/s320/nurten_ilkin_davetiye.jpg" alt="" id="BLOGGER_PHOTO_ID_5250270568128475970" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Selam dostlar, uzun zamandır yazamadım. Bu suskunluğumu güzel bir haberle bozayım dedim. 11 Ekim 2008'de memleketim Denizli'de evleniyorum. 8 Ekim 2008 Çarşamba günü İstanbul, Salon Palmina'da bir düğünümüz var, hemen sonrasında 11 Ekim Cumartesi Denizli'de nikah törenimiz var. Tüm dostlarım davetlidir.&lt;br /&gt;&lt;br /&gt;Evlilik telaşı biter bitmez yazılarıma devam edeceğim.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2296791868291929959-4687453945998850597?l=ilkinbalkanay.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkinbalkanayonblogspot/~4/_7uDEbjKHq4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ilkinbalkanay.blogspot.com/feeds/4687453945998850597/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2296791868291929959&amp;postID=4687453945998850597" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/4687453945998850597?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/4687453945998850597?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ilkinbalkanayonblogspot/~3/_7uDEbjKHq4/evleniyorum.html" title="Evleniyorum..." /><author><name>İlkin Ulaş BALKANAY</name><uri>http://www.blogger.com/profile/01068439091401215925</uri><email>ilkinulas@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="07256384748112435996" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_xwxnlWIalMQ/SNy1Q7v8c0I/AAAAAAAAAdQ/sC_a6my6IXY/s72-c/nurten_ilkin_davetiye.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://ilkinbalkanay.blogspot.com/2008/09/evleniyorum.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUNQHk-cSp7ImA9WxJaEk4.&quot;"><id>tag:blogger.com,1999:blog-2296791868291929959.post-1237333879015473383</id><published>2008-08-11T20:52:00.003+03:00</published><updated>2009-08-02T21:04:51.759+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-02T21:04:51.759+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="qrcode" /><title>Google Chart API artık QR Codes da destekliyor</title><content type="html">Günlüğe ilk yazılarımı eklemeye başladığımda QRCode'lar ile ilgili bir &lt;a href="http://ilkinbalkanay.blogspot.com/2008/02/qrcodes-in-action.html"&gt; yazı &lt;/a&gt; yayınlamıştım. QRCode'un ne olduğundan, nerelerde kullanılabileceğinden bahsetmiştim. Geçenlerde Google Code Blog'ta '&lt;a href="http://feeds.feedburner.com/~r/blogspot/Dcni/~3/331921964/qr-codes-now-available-on-google-chart.html"&gt;QR Codes now available on the Google Chart API&lt;/a&gt;' yazısını görünce bunu siz sevgili blog okuyucularımla paylaşayım istedim.&lt;br /&gt;Google Chart API ile nasıl QR code oluşturulacağı &lt;a href="http://code.google.com/apis/chart/#qrcodes"&gt;bu sayfada&lt;/a&gt; detaylı bir şekilde anlatılmış. Ben olayı bir tane örnek vererek özetlemek istiyorum.&lt;br /&gt;Google'a size bir QR code üretmesi için aşağıdaki bilgileri vermeniz gerekiyor:&lt;br /&gt;&lt;li&gt;&lt;b&gt;chs&lt;/b&gt;  : QR Code olarak çizilecek resmin boyutu (chart size)&lt;br /&gt;&lt;li&gt;&lt;b&gt;cht&lt;/b&gt;  : Chart tipi&lt;br /&gt;&lt;li&gt;&lt;b&gt;chl&lt;/b&gt;  : Encode edilecek text. (örneğin bir URL)&lt;br /&gt;&lt;li&gt;&lt;b&gt;choe&lt;/b&gt; : output encoding (örneğin UF-8)&lt;br /&gt;QR Code grafiğini çizdirmek için &lt;i&gt;http://chart.apis.google.com/chart&lt;/i&gt; adresine, yukarıda sıralanan parametrelerin gönderilmesi gerekiyor. Bunu HTTP GET ile yapabilirsiniz. &lt;i&gt;http://www.oksijen.com&lt;/i&gt; URL'ini QR Code içine gömmek için aşağıdaki resim URL'ini kullanabiliriz.&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;img src="http://chart.apis.google.com/chart?cht=qr&amp;chs=200x200&amp;chl=http://www.oksijen.com"/&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;img src="http://chart.apis.google.com/chart?cht=qr&amp;chs=200x200&amp;chl=http://www.oksijen.com"/&gt;&lt;br /&gt;&lt;/td&gt;&lt;tr&gt;&lt;/table&gt;&lt;br /&gt;Yukarıdaki resmin içerisinde &lt;i&gt;http://www.oksijen.com&lt;/i&gt; URL'inin gömülü olduğuna inanmayanlar &lt;br /&gt;herhangi bir J2ME QR Code okuyucusunu cep telefonlarına kurup resmin içinde ne kodlandığını görebilirler.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2296791868291929959-1237333879015473383?l=ilkinbalkanay.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkinbalkanayonblogspot/~4/PHVORDPyjcI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ilkinbalkanay.blogspot.com/feeds/1237333879015473383/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2296791868291929959&amp;postID=1237333879015473383" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/1237333879015473383?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/1237333879015473383?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ilkinbalkanayonblogspot/~3/PHVORDPyjcI/google-chart-api-artk-qr-codes-da.html" title="Google Chart API artık QR Codes da destekliyor" /><author><name>İlkin Ulaş BALKANAY</name><uri>http://www.blogger.com/profile/01068439091401215925</uri><email>ilkinulas@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="07256384748112435996" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://ilkinbalkanay.blogspot.com/2008/08/google-chart-api-artk-qr-codes-da.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUNQHk-cSp7ImA9WxJaEk4.&quot;"><id>tag:blogger.com,1999:blog-2296791868291929959.post-8006324564270257581</id><published>2008-06-28T22:24:00.003+03:00</published><updated>2009-08-02T21:04:51.759+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-02T21:04:51.759+03:00</app:edited><title>TechCrunch &amp; Webrazzi MeetUp Notları</title><content type="html">&lt;div style="text-align: justify;"&gt;Bugün &lt;a href="http://www.webrazzi.com/2008/06/24/techcrunch-webrazzi-meetup-etkinlik-programi/"&gt;TechCrunch &amp;amp; Webrazzi MeetUp&lt;/a&gt;'a katıldım. &lt;a href="http://maps.google.com/maps?f=q&amp;amp;hl=tr&amp;amp;geocode=&amp;amp;q=istanbul+conrad&amp;amp;jsv=117&amp;amp;sll=41.1798,28.9915&amp;amp;sspn=0.046835,0.10952&amp;amp;ie=UTF8&amp;amp;ei=ebdmSIWfC4Xw2gKD5ZHoDg&amp;amp;cd=1&amp;amp;cid=41049400,29008000,10171930010601912655&amp;amp;li=lmd&amp;amp;z=14&amp;amp;t=m"&gt;Conrad/Istanbul Otel&lt;/a&gt;'de gerçekleşen etkinlik ile ilgili notlarımı paylaşmak istiyorum. Arda Kutsal'ı böyle bir etkinlik düzenlediği için tebrik ediyorum. Titizlikle seçilmiş panel konuları ve konuşmacılar bu güneşli cumartesi gününü bir konferans salonunda sıkılmadan geçirmeme yetti. Yaklaşık 400 kişinin katıldığı MeetUp'ta 7 ana panel vardı:&lt;/div&gt;&lt;ol style="text-align: justify;"&gt;&lt;li&gt;Sosyal platformlar ve sosyal medyada pazarlama&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Kullanıcı içeriğinin yarattığı Web 2.0 hukuku&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Online reklam pazarı ve geleceği&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Türkiye’de web girişimciliği, yatırım imkanları ve çıkış stratejileri&lt;br /&gt;&lt;/li&gt;&lt;li&gt;StartupPad&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://grou.ps/"&gt;Grou.ps&lt;/a&gt; Global Announcement&lt;br /&gt;&lt;/li&gt;&lt;li&gt;European Startup Scene&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h4 style="text-align: justify;"&gt;Sosyal platformlar ve sosyal medyada pazarlama:&lt;/h4&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;li style="text-align: justify;"&gt;&lt;a href="http://www.kariyer.net/"&gt;Kariyer.net&lt;/a&gt;'i temsilen gelen Pazarlama Direktörü Ayça Arsan, Kariyer.net'in reklam harcamalarının 40%'ının internet reklamcılığına ayrıldığını söyledi. Internet reklamcılığının Türkiye'deki reklam piyasasının 2%'sini oluşturduğunu duyduğumda çok şaşırdım.&lt;br /&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;Can Karatoprak, meşhur facebook uygulması &lt;a href="http://apps.facebook.com/apps/application.php?id=5263964821"&gt;Rakı Sofrası&lt;/a&gt;'nın yazarı, Rakı Sofrası'nın 1 milyon 50 bin üyesi olduğunu söyledi. Rakı Sofrası gibi basit bir uygulamanın bir şirketi çekip çevirecek paralar kazandırdığını duymak, dikkatimi yeniden facebook platformuna çevirmeme sebep oldu. Can Karatoprak'ın dediğine göre şirketi &lt;a href="http://www.bizbilisim.com.tr/"&gt;BizBilişim Çözümleri&lt;/a&gt;,  &lt;a href="http://www.mey.com.tr/"&gt;Mey İçki&lt;/a&gt; ile sağlam bir reklam anlaşması yapmış.&lt;br /&gt;&lt;h4&gt;Kullanıcı içeriğinin yarattığı Web 2.0 hukuku&lt;/h4&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;a href="http://www.eksisozluk.com/"&gt;Ekşisözlük&lt;/a&gt;'ünde avukatlığını yapan &lt;b&gt;Av. Başak Purut&lt;/b&gt;, Türkiye'de bazı savcıların Internet'in ne olduğundan haberlerinin olmadığını, bu savcılar yüzünden youtube ve wordpress'in uzun süreler kapalı kaldığını söyledi.&lt;br /&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;a href="http://www.tbd.org.tr/subeler/index.php?sube=3"&gt;TBD İstanbul&lt;/a&gt; Yönetim Kurulu Üyesi Av. Ceyda Cimilli Akaydın, Türkiye'deki bilişim davalarında bilirkişi sıkıntısının yaşandığını söyledi. Ceyda Hanım, isteyenlerin mahkemelere bilişim alanında bilirkişi olmak için başvurabileceklerini ve bilirkişi olarak görev yapmaları durumunda dava başına 300-400 YTL gibi paralar alabileceklerini söyledi. Bu sözün üzerinde salondakilerin bir anda gözleri parladı :)&lt;br /&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;Günün en eğlenceli konuşması Radikal Gazetesi Teknoloji Editörü &lt;a href="http://mserdark.com/"&gt;Serdar Kuzuloğlu&lt;/a&gt;'nun konuşmasıydı. Internetin Türkiye'ye gelişinden günümüze kadar geçen sürede kendisinin bilişim adına yaptıklarını anlattı. Radikal Gazetesindeki bir habere yapılan yorum yüzünden kapama davası açılması üzerine, veritabanından elle ilgili yorumu silip davadan  yırttığını anlattığında salon kahkahalara boğuldu.&lt;br /&gt;&lt;h4&gt;Online reklam pazarı ve geleceği&lt;/h4&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;Bu panel'de, yayın yapanlarla reklam verenleri buluşturan şirket sahipleri Okyar Özlüpınar - Yönetici Ortak, &lt;a href="http://www.reklamz.com/"&gt;ReklamZ&lt;/a&gt; ve Sarper Danış – Ortak, &lt;a href="http://www.zapmedya.com/"&gt;ZapMedya&lt;/a&gt; konuşmalar yaptı. Türkiye'de, reklam verenlerin Internet'in gücünden habersiz olduklarından basettiler. Reklam alanında geridönüşün en fazla olduğu ortamın Internet ortamı olduğunu söylediler.&lt;br /&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;Google Türkiye Ülke Müdürü Bülent Hiçsönmez'in, Google AdWords hakkında konuşmaması ilgi çekiciydi. Herkesin bildiği klasik "Internet gelecektir" sözleriyle konuşmasını geçiştirdi.&lt;br /&gt;&lt;h4&gt;Türkiye’de web girişimciliği, yatırım imkanları ve çıkış stratejileri&lt;/h4&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;Panelin bu bölümünde Türkiye'deki başarılı girişimcilere ve bu girişimcilerin deneyimlerine yer verildi.&lt;br /&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;a href="http://www.cember.net/"&gt;Cember.net&lt;/a&gt; kurucusu Çağlar Erol, Çember.net'i eşi ile beraber yazdığını 2 sene gibi kısa bir sürede 4 milyon dolara XING'e sattığını anlattı.&lt;br /&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;Startup şirketlerinin ömürlerinin çok uzun olmadığından, sektörde palazlandıktan sonra devler tarafından satın alınmadıklarında web'in karanlık sayfalarında kaldıkları söylendi. Girişimcilere para yatıran &lt;a href="http://www.leventure.com/"&gt;LeVenture&lt;/a&gt;'nin kurucu ortaklarından Cem Dalgıç, startup'ların mutlaka bir &lt;a href="http://en.wikipedia.org/wiki/Exit_plan"&gt;çıkış planının&lt;/a&gt; olması gerektiği söyledi.&lt;br /&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;Devrim Demirel &lt;a href="http://www.blogcu.com/"&gt;Blogcu.com&lt;/a&gt;'u Nokta A.Ş. nasıl sattığını, Ersan Özer de &lt;a href="http://www.itiraf.com/"&gt;itiraf.com&lt;/a&gt;'u GittiGidiyor'a nasıl sattığını anlattı. Milyon dolarla ifade edilen rakamlar inanın başımı  döndürmeye yetti.&lt;br /&gt;&lt;h4&gt;StartupPad&lt;/h4&gt;&lt;br /&gt;&lt;li&gt;Kindo.com, Mekanist.net, Mülakat.Net ,TakasMerkezi.com, Wridea tanıtımları yapıldı.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Benim için günün en şok edici anı, &lt;a href="http://www.mekanist.net/"&gt;Mekanist.net&lt;/a&gt;'in,  yaklaşık bir sene önce karşılaştığım ve bunun yerli versiyonunu yapabilir miyim acaba diye düşündüğüm &lt;a href="http://www.yelp.com/"&gt;yelp.com&lt;/a&gt;'un yerli versiyonu olduğunu gördüğüm andı. &lt;/li&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2296791868291929959-8006324564270257581?l=ilkinbalkanay.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkinbalkanayonblogspot/~4/Y2xQMJOaDz4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ilkinbalkanay.blogspot.com/feeds/8006324564270257581/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2296791868291929959&amp;postID=8006324564270257581" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/8006324564270257581?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/8006324564270257581?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ilkinbalkanayonblogspot/~3/Y2xQMJOaDz4/techcrunch-webrazzi-meetup-notlar.html" title="TechCrunch &amp; Webrazzi MeetUp Notları" /><author><name>İlkin Ulaş BALKANAY</name><uri>http://www.blogger.com/profile/01068439091401215925</uri><email>ilkinulas@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="07256384748112435996" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://ilkinbalkanay.blogspot.com/2008/06/techcrunch-webrazzi-meetup-notlar.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IDQHs9fSp7ImA9WxdRE0w.&quot;"><id>tag:blogger.com,1999:blog-2296791868291929959.post-4459876292289535715</id><published>2008-06-01T11:32:00.005+03:00</published><updated>2008-06-01T13:19:31.565+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-01T13:19:31.565+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="genel barış manço" /><title>Barış Manço ve Cacık</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_xwxnlWIalMQ/SEJkImtTBuI/AAAAAAAAAcw/GdABljCg4Zg/s1600-h/hiyar.jpg"&gt;&lt;img style="float:right; margin:0 0 0px 0px;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_xwxnlWIalMQ/SEJkImtTBuI/AAAAAAAAAcw/GdABljCg4Zg/s320/hiyar.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5206834218185983714" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Çocukluğumdan beri severek dinlerim Barış Manço'yu. "Barış Manço ile 7'den 77'ye" programını her pazar izlerdik ailecek. Daha sonra "Adam Olacak Çocuk" ile çıktı karşımıza Barış Abi. Çok iyi hatırlıyorum, üniversitede hazırlık okuduğum zamanlarda, "Barış Manço Taksim Marmara Cafe'de cam kenarında oturuyor" diye bir haber geldi biz üniversite kantininde otururken. Yarım saatte Ortaköy'den Taksim'e uçtuk resmen. Baktik ki harbiden Barış Manço Marmara Cafe'de üst katta cam kenarında oturmuş birileriyle konuşuyor. Yarım saat boyunca The Marmara'nın karşısından izlemiştik Barış Abi'yi.&lt;br /&gt;&lt;br /&gt;Bu sabah "Sözüm Meclisten Dışarı" albümünden bir parçasını dinledim. Kendisini zaman zaman hıyar gibi hissedenler için bu parçanın sözlerini buradan paylaşmak istedim. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Sözüm meclisten dışarı dostlar&lt;/strong&gt; Söz-Müzik: Barış Manço&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;CACIK &lt;br /&gt;&lt;br /&gt;Bugünlerde kendimi hıyar gibi hissediyorum&lt;br /&gt;Hani dilim dilim doğrasalar beni&lt;br /&gt;Marmara Ege Karadeniz ve hatta Akdeniz cacık olur diyorum&lt;br /&gt;&lt;br /&gt;Derdim öylesine büyük ki dostlar&lt;br /&gt;Kırka yarıp yine kırka bölseler&lt;br /&gt;Ve kırk bostana gübre diye serpseler&lt;br /&gt;Kırkbin tane ot biter de kırkbin derde deva olur diyorum&lt;br /&gt;&lt;br /&gt;Ne oldu bana böyle durup dururken&lt;br /&gt;&lt;br /&gt;Oğlan aldı başını gitti kız zaten lafımı dinlemezdi&lt;br /&gt;Düğmem kopuk paçam sökük oramda buramda çengelli iğneler&lt;br /&gt;Bir de çengelli iğne nazar bozar derler&lt;br /&gt;&lt;br /&gt;Hanımın çorabı kaçık başında bigudiler&lt;br /&gt;Karabaş bile, karabaş bile suratıma bakıp bakıp havlıyor&lt;br /&gt;Öğünmek gibi olmasın ama dostlar&lt;br /&gt;Kendimi hıyar gibi hissediyorum&lt;br /&gt;&lt;br /&gt;Hani ince kıyım doğrasalar beni Akdeniz cacık olur diyorum&lt;br /&gt;&lt;br /&gt;Ve hatta Atlas okyanusu ve hatta Hint okyanusu&lt;br /&gt;Ve hatta hatta Büyük okyanus bile cacık olur diyorum&lt;br /&gt;Böyle cacığa rakı mı dayanır&lt;br /&gt;&lt;br /&gt;Çivi çiviyi söker derler soğuktan donanı buzla ovarlar&lt;br /&gt;Ben zaten yanmışım dostlar peki beni fırına mı koysalar&lt;br /&gt;Zeytin suyuna kuru ekmek böyle gelmiş böyle gidecek&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2296791868291929959-4459876292289535715?l=ilkinbalkanay.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkinbalkanayonblogspot/~4/E_KShoCjm5E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ilkinbalkanay.blogspot.com/feeds/4459876292289535715/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2296791868291929959&amp;postID=4459876292289535715" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/4459876292289535715?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/4459876292289535715?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ilkinbalkanayonblogspot/~3/E_KShoCjm5E/bar-mano-ve-cack.html" title="Barış Manço ve Cacık" /><author><name>İlkin Ulaş BALKANAY</name><uri>http://www.blogger.com/profile/01068439091401215925</uri><email>ilkinulas@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="07256384748112435996" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://bp1.blogger.com/_xwxnlWIalMQ/SEJkImtTBuI/AAAAAAAAAcw/GdABljCg4Zg/s72-c/hiyar.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://ilkinbalkanay.blogspot.com/2008/06/bar-mano-ve-cack.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUNQHk-cSp7ImA9WxJaEk4.&quot;"><id>tag:blogger.com,1999:blog-2296791868291929959.post-2453124102119821096</id><published>2008-05-31T21:26:00.009+03:00</published><updated>2009-08-02T21:04:51.759+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-02T21:04:51.759+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sinema" /><category scheme="http://www.blogger.com/atom/ns#" term="screen scraping" /><category scheme="http://www.blogger.com/atom/ns#" term="API" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><title>Python Sinema API'si</title><content type="html">&lt;div style="text-align: justify;"&gt;Vizyondaki filmleri, şehirdeki salonları , filmlerin hangi salonda saat kaçta gösterildiğini bulmaya yarayan bir API yazmaya karar verdim. (Kardeşim ne derdin var durduk yere insan API yazmaya karar verir mi diyenleriniz olabilir. Neden böyle bir API'ye ihtiyaç duyduğumu ilerleyen yazılarda anlatacağım.) Filmler ile ilgili bilgileri, seçeceğim bir sinema sitesinden HTML ayıklama yöntemi (screen scraping) ile almaya karar verdim. Daha doğrusu bu şekilde yapmak zorunda kaldım çünkü &lt;a href="http://del.icio.us/help/api/"&gt;delicious&lt;/a&gt;, &lt;a href="http://www.flickr.com/services/api/"&gt;flickr&lt;/a&gt;, &lt;a href="http://apidoc.digg.com/"&gt;digg&lt;/a&gt; gibi kullanıcılarına API desteği veren türkçe sinema sitesi bulamadım.&lt;br /&gt;&lt;br /&gt;Sinema sitelerini teker teker gezerken MyNet'in satın aldığı Beyazperde sitesi dikkatimi cekti.&lt;br /&gt;&lt;a href="http://beyazperde.mynet.com/"&gt;Beyazperde&lt;/a&gt; sitesi anlaşılabilir, temiz URL'ler kullanan ender türkçe sitelerden birisi. Ne demek istediğimi aşağıdaki URL'lere bakınca anlayabilirsiniz.&lt;br /&gt;&lt;/div&gt;&lt;li style="text-align: justify;"&gt;http://beyazperde.mynet.com/salon/&lt;strong&gt;10&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;http://beyazperde.mynet.com/film/&lt;strong&gt;3945&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style="text-align: justify;"&gt;http://beyazperde.mynet.com/seanslar/&lt;strong&gt;3945&lt;/strong&gt;/sehir/&lt;strong&gt;462&lt;/strong&gt;&lt;br /&gt;Genelde sinemaya Mecidiyekö-Profilo AFM'de gidiyorum. Profilo AFM'nin Beyazperde'deki salon numarası 10 olduğu için gösterimdeki filmleri görmek için uzun uzun ana sayfaya git, şehir seç, salon seç işlemleri yapmıyorum. Firefox'ta adres çubuğuna  &lt;a href="http://beyazperde.mynet.com/salon/10"&gt;http://beyazperde.mynet.com/salon/10&lt;/a&gt; yazman AFM Profilo'da gösterimdeki filmlere erişmeme yetiyor.&lt;br /&gt;&lt;br /&gt;Beyazperde sitesindeki filmleri, salonları, seanslari html içerisinden ayıklayabilmek için &lt;a hre="" f="http://www.crummy.com/software/BeautifulSoup/"&gt;BeautifulSoup&lt;/a&gt; html-xml parser'ını kullandım. BeautifulSoup'tan &lt;a href="http://www.blogger.com/post-create.g?blogID=2296791868291929959"&gt;bu yazımda&lt;/a&gt; da bahsetmiştim. Ve ortaya &lt;a href="http://gsu.linux.org.tr/%7Eilkinulas/python/sinema.py"&gt;sinema.py&lt;/a&gt; adresinden indirebileceğiniz basit bir sinema sever API'si çıktı.&lt;br /&gt;&lt;br /&gt;Örneklerle API'nin nasıl kullanıldığına bakalım.&lt;br /&gt;Vizyondaki filmleri listelemek için aşağıdaki örnekteki gibi &lt;strong&gt;vizyondakiFilmler&lt;/strong&gt; fonksiyonu kullanılıyor.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&gt;&gt;&gt; import sinema&lt;br /&gt;&gt;&gt;&gt; filmler=sinema.vizyondakiFilmler()&lt;br /&gt;&gt;&gt;&gt; len(filmler)&lt;br /&gt;75&lt;br /&gt;&gt;&gt;&gt; filmler.keys()&lt;br /&gt;[u'3922', u'3949', u'3920', u'3711', u'3808', u'3902', u'3835', u'3869', u'3941', u'3634', &lt;br /&gt;u'3867', u'3800', u'3946', u'3947', u'3916', u'3958', u'3956', u'3926', u'3734', u'2601', &lt;br /&gt;u'3910', u'3305', u'3911', u'3934', u'3948', u'2812', u'3964', u'3793', u'3845', u'1694', &lt;br /&gt;u'3855', u'3898', u'3918', u'3862', u'3978', u'3897', u'3805', u'3844', u'3780', u'3915', &lt;br /&gt;u'3873', u'3816', u'3847', u'3809', u'3833', u'3953', u'3952', u'3872', u'3950', u'3957', &lt;br /&gt;u'3930', u'3919', u'3945', u'3870', u'3936', u'3876', u'3932', u'3959', u'3885', u'3887', &lt;br /&gt;u'3837', u'3931', u'3883', u'3882', u'3612', u'3888', u'3871', u'3758', u'1683', u'3143', &lt;br /&gt;u'3962', u'3963', u'3960', u'3961', u'3825']&lt;br /&gt;&gt;&gt;&gt; filmler['1694']&lt;br /&gt;u'Indiana Jones ve Kristal Kafatas\u0131 Krall\u0131'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Seçilen filmin gösterimde olduğuşehirlerin listesi için &lt;strong&gt;filminGosterildigiSehirler&lt;/strong&gt; fonksiyonu çağırılır.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&gt;&gt;&gt; sehirler=sinema.filminGosterildigiSehirler('1694')&lt;br /&gt;&gt;&gt;&gt; sehirler&lt;br /&gt;{u'216': u'\u0130stanbul Anadolu', u'318': u'K\u0131r\u0131kkale', u'212': u'\u0130stanbul &lt;br /&gt;Avrupa', u'312': u'Ankara', u'452': u'Ordu', u'242': u'Antalya', u'454': u'Giresun', u'332': &lt;br /&gt;u'Konya', u'392': u'K\u0131br\u0131s', u'258': u'Denizli', u'252': u'Mu\u011fla', u'236': &lt;br /&gt;u'Manisa', u'256': u'Ayd\u0131n', u'232': u'\u0130zmir', u'248': u'Burdur', u'322': u'Adana', &lt;br /&gt;u'288': u'K\u0131rklareli', u'346': u'Sivas', u'326': u'Hatay', u'342': u'Gaziantep', u'422': &lt;br /&gt;u'Malatya', u'362': u'Samsun', u'284': u'Edirne', u'286': u'\xc7anakkale', u'324': u'Mersin', &lt;br /&gt;u'442': u'Erzurum', u'462': u'Trabzon', u'262': u'\u0130zmit', u'246': u'Isparta', u'266': &lt;br /&gt;u'Bal\u0131kesir', u'386': u'K\u0131r\u015fehir', u'264': u'Adapazar\u0131', u'226': u'Yalova', &lt;br /&gt;u'224': u'Bursa', u'222': u'Eski\u015fehir', u'282': u'Tekirda\u011f', u'272': u'Afyon', u'352':&lt;br /&gt; u'Kayseri', u'412': u'Diyarbak\u0131r', u'372': u'Zonguldak', u'374': u'Bolu'}&lt;br /&gt;&gt;&gt;&gt; sehirler['212']&lt;br /&gt;u'\u0130stanbul Avrupa'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Seçilen filmin şehirde hangi salonlarda gösterildiğini bulmak için &lt;strong&gt;sehirdekiSalonlar&lt;/strong&gt; fonksiyonu kullanılıyor.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&gt;&gt;&gt; salonlar = sinema.sehirdekiSalonlar('1694','212')&lt;br /&gt;&gt;&gt;&gt; salonlar&lt;br /&gt;[(u'1120', u'Adapazar\u0131 Cinebonus (Ada)', [u'11:00', u'12:15', u'13:30', u'15:00', u'16:15',&lt;br /&gt; u'17:45', u'19:00', u'20:30', u'21:45', u'23:15']), (u'1000', u'Akatlar Finansbank AFM &lt;br /&gt;Mayadrom', [u'11:15', u'13:45', u'16:15', u'18:45', u'21:15']), (u'1081', u'Bak\u0131rk\xf6y &lt;br /&gt;Cinebonus (Capacity)', [u'11:00', u'11:00', u'12:00', u'13:30', u'13:45', u'16:15', u'16:30', &lt;br /&gt;u'19:00', u'19:15', u'21:45', u'22:00', u'24:30', u'(Cuma, Cmts 24:45']), (u'1118', &lt;br /&gt;u'Beylikd\xfcz\xfc Cine Marka', [u'11:00', u'12:15', u'13:30', u'14:45', u'16:00', u'17:15', &lt;br /&gt;u'18:30', u'19:45', u'21:00', u'22:15']), (u'1082', u'Beylikd\xfcz\xfc Fox City', [u'11:30', &lt;br /&gt;u'14:00', u'16:30', u'19:00', u'21:30']), (u'1117', u'Esentepe Cinebonus (Astoria)', [u'11:00', &lt;br /&gt;u'12:15', u'13:30', u'14:45', u'16:15', u'17:30', u'19:00', u'20:15', u'21:45', u'(Cuma, Cmts &lt;br /&gt;23:0............&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; salonlar[11]&lt;br /&gt;(u'1067', u'\u0130stinye AFM Park', [u'10:50', u'11:30', u'12:25', u'13:55', u'14:15', u'15:30', &lt;br /&gt;u'17:00', u'17:15', u'18:30', u'19:00', u'20:00', u'21:30', u'21:50'])&lt;br /&gt;&gt;&gt;&gt; salonlar[11][2]&lt;br /&gt;[u'10:50', u'11:30', u'12:25', u'13:55', u'14:15', u'15:30', u'17:00', u'17:15', u'18:30', &lt;br /&gt;u'19:00', u'20:00', u'21:30', u'21:50']&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ve son olarak seçilen salonda gösterilen filmleri bulmak için &lt;strong&gt;salondakiFilmler&lt;/strong&gt; fonksiyonu kullanılıyor.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&gt;&gt;&gt; filmler=sinema.salondakiFilmler('10')&lt;br /&gt;&gt;&gt;&gt; filmler&lt;br /&gt;[(u'3945', u'88 Dakika', [u'11:50', u'14:20', u'16:50', u'19:30', u'21:50']), (u'1694', u'Indiana &lt;br /&gt;Jones ve Kristal Kafatas\u0131 Krall\u0131\u011f\u0131', [u'10:50', u'11:10', u'13:30', u'13:50', &lt;br /&gt;u'16:20', u'16:30', u'19:00', u'19:10', u'21:30', u'21:45']), (u'3964', u'O... \xc7ocuklar&lt;br /&gt;\u0131', [u'11:20', u'14:00', u'16:45', u'19:15', u'21:55']), (u'3949', u'\xd6l\xfcmc\xfcl &lt;br /&gt;Oyunlar', [u'11:30', u'14:10', u'16:40', u'19:20', u'22:00']), (u'3800', u'Sex and the City', &lt;br /&gt;[u'10:40', u'12:15', u'13:50', u'15:30', u'17:10', u'18:50', u'21:30', u'22:10', u'(Cuma, Cmts &lt;br /&gt;23:50'])]&lt;br /&gt;&gt;&gt;&gt; filmler[0][1]&lt;br /&gt;u'88 Dakika'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Söylemeden geçemeyeceğim python ile yazılan bu API dokumantasyonu ile beraber 100 satırı geçmiyor. Beyazperde sitesi gününbirinde html arayüzünde bir değişiklik yaparsa bu API'nin de güncellenmesi gerekiyor.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2296791868291929959-2453124102119821096?l=ilkinbalkanay.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkinbalkanayonblogspot/~4/ZmppZT2rvkc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ilkinbalkanay.blogspot.com/feeds/2453124102119821096/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2296791868291929959&amp;postID=2453124102119821096" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/2453124102119821096?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/2453124102119821096?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ilkinbalkanayonblogspot/~3/ZmppZT2rvkc/python-ile-web-sayfalarndan-bilgi-ekme.html" title="Python Sinema API'si" /><author><name>İlkin Ulaş BALKANAY</name><uri>http://www.blogger.com/profile/01068439091401215925</uri><email>ilkinulas@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="07256384748112435996" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://ilkinbalkanay.blogspot.com/2008/05/python-ile-web-sayfalarndan-bilgi-ekme.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMGQ34ycCp7ImA9WxdSGEw.&quot;"><id>tag:blogger.com,1999:blog-2296791868291929959.post-3837156671150463935</id><published>2008-05-25T16:26:00.003+03:00</published><updated>2008-05-26T19:13:42.098+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-26T19:13:42.098+03:00</app:edited><title>Takım çalışması üzerine atıp tutmalar...</title><content type="html">&lt;div style="text-align: justify;"&gt;1997 yılında Galatarasay Üniversitesin'de Bilg. Mühendisliği okumak için İstanbul'a geldim. 2001 yılından beri de (yaklaşık 7 sene olmus) yazılım işinden para kazanıyorum. Üniversite yıllarında aylık masraflarımı çıkarmasa da bütçeye katkı sağlayacak part-time bir işim vardı. Üniversiteden mezun olduktan sonra bir yıl Galatasaray Üniversitesi'nde araştırma görevlisi olarak çalıştım. Bir şey araştırdığımız yoktu ama adı öyle işte "araştırma görevlisi". Özel sektörde çalışmanın benim için daha avantajlı olacağına karar verip 2003 yılında &lt;a href="http://www.oksijen.com/"&gt;Oksijen&lt;/a&gt;'de , şimdiki adı ile Vodafone IT Hizmetleri, çalışmaya başladım.&lt;br /&gt;Ekip olarak bir yazılım projesi yürütme fırsatını ilk olarak Oksijen'de yakaladım. Daha önceden yaptığım işlerde hep tek başınaydım. Tasarım ile ilgili bütün kararlari kendim verip hangi teknolojileri kullanacağıma kendim karar veriyordum. Başarı da benimdi başarısızlık da. Yazılım dünyasında tecrübe kazandıkça takım çalışmasının bireysel çalışmalardan daha zevkli ve daha fazla tatmin edici olduğunu farkettim.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_xwxnlWIalMQ/SDrhBWZlgXI/AAAAAAAAAcA/2a8NT_Y2AhE/s1600-h/tennis.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_xwxnlWIalMQ/SDrhBWZlgXI/AAAAAAAAAcA/2a8NT_Y2AhE/s320/tennis.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5204719732689043826" /&gt;&lt;/a&gt;&lt;br /&gt;Bazıları için bireysel başarılar, takım başarılarından daha fazla tatmin edici olabilir. Klasik bir söz vardır: Mutluluk paylaştıkça artar, acılar paylaştıkça azalır. Bence takım çalışmaları için de geçerlidir bu söz. Zor bir projenin stresi takımın bütün üyelerinin omuzlarına dağıldığında tek başına katlanılamayacak stresler takım olarak üstesinden gelinebilecek bir engel halini alır. Takım başarısının verdiği haz bana göre bireysel başarılardan daha fazladır.  Tenis müsabakasında bir set almış bir sporcunun sevinciyle, futbol ya da basketbol maçını kazanmış bir takım elemanının sevincini karşılaştıracak olursanız ne demek istediğimi anlarsınız. Gol atan bir futbolcunun takım arkadaşlarına koşup gol sevinci yaşamasını bireysel sporların hangisinde görebilirsiniz?&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_xwxnlWIalMQ/SDrhP2ZlgYI/AAAAAAAAAcI/8S6Ut9i9N2Y/s1600-h/football.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_xwxnlWIalMQ/SDrhP2ZlgYI/AAAAAAAAAcI/8S6Ut9i9N2Y/s320/football.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5204719981797147010" /&gt;&lt;/a&gt;&lt;br /&gt;Takdir edilme isteği insanın doğasında vardır. Yaptığı başarılı bir iş sonunda takdir edilmeyen çoğu  insan motivasyonunu kaybetmeye yakındır. Takım çalışması ile kazanılan başarılardan sonra takım üyeleri, bireysel başarılarda olduğu kadar, takdir edilme ihtiyacı hissetmezler. Kendi çalıştığım projelerden örnek vermek istiyorum. Bir işi başardığımızda, zor bir işi en iyi şekilde yaptığımızı takım arkadaşlarımın da bilmesi, harcanan emekten takım arkadaşlarımın da haberdar olması beni tatmin etmeye yetiyor. Ayrıca bir takdir edilme ihtiyacı hissetmiyorum. Takımdaki diğer arkadaşlar için de böyle olduğunu tahmin ediyorum.&lt;br /&gt;&lt;br /&gt;İşler yetişmediğinde fazla mesai yapmak takım olarak çalışıldığında zevkli bile olabiliyor bazen. Tek kişi ile yürütülen projelerde fazla mesailerin eziyet olduğunu hepimiz biliyoruz. İşlerin yetişmediği durumlarda yöneticilerin görünmez baskısı ve işi yetiştirememenin verdiği mahçupluk hissi takım olarak çalışıldığında katlanabilir seviyelere iner. &lt;br /&gt;&lt;br /&gt;Takım çalışmasının bir başka avantajı da sizin yazdığınız kod parçasının, projenin detaylarından haberdar takımın başka bir üyesi tarafından  gözden geçirilebilmesidir. Tek kişilik projelerde "code review" yapacak kişi yine siz olacağınız için farklı bir gözün getireceği avantajlardan yararlanamayacaksınız.&lt;br /&gt;&lt;br /&gt;İşte benim takim çalışması ve bireysel çalışmalar ile ilgili naçizane fikirlerim bunlardır. &lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2296791868291929959-3837156671150463935?l=ilkinbalkanay.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkinbalkanayonblogspot/~4/t-gAPbDRtFo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ilkinbalkanay.blogspot.com/feeds/3837156671150463935/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2296791868291929959&amp;postID=3837156671150463935" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/3837156671150463935?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/3837156671150463935?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ilkinbalkanayonblogspot/~3/t-gAPbDRtFo/takm-almas-zerine-atp-tutmalar.html" title="Takım çalışması üzerine atıp tutmalar..." /><author><name>İlkin Ulaş BALKANAY</name><uri>http://www.blogger.com/profile/01068439091401215925</uri><email>ilkinulas@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="07256384748112435996" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://bp2.blogger.com/_xwxnlWIalMQ/SDrhBWZlgXI/AAAAAAAAAcA/2a8NT_Y2AhE/s72-c/tennis.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://ilkinbalkanay.blogspot.com/2008/05/takm-almas-zerine-atp-tutmalar.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkIARXw6fSp7ImA9WxdSGEw.&quot;"><id>tag:blogger.com,1999:blog-2296791868291929959.post-7122513749590430673</id><published>2008-05-25T13:36:00.006+03:00</published><updated>2008-05-26T19:15:44.215+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-26T19:15:44.215+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python shell" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><category scheme="http://www.blogger.com/atom/ns#" term="rss" /><title>Cep Telefonu ile RSS takip etmek isteyenler için : gozgezdir.appspot.com</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_xwxnlWIalMQ/SDriI2ZlgZI/AAAAAAAAAcQ/d4Xja3mN4Vw/s1600-h/appengine.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_xwxnlWIalMQ/SDriI2ZlgZI/AAAAAAAAAcQ/d4Xja3mN4Vw/s400/appengine.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5204720961049690514" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;İki ay kadar önce Google, &lt;a href="http://code.google.com/appengine"&gt;Appengine'i&lt;/a&gt; duyurduğunda hemen bir developer hesabı almak için başvurmuştum fakat appengine'e ilginin çok fazla olması sebebiyle benim başvurumu diğer binlerce başvuru gibi beklemeye almışlardı. Neyse lafı fazla uzatmayayım geçen hafta Google'dan appengine hesabımın aktif hale getirildiğini söyleyen bir mail aldım. Artık ben de google'ın alt yapısını kullanarak fantastik web uygulamaları geliştirebilecektim (Hem de beleş, cebimden kuruş para harcamadan.)&lt;br /&gt;&lt;br /&gt;Yazıya devam etmeden "Appengine de nedir yav?" diyenler için ufak bir açılama yapmak gerekiyor sanırım. Google Appengine, yazdığınız web uygulamalarını Google'ın kullandığı altyapıda çalıştırmanızı sağlayan bir sistemdir. Demek istediğim şu, siz uygulamanızı yazıyorsunuz ve Google sunucularına deploy ediyorsunuz. Google'ın veritabanlarını, Google'ın CPU'larını,  Google'ın disklerini ve Google'ın bantgenişliğini kullanarak kullanıcılarınıza web uygulamanızdan servis veriyorsunuz.&lt;br /&gt;&lt;br /&gt;Google Appengine'i tasarlayan google mühendisleri programlama dili olarak Python'u seçmişler. Yani Appengine'e deploy edilecek web uygulamasının Python ile yazılması gerekiyor. İleriki sürümlerinde Appengine'in Ruby'yi de destekleceğinden bahsediliyor. Günün birinde Java'yı da desteklerler mi bilmiyorum ama ben Python ile web uygulamalarının ne kadar kolay yazıldığını gördükten sonra java ile bu işe bir daha hayatta bulaşmam :)&lt;br /&gt;&lt;br /&gt;Google Appengine üzerinden çalıştırmayı düşündüğünüz web uygulamasını kafanıza göre yazamıyorsunuz. Google yazdığınız uygulamanın Google mimarisi üzerinde ölçeklenebilir olması için bazı şartlar-kısıtlar koymuş. Uygulama geliştiricilerin bu şartlara uymasını bekliyorlar. Örneğin thread'leri kullanmak yasak, Filesystem işlemleri yapmak yasak,Socket açmak yasak. Bu yasakları koymuşlar ama uygulama geliştiricilere aşağıdaki imkanları veriyorlar:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;br /&gt;&lt;li&gt;500 MB'a kadar ücretsiz alan.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Her ay 5 milyon sayfa görüntüleme. Günde 166 bin sayfa görüntüleme demek oluyor ki zaten böyle bir web uygulamanız varsa parasını verir Appengine premium hesabı alırsınız.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Uygulama geliştiriciler bir Google Appengine hesabı ile en fazla 3 uygulama çalıştırabilirler.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Socket açmak yasak demiştik fakat Appengine URL Fetch API'sini sunuyor. HTTP ve HTTPS destekliyor.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Filesystem işlemleri yapmak yasak demiştik fakat uygulamalar kendi upload ettikleri dosyaları okuyabilirler (konfigurasyon dosyalarını mesela)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Google Accounts : uygulamanızı halihazırda google'a üye olan herkes kullanabilir. Authentication Google User API ile yapılabilir.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Web uygulamaları Google Appengine Email servisini kullanarak mail atabilirler.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Appengine servislerinin bence en canalıcı olanı Datastore servisi. "Distributed data storage service" türkçeye nasıl çevireceğimi bilemedim. Datastore API'sini kullanarak milyonlarca kayıtlı tabloları Google sunucularında saklayabilirsiniz. (500MB'ı geçmemek şartıyla)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Python runtime environment kırpılarak kullandırılıyor. Socket açmak, thread  başlatmak gibi servisler kapatılmış. Fakat diğer yasaklanmamış standart Python modülleri bir uygulama için yeterli oluyor. 3rd Party modulleri uygulamanız ile beraber upload ederek kullanabilirsiniz. Örneğin ben &lt;a href="http://gozgezdir.appspot.com/"&gt;Gözgezdir'de&lt;/a&gt; RSS parser olarak &lt;a href="http://feedparser.org/"&gt;UniversalFeedParser&lt;/a&gt; kullandım.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Web_Server_Gateway_Interface"&gt;WSGI&lt;/a&gt; uyumlu web framework'leri ile çalışabiliyor. Kendi içinde Appengine WebApp Framework var. İsteyenler &lt;a href="http://www.djangoproject.com/"&gt;Django'yu&lt;/a&gt; da kullanabiliyorlar. Ben Appengine içinde gelen WebApp framework'ü kullanmayı tercih ettim.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Hem Google'ın bu yeni servisini denemek hem de uzun zamandır düşündüğüm bir projeyi yapmak için kolları sıvadım. Cep telefonundan RSS okumak için ufak bir uygulama hazırladım. Halen BETA sürümünde olan bu uygulamanın ana fikri &lt;i&gt;GPRS ile WEB' erişen küçük ekranlı cihazlar ile hesaplı bir şekilde RSS kaynaklarını dolaşmak.&lt;/i&gt; Uygulamayı tamamlamadan adresini buradan vermem doğru olur mu bilmiyorum ama belki bir kaç kişi kullanırsa tasarım ve kullanılabilirlik için benim aklıma gelmeyen fikirler verebilirler. &lt;br /&gt;Google yazdığınız appengine uygulamalarını &lt;i&gt;uygulamaadi.appspot.com&lt;/i&gt; adresinden yayınlıyor. Fakat kendi alan adınızı alıp Google üzerinden yönlendirmesini yapmanız da mümkün. Ben yine pintilik yapıp alan adına para vermedim ve &lt;a href="http://gozgezdir.appspot.com"&gt;http://gozgezdir.appspot.com&lt;/a&gt; adresinden uygulamayı yayına aldım.&lt;br /&gt;İlgilenen arkadaşlar ile kaynak kodunu paylaşabilirim. Benim gibi yıllarca Java ile yazılım geliştirmiş Java'dan başka birşeyi gözü görmeyen yazılımcı arkadaşların python ile tanışıp böyle bir dil de varmış vay be demelerini isterim açıkçası :) &lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2296791868291929959-7122513749590430673?l=ilkinbalkanay.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkinbalkanayonblogspot/~4/yTCHVRwZ20s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ilkinbalkanay.blogspot.com/feeds/7122513749590430673/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2296791868291929959&amp;postID=7122513749590430673" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/7122513749590430673?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/7122513749590430673?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ilkinbalkanayonblogspot/~3/yTCHVRwZ20s/cep-telefonu-ile-rss-takip-etmek.html" title="Cep Telefonu ile RSS takip etmek isteyenler için : gozgezdir.appspot.com" /><author><name>İlkin Ulaş BALKANAY</name><uri>http://www.blogger.com/profile/01068439091401215925</uri><email>ilkinulas@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="07256384748112435996" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://bp0.blogger.com/_xwxnlWIalMQ/SDriI2ZlgZI/AAAAAAAAAcQ/d4Xja3mN4Vw/s72-c/appengine.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://ilkinbalkanay.blogspot.com/2008/05/cep-telefonu-ile-rss-takip-etmek.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAMQ3YzeSp7ImA9WxZbFEs.&quot;"><id>tag:blogger.com,1999:blog-2296791868291929959.post-1520521197862664580</id><published>2008-04-17T23:46:00.005+03:00</published><updated>2008-04-18T00:13:02.881+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-18T00:13:02.881+03:00</app:edited><title>Nişanlandım - I am engaged!</title><content type="html">&lt;div style="text-align: justify;"&gt;Selam dostlar, 29 Mart 2008 tarihinde Nurten ile nişanlandık. Nişan resimlerini yeni yeni toparlayabildim. 19 gündür parmağımda yüzük ile dolaşıyorum ama hala alışamadım. Neyse zamanla bir yolunu bulup yüzüğü kenara kaldırırım nasıl olsa :D&lt;br /&gt;&lt;br /&gt;Resimde pişmiş kelle gibi sırıttığıma bakmayın, aslında çok stresli bir gündü benim için. Resimdeki o gülümsemenin sebebi tuzlu kahveyi içtikten sonra kızı almanın vermiş olduğu bir rahatlık olsa gerek.&lt;br /&gt;&lt;br /&gt;Bu arada resimdekileri tanıtayım, soldan sağa babam, Nurten, ben, annem ve kardeşim. Kardeşim de abimin başını bağladık sıra bana geldi diyerekten 32 dişini bizden esirgememiş, gözümden kaçmadı he he :) .&lt;br /&gt;&lt;br /&gt;Son olarak lafı fazla uzatmıyor ve darısı bekar arkadaşların başına diyorum.&lt;/div&gt;&lt;br /&gt;&lt;img src="http://gsu.linux.org.tr/%7Eilkinulas/resimler/nurten_ilkin_1.jpg" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2296791868291929959-1520521197862664580?l=ilkinbalkanay.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkinbalkanayonblogspot/~4/UfFkIel-oa8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ilkinbalkanay.blogspot.com/feeds/1520521197862664580/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2296791868291929959&amp;postID=1520521197862664580" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/1520521197862664580?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/1520521197862664580?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ilkinbalkanayonblogspot/~3/UfFkIel-oa8/nianlandm.html" title="Nişanlandım - I am engaged!" /><author><name>İlkin Ulaş BALKANAY</name><uri>http://www.blogger.com/profile/01068439091401215925</uri><email>ilkinulas@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="07256384748112435996" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://ilkinbalkanay.blogspot.com/2008/04/nianlandm.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUNQHk9eCp7ImA9WxJaEk4.&quot;"><id>tag:blogger.com,1999:blog-2296791868291929959.post-311717556058358534</id><published>2008-04-03T17:35:00.006+03:00</published><updated>2009-08-02T21:04:51.760+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-02T21:04:51.760+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python shell" /><title>Command line English-Turkish dictionary</title><content type="html">&lt;div style="text-align: justify;"&gt;I've been reading Python tutorials since I accidentally see the &lt;a href="http://www.python.org/dev/peps/pep-0020/"&gt;Zen of Python.&lt;/a&gt; I think I read enough. Now its time to get hands dirty. The best way to learn a language is to write code in that language. I have implemented a command line dictionary that fetches the Turkish definition of a given English word from the site &lt;a href="http://www.seslisozluk.com/"&gt;Sesli Sözlük&lt;/a&gt;. The python script below uses &lt;a href="http://www.crummy.com/software/BeautifulSoup/"&gt;BeautifulSoup&lt;/a&gt; HTML/XML parser for screen-scraping.&lt;br /&gt;This is &lt;strong&gt;sozluk.py&lt;/strong&gt;. It reads program arguments and constructs a URL. After fetching URL content BeatifulSoup library is used to get desired parts of the HTML page. Finally results are printed to the stdout.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;from BeautifulSoup import BeautifulSoup&lt;br /&gt;import urllib2&lt;br /&gt;import sys&lt;br /&gt;import string&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def getDefinitions(keyword):&lt;br /&gt; &lt;br /&gt; url = 'http://www.seslisozluk.com/?word='+keyword&lt;br /&gt; c=urllib2.urlopen(url)&lt;br /&gt; soup=BeautifulSoup(c.read())&lt;br /&gt; results = soup.findAll(attrs={"class" : "dict_result"})[0].contents[1].contents &lt;br /&gt; definitions = [results[x] for x in range(len(results)) if ((x+2)%3)==0]&lt;br /&gt; return [definition.replace('&amp;nbsp;', '') for definition in definitions]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if __name__ == '__main__':&lt;br /&gt; if len(sys.argv)&lt;=1:&lt;br /&gt;  print 'missing keyword.'&lt;br /&gt; else:&lt;br /&gt;  keyword =' '.join(sys.argv[1:]) &lt;br /&gt;  try:   &lt;br /&gt;   definitions = getDefinitions(keyword)&lt;br /&gt;   for i in definitions:&lt;br /&gt;    print i&lt;br /&gt;  except:&lt;br /&gt;   print "Failed to get definition of ",keyword&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This is &lt;strong&gt;sozluk.sh&lt;/strong&gt;. It is used to call Python Interpreter and execute &lt;i&gt;sozluk.py&lt;/i&gt;.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;#sozluk.py is in this folder.&lt;br /&gt;cd /home/ilkinulas/PITON/workspace&lt;br /&gt;python sozluk.py $1&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;An example usage: Getting Turkish definition of word &lt;strong&gt;'python'&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;ilkinulas@tututil:~/PITON$ sozluk.sh python&lt;br /&gt;Bir proglama dili.&lt;br /&gt;i., zool. piton. piton yilani. yılan. yılan. i., zool. piton. apollon'un öldürdüğü dev yılan. piton.&lt;br /&gt;Delfi civarında Apollon  tarafından öldürülmüş olan çok büyük bir  yılan; piton, k, Python, piton, h, zool.&lt;br /&gt;: Gaia'nın doğurduğu efsanevi yılan. Yüz tane başı, alev kusan yüz tane ağazı vardı. Apollon tarafından öldürüldü.&lt;br /&gt;piton yılanı.&lt;br /&gt;piton yılanı.&lt;br /&gt;yılan.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2296791868291929959-311717556058358534?l=ilkinbalkanay.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkinbalkanayonblogspot/~4/iPhDLu8ZIAU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ilkinbalkanay.blogspot.com/feeds/311717556058358534/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2296791868291929959&amp;postID=311717556058358534" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/311717556058358534?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/311717556058358534?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ilkinbalkanayonblogspot/~3/iPhDLu8ZIAU/command-line-english-turkish-dictionary.html" title="Command line English-Turkish dictionary" /><author><name>İlkin Ulaş BALKANAY</name><uri>http://www.blogger.com/profile/01068439091401215925</uri><email>ilkinulas@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="07256384748112435996" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://ilkinbalkanay.blogspot.com/2008/04/command-line-english-turkish-dictionary.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cGSH45eyp7ImA9WxZVGEs.&quot;"><id>tag:blogger.com,1999:blog-2296791868291929959.post-4193739224543432259</id><published>2008-03-30T12:03:00.003+03:00</published><updated>2008-03-30T12:23:49.023+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-03-30T12:23:49.023+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu linux" /><title>Ubuntu 8.04 HardyHeron Coming Soon</title><content type="html">&lt;div style="text-align: justify;"&gt;Ubuntu 7.10 (Gutsy Gibbon) was announced  October 2007 and will be supported till 2009. After four alpha releases, Ubuntu 8.04 Beta is released and available for download. The stable release of Ubuntu 8.04 (HardyHeron) is scheduled for April 2008. I am waiting for the stable relase to upgrage my ubuntu desktop edition.&lt;br /&gt;The new Ubuntu will come with &lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;br /&gt;&lt;li&gt;Gnome 2.22&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Firefox 3.0&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Linux kernel 2.6.24 &lt;br /&gt;&lt;/li&gt;&lt;li&gt;Xorg 7.3 - &lt;i&gt;"New Screen Resolution utility that allows users to dynamically configure the resolution, refresh rate, and rotation of a second monitor. This will be particularly handy for laptop users that connect to a projector or external monitor."&lt;/i&gt; - &lt;strong&gt;This is my favorite&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; and &lt;a href="http://www.ubuntu.com/testing/hardy/beta"&gt;more&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2296791868291929959-4193739224543432259?l=ilkinbalkanay.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkinbalkanayonblogspot/~4/_xSWzf-9PpE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ilkinbalkanay.blogspot.com/feeds/4193739224543432259/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2296791868291929959&amp;postID=4193739224543432259" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/4193739224543432259?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/4193739224543432259?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ilkinbalkanayonblogspot/~3/_xSWzf-9PpE/ubuntu-804-hardyheron-coming-soon.html" title="Ubuntu 8.04 HardyHeron Coming Soon" /><author><name>İlkin Ulaş BALKANAY</name><uri>http://www.blogger.com/profile/01068439091401215925</uri><email>ilkinulas@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="07256384748112435996" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://ilkinbalkanay.blogspot.com/2008/03/ubuntu-804-hardyheron-coming-soon.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUNQHk9eCp7ImA9WxJaEk4.&quot;"><id>tag:blogger.com,1999:blog-2296791868291929959.post-6927484239441189586</id><published>2008-03-12T15:32:00.011+02:00</published><updated>2009-08-02T21:04:51.760+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-02T21:04:51.760+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java monetary BigDecimal float double" /><title>Monetary Calculations In Java</title><content type="html">&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;b&gt;float&lt;/b&gt; and &lt;b&gt;double&lt;/b&gt; types are not suitable for monetary calculations in Java. If this is the first time you hear this you are in trouble.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Floating_point"&gt;Floating point arithmetic&lt;/a&gt; which is used to represent float/double variables is inappropriate for exact results calculations. For example it is impossible to represent 0.1 (or any other negative power of ten) as a float or double exactly. Here is an example:&lt;pre&gt;&lt;br /&gt;float s1 = 0;&lt;br /&gt;for (int i = 0; i &lt; 10; i++) {&lt;br /&gt; s1 += 0.10;&lt;br /&gt; System.out.println(s1);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;This code prints:&lt;pre&gt;&lt;br /&gt;0.1&lt;br /&gt;0.2&lt;br /&gt;0.3&lt;br /&gt;0.4&lt;br /&gt;0.5&lt;br /&gt;0.6&lt;br /&gt;0.70000005&lt;br /&gt;0.8000001&lt;br /&gt;0.9000001&lt;br /&gt;1.0000001&lt;br /&gt;&lt;/pre&gt;Here's another example: &lt;i&gt;(0.1+0.1+0.1) == 0.3&lt;/i&gt; What is the value of this statement &lt;i&gt;true&lt;/i&gt; or &lt;i&gt;false&lt;/i&gt;? since the sum &lt;i&gt;(0.1+0.1+0.1)&lt;/i&gt; is not equal to 0.3 according to JVM, rounding up the sum would result in 4 which is not expected either.&lt;br /&gt;&lt;br /&gt;I think you got the point. We can not trust float or double variables if we want exact results. Applications that makes money/credit calculations needs exact results. &lt;br /&gt;&lt;br /&gt;To represent monetary values in Java you should use the &lt;br /&gt;&lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigDecimal.html"&gt;BigDecimal&lt;/a&gt; class. &lt;br /&gt;&lt;pre&gt;BigDecimal bd = new BigDecimal("0");&lt;br /&gt;for (int i = 0; i &lt; 10; i++) {&lt;br /&gt; bd = bd.add(new BigDecimal("0.10"));&lt;br /&gt; System.out.println(bd);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;This java example prints (as expected):&lt;pre&gt;&lt;br /&gt;0.10&lt;br /&gt;0.20&lt;br /&gt;0.30&lt;br /&gt;0.40&lt;br /&gt;0.50&lt;br /&gt;0.60&lt;br /&gt;0.70&lt;br /&gt;0.80&lt;br /&gt;0.90&lt;br /&gt;1.00&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2296791868291929959-6927484239441189586?l=ilkinbalkanay.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkinbalkanayonblogspot/~4/Ed3msR6TmNI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ilkinbalkanay.blogspot.com/feeds/6927484239441189586/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2296791868291929959&amp;postID=6927484239441189586" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/6927484239441189586?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/6927484239441189586?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ilkinbalkanayonblogspot/~3/Ed3msR6TmNI/monetary-calculations-in-java.html" title="Monetary Calculations In Java" /><author><name>İlkin Ulaş BALKANAY</name><uri>http://www.blogger.com/profile/01068439091401215925</uri><email>ilkinulas@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="07256384748112435996" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://ilkinbalkanay.blogspot.com/2008/03/monetary-calculations-in-java.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUNQHk9eCp7ImA9WxJaEk4.&quot;"><id>tag:blogger.com,1999:blog-2296791868291929959.post-1319995267962283752</id><published>2008-02-29T08:38:00.007+02:00</published><updated>2009-08-02T21:04:51.760+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-02T21:04:51.760+03:00</app:edited><title>QRCodes in action!</title><content type="html">&lt;div style="text-align: justify;"&gt;Typing a web address with the number based keypads of cellphones is an annoying process for the majority of wireless subscribers that don't have phones with QWERTY keypads. If you don't agree try typing the address below with your cellphone:&lt;pre&gt;&lt;br /&gt;http://www.abc.net.au/cgi-bin/common/transform.pl?telstrawallaceml2html&amp;amp;wap&amp;amp;telstra~World&amp;amp;imode/2175963&lt;/pre&gt;By using QRCodes wireless subscribers just SCAN &amp;amp; GO. Here is a small list of QRCodes usage:&lt;br /&gt;&lt;/div&gt;&lt;ol style="text-align: justify;"&gt;&lt;br /&gt;&lt;li&gt;ORCodes &amp;amp; Facebook&lt;/li&gt;&lt;br /&gt;"Add to friends" link of facebook is encoded into a QRCode image and printed on a t-shirt. Seeing people around you, trying to scan your t-shirt with their cellphone will be freaky.&lt;br /&gt;&lt;a href="http://qrcode.es/?p=221&amp;amp;language=en"&gt;&lt;br /&gt;&lt;img src="http://qrcode.es/wp-content/uploads/2008/02/facebook_qr.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;QRKill - shooting game&lt;/li&gt;&lt;br /&gt;QRKill is a QRCode powered game. Players stick in their back a QRCode with his/her telephone and name encoded. They will have to kill each other capturing the code and sending an SMS. Players will be eliminated right after receiving a deathly SMS.&lt;br /&gt;&lt;table style="text-align: left; margin-left: 0px; margin-right: 0px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align="center"&gt;&lt;a href="http://qrcode.es/?p=209&amp;amp;language=en"&gt;&lt;img src="http://qrcode.es/wp-content/uploads/2008/01/qrkill2.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td align="center"&gt;&lt;a href="http://qrcode.es/?p=209&amp;amp;language=en"&gt;&lt;img src="http://qrcode.es/wp-content/uploads/2008/01/qrkill1.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Product Information&lt;/li&gt;&lt;br /&gt;McDonald's in Japan is printing the QRCodes on all its food packaging so customers know exactly what they are eating. By scanning the code with their cameraphone McDo lovers access all the information about the McFood including any potential allergy warnings.&lt;br /&gt;&lt;a href="http://www.engadgetmobile.com/2006/09/18/mcdonalds-japan-provides-cellphone-readable-nutrition-informa/"&gt;&lt;img src="http://www.engadget.com/media/2006/09/mcdonalds_qr_pic3.gif" /&gt;&lt;/a&gt;&lt;br /&gt;QRCodes are very popular in Japan. I haven't seen any printed QRCode in Turkey but according to me they'll catch attraction of Mobile advertisers soon. Here's another image that shows a product with information printed on it via QRCodes.&lt;br /&gt;&lt;img src="http://gia.info.gov.hk/general/200611/22/P200611220190_photo_386731.JPG" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2296791868291929959-1319995267962283752?l=ilkinbalkanay.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkinbalkanayonblogspot/~4/EQKo2J_q0nM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ilkinbalkanay.blogspot.com/feeds/1319995267962283752/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2296791868291929959&amp;postID=1319995267962283752" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/1319995267962283752?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/1319995267962283752?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ilkinbalkanayonblogspot/~3/EQKo2J_q0nM/qrcodes-in-action.html" title="QRCodes in action!" /><author><name>İlkin Ulaş BALKANAY</name><uri>http://www.blogger.com/profile/01068439091401215925</uri><email>ilkinulas@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="07256384748112435996" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://ilkinbalkanay.blogspot.com/2008/02/qrcodes-in-action.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUNQHk9eSp7ImA9WxJaEk4.&quot;"><id>tag:blogger.com,1999:blog-2296791868291929959.post-9128335039931347048</id><published>2008-02-28T16:05:00.013+02:00</published><updated>2009-08-02T21:04:51.761+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-02T21:04:51.761+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="memcached distributed scalable" /><title>memcached - Dağıtımlı (distributed) önbellek sistemi</title><content type="html">&lt;div style="text-align: justify;" class="wiki-content"&gt;&lt;br /&gt;&lt;a href="http://www.tbd.org.tr/genel/sozluk.php"&gt;TBD BİLİŞİM TERİMLERİ KARŞILIKLAR SÖZLÜĞÜ&lt;/a&gt;'nde "distributed" kelimesinin karşılığı olarak "dağıtımlı" yazıyor. Önceleri "distributed" kelimesi için "dağıtık", "dağıtılmış" kelimelerini kullanırdım. Madem Türkiye Bilişim Derneği "dağıtımlı" diyor bundan sonra benim de bu kelimeyi kullanmak boynumun borcudur. Bu yazıyı, okuduğum bir çok ingilizce yazının bir özeti olarak yazıyorum. (Kendi fikirlerimi eklemeyi unutmadım tabi ki :)) Yazıda ingilizce terimlerin türkçe karşılıklarını kullanmaya özen gösterdim fakat yine de tam türkçe karşılığını bulamadığım terimler var. &lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a name="memcached(Distributedobjectcachingsystem)-1.Nedirbumemcacheddenenşey?"&gt;&lt;/a&gt;1. Nedir bu memcached denen şey?&lt;/h3&gt;&lt;br /&gt;&lt;a href="http://www.danga.com/memcached/" rel="nofollow"&gt;Memcached&lt;/a&gt;, Danga Interactive &lt;a href="http://www.danga.com/" rel="nofollow"&gt;http://www.danga.com/&lt;/a&gt; tarafından geliştirilmeye başlanmış bir "distributed object caching" sistemidir. Yüksek trafik alan dinamik web uygulamalarının veritabanına gitme sayısını azaltmayı, bu sayede de performansı artırmayı hedefleyen bir uygulamadır.&lt;br /&gt;Memcached'yi network üzerinden erişilebilen kocaman bir Hashtable olarak düşünebiliriz. Network üzerindeki herhangi bir makinadan "key" ile memcached'de sakladığımız bir nesneye, network üzerindeki başka bir makinadan aynı key ile ulaşabiliriz. Detaylar için okumaya devam...&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a name="memcached(Distributedobjectcachingsystem)-2.Lisansınasıl?"&gt;&lt;/a&gt;2. Lisansı nasıl?&lt;/h3&gt;&lt;br /&gt;BSD License ile lisanslanmış. &lt;a href="http://en.wikipedia.org/wiki/BSD_license" rel="nofollow"&gt;http://en.wikipedia.org/wiki/BSD_license&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a name="memcached(Distributedobjectcachingsystem)-3.Hangiişletimsistemlerindeçalışıyor?"&gt;&lt;/a&gt;3. Hangi işletim sistemlerinde çalışıyor?&lt;/h3&gt;&lt;br /&gt;Linux, BSD, Windows üzerinde sorunsuz çalışıyor. Web sitesinde Solaris ile ilgili bir bilgi yok. Mail listelerine bakılınca solaris üzerinde çalıştırmak için taklalar atmak gerektiğini anlıyoruz. Memcached fazla CPU kullanmıyor ve tek ihtiyacı boş RAM. Bu yüzden memcached instance'larını çalıştıracağımız makinanın Sun sparc işlemcili bir makina olmasına gerek yok. Hızlı bir network kartı ve yeterli RAM'i olan linux PC'ler memcached çalıştırmak için yeterli olacaktır. (Ben testlerimi &lt;a href="http://www.ubuntu.com/" rel="nofollow"&gt;Ubuntu&lt;/a&gt; 7.10 kurulu Dell Laptop üzerinde yaptım :) )&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a name="memcached(Distributedobjectcachingsystem)-4.Nasılkurulur?"&gt;&lt;/a&gt;4. Nasıl kurulur?&lt;/h3&gt;&lt;br /&gt;&lt;a href="http://www.danga.com/memcached/download.bml" rel="nofollow"&gt;http://www.danga.com/memcached/download.bml&lt;/a&gt; adresinden indireceğiniz kaynak kodunu INSTALL ve README dosyalarını okuyarak derleyip kurabilirsiniz.&lt;br /&gt;&lt;a href="http://blog.ajohnstone.com/archives/installing-memcached/" rel="nofollow"&gt;http://blog.ajohnstone.com/archives/installing-memcached/&lt;/a&gt; adresinde kurulum ile ilgili bir tutorial var.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a name="memcached(Distributedobjectcachingsystem)-5.Nasılçalıştırılır?"&gt;&lt;/a&gt;5. Nasıl çalıştırılır?&lt;/h3&gt;&lt;br /&gt;Memcached bir konfigürasyon dosyasına ihtiyaç duymaz. Gerekli bütün ayarlar komut satırından memcached daemon'u çalıştırırken verilebilir.&lt;br /&gt;&lt;div class="preformatted panel" style="border-width: 1px;"&gt;&lt;div class="preformattedContent panelContent"&gt;&lt;br /&gt;&lt;pre&gt;# ./memcached -d -m 2048 -l 192.168.43.47 -p 11211&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Bu komut memcached'ye der ki:&lt;br /&gt;&lt;ul&gt; &lt;li&gt;(-d) daemon olarak çalışacaksın&lt;/li&gt; &lt;li&gt;(-m 2048) 2GB'dan fazla RAM kullanamazsın.&lt;/li&gt;&lt;li&gt;(-l) 192.168.43.47 makinasında çalışıyorsun&lt;/li&gt;&lt;li&gt;(-p) 11211 portunu dinleyeceksin.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Aynı makina üzerinde RAM yettiği sürece birden fazla memcached daemon çalıştırabiliriz (Farklı portlarda çalıştırmaya dikkat etmek lazım).  Örneğin, herbiri 512MB kapasiteli 5 adet memcached daemon'u aynı makina üzerinde asaşıdaki şekilde başlatabiliriz. Toplamda 2.5GB'lık bir cache'imiz oluyor. (Dikkat böyle bir kullanım size mantıklı gelmeyebilir, sadece daemon'u nasıl başlattığımız göstermek için bir örnek.)&lt;br /&gt;&lt;div class="preformatted panel" style="border-width: 1px;"&gt;&lt;div class="preformattedContent panelContent"&gt;&lt;br /&gt;&lt;pre&gt;# ./memcached -d -m 512 -l 192.168.43.47 -p 11211&lt;br /&gt;# ./memcached -d -m 512 -l 192.168.43.47 -p 11212&lt;br /&gt;# ./memcached -d -m 512 -l 192.168.43.47 -p 11213&lt;br /&gt;# ./memcached -d -m 512 -l 192.168.43.47 -p 11214&lt;br /&gt;# ./memcached -d -m 512 -l 192.168.43.47 -p 11215&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a name="memcached(Distributedobjectcachingsystem)-6.Memcached'yeuygulamalarımıznasılerişecek?"&gt;&lt;/a&gt;6. Memcached'ye uygulamalarımız nasıl erişecek?&lt;/h3&gt;&lt;br /&gt;Memcached'nin network üzerinden erişilebilen büyük bir Hashtable olduğundan bahsetmiştik. Uygulamaların memcached'ye erişebilmeleri için çeşitli dillerde yazılmış  istemci kütüphaneleri var. Java dışında Perl, Php, Python, Ruby, C# ve C için yazılımış istemciler mevcut. Bu adresten &lt;a href="http://www.whalin.com/memcached/" rel="nofollow"&gt;http://www.whalin.com/memcached/&lt;/a&gt; java memcached client indirilebilir. &lt;br /&gt;Yazılımcılar gerek görürlerse memcached ile haberleşmeyi sağlayacak kendi istemci kütüphanelerini yazabilirler. Memcached ile client'lar arasındaki protokolün detaylarına &lt;a href="http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt" rel="nofollow"&gt;http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt&lt;/a&gt; adresinden erişilebilir.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a name="memcached(Distributedobjectcachingsystem)-7.Tipikbirkullanımörneği"&gt;&lt;/a&gt;7. Tipik bir kullanım örneği&lt;/h3&gt;&lt;br /&gt;Örnek java kodu:&lt;br /&gt;&lt;div class="code panel" style="border-style: solid; border-width: 1px;"&gt;&lt;div class="codeContent panelContent"&gt;&lt;br /&gt;&lt;pre class="code-java"&gt;&lt;span class="code-keyword"&gt;public&lt;/span&gt; VpnAccount getVpnAccount(&lt;span class="code-object"&gt;String&lt;/span&gt; msisdn) {&lt;br /&gt; VpnAccount account = memcachedClient.get(msisdn);&lt;br /&gt; &lt;span class="code-keyword"&gt;if&lt;/span&gt; (account == &lt;span class="code-keyword"&gt;null&lt;/span&gt;) {&lt;br /&gt;  account = getAccountFromDatabase(msisdn);&lt;br /&gt;  memcachedClient.set(msisdn, account);&lt;br /&gt; }&lt;br /&gt; &lt;span class="code-keyword"&gt;return&lt;/span&gt; accout;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a name="memcached(Distributedobjectcachingsystem)-6.Nasılçalışıyor?Nasıl&amp;quot;distribution&amp;quot;sağlıyor?"&gt;&lt;/a&gt;6. Nasıl çalışıyor? Nasıl "distribution" sağlıyor?&lt;/h3&gt;&lt;br /&gt;Evet zurnanın "zıırrrt" dediği yere geldik. Memcached network üzerinden erişebileceğimiz boş RAM'i olan herhangi bir makinada çalıştırılabilir.&lt;br /&gt;&lt;h4&gt;&lt;a name="memcached(Distributedobjectcachingsystem)-Örnek1:Birveyabirdenfazlauygulamanıntekbirmemcachedinstancekullandığısenaryo:"&gt;&lt;/a&gt;Örnek 1: Bir veya birden fazla uygulamanın tek bir memcached instance kullandığı senaryo:&lt;/h4&gt;&lt;br /&gt;Bu senaryonun üzerinde fazla durmaya gerek yok. Uygulamalara memcached'nin çalıştığı makinanin IP'si ve memcached'nin dinlediği port bilgisi verilir. Bütün uygulamalar aynı cache instance'ını kullanır. A uygulamasının &lt;em&gt;K&lt;/em&gt; anahtar kelimesi ile cache'e gönderdiği &lt;em&gt;V&lt;/em&gt; değerini, B uygulaması &lt;em&gt;K&lt;/em&gt; anahtar kelimesini kullanarak alabilir. &lt;br /&gt;&lt;b&gt;Bu mimarinin artıları:&lt;/b&gt;&lt;br /&gt;&lt;ul class="alternate" type="square"&gt;&lt;br /&gt; &lt;li&gt;Basit bir mimaridir. (Fakat tavsiye edilen mimari değil)&lt;/li&gt; &lt;li&gt;Merkezi bir cache olduğu için uygulamalar (java uygulamalarından bahsediyorum) kendi cache'lerini tutmak zorunda değil. Uygulamaların Cache'leri arasında tutarlılık kontrolleri yapmaya gerek yok. &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Eksileri:&lt;/b&gt;&lt;br /&gt;&lt;ul class="alternate" type="square"&gt; &lt;li&gt;Tek bir cache instance = SPOF (Single point of failure)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h4&gt;&lt;a name="memcached(Distributedobjectcachingsystem)-Örnek2:"&gt;&lt;/a&gt;Örnek 2:&lt;/h4&gt;&lt;br /&gt;Birden fazla memcached daemon'ın kullanıldığı senaryo. &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_xwxnlWIalMQ/R8bOG3wL1CI/AAAAAAAAAXY/LaJCc-MYkMU/s1600-h/memcached.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_xwxnlWIalMQ/R8bOG3wL1CI/AAAAAAAAAXY/LaJCc-MYkMU/s400/memcached.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5172047839522182178" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;192.168.43.47:11211, 192.168.43.48:11211 ve 192.168.43.49:11211 da çalışan 3 adet memcached daemon olsun. Bizim de bu cache'leri kullanan A,B ve C uygulamalarımız olsun. (IN uygulamalarından örnek verecek olursak GW1, GW2 ve GW3). &lt;br /&gt;memcached'nin çalışması iki adımdan oluşan &lt;b&gt;hashing&lt;/b&gt; mekanizmasına bağlıdır. &lt;br /&gt;&lt;ul&gt; &lt;li&gt;1. adımda client, memcached daemon listesini kullanarak "K" anahtarının hash'ini hesaplar. "K" ile saklanan "V" değerine ulaşmak için (ya da "K" ile "V" değerini saklamak için) hangi memcached server'a gideceğini bulur.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt; &lt;li&gt;2. adımda memcached serverda (çok büyük bir hashtable olarak düşünebiliriz demiştik) "K" anahtarının hash'i farklı bir algoritma ile hesaplanır. "Hashtable lookup" ile "V" değerine erişilir.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Telekom uygulamasından bir örnek:&lt;/b&gt;&lt;br /&gt;MSISDN'leri anahtar olarak kullanıp VpnAccount nesnelerini memcached içinde saklayalım. MSISDN "905435022434", cache server listesine göre hash'lendiğinde "905435022434"e karşılık gelecek VpnAccount'un hangi memcached daemon'da saklanacağı bulunur. (Örneğin 192.168.43.48:11211).&lt;br /&gt;Uygulamaların hepsi anahtar kelimenin (yani MSISDN'in) hash'ini hesaplarken aynı hash algoritmasını kullanacağı için "905435022434" numaralı VpnAccount'a ulaşmak için bütün uygulamalar aynı memcached daemon'a gidecektir. &lt;br /&gt;&lt;b&gt;Bu mimarinin artıları:&lt;/b&gt;&lt;br /&gt;&lt;ul class="alternate" type="square"&gt; &lt;li&gt;çok iyi ölçeklenebilir (highly scalable). Ne kadar çok RAM o kadar çok cache.&lt;/li&gt; &lt;li&gt;aklıma şimdilik başka birşey gelmiyor :D&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Eksileri:&lt;/b&gt;&lt;br /&gt;&lt;ul class="alternate" type="square"&gt; &lt;li&gt;(Eksi alanına birşeyler yazmış olmak için yazıyorum) birden fazla memcached instance'ı yönetmek zor olabilir.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a name="memcached(Distributedobjectcachingsystem)-9.Authenticationmekanizmasınasılişliyor?"&gt;&lt;/a&gt;9. Authentication mekanizması nasıl işliyor?&lt;/h3&gt;&lt;br /&gt;Memcached authentication kullanmıyor. Network üzerinden erişimi olan bütün client'lar "set" ve "get" yapabilirler. Üzerinde memcached çalışan host'ların firewall ayarlarının dikkatli yapılması gerekir.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a name="memcached(Distributedobjectcachingsystem)-10.Failoversenaryolarınasıl?Memcachedfailoverdestekliyormu?"&gt;&lt;/a&gt;10. Failover senaryoları nasıl? Memcached failover destekliyor mu?&lt;/h3&gt;&lt;br /&gt;&lt;b&gt;memcached failover desteklemez.&lt;/b&gt; memcached'yi &lt;em&gt;"set(key, value)"&lt;/em&gt; ve &lt;em&gt;"get(key)"&lt;/em&gt; işlemlerini destekleyen bir Hashtable olarak olarak tanımlamıştık. Memcached instance'larının birbirlerinden haberleri yoktur. Network üzerinden kaç tane memcached'nin çalıştığı bilgisi sadece client'larda vardır. Memcached server grubundan bir server'ın çıkartılması ya da yeni bir server eklenmesi  durumu ile başa çıkmak client'lara kalmıştır. &lt;br /&gt;A, B, C hostlarında çalışan 3 tane memcached server oldugunu varsayalım. &lt;br /&gt;&lt;div class="preformatted panel" style="border-width: 1px;"&gt;&lt;div class="preformattedContent panelContent"&gt;&lt;br /&gt;&lt;pre&gt;hash("905435022434")%(["A","B","C"].length) --&amp;gt; A&lt;br /&gt;hash("905435022435")%(["A","B","C"].length) --&amp;gt; B&lt;br /&gt;hash("905435022436")%(["A","B","C"].length) --&amp;gt; C olsun.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;("905435022434" anahtarı ile bir nesneyi aramak için A'ya, "905435022435" anahtarı ile bir nesneyi aramak için B'ye gidilecek.)&lt;br /&gt;Bu üç hosttan bir tanesi örneğin B erişilemez duruma gelirse, kullanılabilen 2 tane memcached server kalır. Bu durumda &lt;br /&gt;&lt;div class="preformatted panel" style="border-width: 1px;"&gt;&lt;div class="preformattedContent panelContent"&gt;&lt;br /&gt;&lt;pre&gt;hash("905435022434")%(["A","C"].length) --&amp;gt; C&lt;br /&gt;hash("905435022435")%(["A","C"].length) --&amp;gt; A&lt;br /&gt;hash("905435022436")%(["A","C"].length) --&amp;gt; A olabilir.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Yani 3 memcached server ile çalışırken "905435022434" anahtarı ile A hostuna yönlenilirken 2 memcached server ile çalışırken "905435022434" anahtarı ile C hostuna yönlenebiliriz. Bu da "905435022434" anahatarı ile cache içinde tutulan nesnenin artık geçersiz olduğu (DB'den yeniden çekilmesi gerektiği) anlamına gelir. Aynı tip senaryo memcached server grubuna yeni bir memcached server eklendiğinde de geçerlidir.&lt;br /&gt;Yukarıda bahsedilen problemi çözmek için &lt;b&gt;"consistent hashing"&lt;/b&gt; algoritmaları geliştirilmiş. memcached client'ların verilen bir anahtar için hangi memcached server'a gideceklerini hesaplayan bu algoritmalar sayesinde memcached server grubundan bir server çıktığı zaman ya da yeni bir server eklendiği zaman "K" anahtarına karşılık gelen memcached server'ın değişmemesi sağlanmıştır.&lt;br /&gt;&lt;a href="http://www.whalin.com/memcached/" rel="nofollow"&gt;http://www.whalin.com/memcached/&lt;/a&gt; adresindeki memcached client içerisinde "consistent hashing" algoritmasının implementasyonu mevcut. &lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a name="memcached(Distributedobjectcachingsystem)-11.JVM,cacheiçinextrahafızayaihtiyaçduyacakmı?"&gt;&lt;/a&gt;11. JVM, cache için extra hafızaya ihtiyaç duyacak mı?&lt;/h3&gt;&lt;br /&gt;Memcached kullanıldığında nesneler JVM heap'te değil başka bir process'in (bu process JVM ile aynı host'ta ya da farklı bir host'ta olabilir) kullandığı hafıza alanında saklanır. Bugün cache kullanan uygulamalarımız için JVM'i başlatırken (yaklaşık olarak) &lt;b&gt;2GB&lt;/b&gt; heap kullan diyoruz (-Xms2048m -Xmx2048m).  Memcached kullandığımız durumda JVM bu kadar geniş bir heap'e ihtiyaç duymayacaktır - çoğu uygulamalar için 256 MB'lık bir heap yeterli olur diye düşünüyorum. &lt;b&gt;Bu sayede Garbage collection sureleri kısalacaktır.&lt;/b&gt; (Telekom uygulamalarında Garbage Collection suresinin ne kadar önemli olduğundan söz etmeye gerek yok.)&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a name="memcached(Distributedobjectcachingsystem)-12.Cachedolduğuzamanneolur?"&gt;&lt;/a&gt;12. Cache dolduğu zaman ne olur?&lt;/h3&gt;&lt;br /&gt;Memcached'nin cache'i dolduğu zaman, cache'e yeni bir nesne eklemek istersek &lt;a href="http://en.wikipedia.org/wiki/Cache_algorithms" rel="nofollow"&gt;LRU (least recently used)&lt;/a&gt; yöntemiyle eski nesneler cache'den silinir.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a name="memcached(Distributedobjectcachingsystem)-13.memcached'ninarkasındakimvar?"&gt;&lt;/a&gt;13. memcached'nin arkasında kim var?&lt;/h3&gt;&lt;br /&gt;memcached kaynak kodu açık bir uygulama. Arkasında bizim gibi 100'lerce yazılımcı var. Daha da önemlisi bir çok yerde kullanıyor ve kendini kanıtlamış. &lt;a href="http://developers.facebook.com/opensource.php" rel="nofollow"&gt;http://developers.facebook.com/opensource.php&lt;/a&gt; adresinde, facebook yazılımcılarının memcached kaynak koduna yaptıkları katkılarla, memcached performansını 20% iyileştirdiklerinden bahsediliyor.&lt;br /&gt;Aşağıdaki listede memcached kullandıklarını söyleyen bir kaç tane web sitesi var. Bu sitelerin ortak özellikleri çok hit almaları ve her sayfada dinamik bilgiler göstermeleri. &lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;&lt;b&gt;LiveJournal&lt;/b&gt; &lt;a href="http://www.livejournal.com/" rel="nofollow"&gt;http://www.livejournal.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;/.&lt;/b&gt; &lt;a href="http://www.slashdot.org/" rel="nofollow"&gt;http://www.slashdot.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;facebook&lt;/b&gt; &lt;a href="http://www.facebook.com/" rel="nofollow"&gt;http://www.facebook.com&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;b&gt;last.fm&lt;/b&gt; &lt;a href="http://last.fm/" rel="nofollow"&gt;http://last.fm&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a name="memcached(Distributedobjectcachingsystem)-14.Dahadetaylıbilgiyeneredenulaşabilirim?"&gt;&lt;/a&gt;14. Daha detaylı bilgiye nereden ulaşabilirim?&lt;/h3&gt;&lt;br /&gt;Bu adreste (&lt;a href="http://www.socialtext.net/memcached/index.cgi?faq" rel="nofollow"&gt;http://www.socialtext.net/memcached/index.cgi?faq&lt;/a&gt;) memcached ile ilgili  bir FAQ var.&lt;br /&gt;                           &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2296791868291929959-9128335039931347048?l=ilkinbalkanay.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkinbalkanayonblogspot/~4/soSHUqoTZL0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ilkinbalkanay.blogspot.com/feeds/9128335039931347048/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2296791868291929959&amp;postID=9128335039931347048" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/9128335039931347048?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/9128335039931347048?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ilkinbalkanayonblogspot/~3/soSHUqoTZL0/memcached-datml-distributed-nbellek.html" title="memcached - Dağıtımlı (distributed) önbellek sistemi" /><author><name>İlkin Ulaş BALKANAY</name><uri>http://www.blogger.com/profile/01068439091401215925</uri><email>ilkinulas@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="07256384748112435996" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://bp2.blogger.com/_xwxnlWIalMQ/R8bOG3wL1CI/AAAAAAAAAXY/LaJCc-MYkMU/s72-c/memcached.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://ilkinbalkanay.blogspot.com/2008/02/memcached-datml-distributed-nbellek.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUNQHk9eSp7ImA9WxJaEk4.&quot;"><id>tag:blogger.com,1999:blog-2296791868291929959.post-6544389780345113044</id><published>2008-02-27T16:53:00.003+02:00</published><updated>2009-08-02T21:04:51.761+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-02T21:04:51.761+03:00</app:edited><title>QRCodes are becoming popular</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_xwxnlWIalMQ/R8V6HHwL1BI/AAAAAAAAAXQ/HotC9lNr94o/s1600-h/qrcode_www.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_xwxnlWIalMQ/R8V6HHwL1BI/AAAAAAAAAXQ/HotC9lNr94o/s400/qrcode_www.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5171674009863705618" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/QR_Code"&gt;QRCodes&lt;/a&gt; are two dimensional barcodes that can be decoded (scanned) at high speed. QrCode is created by Japanese corporation &lt;a href="http://en.wikipedia.org/wiki/Denso"&gt;Denso-Wave&lt;/a&gt;. These two dimentisional bar codes are very common in Japan. They are widely used in ad sector. &lt;br /&gt;URLs, Text, Phone numbers can be encoded in these codes. There are J2ME applications that can decode QRCodes.  If you have a java enabled cell phone with a camera, install the application from &lt;a href="http://reader.kaywa.com/"&gt;http://reader.kaywa.com/&lt;/a&gt; and begin scanning QRCodes. &lt;br /&gt;&lt;br /&gt;I am going to list what can be done with a QRCode reader and a QRCode generator later in this blog. &lt;br /&gt;&lt;br /&gt;The image in this post is an example of generated QR Code. Guess what is encoded in the picture. Install the QRCode reader and scan the image ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2296791868291929959-6544389780345113044?l=ilkinbalkanay.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ilkinbalkanayonblogspot/~4/-VgnPaHBf6I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ilkinbalkanay.blogspot.com/feeds/6544389780345113044/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2296791868291929959&amp;postID=6544389780345113044" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/6544389780345113044?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2296791868291929959/posts/default/6544389780345113044?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ilkinbalkanayonblogspot/~3/-VgnPaHBf6I/qrcodes-are-becoming-popular.html" title="QRCodes are becoming popular" /><author><name>İlkin Ulaş BALKANAY</name><uri>http://www.blogger.com/profile/01068439091401215925</uri><email>ilkinulas@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="07256384748112435996" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://bp2.blogger.com/_xwxnlWIalMQ/R8V6HHwL1BI/AAAAAAAAAXQ/HotC9lNr94o/s72-c/qrcode_www.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://ilkinbalkanay.blogspot.com/2008/02/qrcodes-are-becoming-popular.html</feedburner:origLink></entry></feed>
