<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-127694781504315761</id><updated>2011-12-05T16:58:15.437+02:00</updated><category term='linux'/><category term='multithread'/><category term='feof'/><category term='threads'/><category term='latex'/><category term='boost'/><category term='fopen'/><category term='fgets'/><category term='xargs'/><category term='file i/o'/><category term='xna'/><category term='django'/><category term='bash'/><category term='Ajax'/><category term='Gutsy Gibbon'/><category term='c'/><category term='programlama'/><category term='fgetc'/><category term='find'/><category term='dos2unix'/><category term='appengine'/><category term='Virtual PC 2007'/><category term='git'/><category term='python'/><category term='rails'/><category term='video'/><category term='windows'/><category term='oyun yapımı'/><category term='Ubuntu'/><category term='örnek'/><category term='multithreaded'/><category term='c++'/><category term='svn'/><category term='google'/><title type='text'>Hamdi Akoğuz</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://akoguz.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://akoguz.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Hamdi Akoğuz</name><uri>http://www.blogger.com/profile/05624800173829283848</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>22</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-127694781504315761.post-5282390036551529328</id><published>2011-12-05T16:49:00.003+02:00</published><updated>2011-12-05T16:58:15.444+02:00</updated><title type='text'>git - undo last commit</title><content type='html'>&lt;pre&gt; $ git reset --soft HEAD~1 &lt;br /&gt;edit working tree &lt;br /&gt;stage changes to be committed &lt;br /&gt;$ git commit -c ORIG_HEAD &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;yada değişiklikleri yapıp indexe ekledikten sonra git commit --amend. Sadece commit mesajını değiştirmek veya unutulan bişeyi eklemek için bu yeterli.&lt;br /&gt;&lt;br /&gt;Ama her ikisi de sadece son commit push edilmemişse kullanılabilir. Yoksa ortalık karışır.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/127694781504315761-5282390036551529328?l=akoguz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akoguz.blogspot.com/feeds/5282390036551529328/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=127694781504315761&amp;postID=5282390036551529328' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/5282390036551529328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/5282390036551529328'/><link rel='alternate' type='text/html' href='http://akoguz.blogspot.com/2011/12/git-undo-last-commit.html' title='git - undo last commit'/><author><name>Hamdi Akoğuz</name><uri>http://www.blogger.com/profile/05624800173829283848</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-127694781504315761.post-2774353605587089022</id><published>2011-03-03T13:03:00.001+02:00</published><updated>2011-03-03T13:03:12.196+02:00</updated><title type='text'>ls komutu renklerini ayarlamak</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;p&gt;ls kullandığımızda listelenen dosya ve dizinlerin renklerini ayarlamak i&amp;ccedil;in LS_COLORS değişkeninin ayarlamak gerekiyor.&lt;/p&gt;  &lt;p&gt;Ama&amp;ccedil; sadece okunabilirliğini hızlıca artırmaksa export LS_COLORS="" ile default ayarlara d&amp;ouml;nmeyi bi denemek lazım.&lt;/p&gt;  &lt;p&gt;Fantazi modellere girmek i&amp;ccedil;in&amp;nbsp;&lt;/p&gt;  &lt;blockquote&gt;  &lt;p&gt;LS_COLORS="di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:"&lt;/p&gt;  &lt;/blockquote&gt;  &lt;p&gt;gibi bir komut kullanmak lazım. Kısaltmaların anlamı i&amp;ccedil;in dircolors --print-database komutuna bakılabilir. Kısaca :&lt;/p&gt;  &lt;blockquote&gt;  &lt;p&gt;&lt;tt&gt;di&lt;/tt&gt;&amp;nbsp;= directory&lt;br /&gt;&lt;tt&gt;fi&lt;/tt&gt;&amp;nbsp;= file&lt;br /&gt;&lt;tt&gt;ln&lt;/tt&gt;&amp;nbsp;= symbolic link&lt;br /&gt;&lt;tt&gt;pi&lt;/tt&gt;&amp;nbsp;= fifo file&lt;br /&gt;&lt;tt&gt;so&lt;/tt&gt;&amp;nbsp;= socket file&lt;/p&gt;  &lt;/blockquote&gt;  &lt;p&gt;Renkler ve &amp;ouml;zellikler aşağıdaki gibi. Yukarıdaki komuttan da anlaşılacağı &amp;uuml;zere ; marifetiyle &amp;ouml;zellik ve renk birleştirilebiliyor. &amp;Ouml;r: 41;93;1 -&amp;gt; kırmızı arkaplan &amp;uuml;zerine sarı ve kalın yazı.&lt;/p&gt;  &lt;blockquote&gt;  &lt;p&gt;&lt;span style="font-family: sans-serif, sans, arial, verdana; font-size: medium;"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;div class="CodeRay"&gt; &lt;div class="code"&gt;&lt;pre&gt;0 = default colour 1 = bold 4 = underlined 5 = flashing text 6 = no change 7  = reverse field 8 = black 9 = strikethrough (cool!) 10 - 29= no change 30  = light green 31  = red 32  = green 33  = orange 34  = blue 35  = purple 36  = cyan 37  = grey 38 = underline 39 = no change 40  = black background 41  = red background 42  = green background 43  = orange background 44  = blue background 45  = purple background 46  = cyan background 47  = grey background 90  = dark grey 91  = light red 92  = light green 93  = yellow 94  = light blue 95  = light purple 96  = turquoise 100 = dark grey background 101 = light red background 102 = light green background 103 = yellow background 104 = light blue background 105 = light purple background 106 = turquoise background&lt;/pre&gt;&lt;/div&gt; &lt;/div&gt;   &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/127694781504315761-2774353605587089022?l=akoguz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akoguz.blogspot.com/feeds/2774353605587089022/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=127694781504315761&amp;postID=2774353605587089022' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/2774353605587089022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/2774353605587089022'/><link rel='alternate' type='text/html' href='http://akoguz.blogspot.com/2011/03/ls-komutu-renklerini-ayarlamak.html' title='ls komutu renklerini ayarlamak'/><author><name>Hamdi Akoğuz</name><uri>http://www.blogger.com/profile/05624800173829283848</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-127694781504315761.post-1942623732104813534</id><published>2011-02-06T12:44:00.002+02:00</published><updated>2011-03-01T10:21:25.945+02:00</updated><title type='text'>Low Skills causes Procrastination</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://posterous.com/getfile/files.posterous.com/temp-2010-12-04/bJHkHyfyEsjoHfxyixtjjjdmInysgmiJysiettrIkIezEduqDFuICajAnBJk/300px-Challenge_vs_skill.svg.png.scaled500.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 300px; height: 292px;" src="http://posterous.com/getfile/files.posterous.com/temp-2010-12-04/bJHkHyfyEsjoHfxyixtjjjdmInysgmiJysiettrIkIezEduqDFuICajAnBJk/300px-Challenge_vs_skill.svg.png.scaled500.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class='posterous_autopost'&gt;&lt;p&gt;&lt;br /&gt;&lt;a href="http://chestergrant.posterous.com/low-skills-causes-procrastination"&gt;http://chestergrant.posterous.com/low-skills-causes-procrastination&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/127694781504315761-1942623732104813534?l=akoguz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akoguz.blogspot.com/feeds/1942623732104813534/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=127694781504315761&amp;postID=1942623732104813534' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/1942623732104813534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/1942623732104813534'/><link rel='alternate' type='text/html' href='http://akoguz.blogspot.com/2011/02/low-skills-causes-procrastination.html' title='Low Skills causes Procrastination'/><author><name>Hamdi Akoğuz</name><uri>http://www.blogger.com/profile/05624800173829283848</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-127694781504315761.post-6030071156239188768</id><published>2010-11-30T01:46:00.008+02:00</published><updated>2010-12-03T17:17:33.346+02:00</updated><title type='text'>.htaccess dosyasına erişimi engelleme</title><content type='html'>&lt;div class="posterous_autopost"&gt;&lt;ol&gt;&lt;li&gt;&lt;code&gt;chmod 644 .htaccess&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;&amp;lt;Files .htaccess&amp;gt;&lt;br /&gt;     order allow,deny&lt;br /&gt;     deny from all&lt;br /&gt;    &amp;lt;/Files&amp;gt;&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Ayrıca dizin içeriğinin listelenmesini engellemek için :&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;span style="font-family: Monaco, Panic Sans, Lucida Console, Courier New, Courier, monospace, sans-serif; font-size: 11px; line-height: 20px;"&gt;&lt;code&gt;Options All -Indexes&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/127694781504315761-6030071156239188768?l=akoguz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akoguz.blogspot.com/feeds/6030071156239188768/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=127694781504315761&amp;postID=6030071156239188768' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/6030071156239188768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/6030071156239188768'/><link rel='alternate' type='text/html' href='http://akoguz.blogspot.com/2010/11/htaccess-dosyasna-erisimi-engelleme.html' title='.htaccess dosyasına erişimi engelleme'/><author><name>Hamdi Akoğuz</name><uri>http://www.blogger.com/profile/05624800173829283848</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-127694781504315761.post-3845211506939024534</id><published>2010-11-30T00:47:00.001+02:00</published><updated>2010-11-30T00:47:52.169+02:00</updated><title type='text'>Awk ile sutun toplami</title><content type='html'>&lt;div class='posterous_autopost'&gt;ls veya ps -o pid,rss,command gibi bir komutla listelenen dosya boyu veya belleği toplamak için awk kullanılabilirmiş.&lt;p /&gt;Ör: webfaction&amp;#39;da uygulamalarımın harcadığı toplam bellek için :&lt;p /&gt;ps -u hamdiakoguz -o pid,rss,command | awk &amp;#39;{ SUM += $2} END { print SUM/1024 &amp;quot; MB&amp;quot; }&amp;#39;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/127694781504315761-3845211506939024534?l=akoguz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akoguz.blogspot.com/feeds/3845211506939024534/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=127694781504315761&amp;postID=3845211506939024534' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/3845211506939024534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/3845211506939024534'/><link rel='alternate' type='text/html' href='http://akoguz.blogspot.com/2010/11/awk-ile-sutun-toplami.html' title='Awk ile sutun toplami'/><author><name>Hamdi Akoğuz</name><uri>http://www.blogger.com/profile/05624800173829283848</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-127694781504315761.post-329840665363027420</id><published>2010-09-06T02:23:00.001+03:00</published><updated>2010-09-06T02:23:17.214+03:00</updated><title type='text'>You get judged by your best work, not your bad work.</title><content type='html'>&lt;div class='posterous_autopost'&gt;If you want to make excellent stuff, you need to make a lot of stuff. &lt;br /&gt;If you want to make a lot of stuff, you’ll make a lot of crap. &lt;br /&gt;If you want to make excellent stuff, you need to make a lot of crap. &lt;p /&gt; quoted from sebastianmarshall.com&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/127694781504315761-329840665363027420?l=akoguz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akoguz.blogspot.com/feeds/329840665363027420/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=127694781504315761&amp;postID=329840665363027420' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/329840665363027420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/329840665363027420'/><link rel='alternate' type='text/html' href='http://akoguz.blogspot.com/2010/09/you-get-judged-by-your-best-work-not.html' title='You get judged by your best work, not your bad work.'/><author><name>Hamdi Akoğuz</name><uri>http://www.blogger.com/profile/05624800173829283848</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-127694781504315761.post-6979376860862222635</id><published>2010-08-19T23:23:00.001+03:00</published><updated>2010-08-19T23:23:06.058+03:00</updated><title type='text'>Bir zamanlar microsoft</title><content type='html'>&lt;div class='posterous_autopost'&gt;Yiğidi öldür hakkını yeme windows kadar backwards compatibility &lt;br /&gt;takıntısı olan yoktur heralde. &lt;br /&gt;... &lt;br /&gt;I first heard about this from one of the developers of the hit game &lt;br /&gt;SimCity, who told me that there was a critical bug in his application: &lt;br /&gt;it used memory right after freeing it, a major no-no that happened to &lt;br /&gt;work OK on DOS but would not work under Windows where memory that is &lt;br /&gt;freed is likely to be snatched up by another running application right &lt;br /&gt;away. The testers on the Windows team were going through various &lt;br /&gt;popular applications, testing them to make sure they worked OK, but &lt;br /&gt;SimCity kept crashing. They reported this to the Windows developers, &lt;br /&gt;who disassembled SimCity, stepped through it in a debugger, found the &lt;br /&gt;bug, and added special code that checked if SimCity was running, and &lt;br /&gt;if it did, ran the memory allocator in a special mode in which you &lt;br /&gt;could still use memory after freeing it. &lt;br /&gt;... &lt;br /&gt;&lt;a href="http://www.joelonsoftware.com/articles/APIWar.html"&gt;http://www.joelonsoftware.com/articles/APIWar.html&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/127694781504315761-6979376860862222635?l=akoguz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akoguz.blogspot.com/feeds/6979376860862222635/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=127694781504315761&amp;postID=6979376860862222635' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/6979376860862222635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/6979376860862222635'/><link rel='alternate' type='text/html' href='http://akoguz.blogspot.com/2010/08/bir-zamanlar-microsoft.html' title='Bir zamanlar microsoft'/><author><name>Hamdi Akoğuz</name><uri>http://www.blogger.com/profile/05624800173829283848</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-127694781504315761.post-2452944470933462509</id><published>2010-08-19T22:58:00.001+03:00</published><updated>2010-08-19T22:58:28.169+03:00</updated><title type='text'>Recovering deleted files using grep</title><content type='html'>&lt;div class='posterous_autopost'&gt;grep -a -B 25 -A 100 'some string in the file' /dev/sda1 &gt; results.txt &lt;br /&gt;&lt;a href="http://spin.atomicobject.com/2010/08/18/undelete"&gt;http://spin.atomicobject.com/2010/08/18/undelete&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/127694781504315761-2452944470933462509?l=akoguz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akoguz.blogspot.com/feeds/2452944470933462509/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=127694781504315761&amp;postID=2452944470933462509' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/2452944470933462509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/2452944470933462509'/><link rel='alternate' type='text/html' href='http://akoguz.blogspot.com/2010/08/recovering-deleted-files-using-grep.html' title='Recovering deleted files using grep'/><author><name>Hamdi Akoğuz</name><uri>http://www.blogger.com/profile/05624800173829283848</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-127694781504315761.post-4099708587371346463</id><published>2010-06-12T13:28:00.002+03:00</published><updated>2010-07-08T22:28:43.816+03:00</updated><title type='text'>Sahibinden.com haritasını yahoo maps'de aç</title><content type='html'>Aşağıdaki bookmarklet marifetiyle google sahibinden.com'un haritası yahoo ile açılır.&lt;br /&gt;&lt;br /&gt;&lt;a href='javascript:(function(){var latstr = document.getElementById("lat").innerHTML;var lonstr = document.getElementById("lon").innerHTML;latstr = latstr.replace(",",".");lonstr = lonstr.replace(",",".");var yahoo_url = "http://maps.yahoo.com/#mvt=m&amp;lat=" + latstr + "&amp;lon=" + lonstr + "&amp;zoom=14";window.location = yahoo_url;})();'&gt;Haritayı yahooda ac&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/127694781504315761-4099708587371346463?l=akoguz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akoguz.blogspot.com/feeds/4099708587371346463/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=127694781504315761&amp;postID=4099708587371346463' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/4099708587371346463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/4099708587371346463'/><link rel='alternate' type='text/html' href='http://akoguz.blogspot.com/2010/06/sahibindencom-haritasn-googleda-ac.html' title='Sahibinden.com haritasını yahoo maps&apos;de aç'/><author><name>Hamdi Akoğuz</name><uri>http://www.blogger.com/profile/05624800173829283848</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-127694781504315761.post-5455701713386016863</id><published>2010-04-25T13:25:00.004+03:00</published><updated>2010-04-25T13:38:41.422+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='latex'/><title type='text'>latex ve tablolar</title><content type='html'>Latex'de birden fazla satır ve sütunu kapyana hücre yapmanın yolu \multicolumn içinde \multirow : &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;\documentclass[a4paper,10pt]{article}&lt;br /&gt;\usepackage[landscape,right=1in,left=1in,bottom=1in]{geometry}&lt;br /&gt;\usepackage[utf8x]{inputenc}&lt;br /&gt;\usepackage{multirow}&lt;br /&gt;\begin{document}&lt;br /&gt;&lt;br /&gt;\begin{center}&lt;br /&gt;\begin{tabular}{|c|c|c|}\hline&lt;br /&gt;\multicolumn{2}{|c|}{\multirow{2}{*}{combined cells}}&lt;br /&gt;     &amp;top right\\ \cline{3-3}&lt;br /&gt;\multicolumn{2}{|c|}{}&lt;br /&gt;     &amp;middle right\\ \hline&lt;br /&gt;bottom left&lt;br /&gt;     &amp;bottom center&lt;br /&gt;     &amp;bottom right\\ \hline&lt;br /&gt;\end{tabular}&lt;br /&gt;\end{center}&lt;br /&gt;\end{document}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_76KuIOYLGxs/S9QbRqiloLI/AAAAAAAAABM/Squ4SZwVS7w/s1600/table.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 65px;" src="http://2.bp.blogspot.com/_76KuIOYLGxs/S9QbRqiloLI/AAAAAAAAABM/Squ4SZwVS7w/s320/table.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5464022238198341810" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/127694781504315761-5455701713386016863?l=akoguz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akoguz.blogspot.com/feeds/5455701713386016863/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=127694781504315761&amp;postID=5455701713386016863' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/5455701713386016863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/5455701713386016863'/><link rel='alternate' type='text/html' href='http://akoguz.blogspot.com/2010/04/latex-ve-tablolar.html' title='latex ve tablolar'/><author><name>Hamdi Akoğuz</name><uri>http://www.blogger.com/profile/05624800173829283848</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_76KuIOYLGxs/S9QbRqiloLI/AAAAAAAAABM/Squ4SZwVS7w/s72-c/table.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-127694781504315761.post-6739130256702674402</id><published>2010-04-25T13:04:00.002+03:00</published><updated>2010-04-25T13:19:13.044+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xargs'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>svn add</title><content type='html'>&lt;a href="http://www.amazon.com/Productive-Programmer-Theory-Practice-OReilly/dp/0596519788"&gt;The Productive Programmer&lt;/a&gt; okurken gördüğüm aşağıdaki tek satırlık komut ile tüm yeni dosyaları svn add yapabilirsiniz.&lt;br /&gt;&lt;pre&gt;svn st | grep '^\?' | tr '^\?' ' ' | sed 's/[ ]*//' | sed 's/[ ]/\\ /g' | xargs svn add&lt;/pre&gt;&lt;br /&gt;Fakat sorgusuz sualsiz tüm dosyaların eklenmesi hoşuma gitmedi. O yüzden aşağıdaki bash scripti yazdım. buna -all parametresi verirseniz üsteki komutu çalıştırıyor. Parametresiz halinde ise her dosya için sorarak onaylanması halinde ekliyor.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;if [ "$1" = -all ]; then&lt;br /&gt;    svn st | grep '^\?' | tr '^\?' ' ' | sed 's/[ ]*//' | sed 's/[ ]/\\ /g' | xargs svn add&lt;br /&gt;    exit 0&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;for i in $( svn st | grep '^\?' | tr '^\?' ' ' | sed 's/[ ]*//' | sed 's/[ ]/\\ /g'); do&lt;br /&gt;    read -p "Add file : $i (y/n)?"&lt;br /&gt;    if [ "$REPLY" == "y" ] || [ "$REPLY" == "" ]; then&lt;br /&gt;        svn add $i&lt;br /&gt;    fi &lt;br /&gt;done&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/127694781504315761-6739130256702674402?l=akoguz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akoguz.blogspot.com/feeds/6739130256702674402/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=127694781504315761&amp;postID=6739130256702674402' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/6739130256702674402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/6739130256702674402'/><link rel='alternate' type='text/html' href='http://akoguz.blogspot.com/2010/04/svn-add.html' title='svn add'/><author><name>Hamdi Akoğuz</name><uri>http://www.blogger.com/profile/05624800173829283848</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-127694781504315761.post-5548259750974938154</id><published>2010-04-17T12:47:00.005+03:00</published><updated>2010-04-17T13:10:31.125+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xargs'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='find'/><category scheme='http://www.blogger.com/atom/ns#' term='dos2unix'/><title type='text'>find ve xargs</title><content type='html'>Bir komutu belli kriteri sağlayan her dosya için uygulamak için find'la dosyaları bul sonra bunları xargs &lt;komut&gt; 'a ver findla bulunan dosyalar komuta parametre olsun. Tabii bunun için komutun birden fazla dosya ismini parametre olarak kabul etmesi lazım.&lt;br /&gt;&lt;br /&gt;html ve txt uzantılı tüm dosyaların satır sonlarını CRLF'den LF'ye çevirmek için :&lt;br /&gt;&lt;br /&gt;&lt;code&gt;find ./ -name "*.html|*.txt" | xargs dos2unix&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Tüm .svn dizinlerini silmek için :&lt;br /&gt;&lt;br /&gt;&lt;code&gt;find ./ -name ".svn" | xargs rm -Rf&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Eğer komut birden fazla dosyayı parametre olarak kabul etmiyorsa tek tek çalıştırmak için -exec parametresine bakılabilir.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/127694781504315761-5548259750974938154?l=akoguz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akoguz.blogspot.com/feeds/5548259750974938154/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=127694781504315761&amp;postID=5548259750974938154' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/5548259750974938154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/5548259750974938154'/><link rel='alternate' type='text/html' href='http://akoguz.blogspot.com/2010/04/find-ve-xargs.html' title='find ve xargs'/><author><name>Hamdi Akoğuz</name><uri>http://www.blogger.com/profile/05624800173829283848</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-127694781504315761.post-2665723846959387108</id><published>2009-08-20T16:01:00.002+03:00</published><updated>2009-08-29T10:12:54.869+03:00</updated><title type='text'>Ubuntu Intrepid Ibex(8.10) üzerinde Rails geliştirme ortamı kurulumu</title><content type='html'>İlk olarak ruby paketleri ve sqlite3 paketi yüklenmelidir.&lt;br /&gt;&lt;pre&gt;sudo aptitude install ruby1.8-dev ruby1.8 ri1.8 rdoc1.8 irb1.8 libreadline-ruby1.8 libruby1.8 libopenssl-ruby sqlite3 libsqlite3-ruby1.8&lt;/pre&gt;&lt;br /&gt;Yüklenen bu programlar için /usr/bin içerisine symlinkler oluşturulur.&lt;br /&gt;&lt;pre&gt;sudo ln -s /usr/bin/ruby1.8 /usr/bin/ruby&lt;br /&gt;sudo ln -s /usr/bin/ri1.8 /usr/bin/ri&lt;br /&gt;sudo ln -s /usr/bin/rdoc1.8 /usr/bin/rdoc&lt;br /&gt;sudo ln -s /usr/bin/irb1.8 /usr/bin/irb&lt;/pre&gt;&lt;br /&gt;Ruby kurulumu tamamlandığına göre kontrol edebiliriz.&lt;br /&gt;&lt;pre&gt;ruby –v&lt;br /&gt;...&lt;br /&gt;ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]&lt;/pre&gt;&lt;br /&gt;Rubygems ruby kod kitaplıklarının kurulması için kullanılan bir araçtır. Rubygems kurulumu paketler kullanılarak da yapılabilir fakat son sürümün kurulması önemli olduğu için kaynak koddan kurulum tercih edilmelidir. Son sürüm http://rubyforge.org/projects/rubygems/ sayfasından öğrenilebilir. Burada son sürüm 1.3.5 idi.&lt;br /&gt;&lt;pre&gt;wget http://rubyforge.org/frs/download.php/45905/rubygems-1.3.5.tgz&lt;br /&gt;tar xzvf rubygems-1.3.5.tgz&lt;br /&gt;cd  rubygems-1.3.5&lt;br /&gt;sudo ruby setup.rb&lt;br /&gt;...&lt;/pre&gt;&lt;br /&gt;Rubygems kurulumu aşağıdaki mesajla tamamlanır.&lt;br /&gt;&lt;pre&gt;RubyGems installed the following executables:&lt;br /&gt;    /usr/bin/gem1.8&lt;br /&gt;&lt;br /&gt;If `gem` was installed by a previous RubyGems installation, you may need&lt;br /&gt;to remove it by hand.&lt;/pre&gt;&lt;br /&gt;Son olarak bir symlink oluşturulur ve Rubygems kurulumu aşağıdaki gibi kontrol edilebilir.&lt;br /&gt;&lt;pre&gt;sudo ln -s /usr/bin/gem1.8 /usr/bin/gem&lt;br /&gt;gem –v&lt;br /&gt;...&lt;br /&gt;1.3.5&lt;/pre&gt;&lt;br /&gt;Rubygems ile kurulan ‘gem’lerin son sürümde oldukları sık sık &lt;br /&gt;&lt;pre&gt;sudo gem update --system&lt;/pre&gt;&lt;br /&gt;ile kontrol edilmelidir. Rubygems kurulumunu tamamladığımıza göre Rails kurulumuna geçebiliriz.&lt;br /&gt;&lt;pre&gt;sudo gem install rails&lt;/pre&gt;&lt;br /&gt;Son olarak her şeyi kontrol etmek için &lt;br /&gt;&lt;pre&gt;sudo gem list&lt;/pre&gt;&lt;br /&gt;çıktısı aşağıdaki gibi olmalıdır.&lt;br /&gt;&lt;pre&gt;*** LOCAL GEMS ***&lt;br /&gt;&lt;br /&gt;actionmailer (2.2.2)&lt;br /&gt;actionpack (2.2.2)&lt;br /&gt;activerecord (2.2.2)&lt;br /&gt;activeresource (2.2.2)&lt;br /&gt;activesupport (2.2.2)&lt;br /&gt;rails (2.2.2)&lt;br /&gt;rake (0.8.3)&lt;/pre&gt;&lt;br /&gt;Sqlite3 modülünün çalıştığını kontrol edelim.&lt;br /&gt;&lt;pre&gt;irb&lt;br /&gt;irb(main):001:0&gt; require 'sqlite3'&lt;br /&gt;=&gt; true&lt;br /&gt;irb(main):002:0&gt; exit&lt;/pre&gt;&lt;br /&gt;RoR kurulumunu tamamladık. Ubuntu üzerinde geliştirme için ayrıca subversion ve git sürüm kontrol sistemlerine ihtiyaç duyulacaktır. Git zaten kurulu olmalı subversion için de&lt;br /&gt;&lt;pre&gt;sudo aptitude install subversion &lt;/pre&gt;&lt;br /&gt;paketi yüklenmelidir.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/127694781504315761-2665723846959387108?l=akoguz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akoguz.blogspot.com/feeds/2665723846959387108/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=127694781504315761&amp;postID=2665723846959387108' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/2665723846959387108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/2665723846959387108'/><link rel='alternate' type='text/html' href='http://akoguz.blogspot.com/2009/08/ubuntu-intrepid-ibex810-uzerinde-rails.html' title='Ubuntu Intrepid Ibex(8.10) üzerinde Rails geliştirme ortamı kurulumu'/><author><name>Hamdi Akoğuz</name><uri>http://www.blogger.com/profile/05624800173829283848</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-127694781504315761.post-8525796859869193103</id><published>2009-07-10T16:40:00.002+03:00</published><updated>2009-07-11T14:28:48.013+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><title type='text'>Git ile bir Rails uygulamasının kontrol edilmesi</title><content type='html'>Git versiyon kontrol sisteminin diğerlerinden farklı olduğu noktalardan birisi de kodların barındığı repository'nin merkezi olması gerekmemesidir. Bir git repositorysi yerel olarak oluşturulur ve yapılan değişiklikler gerektiğinde farklı bir serverda bulunan merkezi bir repository'ye 'push' edilerek gönderilir. Burada git versiyon kontrol sisteminin incelenmesi için özel olarak bir rails uygulamasının kurulması üzerinde durulmuştur.&lt;br /&gt;İlk olarak todo isimli yeni bir rails uygulaması oluşturulmuştur.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;hamdi@hamdi-laptop:~/railsProjects$ rails todo&lt;br /&gt;     create &lt;br /&gt;     create  app/controllers&lt;br /&gt;     .... sadelik için detaylar atlandı.&lt;br /&gt;     create  log/test.log&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Yeni bir git repository oluşturmak için istenilen dizin içerisinde "git init" komutu çalıştırılır:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;hamdi@hamdi-laptop:~/railsProjects$ cd todo&lt;br /&gt;hamdi@hamdi-laptop:~/railsProjects/todo$ git init&lt;br /&gt;Initialized empty Git repository in /home/hamdi/railsProjects/todo/.git&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Rails uygulamasının içerisinde git tarafından kontrol edilmesi istenmeyen dosyaları belirtmek için bu dizinde bir ".gitignore" dosyası oluşturulmalıdır.&lt;br /&gt;.gitignore içerisinde:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;log/*.log&lt;br /&gt;tmp/**/*&lt;br /&gt;db/*.sqlite3&lt;br /&gt;config/database.yml&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Git repository'sinin şu anki durumunu görmek için:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;hamdi@hamdi-laptop:~/railsProjects/todo$ git status&lt;br /&gt;# On branch master&lt;br /&gt;#&lt;br /&gt;# Initial commit&lt;br /&gt;#&lt;br /&gt;# Untracked files:&lt;br /&gt;#   (use "git add &lt;file&gt;..." to include in what will be committed)&lt;br /&gt;#&lt;br /&gt;#       .gitignore&lt;br /&gt;#       README&lt;br /&gt;#       Rakefile&lt;br /&gt;#       app/&lt;br /&gt;#       config/&lt;br /&gt;#       doc/&lt;br /&gt;#       public/&lt;br /&gt;#       script/&lt;br /&gt;#       test/&lt;br /&gt;nothing added to commit but untracked files present (use "git add" to track)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Yukarıda görüldüğü gibi repository'de henüz takip edilen hiçbir dosya yok. Fakat takip edilmeyenler listesinde bazı dizinler boş olduğu için listelenmemekteler. Dizinler boş olsa da kontrol edilmesini isteyebiliriz. Bunu çözmek için bu dizinler içerisinde boş bir dosya oluşturulabilir. touch komutu ile boş .gitignore dosyaları aşağıdaki gibi oluşturulabilir.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;hamdi@hamdi-laptop:~/railsProjects/todo$ touch log/.gitignore tmp/.gitignore vendor/.gitignore&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Şimdi git status ile bakılırsa boş dizinlerin de konrol edilmediği listelenecektir.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;hamdi@hamdi-laptop:~/railsProjects/todo$ git status&lt;br /&gt;# On branch master&lt;br /&gt;#&lt;br /&gt;# Initial commit&lt;br /&gt;#&lt;br /&gt;# Untracked files:&lt;br /&gt;#   (use "git add &lt;file&gt;..." to include in what will be committed)&lt;br /&gt;#&lt;br /&gt;#       .gitignore&lt;br /&gt;#       README&lt;br /&gt;#       Rakefile&lt;br /&gt;#       app/&lt;br /&gt;#       config/&lt;br /&gt;#       doc/&lt;br /&gt;#       log/&lt;br /&gt;#       public/&lt;br /&gt;#       script/&lt;br /&gt;#       test/&lt;br /&gt;#       tmp/&lt;br /&gt;#       vendor/&lt;br /&gt;nothing added to commit but untracked files present (use "git add" to track)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Artık projenin kontrol edilmesi için dosyaları ekleyebiliriz. Git'de eklenmek istenen dosya veya değişiklikler add komutu ile önce "staging index"e eklenir. Daha sonra "commit" ile bu değişiklikler "working copy" haline gelir.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;hamdi@hamdi-laptop:~/railsProjects/todo$ git add .&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Şimdi kontrol durumuna bakılırsa:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;hamdi@hamdi-laptop:~/railsProjects/todo$ git status&lt;br /&gt;# On branch master&lt;br /&gt;#&lt;br /&gt;# Initial commit&lt;br /&gt;#&lt;br /&gt;# Changes to be committed:&lt;br /&gt;#   (use "git rm --cached &lt;file&gt;..." to unstage)&lt;br /&gt;#&lt;br /&gt;#       new file: .gitignore&lt;br /&gt;#       new file: README&lt;br /&gt;#       new file: Rakefile&lt;br /&gt;... atlandı ...&lt;br /&gt;#       new file: script/server&lt;br /&gt;#       new file: test/performance/browsing_test.rb&lt;br /&gt;#       new file: test/test_helper.rb&lt;br /&gt;#       new file: tmp/.gitignore&lt;br /&gt;#       new file: vendor/.gitignore&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;hamdi@hamdi-laptop:~/railsProjects/todo$ git commit -a -m "ilk ekleme"&lt;br /&gt;Created initial commit 55d5e33: ilk ekleme&lt;br /&gt;41 files changed, 8434 insertions(+), 0 deletions(-)&lt;br /&gt;create mode 100644 .gitignore&lt;br /&gt;create mode 100644 README&lt;br /&gt;... atlandı ...&lt;br /&gt;create mode 100644 test/performance/browsing_test.rb&lt;br /&gt;create mode 100644 test/test_helper.rb&lt;br /&gt;create mode 100644 tmp/.gitignore&lt;br /&gt;create mode 100644 vendor/.gitignore&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Uygulamaya bir model eklenmiş olsun:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;hamdi@hamdi-laptop:~/railsProjects/todo$ ./script/generate model task name:string&lt;br /&gt;     exists  app/models/&lt;br /&gt;     exists  test/unit/&lt;br /&gt;     exists  test/fixtures/&lt;br /&gt;     create  app/models/task.rb&lt;br /&gt;     create  test/unit/task_test.rb&lt;br /&gt;     create  test/fixtures/tasks.yml&lt;br /&gt;     create  db/migrate&lt;br /&gt;     create  db/migrate/20090710132706_create_tasks.rb&lt;br /&gt;hamdi@hamdi-laptop:~/railsProjects/todo$ rake db:migrate&lt;br /&gt;(in /home/hamdi/railsProjects/todo)&lt;br /&gt;==  CreateTasks: migrating ====================================================&lt;br /&gt;-- create_table(:tasks)&lt;br /&gt;  -&gt; 0.0014s&lt;br /&gt;==  CreateTasks: migrated (0.0016s) ===========================================&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Son değişiklikleri eklemek için tekrar yeni dosyalar add ile "staging index"e sonra da tüm değişiklikler commit ile eklenir.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;hamdi@hamdi-laptop:~/railsProjects/todo$ git add .&lt;br /&gt;hamdi@hamdi-laptop:~/railsProjects/todo$ git commit -a -m "task modeli eklendi."&lt;br /&gt;Created commit b3d0cd9: task modeli eklendi.&lt;br /&gt;5 files changed, 50 insertions(+), 0 deletions(-)&lt;br /&gt;create mode 100644 app/models/task.rb&lt;br /&gt;create mode 100644 db/migrate/20090710132706_create_tasks.rb&lt;br /&gt;create mode 100644 db/schema.rb&lt;br /&gt;create mode 100644 test/fixtures/tasks.yml&lt;br /&gt;create mode 100644 test/unit/task_test.rb&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Henüz add komutu ile "staging index"e eklenmemiş değişiklikleri geri almak için git checkout filename komutu kullanılır. Eğer değişiklikler "staging index"e eklenmişse, "staging index"i en son commit işlemine geri almak için git reset HEAD somefile.txt komutu kullanılır. HEAD son commiti belirtmektedir. /TODO: diğer commitler/ Eğer komut sadece git reset HEAD şeklinde kullanılırsa sadece bir dosya değil tüm dosyalar geri alınır. Bundan sonra git checkout filename ilegeri dönülebilir.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/127694781504315761-8525796859869193103?l=akoguz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akoguz.blogspot.com/feeds/8525796859869193103/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=127694781504315761&amp;postID=8525796859869193103' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/8525796859869193103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/8525796859869193103'/><link rel='alternate' type='text/html' href='http://akoguz.blogspot.com/2009/07/git-ile-bir-rails-uygulamasnn-kontrol.html' title='Git ile bir Rails uygulamasının kontrol edilmesi'/><author><name>Hamdi Akoğuz</name><uri>http://www.blogger.com/profile/05624800173829283848</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-127694781504315761.post-6904955374457294049</id><published>2008-09-08T20:24:00.007+03:00</published><updated>2009-08-29T10:08:14.976+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='örnek'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='appengine'/><title type='text'>Google AppEngine ile Ajax</title><content type='html'>Bir süredir Google AppEngine ile uğraşıyorum. Deneyimlerimi paylaşmak adına bir Ajax örneğini incelemek istedim. &lt;br /&gt;main.py :&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 50%"&gt;&lt;code&gt;import cgi&lt;br /&gt;import wsgiref.handlers&lt;br /&gt;from google.appengine.ext import webapp&lt;br /&gt;&lt;br /&gt;class AjaxPage(webapp.RequestHandler):&lt;br /&gt;  def get(self):&lt;br /&gt;    self.response.out.write(&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;Ajax Example&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;script language=&amp;quot;Javascript&amp;quot;&amp;gt;&lt;br /&gt;var xr;&lt;br /&gt;function xmlhttpPost(strURL,strQuery)&lt;br /&gt;{&lt;br /&gt;  if (window.XMLHttpRequest) // Mozilla/Safari&lt;br /&gt;    { xr = new XMLHttpRequest(); }&lt;br /&gt;  else if (window.ActiveXObject) // IE&lt;br /&gt;    { xr = new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;); }&lt;br /&gt;  xr.open('POST', strURL, true);&lt;br /&gt;  xr.setRequestHeader('Content-Type',&lt;br /&gt;    'application/x-www-form-urlencoded');&lt;br /&gt;  xr.onreadystatechange = function()&lt;br /&gt;    { if (xr.readyState == 4)&lt;br /&gt;      { xrback(xr.responseText);} }&lt;br /&gt;  xr.send(strQuery);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function xrback(str)&lt;br /&gt;{&lt;br /&gt;  eval(str);&lt;br /&gt;  document.getElementById(&amp;quot;result&amp;quot;).innerHTML&lt;br /&gt;    = j.a;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body onload=&amp;quot;javascript:xmlhttpPost('/ajax','r=a')&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;p id=&amp;quot;result&amp;quot;&amp;gt;Loading...&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&amp;quot;&amp;quot;&amp;quot;)&lt;br /&gt;&lt;br /&gt;class AjaxCall(webapp.RequestHandler):&lt;br /&gt;  def post(self):&lt;br /&gt;    r = self.request.get('r')&lt;br /&gt;    self.response.out.write(&lt;br /&gt;      &amp;quot;var j = { '&amp;quot;+r+&amp;quot;' : 'Hello World'}; &amp;quot;)&lt;br /&gt;&lt;br /&gt;def main():&lt;br /&gt;  application = webapp.WSGIApplication( [&lt;br /&gt;      ('/', AjaxPage),&lt;br /&gt;      ('/ajax', AjaxCall),&lt;br /&gt;    ], debug=True)&lt;br /&gt;  wsgiref.handlers.CGIHandler().run(application)&lt;br /&gt;&lt;br /&gt;if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;  main() &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Burada ilk olarak her ajax uygulamasında ilk ihtiyacımız olan XMLHttpRequest nesnesini '/' urlsine bağladığımız AjaxPage yaratıyor. body onload'da Ajax çağrısını /ajax'a gönderiyor. Bu çağrıya json ile karşılık veriyoruz. Böylece "result" idli elemana "a" isimli değişkenin değeri olan o meşhur "Hello World" katarını aktarabiliyoruz. Sanırım daha karmaşık uygulamalar için bu bir temel oluşturabilir.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/127694781504315761-6904955374457294049?l=akoguz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akoguz.blogspot.com/feeds/6904955374457294049/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=127694781504315761&amp;postID=6904955374457294049' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/6904955374457294049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/6904955374457294049'/><link rel='alternate' type='text/html' href='http://akoguz.blogspot.com/2008/09/google-appengine-ile-ajax.html' title='Google AppEngine ile Ajax'/><author><name>Hamdi Akoğuz</name><uri>http://www.blogger.com/profile/05624800173829283848</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-127694781504315761.post-6086117961121208821</id><published>2008-04-26T20:38:00.017+03:00</published><updated>2009-01-01T02:23:29.882+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='multithreaded'/><category scheme='http://www.blogger.com/atom/ns#' term='multithread'/><category scheme='http://www.blogger.com/atom/ns#' term='threads'/><category scheme='http://www.blogger.com/atom/ns#' term='boost'/><title type='text'>Boost ile multi threading</title><content type='html'>C++ ile multithreaded (çok iplikli?) program yazmak istediğimizde malesef bunun standart c++ ile mümkün olmadığını görüyouz. Akla gelen ilk alternatifler ise işletim sistemine bağlı kitaplıklar. Burada Boost.Threads'in ise ayrı bir yeri var. Standart olmasa da buna aday olması, taşınabilirliği, yapımında birçok C++ uzmanının görüşlerinin alınmış olması ve tamamem C++ tabanlı (diğer birçok kitaplık c tabanlı) olması Boost.Threads'in avantajları. &lt;a href="http://www.boost.org"&gt;boost.org&lt;/a&gt;'dan daha fazla bilgi alabilir ve son sürümünü indirebilirsiniz. Burada kısaca Boost.Threads'in kullanımından bahsedeceğim.&lt;br /&gt;&lt;br /&gt;boost::thread sınıfı bir threadi temsil ediyor. Varsayılan kurucu (default constructor) yürütülen threadi temsil eden bir nesne oluşturur. Diğer bir kurucu da parametre olarak, parametre almayan ve bir değer döndürmeyen bir &lt;a href="http://en.wikipedia.org/wiki/Function_object"&gt;function object&lt;/a&gt; (fonksiyon nesnesi) alır. Yeni bir thread oluşturarak bu function object'i çağırır. İlk bakışta klasik C tarzı void işaretçi alan fonksiyona göre daha uğraştırıcı bir yöntem gibi gözükse de Boost.Bind gibi fonksiyonel kitaplıklarla çok rahat kullanılabiliyor. Yaratılan threadle yapılabilecekler '==' , '!=' operatörleri ve boost::thread::join ile bir threadin sonlanmasını beklemek. Aşağıdaki örnekte sadece bir "hello world" yazan thread oluşturulup sonlanması bekleniyor.&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 50%"&gt;&lt;code&gt;#include &amp;lt;boost/thread/thread.hpp&amp;gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;&lt;br /&gt;void hello()&lt;br /&gt;{&lt;br /&gt;  std::cout &amp;lt;&amp;lt;&lt;br /&gt;    &amp;quot;Hello world, I'm a thread!&amp;quot;&lt;br /&gt;    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main(int argc, char* argv[])&lt;br /&gt;{&lt;br /&gt;  boost::thread thrd(&amp;amp;hello);&lt;br /&gt;  thrd.join();&lt;br /&gt;  return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Yukarıdaki fonksiyona bir veri aktarmak isteseydik yapmamız gereken bir function object yazmak olacaktı. Her thread oluşturduğumuzda bu gerçekten can sıkıcı olurdu. Bunun yerine aşağıdaki örnekte Boost.Bind ile bu işi nasıl yapabileceğimiz görülüyor. Ayrıca aşağıdaki kodda en basit hali ile mutex kullanımı görülüyor. Mutexlerin diğer çeşitleri ile ilgili detaylara girmeyeceğim. Zaten kullanım olarak çok farklı değiller. Burada tanımlanan mutex boost::mutex::scoped_lock ile kurucuda kilitleniyor ve yıkıcıda da kilit kaldırılmış oluyor. Böylece paylaşılan kaynak olan std::cout 'a aynı anda tek bir threadin erişebilmesi sağlanıyor.&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 50%"&gt;&lt;code&gt;#include &amp;lt;boost/thread/thread.hpp&amp;gt;&lt;br /&gt;#include &amp;lt;boost/thread/mutex.hpp&amp;gt;&lt;br /&gt;#include &amp;lt;boost/bind.hpp&amp;gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;&lt;br /&gt;boost::mutex io_mutex;&lt;br /&gt;&lt;br /&gt;void count(int id)&lt;br /&gt;{&lt;br /&gt;  for (int i = 0; i &amp;lt; 10; ++i)&lt;br /&gt;  {&lt;br /&gt;    boost::mutex::scoped_lock&lt;br /&gt;      lock(io_mutex);&lt;br /&gt;    std::cout &amp;lt;&amp;lt; id &amp;lt;&amp;lt; &amp;quot;: &amp;quot; &amp;lt;&amp;lt;&lt;br /&gt;      i &amp;lt;&amp;lt; std::endl;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main(int argc, char* argv[])&lt;br /&gt;{&lt;br /&gt;  boost::thread thrd1(&lt;br /&gt;    boost::bind(&amp;amp;count, 1));&lt;br /&gt;  boost::thread thrd2(&lt;br /&gt;    boost::bind(&amp;amp;count, 2));&lt;br /&gt;  thrd1.join();&lt;br /&gt;  thrd2.join();&lt;br /&gt;  return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Birden fazla thread yaratılacağı zaman işe yarayabilecek bir şey de boost::thread_group sınıfı. Bu sınıf sayesinde birden fazla thread üzerinde beklemek için tek tek belirtmeye gerek kalmıyor.&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 50%"&gt;&lt;code&gt;#include &amp;lt;boost/thread/thread.hpp&amp;gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;&lt;br /&gt;void count(int id)&lt;br /&gt;{&lt;br /&gt;    std::cout &amp;lt;&amp;lt; std::endl;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main(int argc, char* argv[])&lt;br /&gt;{&lt;br /&gt;  boost::thread_group thrds;&lt;br /&gt;  for(int i=0; i&amp;lt;5; i++)&lt;br /&gt;    thrds.create_thread( boost::bind(&amp;amp;count, i) );&lt;br /&gt;&lt;br /&gt;  thrds.join_all(); &lt;br /&gt;  return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/127694781504315761-6086117961121208821?l=akoguz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akoguz.blogspot.com/feeds/6086117961121208821/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=127694781504315761&amp;postID=6086117961121208821' title='1 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/6086117961121208821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/6086117961121208821'/><link rel='alternate' type='text/html' href='http://akoguz.blogspot.com/2008/04/boost-ile-multi-threading.html' title='Boost ile multi threading'/><author><name>Hamdi Akoğuz</name><uri>http://www.blogger.com/profile/05624800173829283848</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-127694781504315761.post-7901611323182347472</id><published>2008-03-25T10:17:00.005+02:00</published><updated>2008-04-03T05:54:13.549+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='oyun yapımı'/><category scheme='http://www.blogger.com/atom/ns#' term='xna'/><title type='text'>Peg Solitaire</title><content type='html'>Geçenlerde C# öğrenmek adına XNA Game Studio ile ilgilenmeye karar vermiştim. Küçük bir oyun yapmak istiyordum. Fikir ararken Yapay zeka dersinin ödevi olarak Peg solitaire için çözüm arayan bir program yazmamız istendi. O arada oyunu kağıt üstünde çözme denemelerim başarısızlıkla sonuçlanınca bu program çıktı ortaya. İlgilenenler için &lt;a href="http://www.students.itu.edu.tr/~akoguzh/pegSolSource.rar"&gt;kaynak kodlar&lt;/a&gt; ve &lt;a href="http://www.students.itu.edu.tr/~akoguzh/setup_pegSol.exe"&gt;kurulum paketi&lt;/a&gt; burada. &lt;br /&gt;&lt;br /&gt;Not: XNA ile oyun geliştirmiş olanlar yani &lt;a href="http://msdn2.microsoft.com/en-us/netframework/aa731542.aspx"&gt;.net Framework&lt;/a&gt; ve &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=a7da4763-6807-4bd5-8d18-18c60c437f93&amp;DisplayLang=en"&gt;XNA Framework Redistributable&lt;/a&gt; ve &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=2DA43D38-DB71-4C1B-BC6A-9B6652CD92A3&amp;displaylang=en"&gt;DirectX 9.0c&lt;/a&gt; bilgisayarında kurulu olanlar için &lt;a href="http://www.students.itu.edu.tr/~akoguzh/pegSolExe.rar"&gt;bu&lt;/a&gt; çalıştırılabilir sürüm olarak yeterli.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sozluk.sourtimes.org/show.asp?id=6906368"&gt;Burada nokta niyetine anca bu gider.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/127694781504315761-7901611323182347472?l=akoguz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akoguz.blogspot.com/feeds/7901611323182347472/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=127694781504315761&amp;postID=7901611323182347472' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/7901611323182347472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/7901611323182347472'/><link rel='alternate' type='text/html' href='http://akoguz.blogspot.com/2008/03/peg-solitaire.html' title='Peg Solitaire'/><author><name>Hamdi Akoğuz</name><uri>http://www.blogger.com/profile/05624800173829283848</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-127694781504315761.post-3255833659189565967</id><published>2007-11-10T01:20:00.000+02:00</published><updated>2007-11-10T17:39:18.516+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Virtual PC 2007'/><category scheme='http://www.blogger.com/atom/ns#' term='Gutsy Gibbon'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Virtual PC 2007 ile Ubuntu 7.10(Gutsy Gibbon) kurulumu</title><content type='html'>Ubuntu'ya aslında biraz kızgınım. Yaklaşık 6-7 aydır kurulu olan edgy, en uzun süre bana sorun çıkarmayan linux versiyonu olarak Ubuntuya kalbimde ayrı bir yer kazandırmıştı. Taki tam da linuxa ihtiyacım olan, system programming ödevini yapacağım zaman standart güncelleştirmelerini yaptıktan sonra ilginç bir şekilde grub'un boot listesinden Windowsu silmesi, ubuntunun ise boot sırasında bir hata vererek açılmaması gerçekten sinir bozucu oldu. Ödevi knoppix ile hallettikten sonra hangi linuxu kurayım diye araştırırken Ubuntu 7.10'un geçenlerde çıkmış olduğunu gördüm ve bir şans vereyim dedim. Fakat bu sefer risk almayıp Virtual PC 2007 kurdum. Tahmin ettiğim gibi ubuntuyla pek iyi anlaşamadılar ama şanslıydım ki aynı sorunları yaşayan birileri çözümü bloglarında yazmışlardı. Ben de çözümü Türkçe olarak burada belirtmek istedim. &lt;br /&gt;Virtual PC kurulumundan bahsetmek gerekirse 30mb alan istiyor ve ücretsiz indirilebiliyor. Kurulumda bir sorun yok tabi:) Daha sonra New Virtual Machine sihirbazı ile yeni bir makine yaratıyoruz. Gerekli sabit disk miktarı ve en az 256mb ram verdikten sonra makine çalışıyor. CD menüsünden Capture ISO Image ile indirdiğimiz dosyanın yüklenmesini sağlıyoruz. Sorun mouse'un çalışmaması olarak karşımıza çıkıyor ve kernelin virtual pc ile uyumsuzluğundan kaynaklanıyormuş. &lt;a href="http://arcanecode.wordpress.com/2007/10/18/installing-ubuntu-710-under-virtual-pc-2007/"&gt;Şuradaki&lt;/a&gt; çözümü uyguladım. Giriş ekranında "Start Ubuntu in Safe Graphics Mode" seçeneği üzerindeyken F6 ya basarak seçenekler satırının gözükmesini sağlayın ve &lt;br /&gt;"...quiet splash --" dan sonra bir boşluk ve ardından "i8042.noloop" ekleyin. Bu live mode esnasında mouse kullanmamızı sağlayacak. Daha sonra kurulumu tamamlayın(epey zaman alıyor benim dizüstüde yaklaşık 1 saat sürdü). Yeni işletim sistemini açmak için yeniden başlatın. Bu arada CD'nin isosunu ayırmayı unutmayın. Grub başlarken ESC'ye basarak seçeneklerin görünmesini sağlayın. İlk satırı düzenlemek için 'e'ye basın, kernel ile başlayan satırda iken tekrar 'e' ye basarak sonuna i8042.noloop ekleyin. Enter'la önceki menüye dönün ve yine kernel satırı seçiliyken 'b'ye basarak sistemin başlamasını sağlayın. Login olduktan sonra bu sorunu tam olarak çözmek için konsolda sudo gedit /boot/grub/menu.lst konutunu çalıştırın. Dosyanın sonlarında(recovery mode kısmına değil) kernel ile başlayan satırın sonuna i8042.noloop ekleyerek kaydedin. Artık yeniden başlattığınızda mouse çalışıyor olacaktır.&lt;br /&gt;Bir süre bu Virtual PC ile idare ederim heralde ama fırsat bulunca tam yükleme yapmak gerekiyor en azından daha hızlı çalışabilmek için.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/127694781504315761-3255833659189565967?l=akoguz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akoguz.blogspot.com/feeds/3255833659189565967/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=127694781504315761&amp;postID=3255833659189565967' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/3255833659189565967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/3255833659189565967'/><link rel='alternate' type='text/html' href='http://akoguz.blogspot.com/2007/11/virtual-pc-2007-ile-ubuntu-710gutsy.html' title='Virtual PC 2007 ile Ubuntu 7.10(Gutsy Gibbon) kurulumu'/><author><name>Hamdi Akoğuz</name><uri>http://www.blogger.com/profile/05624800173829283848</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-127694781504315761.post-3203398911089183476</id><published>2007-10-26T15:04:00.000+03:00</published><updated>2007-10-26T15:39:56.679+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fgetc'/><category scheme='http://www.blogger.com/atom/ns#' term='fopen'/><category scheme='http://www.blogger.com/atom/ns#' term='file i/o'/><category scheme='http://www.blogger.com/atom/ns#' term='feof'/><category scheme='http://www.blogger.com/atom/ns#' term='fgets'/><category scheme='http://www.blogger.com/atom/ns#' term='c'/><title type='text'>C'de Dosya İşlemleri</title><content type='html'>C'de dosya okuma çok hata yapılan bir konu. Yakın zamanda bir kaç kişiye bu konuda yardım ettikten sonra bişeyler yazayım dedim.&lt;br /&gt;İlk olarak bir dosyayı karakter karakter olarak okumak için kullanılan fgetc() 'nin kullanımına bakalım.&lt;br /&gt;&lt;pre style="BORDER-RIGHT: #999999 1px dashed; PADDING-RIGHT: 5px; BORDER-TOP: #999999 1px dashed; PADDING-LEFT: 5px; FONT-SIZE: 12px; PADDING-BOTTOM: 5px; OVERFLOW: auto; BORDER-LEFT: #999999 1px dashed; WIDTH: 50%; COLOR: #000000; LINE-HEIGHT: 14px; PADDING-TOP: 5px; BORDER-BOTTOM: #999999 1px dashed; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; BACKGROUND-COLOR: #eee"&gt;&lt;code&gt;int fgetc( FILE * );&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Burada dikkat edilmesi gereken fgetc 'nin int deger döndürmesi. Okunan karakterin degeri veya EOF dönebilir. Sık yapılan bir hata fgetc 'nin dönüş değerini char değişkene atanması sonucu ortaya çıkıyor. Örnek olarak verilen bir dosyayı karakter karakter okuyup ekrana basan ve satırları sayan koda bakalım.&lt;br /&gt;&lt;pre style="BORDER-RIGHT: #999999 1px dashed; PADDING-RIGHT: 5px; BORDER-TOP: #999999 1px dashed; PADDING-LEFT: 5px; FONT-SIZE: 12px; PADDING-BOTTOM: 5px; OVERFLOW: auto; BORDER-LEFT: #999999 1px dashed; WIDTH: 50%; COLOR: #000000; LINE-HEIGHT: 14px; PADDING-TOP: 5px; BORDER-BOTTOM: #999999 1px dashed; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; BACKGROUND-COLOR: #eee"&gt;&lt;code&gt;int DosyayıEkranaYaz( FILE * fp )&lt;br /&gt;{&lt;br /&gt;  int ch;&lt;br /&gt;  int  cnt = 1;&lt;br /&gt;&lt;br /&gt;  while( (ch = fgetc(fp)) != EOF)&lt;br /&gt;  {&lt;br /&gt;    putchar( ch );&lt;br /&gt;    if(ch == '\n')&lt;br /&gt;      cnt++;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  return cnt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;fgetc 'nin kullanımı bu şekilde. Bir başka sorun da feof() fakat bence bu fonksiyonu kullanmaya gerek yok çünkü bütün fonksiyonlar dosya sonunu bir şekilde belirtiyorlar zaten. Örneğin fgets dosya sonunda NULL dönüyor. Dosyayı satır satır okumak istersek şöyle bir kod kullanabiliriz.&lt;br /&gt;&lt;pre style="BORDER-RIGHT: #999999 1px dashed; PADDING-RIGHT: 5px; BORDER-TOP: #999999 1px dashed; PADDING-LEFT: 5px; FONT-SIZE: 12px; PADDING-BOTTOM: 5px; OVERFLOW: auto; BORDER-LEFT: #999999 1px dashed; WIDTH: 50%; COLOR: #000000; LINE-HEIGHT: 14px; PADDING-TOP: 5px; BORDER-BOTTOM: #999999 1px dashed; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; BACKGROUND-COLOR: #eee"&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;  FILE * fp = fopen("deneme.txt", "r");&lt;br /&gt;  char satir[100];&lt;br /&gt;&lt;br /&gt;  while( fgets(satir, sizeof(satir), fp) != NULL )&lt;br /&gt;    fputs(satir, stdout);&lt;br /&gt;  fclose(fp);&lt;br /&gt;  return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Metin dosyalarını okumak için genel olarak bu bilgiler yeterli. İkili dosya işlemleriyle ilgili de belki daha sonra yazarım. &lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/127694781504315761-3203398911089183476?l=akoguz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akoguz.blogspot.com/feeds/3203398911089183476/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=127694781504315761&amp;postID=3203398911089183476' title='2 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/3203398911089183476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/3203398911089183476'/><link rel='alternate' type='text/html' href='http://akoguz.blogspot.com/2007/10/cde-dosya-ilemleri.html' title='C&apos;de Dosya İşlemleri'/><author><name>Hamdi Akoğuz</name><uri>http://www.blogger.com/profile/05624800173829283848</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-127694781504315761.post-5568126490894855634</id><published>2007-10-08T22:11:00.002+03:00</published><updated>2009-04-24T21:15:01.668+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programlama'/><title type='text'>Ip değiştirme eziyeti</title><content type='html'>Dizüstü bilgisayar ile okulda iken farklı ip, ağ geçidi, dns ... ayarları evde iken farklı ayarları kullanıyorum. Her gidiş gelişte bunları tek tek elle değiştirmek canımı sıkmaya başlamıştı fakat Windows'ta bunun bir batch dosyası(toplu işlem dosyası) ile yapılabileceğine ihtimal vermiyordum. Ama haksızlık etmişim netsh komutu ile bu ayarlar değiştirilebiliyormuş. Aşağıdaki komutları uygun değerler ile .bat uzantılı bir dosyaya kaydedince bu çile sona erdi.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;netsh interface ip set address name="Local Area Connection" source=static addr=111.222.333.444 mask=255.255.255.255&lt;br /&gt;netsh interface ip set address name="Local Area Connection" gateway=555.666.777.888 gwmetric=0&lt;br /&gt;netsh interface ip set dns name="Local Area Connection" source=static addr=999.111.222.333&lt;br /&gt;netsh interface ip add dns name = "Local Area Connection" addr = 444.555.666.777&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;DHCP için ise bu komutlar kullanılabilir:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;netsh interface ip set address name="Local Area Connection" dhcp&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;netsh interface ip set dns name="Local Area Connection" dhcp&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/127694781504315761-5568126490894855634?l=akoguz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akoguz.blogspot.com/feeds/5568126490894855634/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=127694781504315761&amp;postID=5568126490894855634' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/5568126490894855634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/5568126490894855634'/><link rel='alternate' type='text/html' href='http://akoguz.blogspot.com/2007/10/ip-deitirme-eziyeti.html' title='Ip değiştirme eziyeti'/><author><name>Hamdi Akoğuz</name><uri>http://www.blogger.com/profile/05624800173829283848</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-127694781504315761.post-7024319839602154893</id><published>2007-10-04T17:41:00.000+03:00</published><updated>2007-10-04T18:01:43.800+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='c'/><category scheme='http://www.blogger.com/atom/ns#' term='programlama'/><title type='text'>Windows Programlamaya Giriş</title><content type='html'>Uzun süre önce &lt;a href="http://www.gamedev.net/"&gt;GameDev.net&lt;/a&gt;'te gördüğüm Oyun Programlamaya Giriş makale dizisini bir yandan okurken bir yandan da Türkçe'ye çevirmek istemiştim. Tabiki o zamana kadar çevirinin aslında zor bir iş olabileceğini tahmin etmemiştim. Epey zorlanarak makalelerin ilkini çevirdim fakat son bir kontrolü beklerken tamamen unutmuşum. Bir temizlik yaparken tekrar rastladım ve bir daha gözden geçirdim. Pek çok imla, anlatım ve kelime hatası vardı muhtemelen hala da vardır :) Neyse belki windows programlamayı öğrenmek isteyen birilerine faydalı olur.&lt;br /&gt;&lt;a href="http://www.students.itu.edu.tr/~akoguzh/WindowsProgramlamayaGiris.htm"&gt;http://www.students.itu.edu.tr/~akoguzh/WindowsProgramlamayaGiris.htm&lt;/a&gt;&lt;br /&gt;Not: İzin almak için yazara (Joseph "Ironblayde" Farrell) ulaşamadım. Zaten umrunda olmaz heralde :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/127694781504315761-7024319839602154893?l=akoguz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akoguz.blogspot.com/feeds/7024319839602154893/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=127694781504315761&amp;postID=7024319839602154893' title='1 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/7024319839602154893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/7024319839602154893'/><link rel='alternate' type='text/html' href='http://akoguz.blogspot.com/2007/10/windows-programlamaya-giri.html' title='Windows Programlamaya Giriş'/><author><name>Hamdi Akoğuz</name><uri>http://www.blogger.com/profile/05624800173829283848</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-127694781504315761.post-7563014095325893334</id><published>2007-09-26T22:47:00.000+03:00</published><updated>2007-09-26T22:58:29.794+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><title type='text'>Çocukluk Rüyalarına Gerçekten Ulaşmak</title><content type='html'>Bu bir profesörün son dersinin konusu. Profesör Randy Pausch, Carnegie Mellon Üniversitesi'nde Sanal gerçeklik uzmanı ve kanser hastalığı nedeniyle bir kaç aylık bir ömrünün kaldığı tahmin ediliyormuş. &lt;a href="http://www.fazlamesai.net/"&gt;Fazlamesai.net&lt;/a&gt;'de gördüğüm haber üzerine dersin videosunu izledim ve gerçekten çok beğendim. Uzun süresine rağmen bu hayat dolu insanı izlemek çok eğlenceli ve ilham vericiydi. Kesinlikle tavsiye ederim.&lt;br /&gt;Video için : &lt;a href="http://cmu.edu/uls/journeys/"&gt;http://cmu.edu/uls/journeys/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/127694781504315761-7563014095325893334?l=akoguz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akoguz.blogspot.com/feeds/7563014095325893334/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=127694781504315761&amp;postID=7563014095325893334' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/7563014095325893334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/127694781504315761/posts/default/7563014095325893334'/><link rel='alternate' type='text/html' href='http://akoguz.blogspot.com/2007/09/ocukluk-ryalarna-gerekten-ulamak.html' title='Çocukluk Rüyalarına Gerçekten Ulaşmak'/><author><name>Hamdi Akoğuz</name><uri>http://www.blogger.com/profile/05624800173829283848</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
