Murat Uysal

girişimci / matematik mühendisi / yazılım uzmanı / hislerim ve deneyimlerimden yazılar

Yazılarım hakkında yeni bir başlangıç


Herkese merhabalar,

Bu blogu açarken hedefim yazılımsal deneyimlerimi paylaşmak idi. Bu noktada çok fazla istediğimi başaramadığım aşikar. Sebebini düşündüğümde ise sanırım biraz sıkıcı geldiği için. Çünkü blog yazılarımı zaten saatlerce mesai harcadığım konularda yapmak çok heyecan verici değil. 

O nedenle artık bu blog sayfamı her konuda deneyim düşünce ve yorumlarımı paylaşağım bir sayfa haline getirmeye karar verdim. Sizlerle paylaşmayı düşündüğüm şeylerden şimdlik aklıma gelenler mesela şu şekilde.

- İzmirde gezilecek görülecek yerler ile alakalı düşünce ve yorumlarıma yer vermek istiyorum.
- VR video teknolojileri ile alakalı içerikler oluşturmayı planlıyorum.
- Özel matematik dersi deneyimlerimi video dersler çekerek birçok öğrencinin de faydalanması için youtube kanalımdan yayınlamayı hedefliyorum.
- İnternet siteleri ve mobil uygulamalar ile ilgili yorum veya inceleme yazıları yazmak istiyorum.
- Aklıma gelen ama bir türlü yapabilmek fırsat olmayan herkes gibi benim de orjinal olduğuna inandığım fikirlerimi sizlerle paylaşmak istiyorum.

Gördüğünüz üzere artık çok daha renkli bir blog haline gelecek. 

Bu hedeflerim doğrultusunda da ilk çalışmamı yarın gidecek olduğum izmirin karagöl piknik alanı ile ilgili paylaşımlarımı ve yorumlarımı burada bulabileceksiniz.

Umarım daha faydalı olabilirim.
 

Alan adı uzantısının seo etkisi var mıdır?


Seo çok dinamik bir alan. Google her algoritma değişikliğinden sonra buna adapte olmak gerekiyor. Önceden varolan kriterler artık neredeyse etkisiz. Çok daha akıllı bir hale gelen Google algoritmasıyla ilgili detaylı döküman bulabileceğiniz siteler mevcut.

Benim bahsedeceğim konu ise alan adı uzantısının seo'ya olan etkisi üzerine. Bu konuda bir araştırma yapmıştım ancak araştırma yaptığım dönemde ulaştığım kaynaklar birbirinden farklı görüşlere sahiplerdi. Kimisi etkisi yok içerik kalitesi önemli diyor, kimisi de çok önemli olduğunu iddia ediyordu.

Bu noktada bende bir domain uzantısı ve benim özellikle sevdiğim .PW uzantısı üzerinden bir deneme yapmaya karar verdim.

(Bu fikir çıktığında .pw uzantısında birçok jenerik alan adı alınmadığın fark edip aldığımı da itiraf edeyim, belki ileride değerlenir ümidi ile :) )

Test ettiğim alan adları ilan.pw ve teknikservis.pw. Bu alan adlarını ilan sitesi yapmak üzere almıştım ve sehrinden.com için geliştirdiğim projelerin birer özelleşmiş şeklini bu sitelere kurdum.

Kurulum sonrasında tabiki ilk işim google analytics entegrasyonunu yapmaktı. Entegrasyonu yapıp webmaster tools ile de ilgili bağlantıyı sağladıktan sonra her site için gelen, arama motoru optimizasyonunu iyileştirmek için önerileri bulunan e-posta geldi. E-posta içeriği şu şekilde.


Bu e-postadaki en önemli şoku yaşadığım nokta ve sanırım .pw domain uzantısının gelişmesinin önündeki engeli görmüş oldum.  Normalde bir alan adı yayına başlayıp bu şekilde analytics ekranlarını düzenlerken aşağıdaki ekranda ülke seçimi yapabiliyor olmamız gerekiyor. Bu seçimin amacı şu. Bu site bu ülkedeki kullanıcıları hedefliyor demek. Aşağıdaki ekranda görüldüğü gibi bu seçime izin bile vermeden "Palau" seçili durumda gelmiş ve değişiklik izni yok. 

Bu noktada bir araştırma yapıp bunu ayarlamanın bir yolunu bulmaya çalıştım ama sonuç vermedi ve araştırmamın sonuç vermeyeceğinin kanıtı da yine google tarafından yapılan aşağıdaki açıklamada görmüş oldum. Aşağıdaki sayfayı inceleyebilirsiniz. Sayfadaki açıklama şu şekilde.

"Genel üst düzey alanlar (gTLD) belirli ülkeleri hedeflemez. Sitenizin alanı genel bir üst düzey alansa (örneğin, .com, .org veya aşağıdakilerden biri) ve belirli bir coğrafi bölgedeki kullanıcıları hedefliyorsa, bize sitenizin arama sonuçlarımızda nasıl görüneceğini belirlememize yardımcı olacak bilgiler sağlayabilirsiniz. URL'leri coğrafi olarak hedefleme konusunda daha fazla bilgi edinin.

Google, aşağıdakileri Search Console'da coğrafi olarak hedeflenebilecek gTLD'ler olarak işler."

Bu açıklamanın söylediği gTLD alan adınız ile hedeflenecek ülkeyi belirleyebilirsiniz. Ama google şunu da zamanla kabul etmiş ve aşağıdaki ek açıklamayı eklemiş.

"Google, bazı ccTLD'leri (.tv, .me gibi) gTLD olarak işler. Bunun nedeni, kullanıcıların ve web yöneticilerinin bunları ülkeye yönelik olmaktan çok genel olarak gördüğünü belirlememizdir. Aşağıda söz konusu ccTLD'lerin listesi verilmiştir (bu listenin zaman içinde değişebileceğini unutmayın)."

Yukarıdaki açıklama da normalde bir ülke ile bağlantılı ortaya çıkan ama zaman içinde genel kullanımda sembolik hale gelip kabul görmüş uzantıları kapsıyor. Ve işin en acı tarafı hala .PW bu listede değil :)


Aslında PW : Profesyonel Web kısaltması bir uzantı olduğu belirtilmişti her yerde. Eğer böyle ise google bu uzantıyı da ayrıcalıklı uzantılar listesine alacaktır. Ancak böyle değilse bu uzantı ile seo konusunda ciddi anlamda zorluk yaşanılacağını bizzat test ederek gördüm.

Örneğin teknikservis.pw sitesi halen sadece tek bir sayfası indekslenmiş durumda. Hiçbir alt kategori ve içerik indeks yapılmamış. Bugüne kadar hiçbir projem bu şekilde olmamıştı. Ülke hedeflemesi ciddi anlamda önemli bir konu ve google bu konuyu düzenlemezse .pw alan adı ile seo yolculuğunda zor bir hedef olduğunu söylemeliyim. Ama yine de nedense ben bu uzantının ileride işe yarayacağın düşünerek güzel bazı isimlere yatırım yaptığımı söylemeliyim ;)



Extreme Programming ve Önemli Bazı Yöntemler


Her ne kadar yazılım geliştirme yöntemlerinin isimlerini projeye başlamadan önce sık sık kullanarak plan yapılsa da işler bir noktaya geldiğinde artık yöntemler sorgulanamaz hale gelmektedir. Amaç günü kurtarmak olduysa da artık yazılımın kalitesini sorgulamak kimsenin bir derdi olmaz. Müşteriden gelen negatif feeback'ler giderildiğinde ekip görevini yapmış sayılmaya başlar.

Elbette böyle bir durumu asla istemiyoruz. Hedefimiz daima tercih ettiğimiz geliştirme yöntemlerine bağlı kalmak, ve her aşamada projenin sağlıklı şekilde ilerlemesini sağlamaktır. Ama gerçek dünya tüm işleri planladığınız şekilde gitmesi için çok uygun değil, sürekli değişim içinde. Buna adapte olmaya çalışan yazılım ekiplerinin işleri gerçekten zor ve bu nedenle yazılım geliştirme yöntemleri konusunda standartlaşmaya ihtiyaç duyulmuştur.

Extreme programing şeklinde bir yöntem çıkmadan önce yazılımcıların kullanmaya başladığı ve fayda gördüğü metotlar gelişmişti. Bu metotların birbiriyle birlikte kullanımı ile daha büyük başarı elde edilmesi sonucu da bu yöntemlerin tümüne bir isim belirlendi ve Extreme Programing doğmuş oldu.

Bu metotta birçok yöntem var ancak en önemlileri üzerinde biraz durmak istiyorum.

- Kod Kontrolü

Ekipte birçok bilgi seviyesinde yazılım uzmanı görev almaktadır. Bu durumda da her ekip üyesinin yazdığı kod aynı kalitede olması imkansızdır. Aynı olmasa bile ortalama bir kaliteyi sağlamak gerekir. Bunun amacı okunabilirliği yüksek ve esnekliğini kaybetmeyen bir yazılıma ulaşmaktır. Bu nedenle daima her yazılan kodu ikinci bir göz kontrol etmesi ileride işleri kilitlenir noktaya getirmemek için çok değerlidir.

- Bilgi Akışı

Ekipte herkes aynı bilgi düzeyinde olmaması kabul edilebilir bir durum elbette. Ancak bu durum daha iyi seviyedeki uzmanların bir alt seviyedeki ekip üyelerini bilgi düzeyini arttırıcı iletişim ağı olmalı. Bu aynı zamanda işten ayrılmak zorunda kalan bir ekip üyesi olması halinde de hayat kurtaracak bir gerekliliktir.
 
- Açık ve Korkusuz Ekip Ruhu

Açık sözlü bir ekip daima en iyisidir. Eğer işler kötü gidiyorsa kimsenin rol yapmasına gerek yoktur. Çünkü en nihayetinde olacak olan olacaktır. Bu nedenle öz düşüncelerin rahatça söylenebileceği ve makul değerlendirmeler sonucu kurtarıcı rol oynayacak kararlar alınmasını sağlayabilir. Ekip üzerinde korku ve endişe yerine takım ruhu kazandırılmalıdır.

- Kısa Süreli Versiyonlama

Geliştirilmekte olan yazılım iyi analiz edilmiş olmalı ve küçük parçalara ayrılarak çözümler geliştirilmelidir. Her küçük çözüm uygulandığında uygulama subversion üzerinde commit edilmelidir. Bu sayede uzun süren geliştirmeler sonrası büyük bir update sonucu oluşabilecek sorunlara karşın küçük geliştirmeler sonucu çıkan problemleri gidermek çok daha kolay olacaktır.

- Farkındalık

Projelerde hedeflenen uygulamayı her ekip üyesi net olarak bilmelidir. Bu farkındalığı oluşturmak için proje başlamadan önce ekiple görsel öğelerle hedef uygulamayı izah eden etkileşimli bir sunum yapılmalıdır. Soru cevap bölümü ile oluşan soru işaretleri giderilmelidir. Bunun en büyük faydası planlama aşamasında atanan bir görevin daha etkili ve verimli bir yönü varsa programcı bunu hedef uygulamayı bildiği için bunu tercih edebilme özgürlüğüne sahip olacaktır. Kaliteli bir yazılım olması için bu gerçekten yadsınamaz bir gerekliliktir. Ekibe yeni katılan kişiler de aynı şekilde detaylıca bilgi verilmesi gereken kişilerdir. Ve mümkünse yeni katılan kişi her ne kadar işinde iyi olsa bile en az 2 hafta kod yazımına başlamaması ve bu süre içinde ekibin uyduğu geliştirme standartlarına uyabilmesi için eğitim alabilmesi gerekir.


Benim en önem verdiğim yöntemleri ifade etmeye çalıştım. Tabi ki daha birçok faydalı yöntem var ancak bu yöntemler en çok ihmal edilen veya yapılmadığında en büyük zarara sebep olanlardır. Her ne kadar harfiyen uymanın imkansızlığını biliyor olsak bile ekip olarak bu yöntemlere bağlı kalma mücadelesi verilmelidir. 

Günü kurtaran değil, değerli kod yazan programcılar olmamız dileğiyle.

Felsefem;
Basit Düşün, Çözüm Üret, 
Yazılıma Değil, Çözüme Odaklan...



NopCommerce Plugin Yapısı Hakkında


NopCommerce üzerinde plugin yapısı çok başarılı şekilde kurgulanmış bir modelleme. Sözü hiç uzatmadan nopCommerce ile ilgili bu yapıyı çok detaya girmeden bir plugin geliştirmek için yapılması gerekenleri özetlemeye çalışacağım.

Öncelikle nopCommerce InstalledPlugins.txt dosyasına sahiptir. Bu dosya App_Data klasörü altında yer almaktadır. Bu dosya içerisinde sistemde yüklü olan pluginler listesi yer alır ve uygulama start aldığında ilgili dosya üzerinde yazılı olan plugin sınıf isimlerine göre dinamik olarak uygulamaya dahil edilir. 

Yeni bir plugin oluşturmak için öncelikle varolan bir plugini kopyalamanız işinizi kolaylaştıracaktır. Bu kopyaladığını plugin üzerinde namespace isimlerini çok dikkatli şekilde oluşturmak istediğiniz namespaces ismine replace etmenizdir.

Bu namespace isimleri düzenlendikten derlediğinizde /Plugins/BenimPluginlerim.OrnekPlugin şeklinde bir klasör altında dll ler oluşturulmuş olacaktır. 

DLL oluşturulduktan sonra halen uygulamanız üzerinde plugin aktif olmayacaktır. Çünkü InstalledPlugins.txt klasöründe yer almadığı için ilgili plugin NotInstalled olarak yönetim panelinde yer alıyor olacaktır. İsterseniz namespace bilgisini installedPlugins.txt klasörüne ekleyebilirsiniz veya yönetin panelinden plugins bölümünden eklediğiniz not installed konumdaki dll i install edebilirsiniz. Her iki durumda da plugin çalışır hale gelecektir.

Uyarı: Eğer plugin içerisinde install() metodu içerisinde db de tablo oluşturma veya plugin ile ilgili dil desteği kaynak kelimeleri de ekleniyorsa yönetim panelinden install yapılması gerekir. Aksi takdirde manuel olarak plugin yüklemesi yapılırsa bu kodlar çalışmayacağı için plugin için gerekli hazırlıklar eksik kalacağı için sorun çıkacaktır.

Eğer her şeyin yolunda olduğundan emin iseniz plugin'i deploy etmek için sadece ve sadece /Plugins/BenimPluginlerim.OrnekPlugin içerisindeki dosyaları sunucunuz üzerinde aynı uzantı altında eklenmesi gerekir. Bu eklenen dosyalar sonrası yönetim panelinden plugin i install etmeniz yeterli olacaktır.

Dikkat: Pluginin oluşturulduğu klasör içerisinde plugine özel dll ler eklendiğinde ilgili dll ler plugin klasörü içerisinde oluşturuluyor. Bu dll ler aynı zamanda Nop.Web içerisinde kullanılan bir dll de olabilmektedir. Bu nedenle plugin klasörü altındaki dll lerin iki kez yer alması yani hem ana /bin klasörü içerisinde hem de plugin klasörü içerisinde olması başta sorun çıkarmayabilse bile ileride ciddi sıkıntıların kaynağı olabilir. 


Teşekkürler iyi çalışmalar.




SQL Server performans iyileştirme püf noktaları

Merhabalar

Aslında sql server performans konusu çok düşünülmeden uygulamalar yayına alınır ancak kritik ve yoğun uygulamalarda küçük değişikliklerin büyük faydalar sağlaması mümkündür. SQL server ile ilgili okuduğum kaynaklardan küçük bir dikkat ile büyük fayda sağlayabilecek aşağıdaki 3 adet tespiti sizlerle paylaşmayı istiyorum. Faydalı olması dileğiyle. 


1-) Eğer kullananılacak veritabanı sadece TCP üzerinden bağlantı kurularak erişilecek ise shared bağlantı desteği disabled yapılması performans için faydalıdır. Eğer bu yapılmaz ise SQL server her bağlantı yapılacağında ilk olarak local bağntı geldiğini varsayıp işlem yapacak sonra TCP olduğunu anlayıp asıl istediğiniz işlemi yapacaktır. Bu da her sorgunuzun daha geç cevaplanmasına sebep olacaktır.

2-) Veritabanından çekilecek sorgularda genellikle SELECT* FROM TABLO_ADI şeklinde kullanılır. Ancak * karakterinin kullanımı performansın önemli olduğu uygulamalarda kullanılmaması faydalı olacaktır. Çünkü * karakteri karşılığında sql server öncelikle ilgili tablonun kaç stünü olduğunu sonra da bu stünların isimlerinin neler olduğunu öğrenip sorguyu kendisi oluşturmakta ve çalıştırmaktadır. Daima gerektiği kadar bilgiyi sorgulamak faydalıdır. SELECT AD,SOYAD from TABLO_ADI şeklinde sorgular ile gerektiği kadar bilgi almak en doğrusu ve performansı en yükseğidir.

3-) Veritabanının FILEGROWTH özelliğini belirlemek stratejik karardır. Bir veritabanına bir kaynaktan veri alarak başlatacağınız belli ve örneğin bu verinin boyutu veritabanı için 100MB a kadar çıkmasını sağlayacak ise veritabanı default ayarlar ile oluşturulmuş veritabanı 100MB ulaşmak için 30 kez alan büyütme işlemi yapmak zorunda kalacaktır. Eğer böyle bir durum belli ise veritabanının başlangıç alanını 100MB ile başlatmak ve gelecek olan veri yoğunluğuna göre veritabanının çok fazla genişleme işlemi yapmasına gerek kalmayacak şekilde büyüme oranı verilmesi yerinde olacaktır. Çünkü veritabanının alan arttırma işlemi performans konusunda ciddi maliyetleri olan bir işlemdir.



LessCss Dinamik Olarak IIS üzerinde kullanımı

Öncelikle LessCss'i indiriyoruz. aşağıdaki resimde görülen linke tıklayıp LessCss son versiyonu indiriyoruz.
Ben dosyayı "less.js" olarak kayıt ettim.

Daha sonra html sayfamı hazırlıyorum. Aşağıdaki sayfada öncelikle still.less i sonra ise less.js dosyalarını sayfaya ekliyorum


Artık stil.less dosyamızda less css kodlarımızı yazabiliriz.


Yukarıdaki yapıyı hazırladıktan sonra dosyalarımızın görünümü şu şekilde oluyor.

Bu dosyaları site üzerine yükledim ancak çalışmadığını görüyoruz.

İşte bu noktada sebebini öğrenmek isterseniz zaten size tarayıcının konsol ekranı yardımcı oluyor. Aşağıdaki ekranda ilgili dosya sunucuya yüklemiş olmasına rağmen .less uzantısının olmadığını söylüyor.

Bu hatanın sebebi IIS üzerinde mime type olarak .less uzantısının tanımlanmamasıdır.İlgili adrese gittiğinizde o dosya hiç yokmuş gibi 404 hatası verecektir.


Mime type iis yönetim arayüzünün ana sayfasında "Mime Types" şeklinde bir menü var. Bu menüden açılan ekranda sağ bölümdeki Add butonu ile aşağıdaki şekilde ekliyoruz.


Tanımladığımız anda az önce 404 hatası veren sayfada aşağıdaki gibi artık içeriğini görebilir durumdayız.


Ve artık aşağıdaki gibi html sayfamıza gittiğinizde stil.less dosyamızın çalıştığını görebiliyoruz.




Bu şekilde projenizde lessCss i dinamik olarak kullanabilirsiniz. 

Not: Performans gerektiren uygulamalarda getirdiği yük test edilmelidir. Sonuçta ilgili less.js dosyası 100KB boyutundadır ve her tarayıcı isteğinde ilgili stil.less dosyasından gerçek css kodlarına geçişin sağlanması nedeniyle statik bir css dosyasından daha yavaş çalışacaktır.

Örnekte kullandığım dosyaları aşağıdaki linkten indirebilirsiniz.
lessCss.rar (30,8KB)

iyi çalışmalar.