28 Aralık 2016 Çarşamba

Yazılım mühendisliğinin olgunlaşması ve inşaat örneklemi


Yazılım geliştirme süreçlerinin anlaşılması için pek çok yazılı ve resimleştirme yöntemiyle anlatım yapılmıştır. Bunlardan en ünlüsü muhtemelen aşağıdakidir: (İnternette "What customers want" olarak aratınca gelen resim önerileri.)

What custemers want.

Yandaki anlatımda müşteri, proje lideri, mühendis, yazılım mühendisi ve danışmanın rolleri de resmedilmiş oluyor.
Yazılım geliştirme süreçlerindeki ve sonrasında beklenen ürün başarısının neden ortaya koyulamadığını anlatmanın muhtemelen en iyi yolu inşaat mühendisliğinden örnek vermek olsa gerek. Ne de olsa hepimizin ortak en iyi bildiği konu.


Örneklerle gidersek;
30 katlı bir inşaat için proje planı hazırlayan firma 24 ay süre verdiğinde müşteri karşı teklif olarak fiyat ve diğer maliyet konularında tüm pazarlıkları yaptıktan sonra projenin 12 ayda teslimini talep eder.
Genelde de 13 veya 14 ay için anlaşılır.

Bazı yazılım şirketleri atanmış kaynak ayırdığını söylesede aynı kaynağı birden fazla projede kullanma hesabı yaptığı için biraz daha uzun tarih de verebiliyor.

Genelde projelere başlandıktan sonra şu şekilde devam eder:

13. ayın sonunda proje müşteriye eksikleriyle beraber teslim edilir ve bir kaç ay müşteriden ses çıkmaz. Yada 9. ayın sonunda biz hemen satış yapıp katları kullanmak istiyoruz dendiği için proje 10. kat inşa helindeyken kullanıma açılır.

Sonra da örneğin 3. kat'ta düğün salonu yapmak için kolon kesme istekleri gelir.

Sonrasında yeni farkına varılan yada değişen ihtiyaçların projeye eklenmesi istendiğinde artık yukarı çıkılamadığı için ana binanın yanına gece kondular yerleştirilmeye başlanır.

Yukarı çıkılabilen fakat hayal edilenden farklı sonuç için örnek sanatsal çalışma: (Kowloon Walled City'den esinlenilmiştir.)


Image by Nivanh Chanthara

Şehir "anarşi şehri" olarak anılınıyor ve güneş görmeyecek şekilde yapılaşması en belirgin özelliği. Bu özelliğiyle de yazılım projelerinin gün yüzü göremeyecek geleceklerine benzetilebilir.

Kowloon Walled City'den diğer ilham alınabilecek sanatsal çalışmalar.

Mühendislik tekniklerinin olgunluğu

Bazı kaynaklarda yazılım projelerindeki hatalar inşaat projeleri ile örneklendiriliyor. Bunun nedeni yüksek ihtimal inşaat mühendisliğinin 100 yıldan fazla * bir geçmişi olmasına rağmen yazılım mühendisliğinin daha olgunlaşmamış bir 50 yıl ? ** kadar geçmişi vardır.

Bir diğer konuda yazılım projelerinin 1/3'ü batak projedir.***  Yani inşaat projesi olsaydılar yıkılmışlardı. Yada en azından çatlamış ve korkuyla içinde oturulur durumda olurlardı.

Aşağdaki ilgili linkte*** kabaca projelerin ne kadarının başarılı olduğunun yanında projenin kimin gözünde ne kadar başarılı olduğu istatistikleri veriliyor. Burda belkide başarı oranlarından daha önemli olan başarı algısındaki farklılıklar.

Yine yukarıdaki inşaat örneğinden gidecek olursak 30 katlı inşaatı zamanında bitiriyorsunuz ama konut olarak geliştirdiğiniz projede evlerin içinde banyo yapmayı unutuyorsunuz. Bunu başarısızlık olarak kabul etmeyip her kata birer kabin yerleştirerek probleme çözüm önerebiliyorsunuz.
Uygulanabilirliğinin kanıtı olarak da Sovyetler döneminde uygulandığını ve herkesin evi olduğu için çok mutlu olduğunu öne sürebilirsiniz.

İnşaat projeleri yazılım geliştirme projesindeki teknik konuları anlayamayanlar için referans olarak alınabilir. Burada unutulmaması gereken problemdeki her bir gereksinim birer teknik konudur.


* History of construction
** History of software engineering
*** Software development success rates

2 Aralık 2016 Cuma

Sql Server notları

Genel olarak karşılaşılan problemler ve var olan çözümlerde yapılabilecek iyileştirmeler için tutulan notlar.

Connection string için öneriler

http://ardalis.com/3-tips-to-improve-your-connection-strings

Pek çok veri yapısı problemine çözüm önerileri

http://www.databaseanswers.org/data_models/

Çok tablolu bir db de PK tanımlı olmayan tabloların lsitesini almak için:


Amazon DynamoDb notları


DynamoDb ile çalışmaya ihtiyaç duyulma nedeni Berkeley Db ile çalışmanın zorluğundan kaynaklandı.
Berkeley Db dosyalarını taşıma ve erişim sıkıntısından dolayı gerekli olan veriler Json formatında çıktı alındı ve DynamoDb'ye giriş yapılması denendi.

Sonuç olarak bir kaç milyon kaydı maliyet ve makul sürede giriş yapılmasındaki zorluk nedeniyle ertelendi.
Amazon DataPipeline ile tekrar denenecek.

AWS SDK ile DynamoDb erişimi

AWS cli kurulumu: Installing the AWS Command Line Interface
http://docs.aws.amazon.com/cli/latest/userguide/installing.html

Client credential oluşturulması ve geliştirme ortamında tanımlanması:

Get Your AWS Access Key ID and Secret Key
http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SampleData.BeforeYouBegin.html#SampleData.BeforeYouBegin.SetupCLI
Set up AWS Credentials for Development
http://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html
Configuring the AWS Command Line Interface
http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html


DynamoDb'ye Bulk veri girişi


16 Eylül 2016 Cuma

Web siteniz için ücretsiz SSL kurulumu

Eğer web sitenizde e-ticaret işi yapmıyorsanız, yani ödeme almak gibi bir süreciniz yoksa domain sahipliğinizi garantileyen SSL sertifika süreçlerine girmek ve yüksek ücretler ödemek gerekmiyor.

Bu durumda çoğu zaman siteniz için SSL sertifikasına şu nedenlerle kurmak isteyebilirsiniz:
-Kullanıcıların güvenli şekilde oturum açmasını sağlamak
-facebook, twitter gibi Open Authantication sağlayacılar aracıyla üyelik girişini sağlamak
-Google tarafından yapılan açıklamaya istinaden, SEO açısından daha iyi bir skora sahip olmak.

Dolayısıyla ücretsiz sertifikalar web sunucunuz ile browser arasındaki iletişimin güvenli olmasını sağlamak için yeterlidir ve üstteki ihtiyaçları karşılar. En azından diğer koşullardan bağımsız olarak şifrelenmiş iletişim için gereklidir.

Şu an ücretsiz SSL sertifikası sağlayıcılarından "Let’s Encrypt" en çok tercih edileni:
https://letsencrypt.org/  (3 ayda bir yenilemeli)
http://certify.webprofusion.com/ (Windows için sertifika yönetimi aracı)
Linux üzerinde kurulumu
https://dzone.com/articles/how-to-install-free-ssl-easily-for-your-website
Windows üzerinde Certify aracı ile letsencrypt ssl kurulum anlatımı (IIS üzerine)
https://weblog.west-wind.com/posts/2016/Jul/09/Moving-to-Lets-Encrypt-SSL-Certificates


20 Ağustos 2016 Cumartesi

ASUS ux32vd ultrabook ve CPU hız problemi

Uzun araştırmalar sonucunda aldığım asus ux32vd ultrabook yaklaşık 3 yılını doldurdu
ve genel olarak bekleneni veremedi. Büyük bir hayal kırıklığı olmadıysada fiyatına göre hüsran sayılabilir.
Okuduğum kaynaklara göre 6GB rami üzerindeki 4GB, 8GB ile değişerek 10GB ye çıkartılabiliyordu.
Yine mevcut sistemle genel manyetik harddisk, SSD ile değiştirince iyi bir performans vaadediyordu.
Hatta bir geliştirici için bile...

13.3 inc ekranı ve karınca duası görünen yazıları saymazsak beklentim yüksekti.
SSD ve RAM değişikliğinden sonra doğal olarak performansta iyi bir artış olmasına rağmen yaklaşlık bir yıldır her gün makinayi yeniden başlatma ihtiyacı duyuyordum. Nedeni olarak da SSD nin zayıfladığı düşüncesi hakimdi bende.
Her ne kadar bunu Performance Monitoring üzerindeki SSD alanında yoğunluk olarak görmesem de...

Bir kaç hafta önce "Task Manager" CPU/Speed alanın uzun takiplerim sonucunda, önce 1.90 GHz değerinde açılıp rastgele bir zaman sonra 0.96 GHz değerine düştüğünü ve tekrar yukarı çıkamadığı farkettim.



İlk okuduğum kaynaklar Intel'in SpeedStep teknolojisinden kaynaklı olduğunu yazıyordu.
SpeedStep'in yapmaya çalıştığı düşük frekansta çalışan CPU'nun ihtiyaca göre hızlı çalışmasını sağlamak. Fikir olarak güzel...

Önerilen şey BIOS'dan bu özelliği iptal etmek. Problem BIOS'da böyle bir tanım yok.

Konuyu araştırmaya devam edince asus ve diğer bazı markalarda kullanıcıların Windows 10 geçişinden sonra bunu yaşamaya başladığını farkettim. Aslında problemi hissetmeye başladığım zaman ve benim de Win 10 geçişini yaptığım zaman tahmini olarak aynı. Dolasıyla problemin nedeni Windows 10 geçişi.


Asp.Net Core Web Uygulamasında geliştirme ve canlı ortam tanımları

Bir çok blog yazısında .Net/Asp.Net Core ile birlikte gelen "App Secrets" aracının nasıl kullanılacağı ile ilgili bilgi olmasına rağmen canlı ortamda tavsiye edilen "Environment Variables" kullanımın nasıl gerçekleştirileceği ile ilgili bilgi yok.

App Secrets / User Secrets ile ilgili genel bilgi.
https://docs.asp.net/en/latest/security/app-secrets.html


Çözümün doğuş nedeni:

Bu yöntemin kullanılmasının tavsiye nedeni çoğunlukla şifre gibi önemli bilgilerin appsettings.json da (önceden web.config) unutulması, dolayısıyla "Source control" ortamına yapılan "Check-in" işlemlerinde bu bilgilerle birlikte gitmesi. İnternete açık değilse çok büyük bir problem değil gibi düşünülebilir.

Bir diğer nedeni de geliştirme veya test ortamından canlı ortama yapılan aktarımlarda appsetttings.json dosyayının ezilmemesini sağlama yada canlı ortama göre şifre vs. gibi tanımları tekrar yapma gerekliliği.

Dolayısıyla önerilen yöntem şifre gibi ortama göre değişecek diğer bilgileri yapılan Deployment/Publish işleminden ayrıştırmaya yarıyor.

Bu da geliştirme ortamı için "App Secrets" ve canlı ortam için "Ortam Değişkenleri" kullanımı.
Sunucuya erişimi olanlarında şifreleri görmemesi isteniyorsa, bunun için de  farklı yöntemler vardır.


Uyumun sağlanması


appsettings.json dosyası:


secrets.json dosyası:




11 Mart 2016 Cuma

IIS Express 32bit modu ve StackSize (maxStackSize) yetersizliği çözümü

Asp.Net üzerinde geliştirilen bir uygulamada StackOverflow hatası alındığında muhtemelen bir array için yüksek bir değer baştan tanımlanmıştır. Yada herhangi bir şekilde (muhtemelen gerekmediği halde) büyük miktarda bellek kullanımına sebep olabilecek bir tanım yapılması.
Alternatif bir örnek büyük bir text dosyayı stream olarak okumak yerine tek seferde belleğe alınmaya çalışılması...

Hatayı dışardan bir sınıf kullandığınızda alıyorsanız ve başkaları bu hatayı almıyorsa oluşacak hatalardan biri StackSize ile ilgili olabilir. Yani dışardan çağırdığınız sınıfın bellek kullanımı ile ilgili.

Son tecrübemde Java üzerinde geliştirilmiş bir sınıfın IKvm ile .Net'e port edilmiş halini Console uygulamasında hatasız çalışırken Visual Studio'da Asp.net projesi olarak çalıştırmayı denediğimde hata oluşuyordu. (StackTrace kaybolduğundan hata StackOverflow olarak orataya çıkmıyordu.)

Hatayı araştırdığımda iki alternatif öneri vardı:

1. İlgili sınıfı yeni bir thread açıp MaxStackSize belirtip orda çalıştırmak.
2. Visual Studio ile gelen IIS Express'i kullanmak yerine Servis olarak kurulan IIS'i kullanmak.

İlgili sınıfı yeni bir thread için de aşağıdaki şekilde çalıştırabiliriz;

  Thread thread = new Thread(MyMethod, 1048576);
  t.Start();

  void MyMethod()
        {
              //Çağrılan sınıf / method
        }


2 Ocak 2016 Cumartesi

SEO ajanslarının taksitle sattığı ücretsiz bilgiler

Yaklaşık son 5 yıldır yayıncılık özelinde yaptığım çalışmalardan dolayı SEO konusuyla teknik nedenlerle doğrudan, iş yapma şeklinden dolayı ise dolaylı olarak ilgilenmem gerekti.
Bu süre zarfında onlarca toplantıda SEO ile ilgili tartışmalarda bulundum, yine onlarca toplantıda gündem maddesi sadece SEO idi. Bu tecrübelerin yanında yaklaşık 5 yıllık içerik siteleri çalışmalarım, piyasada en iyiler diye bilinen 3 SEO konusunda danışmanlık satan firmalar ile birebir çalışma ve diğerlerinden alınan teklifler de var.

Teknik bir meslek seçme nedenim yapılan işin sonucunda başarıyı doğrudan görebilmeniz. Fakat mesleğimin faaliyet gösterdiği farklı alanlardan biri olan internet yayıncılığı SEO konusu içeriği itibariyle tartışmalı ve göreceli fikirlere sahne oldu.

Bu tecrübelerin ışığında aynı hataların tekrarlanmaması / azalması adına tecrübelerim kayıtlara geçsin istedim.

Bu yazının içerdiği konular:
  1. SEO hakkında ön bilgi
  2. Google'a göre SEO ne demektir ?
  3. SEO yapmak denince ne anlamalıyız ?
  4. Hangi durumlarda SEO çalışması yapmak gerekir ?
  5. SEO çalışması için nasıl bir ekip gerekli ve hangi süreçler takip edilmeli ?
  6. SEO ajansına / danışmanına ihtiyacanız var mı ?
  7. SEO ajansları / danışmanları ne iş yapar ?
  8. SEO çalışmasında kültürel etkiler : Çözüme giden yolda önyargı ve bilgisizliği yıkmak
  9. Diğer önemli kaynaklardan seo tanım ve anlatımları
  10. Arama motorlarına alternatif trafik kaynakları
  11. Ölçüm ve önemi

Bu yazıda anlatılan konuların devamı olarak teknik ve içerik ile ilgili bilgi tavsiyeleri içeren 2 ayrı yazı daha ilgili linklerde bulunabilir.

SEO Çalışmasında teknik konular

SEO çalışmasında içerik ile ilgili dikkat edilmesi gerekenler