Jekyll2019-03-12T03:20:10+03:00http://www.akinabdullahoglu.com/Akın Abdullahoğlu.Programlama,NoSql, programlama hakkında yazılar,Java ,C# ,Git ,Açık kaynak, Kişisel Yazılar, Software DeveloperKafamdakiler ve Genel Gündem2019-03-10T03:30:22+03:002019-03-10T03:30:22+03:00http://www.akinabdullahoglu.com/Kafamdakiler<p>Merhabalar, aylar ayları devirdi ve hiç bir blog yazısı yazamadım. Kafamda bir çok konuyla ilgili yazı yazmak vardı hepsini parça parça kenara köşeye kaydettim, bunları hayata geçirmeye yeni yeni başladım aslında. Öncelikle ülkemizin ihtiyacı olan sıcaklığı ve sevgiyi ve barış’ı neden kaybettiği sorusu ara sıra aklıma gelmekte ve bunda da en büyük payın popüler kültürün insanlara dayattığı tüketim olgusunun, insanları mutsuzluğa itmeye sebep olarak görüyorum. Her kesimden insanın bu kadar birbirinden nefret edebilmesini ya da bir konuda verdiği emeğin hiçe sayılıp o emek sonucunu nasıl en vurucu biçimde eleştirebilirim sorusunun şeytani zihinlerde oluşmasını anlayamıyorum. Bu tür insanlara yabancı lugatta hater(nefret eden kimseler) deniliyor ve twitter’da bunlara bolca rastlamak mümkün, her konu hakkında sadece trollük kovalamak, eleştirmek ya da her şeyi mizaha vurmak bunları hepsini beğeni kazanma kaygısı ve popüler olmak uğruna yapmaları gerçekten acı bir durum diye düşünüyorum.</p>
<p>Gündem olarak nedense sürekli olumsuz konuların sosyal medya ortamlarını işgal etmesi ve instagram içerisinde de sadece seks, yemek yeme ve cinsellik vurgusunun insanlara pompalanmasından dolayı rahatsız olup sosyal medya hesaplarıma bir süreliğine ara verdim. Twitter’ı zaten yukarıda kısaca anlattım ve bu gündem konuları beni biraz yordu, sürekli olumsuz haber görmekten ve kimseye de bir şey anlatamamaktan bıktım. Yaklaşık 4 aydan fazladır kapalı olan hesapları açıkçası hiç aramıyorum ve bu bana daha bol zaman bırakıyor bunları spora ve kitap okumaya ayırarak kendime bir şeyler katmaya çalışıyorum. Bu süreçte biraz da kitap okudum bunlardan en beğendiklerimi sizinle de paylaşmak istedim..</p>
<ul>
<li>Beyaz Zambaklar Ülkesinde</li>
<li>İnsanın Anlam Arayışı</li>
<li>Semaver</li>
</ul>
<p>Nostalji sever bir insan olduğumdan dolayı yaklaşık 2016 yılının içerisinden itibaren geliştirmek istediğim bir proje vardı bunu ve daha yeni bunu hayata gerçirdim. Amacı nostaljik değerde ya da kültür sanat alanında içerik oluşturmak isteyen insanları bir araya getiren bir sosyal platform diyebilirim. Burada çok başarılı olmasa da UI/UX, Front-End ve Back-End developer olarak uçtan uca yer aldım. Programlama dili olarak Python kullandım, Veritabanı olarak Mysql, ön yüzde Bootstrap, Google Material Framework kullandım. Eğer ziyaret etmek isterseniz http://www.eskimeyeneskiler.com üzerinden ziyaret edebilirsiniz.</p>
<p>Genel olarak bu yazımda kısaca değindiğim dağınık konular oldu, eğer okumaya değer bulup sonuna geldiyseniz teşekkür ederim. Anlatım ve kelime hatalarım için lütfen geri dönüş sağlayabilirseniz mutlu olurum.</p>
<p>İyi günler!
Akın.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/mtapbslpYIk" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe>Merhabalar, aylar ayları devirdi ve hiç bir blog yazısı yazamadım. Kafamda bir çok konuyla ilgili yazı yazmak vardı hepsini parça parça kenara köşeye kaydettim, bunları hayata geçirmeye yeni yeni başladım aslında. Öncelikle ülkemizin ihtiyacı olan sıcaklığı ve sevgiyi ve barış’ı neden kaybettiği sorusu ara sıra aklıma gelmekte ve bunda da en büyük payın popüler kültürün insanlara dayattığı tüketim olgusunun, insanları mutsuzluğa itmeye sebep olarak görüyorum. Her kesimden insanın bu kadar birbirinden nefret edebilmesini ya da bir konuda verdiği emeğin hiçe sayılıp o emek sonucunu nasıl en vurucu biçimde eleştirebilirim sorusunun şeytani zihinlerde oluşmasını anlayamıyorum. Bu tür insanlara yabancı lugatta hater(nefret eden kimseler) deniliyor ve twitter’da bunlara bolca rastlamak mümkün, her konu hakkında sadece trollük kovalamak, eleştirmek ya da her şeyi mizaha vurmak bunları hepsini beğeni kazanma kaygısı ve popüler olmak uğruna yapmaları gerçekten acı bir durum diye düşünüyorum.Doğum günün kutlu olsun Barış Manço2019-01-02T03:30:22+03:002019-01-02T03:30:22+03:00http://www.akinabdullahoglu.com/Dogum-gunun-kutlu-olsun-baris-manco<hr />
<p>“Bir kişinin adı en son ne zaman telaffuz edilirse o gün ölmüş oluyor insan. Yani fizik olarak bu dünyayı terk etmek çok da önemli bir şey değil. Nasıl olsa günün birinde hepimiz terk edeceğimiz için ve milyarlar terk ettiği için… Ama adınız anılmadığı gün gerçek anlamda bu dünyayı terk etmiş oluyorsunuz.” demiştin.</p>
<p><img src="http://www.akinabdullahoglu.com/Images/26167642_10156072748872052_2002096257303538440_n.jpg" alt="Barış Manço Resmi" /></p>
<p>Sen bir modern halk ozanı olarak, sanatçı kelimesinin karşılığını fazlasıyla veren güzel insan olarak, hep bizim şarkılarımızı söyledin. Bizdeki yerin şarkılarınla, sözlerinle ve hikayelerinle unutulmadan devam edecek güzel insan..</p>
<p>Bilinenler ve bilinmeyenlerden birkaç parça ile..</p>
<hr />
<p><strong>Baykoca Destanı</strong>
https://www.youtube.com/watch?v=P7QAH2OhoA0</p>
<hr />
<p><strong>Gamzedeyim Deva Bulmam</strong> :
https://www.youtube.com/watch?v=t-lIFKo-RoI</p>
<hr />
<p><strong>Sarı Çizmeli Mehmet Ağa</strong> :
https://www.youtube.com/watch?v=Dlp0FdBYubw</p>
<hr />
<p><strong>Eğri Eğri Doğru Doğru</strong> :
https://www.youtube.com/watch?v=VWxwMs4T7fc
***</p>
<p>Unutmadan “İnsanın öğrenmesi gereken ilk dil, tatlı dildir.” :)</p>
<p>Saygı, sevgi ve rahmetle..</p>“Bir kişinin adı en son ne zaman telaffuz edilirse o gün ölmüş oluyor insan. Yani fizik olarak bu dünyayı terk etmek çok da önemli bir şey değil. Nasıl olsa günün birinde hepimiz terk edeceğimiz için ve milyarlar terk ettiği için… Ama adınız anılmadığı gün gerçek anlamda bu dünyayı terk etmiş oluyorsunuz.” demiştin.Python Django Üzerinde Redis Cache Nasıl Yapılır?2017-11-14T05:52:41+03:002017-11-14T05:52:41+03:00http://www.akinabdullahoglu.com/Python-Django-uzerinde-Redis-Cache-Nasil-Yapilir?%20<p>Merhaba arkadaşlar, yakın zamanlarda <strong>Python</strong> programlama dilini kullanarak bir projeye başladım ve <strong>Django framework</strong> kullanma deneyimi elde ettim. Bu yazımda <strong>Django</strong> uygulaması üzerinde <strong>Redis</strong> ile nasıl haberleşebiliriz bu konuyu aktarmaya çalışacağım.</p>
<p><img src="/Images/django-redis-cache.png" alt="Redis logo" /></p>
<p>Bir önceki yazımda <strong>OS-X</strong> üzerinde <strong>Redis</strong> kurulumunu aktarmıştım, bu yazımda yine OS-X üzerinden ilerleyeceğim, eğer kurulu değil ise onu okuyarak başlangıç yapabilirsiniz.</p>
<p>Eğer zaten kurulu ise konsol da <strong>redis-cli</strong> <strong>ping</strong> komutunu yazıp <strong>PONG</strong> döndüğünü görürseniz devam edebilirsiniz.</p>
<p><strong><a href="https://tutorial.djangogirls.org/tr/installation/#bir-virtualenv-kurun-ve-djangoyu-y%C3%BCkleyin">Virtual Enviroment nedir?</a></strong> bu kaynaktan okuyarak anlayabilirsiniz.</p>
<p><strong>Temel gereksinimler:</strong></p>
<ul>
<li>Redis</li>
<li>Python</li>
<li>Virtual Enviroment (Zorunlu olmasa da kurulu olması iyi olur.)</li>
</ul>
<p>Projenizin de oluşturulduğunu düşünürsek <strong>virtualenv</strong> ile devam edebiliriz.</p>
<p>Aşağıdaki komutta bulunan <strong>eskvenv</strong> yerine sizin verdiğiniz <strong>enviroment</strong> isminiz olacak.</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>source eskvenv/bin/activate
</code></pre></div></div>
<p>Proje kaynak klasörünüzde yukarıdaki komutu çalıştırın. Çalıştırdıktan sonra aşağıdaki gibi bir dönüş olacaktır.</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>(eskvenv) ➜
</code></pre></div></div>
<p>sonrasında aşağıdaki komutu kullanarak, python django için geliştirilen, django redis ekletisini kuracağız.</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ pip install django-redis-cache
</code></pre></div></div>
<p>bu komutu yazdıktan sonra redis cache eklentisi eskvenv bağımlılığında bir kurulum yapacaktır geneli etkilemeyecektir. Kurulum bittikten sonra, projemizde bulunan settings.py dosyamıza aşağıdaki tanımı yapalım.</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
</code></pre></div></div>
<p><strong>LOCATION</strong> özelliğindeki sunucu adresi farklılık gösterebilir bunun için konsolda aşağıda ki komutu yazalım.</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>redis-cli
</code></pre></div></div>
<p>Konsolda bizim geçerli olan redis sunucu konsolumuza geçiş yapacaktır. Birden fazla client varsa aşağıdaki komut işe yarayabilir.</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>redis-cli client list
</code></pre></div></div>
<p><strong>CACHES</strong> tanımını yaptıktan sonra kod kısmında nasıl kullanacağımıza geçelim.</p>
<p><strong>cacheUtils.py</strong> dosyamızın olduğunu varsayarsak aşağıda ki gibi bir aşagıdaki fonksyinlar basit olarak işimizi görecektir.</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>--> cache sınıfını import edelim.
from django.core.cache import cache
Key-Value bir cache tutmak istiyorsak direk set komutunu kullanabiliriz.
cache.set('cache-key', 'bu bir cache key değeridir..')
Key-Value tanımlanan değeri redis üzerinden almak için
cache.get('cache-key') # eğer cache var ise değerini getirecektir.
Birden fazla değer set etmek için:
cache.set_many({'yellow': 250, 'blue': 350, 'white': 450})
Birden fazla değeri getirmek için:
cache.get_many(['blue', 'yellow', 'white'])
# dönecek değerler {'blue': 350, 'yellow': 250, 'white': 450}
Complex tipleri tutmak için:
cache.set('cache-key', {
'string' : 'elma bir meyvedir.',
'int' : 9876,
'list' : [32, 23, 35, 65],
'dict' : {'Y': 9, 'X' : 5, 'Z':98},
'tuple' : (9, 8, 7, 6),
})
</code></pre></div></div>
<p>Kısaca size Python ve Django kullanarak Redis üzerine veri yazmayı ve okumayı basit olarak aktarmaya çalıştım.</p>
<p>Umarım faydalı bir içerik olmuştur.</p>
<p>Sevgilerle.
Akın.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/XfAW4KpyWQo" frameborder="0" allowfullscreen=""></iframe>Merhaba arkadaşlar, yakın zamanlarda Python programlama dilini kullanarak bir projeye başladım ve Django framework kullanma deneyimi elde ettim. Bu yazımda Django uygulaması üzerinde Redis ile nasıl haberleşebiliriz bu konuyu aktarmaya çalışacağım.OS-X Üzerinde Redis Server Kurulumu2017-11-09T04:19:41+03:002017-11-09T04:19:41+03:00http://www.akinabdullahoglu.com/%20OS-X-Uzerinde-Redis-Server-Kurulumu<p>Merhaba arkadaşlar, eğer bu konuya ulaştıysanız redis’in az çok ne yaptığı hakkında bilginiz vardır diye düşünüyorum. Redis, Memcache, Hazelcast genel olarak data cache sunucusu olarak kullanılan teknolojilerdir. Hepsinin birbirine göre birçok farkı vardır size en uygun olanını probleminize göre seçeceğiniz için bu kısmı size bırakıyorum. Biz <strong>OS X</strong> üzerinde <strong>package manager</strong> olarak kullanılan <strong>homebrew</strong> ile sistemimize <strong>Redis Server</strong> kurulumunu gerçekleştireceğiz.</p>
<p><img src="https://upload.wikimedia.org/wikipedia/en/thumb/6/6b/Redis_Logo.svg/1200px-Redis_Logo.svg.png" style="width:50%" /></p>
<p><strong>Homebrew</strong> kurmak için ruby gereksinimi vardır. Öncelikle <strong>Homebrew</strong> yok ise https://brew.sh/ üzerinden kurulumunu gerçekleştirebilirsiniz.</p>
<p>Homebrew kurulumu tamamlandıktan sonra terminal uygulamasını açıyoruz.</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew install redis
</code></pre></div></div>
<p>Bu komutu yazıp çalıştırdıktan sonra <strong>homebrew</strong> bize <strong>redis agent</strong> kurulumunu yapacaktır. Bir hata ile karşılaşılmadığı müddetçe kurulum tamamlanmış olacaktır, fakat biz yine de brew list komutunu yazarak gelen paketler arasında redis’in olduğunu kontrol edelim.</p>
<p>Kurulum sonrasında birkaç ufak ayar yapalım;</p>
<p>Başlangıçta redis açılsın istiyorsak.</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ln -sfv /usr/local/opt/redis/*.plist ~/Library/LaunchAgents
</code></pre></div></div>
<p>Brew aracılığı ile Redis sunucumuzu başlatalım.</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code> $ brew services start redis
</code></pre></div></div>
<p>Konfigürasyon dosyası kullanarak Redis’i başlatmak istiyorsak;</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code> $ redis-server /usr/local/etc/redis.conf
</code></pre></div></div>
<p>Redis sunucumuzu durdurmak istiyorsak;</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ brew services stop redis
</code></pre></div></div>
<p>Redis’in konfigürasyon dosyasının konumu;</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/usr/local/etc/redis.conf
</code></pre></div></div>
<p>Redis’i sistemden tamamen kaldırmak için;</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ brew uninstall redis
$ rm ~/Library/LaunchAgents/homebrew.mxcl.redis.plist
</code></pre></div></div>
<p>Brew üzerinden redis paket detayını almak için;</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew info redis
</code></pre></div></div>
<p>Redis sunucumuzun başarılı bir şekilde çalıştığını test edelim;</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>redis-cli ping
</code></pre></div></div>
<p>terminal’e <strong>PONG</strong> mesajı dönüyorsa sunucumuz başarıyla kurulmuş demektir.</p>
<p>Umarım faydalı bir yazı olmuştur.</p>
<p>Sevgilerle</p>
<p>Akın.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/al7Vt5LLvZY" frameborder="0" allowfullscreen=""></iframe>Merhaba arkadaşlar, eğer bu konuya ulaştıysanız redis’in az çok ne yaptığı hakkında bilginiz vardır diye düşünüyorum. Redis, Memcache, Hazelcast genel olarak data cache sunucusu olarak kullanılan teknolojilerdir. Hepsinin birbirine göre birçok farkı vardır size en uygun olanını probleminize göre seçeceğiniz için bu kısmı size bırakıyorum. Biz OS X üzerinde package manager olarak kullanılan homebrew ile sistemimize Redis Server kurulumunu gerçekleştireceğiz.Blog Sayfam Github’a Emanet2017-10-13T17:19:41+03:002017-10-13T17:19:41+03:00http://www.akinabdullahoglu.com/Blog-Sayfam-Github-a-Emanet<p><img src="https://talk.jekyllrb.com/uploads/jekyllrb/original/1X/4f9bd5334246d33651e846aed812280fbff586ba.png" width="400" height="200" /></p>
<p>Merhaba arkadaşlar, yaklaşık 1 yıl oldu makale yazamadım. Son 1 yıl aşırı yoğun geçti, hatta overdoose olarak tanımlanabilir. Blog içerik yönetimi olarak uzun zamandır wordpress kullanıyordum, fakat bir yerden sonra wordpress’in blog için fazla yüklü olduğunu düşündüm. Çoğu <strong>nerd</strong> insanın blog’larını github üzerinde tuttuğunu biliyordum, ben de yaşadığım birkaç <strong>migration</strong> probleminden sonra <strong>Jekyll</strong> sistemine geçerek blog sayfalarımı <strong>markdown</strong> olarak ekledim. Blog yazılarım artık <strong>github</strong> üzerinde public şekilde tutuluyor, yazılarım <strong>.md</strong> uzantıda <strong>markdown</strong> formatında hazırlıyorum ve sadece jekyll ile ruby tabanlı derleme yaparak .html uzantısında statik sayfalarımı kendi <strong>github</strong> hesabıma aktarıp <strong>github pages</strong> ile host edebiliyorum. Bu bana aşırı rahatlık ve özgürlük sağladı, hem maliyet olarak hemde hosting tarafındaki karmaşalardan uzak, hatalardan uzak bir ekosistem oluştu. Sadece yazı yazdığımı düşünürsek jekyll gerçekten bu iş biçilmiş kaftan!</p>
<p>Teknik detayına geçecek olursak, ben ubuntu ve mac-os üzerinde kullanım sağladım. Windows için işler biraz daha detaylı ilerliyor, ruby vs. yüklemek ve path ayarları yapmak lazım. En iyisi bir Virtual Machine oluşturup, bir linux yazılımı üzerinde Jekyll ile ilerlemek çok rahatlatıcı olacaktır.</p>
<p><strong>Jekyll Static Site Generator</strong>
https://jekyllrb.com/</p>
<p><strong>Wordpress to Jekyll</strong> export yapmak için olan eklendi.
https://tr.wordpress.org/plugins/jekyll-exporter/</p>
<p><strong>Github Pages</strong>
https://pages.github.com/</p>
<p>Yeni yazılarda görüşmek dileğiyle.</p>
<iframe width="450" height="315" src="https://www.youtube.com/embed/z33tH-JdPDg" frameborder="0" allowfullscreen=""></iframe>Iskalanmış Hayaller2017-02-08T21:35:41+03:002017-02-08T21:35:41+03:00http://www.akinabdullahoglu.com/iskalanmis-hayaller<p>Olur ya bir gün geçer bu zamanlar, biz bunlara da katlanırız..
Uzaklara dalsak da derin derin, arayışta olsak da hep bir şeyleri..
Her geçen gün daha da tüketiyor, daha da umutsuzlaştırıyor..
Umut neydi sahi, her yıkılıştan, her dibe vuruştan sonra kalkacağımızı bilmek miydi? Yoksa aniden ansızın gelen güzel bir hayat cilvesi miydi?
Ya dibe vurup bir gün kalkamazsak, ya hepten yıkılıp kalkamayacak olursak..
Ama hayır böyle düşünmeyeceğim, bunca umutsuzluğa rağmen biz yine şarkılar söyleyip şiirler okuyacağız, bugün kablosuz olarak bağladığımız umutlarımızı belki bir gün tekrar gözlerimize, yüz yüze bakarak yeniden yeşerteceğiz..</p>
<p>Bir de çay içeceğiz, hep birlikte umutla, güneşli günlerde..</p>
<p>A.A.</p>
<p>08/02/2017 23:27 Aklımdan geçenler..</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/2oICpKQl6mE" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen=""></iframe>Olur ya bir gün geçer bu zamanlar, biz bunlara da katlanırız.. Uzaklara dalsak da derin derin, arayışta olsak da hep bir şeyleri.. Her geçen gün daha da tüketiyor, daha da umutsuzlaştırıyor.. Umut neydi sahi, her yıkılıştan, her dibe vuruştan sonra kalkacağımızı bilmek miydi? Yoksa aniden ansızın gelen güzel bir hayat cilvesi miydi? Ya dibe vurup bir gün kalkamazsak, ya hepten yıkılıp kalkamayacak olursak.. Ama hayır böyle düşünmeyeceğim, bunca umutsuzluğa rağmen biz yine şarkılar söyleyip şiirler okuyacağız, bugün kablosuz olarak bağladığımız umutlarımızı belki bir gün tekrar gözlerimize, yüz yüze bakarak yeniden yeşerteceğiz..İyi ki Doğdun Barış Manço!2017-01-02T21:35:41+03:002017-01-02T21:35:41+03:00http://www.akinabdullahoglu.com/iyi-ki-dogdun-baris-manco<p><img src="http://www.akinabdullahoglu.com/Images/2017/01/1188826_3500ab27ba42b8f526331bd6c1193c30-150x150.jpg" alt="" /></p>
<p>Ülkemiz ve Evrensel çevrede fazlasıyla yer bırakmış, <strong>Türk Rock **tarihinin yapıtaşlarını oluşturmuş, her dönem herkeste bir iz bırakmış. Genel olarak tüm kesimlerin dinlemese bile saygı duyduğu, büyük bir sanatçı, gezip görüp bizlere anlattığı yerler ile modern evliya çelebi etiketini tamamen hak eden, ana diline yakın seviyede birden fazla dil bilen ve o diller üzerinde müzik üretmeyi başarmış büyük bir insan. Ben kendisini yaşım yettiğince televizyon yada kaset olarak çok az dinleyip yada görüp sonradan yaptığım araştırma ve ilgiyle kendisinin hayatı hakkında fazlasıyla bilgi sahibi olduğum bir kişi. Belki hiç tanımayan hiç dinlemeyen hiç görmeyen bir kişi bu yorum hakkında bu kadarı abartı diyebilir ama eminim ki dinleyen, tanıyan bir kişiye göre belki de bu hayatının çok ufak bir kısmının özetidir belki de. Bugün 74. yaş günü aramızdan ayrılışı ise neredeyse 17 yıl oldu, o hayatı boyunca bir şeyler üretme, ülkemizi evrensel alanda tanıtma gibi kendi kendine misyonlar yükledi ve başarıyla hedeflerine ulaşarak ülkemiz adına bir gurur kaynağı oldu. Ben onu son dönemlerde popüler olan şarkılarıyla değil de gerçekten gönülden sevenlerin eminim bildiği, **Halil İbrahim Sofrası</strong>, <strong>Aynalı Kemer</strong>, <strong>Little’Darlin</strong>, <strong>Nick The Chopper</strong>, <strong>Ne Ola Yar Ola</strong> ve ismi yazılacak nice derin anlamlar, öğütler taşıyan şarkılarıyla sevdim. Kimi zaman Nick The Chopper parçası ile bir oduncunun hikayesinin hikayesini ingilizce olarak anlattı, kimi zaman Nane Limon Kabuğu ile sağlığın sıhhatin önemini vurguladı, kimi zaman Ahmet Beyin Ceketi‘nin anlamını bize öğütledi, kimi zaman Süleyman ile görgüsüzlüğün ne kadar acı olduğunu anlattı, kimi zaman Anahtar parçası ile paranın insanı ne kadar satın aldığını, Halil İbrahim Sofrası ile alın terinin, helal kazancın önemine dem vurdu ve 2023 parçası ile de geleceği gördü belki de gelecekten beklediği, istediği, umutlarını aktardı.. Bizler bu acı günlerde onun şarkılarıyla öğütleriyle moral bulmaya çalışıyoruz ve hala anlıyoruz ki bu seviyeye gelebilmek ne denli zor ne denli emek isteyen bir işmiş, içinde sevgi olmayan hiç bir iş asla kimse tarafından önemsenmiyormuş. İyi ki doğdun Barış abi, iyi ki bu hayat katarının bu çizgisinde seni tanıdım, dinledim ve dinlemeye örnek almaya devam edeceğim. Bu yazıyı okuyan, sabreden ve sabrın sonuna geldiğinde selamet olmasını dilediğim bir kaç Barış Manço videosu paylaşacağım.</p>
<p>Barış Manço hayatını çiziyor</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/SYffTCXtsXQ" frameborder="0" allowfullscreen=""></iframe>
<p>Para Nedir? Röportajından</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/G7tCGTcL02M" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen=""></iframe>
<p>Son olarak Halil İbrahim Sofrası klibiyle..</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/ho87nPGKXnQ" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen=""></iframe>
<p><img src="http://www.akinabdullahoglu.com/Images/2017/01/C1JvprbXAAA18Nw-300x206.jpg" alt="" /></p>
<p>Okuduğunuz için teşekkürler.</p>
<p>Sevgilerle…</p>
<p>Akın</p>Abstract Class ve Interface Arasındaki Fark?2016-10-22T17:35:41+03:002016-10-22T17:35:41+03:00http://www.akinabdullahoglu.com/Abstract%20Class%20ve%20Interface%20Nedir<p>Merhaba arkadaşlar, bugün sizlerle paylaşmak istediğim konu C# programlama dili içerisinde bulunan <strong>Class</strong> ve <strong>Interface</strong> yapıları ve aralarındaki farklar hakkında olacak. Öncelikle <strong>Class</strong>(Sınıf) nedir bu konuya değinelim, Class içerisinde metotlar, değişkenler hatta yine sınıf tanımlarının yapılabildiği Object Oriented Programlama dilinin temelini oluşturan bir yapıdır. Aşağıdaki örnekte bir Users adında bir sınıfımız ve içerisinde <strong>getter</strong> ve <strong>setter</strong> tanımlı olan iki public değişkenimiz var.</p>
<figure class="highlight"><pre><code class="language-csharp" data-lang="csharp"> <span class="k">public</span> <span class="k">class</span> <span class="nc">Users</span> <span class="p">{</span>
<span class="k">public</span> <span class="kt">string</span> <span class="n">userName</span> <span class="p">{</span><span class="k">get</span><span class="p">;</span><span class="k">set</span><span class="p">;}</span>
<span class="k">public</span> <span class="kt">string</span> <span class="n">userEmail</span> <span class="p">{</span><span class="k">get</span><span class="p">;</span><span class="k">set</span><span class="p">;}</span>
<span class="p">}</span></code></pre></figure>
<p><strong>Class</strong> yapısı hakkında kısa bir açıklama yaptıktan sonra şimdi <strong>Interface</strong>(Arayüz) yapısına gelelim, Interface’de Class yapısına benzer bir yapıdadır, en kritik farklarından birisi içerisine metodun sadece tanımı eklenir burası biraz kafa karıştırıcı olabilir ama örnek ile anlaşılacağını düşünüyorum.</p>
<figure class="highlight"><pre><code class="language-csharp" data-lang="csharp">
<span class="k">public</span> <span class="n">Interface</span> <span class="n">IUsers</span><span class="p">{</span>
<span class="n">User</span> <span class="nf">getUsersByName</span><span class="p">(</span><span class="kt">string</span> <span class="n">name</span><span class="p">);</span>
<span class="n">User</span> <span class="nf">getUsersByEmail</span><span class="p">(</span><span class="kt">string</span> <span class="n">email</span><span class="p">);</span>
<span class="n">User</span> <span class="nf">getUsersById</span><span class="p">(</span><span class="kt">int</span> <span class="n">id</span><span class="p">)</span>
<span class="p">}</span></code></pre></figure>
<p>Yukarıda ki örnekte görüldüğü gibi <strong>Interface</strong> tanımı <strong>Class</strong> tanımına benziyor fakat en önemli özelliklerinden birisi sadece metod tanımlarını içermeleridir. Peki diyeceksiniz ki neden <strong>interface</strong> kullanmamız gerekiyor? bu sorunun cevabını ancak fazlaca kod yazarak, deneyerek tecrübe ederek verebilirsiniz. Bir proje içerisinde kod yapısı arttıkça ve aynı kodlar kendini tekrarlamaya başlayınca çeşitli çözümler aranır, işte bu yapılar da dili işlevsel kullanmak için bir nevi araçtır. <strong>Interface</strong> kullanmak geliştirme düzenli sağlar, <strong>Domain</strong>(Proje iş yapısı) yapısına göre tasarlandıktan sonra ve metod tanımlarını <strong>implement</strong> edildiği <strong>Class</strong> içerisinde zorunlu kılar, bu da bir zorunluluk olduğundan daha düzenli bir geliştirmeye zorlar.</p>
<p><strong>Genel olarak birbirlerine göre farkları:</strong></p>
<p>*Interface içerisinde metod tanımlarını barındırırken, Class içerisinde metodun kendisi vardır.</p>
<p>*Abstract class base class olma özelliği taşır ve instance edilemez. <a href="http://www.akinabdullahoglu.com/Images/2016/09/abstract-class-instance-error.png">Bknz</a>:</p>
<p>*Abstract olmayan class instance edilebilir ve implement de edilebilir.</p>
<p>*Abstract class bir defa implement edilir fakat bir class’a birden fazla Interface implement edilebilir. <a href="http://www.akinabdullahoglu.com/Images/2016/09/abstract-class-birden-fazla-implement-edilemez.png">Bknz-1</a> , <a href="http://www.akinabdullahoglu.com/Images/2016/09/interface-birden-fazla-implement-edilebilir.png">Bknz-2</a></p>
<p>*Interface içerisine tanımlanan metod implement edildiği Class içerisinde tanımlanmak zorundadır.</p>
<p><strong>Örnek</strong> :</p>
<figure class="highlight"><pre><code class="language-csharp" data-lang="csharp">
<span class="k">public</span> <span class="k">class</span> <span class="nc">UserService</span><span class="p">:</span><span class="n">IUser</span><span class="p">,</span><span class="n">IUserLogs</span>
<span class="p">{</span>
<span class="p">}</span> </code></pre></figure>
<p>Yukarıdaki örnekte <strong>IUser</strong> ve <strong>IUserLogs</strong> interface(arayüzleri) UserService class’ına <strong>implement</strong> edilmiştir. Interface tanımlarken ilk harf olarak <strong>I</strong> harfini kod zorunlu kılmaz fakat geliştirici kuralları açısından doğru kullanım bu şekildedir. <strong>Interface ile ilgili basit bir örnek :</strong></p>
<figure class="highlight"><pre><code class="language-csharp" data-lang="csharp"> <span class="k">interface</span> <span class="nc">IUser</span>
<span class="p">{</span>
<span class="k">void</span> <span class="nf">getUsers</span><span class="p">(</span><span class="kt">string</span> <span class="n">name</span><span class="p">);</span>
<span class="kt">string</span> <span class="nf">getUserEmailById</span><span class="p">(</span><span class="kt">string</span> <span class="n">id</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">interface</span> <span class="nc">IUserLogs</span>
<span class="p">{</span>
<span class="kt">int</span> <span class="nf">getUserEntryCountById</span><span class="p">(</span><span class="kt">int</span> <span class="n">id</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">class</span> <span class="nc">UserService</span><span class="p">:</span><span class="n">IUser</span><span class="p">,</span> <span class="n">IUserLogs</span>
<span class="p">{</span>
<span class="n">DBEntities</span> <span class="n">db</span> <span class="p">=</span> <span class="k">new</span> <span class="nf">DBEntities</span><span class="p">();</span>
<span class="k">public</span> <span class="k">void</span> <span class="nf">getUsers</span><span class="p">(</span><span class="kt">string</span> <span class="n">name</span><span class="p">)</span>
<span class="p">{</span>
<span class="p">}</span>
<span class="k">public</span> <span class="kt">string</span> <span class="nf">getUserEmailById</span><span class="p">(</span><span class="kt">string</span> <span class="n">id</span><span class="p">)</span>
<span class="p">{</span>
<span class="k">return</span> <span class="n">db</span><span class="p">.</span><span class="n">tblUsers</span><span class="p">.</span><span class="nf">Where</span><span class="p">(</span><span class="n">x</span><span class="p">=></span><span class="n">x</span><span class="p">.</span><span class="n">userID</span><span class="p">==</span><span class="n">id</span><span class="p">).</span><span class="n">EmailAddress</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">public</span> <span class="kt">int</span> <span class="nf">getUserEntryCountById</span><span class="p">(</span><span class="kt">int</span> <span class="n">id</span><span class="p">)</span>
<span class="p">{</span>
<span class="k">return</span> <span class="n">db</span><span class="p">.</span><span class="n">tblUserPosts</span><span class="p">.</span><span class="nf">Where</span><span class="p">(</span><span class="n">x</span><span class="p">=></span><span class="n">x</span><span class="p">.</span><span class="n">userID</span><span class="p">==</span><span class="n">id</span><span class="p">).</span><span class="nf">Count</span><span class="p">();</span>
<span class="p">}</span>
<span class="p">}</span></code></pre></figure>
<p>Biraz kafa karıştırıcı olabilir fakat kendiniz pratikler ve örnekler yaparak daha anlamlı yapılar ortaya çıkarabilirsiniz. Bir de vereceğim kavramları da araştırmanızı rica ediyorum. <a href="https://en.wikipedia.org/wiki/KISS_principle"><strong>K.I.S.S.(Keep İt Simple Stupid)</strong></a>, <a href="https://en.wikipedia.org/wiki/Single_responsibility_principle"><strong>Single Responsebility</strong></a>, <strong><a href="https://en.wikipedia.org/wiki/Separation_of_concerns">Seperation of Concerns</a>, <a href="https://en.wikipedia.org/wiki/Inversion_of_control">Inversion of Control</a></strong> bu kavramları araştırdıkça ve okudukça kafanıza daha iyi şeyler oturacağına eminim. Sevgilerle.</p>
<iframe src="https://www.youtube.com/embed/d27gTrPPAyk" allowfullscreen="allowfullscreen" width="560" height="315" frameborder="0"></iframe>Merhaba arkadaşlar, bugün sizlerle paylaşmak istediğim konu C# programlama dili içerisinde bulunan Class ve Interface yapıları ve aralarındaki farklar hakkında olacak. Öncelikle Class(Sınıf) nedir bu konuya değinelim, Class içerisinde metotlar, değişkenler hatta yine sınıf tanımlarının yapılabildiği Object Oriented Programlama dilinin temelini oluşturan bir yapıdır. Aşağıdaki örnekte bir Users adında bir sınıfımız ve içerisinde getter ve setter tanımlı olan iki public değişkenimiz var.Gitignore Nasıl Oluşturulur ve Kullanılır?2016-10-22T17:35:41+03:002016-10-22T17:35:41+03:00http://www.akinabdullahoglu.com/Gitignore%20Nasil%20Olusturulur%20ve%20Kullanilir<p>Merhaba arkadaşlar, .git ile ilgili yazılarımın devamı olarak bu yazımda yine birlikteyiz.</p>
<p>Öncelikle Git conflict problemi ile ilgili 2 önceki yazımda bir örnek vermiştim. Öncelikle conflict nedir onu tanımlayalım. Kendi lokal repomuz ile sunucuya aktardığımız repomuzun ikisinin aynı anda farklı değişikliklere gebe kalması durumunda oluşan dosya çakışmaları, eksik dosyalar ve buna benzer durumlar conflict hatasına neden olur. Bu tabii ki kullanım aksiyonuna göre değişkenlik gösterebilmektedir, ekip olarak kullanımlarda pull yapılmadan gönderilme durumları ve benzer durumlar conflict problemine yol açar. Bu durum da bizim projenin hataya düşmesine, eksik dosya oluşmasına ve buna benzer birçok problemin çıkmasına sebebiyet vermektedir. Genellikle Derlenen programlama dillerinde her build işlemi sonrasında geçici dosyalar oluşmaktadır. Örnek verecek olursak .NET Platformu üzerinde geliştirme yapanlar bilirler kod her derlendiğinde temporary yani geçici dosyalar oluşur ve bu dosyalar hep farklı isimlerde tutulmaktadır. Böyle bir durum oluşması da bizim git server üzerinde tutulan dosya yapımızda bozukluklara karışıklıklara yol açabilir. İşte bu yüzden .git server diğer source-control sistemlerinde olduğu gibi bir filtreleme mekanizması olan .gitignore dosyasını tanımlamıştır. Bu dosya içerisine projenin mimari yapısını etkilemeyecek (geçici dosyalar, sisteme bağımlı olmayan dosyalar, gönderilmesine gerek olmayan dizinler vb.) klasörler ya da dosyalar eklenerek filtreleme yapılır ve oluşturduğumuz repository altına bu dosyaların gitmesi engellenir. Bu da temiz bir repo yapısını ve conflict durumlarını en aza indirir. Sağlıklı bir şekilde push ve pull işlemleri yapıyorsak bir problem ile karşılaşma durumumuz çok aza indirgenmiş olacaktır.</p>
<p>Ben sizlere kendimin de kullandığı bir servisi önereceğim.
<strong>https://www.gitignore.io/</strong> linkinden servisi açtıktan sonra örnek olarak <strong>VisualStudio</strong> girelim.</p>
<p><img src="/Images/2016/04/gitignore.io_.gif" alt="enter image description here" /></p>
<p>Gördüğünüz gibi açılan pencrede aşağıdaki gibi bir kod yapısı çıkıyor.</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code> # Created by https://www.gitignore.io/api/visualstudio
### VisualStudio ###
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
# Visual Studio 2015 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# DNX
project.lock.json
artifacts/
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Comment the next line if you want to checkin your web deploy settings
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# NuGet v3's project.json files produces more ignoreable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.pfx
*.publishsettings
node_modules/
orleans.codegen.cs
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git <img draggable="false" class="emoji" alt="" src="https://s.w.org/images/core/emoji/2/svg/1f609.svg">
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
# SQL Server files
*.mdf
*.ldf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# JetBrains Rider
.idea/
*.sln.iml
</code></pre></div></div>
<p>Şimdi sıra geldi bu dosyayı repository’mize tanımlamaya. oluşan kodumuzu kopyalıyoruz ve projemizin ana dizininde yeni bir metin belgesi oluşturuyoruz.</p>
<p><strong>Dikkat</strong> : Windows kullanıcıları dosya uzantısı gizlilik ayarını değiştirmeleri gerekebilir.</p>
<p><strong>bakınız :</strong> http://windows.microsoft.com/tr-tr/windows/show-hide-file-name-extensions#show-hide-file-name-extensions=windows-7</p>
<p>Aşağıdaki .gif resim üzerinden işlemi hareketli şekilde görebilirsiniz.</p>
<p><img src="/Images/2016/04/create-gitignore.gif" alt="enter image description here" /></p>
<p>Gördüğünüz gibi .gitignore dosyamızı oluşturduk ve artık içerisindeki örnekler üzerinden kendimize göre düzenlemeler ve değişiklikler yapabiliriz. Bundan sonra ki yaptığımız commit işlemlerinde bu kuralları baz alacak ve sunucuda eşleşmeyen dosyalar çıkarılacaktır.</p>
<p><strong>Dipnot</strong> : Github ve Bitbucket baz alınarak anlatım yazılmıştır iki platformda da kullanılır.</p>
<p>Umarım açıklayıcı bir yazı olmuştur.</p>
<p>Hepinize sevgiler yeni yazılarla görüşmek dileğiyle..</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/piemW_QYbO0?ecver=1" frameborder="0" allowfullscreen=""></iframe>Merhaba arkadaşlar, .git ile ilgili yazılarımın devamı olarak bu yazımda yine birlikteyiz.Git Repository üzerinden proje nasıl çekilir?2016-05-04T17:35:41+03:002016-05-04T17:35:41+03:00http://www.akinabdullahoglu.com/Git%20Repository%20uzerinden%20proje%20nasil%20cekilir<p>Merhaba arkadaşlar, git yazılarımın devamı olan bu yazımda yine sizlere ufak bilgiler aktarmaya çalışacağım. Hatırlarsanız önceki yazı serilerimde bitbucket üzerinde repository oluşturmayı, bir proje örneğini git server üzerine aktarmayı ve gitignore tanımlamasının nasıl yapıldığına dair yazılar paylaşmıştım. Bugün ise daha önceden sunucuya aktarılmış olan bir git repository’sini kendi bilgisayarımıza nasıl aktarılacağını inceleyeceğiz. Öncelikle bitbucket üzerinde çalışma yapıyorsak eğer repository detayındaki clone menüsüne tıkladığımızda bize bir <strong>git clone</strong> linki veriyor ve her oluşturduğumuz repo içinde bir .<strong>git</strong> uzantılı benzersiz bir link oluşturuyor. Önceki projemizden bir ekran görüntüsü olan linki aşağıdaki şekilde görebilirsiniz.</p>
<p><img src="/Images/2016/05/clone.png" alt="enter image description here" /></p>
<p>Var olan bir repository’i bilgisayarımıza almak için kullanmamız gereken komut git clone komutudur. Adından da anlaşılacağı üzere linki verilen proje reposunun clone’unu alarak bilgisayarımızdaki çalıştığımız dizine almamızı sağlar. Tüm ignore tanımlaması, config yapılandırılması ile birlikte tüm özellikleri barındırır.</p>
<p>Ben çalışmalarımı <strong>CMDER.exe</strong> uygulaması üzerinden yaptığımdan dolayı örneklendirmeyi de onun üzerinden gerçekleştireceğim. <strong>CMDER.exe</strong>‘yi çalıştırarak projeyi almak istediğimiz working directory’mize gidelim.</p>
<p>Aşağıdaki gif imajını açarak uygulamanız gereken komutu örnek olarak görebilirsiniz.
<img src="/Images/2016/05/bitbucket-git-clone.gif" alt="enter image description here" /></p>
<p>Gördüğünüz gibi artık uzan sunucuda bulunan proje dosyalarımız <strong>C:\Projects</strong> altında ve artık ortak bir projeyi bilgiayar dosya sistemine bağımlı kalmadan güvenli bir şekilde geliştirebiliriz.</p>
<p>Dikkat etmeniz gereken noktalar ile ilgili ileride bir yazı yayımlayacağım fakat şimdilik aklıma gelen birkaç hususu belirteyim.</p>
<p>Eğer projeyi sunucudan almışsak ve çalışıyorsak bu projemizde farklı bir arkadaşta geliştirme yapıyorsa ve o commit‘ini master branch‘e göndermişse ve bizde kendimiz farklı dosyalarda geliştirme yapıyorsak yapmamız gereken aşamalar aşağıdaki gibidir.</p>
<p><code class="highlighter-rouge">git add *</code> veya . bu tüm dosyaları baz alarak ekleme yapar. <code class="highlighter-rouge">git add – filename</code> vererek sadece spesifik dosya aktarımı da yapabiliriz. Öncelikle add ile local repository’mize dosyalarımızı ekleyelim, sonrasında ise git commit -m “commit mesajınız” ile local commitimizi tamamlayalım. Sonrasında ise git pull –rebase origin master komutu ile var olan repository’mize master branch’imizin güncel halini alalım. Dosyalar güncellendikten sonra projemizi kontrol edip, son push ilemini gerçekleştirerek master branch üzerine dosyaların aktarımını sağlayalım.</p>
<p><code class="highlighter-rouge">git push origin master</code> komutunu kullanarak lokal repomuzdaki dosyalarımızı uzak sunucudaki repomuza göndererek <strong>master branch</strong>‘imizi güncel tutalım.</p>
<p>Bir yazının daha sonuna geldik umarım sizlere bir şeyler aktarabilmişimdir.</p>
<p>Sorularınız, önerileriniz ve düzeltmeleriniz olur ise her zaman yorumlarınızı bekliyorum.</p>
<p>Yazımı sevdiğim bir Barış Manço parçası ile sonlandırıyorum.</p>
<iframe width="420" height="315" src="https://www.youtube.com/embed/DxCLKJE7FVU?ecver=1" frameborder="0" allowfullscreen=""></iframe>Merhaba arkadaşlar, git yazılarımın devamı olan bu yazımda yine sizlere ufak bilgiler aktarmaya çalışacağım. Hatırlarsanız önceki yazı serilerimde bitbucket üzerinde repository oluşturmayı, bir proje örneğini git server üzerine aktarmayı ve gitignore tanımlamasının nasıl yapıldığına dair yazılar paylaşmıştım. Bugün ise daha önceden sunucuya aktarılmış olan bir git repository’sini kendi bilgisayarımıza nasıl aktarılacağını inceleyeceğiz. Öncelikle bitbucket üzerinde çalışma yapıyorsak eğer repository detayındaki clone menüsüne tıkladığımızda bize bir git clone linki veriyor ve her oluşturduğumuz repo içinde bir .git uzantılı benzersiz bir link oluşturuyor. Önceki projemizden bir ekran görüntüsü olan linki aşağıdaki şekilde görebilirsiniz.