<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[Uğur Özyılmazel]]></title>
  <link href="http://ugur.ozyilmazel.com/atom.xml" rel="self"/>
  <link href="http://ugur.ozyilmazel.com/"/>
  <updated>2012-06-04T02:23:43+03:00</updated>
  <id>http://ugur.ozyilmazel.com/</id>
  <author>
    <name><![CDATA[Uğur Özyılmazel]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[IRB konfigürasyonu ve ufak tefek ayarlar]]></title>
    <link href="http://ugur.ozyilmazel.com/blog/2012/05/25/irb-konfigurasyonu-ve-ufak-tefek-ayarlar/"/>
    <updated>2012-05-25T00:06:00+03:00</updated>
    <id>http://ugur.ozyilmazel.com/blog/2012/05/25/irb-konfigurasyonu-ve-ufak-tefek-ayarlar</id>
    <content type="html"><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Interactive_Ruby_Shell">IRB</a> konfigüre edilebilen bir interaktif konsoldur. Aynı <a href="http://ipython.org/">IPython</a> gibi.
Hem test yapmak, hem de günlük ihtiyaçları kullanmak için en sık başvurduğum
<strong>tool</strong>&rsquo;dur. <a href="http://python.org" title="Python">Python</a>&rsquo;dan alıştığım <a href="http://docs.python.org/library/pprint.html">Pretty Print</a> beni IRB uzmanı
olmaya yöneltti.</p>

<!-- more -->


<p><code>$HOME/.irbrc</code> adlı dosya, kullanıcı bazında IRB konfigürasyon dosyasıdır.
İlk çalışma sırasında ne olacak? Hangi modüller default olarak yüklenmeli? Bu
ve buna benzer şeyler standart <a href="http://www.ruby-lang.org/" title="Ruby">Ruby</a> script&rsquo;i şeklinde yazılır.</p>

<figure class='code'><figcaption><span>.irbrc </span><a href='https://raw.github.com/vigo/dotfiles-bash/master/rc/irbrc'>link</a></figcaption> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
<span class='line-number'>42</span>
<span class='line-number'>43</span>
<span class='line-number'>44</span>
<span class='line-number'>45</span>
<span class='line-number'>46</span>
<span class='line-number'>47</span>
<span class='line-number'>48</span>
<span class='line-number'>49</span>
<span class='line-number'>50</span>
<span class='line-number'>51</span>
<span class='line-number'>52</span>
<span class='line-number'>53</span>
<span class='line-number'>54</span>
<span class='line-number'>55</span>
<span class='line-number'>56</span>
<span class='line-number'>57</span>
<span class='line-number'>58</span>
<span class='line-number'>59</span>
<span class='line-number'>60</span>
<span class='line-number'>61</span>
<span class='line-number'>62</span>
<span class='line-number'>63</span>
<span class='line-number'>64</span>
<span class='line-number'>65</span>
<span class='line-number'>66</span>
<span class='line-number'>67</span>
<span class='line-number'>68</span>
<span class='line-number'>69</span>
<span class='line-number'>70</span>
<span class='line-number'>71</span>
<span class='line-number'>72</span>
<span class='line-number'>73</span>
<span class='line-number'>74</span>
<span class='line-number'>75</span>
<span class='line-number'>76</span>
<span class='line-number'>77</span>
<span class='line-number'>78</span>
<span class='line-number'>79</span>
<span class='line-number'>80</span>
<span class='line-number'>81</span>
<span class='line-number'>82</span>
<span class='line-number'>83</span>
<span class='line-number'>84</span>
<span class='line-number'>85</span>
<span class='line-number'>86</span>
<span class='line-number'>87</span>
<span class='line-number'>88</span>
<span class='line-number'>89</span>
<span class='line-number'>90</span>
<span class='line-number'>91</span>
<span class='line-number'>92</span>
<span class='line-number'>93</span>
<span class='line-number'>94</span>
<span class='line-number'>95</span>
<span class='line-number'>96</span>
<span class='line-number'>97</span>
<span class='line-number'>98</span>
<span class='line-number'>99</span>
<span class='line-number'>100</span>
<span class='line-number'>101</span>
<span class='line-number'>102</span>
<span class='line-number'>103</span>
<span class='line-number'>104</span>
<span class='line-number'>105</span>
<span class='line-number'>106</span>
<span class='line-number'>107</span>
<span class='line-number'>108</span>
<span class='line-number'>109</span>
<span class='line-number'>110</span>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="c1"># encoding: utf-8</span>
</span><span class='line'>
</span><span class='line'><span class="c1"># http://pablotron.org/software/wirble/README</span>
</span><span class='line'><span class="c1"># required gems:</span>
</span><span class='line'><span class="c1"># wirble pri awesome_print ruby-duration</span>
</span><span class='line'>
</span><span class='line'><span class="no">IRB_START_TIME</span> <span class="o">=</span> <span class="no">Time</span><span class="o">.</span><span class="n">now</span>
</span><span class='line'>
</span><span class='line'><span class="nb">require</span> <span class="s1">&#39;rubygems&#39;</span>
</span><span class='line'><span class="nb">require</span> <span class="s2">&quot;irb/completion&quot;</span>
</span><span class='line'><span class="nb">require</span> <span class="s1">&#39;irb/ext/save-history&#39;</span>
</span><span class='line'>
</span><span class='line'><span class="no">EXISTING_GEMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span class='line'>  <span class="ss">:RUBY_DURATION</span> <span class="o">=&gt;</span> <span class="p">{</span> <span class="ss">:exists</span> <span class="o">=&gt;</span> <span class="kp">true</span><span class="p">,</span> <span class="ss">:file</span> <span class="o">=&gt;</span> <span class="s1">&#39;ruby-duration&#39;</span> <span class="p">},</span>
</span><span class='line'>  <span class="ss">:WIRBLE</span> <span class="o">=&gt;</span> <span class="p">{</span> <span class="ss">:exists</span> <span class="o">=&gt;</span> <span class="kp">true</span><span class="p">,</span> <span class="ss">:file</span> <span class="o">=&gt;</span> <span class="s1">&#39;wirble&#39;</span> <span class="p">},</span>
</span><span class='line'>  <span class="ss">:ORI</span> <span class="o">=&gt;</span> <span class="p">{</span> <span class="ss">:exists</span> <span class="o">=&gt;</span> <span class="kp">true</span><span class="p">,</span> <span class="ss">:file</span> <span class="o">=&gt;</span> <span class="s1">&#39;ori&#39;</span> <span class="p">},</span>
</span><span class='line'>  <span class="ss">:AWESOME_PRINT</span> <span class="o">=&gt;</span> <span class="p">{</span> <span class="ss">:exists</span> <span class="o">=&gt;</span> <span class="kp">true</span><span class="p">,</span> <span class="ss">:file</span> <span class="o">=&gt;</span> <span class="s1">&#39;awesome_print&#39;</span> <span class="p">},</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="k">begin</span>
</span><span class='line'>  <span class="nb">require</span> <span class="s1">&#39;ruby-duration&#39;</span>
</span><span class='line'><span class="k">rescue</span> <span class="no">LoadError</span>
</span><span class='line'>  <span class="no">EXISTING_GEMS</span><span class="o">[</span><span class="ss">:RUBY_DURATION</span><span class="o">][</span><span class="ss">:exists</span><span class="o">]</span> <span class="o">=</span> <span class="kp">false</span>
</span><span class='line'><span class="k">end</span>
</span><span class='line'>
</span><span class='line'><span class="k">begin</span>
</span><span class='line'>  <span class="nb">require</span> <span class="s1">&#39;wirble&#39;</span>
</span><span class='line'><span class="k">rescue</span> <span class="no">LoadError</span>
</span><span class='line'>  <span class="no">EXISTING_GEMS</span><span class="o">[</span><span class="ss">:WIRBLE</span><span class="o">][</span><span class="ss">:exists</span><span class="o">]</span> <span class="o">=</span> <span class="kp">false</span>
</span><span class='line'><span class="k">end</span>
</span><span class='line'>
</span><span class='line'><span class="k">begin</span>
</span><span class='line'>  <span class="c1"># ori usage:</span>
</span><span class='line'>  <span class="c1"># &quot;&quot;.ri</span>
</span><span class='line'>  <span class="c1"># &quot;&quot;.ri :upcase</span>
</span><span class='line'>  <span class="c1"># Array.ri</span>
</span><span class='line'>  <span class="c1"># &quot;&quot;.ri :pretty_print</span>
</span><span class='line'>  <span class="nb">require</span> <span class="s1">&#39;ori&#39;</span>
</span><span class='line'><span class="k">rescue</span> <span class="no">LoadError</span>
</span><span class='line'>  <span class="no">EXISTING_GEMS</span><span class="o">[</span><span class="ss">:ORI</span><span class="o">][</span><span class="ss">:exists</span><span class="o">]</span> <span class="o">=</span> <span class="kp">false</span>
</span><span class='line'><span class="k">end</span>
</span><span class='line'>
</span><span class='line'><span class="k">begin</span>
</span><span class='line'>  <span class="nb">require</span> <span class="s1">&#39;awesome_print&#39;</span>
</span><span class='line'><span class="k">rescue</span> <span class="no">LoadError</span>
</span><span class='line'>  <span class="no">EXISTING_GEMS</span><span class="o">[</span><span class="ss">:AWESOME_PRINT</span><span class="o">][</span><span class="ss">:exists</span><span class="o">]</span> <span class="o">=</span> <span class="kp">false</span>
</span><span class='line'><span class="k">end</span>
</span><span class='line'><span class="c1"># ARGV.concat [&quot;--readline&quot;, &quot;--prompt-mode&quot;, &quot;simple&quot;]</span>
</span><span class='line'><span class="c1"># ARGV.concat [&quot;--readline&quot;, &quot;--noprompt&quot;]</span>
</span><span class='line'>
</span><span class='line'><span class="c1"># Colors for prompt</span>
</span><span class='line'><span class="c1"># ----------------------------------------------------------------------------</span>
</span><span class='line'><span class="no">ANSI</span> <span class="o">=</span> <span class="p">{}</span>
</span><span class='line'><span class="no">ANSI</span><span class="o">[</span><span class="ss">:RESET</span><span class="o">]</span>     <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\e</span><span class="s2">[0m&quot;</span>
</span><span class='line'><span class="no">ANSI</span><span class="o">[</span><span class="ss">:BOLD</span><span class="o">]</span>      <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\e</span><span class="s2">[1m&quot;</span>
</span><span class='line'><span class="no">ANSI</span><span class="o">[</span><span class="ss">:UNDERLINE</span><span class="o">]</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\e</span><span class="s2">[4m&quot;</span>
</span><span class='line'><span class="no">ANSI</span><span class="o">[</span><span class="ss">:LGRAY</span><span class="o">]</span>     <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\e</span><span class="s2">[0;37m&quot;</span>
</span><span class='line'><span class="no">ANSI</span><span class="o">[</span><span class="ss">:GRAY</span><span class="o">]</span>      <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\e</span><span class="s2">[0;90m&quot;</span>
</span><span class='line'><span class="no">ANSI</span><span class="o">[</span><span class="ss">:RED</span><span class="o">]</span>       <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\e</span><span class="s2">[31m&quot;</span>
</span><span class='line'><span class="no">ANSI</span><span class="o">[</span><span class="ss">:GREEN</span><span class="o">]</span>     <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\e</span><span class="s2">[32m&quot;</span>
</span><span class='line'><span class="no">ANSI</span><span class="o">[</span><span class="ss">:YELLOW</span><span class="o">]</span>    <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\e</span><span class="s2">[33m&quot;</span>
</span><span class='line'><span class="no">ANSI</span><span class="o">[</span><span class="ss">:BLUE</span><span class="o">]</span>      <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\e</span><span class="s2">[34m&quot;</span>
</span><span class='line'><span class="no">ANSI</span><span class="o">[</span><span class="ss">:MAGENTA</span><span class="o">]</span>   <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\e</span><span class="s2">[35m&quot;</span>
</span><span class='line'><span class="no">ANSI</span><span class="o">[</span><span class="ss">:CYAN</span><span class="o">]</span>      <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\e</span><span class="s2">[36m&quot;</span>
</span><span class='line'><span class="no">ANSI</span><span class="o">[</span><span class="ss">:WHITE</span><span class="o">]</span>     <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\e</span><span class="s2">[37m&quot;</span>
</span><span class='line'><span class="c1"># ----------------------------------------------------------------------------</span>
</span><span class='line'>
</span><span class='line'><span class="c1"># Colors for array, hash etc...</span>
</span><span class='line'><span class="c1"># ----------------------------------------------------------------------------</span>
</span><span class='line'><span class="no">Wirble</span><span class="o">.</span><span class="n">init</span><span class="p">({</span>
</span><span class='line'>  <span class="ss">:skip_prompt</span> <span class="o">=&gt;</span> <span class="kp">true</span><span class="p">,</span>
</span><span class='line'>  <span class="ss">:skip_history</span> <span class="o">=&gt;</span> <span class="kp">true</span><span class="p">,</span>
</span><span class='line'><span class="p">})</span>
</span><span class='line'><span class="no">Wirble</span><span class="o">.</span><span class="n">colorize</span>
</span><span class='line'><span class="c1"># ----------------------------------------------------------------------------</span>
</span><span class='line'>
</span><span class='line'>
</span><span class='line'><span class="c1"># IRB configuration</span>
</span><span class='line'><span class="c1"># ----------------------------------------------------------------------------</span>
</span><span class='line'><span class="no">MY_CUSTOM_PROMPT</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="si">#{</span><span class="no">ANSI</span><span class="o">[</span><span class="ss">:WHITE</span><span class="o">]</span><span class="si">}</span><span class="s2">%03n</span><span class="si">#{</span><span class="no">ANSI</span><span class="o">[</span><span class="ss">:RESET</span><span class="o">]</span><span class="si">}</span><span class="s2">:</span><span class="si">#{</span><span class="no">ANSI</span><span class="o">[</span><span class="ss">:YELLOW</span><span class="o">]</span><span class="si">}</span><span class="s2">%i</span><span class="si">#{</span><span class="no">ANSI</span><span class="o">[</span><span class="ss">:RESET</span><span class="o">]</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span class='line'>
</span><span class='line'><span class="no">IRB</span><span class="o">.</span><span class="n">conf</span><span class="o">[</span><span class="ss">:SAVE_HISTORY</span><span class="o">]</span> <span class="o">=</span> <span class="mi">10000</span>
</span><span class='line'><span class="no">IRB</span><span class="o">.</span><span class="n">conf</span><span class="o">[</span><span class="ss">:HISTORY_FILE</span><span class="o">]</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="si">#{</span><span class="no">ENV</span><span class="o">[</span><span class="s1">&#39;HOME&#39;</span><span class="o">]</span><span class="si">}</span><span class="s2">/.irb_history&quot;</span>
</span><span class='line'><span class="no">IRB</span><span class="o">.</span><span class="n">conf</span><span class="o">[</span><span class="ss">:USE_READLINE</span><span class="o">]</span> <span class="o">=</span> <span class="kp">true</span>
</span><span class='line'><span class="no">IRB</span><span class="o">.</span><span class="n">conf</span><span class="o">[</span><span class="ss">:AUTO_INDENT</span><span class="o">]</span> <span class="o">=</span> <span class="kp">true</span>
</span><span class='line'><span class="no">IRB</span><span class="o">.</span><span class="n">conf</span><span class="o">[</span><span class="ss">:PROMPT</span><span class="o">][</span><span class="ss">:SIMPLE</span><span class="o">]</span> <span class="o">=</span> <span class="p">{</span>
</span><span class='line'>  <span class="ss">:PROMPT_I</span> <span class="o">=&gt;</span> <span class="s2">&quot;</span><span class="si">#{</span><span class="no">MY_CUSTOM_PROMPT</span><span class="si">}</span><span class="s2"> &gt; &quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="ss">:PROMPT_N</span> <span class="o">=&gt;</span> <span class="s2">&quot;</span><span class="si">#{</span><span class="no">MY_CUSTOM_PROMPT</span><span class="si">}</span><span class="s2"> &gt;&gt; &quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="ss">:PROMPT_S</span> <span class="o">=&gt;</span> <span class="s2">&quot;</span><span class="si">#{</span><span class="no">MY_CUSTOM_PROMPT</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="no">ANSI</span><span class="o">[</span><span class="ss">:MAGENTA</span><span class="o">]</span><span class="si">}</span><span class="s2">%l</span><span class="si">#{</span><span class="no">ANSI</span><span class="o">[</span><span class="ss">:RESET</span><span class="o">]</span><span class="si">}</span><span class="s2"> &quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="ss">:PROMPT_C</span> <span class="o">=&gt;</span> <span class="s2">&quot;</span><span class="si">#{</span><span class="no">MY_CUSTOM_PROMPT</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="no">ANSI</span><span class="o">[</span><span class="ss">:WHITE</span><span class="o">]</span><span class="si">}</span><span class="s2">*</span><span class="si">#{</span><span class="no">ANSI</span><span class="o">[</span><span class="ss">:RESET</span><span class="o">]</span><span class="si">}</span><span class="s2"> &quot;</span><span class="p">,</span>
</span><span class='line'>  <span class="ss">:RETURN</span>   <span class="o">=&gt;</span> <span class="s2">&quot;</span><span class="si">#{</span><span class="no">ANSI</span><span class="o">[</span><span class="ss">:GREEN</span><span class="o">]</span><span class="si">}</span><span class="s2">=&gt;</span><span class="si">#{</span><span class="no">ANSI</span><span class="o">[</span><span class="ss">:RESET</span><span class="o">]</span><span class="si">}</span><span class="s2"> %s</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'><span class="no">IRB</span><span class="o">.</span><span class="n">conf</span><span class="o">[</span><span class="ss">:PROMPT_MODE</span><span class="o">]</span> <span class="o">=</span> <span class="ss">:SIMPLE</span>
</span><span class='line'><span class="c1"># ----------------------------------------------------------------------------</span>
</span><span class='line'>
</span><span class='line'>
</span><span class='line'><span class="c1"># ----------------------------------------------------------------------------</span>
</span><span class='line'><span class="no">EXISTING_GEMS</span><span class="o">.</span><span class="n">each</span> <span class="p">{</span> <span class="o">|</span><span class="n">g</span><span class="p">,</span> <span class="nb">p</span><span class="o">|</span>
</span><span class='line'>  <span class="nb">puts</span> <span class="s2">&quot;need &#39;</span><span class="si">#{</span><span class="no">ANSI</span><span class="o">[</span><span class="ss">:RED</span><span class="o">]</span><span class="si">}#{</span><span class="nb">p</span><span class="o">[</span><span class="ss">:file</span><span class="o">]</span><span class="si">}#{</span><span class="no">ANSI</span><span class="o">[</span><span class="ss">:RESET</span><span class="o">]</span><span class="si">}</span><span class="s2">&#39; gem&quot;</span> <span class="k">unless</span> <span class="nb">p</span><span class="o">[</span><span class="ss">:exists</span><span class="o">]</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'><span class="c1"># ----------------------------------------------------------------------------</span>
</span><span class='line'>
</span><span class='line'><span class="c1"># ----------------------------------------------------------------------------</span>
</span><span class='line'><span class="nb">at_exit</span> <span class="p">{</span>
</span><span class='line'>  <span class="k">if</span> <span class="no">EXISTING_GEMS</span><span class="o">[</span><span class="ss">:RUBY_DURATION</span><span class="o">][</span><span class="ss">:exists</span><span class="o">]</span>
</span><span class='line'>    <span class="n">delta</span> <span class="o">=</span> <span class="no">Duration</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="no">Time</span><span class="o">.</span><span class="n">now</span> <span class="o">-</span> <span class="no">IRB_START_TIME</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">#{</span><span class="no">ANSI</span><span class="o">[</span><span class="ss">:WHITE</span><span class="o">]</span><span class="si">}</span><span class="s2">%h</span><span class="si">#{</span><span class="no">ANSI</span><span class="o">[</span><span class="ss">:RESET</span><span class="o">]</span><span class="si">}</span><span class="s2"> %~h, </span><span class="si">#{</span><span class="no">ANSI</span><span class="o">[</span><span class="ss">:WHITE</span><span class="o">]</span><span class="si">}</span><span class="s2">%m</span><span class="si">#{</span><span class="no">ANSI</span><span class="o">[</span><span class="ss">:RESET</span><span class="o">]</span><span class="si">}</span><span class="s2"> %~m, </span><span class="si">#{</span><span class="no">ANSI</span><span class="o">[</span><span class="ss">:WHITE</span><span class="o">]</span><span class="si">}</span><span class="s2">%s</span><span class="si">#{</span><span class="no">ANSI</span><span class="o">[</span><span class="ss">:RESET</span><span class="o">]</span><span class="si">}</span><span class="s2"> %~s&quot;</span><span class="p">)</span>
</span><span class='line'>    <span class="nb">puts</span> <span class="s2">&quot;</span><span class="si">#{</span><span class="n">delta</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span class='line'>  <span class="k">end</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'><span class="c1"># ----------------------------------------------------------------------------</span>
</span></code></pre></td></tr></table></div></figure>


<p>Standart kütüphanede olmayan 4 adet modül kullanıyorum. (<em>gem</em>) Bunlar:</p>

<ul>
<li>ruby-duration</li>
<li>wirble</li>
<li>ori</li>
<li>awesome_print</li>
</ul>


<p><code>ruby-duration</code> basit bir zaman hesabı işi için kullanılıyor. <code>wirble</code>
renklendirme için. <code>ori</code> ri dökümantasyonuna erişmek için. Konu ile ilgili
daha önce <a href="http://ugur.ozyilmazel.com/blog/2012/05/02/irb-icin-yardimci-gem-ori/">yazmıştım</a>. <code>awesome_print</code> ise belkide içlerindeki
en süper gem. <code>Hash</code> <code>Array</code> ya da <code>Class</code> bu objeleri print etmek ve çıktıyı
anlamak <code>awesome_print</code> sayesinde çok kolay.</p>

<p>Modüller dışında, IRB&rsquo;nin prompt&rsquo;unu da değiştirdim. Hem renkli
hem de daha anlaşılır oldu.</p>

<p>İlk çalışma anında gereken <code>gem</code> kontrolü yapılıp uyarı geliyor. Çıkışta da
geçen süre yazılıyor ekrana. En önemlisi, <a href="http://ugur.ozyilmazel.com/blog/2012/05/24/irb-rbenv-readline-ve-turkce-karakter/">önceki diğer bir yazımda</a> anlattığım
<code>readline</code> kütüphanesi yardımıyla, <code>INPUTRC</code> çalışıyor. Bu şu anlama geliyor;
<code>HISTORY</code> içinden otomatik tamamlama.</p>

<p>Ufak bir video hazırladım:</p>

<div class="flash-video">
    <div><iframe src="http://www.screenr.com/embed/7kX8" width="650" height="396" frameborder="0"></iframe></div>
</div>



]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[IRB rbenv readline ve Türkçe karakter sorunu / çözümü]]></title>
    <link href="http://ugur.ozyilmazel.com/blog/2012/05/24/irb-rbenv-readline-ve-turkce-karakter/"/>
    <updated>2012-05-24T22:22:00+03:00</updated>
    <id>http://ugur.ozyilmazel.com/blog/2012/05/24/irb-rbenv-readline-ve-turkce-karakter</id>
    <content type="html"><![CDATA[<p><a href="https://rvm.io">RVM</a>&rsquo;mi? <a href="https://github.com/sstephenson/rbenv">Rbenv</a>&rsquo;mi? Her ikiside <a href="http://www.ruby-lang.org/" title="Ruby">Ruby</a> için versiyon
yönetim sistemi. Yani birden farklı değişik veriyon Ruby kullanmak için
kullanılan yardımcı araçlar. İlk önce <strong>rvm</strong>&rsquo;le başladım fakat daha sonra
garip durumlar olduğunu gördüm ve <strong>rbenv</strong>&rsquo;e geçtim.</p>

<!-- more -->


<p>Uzun uzadıya <code>rbenv</code> tanıtımı yapamayacağım. Belki başka bir yazıda değinirim.
Keza, <a href="http://en.wikipedia.org/wiki/Interactive_Ruby_Shell">IRB</a>&rsquo;ye de çok fazla girmeyeceğim. Kısaca interaktif bir
şekilde Ruby yazıp çalıştırdığımız bir konsol.</p>

<p><a href="http://en.wikipedia.org/wiki/Mac_OS_X_Lion" title="Mac OS X Lion">OSX Lion</a>&rsquo;la beraber Ruby versiyon <strong>1.8.7</strong> geliyor. Sisteme
dokunmadan, rbenv yardımıyla <strong>1.9.3-p194</strong> kurdum.</p>

<p>Elimde ad, soyad&rsquo;dan oluşan uzun bir dosya listesi vardı. Türkçe
karakterler içeren. Amacım, hızlıca IRB&rsquo;yi açıp, bu dosyaları <code>rename</code>
etmekti bir çırpıda. Tabi <code>ğ</code> tuşuna bastığım an karşımda bu harfin <strong>unicode</strong>
değerini görmem sinir sistemimi bozdu!</p>

<p>Hemen;</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>rbenv shell system
</span></code></pre></td></tr></table></div></figure>


<p>yaparak OSX&rsquo;le gelen Ruby&rsquo;ye geçtim ve <code>ğ</code> tuşuna orada bastım.
Tabiiki sorunsuz çalıştı. Geri dönmek için;</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>rbenv shell --unset
</span></code></pre></td></tr></table></div></figure>


<p>yaptım.</p>

<p>Daha önceleri Python ve Ruby&rsquo;yi kendim derlemiştim ve konunun bir
şekilde <code>readline</code> kütüphanesiyle ilgili olduğunu hissettim.</p>

<p><code>rbenv</code> kullandığıma göre, <code>rbenv</code>&rsquo;e derleme yaparken bir şekilde
<a href="http://mxcl.github.com/homebrew/" title="The missing package manager for OS X">Homebrew</a>&rsquo;dan kurduğum <code>readline</code>&rsquo;ı gösterebilmeliydim.</p>

<p>Ufak bir <strong>googlelama</strong> yaparak hemen sorunuma çare buldum. Önce <code>brew ls</code> ile
kontrol yapın, readline kurulu mu? diye. Eğer değilse;</p>

<pre><code>brew install readline
</code></pre>

<p>Daha sonra;</p>

<figure class='code'><figcaption><span>readline ve rbenv</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nb">export </span><span class="nv">CPPFLAGS</span><span class="o">=</span>-I/usr/local/Cellar/readline/6.2.2/include
</span><span class='line'><span class="nb">export </span><span class="nv">LDFLAGS</span><span class="o">=</span>-L/usr/local/Cellar/readline/6.2.2/lib/
</span></code></pre></td></tr></table></div></figure>


<p>ile <code>readline</code>&rsquo;nın yerini bildiriyoruz derleyici flaglerine. Bu
işlemden sonra kuruluma geçebiliriz.</p>

<figure class='code'><figcaption><span>rbenv ile Ruby kurmak</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>rbenv install 1.9.3-p194
</span><span class='line'>rbenv global 1.9.3-p194
</span></code></pre></td></tr></table></div></figure>


<p>Şimdi <code>irb</code> yazıp konsol&rsquo;a geçin ve <code>ğ</code> tuşuna basın.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[IRB için yardımcı gem: ORI]]></title>
    <link href="http://ugur.ozyilmazel.com/blog/2012/05/02/irb-icin-yardimci-gem-ori/"/>
    <updated>2012-05-02T13:51:00+03:00</updated>
    <id>http://ugur.ozyilmazel.com/blog/2012/05/02/irb-icin-yardimci-gem-ori</id>
    <content type="html"><![CDATA[<p><a href="http://peepcode.com">Peepcode</a> screencast&#8217;lerinden <a href="https://peepcode.com/products/play-by-play-tenderlove-ruby-on-rails" title="PLAY BY PLAY: AARON PATTERSON">Play by play: Aaron Patterson</a>&#8216;ı
izlerken daldan dala atladım ve <a href="http://en.wikipedia.org/wiki/Interactive_Ruby_Shell">IRB</a> ile ilgili çok işe yarar bir gem
buldum: <strong>ORI</strong></p>

<!-- more -->


<h2>Object-Oriented RI for IRB Console (ori)</h2>

<p>İnteraktif konsollar sayesinde, başka bir araca ihtiyaç duymadan, istediğimiz
gibi yazılım denemeleri yapabiliriz. Pek çok dilde bu özellik var.
(<em>Php, Python, Ruby gibi&#8230;</em>)</p>

<figure class='code'><figcaption><span>Php Interactive</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>php -a
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span>Python Interactive (ipython)</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>pip install ipython <span class="c"># eğer ipython yoksa kurmak için... sudo gerektirebilir</span>
</span><span class='line'>ipython
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span>Ruby Interactive (irb)</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>irb
</span></code></pre></td></tr></table></div></figure>


<p><a href="http://ipython.org/">iPython</a>&#8216;da çok kullandığım <code>help()</code> özelliğini irb&#8217;de aradım fakat
bulamadım. Dediğim gibi, screencast&#8217;i izlerken 6.dakikada durup daldan dala
google&#8217;da zıplamaya başladım. Ve tam o sırada <strong>ORI</strong>&#8216;ye denk geldim.</p>

<figure class='code'><figcaption><span>iPython&#8217;da help()</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="n">help</span><span class="p">()</span>
</span><span class='line'><span class="n">help</span><span class="p">(</span><span class="s">&quot;print&quot;</span><span class="p">)</span>
</span><span class='line'><span class="n">help</span><span class="p">(</span><span class="s">&quot;string&quot;</span><span class="p">)</span>
</span></code></pre></td></tr></table></div></figure>


<p>Pek çok şeyin olduğu gibi IRB&#8217;nin de <code>.irbrc</code> dosyası var. Genelde *nix
ortamında pekçok programın konfigürasyon dosyası benzer şekillerde olur. Bu
dosyaya bir-iki ekleme yaparak işlerimi kolay hale getireceğiz.</p>

<p>Önce ilgili <code>gem</code>&#8216;i kuralım. (<em>Eğer <strong>rvm</strong> ya da <strong>rbenv</strong> kullanıyorsanız
istediğiniz ruby versiyonuna geçip gem&#8217;i öyle kurun.</em>)</p>

<figure class='code'><figcaption><span>ORI gem&#8217;ini kuruyoruz</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>gem install ori <span class="c"># gerekiyorsa başına sudo ekleyin...</span>
</span></code></pre></td></tr></table></div></figure>


<p>Eğer yoksa, <code>$HOME/.irbrc</code> dosyasını oluşturmamız lazım.</p>

<figure class='code'><figcaption><span>$HOME/.irbrc oluşturmak</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>touch <span class="nv">$HOME</span>/.irbrc
</span></code></pre></td></tr></table></div></figure>


<p>Daha sonra kullandığınız text-editörü ile dosyayı açın:</p>

<figure class='code'><figcaption><span>.irbrc</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="nb">require</span> <span class="s1">&#39;rubygems&#39;</span>
</span><span class='line'><span class="nb">require</span> <span class="s2">&quot;irb/completion&quot;</span>
</span><span class='line'><span class="nb">require</span> <span class="s1">&#39;irb/ext/save-history&#39;</span>
</span><span class='line'><span class="nb">require</span> <span class="s1">&#39;ori&#39;</span>
</span><span class='line'>
</span><span class='line'><span class="no">IRB</span><span class="o">.</span><span class="n">conf</span><span class="o">[</span><span class="ss">:SAVE_HISTORY</span><span class="o">]</span> <span class="o">=</span> <span class="mi">10000</span>
</span><span class='line'><span class="no">IRB</span><span class="o">.</span><span class="n">conf</span><span class="o">[</span><span class="ss">:HISTORY_FILE</span><span class="o">]</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="si">#{</span><span class="no">ENV</span><span class="o">[</span><span class="s1">&#39;HOME&#39;</span><span class="o">]</span><span class="si">}</span><span class="s2">/.irb_history&quot;</span>
</span></code></pre></td></tr></table></div></figure>


<p>Son iki satırda irb&#8217;ye diyoruz ki;</p>

<ul>
<li>History tut, maksimum 10000 satır olabilir.</li>
<li>Bu history dosyasının adı <code>.irb_history</code> olsun ve yeri de <code>$HOME</code> altında
olsun.</li>
</ul>


<p>Bu işlemlerden sonra; hemen <code>irb</code> yazıp çalıştırın ve;</p>

<figure class='code'><figcaption><span>IRB&#8217;de ori kullanımı</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">ri</span>                                  <span class="c1"># String ile ilgili help</span>
</span><span class='line'><span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">ri</span> <span class="ss">:upcase</span>                          <span class="c1"># String&#39;in upcase metodu ile ilgili help</span>
</span><span class='line'><span class="nb">Array</span><span class="o">.</span><span class="n">ri</span>                               <span class="c1"># Array ile ilgili help</span>
</span><span class='line'><span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">ri</span> <span class="ss">:pretty_print</span>                    <span class="c1"># String&#39;in pretty_print metodu ile ilgili help</span>
</span><span class='line'><span class="no">Hash</span><span class="o">.</span><span class="n">ri</span> <span class="ss">:[]</span>                            <span class="c1"># Birden fazla döküman bulunması durumu</span>
</span><span class='line'><span class="nb">String</span><span class="o">.</span><span class="n">ri</span> <span class="sr">//</span>                           <span class="c1"># Tüm metodlar</span>
</span><span class='line'><span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">ri</span> <span class="sr">/case/</span>                           <span class="c1"># String metodları içinde case geçen metodlar</span>
</span><span class='line'><span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">ri</span> <span class="sr">/^to_/</span>                           <span class="c1"># String metodları içinde to_ ile başlayanlar</span>
</span><span class='line'><span class="no">Hash</span><span class="o">.</span><span class="n">ri</span> <span class="sr">//</span><span class="p">,</span> <span class="ss">:all</span> <span class="o">=&gt;</span> <span class="kp">true</span>               <span class="c1"># Hash&#39;in public/private tüm metodları</span>
</span><span class='line'><span class="no">Hash</span><span class="o">.</span><span class="n">ri</span> <span class="sr">//</span><span class="p">,</span> <span class="ss">:all</span>                       <span class="c1"># Alternatifi</span>
</span><span class='line'><span class="no">Time</span><span class="o">.</span><span class="n">ri</span> <span class="sr">//</span><span class="p">,</span> <span class="ss">:own</span> <span class="o">=&gt;</span> <span class="kp">true</span>               <span class="c1"># Kendisine ait metodları</span>
</span><span class='line'><span class="no">Time</span><span class="o">.</span><span class="n">ri</span> <span class="sr">//</span><span class="p">,</span> <span class="ss">:own</span>                       <span class="c1"># Alternatifi</span>
</span><span class='line'><span class="nb">String</span><span class="o">.</span><span class="n">ri</span> <span class="sr">//</span><span class="p">,</span> <span class="ss">:access</span> <span class="o">=&gt;</span> <span class="s2">&quot;::&quot;</span>          <span class="c1"># Sadece Class / Instance metodları</span>
</span><span class='line'><span class="nb">String</span><span class="o">.</span><span class="n">ri</span> <span class="sr">//</span><span class="p">,</span> <span class="ss">:access</span> <span class="o">=&gt;</span> <span class="s2">&quot;#&quot;</span>           <span class="c1"># Sadece Class / Instance metodları</span>
</span><span class='line'><span class="nb">String</span><span class="o">.</span><span class="n">ri</span> <span class="sr">//</span><span class="p">,</span> <span class="ss">:visibility</span> <span class="o">=&gt;</span> <span class="ss">:private</span>  <span class="c1"># Sadece private metodları</span>
</span><span class='line'>
</span><span class='line'><span class="nb">String</span><span class="o">.</span><span class="n">ri</span> <span class="sr">//</span><span class="p">,</span> <span class="ss">:visibility</span> <span class="o">=&gt;</span> <span class="o">[</span><span class="ss">:public</span><span class="p">,</span> <span class="ss">:protected</span><span class="o">]</span>
</span><span class='line'>                                       <span class="c1"># Public ve protected metodları</span>
</span><span class='line'>
</span><span class='line'><span class="nb">String</span><span class="o">.</span><span class="n">ri</span> <span class="sr">//</span><span class="p">,</span> <span class="ss">:fullre</span> <span class="o">=&gt;</span> <span class="sr">/\(Object\)::/</span>
</span><span class='line'>                                       <span class="c1"># Receiver&#39;ı Object olan String metodları</span>
</span><span class='line'>
</span><span class='line'><span class="nb">String</span><span class="o">.</span><span class="n">ri</span> <span class="sr">//</span><span class="p">,</span> <span class="ss">:fullre</span> <span class="o">=&gt;</span> <span class="sr">/\(Object\)::/</span><span class="p">,</span> <span class="ss">:access</span> <span class="o">=&gt;</span> <span class="s2">&quot;::&quot;</span><span class="p">,</span> <span class="ss">:visibility</span> <span class="o">=&gt;</span> <span class="ss">:private</span>
</span></code></pre></td></tr></table></div></figure>


<p>Nasıl? benim çok işime yaradı. Umarım sizin de işinize yarar. Konu ile ilgili
harika bir <a href="http://www.screencast-o-matic.com/watch/cXVVYuXpH">video</a> var, örnekler vs. izlemenizi tavsiye ederim.
Projenin <a href="https://github.com/dadooda/ori">github</a> sayfasını da ziyaret edebilirsiniz.</p>

<p>Son olarak irbrc<code>dosyasına bir ek yapalım. Önce</code>wirble` gem&#8217;ini kuralım:</p>

<figure class='code'><figcaption><span>ORI gem&#8217;ini kuruyoruz</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>gem install wirble <span class="c"># gerekiyorsa başına sudo ekleyin...</span>
</span></code></pre></td></tr></table></div></figure>


<p>Daha sonra; <code>.irbrc</code> dosyasını text-editörde açın ve en alt satıra;</p>

<figure class='code'><figcaption><span>wirble gem&#8217;ini .irbrc&#8217;ye entegre etmek</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="no">Wirble</span><span class="o">.</span><span class="n">init</span><span class="p">({</span>
</span><span class='line'>  <span class="ss">:skip_prompt</span> <span class="o">=&gt;</span> <span class="kp">true</span><span class="p">,</span>
</span><span class='line'><span class="p">})</span>
</span><span class='line'><span class="no">Wirble</span><span class="o">.</span><span class="n">colorize</span>
</span></code></pre></td></tr></table></div></figure>


<p>Artık renkli bir irb&#8217;ye sahip olacaksınız!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Rake için bash-completion]]></title>
    <link href="http://ugur.ozyilmazel.com/blog/2012/02/02/rake-icin-bash-completion/"/>
    <updated>2012-02-02T15:30:00+02:00</updated>
    <id>http://ugur.ozyilmazel.com/blog/2012/02/02/rake-icin-bash-completion</id>
    <content type="html"><![CDATA[<p>Terminal&#8217;de çalışırken hep işimi hızlı ve en kolay şekilde yapabilmenin yollarını ararım.
Bu sayede pek çok yeni şey de öğrendim. Octopress sağolsun ciddi ciddi <a href="http://www.ruby-lang.org/" title="Ruby">Ruby</a>
öğrenmeme büyük katkıda bulundu&#8230;</p>

<!-- more -->


<p><code>Rakefile</code> sayesinde pek çok şeyi otomatize ediyoruz. Eğer;</p>

<pre><code>rake -T
</code></pre>

<p>bize yapabileceğimiz işlerin listesini veriyor. Örneğin Octopress sitenizde
bunu denerseniz:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>rake clean                      <span class="c"># Clean out caches: .pygments-cache, .gist-cache, .sass-cache</span>
</span><span class='line'>rake copydot<span class="o">[</span><span class="nb">source</span>,dest<span class="o">]</span>       <span class="c"># copy dot files for deployment</span>
</span><span class='line'>rake deploy                     <span class="c"># Default deploy task</span>
</span><span class='line'>rake gen_deploy                 <span class="c"># Generate website and deploy</span>
</span><span class='line'>rake generate                   <span class="c"># Generate jekyll site</span>
</span></code></pre></td></tr></table></div></figure>


<p>gibi pek çok <strong>rake task</strong>&#8216;i görebilirsiniz. Aklıma ilk şu geldi:</p>

<blockquote><p>peki ben tüm <code>rake</code> komutlarını ezbere mi bileceğim?</p></blockquote>

<p>Bunun mutlaka <code>bash-completion</code>&#8216;ı vardır dedim ve buldum. Mac OS X kullanıyorum
ve paket yöneticisi olarak <a href="http://mxcl.github.com/homebrew/" title="The missing package manager for OS X">Homebrew</a> kullanıyorum. Eğer yoksa ilk
olarak ilgili paketi kurmanız gerekiyor :</p>

<figure class='code'><figcaption><span>Homebrew&#8217;dan bash-completion kurmak</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="c"># önce kontrol edin</span>
</span><span class='line'>brew ls bash-completion <span class="c"># eğer yoksa hata verir...</span>
</span><span class='line'>
</span><span class='line'><span class="c"># yoksa</span>
</span><span class='line'>brew update
</span><span class='line'>brew install bash-completion
</span></code></pre></td></tr></table></div></figure>


<p>Kurumdan sonra; <code>/usr/local/etc/bash_completion.d</code> altına <code>completion_rake</code>
adında bir dosya oluşturup içine aşağıdaki fonksiyonu yazın:</p>

<figure class='code'><figcaption><span>Rakefile için bash_completion</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>touch /usr/local/etc/bash_completion.d/completion_rake <span class="c"># dosyayı oluşturduk</span>
</span><span class='line'>nano /usr/local/etc/bash_completion.d/completion_rake <span class="c"># açtık</span>
</span><span class='line'>
</span><span class='line'><span class="c"># eğer TextMate&#39;iniz ayarlıysa</span>
</span><span class='line'>mate /usr/local/etc/bash_completion.d/completion_rake
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span>completion_rake dosyası</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>_rake<span class="o">()</span>
</span><span class='line'><span class="o">{</span>
</span><span class='line'>    <span class="k">if</span> <span class="o">[[</span> ! -e Rakefile <span class="o">]]</span>; <span class="k">then</span>
</span><span class='line'><span class="k">        return</span>
</span><span class='line'><span class="k">    fi</span>
</span><span class='line'><span class="k">    </span><span class="nv">opts</span><span class="o">=</span><span class="k">$(</span>rake -T | awk <span class="s1">&#39;NR != 1 {print $2}&#39;</span><span class="k">)</span>
</span><span class='line'>    <span class="nv">cur</span><span class="o">=</span><span class="s2">&quot;${COMP_WORDS[COMP_CWORD]}&quot;</span>
</span><span class='line'>    <span class="nv">COMPREPLY</span><span class="o">=(</span> <span class="k">$(</span><span class="nb">compgen</span> -W <span class="s2">&quot;${opts}&quot;</span> -- <span class="k">${</span><span class="nv">cur</span><span class="k">})</span> <span class="o">)</span>
</span><span class='line'><span class="o">}</span>
</span><span class='line'><span class="nb">complete</span> -F _rake rake
</span></code></pre></td></tr></table></div></figure>


<p>Benim <code>.dotfiles</code> şeklinde kendi ayarlarım var bu bakımdan tüm bash-completion
dosyalarım <code>~/Dotfiles/completions/</code> altında bulunuyor bu bakımdan ben
<code>/usr/local/etc/bash_completion.d</code> altına linkliyorum dosyayı.</p>

<pre><code>ln -s ~/Dotfiles/completions/completion_rake /usr/local/etc/bash_completion.d/completion_rake
</code></pre>

<p>şeklinde yapıyorum.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[ve Blog'umu Octopress-TR altyapısıyla kendi sunucuma taşıdım]]></title>
    <link href="http://ugur.ozyilmazel.com/blog/2012/02/02/ve-blogumu-octopress-tr-altyapisiyla-kendi-sunucuma-tasidim/"/>
    <updated>2012-02-02T00:41:00+02:00</updated>
    <id>http://ugur.ozyilmazel.com/blog/2012/02/02/ve-blogumu-octopress-tr-altyapisiyla-kendi-sunucuma-tasidim</id>
    <content type="html"><![CDATA[<p>Yeni yılın ilk post&#8217;undan merhabalar! <strong>27 Kasım 2010</strong>&#8216;dan beri kullandığım <a href="http://tumblr.com" title="Tumblr">Tumblr</a>
sevisini an itibariyle bırakmış bulunuyorum. Neden? genel olarak yazılım geliştirme
ve programlama üzerine blog yazıyorum. Çoğu zaman programlama örnekleri post
etmem gerekiyor.</p>

<!-- more -->


<p>Tumblr&#8217;da bu iş çok zor. <a href="http://octopress.org" title="Octopress">Octopress</a> tam bu işin düşünülmüş bir sistem.
İlk olarak İngilizce yazdığım <a href="http://vigodome.com" title="My English Blog...">sitemden</a> denedim ve çok sevdim.</p>

<p>Siteyi <a href="http://www.ruby-lang.org/" title="Ruby">Ruby</a> ve <a href="https://github.com/mojombo/jekyll" title="Jekyll is a blog-aware, static site generator in Ruby">Jekyll</a> kullanarak <code>local</code>&#8216;de üretip, <code>ssh</code> üzerinden
sunucuma <code>deploy</code> ediyorum. Octopress&#8217;in <a href="http://octopress.org/docs/">dokümantasyon</a> sitesinde herşey
gayet iyi anlatılmış.</p>

<p>Sistem o kadar hoşuma gitti ki ben de hiç Ruby&#8217;den anlamama rağmen oturup tüm sistemi
Türkçe&#8217;ye çevirdim. Octopress sayesinde çok ciddi Ruby tecrübesi edindim. [Github][github]&#8217;dan
fork ettiğim proje: <a href="https://github.com/vigo/textmate-octopress.tmbundle">https://github.com/vigo/octopress</a></p>

<p>Şu an için dokümantasyon eksikliği var Türkçe tarafında. Umarım yakın zamanda
<a href="http://cihanokyay.com/" title="Cihan Okyay">Cihan Okyay</a>&#8216;ın da yardımlarıyla Türkçe dokümantasyon işini bitireceğiz.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[webkit2png ile ekran görüntüsü almak]]></title>
    <link href="http://ugur.ozyilmazel.com/blog/2011/11/26/webkit2png-ile-ekran-goruntusu-almak/"/>
    <updated>2011-11-26T23:56:00+02:00</updated>
    <id>http://ugur.ozyilmazel.com/blog/2011/11/26/webkit2png-ile-ekran-goruntusu-almak</id>
    <content type="html"><![CDATA[<p>Uzunca bir zamandır yazmak istediğim fakat fırsat bulamadığım bir konu:</p>

<p>Python&#8217;la yazılmış <strong>CommandLine Tool</strong>&#8216;u yani Terminal&#8217;den çalışan bir script.
Bu script sayesinde istediğiniz bir web sayfasının ekran görüntüsünü
istediğiniz boyutlarda <code>PNG</code> formatında almanızı sağlıyor. Bu proje aynı zamanda
harika bir Python + Objective C örneği. <strong>PyOBJC</strong> köprüsünü kullanarak
<strong>WebKit</strong> objesine bağlanıyor. <a href="http://www.webkit.org/" title="Webkit">WebKit</a> bildiğiniz gibi
<a href="http://www.apple.com/safari/" title="Safari Web Browser">Safari</a> ve <a href="http://www.google.com/chrome" title="Chrome Web Browser">Chrome</a> web browser&#8217;ının temeli.</p>

<!-- more -->


<h2>webkit2png</h2>

<p>Script, sanki Safari web browser&#8217;ıyla verdiğiniz URL&#8217;i açıyor ve gelen sayfayı
komple kaydediyor. Bu işi normal şartlarda yapmak için çeşitli browser
extension&#8217;larına ihtiyacınız var. Daha önceleri Safari extension olayını
desteklemiyordu. Chrome&#8217;a da extension olayı bildiğiniz gibi sonradan geldi.
Mevcut tek sistem <a href="http://www.mozilla.org/tr/firefox" title="Firefox Web Browser">Firefox</a> ve <a href="http://screengrab.org/">Screengrab</a> extension&#8217;ıydı.</p>

<p>Firefox&#8217;un çılgınlar gibi yeni veriyon çıkartması Screengrab extension&#8217;ını
yazan arkadaşı delirtmiş olacak ki artık destek vermiyor.</p>

<p>An itibariyle bu işi yapmak için Chrome ve Google tarafından yazılan
<strong>Screen Capture</strong> iyi bir alternatif.</p>

<p>Eğer siz de benim gibi Shell&#8217;ciyseniz <strong>webkit2png</strong>&#8216;yi kullanabilirsiniz.
<a href="https://github.com/paulhammond/webkit2png.git">Projenin orijinal yazılımı</a> Paul Hammond&#8217;a ait.</p>

<p>Ben, <a href="http://macports.org" title="Macports">MacPorts</a> ve <a href="http://mxcl.github.com/homebrew/" title="The missing package manager for OS X">Homebrew</a> için küçük bir fix yapmıştım.
İster orijinali ister benim <a href="https://github.com/vigo/webkit2png">fixlediğim</a>
versiyonu kullanabilirsiniz.</p>

<p>MacPorts ve Homebrew paketi olarak mevcut.</p>

<figure class='code'><figcaption><span>webkit2png kurulumu</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>sudo port install webkit2png <span class="c"># macports&#39;dan kurulum</span>
</span><span class='line'>brew install webkit2png <span class="c"># homebrew&#39;dan kurulum  </span>
</span><span class='line'>
</span><span class='line'><span class="c"># benim ~/bin folder&#39;ım local executable&#39;lar için eğer sizde böyle yapmak isterseniz  </span>
</span><span class='line'><span class="c"># mkdir ~/bin yapıp $PATH&#39;e bu folder&#39;ı eklemeniz gerekir.</span>
</span><span class='line'>
</span><span class='line'>git clone httxs://github.com/vigo/webkit2png <span class="c"># kendi kurulumunuz</span>
</span></code></pre></td></tr></table></div></figure>


<p>Kullanımı çok basit;</p>

<pre><code>webkit2png -h
</code></pre>

<p>Hemen açıklaması geliyor. Default olarak 3 versiyon oluşturuyor. Fullsize,
Thumbnail ve Clipped. Default ekran genişliği <strong>800x600</strong> pixel geliyor, aynı
şekilde default clip <strong>200x150</strong> pixel. Ekran görüntüsünü kaydetmek istediğiniz
folder&#8217;a gidin:</p>

<figure class='code'><figcaption><span>Örnek</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nb">cd</span> ~/Desktop
</span><span class='line'>webkit2png -o test1 http://ugur.ozyilmazel.com <span class="c"># tüm siteyi alır 3 dosya üretir...</span>
</span><span class='line'>webkit2png -o test2 -C --clipwidth<span class="o">=</span>800 --clipheight<span class="o">=</span>600 http://ugur.ozyilmazel.com 
</span></code></pre></td></tr></table></div></figure>


<p><code>test1</code> dev gibi ekran görüntüsü aldı. Toplam <strong>3 dosya</strong> üretti:</p>

<pre><code>test1-clipped.png # 200x150
test1-full.png # ben yaptığımda 960x31024 verdi
test1-thumb.png # test1-full'ün thumbnail'i 240x7756
</code></pre>

<p><code>test2</code> ise sadece <strong>800x600</strong>&#8216;lük alanı verdi. Son dönemde, web siteleri hep
<strong>JavaScript</strong> kullandığı için, sitenin tam olarak yüklenmesi bazen saniye bazında
da olsa zaman alıyor. Bunun için webkit2png&#8217;nin <strong>delay</strong> özelliğini
kullanacağız…</p>

<pre><code>webkit2png --delay=5 httx://google.com
</code></pre>

<p>Bu sayede google.com adresi request edildikten sonra 5 saniye bekleyecek ve 5
saniye sonunda ekran görüntüsü alınacak. Başka bir örnek;</p>

<figure class='code'><figcaption><span>Kullanım örnekleri</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>webkit2png -o bilgi -F -W 1024 httx://bilgi.edu.tr <span class="c"># sayfa tam yüklenmemiştir.</span>
</span><span class='line'>webkit2png -o bilgi-delay --delay<span class="o">=</span>5 -F -W 1024 httx://bilgi.edu.tr <span class="c"># sayfa tam olarak yükledi</span>
</span></code></pre></td></tr></table></div></figure>


<p><img src="http://media.tumblr.com/tumblr_lvafid6TsA1qafg0z.png" title="#1" ></p>

<p>&#8211;delay ile sayfa tam olarak yüklendi…</p>

<p><img src="http://media.tumblr.com/tumblr_lvafk24ggN1qafg0z.png" title="#2" ></p>

<p>Çok işe yarayan bir tool. Umarım sizin de işinize yarar…</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Güle güle Steve Jobs]]></title>
    <link href="http://ugur.ozyilmazel.com/blog/2011/10/07/gule-gule-steve-jobs/"/>
    <updated>2011-10-07T15:45:00+03:00</updated>
    <id>http://ugur.ozyilmazel.com/blog/2011/10/07/gule-gule-steve-jobs</id>
    <content type="html"><![CDATA[<p><img src="http://www.tumblr.com/photo/1280/ugurozyilmazel/11138428979/1/tumblr_lsp4rydxaf1qb108n"></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Digiturk Fiyaskolar Serisi Volume 2]]></title>
    <link href="http://ugur.ozyilmazel.com/blog/2011/09/15/digiturk-fiyaskolar-serisi-volume-2/"/>
    <updated>2011-09-15T20:25:00+03:00</updated>
    <id>http://ugur.ozyilmazel.com/blog/2011/09/15/digiturk-fiyaskolar-serisi-volume-2</id>
    <content type="html"><![CDATA[<p>Sadece yazılım geliştirme işlerine ayırmak istediğim blog&#8217;umu ne yazık ki hak
arama, haykırış ve çemkirme platformu olarak kullanmak zorunda kalıyorum. Bu
bakımdan takipçilerimden özür dilerim.</p>

<p>Neden buraya yazıyorum? Bazen çözüm buluyor buraya yazdıklarım. Haydi tekrar
haykırmaya başlayayım…</p>

<!-- more -->


<blockquote><p>Yıl 2011, dünyanın her heryerinden dergilerim tıkır tıkır gelirken,
aynı şehirdeki dergi aylardır bir türlü gelmeyi başaramadı.</p></blockquote>

<p>Bakınız <a href="http://ugur.ozyilmazel.com/blog/2011/03/15/digiturkle-sorunlarim-var/">eski bir maceramız</a>.</p>

<p>Her ay Digiturk müşteri hizmetlerine kayıt bırakmaktan ben bıktım. İşin komiği
hep aynı cevap:</p>

<blockquote><p>Efendim kayıt aldık, önümüzdeki ay sorununuz çözülecek</p></blockquote>

<p><strong>Nisan 2011</strong> dergisi <strong>30 Mayıs</strong>&#8216;da gelince hayret edip şu <a href="http://ugur.ozyilmazel.com/blog/2011/03/31/mutluluktan-aglamak-uzereyim/">postu</a>
yapmıştım. Şans eseri Haziran ayı&#8217;da geldi… Temmuz, Ağustos, Eylül hep yalan oldu.
İşin komik tarafı şu; ayın 5&#8217;i 6&#8217;sı oluyor o an dank ediyor</p>

<blockquote><p>aaaa ya bu ay Digiturk dergisi gelmedi?</p></blockquote>

<p>Arıyorum müşteri hizmetlerini… Haykırıyorum çıldırıyorum. Önümüzdeki ay kesin
çözülür diyorlar… Bu şekilde <strong>3-4 ay</strong> geçti.</p>

<p>En azından şuna seviniyorum, bu abonelik hediyeydi. Yani avantajlı paket diye
bişi seçmiştim, o paketi seçenlere <strong>ücretsiz</strong> yıllık dergi aboneliği varmış.
Arkadaşlarıma da sordum, hepsinde aynı dert dergi aboneliği ile ilgili olarak.</p>

<p>Ya kardeşim, sürekli posta servisiyle ilgili bir sorun olduğunu söylüyorsunuz.
<strong>PTT Kargo</strong> ile yolluyorlarmış. Değiştirin kardeşim o zaman? Ya bu zamanda,
dünya kenti diyoruz İstanbul&#8217;da hala bir dergi her ay düzenli olarak
gelemiyor?</p>

<p>Ben de kızdım, ekstra satın aldığım paketleri iptal ettirdim. Hatta biraz daha
kızarsam komple herşeyi iptal edicem. Çok komik durumlar bunlar, şaka gibi.
Ağzımı bırak başka bir yerimle gülücem. Ooof of…</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Mac OS X: CFUserTextEncoding ve UTF-8 sorunsalı]]></title>
    <link href="http://ugur.ozyilmazel.com/blog/2011/07/21/mac-os-x-cfusertextencoding-ve-utf-8-sorunsali/"/>
    <updated>2011-07-21T23:22:00+03:00</updated>
    <id>http://ugur.ozyilmazel.com/blog/2011/07/21/mac-os-x-cfusertextencoding-ve-utf-8-sorunsali</id>
    <content type="html"><![CDATA[<p>Mac OS X&#8217;le tanıştığım günden beri sinir olduğum ve kimsenin çözümünü
bilemediği bir sorunum var. Aslında bu sorun, Amerikalı olmayan herkesin
sorunu. Bu sorun yüzünden ne <a href="http://python.org" title="Python">Python</a>&#8216;la ne de <a href="http://www.ruby-lang.org/" title="Ruby">Ruby</a>&#8216;le bile işlem yapmakta
sıkıntı oluyor.</p>

<!-- more -->


<p>Bu sorunu ilk kez <a href="http://en.wikipedia.org/wiki/Quick_Look" title="Quicklook">Quicklook</a>&#8216;la tanışınca yaşamıştım. Çok sevdiğim bir
özelliktir quicklook. Dosyayı açmadan içine bakmak. Bir tür hızlı önizleme.
UTF-8 olarak kaydedilmiş text dosyalarına quicklook&#8217;la bakmak istediğimde
Türkçe harflerin bozuk olduğunu görmüştüm.</p>

<p>Başladım aramaya google&#8217;da… Sonra gördümki bu sorun sırf Türkçe için geçerli
değil. Fince, Almanca, Norveç dili vs, İngilizce olmayan yani ASCII&#8217;nin
dışında kalan her dilde bu sorun varmış.</p>

<p>Çeşitli çözümlemeleri var. Örneğin her oluşturduğunuz text dosyası için elle,
manuel olarak &#8220;bom&#8221; yani byte order mark eklemek. Bu delilik. Hele hele Mac
OS&#8217;un pek çok harika özelliğini düşünürsek bu kabus gibi bir şey!</p>

<p>FriendFeed&#8217;den takip ettiğim developer <a href="http://friendfeed.com/bluesign" title="Deniz Edincik">Deniz &#8220;Bluesign&#8221; Edincik</a>, ilgili bir friendfeed yorumunda:</p>

<blockquote><p>eğer … içine 0x08000100:0x08000100 yazarsanız quicklook&#8217;da türkçe sorununu
çözersiniz.</p></blockquote>

<p>demişti. Home folder&#8217;ınızda bulunan <strong>.CFUserTextEncoding</strong> (<em>ilk karakternokta işareti</em>)
dosyasını Terminal&#8217;den görebilirsiniz:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nb">cd</span> <span class="nv">$HOME</span>
</span><span class='line'>ls -al
</span><span class='line'>
</span><span class='line'><span class="c"># ya da</span>
</span><span class='line'>ls -al .CFUserTextEncoding
</span></code></pre></td></tr></table></div></figure>


<p>Evet, söylediği de doğruydu. Denedim, çalışmıştı. Fakat daha sonra garip
problemler çıkmaya başladı sistemde. DVD-ROM çalışmamaya başladı, Safari ara
ara sapıtmaya başladı vs. Geriye dönüp düşündüğümde; en son yaptığım şey
neydi? dediğimde bu <strong>CFUserTextEncoding</strong> olayını hatırladım ve tekrar
eski/orijinal değeri olan <strong>0:0</strong>&#8216;a geri döndüm ve herşey düzeldi.</p>

<p>Araştırdım günlerce. Meğerse bu <strong>CFUserTextEncoding</strong> çok ciddi anlamda
sistemin &#8220;core&#8221; elementlerindenmiş. <em>XXX:XXX</em> şeklinde verilen iki parametre
şu anlama geliyormuş;</p>

<p>ilk değer kullanıcının tercih ettiği encoding, ikinci değer de default
encoding. Aslında <code>0x08000100:0</code> da yazsak; yani ilki Türkçe (<em>kullanıcı
tercihi</em>), ikinci 0 (<em>default</em>) olarak da çalışan bir durum var ortada. Bu
bakımdan her iki değeri de <code>0x08000100:0x08000100</code> yapınca sistemdeki diğer
uygulamalar hatta donanıma kadar giden bir zincir içinde sorunlar
çıkabiliyormuş. Akıllara durgunluk verecek bir durum. Bu olaylar Windows&#8217;da
bile olmuyor…</p>

<p>Her ne kadar da System Preferences&#8217;dan Language listesinde <strong>Türkçe</strong> olsa da,
Finder türkçe file/folder adlarını doğru sort etse de Terminal/Shell&#8217;deki
sorunlar hiç bitmiyor.</p>

<p>Aynı sorunu <a href="http://mobileme.com/idisk">iDisk</a>&#8216;te yaşadım. iPhone için Apple iDisk uygulaması çıkarttığında
hemen bu durumu kontrol ettim. Aynen Mac OS&#8217;da olduğu gibi iDisk&#8217;te de Türkçe
karakterler bozuk çıktı. Bu olay beni gerçekten çok sinir etti. Koskoca Apple
daha doğru dürüst <code>UTF-8</code>desteğini veremiyor.</p>

<p>İşin komiği, ücretsiz servis veren <a href="http://www.dropbox.com/" title="Dropbox">Dropbox</a>&#8216;da (<em>iPhone/iPad app</em>) böyle bir
sıkıntı yok! Aslanlar gibi <code>Türkçe</code> / <code>UTF-8</code> dosyaları görebiliyorsunuz. Yani
yıllık <strong>$100</strong>&#8216;a yakın para ödediğim servis daha doğru dürüst <code>UTF-8</code> text
dosyasını dahi gösteremezken ücretsiz servis/uygulama sorunsuz çalışıyor…</p>

<p>Üşenmedim, bu durumları Apple&#8217;ın ilgili sitesine <a href="http://bugreport.apple.com">bug-report</a> yaptım.
<strong>18 Aralık 2009</strong>&#8216;dan beri (<em>2 yıl neredeyse</em>) bu ticket açık halen…
Muhtemelen Apple, kendi halinde bir Türk yazılımcısının hata raporunu;
Türkçe sort vs gibi sorununu kaale almadı? sallamadı…</p>

<p><img src="http://media.tumblr.com/tumblr_lop7weE9O21qafg0z.png"><br/>
<img src="http://media.tumblr.com/tumblr_lop9n6aYNH1qafg0z.png"><br/>
<img src="http://media.tumblr.com/tumblr_lop9nibfZi1qafg0z.png"></p>

<p>Şoklar devam etti. <a href="http://en.wikipedia.org/wiki/Mac_OS_X_Snow_Leopard" title="Mac OS X Snow Leopard">Snow Leopard</a> çıktı. Sorun aynen devam ediyor. Hatta daha
acı şeyler oldu. OS ile birlikte gelen unix tool&#8217;larının hiç birinde Türkçe
karakter kullanılamıyor!</p>

<p>Örneğin sistemle gelen <a href="http://python.org" title="Python">Python</a>… Python&#8217;un interaktif shell&#8217;i var. Açtım ve ilk
olarak <code>ğ</code> harfine bastım. Tabiik basmadı. Daha sonra <a href="http://www.nano-editor.org/" title="Nano">nano</a> text editor&#8217;ü açtım aynen…
Türke yazamıyorsunuz.</p>

<p>python.org&#8217;dan Mac OS için hazırlanmış installation paketini indirip kurdum,
Python&#8217;un versiyonunu yükseltmek için. Baktım aynı sorun onda da var????????
Yani <a href="http://ubuntu.com/" title="Ubuntu">Ubuntu</a>&#8216;da <a href="http://www.gentoo.org/" title="Gentoo">Gentoo</a>&#8216;da ya da Debian&#8217;da olmayan her türlü sorun bunda…</p>

<p>Demekki sorun ne python&#8217;da ne de nano&#8217;da… Çünki sistemin (<em>unix</em>) kalbi
sayılabilecek kütüphanelerden biri olan &#8221;<strong>readline</strong>&#8221; apple tarafından
derlenirken <code>UTF-8</code> desteği atlanmış… Yazdığım önceki python derleme yazılarımda
bundan bahsetmiştim.</p>

<p>Zaten kendi kendine derlemek ve <a href="http://macports.org" title="Macports">macports</a>&#8216;a <a href="http://mxcl.github.com/homebrew/" title="The missing package manager for OS X">homebrew</a>&#8216;a yöneliş hep bu
eksiklikler yüzünden oldu.</p>

<p>Neyse, sözü uzatmadan, 2 hafta önce <a href="http://en.wikipedia.org/wiki/Mac_OS_X_Lion" title="Mac OS X Lion">OS X Lion</a> (<em>10.7</em>)&#8217;i ofisteki test
makinesine kurdum ve ilk yaptığım iş nano&#8217;yu açıp <code>ğ</code> yazmak oldu ve gözlerim
yaşardı! Evet bu kez *nix tool&#8217;ları için <strong>readline</strong> doğru derlenmişti.
Hemen python&#8217;ı denedim. O da sorunsuz çalıştı ama yine <strong>2009</strong>&#8216;da submit ettiğim
sort işini yapamama, shell locale sorunu aynen olduğu gibi duruyordu.</p>

<p>Pek çok şey denedim, Shell&#8217;den <code>LOCALE</code>, <code>LC_ALL</code> set edilemiyor. Edilmiş gibi
görünüyor ama çalışmıyor. Bu locale olayları yüzünden sisteme eklediğim
fontlarla bile sorunlar yaşadım. (<em>Başka bir blog post olur bundan!</em>)</p>

<p>Quicklook&#8217;a gelince, takip ettiğim bir blog&#8217;da konu hakkında güzel yorumlar ve
çözümler yazılmış. Arkadaşların çoğu İskandinav ülkelerinde yaşadıkları için
onların da bizim gibi kendi dillerinde karakter sorunları var. Oradaki
arkadaşlardan biri demişki:</p>

<blockquote><p>Quicklook, text dosyasını preview edeceği zaman gidip TextEdit&#8217;i kullanıyor.
Bu bakımdan eğer TextEdit&#8217;in default dosya açma özelliği UTF-8 değilse
Quicklook&#8217;da sorun oluyor.</p></blockquote>

<p>Denedim, hakikatten arkadaş haklıymış.</p>

<p><img src="http://media.tumblr.com/tumblr_lop8goUZqZ1qafg0z.png"></p>

<p>Quicklook için text dosyalarını TextMate ile preview yaptırabiliyorsunuz hatta
bunun için TextMate&#8217;in süper bir Quicklook Plug&#8217;ini bile var. Tek dezavantajı
arka planda TextMate&#8217;in hep açık olması gerekiyor aksi taktirde <code>space</code>&#8216;e
basında text dosyası üzerinde, ekrana hiç bir şey çıkmıyor…</p>

<p>Bu yazıdaki amacım Apple&#8217;ı kötülemek değil. Ben büyük bir Apple / Mac OS sever
olarak, diğer Unix/Linux türevlerinde yıllar yıllar önce çözülmüş sorunları
neden <strong>2011</strong> yılında dahi Mac&#8217;de yaşıyorum? Bu konular o kadar basit konularki.
Beni nasıl mı etkiliyor?</p>

<p>Yazılım geliştiricisi olarak, python&#8217;la ya da ruby&#8217;le ya da 2007&#8217;den beri
kullanmadığım php ile bir proje yaparken, saydığım dillerin hiç birinde
<code>array/list/tuple/hash</code> vs sort özelliğini kullanamayacağım. Elimde 10 kişinin
adı soyadı olacak bir listede (<em>ya da array&#8217;de</em>) ve ben bunları tek bir
hareketle sort edemeyeceğim.</p>

<p>Bu en basit örnek. Olay sırf sort değil. Upper/Lower case için özel yöntemler
icat etmem gerekecek vs vs vs… Bir dünya dert.</p>

<p>Tek avunduğum nokta production server&#8217;larımız ya <strong>gentoo</strong> ya da <strong>ubuntu</strong>.
Yani kaya gibi <strong>Linux</strong>… Bu bakımdan local&#8217;de buglı çalışan sort işleminin en
azından remote&#8217;da sorunsuz olacağını biliyorum.</p>

<p>Sonuç;</p>

<ol>
<li>.CFUserTextEncoding ile oynamamak lazım</li>
<li>Quicklook&#8217;da Türkçe text için TextEdit&#8217;e ayar yapmak lazım</li>
<li>Dua edelim Apple sesimizi duysun ve unix tarafında gerekli ayarlamaları yapsın!</li>
</ol>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Rails İstanbul Buluşması #2]]></title>
    <link href="http://ugur.ozyilmazel.com/blog/2011/06/26/rails-istanbul-bulusmasi-2/"/>
    <updated>2011-06-26T14:19:00+03:00</updated>
    <id>http://ugur.ozyilmazel.com/blog/2011/06/26/rails-istanbul-bulusmasi-2</id>
    <content type="html"><![CDATA[<p><img src="http://media.tumblr.com/tumblr_ln9ial49Nn1qafg0z.jpg" title="Rails İstabul Buluşması #2" ></p>

<!-- more -->


<blockquote><p>Biraz gecikmeli de olsa sonunda yazımı yazabildim!</p></blockquote>

<p><a href="http://ugur.ozyilmazel.com/blog/2011/05/13/rails-istanbul-bulusmasi/" title="Rails İstanbul Buluşması">İlki</a> <strong>11 Mayıs 2011</strong>&#8216;de yapılan etkinliğin yenisini iple çekiyordum!
Geçtiğimiz günlerde 2.si duyuruldu. <strong>18 Haziran 2011</strong>, saat  14:00&#8217;de
<a href="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=&amp;aq=&amp;sll=41.026867,28.971022&amp;sspn=0.003926,0.00854&amp;ie=UTF8&amp;ll=41.027709,28.970207&amp;spn=0.001963,0.00427&amp;z=18" title="Helsinki Yurtdaşlar Derneği">Helsinki Yurttaşlar Derneği</a>&#8216;nde yapılacaktı.</p>

<p>Bu defa geçen seferkinden farklı olarak &#8221;<strong>workshop</strong>&#8221; tadında, ufak demolar,
daha önceden yapılmış uygulamalar ve sunumlar olacaktı.</p>

<p>İstanbul Anadolu yakasında yaşıyan biri olarak, karşı (<em>Avrupa yakası</em>) tarafı
çok iyi bilmeyen biriyim. Yani yüzeysel olarak biliyorum ama detayları
bilemiyorum. Geçtiğimiz yıllarda (<em>2006</em>) katıldığım demoscene partisi
<a href="http://7dx-party.org/7d6/" title="7D6 Demoscene Party">7D6</a> da <strong>Rails</strong> buluşmasının yapılacağı yerdeydi. Bu
bakımdan çok zorlanmadım diyebilirim mekanı bulma açısından.</p>

<p><img src="http://media.tumblr.com/tumblr_ln9iacuask1qafg0z.jpg"></p>

<p>Saat 13:30&#8217;da mekana check-in oldum (: Geldiğmde 2-3 kişi vardı. Ev
sahiplerinden sadece <a href="http://twitter.com/demirhanaydin" title="Demirhan Aydın">Demirhan Aydın</a> vardı.
Hemen muhabbete başladık. İnsanlar gelmeye başladı. <a href="http://twitter.com/seyfoyun" title="Seyfeddin Başsaraç">Seyfeddin Başsaraç</a>&#8216;la muhabbet ettim.
Saat 14:30&#8217;a doğru buluşma organizatörlerinden <a href="http://twitter.com/darita" title="Dara Kılıçoğlu">Dara</a> geldi. Sağolsunlar arkadaşlar gelirken soğuk
içecekler ve kurabiyeler getirmişler.</p>

<p>Hemen projeksion makinesi ayarlandı. Uzun masanın etrafında insanlar
toplanmıştı ve bilgisayarlarını yanında getirenler hemen makineleri açıp
hazırlık yapmaya başlamıştı.</p>

<p><img src="http://media.tumblr.com/tumblr_ln9i9gnaIV1qafg0z.jpg"></p>

<p>İlk olarak Lütfi Demirci, Promoqube&#8217;de bir kampanya için geliştirdikleri bir
uygulamayı tanıttı. &#8220;Facebook login&#8221; ile çalışan, fotoğraf gönderme / paylaşma
üzerine kurulu uygulamayı anlatırken ısrarım üzerine (<em>katılımcıları çoğu
rails&#8217;ci olduğu için ben ve benim dışımda bir kaç kişi rails&#8217;den habersiz</em>)
crash-course hızla minik bir rails uygulaması demosu yaptı.</p>

<p>Herzaman olduğu gibi ben devamlı olarak aklımdaki soruları sordum (8. Soru
sormaktaki amacım:</p>

<ul>
<li>Rails&#8217;i Django ile karşılaştırmak</li>
<li>Rails hakkında neleri yapıp yapamayacağımı anlamak.</li>
</ul>


<p>Sağolsunlar, arkadaşlar sorularımı yanıtsız bırakmdılar. Sabırla cevap
verdiler. Daha sonra sevgili <a href="http://twitter.com/matrushka" title="Barış Gümüştaş">Barış Gümüştaş</a></p>

<p>backup işlemlerini otomatik hale getirmek için ofislerinde kullandıkları kendi
geliştirdiği uygulamayı anlattı bize.</p>

<p><img src="http://media.tumblr.com/tumblr_ln9ia1Zd9y1qafg0z.jpg"></p>

<p>Barış&#8217;ın Github&#8217;da <a href="https://github.com/matrushka" title="Barış Gümüştaş - Github Projeleri">yaptığı projeleri</a> takip edebilirsiniz.
Özellikle &#8221;<strong>dropp</strong>&#8221; adlı combobox implementasyonu çok hoşuma gitti. Keza, Mac
OS&#8217;da kullandığı MySQL Client&#8217;ı da acaip hoşuma gitti. <a href="http://www.sequelpro.com/">Sequel Pro</a>
harika bir tool hem de ücretsiz!</p>

<p><img src="http://media.tumblr.com/tumblr_ln9i9p0Oi91qafg0z.jpg"></p>

<p>Son olarak Burak Arıkan, üzerinde uzun zamandır çalıştığı <a href="http://graphcommons.com/">Graph Commons</a>&#8216;u anlattı.
Bir tür ağ/bağlantı analiz sistemi. Çok enteresan bir uygulama. Henüz beta aşamasında.
Davetiye ile çalışıyor. Anlatmakla olmuyor girip kendiniz denemelisiniz.</p>

<p>Genel olarak çok zevkli geçti etkinlik. Yeni arkadaşlarla tanıştım. Birlikte
proje yaptığım ama yüzyüze tanışma şansı bulamadığım sevgili <a href="http://twitter.com/fkucukbaltaci" title="Fatih Küçükbaltacı">Fatih Küçükbaltacı</a>
ile de tanıştım en sonunda.</p>

<p>Katılımcılar arasında benim gibi Python&#8217;cu biri daha vardı. <a href="http://twitter.com/mengukagan" title="Muhammed SenaAydın">Muhammed SenaAydın</a>.
Kendisi de benim gibi <a href="https://www.djangoproject.com/" title="Django Project">Django</a>&#8216;cu + <a href="http://python.org" title="Python">Python</a>&#8216;cu hatta benden fazla olarak da
<a href="http://www.ruby-lang.org/" title="Ruby">Ruby</a> + <a href="http://rubyonrails.org/" title="Ruby on Rails">Rails</a>&#8216;ci (: Ortak özellikler çok olunca hemen kaynaştık.
Ortak arkadaşlarımız da çıktı.</p>

<p>Şuan için adını hatırlayamadığım sıkı muhabbetçi (<em>arkadaşlar umarım bana
adınızı hatırlamadım diye gücenmezsiniz</em>) 2 tane Php / Symphony&#8217;ci arkadaş
vardı. Buradan kendilerine selam söylüyorum.</p>

<p>Bol bol <a href="http://www.apple.com/macosx/" title="Mac OS X">Mac OS X</a>, <a href="http://macromates.com" title="TextMate: The Missing Editor">TextMate</a>, <a href="http://code.google.com/p/macvim/" title="MacVim">MacVim</a>, Vim sohbeti yaptık.
Sevgili <a href="http://twitter.com/onurbozkurt" title="Onur Bozkurt">Onur Bozkurt</a>&#8216;a da selam gönderiyorum.</p>

<p>Keşke daha çok vakit olsaydı sohbete muhabbete doyamadım. 3.sünü iple
çekiyorum. Herkese tavsiye ediyorum bu tür etkinliklere katılmayı.</p>

<p>İleriki buluşmalarda ben de minik bir Django crash-course yapmayı planlıyorum.
Umarım buna hazırlanmak için zamanım olur.</p>

<p>Faydalı Linkler:</p>

<ul>
<li><a href="http://railsistanbul.heroku.com" title="Rails İstanbul Etkinlik Sayfası">http://railsistanbul.heroku.com</a></li>
<li><a href="http://www.facebook.com/rails.istanbul" title="Rails İstanbul Facebook Sayfası">Rails İstanbul Facebook sayfası</a></li>
<li><a href="http://rubyler.com/" title="Rubyler">Rublyer</a></li>
<li><a href="http://www.kupyazilim.com.tr/" title="Küp Yazılım">Küp Yazılım</a></li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Yepyeni bir dergi: Smart Developer]]></title>
    <link href="http://ugur.ozyilmazel.com/blog/2011/06/05/yepyeni-bir-dergi-smart-developer/"/>
    <updated>2011-06-05T14:33:00+03:00</updated>
    <id>http://ugur.ozyilmazel.com/blog/2011/06/05/yepyeni-bir-dergi-smart-developer</id>
    <content type="html"><![CDATA[<p>Genelde iyi bir dergi bulduğumda, hep içimde bir hüzün oluşur:</p>

<blockquote><p>Acaba önümüzdeki ay bu dergi tekrar gelir mi?</p></blockquote>

<p>Genelde benim çok sevdiğim dergiler pek fazla okuyucu bulamıyor ve bazen tek
sayı bazen de iki sayı geliyor ve bir daha gelmiyor.</p>

<p>Yine dergicime yani <a href="http://www.dunyastore.com/default.asp">Dünya Store</a>&#8216;a
gittim. (<em>Aslında bu yazıyı 2 hafta önce yazmayı planlamıştım ama bir türlü
fırsat bulamadım</em>) Yepyeni bir dergi:</p>

<p><a href="http://www.smart-developer.com/">Smart Developer</a></p>

<!-- more -->


<p><img src="http://media.tumblr.com/tumblr_lmbdy4C3eT1qafg0z.jpg" title="Smart Developer" ></p>

<p>adında da anlaşılacağı gibi, &#8220;Smart Phone&#8221; yani akıllı telefonlara uygulama
geliştiren insanlara hitap eden bir dergi. iPhone / Android ve Nokia başta
olmak üzere, popüler cihazlara hitap ediyor.</p>

<p>Derginin bu 2.sayısı. Daha çok yeni. Amerikan menşeyli dergi fakat bizim
dergici dergileri İngiltere&#8217;den getirdiği için üzerindeki fiyat paund
(<em>sterlin</em>) şeklindeydi.</p>

<p><img src="http://media.tumblr.com/tumblr_lmbe5pMvJx1qafg0z.jpg"></p>

<p>Ben bizzat işin iPhone tarafıyla ilgilendiğim için hemen bu konu ile ilgili
nelerin olduğuna baktım dergide. Bu sayı için sadece bir adet konu vardı.
Genelde Android ve Nokia ile ilgili örnekler ve projeler bulunuyordu.</p>

<p><img src="http://media.tumblr.com/tumblr_lmbe7u9FHV1qafg0z.jpg"></p>

<p>Dergide verilen tüm örneklerin ve projelerin olduğu bir dvd çıktı içinden.</p>

<p>Bu sayıdaki konular kısaca şöyle:</p>

<ul>
<li>HTML5: Multi-platform web uygulaması geliştirme (<em>Jo, PhoneGap …</em>)</li>
<li>MeeGo</li>
<li>Harita servisini iPhone uygulamasına entegre etmek</li>
<li>Android için Adobe Flex ve Air</li>
<li>Samsung Bada</li>
<li>Geocoding</li>
<li>Tablet tanıtımları</li>
</ul>


<p>gibi konular bulunmakta. Dergideki bazı diğer dergi reklamları çok ilgimi
çekti:</p>

<p><img src="http://media.tumblr.com/tumblr_lmbegg4Kx81qafg0z.jpg"><br/>
<strong>Admin: Network &amp; Security</strong></p>

<p><img src="http://media.tumblr.com/tumblr_lmbehe7Mha1qafg0z.jpg"><br/>
<strong>Ubuntu User</strong></p>

<p><img src="http://media.tumblr.com/tumblr_lmbei5Ud751qafg0z.jpg"><br/>
<strong>Linux Shell: Handbook</strong></p>

<p><img src="http://media.tumblr.com/tumblr_lmbejhztJG1qafg0z.jpg"><br/>
<strong>Linux Magazine</strong></p>

<p>Sonuç olarak, Smart Developer dergisinin İngiltere fiyatı: <strong>£7.99</strong> yani
bizim paramızla yaklaşık <strong>20 TL</strong>. Satış fiyatıysa <strong>33.5 TL</strong>.</p>

<p>Birikmiş bonuslarımla aldım dergiyi. Bu bakımdan bana maliyeti 5 TL oldu. Eğer
33.5 TL verseydim biraz canım sıkılabilirdi. Bekliyorum yeni sayısını. Bir
şans daha vereceğim…</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Rails İstanbul Buluşması]]></title>
    <link href="http://ugur.ozyilmazel.com/blog/2011/05/13/rails-istanbul-bulusmasi/"/>
    <updated>2011-05-13T16:35:00+03:00</updated>
    <id>http://ugur.ozyilmazel.com/blog/2011/05/13/rails-istanbul-bulusmasi</id>
    <content type="html"><![CDATA[<p>Geçen çarşamba akşamı (<em>11 Mayıs 2011</em>) çok harika bir etkinliğe katıldım.
Adı;</p>

<blockquote><p>Rails İstanbul Buluşması</p></blockquote>

<!-- more -->


<p><img src="http://media.tumblr.com/tumblr_ll4xb6OfFn1qafg0z.jpg" title="Rails İstanbul" ></p>

<p>Adında da anlaşılacağı gibi <a href="http://www.ruby-lang.org/" title="Ruby">Ruby</a> programlama
diliyle uğraşanların olmazsa olmazlarından olan web uygulama framework&#8217;ü
<a href="http://rubyonrails.org/" title="Ruby on Rails">Rails</a>&#8216;i sevenler biraraya geldi!</p>

<p><a href="http://www.promoqube.com/">Promoqube</a> firmasının Beyoğlu&#8217;ndaki ofisinde
gerçekleşen etkinliğe katılım tahminimden de fazla oldu. Etkinlik
<a href="http://www.facebook.com/event.php?eid=124206234321959">Facebook</a> sayfasından
duyuruldu.</p>

<p>Ben bizim ofisten arkadaşım <a href="http://tarikkavaz.com">Tarık Kavaz</a>&#8216;la birlikte
katıldım. Saat 19:00 - 22:00 saaatleri arasında geçmesi planlanan etkinliğe
biz 19:38 gibi dahil olabildik. Saat 21:45 gibi de ayrıldık. Keşke daha çok
kalma imkanım olsaydı!. İçeri girdiğimizde pizzalar söylenmiş hatta yenmiş
bitmişti bile! Neyseki biz önceden yemiş ve tok gelmiştik.</p>

<p><img src="http://media.tumblr.com/tumblr_ll4xnaswt31qafg0z.jpg" title="Rails İstanbul" ></p>

<p>Bizi sevgili <a href="http://www.darakilicoglu.com/">Dara Kılıçoğlu</a> karşıladı. Hatta
yukarıdaki fotoğrafta Dara, Japon asıllı (<em>tahmin ediyorum</em>) Amerika&#8217;lı bir
arkadaşla konuşuyor. İçerisi tahmin ettiğimden daha kalabalıktı. Yaklaşık
40-50 kişi vardı sanki.</p>

<p><img src="http://media.tumblr.com/tumblr_ll4xnpHrXX1qafg0z.jpg" title="Rails İstanbul" ></p>

<p>Anladığım kadarıyla biz yokken, katılımcılar sırayla kendilerini tanıtmışlar
ve ne işle uğraştıklarını anlatmışlardı. Biz tam yemek arasında gelmişiz.
Yemek bittikten sonra sohbet kaldığı yerden devam etti. Katılımcılar
kendilerini tanıttı, ne işle uğraştıklarını ya da halen hangi okulda
okuduklarını, <a href="http://www.ruby-lang.org/" title="Ruby">Ruby</a> ya da <a href="http://rubyonrails.org/" title="Ruby on Rails">Rails</a> ile nasıl tanıştıklarını anlattılar.</p>

<p>Katılanlar arasında halen lisede okuyan öğrenciler olduğunu gördüm.
Bilgisayarla yeni yeni uğraşmaya başlayan ve programcı olmayı planlayan genç
arkadaşlar da vardı. Üniversite öğrencileri / çalışanları, dijital ajans
kurucuları gibi ilginç bir yelpaze vardı ortamda…</p>

<p><img src="http://media.tumblr.com/tumblr_ll4xtu8ApU1qafg0z.jpg" title="Rails İstanbul" ></p>

<p>Genel durum herkesin önce <a href="http://php.net" title="Php">Php</a> dilini terketmesi ya da
windows dot net&#8217;te tükenip yeni arayışlara geçmesiydi. Bizim dışımızda birkaç
<a href="http://python.org" title="Python">Python</a> kullanıcısı da vardı toplantıda.</p>

<p>Bildiğimiz kadarıyla bu tarz bir etkinlik (<em>Rails / Ruby ile ilgili</em>) ilk kez
gerçekleşiyor. Hepimiz anladıkki böyle organizasyonlara ihtiyacımız var. Hem
bildiklerimizi paylaşmak, hem de iş/bağlantı anlamında kendi yazılım
topluluğumuzu oluşturmak için.</p>

<p><a href="http://friendfeed.com">FriendFeed</a> ve <a href="http://twitter.com">Twitter</a> dünyasından da birbirimizi
takip ettiğimiz arkadaşlarla da karşılaştım. <a href="http://www.mobildna.com/">Mobil DNA</a>&#8216;dan
Ercan&#8217;ı sonlara doğru farkettim. Bana göre en uzak köşede karanlıkta kaldığı için göremedim
ilk etapda. <a href="http://burak-arikan.com/">Burak Arıkan</a>&#8216;la tanışmak beni çok
sevindirdi. Kendisi de zaten bizim eski demoscene dünyasını yakından bilen bir
arkadaşmış. Umarım diğer toplantıda daha uzun vakit olur ve daha çok sohbet
etme şansımız olur.</p>

<p><a href="http://mind-function.com">Mind Function</a>&#8216;dan Cihan Özçelik&#8217;le tam giderken
hızlı bir 8bit sohbeti yaptık. Commodore sever olunca benim de çenem düşüyor
tabiiki… <a href="http://friendfeed.com/hasanbasusta">Hasan Başusta</a>&#8216;yı gördüm. Başka
tanıdıkları da gördüm ama şuan isimlerini hatırlamıyorum umarım bana
kızmazlar!</p>

<p><img src="http://media.tumblr.com/tumblr_ll4y2fQOUC1qafg0z.jpg" title="Rails İstanbul" ></p>

<p>Katılımcıların neredeyse %99&#8217;u <a href="http://www.apple.com/macosx/" title="Mac OS X">Mac OS</a> kullanıcısıydı. Birkaç kişi Linux
kullanıcısıydı ve neredeyse Windows&#8217;cu hiç yok gibiydi. Bu ilk buluşma,
tanışma ve kaynaşma havasında geçti. Tahminimce bir sonraki buluşmada, &#8220;hands-
on&#8221; workshop&#8217;lar, sorun çözümleri gibi konuların konuşulacağını düşünüyorum.</p>

<p>Meraktan çatlıyorum, insanlar mac&#8217;de hangi tool&#8217;ları kullanıyor, hangi IDE,
bash_rc&#8217;lerinde neler var? Ne tür trickler ??? Umarım sonraki etkinlikte daha
çok fırsatımız olur bu tür olaylar için.</p>

<p>Bu güzel akşamı organize eden sevgili Promoqube çalışanlarına ve Dara&#8217;ya çok
teşekkür ederim. Etkinliğin yenisini sabırsızlıkla bekliyorum!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Etli dolma yaptım! (yaptık)]]></title>
    <link href="http://ugur.ozyilmazel.com/blog/2011/05/08/etli-dolma-yaptim/"/>
    <updated>2011-05-08T00:00:00+03:00</updated>
    <id>http://ugur.ozyilmazel.com/blog/2011/05/08/etli-dolma-yaptim</id>
    <content type="html"><![CDATA[<p>Bana sorsalar; hiç bıkmadan her öğün gece-gündüz hangi yemeği yiyebilirsin?
hiç tereddüt etmeden şu cevabı veririm:</p>

<blockquote><p>DOLMA</p></blockquote>

<!-- more -->


<p>İster zeytin yağlı olsun ister etli olsun ister yalancı dolma olsun isterse
konserve olsun! Küçüklüğümden beri hastası olduğum yemektir.</p>

<p>Sağolsun eşim de çok güzel yapar bu yemeği. Yemek pişirmeyi çok seviyorum.
Aslında hiç anlamıyorum ama deniyorum işte. Atmasyon yemekler lezzetler vs…</p>

<p>Uzun zamandır hep hayalimdi. Acaba dolma yapabilir miyim? diye düşünüyordum.
Dün gece bu hayalim gerçek oldu! Artık kimseye! muhtaç olmadan, canım her
istediğinde dolma pişirebileceğim! (<em>ya da en azından böyle umuyorum!</em>)</p>

<p>Hemen gerekenleri sayıyorum:</p>

<ul>
<li>1kg Dolmalık kıyma (<em>et reyonundaki abi bunun ne demek olduğunu biliyor</em>)</li>
<li>Kafanı göre miktarda karışık: Dolmalık biber, Kırmızı Çarliston, domates, patates vs</li>
<li>1 demet maydanoz</li>
<li>1 demet dereotu</li>
<li>1 demet fesleğen</li>
<li>1 paket dondurulmuş / doğranmış beyaz soğan (<em>bu pratik olsun diye… eğer istersniz normal beyaz soğanı küpküp doğrayabilirsiniz!</em>)</li>
<li>1 su bardağı beyaz prinç</li>
<li>Kırmızı biber, tuz</li>
<li>Biraz salça</li>
<li>Çok az zeytin yağı</li>
</ul>


<p>Olay bunlardan ibaret…</p>

<p><img src="http://media.tumblr.com/tumblr_lkrqz7OpPg1qafg0z.jpg" title="#1" ><br/>
Önce Mutfak Robotu tezgaha koyulur.</p>

<p><img src="http://media.tumblr.com/tumblr_lkrrpg2C4z1qafg0z.jpg" title="#2" ><br/>
Sebzeler güzelce seçilir ve içleri oyulur…</p>

<p><img src="http://media.tumblr.com/tumblr_lkrrqdeFZy1qafg0z.jpg" title="#3" ><br/>
Yeşillikler yıkanır. (Dereotu, maydanoz ve fesleğen)</p>

<p><img src="http://media.tumblr.com/tumblr_lkrrr8STPN1qafg0z.jpg" title="#4" ><br/>
İçleri oyulan sebzeler iyice temizlenir bol su ile yıkanır.</p>

<p><img src="http://media.tumblr.com/tumblr_lkrrtqZ7vz1qafg0z.jpg" title="#5" ><br/>
Robot&#8217;u kullanma zamanı. Şimdi yeşillikleri robottan geçireceğiz.</p>

<p><img src="http://media.tumblr.com/tumblr_lkrrvxo6XU1qafg0z.jpg" title="#6" ><br/>
Bu kıvama geldi yeşillikler…</p>

<p><img src="http://media.tumblr.com/tumblr_lkrrwhVBVN1qafg0z.jpg" title="#7" ><br/>
Şimdi kıymaları katacağız…</p>

<p><img src="http://media.tumblr.com/tumblr_lkrrx2kNqw1qafg0z.jpg" title="#8" ><br/>
1Kg kıymayı ekledik. Sırada soğan var.</p>

<p><img src="http://media.tumblr.com/tumblr_lkrrxsxjDI1qafg0z.jpg" title="#9" ><br/>
Superfresh&#8217;in tatlı beyaz soğanı. Bu paketin <strong>yarısını</strong> ekliyoruz!</p>

<p><img src="http://media.tumblr.com/tumblr_lkrrynWUxv1qafg0z.jpg" title="#10" ><br/>
Soğan eklendi.</p>

<p><img src="http://media.tumblr.com/tumblr_lkrrz7WB2i1qafg0z.jpg" title="#11" ><br/>
Evde az prinç vardı. Sıcak suyla princi yıkadım. Biraz bekledim.</p>

<p><img src="http://media.tumblr.com/tumblr_lkrs16tjWJ1qafg0z.jpg" title="#12" ><br/>
Karışıma ekledim princi. Şimdi yoğurma zamanı…</p>

<p><img src="http://media.tumblr.com/tumblr_lkrs21A9h61qafg0z.jpg" title="#13" ><br/>
Hijyene çok önem veririm(!) bu bakımdan eldivenlerimi taktım ve olaya girdim.</p>

<p><img src="http://media.tumblr.com/tumblr_lkrs2uq5Kt1qafg0z.jpg" title="#14" ><br/>
Tencereye 2 çorba kaşığı salça ve 1 tatlı kaşığı zeytin yağı koyup hafifce
kavurdum. 1-2 dakika kavurup altını kapattım.</p>

<p><img src="http://media.tumblr.com/tumblr_lkrs4vBFhx1qafg0z.jpg" title="#15" ><br/>
İç malzemem hazır. Hani aynı lahmacunun içi kıvamına getirdim harcı.</p>

<p><img src="http://media.tumblr.com/tumblr_lkrs5qdUXF1qafg0z.jpg" title="#16" ><br/>
Şimdi içleri dolduruyorum. Fazla sıkıştırmadan yeteri kadar harçla dolduracağız.</p>

<p><img src="http://media.tumblr.com/tumblr_lkrs6ph2fH1qafg0z.jpg" title="#17" ></p>

<p><img src="http://media.tumblr.com/tumblr_lkrs79ub1Y1qafg0z.jpg" title="#18" ><br/>
Bu artanlarla eşim yaprak da saracak. Yaprak sarma tekniğini bilmiyorum!</p>

<p><img src="http://media.tumblr.com/tumblr_lkrs84Qeqx1qafg0z.jpg" title="#19" ><br/>
Dolmalar pişmeye hazır.</p>

<p>Tencereye güzelce dizip içine bir su bardağı ile su ekledim. Kapağı kapatıp
yaklaşık <strong>55 dakika</strong> kadar pişirdim. Ara sıra kapağı açıp kontrol ettim. Siz de
süreyi ara kontroller yaparak sağlayabilirsiniz.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[MobileMe takvim güncelleme skandalı!]]></title>
    <link href="http://ugur.ozyilmazel.com/blog/2011/04/18/mobileme-takvim-guncelleme-skandali/"/>
    <updated>2011-04-18T22:10:00+03:00</updated>
    <id>http://ugur.ozyilmazel.com/blog/2011/04/18/mobileme-takvim-guncelleme-skandali</id>
    <content type="html"><![CDATA[<p>Bugün itibariyle <strong>17 gün</strong> sonra artık <a href="http://me.com">MobileMe</a> yeni takvim sistemine geçecek.
Güzel. Fakat şöyle bir sıkıntı var. Eşimin kullandığı işletim sistemi Mac OS X
<a href="http://en.wikipedia.org/wiki/Mac_OS_X_Leopard" title="Mac OS X Leopard">10.5</a> yani <a href="http://en.wikipedia.org/wiki/Mac_OS_X_Leopard" title="Mac OS X Leopard">Leopard</a>. Takvim güncellemesi için web&#8217;den
&#8221;<strong>Upgrade Calendar</strong>&#8221; yapmak gerekiyor.</p>

<p>Geçen gün eşime MobileMe üzerinden yolladığım invitation&#8217;ı neden alamadığını
farkettim. Çünki takvimi güncellemek gerekiyordu. Şimdi hazır bilgisayarın
başındayken hemen bu gerekli güncellemeyi yapayım dedim.</p>

<!-- more -->


<p>me.com&#8217;a giriş yaptım. <strong>Takvimi güncelle</strong> dedim. Bir de ne göreyim?</p>

<blockquote><p>Bu takvim eski işletim sistemi olan 10.5 ile senkronize ediliyor. Eğer
10.6&#8217;ya yani <a href="http://en.wikipedia.org/wiki/Mac_OS_X_Snow_Leopard" title="Mac OS X Snow Leopard">Snow Leopard</a>&#8216;a geçilmezse MobileMe takvim senkronizasyonunu
&#8220;manual&#8221; yani elle ayarlamak gerekiyor. Dikkat!</p></blockquote>

<p>uyarısı ile karşılaştım. Sonuç olarak bu tarz otomatik olmayan ayarlama
işlemleri bir noktadan sonra sorun çıkarabilir. Keza kaldı ki eşim ne anlar
bunları yapmaktan?</p>

<p>Şimdi MobileMe kullanıcısı olarak ne yapmamız lazım? Eşimin bilgisayarını
aldığımız zaman mevcut OS <a href="http://en.wikipedia.org/wiki/Mac_OS_X_Leopard" title="Mac OS X Leopard">Leopard</a> idi (<em>10.5</em>) Şimdi 10.6&#8217;mı satın alacağım?
10.5 gayet güzel yetiyordu. Keza OS&#8217;un içinden çıkan <a href="http://en.wikipedia.org/wiki/ILife">iLife</a>&#8216;ı filan da
yeterliydi…</p>

<p>Yani senkronizasyon servisine zaten para veriyorum. Şimdi OS yetersiz kalıyor
diye bir de gidip hiç ihtiyacım olmamasına rağmen 10.6&#8217;mı satın alacağım ???</p>

<p>Bazen Apple, <a href="http://microsoft.com">Microsoft</a> gibi takılıyor ve beni deli ediyor…</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Mutluluktan ağlamak üzereyim]]></title>
    <link href="http://ugur.ozyilmazel.com/blog/2011/03/31/mutluluktan-aglamak-uzereyim/"/>
    <updated>2011-03-31T18:55:00+03:00</updated>
    <id>http://ugur.ozyilmazel.com/blog/2011/03/31/mutluluktan-aglamak-uzereyim</id>
    <content type="html"><![CDATA[<p>İnanılmaz bir şey oldu! Bugün <strong>2011 Mart&#8217;ın 31</strong>&#8216;i ve Digiturk <strong>Nisan 2011</strong> dergisi
geldi! <strong>Ocak</strong> ayından beri gelemeyen dergi ilk kez olması gerektiği gibi
zamanında geldi! Duygularımı tarif edemiyorum!</p>

<!-- more -->


<p><img src="http://30.media.tumblr.com/tumblr_lixiw8SuiV1qb108no1_400.jpg" width="370">
<img class="right" src="http://25.media.tumblr.com/tumblr_lixiw8SuiV1qb108no2_400.jpg" width="370"></p>

<p>Teşekkürler Digiturk! Son <strong>3 ayda</strong> en az <strong>5-6 kez</strong> arayıp &#8220;kayıt&#8221; açtırdım ve
sonunda sanırım başardınız!</p>

<p>Umarım önümüzdeki aylarda da bu harika performansı gösterirsiniz!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[PYTHONPATH'e ilave]]></title>
    <link href="http://ugur.ozyilmazel.com/blog/2011/03/30/pythonpathe-ilave/"/>
    <updated>2011-03-30T15:40:00+03:00</updated>
    <id>http://ugur.ozyilmazel.com/blog/2011/03/30/pythonpathe-ilave</id>
    <content type="html"><![CDATA[<p><a href="http://en.wikipedia.org/wiki/AppleScript" title="AppleScript">AppleScript</a> ile pek çok uygulama (<em>tabi desteği varsa</em>) kontrol edilebiliyor.
Yine daldan dala atlarken python için yazılmış <a href="http://pypi.python.org/pypi/appscript/1.0.0">appscript</a>
diye bir modül gördüm. Hemen <code>pip</code>&#8216;den kurayım dedim. Kurulum tamamlanmış gibi göründü fakat
kontrol ettiğimde sorun olduğunu gördüm. Bazen <code>pip</code>&#8216;de bile bu tarz sıkıntılar
oluyor. Biraz baktım etrafa çözüm aradım.</p>

<!-- more -->


<p>En azından source&#8217;u indirim kendim kurayım dedim.</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>python setup.py install
</span></code></pre></td></tr></table></div></figure>


<p>Kurulum oldu… aa, bir de baktım ki, klasik <code>site-packages</code>&#8216;ın altına değilde,
şuraya kurmuş:</p>

<pre><code>~/.local/Python/Library/Frameworks/Python.framework/Versions/Current/lib/python2.7/site-packages
</code></pre>

<p>Tabi bu alan benim <code>path</code>&#8216;de olmadığı için bir türlü import edemiyordum. Yine
yeni bir şey öğrendim. Hemen <code>PYTHONPATH</code>&#8216;e ekleme yaptım:</p>

<pre><code>export PYTHONPATH=~/.local/Python/Library/Frameworks/Python.framework/Versions/Current/lib/python2.7/site-packages:$PYTHONPATH
</code></pre>

<p>Bu appscript kısaca şu işe yarıyor; iTunes&#8217;u açıp bir parça çalmaya başlayın.
Bu sırada da ipython&#8217;u açıp aşağıdakileri yazın:</p>

<figure class='code'><figcaption><span>Python ile iTunes&#8217;dan parça adı almak</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="kn">from</span> <span class="nn">appscript</span> <span class="kn">import</span> <span class="o">*</span>
</span><span class='line'><span class="n">iTunes</span> <span class="o">=</span> <span class="n">app</span><span class="p">(</span><span class="s">u&#39;/Applications/iTunes.app&#39;</span><span class="p">)</span>
</span><span class='line'><span class="n">iTunes</span><span class="o">.</span><span class="n">current_track</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">get</span><span class="p">()</span>
</span></code></pre></td></tr></table></div></figure>


<p>Yukarıdaki script <a href="http://www.libertypages.com/clarktech/?p=77">http://www.libertypages.com/clarktech/?p=77</a> sitesinden alınmıştır.</p>

<p>Mutlu programlamalar!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[TextMate ve Path sorunsalı...]]></title>
    <link href="http://ugur.ozyilmazel.com/blog/2011/03/30/textmate-ve-path-sorunsali-dot-dot-dot/"/>
    <updated>2011-03-30T14:40:00+03:00</updated>
    <id>http://ugur.ozyilmazel.com/blog/2011/03/30/textmate-ve-path-sorunsali-dot-dot-dot</id>
    <content type="html"><![CDATA[<p>TextMate&#8217;in sevdiğim özelliklerinden biri <strong>in-line</strong> olarak programlama
yapabilmek. Örneğin <strong>html</strong> ile uğraşıyorsunuz, hemen bir <code>div</code> ve o div&#8217;in
içinde 15 tane <code>p</code> ve p&#8217;lerin içinde de <code>span</code>&#8216;e ihtiyacınız var (<em>iyi uydurdum dimi?</em>)
basit bir hareketle bunu programatik olarak yapabilirsiniz.</p>

<p>Keza <a href="http://code.google.com/p/zen-coding/" title="TextMate için Zen Coding Bundle">Zen Coding</a> adında bir <a href="http://manual.macromates.com/en/bundles" title="TextMate Bundle nedir?">bundle</a> var.
Bununla da benzer hareketleri yapıyorsunuz ama çok pratik olmuyor bazen.</p>

<!-- more -->


<p>Bu tür işleri <a href="http://www.ruby-lang.org/" title="Ruby">Ruby</a> ile yapıyorum. Dokümanın içinde herhangi bir yere Ruby
script&#8217;i yazıp bunu <strong>execute</strong> edebiliyorsunuz. Sadece Ruby değil neredeyse
OS&#8217;daki her dilden istifade edebilirsiniz.</p>

<p>Ağırlıkta <a href="http://python.org" title="Python">Python</a> kullandığım için işlerimi Python ile halletmek daha kolayıma
geliyor. Kendime sordum, neden bu işlerimi de Python ile yapmıyorum? Hemen
menüye baktım elimde neler var diye</p>

<p><img src="http://media.tumblr.com/tumblr_livaghBrNf1qafg0z.png"></p>

<p><code>Kntrl + Shift + E</code> ile &#8221;<strong>Execute Line/Selection as Python</strong>&#8221; komutunu gördüm.
Hemen denedim, Hata mesajı verdi. Denediğim şey:</p>

<figure class='code'><figcaption><span>Python&#8217;la ekrana yazı yazmak</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="k">print</span> <span class="s">&quot;vigo&quot;</span>
</span></code></pre></td></tr></table></div></figure>


<p>yazmaktı. <strong>Invalid syntax</strong> filan. Hemen Bundle Editor&#8217;ü açıp baktım ne
yazılmış diye. Bir baktım <strong>eval()</strong> kullanılmış. Pek çok dilde benzer komut
vardır. <strong>Evaluate</strong>&#8216;in kısaltmasıdır ve <code>string</code> olarak verilen şeyi execute etmeye
çalışır. Fakat Python&#8217;da mevzu bu şekilde değil. Eval, sadece ifadeleri
evaluate ediyor. Yani</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="k">print</span> <span class="nb">eval</span><span class="p">(</span><span class="s">&quot;5+5&quot;</span><span class="p">)</span>
</span></code></pre></td></tr></table></div></figure>


<p>yazdığınızda size 10 yazıyor. Yani <code>string</code> olarak verilen ifadeyi
değerlendiriyor sadece. Şimdi bu işlerle uğraşırken birden farkettimki
<a href="http://macromates.com" title="TextMate: The Missing Editor">TextMate</a>, benim Python&#8217;umu değilde sistemdeki default&#8217;u kullanıyor. Nasıl
yani?</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="c">#!/usr/bin/env python</span>
</span></code></pre></td></tr></table></div></figure>


<p>ile başlayan Python scriptini çalıştırırken gidip <code>/usr/bin</code> deki python&#8217;u
kullanıyor. Halbuki benim environment&#8217;ımda python&#8217;un path&#8217;i</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>/Users/vigo/.local/Python/Library/Frameworks/Python.framework/Versions/Current/bin/python
</span></code></pre></td></tr></table></div></figure>


<p>Hemen TextMate&#8217;in Shell Environment ayarlarındaki <code>PATH</code>&#8216;e ekledim kendi path
bilgilerimi. Gidip sona ekledim. Yani orada yazanların sonuna… (8 Meğerse sona
değil başa eklemek gerekiyormuş!</p>

<p><img src="http://media.tumblr.com/tumblr_livbzuvu0L1qafg0z.png"></p>

<p>aynen şu aşağıdaki gibi yaptım</p>

<figure class='code'><figcaption><span>TextMate&#8217;deki $PATH&#8217;im</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>/Users/vigo/.local/Python/Library/Frameworks/Python.framework/Versions/Current/bin:/Users/vigo/.local/Python/bin:/Users/vigo/.local/Python/Packages/bin:/opt/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
</span></code></pre></td></tr></table></div></figure>


<p>Kullanıcı profilimdeki path bilgisini ve macports&#8217;dan kurduğum
executable&#8217;ların için gereken <code>/opt/local/bin</code>&#8216;i de ekledim.</p>

<p>Sorunun bir kısmını çözmüştüm. Şimdi diğer tarafı çözmem gerekiyordu. Bundle
editöre geri döndüm. Biraz kolaya kaçtım, hatta biraz da tavsiye edilmeyen bir
yöntemi kullandım. <code>eval()</code> yerine <code>exec()</code> kullandım.</p>

<p>Zaten basit işlerde kullanacağım için çok da sorun değil. Belki sizin de
işinize yarar:</p>

<figure class='code'><figcaption><span>TextMate Bundle Snippet</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="c">#!/usr/bin/env python</span>
</span><span class='line'><span class="kn">import</span> <span class="nn">os</span>
</span><span class='line'>
</span><span class='line'><span class="kn">from</span> <span class="nn">sys</span> <span class="kn">import</span> <span class="n">stdout</span><span class="p">,</span> <span class="n">stdin</span><span class="p">,</span> <span class="nb">exit</span><span class="p">,</span> <span class="n">version</span>
</span><span class='line'><span class="kn">from</span> <span class="nn">traceback</span> <span class="kn">import</span> <span class="n">format_stack</span>
</span><span class='line'>
</span><span class='line'><span class="n">py</span> <span class="o">=</span> <span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
</span><span class='line'>
</span><span class='line'><span class="k">if</span> <span class="s">&#39;TM_SELECTED_SCOPE&#39;</span> <span class="ow">in</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">:</span>
</span><span class='line'>    <span class="n">stdout</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">&quot; &quot;</span><span class="p">)</span>
</span><span class='line'><span class="k">else</span><span class="p">:</span>
</span><span class='line'>    <span class="n">stdout</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
</span><span class='line'>
</span><span class='line'>
</span><span class='line'>
</span><span class='line'><span class="c"># original</span>
</span><span class='line'><span class="c"># try:</span>
</span><span class='line'><span class="c">#     scope = {}</span>
</span><span class='line'><span class="c">#     result = eval(py, globals(), scope)</span>
</span><span class='line'><span class="c"># except:</span>
</span><span class='line'><span class="c">#     exc = format_stack()</span>
</span><span class='line'><span class="c">#     stdout.write(exc)</span>
</span><span class='line'><span class="c">#     exit(206) # exiting with this code show&#39;s output in a tooltip </span>
</span><span class='line'><span class="c"># else:</span>
</span><span class='line'><span class="c">#     stdout.write(repr(result))</span>
</span><span class='line'>
</span><span class='line'><span class="c"># mine</span>
</span><span class='line'><span class="k">exec</span><span class="p">(</span><span class="n">py</span><span class="p">)</span>
</span></code></pre></td></tr></table></div></figure>


<p><code>Kntrl + Shift + E</code> ile artık python script&#8217;lerimi basitçe execute edebilirim.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Kendi Ruby'ini Gem'ini kendin kur]]></title>
    <link href="http://ugur.ozyilmazel.com/blog/2011/03/29/kendi-rubyini-gemini-kendin-kur/"/>
    <updated>2011-03-29T00:39:00+03:00</updated>
    <id>http://ugur.ozyilmazel.com/blog/2011/03/29/kendi-rubyini-gemini-kendin-kur</id>
    <content type="html"><![CDATA[<p>Sıcağı sıcağına hemen yazmak istiyorum. &#8220;Kendin kur&#8221; kampanyamızın devamı yeni
bir maceraya daha hoş geldiniz. Amacımız Mac OS X&#8217;e Ruby kurmak. Öncelikle
macports&#8217;un kurulu olması gerekiyor! Bilmem daha önceki yazımlarımda belirttim
mi? ama Macports&#8217;u kurabilmek için <strong>MacOS SDK</strong> kurulu olması gerekiyor.</p>

<p>SDK,Mac aldığınız zaman yanında verilen dvd&#8217;lerde mevcut. En kötüsü
<a href="http://developer.apple.com">developer.apple.com</a>&#8216;a üye olup ücretsiz
indirebilirsiniz.</p>

<!-- more -->


<p>Önce gereken port&#8217;ları kuralım; (<em><a href="https://trac.macports.org/browser/trunk/dports/lang/ruby19/Portfile" title="Ruby port dosyası">macports</a>&#8216;dan</em>)</p>

<pre><code>libiconv
readline
openssl
zlib
ncurses
libyaml
libffi
</code></pre>

<p>Eğer <strong>libyaml</strong> ve <strong>libffi</strong> dışındaki tüm portlar çok sık kullanılanlardan
olduğu için muhtemelen kurulu olabilir. Port&#8217;un kurulu olup olmadığını anlamak
için:</p>

<pre><code>port installed PORT_ADI
</code></pre>

<p>yapapabilirsiniz. Gerekli port&#8217;ları kurduktan sonra, hemen Ruby&#8217;nin source&#8217;unu
indirelim. Ben bu yazıyı yazdığım sırada versiyon <strong>1.9.2-p180</strong> vardı. Hemen;</p>

<p><a href="http://www.ruby-lang.org/en/downloads/" title="Ruby'i indir">http://www.ruby-lang.org/en/downloads/</a></p>

<p>adresinden indirebilirsiniz. Hemen gerekli folder&#8217;ları açalım:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nb">cd</span> <span class="nv">$HOME</span>
</span><span class='line'>mkdir -p .local/Ruby
</span></code></pre></td></tr></table></div></figure>


<p>ve configure satırı:</p>

<figure class='code'><figcaption><span>Ruby için configure</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">LDFLAGS</span><span class="o">=</span><span class="s2">&quot;-L/opt/local/lib&quot;</span> <span class="nv">CPPFLAGS</span><span class="o">=</span><span class="s2">&quot;-I/opt/local/include&quot;</span> ./configure --prefix<span class="o">=</span><span class="nv">$HOME</span>/.local/Ruby --with-rubylibprefix<span class="o">=</span><span class="nv">$HOME</span>/.local/Ruby/lib/ruby1.9 --enable-shared --enable-pthread --program-suffix<span class="o">=</span>1.9 <span class="nv">CFLAGS</span><span class="o">=</span>-D_XOPEN_SOURCE<span class="o">=</span>1
</span></code></pre></td></tr></table></div></figure>


<p>Dikkat ettiyseninz <strong>program-suffix</strong>&#8216;e <strong>1.9</strong> yazdık. Bu şu anlama geliyor,
sistemdeki Ruby&#8217;e dokunmadan, <a href="http://www.ruby-lang.org/" title="Ruby">ruby</a> ile alakalı tüm dosyaların sonuna <strong>1.9</strong> eki
gelecek. Yani sistemde hem <strong>ruby</strong> hem de <strong>ruby1.9</strong> diye iki farklı şey
olacak. Keza bu irb, gem vs herşey için geçerli.</p>

<p>configure başarılı olduysa şimdi;</p>

<pre><code>make
make install
</code></pre>

<p>yapalım. Bu işlem bittiğinde (<em>eğer error ile karşılaşmadıysanız</em>) <code>~/.local</code>
folderınızda;</p>

<pre><code>Ruby/
    bin/
    include/
    lib/
    share/
</code></pre>

<p>folder&#8217;ları oluşmuş olacak. Hemen <code>~/.profile</code> ya da <code>~/.bashrc</code> (<em>her ne
kullanıyorsanız</em>) dosyasını açıp <code>PATH</code>&#8216;e ek yapmak lazım:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nb">export </span><span class="nv">PATH</span><span class="o">=</span>~/.local/Ruby/bin:<span class="nv">$PATH</span>
</span></code></pre></td></tr></table></div></figure>


<p>ya Terminal&#8217;i açıp kapatın ya da;</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nb">source</span> ~/.profile <span class="c"># eğer .profile kullanıyorsanız</span>
</span><span class='line'><span class="nb">source</span> ~/.bashrc <span class="c"># eğer .bashrc kullanıyorsanız</span>
</span></code></pre></td></tr></table></div></figure>


<p>Şimdi <code>ruby</code> yazıp TAB&#8217;e basın ve <strong>ruby1.9</strong>&#8216;u görün! hemen <code>IRB</code> (<em>Ruby interactive
shell</em>) için fix yapalım. Renkli görüntü için;</p>

<pre><code>gem1.9 install wirble
</code></pre>

<p>diyin… sonra <code>~/.irbrc</code> dosyası oluşturalım;</p>

<figure class='code'><figcaption><span>.irbrc dosyasını oluşturuyoruz</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nb">cd</span> <span class="nv">$HOME</span>
</span><span class='line'>touch .irbrc
</span><span class='line'>nano .irbrc
</span></code></pre></td></tr></table></div></figure>


<p>aşağıdakileri paste edelim:</p>

<figure class='code'><figcaption><span>.irbrc</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="nb">require</span> <span class="s1">&#39;rubygems&#39;</span>
</span><span class='line'><span class="nb">require</span> <span class="s1">&#39;wirble&#39;</span>
</span><span class='line'><span class="no">Wirble</span><span class="o">.</span><span class="n">init</span><span class="p">({</span>
</span><span class='line'>  <span class="ss">:skip_prompt</span> <span class="o">=&gt;</span> <span class="kp">true</span><span class="p">,</span>
</span><span class='line'><span class="p">})</span>
</span><span class='line'><span class="no">Wirble</span><span class="o">.</span><span class="n">colorize</span>
</span></code></pre></td></tr></table></div></figure>


<p>Detaylı bilgi için <a href="http://pablotron.org/software/wirble/README">Wirble</a>&#8216;in sitesine bakabilirsiniz.</p>

<p>Denemek için <code>irb</code>&#8216;yi çalıştırın ve;</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="o">[</span><span class="s2">&quot;test&quot;</span><span class="p">,</span> <span class="p">{</span><span class="ss">:hash_key</span> <span class="o">=&gt;</span> <span class="nb">proc</span> <span class="p">{</span> <span class="kp">nil</span> <span class="p">}},</span> <span class="no">Class</span><span class="p">,</span> <span class="mi">5</span><span class="o">]</span>
</span></code></pre></td></tr></table></div></figure>


<p>Keza, <code>RUBY</code> yazıp TAB&#8217;e basın ve otomatik tamamlama olayını görün!</p>

<p><img src="http://media.tumblr.com/tumblr_lisetjtOZs1qafg0z.png" title="Renki IRB" ></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Bu defa son]]></title>
    <link href="http://ugur.ozyilmazel.com/blog/2011/03/23/bu-defa-son/"/>
    <updated>2011-03-23T15:30:00+02:00</updated>
    <id>http://ugur.ozyilmazel.com/blog/2011/03/23/bu-defa-son</id>
    <content type="html"><![CDATA[<p>Biliyorum daha dün (<em>ya da önceki gün</em>) bu konu ile ilgili bir güncelleme
yapmıştım fakat asıl yapmam gerekeni daha yeni hatırladım. Hatta kendi
tarafımda pek çok şeyi de düzeltmek zorunda kaldım.</p>

<p><strong>Kendi Ruby&#8217;ni kendin kur</strong> olayına gireceğim bu bakımdan aklımda bir lamba
yandı.</p>

<p>Aslında bu lamba çok daha önce yanmıştı ama ben unutmuşum.</p>

<!-- more -->


<p>Sırasıyla;</p>

<ol>
<li><a href="http://ugur.ozyilmazel.com/blog/2011/02/10/kendi-pythonunu-djangonu-paketlerini-kendin-kur/">Kendi Python’unu, Django’nu, paketlerini kendin kur</a></li>
<li><a href="http://ugur.ozyilmazel.com/blog/2011/03/22/kendi-pythonunu-kendin-kur-yazimda-eksik-yerler-buldum/">“Kendi Python’unu kendin kur” yazımda eksik yerler buldum!</a></li>
</ol>


<p>yazılarına son bir ek geliyor!</p>

<p>Tüm ayarlamalarımızı <code>~/.local</code> üzerine kurmuştuk ya, işe başlamadan önce;</p>

<figure class='code'><figcaption><span>Başlamadan Önce</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nb">cd</span> <span class="nv">$HOME</span>
</span><span class='line'>mkdir .local
</span><span class='line'>mkdir .local/Python
</span><span class='line'>mkdir .local/Python/Packages
</span><span class='line'>
</span><span class='line'><span class="c"># ya da</span>
</span><span class='line'>mkdir -p ~/.local/Python/Packages
</span></code></pre></td></tr></table></div></figure>


<p>Şeklinde ilerleyeceğiz. Bu sayede, ileride Ruby kurmaya karar verirsek,
<code>.local/Ruby</code> altına derleyeceğiz Ruby&#8217;i…</p>

<p>Hemen configure satırını da düzeltelim:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>./configure --enable-unicode<span class="o">=</span>ucs4 --prefix<span class="o">=</span><span class="nv">$HOME</span>/.local/Python --enable-framework<span class="o">=</span><span class="nv">$HOME</span>/.local/Python/Library/Frameworks
</span></code></pre></td></tr></table></div></figure>


<p><code>.bashrc</code> için gereken düzeltmeler:</p>

<figure class='code'><figcaption><span>.bashrc için ekleme</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nb">export </span><span class="nv">PATH</span><span class="o">=</span>~/.local/Python/Packages/bin:<span class="nv">$PATH</span>
</span><span class='line'><span class="nb">export </span><span class="nv">PATH</span><span class="o">=</span>~/.local/Python/bin:<span class="nv">$PATH</span>
</span><span class='line'><span class="nb">export </span><span class="nv">PATH</span><span class="o">=</span>~/.local/Python/Library/Frameworks/Python.framework/Versions/Current/bin:<span class="nv">$PATH</span>
</span><span class='line'>
</span><span class='line'><span class="c"># pip kurulumundan sonra ekleyin...</span>
</span><span class='line'>
</span><span class='line'><span class="nb">export </span><span class="nv">PIP_INSTALL_OPTION</span><span class="o">=</span><span class="s2">&quot;--prefix=/Users/KULLANICI_ADI/.local/Python/Packages/&quot;</span>
</span><span class='line'><span class="nb">export </span><span class="nv">PYTHONPATH</span><span class="o">=</span>~/.local/Python/Packages/lib/python2.7/site-packages
</span></code></pre></td></tr></table></div></figure>


<p>Aslında önceki yazılara göre tek fark, <code>.local</code> folder&#8217;ının altına <strong>Python</strong>
diye bir folder açtık ve tüm derleme ve kurulum işleri için o yeri gösterdik.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Kendi Python'unu kendin kur yazımda eksik yerler buldum]]></title>
    <link href="http://ugur.ozyilmazel.com/blog/2011/03/22/kendi-pythonunu-kendin-kur-yazimda-eksik-yerler-buldum/"/>
    <updated>2011-03-22T15:45:00+02:00</updated>
    <id>http://ugur.ozyilmazel.com/blog/2011/03/22/kendi-pythonunu-kendin-kur-yazimda-eksik-yerler-buldum</id>
    <content type="html"><![CDATA[<p>Geçtiğimiz günlerde yazdığım <a href="http://ugur.ozyilmazel.com/blog/2011/02/10/kendi-pythonunu-djangonu-paketlerini-kendin-kur/">yazımda</a> çok önemli bir eksiklik
yaptığımı bugün farkettim. Neden bugün? Bugün yeni makine kuruyordum ve sıra
<a href="http://python.org" title="Python">Python</a>&#8216;u kurmaya gelmişti. Hemen blog&#8217;umu açıp kendi yazdığım yazımı
okumaya başladım.</p>

<!-- more -->


<p>Herşey güzel güzel ilerledi. Sıra python&#8217;un PIL paketini kurmaya gelmişti ki
jeton düştü! <strong>P</strong>ython <strong>I</strong>mage <strong>L</strong>ibrary&#8217;nin ihtiyacı olan 2 kütüphane eksikti…
bunlar:</p>

<pre><code>jpeg
freetype
</code></pre>

<p>Bu kütüphaneleri ports&#8217;dan kurmak gerekiyor öncesinden:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>sudo port install jpeg freetype
</span></code></pre></td></tr></table></div></figure>


<p>şeklinde kurmak gerekiyor Jpg ve Font desteği için…</p>
]]></content>
  </entry>
  
</feed>

