23 Ekim 2014 Perşembe

Kendi "Cloud Storage"imi Kurdum

Bu aralar her seyi cloud'a tasimaya calisiyorum. Once yazdigim programlari bitbucket'e sonra proje takibini trello'ya sonra postit'lerimi realtimeboard'a, sonra tum bilgi birikimimi kendi kurdugum wiki'ye, sonra, dokumanlarimi onedrive'a, sonra password'lerimi passpack'e, sonra fotograflarimi flickr'a koydum

Kendi CI (Continious Integration) server'ima sira geldiginde evdeki kullanmadigim bir notebook uzerine ubuntu yukleyerek bir denemem oldu ancak zamansizliktan daha da ustune gidemedigimden simdilik bu konuyu erteledim. Onun yerine OnCheckIn sitesini kullanmaya basladim

Ve simdi kendi kisisel cloud file server'ima sira geldi. ama bunda verilen limitler yuzunden bir sekilde film arsivim, muzik arsivim gibi kisimlari hep konu disinda birakmak zorunda kaliyordum.

Evde sinirsiz internet kullaniyorum ve 10Mbit ile bagliyim. O halde neden kendi evimden yapmayayim dedim. Evde 2 Tb lik bir harici diskim vardi. Hazir butun arsivim de uzerinde diye bunu internete acmanin yolunu aradim. Once kullanmadigim linux' a baglamak geldi aklima ama laptop'un faninin sesi ve gereksiz yere acik kalacak olmasi yuzunden vaz gectim.

Sonra internette gezerken Kinston MobileLite i buldum. bu adreste Fiyati £15.99 du.
Bu kucuk alet ustune takilan USB veya SD memory kartlari Wireless uzerinden paylasmanizi sagliyor. Ilk anda amatorler icin hayal kirikligi yaratacak kadar kotu bir iPhone Applikasyonu ile kullaniliyor.

Bu app ile kullanacak olursaniz kendi wifi agini olusturup telefonla buna baglanmanizi bekliyor.

bu app uzerinde kendi aginizi tanimladiginizda da yine cihaz uzerinden wifi a baglanip cihazi kopru olarak kullanarak internete cikabiliyorsunuz.
Kisaca son derece kotu bir yaklasim diyebiliriz.

Ama durun bir dakika

Buraya kadar olanlari aynen yapip cihazi kendi networkunuze tanittiktan sonra bir kac hamle ile bakin bu cihaz ne hale geliyor. 

Bu asamada evdeki wifi modemin ayarlarina girip bu cihazin hangi MAC adresini ogrendim. Sonra aldigi IP adresini bu MAC icin sabitledim. Boylece bu cihaz ne zaman benim agima girerse girsin modemim onu taniyip ayni IP yi verecek. 

Sonra Modemin uzerindeki applikasyonalari incelerken dinamik olan IP adresini dinamik domain'e tanimladim. Bunun icin modemde yuklu olan ddns hizmetini kullandim. Boylece ben modemi resetlesem ve IP si degisse de tanimladigim isim uzerinden her zaman evime erisebilecektim. 

Sonra yine modem uzerinde NAT veya Virtual Server hizmetlerini kullanarak cihaza atadigim sabit IP icin 445 numarali dosya paylasim portunu disariya actim. (biliyorum biraz riskli) 

Boylece evin icindeyken dahili ip uzerinden evin disindayken tanimladigim dinamik domain ismi uzerinden her zaman bu diske ulasabilecegim. 

Son olarak iPhone a Remote File Manager programini yukledim. (gercekten iyi bir program) 

Windows altinda ise normal network dosya paylasimi uzerinden sabitledigim ic IP ile erisebiliyorum. 

Simdi artik 2 Tb Cloud Storage alanim var. 

1 Ağustos 2014 Cuma

Pluralsight

MVC ile ilgili kaynak arayisim sirasinda asp.net sitesindeki video linklerini takip ederken tanistim pluralsight ile. Ingilizceniz varsa (ki yazilimciysaniz bence kesinlikle olmali) muhtesem bir kaynak. Icerigini kendi belirlediginiz bir universitede gibisiniz. Aylik odenen cuzi bir rakami mesleginize yaptiginiz yatirim olarak gorurseniz ogrenmek istediginiz tum teknolojiler hakkinda harika dersler sizi bekliyor demektir. Bireysel kurs aliyormusum gibi zamanim oldugu anda tablet telefon pc (ki buyuk ekran daha iyi olacagindan telefon pek kullanisli olmuyor) dersleri acip seyredebiliyorum.

Kesinlikle tavsiye ederim.

5 Mart 2014 Çarşamba

MVC dunyasinda ilerlemek

Gecen seferki yazimda bahsettigim video serisini bastan sonra seyrettim, notlar aldim, programci arkadaslarla konuyu tartistim ve nihayet ilk projeyi gelistirme asamasina geldigimi hissediyorum. Kendimi bilgi seviyesi olarak baslangica gore cok daha ileride goruyorum. (Uzmanliktan cok uzak ama ana hatlari kavramis)

Bir hayli not aldim. Bu video serisi inanilmaz faydali. isinize yarayacak hemen hemen her yere dokunuyor. Ruby kursunda bile canli olmasina ragmen konular bu kadar iyi anlatilmamisti . Sonucta video derslerin TDD (Test Driven Development) konusuna girmesi de cok yerinde bir yaklasim oldu.

Simdi su konularin ne oldugu nasil ve nerede kullanilacagini anladim

  • Razor
  • MVC
    • Model
    • View
      • bundling
      • layout
      • partial view
    • Controller
      • Ajax
      • Data connection
  • Entity Framework
  • Tests
  • Cache
  • OpenID
  • Authorization / Authentication 

Bu ogrendiklerimi simdi sicagi sicagina bir projede kullanarak pekistirmem gerekiyor. Elimde .NET Form View ile yapmaya calistigim ama yarim kalmis bir proje var. Bu projeyi bastan MVC ile yazmayla baslayabilirim. Sonucta zaman sikintisi olmayan bir konu oldugundan daha rahat davranabilirim. Biraz da sans ile sanirim is yerinde de bir tane baslanmis ama gelistirilmeyi bekleyen MVC projesi devraldim.

Birden soguk suya atlamak bazen en iyi ogrenme sekli. Sadece bu sular cok soguk oldugu icin onceden biraz isinma hareketi yapmakta fayda var. O yuzden mutlaka konsepti tam anlamiyla cozmek sart.

Simdi biraz kapanip is yapma zamani.
Kullanacagim versiyonlar

JQuery 1.8.2
MVC 5.1
.NET 4.5

27 Şubat 2014 Perşembe

MVC dunyasina gec bir giris

Uzun zamandir uzerinde calistigim, bakim yaptigim tum projelerin web-forms tabanli olmasindan dolayi erteleyip durdugum MVC dunyasina artik girme zamani gelmisti. Kendime bu sene icin cizdigim rotanin bir parcasi olarak izleyecegim yolun adimlari buradan geciyor.

Bu sene icin kendimi zamani yakalamaya adadim diyebiliriz. Sene sonuna kadar extreme programming konusunu tam anlami ile uygulamaya gecirmis olmak istiyorum.  Ama bu konuya klasik konvansiyonel yontemlerden direk olarak dalinca duvara tosladim. Onun icin kendime gecisli bir plan hazirladim. VB.NET ile ASP.NET uzerinde web-forms kullanan birisinin her ne kadar klasik ASP gecmisi olsa da baliklama Ruby'e girmesi (en azindan benim yasimda) husran olabiliyor.

Dolayisiyla bildigim ortamdan yola cikarak gecisler yapa yapa hedefe ulasacagim bir rota belirledim. Bu rota;

  1. GIT
  2. C#
  3. MVC
  4. Entitiy Framework
  5. TDD
  6. BDD
  7. S.O.L.I.D.
  8. Ubuntu
  9. Ruby
  10. Ruby on Rails
  11. Cucumber
  12. MongoDB
Hepsini sirayla yapmak biraz zor. cunku ic ice gecmis yapilar da var. Dolayisiyla ilk 6 maddeye ayni anda girmek durumunda kaldim. Bu gecis en azindan kavramlarin oturmasi icin yararli oluyor.

Bir suru kitap indirdim, okudum, makalelere daldim ve en sonunda super bir video kurs ile tanistim. ilk 6 madde icindeki 4 konuyu kapsayan bu kursu eminim arayinca siz de bulabilirsiniz ama kolaylik olsun diye bir kez de ben yazmak istedim.

ya da buradan direk ulasabilirsiniz 

Kaynak kodlarina da buradan ulasabiliyorsunuz 

Altyazi secenegi ile ingilizce veya Turkce altyazi acabiliyorsunuz ama uyarayim Turkce google translate Turkcesi. Yani birsey anlasilmiyor. ama ingilizce altyazi ile konusmada anlayamadiginiz bolumleri yaklalamak daha kolay olabiliyor. 




6 Şubat 2014 Perşembe

Projelerde yeni yaklasimlar - Fil yemek

Merhaba

Bu hafta calistigim sirketce yazilim gelistirmede yeni bir yaklasima gectik. Pilot calismasi yapildiginda herkesin mutlu oldugu bu modeli sirketce benimseme karari aldik.

Önce

Yazilimda simdiye kadar Agile metodolojisi kullaniyorduk, en modern, kullanisli ve ise uygun yapilari uygulamayi seven bir sirkette calismak gercekten cok hos bir tecrube.

Simdiye kadarki sistemde, proje sahibi ihtiyaclarini ve taleplerini bir panel'e onem derecesi vererek yapistiriyordu (bunun fiziksel post-it veya index card yapilari da mevcut, bilgisayar ortaminda olanlari da)

Sonra "İş Analist"i (Business Analyst) toplanti organize edip isin detaylarini ogreniyor ve bu isi iligli yazilim biriminin tahtasina ihtiyaclar, beklentiler, kabul kriterleri, etkilenecek yerler gibi detaylarini da kapsayacak sekilde yazip asiyordu.

Yine analisr proje sahibi ile konusarak oncelik sirasina gore bu "ticket"'i siraliyordu

Ilgili yazilim birimi elindeki is yogunluguna bakarak Ticket'i ele aliyor ve uzerinde calisip bitirince test kolonuna asiyordu. Test onay verdikten sonra proje sahibi isi gorup is acisindan test ediyor ve kabul verince is hayata geciriliyor ve sonuclaniyordu.

Cok da duzgun isleyen bu sistemin bir handikapi bazen oncelikler bazen isin geregi olarak bekleyen "ticket"lar guncelligini yitirebiliyor veya buyuk parcalar halinde yazilim yapimasi gereginden dolayi uzun zaman alabiliyordu. Yazilimcinin gorusu pek alinmadigi icin yazilim sirasinda ortaya cikan uyumsuzluklar bircok toplantiya ve analizlerde revizyona ihtiyac duyabiliyordu.

Yine de bu yapinin tum bu aksayan yanlara ragmen oldukca akici bir sistem oldugunu da kabul etmemiz gerekiyor. Bu sistem icin Agile Zen kullaniyorken sonra oylama ile Trello'ya gectigimizi de dipnot olarak vereyim.

Bu sistem ocellikle BDD ve TDD yapilari ile son derece uyumlu oldugu icin genelde cok de benimseniyordu.

Sonra

Simdi ise neredeyse tum bunlari cope attigimiz yeni bir sistem ile karsi karsiyayiz. Dun dagitilan dokumana gore prensipleri asagida yazacagim . Orjinal dokumana buraya tiklayarak ulasabilirsiniz (Ingilizce)


  • Analiz onceden yapilmayacak, ise baslandiginda aninda yapilacak
  • Buyuk is parcalari tanimlandiginda, kucuk bitirilip test edilebilir parcalara bolunecekler
  • Analist, yazilimci, proje sahibi ve testci proje boyunca birarada calisacak
  • Analist maestro gibi calisacak, tikanikliklarin  hizla cozulmesine katki saglayacak
  • Proje sahibi gunluk 5-10 dakikalik hizli durum degerlendirmesi toplantilarina katilacak
  • "Ticket" lar kisa ve hemen halledilebilir boyutlarda olacak
  • "Ticket" lar kabul kriteri kivaminda olacak (onceden yazilan 15 - 20 maddelik kabul kriterlerinin her biri bir "ticket" olacak
  • isler "minimum teslim edilebilir is" olarak degerlendirilecek ve biten her kucuk parca dagitilacak (deploy) (Benim bu konuda ciddi endiselerim var mesela )
  • Hangi "ticket"larin "minimum  teslim edilebilir is" oldugu tespit edilecek ve oncelik sirasina sokulacak
  • Kucuk dagitimlar ile Ana projenin fonsiyonelligi artirilacak
  • Guclu bir iletisim esas olacak
  • Haftalik olarak "ne yapildi ne yapilacak" toplantilari duzenlenecek
  • Oncelik  proje sahibince belirlenecek (teknik oncelik yoksa)
Beklenen Faydalar
  • Proje sahibi isin daha fazla icine girerek isin yuruyusu hakkinda canli bilgi sahibi olabilir
  • Sorunlara ve sorulara cok daha hizli cevaplar uretilecek
  • Degisen ihtiyaclara daha esnek cozum uretilecek
  • Programcilarin yaraticiliginin onu acilacak (is hakkinda fikir uretip tartismasinin onu acilacak)
  • Daha cabuk dagitimlar (deploy) saglanacak
  • Daha kucuk "ticket"lar olacagi icin daha kisa test zamanlari olaacak = daha az hata cikacak
Evet mevzu bu sekilde ozetlendi. 

Bu yaklasima uygun olarak proje tahtalarinin bu sisteme uyumlu hale getirilmesi de dusunuluyor elbet. Eskiden tek bir tahta vardi ve Next Up kolonundan once bir kuyruk ile yapilacak isler siralanirdi. Simdi bir yazilim tahtasi ve buna ticket getiren diger tahtalar su sekilde duzenlendi

Hangi tahtalardan is geldigina bakacak olursak 
1 - Features : yapmak istenilen ama henuz kucuk parcalara bolunmemis isler
2 - Tech : sistem upgrade'leri, database bakimlari vs 
3 - Bugs : hatalar 
4 - Current : bolunmus ve yyapilmaya hazir isler 

Bu sistemde benim birkac yorumum ve cekincem var. Bu konu aslinda biraz da yazilim gelistirme dili ile de ilgili. Yani yukaridaki prensipleri hazirlayan ve pilot uygulamasini yapan ekipler Ruby ile calisiyorlar. Yani kodlar acik halde deploy ediliyor ve interpreter araciligi ile yorumlanip calisiyor. Bu da onlara kucuk parcalarin dagitiminda esneklik sagliyor. Halbuki benim kullandigim yapi .NET ve compile edilerek deploy edildigi icin bu esneklige sahip degilim. (Klasik ASP'nin gozunu seveyim) 

Benim calistigim proje .NET 1.0 da baslayip senelerce bu sekilde devam etmis yani yapi olarak eski ve hantal. TDD ve BDD ile uyumlu degil. yani kucuk, test ve teslim edilebilir  parcalar icin uygun ortami saglamiyor. Projenin .NET uzerinde yeniden yazilmasi zaten konu disi yani yeniden yazilacaksa Ruby'de yazilacak ve bu cok ust duzey bir karar gerektirdiginden bu konuda adim atilamiyor. 

Genel olarak yapklasim bana Turkiye'deki "Ati kosarken nallayalim", "kervan yolda duzulur" yaklasimlarini hatirlatti. Dolayisiyla bence Turkiye bu yaklasima daha yatkin bir ulke. Ne dersiniz ? 
 





17 Ocak 2014 Cuma

Specflow ile .NET uzerinde BDD

Bir muddettir kendi kabugumda kalip surekli uretim yapmak yuzunden herseyden cok geri kalmisim. Simdi acigi kapatma zamani. Cok konu var yakalamam gereken birden tamamen farkli bir ortama bakinca birseyleri anlamak cok da kolay olmuyor. O yuzden gecisi su sekilde planladim.

Once bildigim ortamda ortak olan konulari ogrenmeye calisacagim. Dolayisiyla beynimi once ortama alistirmak icin .NET uzerinde MVC yapisina uyum saglayip, testleri burada yazacagim. Sonra yapiya uyum sagladigimda geriye sadece isletim sistemi ile dil kalmis olacak.

Bu yuzden halihazirda kendim icin yazdigim ama henuz bitirmedigim programi yeni yapilar ile yazmaya karar verdim. Normalde VB.NET kullanmama ragmen C# a da asinayim dogal olarak. Ancak simdiye kadar sadece bakim yaptim yani hic yeni proje gelistirmedim.
git bash

Catiyi su sekilde kuruyorum.
DilC#
OrtamMVC4
Yazilim ortamiVisual Studio 2010
Data baglantisiEntitiy Framework
BDDSpecflow
Unit TestMsTest.2010
Versiyon Kontrolgit ve bitbucket.com

Simdi adim adim ne yaptigima gelince

  • Bende zaten kurulu oldugu icin Visual Studio 2010 kullanacagim
  • www.bitbucket.com da bir hesap actim. (isterseniz github.com dan da acabilirsiniz)
  • git-bash veya git for windows'u indirip kurdum
  • http://www.asp.net/mvc/mvc4 adresinden MVC 4 u indirip kurdum 
    • (Bu arada MVC 5.1 cikti tabi http://www.asp.net/mvc/overview/releases/mvc51-release-notes)
    • Install-Package Microsoft.AspNet.Mvc -Version 5.1.0
  • http://visualstudiogallery.msdn.microsoft.com/9915524d-7fb0-43c3-bb3c-a8a14fbd40ee adresinden specflow'u indirip kurdum.
  • Diskte proje icin bir klasor actim
  • bitbucket'e login olup "create repository" ile bir repo actim
  • Git bash'a girip, Proje klasorune gectim. (cd ile eski usul :)) 
  • sirayla su komutlari calistirdim
  • git init
  • git remote add origin https://username@bitbucket.org/user/repo.git 
  • yukaridaki kirmizi alani kendi  bilgilerinizle degistirin. 
  • Visual Studio acip yeni bir proje actim. Visual C# / Web / ASP.NET MVC 4 Application 'u sectim ve klasor olarak yukaridaki actigim klasoru sectim. 
  • Sonraki ekranda Select a Template bolumunde "Internet Application", View Engine'e "Razor", Create a unit test project bolumune bir isim verdim ve OK'e bastim
  • Razor'u secmemdeki temel etmen internette aradigimda TDD icin uygun olmasiydi
  • Visual studio icinden Tools/Library Package Manager / Package Manager Console  acip icinde "install-Package SpecFlow -ProjectName RM.Specs" yazip enter'a basarak yukledim. RM benim projemin adi bu arada 
  • sirayla sonra sunlari calistirdim
  • Install-Package SpecFlow.NUnit
    Install-Package SpecRun.SpecFlow
  • Test projesinin icinde Features diye bir klasor actim.
  • klasore sag tiklayarak add new item -> SpecFlow Feature File secerek Restaurant diye bir feature ekledim
  • Test projesinin icinde Steps diye bir klasor actim
  • Restaurant.feature dosyasi icinde herhangi birseyi henuz degistirmeden sag tiklayip acilan menude  "Generate Step Definition" i sectim. ve dosyayi Steps klasorune kaydettim
  • test projesindeki App.Config dosyasinda su degisikligi yaptim 
  • <specFlow>
        <!-- <unitTestProvider name="MsTest" /> -->
      <unitTestProvider name="MsTest.2010" /> 
    </specFlow>
  • Restaurant.feature dosyasi acikken visuaal studio'da  sag tiklayip Run Specflow Scenarios u secerek testlerin calismasini sagladim. 
  •  Test'ler Pending durumunda oldugu icin calismadilar ama Specflow Step'leri calisti. Yani bu asamaya kadar hersey dogru. 
Calisma ortamimiz hazir olduguna gore bu haliyle git'e atabilirim.
git bash ile proje klasorunun icindeyken 

git add .
git commit 
(mesajinimizi yaziyoruz) 
git push origin master 

Gelismeleri paylasacagim. 


29 Kasım 2013 Cuma

Kindle

Birseyler ogrenme asamasindayken okunan kitap, web sayfasi  ve dokuman sayisi inanilmaz boyutlarda olabiliyor. Bunlarin bazen bir kismi bazen tamami lazim olurken uzerine not almak, post-it yapistirmak, altini cizmek gerekebiliyor. (Belki de ben ozellikle notlar alarak calisan birisi oldugum icin en azindan). Kitap boyutlari malum bir de uzerine ayni anda birkac konuyu paralel calismak gereken bir doneme girince cantamda laptop'a yer kalmadi. Kitaplar, calisma notlari ve print edilmis web sayfalarindan olusan bir obekle dolasir hale geldim.

Tam bu sirada mailime "kindle fire" in ozel bir indirimde oldugu haberi geldi.  Zaten kindle sahibi birisi olarak faydalarina hakimim. Ama bendeki model roman okumak icin cok ideal. Konu pdf dosyalari ve web sayfalari olunca yetersiz kaliyor. O yuzden bu modelin de siparisini verdim.

Kindle fire bir cesit tablet kivaminda hazirlanmis. kamerasi da olsa neredeyse tablet diyebiliriz hatta. Kendi uzerinde pdf okumak icin bir aplikasyon olmasina ragmen bana gereken ekstra ozellikler icin ez pdf reader aplikasyonunu da indirdim. bu aplikasyon ile istediginiz bolumlerin altini cizmek, sayfa ustune not almak  cok kolay.

Readability aplikasyonunu da indirerek web siteleri ile olan bagimi daha bir saglamlastirdim. Readability once bilgisayarinizdaki web browser'a kuruluyor. Sonra gordugunuz bir web dokumanini sonradan okumak uzere saklamak istediginizde browser'daki ikonuna tiklayip "Read Later"i seciyorsunuz. Program webdeki dokumani e-book olarak okumak icin tekrar formatliyor (ki cogu yerde cok cok basarili) ve arsivine koyuyor. Boylece kindle'da bu aplikasyonu actiginizda dokuman karsinizda neredeyse e-book formatinda sizi bekliyor oluyor.

Bunlarin ustune ES File Explorer kurdum. Bu aplikasyon bilgisayardaki file explorer'i kindle uzerinde kullanmanizi sagliyor. Malum Kindle'da defaul gelen boyle bir aplikasyon yok. Ama ES bambaska bir yonu ile beni buyuledi. Butun cloud disklerinizi uzerine tanimlayip sanki bilgisayarinizdaymiscasina birinden digerine gecisler yapip dosya kopyalayabiliyorsunuz. Skydrive, dropbox, gDrive, Ubuntu 1 gibi cloud drive'lar bu sayede cok kullanisli hale geliyor.

"send to kindle" ile ugrasmadan mesela "Skydrive" uzerine koydugunuz bir kitabi kindle'da direk acabiliyorsunuz.

Bunlarin yanisira "pocket" ile readability'nin benzeri bir yapi kurmak da mumkun.

Hepsi bir araya gelince asagi yukari 100 kitaplik bir referans arsivi, onlarca web sayfasi ve dokumandan olusan bir calisma ortami tek bir cihazda birlesti.

Ekonomik bir cozum olarak fena degil ama sarj suresi tabi ki eski kindle kadar degil ve bir sekilde surekli sarja yakin olmaniz lazim. Eger ekonomi degil rahatlik ariyorum diyorsaniz ipad mini tum bunlardan daha guzel bir cozum de olabilir.