11 Ocak 2018 Perşembe
Azure App Service üzerinde problem çözümü
Farklı katmanlarda hatalar oluşabilmekte. Bunlar;
1-Uygulamanın kendisi:
"object reference not set" hatasından "An error occurred while sending the request." hatasına kadar çeşitli hatalar oluşabilmekte.
Tabi bir de StackOverflowException hatasını unutmamalı. https://blogs.msdn.microsoft.com/spike/2011/11/04/how-to-create-a-stackoverflowexception-and-how-to-figure-out-where-it-is-happening/
2-Uygulamanın üzerinde çalıştığı ortam:
Yani .Net Framework / .Net Core. Uygulamanın geliştirildiği ortam ve çalışma ortamı (production) arasındaki farklılıklardan kaynaklanabilir.
Kendilerini "Unhandled Exception: System.TypeInitializationException: The type initializer for 'System.Diagnostics.DiagnosticListener' threw an exception." hatası olarak belli ederler.
Yani uygulama çalışırken değil daha en baştan (Program.Main(String[] args)) uygulamanın başlamasına engel olurlar.
Bu bazen uygulama doğru version üzerinde çalışıyor olsa bile ortaya çıkabilir. Azure örneğinde "App Service" uygulamasına eklenen bir extension ile uyumsuzluk da sebep olabilir.
Örneğin: Application Insight 2.4.7 https://stackoverflow.com/questions/47411101/could-not-load-type-system-diagnostics-productionbreakpointsstub-error-in-app-d?rq=1
27 Kasım 2017 Pazartesi
Sql Server T-Sql Notları
Sql query'leri tabify (formatlı) yapmak için:
http://www.dpriver.com/pp/sqlformat.htm-String üzerinden hash üretme
HashBytes('MD5', [Sentence]) as hash > varbinary to string ?
select cast(@b as varchar(max)) - olmadı
SELECT CONVERT(VARCHAR(1000), varbinary_value, 1);
-Sayfalama
FROM [TableX]
Order by Id --(mecburi)
OFFSET (500000) ROWS FETCH NEXT (10000) ROWS ONLY
-String içerikte tümü büyük harf olanları bulma
select top 1000 * from [Table]
where Text COLLATE Latin1_General_CS_AI = Upper(Text)
-Bir kelimenin text de kaç defa geçtiğini bulmak
SELECT CHARINDEX ( 'TEST',
'This is a Test'
COLLATE Latin1_General_CS_AS);
https://www.dbrnd.com/2016/02/sql-server-tsql-script-to-find-count-the-number-of-occurrences-of-a-string/
http://dataeducation.com/counting-occurrences-of-a-substring-within-a-string/
-ESCAPE
WHERE LargePhotoFileName LIKE '%greena_%' ESCAPE 'a' ;
Using WHERE with LIKE and ESCAPE syntax
and uses the ESCAPE option because is a wildcard character. Without specifying the ESCAPE option, the query would search for any description values that contain the word green followed by any single character other than the character.
String Functions
https://docs.microsoft.com/en-us/sql/t-sql/functions/string-functions-transact-sql
20 Ağustos 2017 Pazar
İstemciye göre ASP.Net MVC Core yanıt formatı için Global Filter uygulaması
2008 Yılında Microsoft ASP.Net MVC Framework'ü yayınladığında fikir veya çözüm olarak ilk kez ortaya çıkmış olmasa da yaygınlaşmasına ön ayak olmuştur.
Bu sayede yazılım geliştirme yapanlar için bazı temel değerler de yaygınlaşmaya başladı.
Bunlardan bazıları "seperation of corserns" ve "decoupling". Yani geliştirilen çözümün parçalarını birbirinden soyutlayarak farklı alanlarda fayda sağlama.
Bu sayede yazılım geliştirme yapanlar için bazı temel değerler de yaygınlaşmaya başladı.
Bunlardan bazıları "seperation of corserns" ve "decoupling". Yani geliştirilen çözümün parçalarını birbirinden soyutlayarak farklı alanlarda fayda sağlama.
Sql Server Full Text Search Oluşturma ve kullanım
Index oluşturma ve tanım aşamaları
Burada ftCatalog, Index'e verilen isim:
CREATE FULLTEXT CATALOG ftCatalog AS DEFAULT;
Tablonun bir Primary Key index'i olmalı:
-SalesLT schema. Default dbo olarak alınabilir. ProductDescription ise Tablo adı.
CREATE FULLTEXT INDEX ON SalesLT.ProductDescription(Description) KEY INDEX ui_ukProductDescription ON ftCatalog;Var olan veriden Full text index oluşturmak için:
ALTER FULLTEXT INDEX ON SalesLT.ProductDescription ENABLE; GO ALTER FULLTEXT INDEX ON SalesLT.ProductDescription START FULL POPULATION;
1 Ağustos 2017 Salı
Azure üzerinde "Continuous Delivery" tanımları ve anahtar noktalar
Visual Studio ile geliştirilen projeyi Azure üzerinde yayına almak için yeni bir "Publish Profile" oluşturulabilir ve sonradan istenildiği anda geliştirmeler bu tanım üzerinden doğrudan yayına alınabilir:
https://docs.microsoft.com/en-us/aspnet/core/tutorials/publish-to-azure-webapp-using-vs
Projeyi yayına almak için diğer alternatif yöntemler:
https://docs.microsoft.com/en-us/azure/app-service-web/web-sites-deploy
Genel olarak .Net Core ile geliştirilen projelerde hem Azure üzerinden hem VSTS üzerinden standart şablonlar ile CI/CD tanımlarını yapmak problemli. (Temmuz 2017 itibariyle).
Dolasıyla hem entegrasyonu çalışır hale getirmek hemde ihtiyaçları karşılaması amacıyla oluşturulan şablonları düzenlemek gerekiyor.
Azure CLI
Azure portal'e giriş yapmadan https://shell.azure.com ya da Azure CLI tools kullararak alttaki komutlarda slot swap işlemi gerçekleştirilebilirazure site -h > To list the commands available for Azure App Service in the Azure CLI
azure site list
azure site list lingo-member > will list lingo-member and lingo-member-staging
azure site swap lingo-member > Swap slot "staging" from site "lingo-member" with slot "production" ? [y/n]
---cli swap
az webapp deployment slot swap -g lingo-live -n lingo-member -s staging
---log download
az webapp log download -n lingo-parse -g lingo-live
Geliştirme ortamından yayına alma süreci
Kalitenin korunması başta olmak üzere diğer nedenlerle birlikte önerilen yöntem otomasyon sürecinin oluşturulması.
Geliştirme ortamından yayına alma sürecinde yaşanabilecek olumsuzluklar:
Problemler
Geliştirme ortamından Azure ortamında aktarım yaparken karşılaşılabilecek hatalardan biri;24 Temmuz 2017 Pazartesi
Hyper-V üzerinde Ubuntu kurulumu ve düşündürdükleri
VMWare ya da Virtual Box ile sanal Linux kurulumu genellikle problemsiz olmakta.
Hatta buradan çalıştırılmaya hazır sanal Linux kurulumları indirilebilir: http://www.osboxes.org/
Hyper-v üzerinde dikkat edilmesi gerekenler:
Aşağıdaki adımlar Lubuntu 17.04 64bit üzerinde uygulanmıştır.Sanal disk oluşturma
Standart tanımlar ile bir Ubuntu kurulumu 9GB olarak yer kaplamakta.Burada belirtilen yöntem ile önce sanal disk oluşturulmalı. Power shell ile:
PS > New-VHD -Path C:\MyVHDs\test.vhdx -SizeBytes 127GB -Dynamic -BlockSizeBytes 1MB
https://docs.microsoft.com/en-us/windows-server/virtualization/hyper-v/best-practices-for-running-linux-on-hyper-v
Devamında sanal makinayı oluştururken üstteki yöntem ile oluşturulan sanal disk seçilmeli.
Integration services problemleri
Sanal Linux ancak Hyper-V ile sağlanan "Integration Services" etkinleştirildiğinde performanslı çalışmakta. Bununla birlikte ekran, clipboard, dosya paylaşımı gibi özellikler de aktif olmakta.Sanal bilgisayar ayarlarından Settings/Management> Integration services adımında aktif olan seçenekler görülebilir. Guest services aktif edilmeli.
https://docs.microsoft.com/en-us/windows-server/virtualization/hyper-v/supported-ubuntu-virtual-machines-on-hyper-v
Bu dökümandaki tanıma göre gerekli sürücüler zaten Linux kernel ile birlikte gelmekte. Ama malesef beklendiği gibi istenen özellikler çalışmıyor.
Burada 6. adım takip edilmeli.
Düzgün çalışmayan özelliklerden biri ekran ayarları. Düzenlemek için:
https://blogs.msdn.microsoft.com/virtual_pc_guy/2014/09/19/changing-ubuntu-screen-resolution-in-a-hyper-v-vm/
vi kullanımı sıkıntılı olduğu için text dosya düzenlemesinde gedit kullanılabilir:
Dosya paylaşımı
https://www.tectut.com/2015/02/hyper-v-file-sharing-between-and-host-and-guest/
Linux üzerinde yapılan tanımarda gerekli kullanıcı adı şifre bilgileri, windows da oluşturulmalı ve bu kullanıcıya paylaşılan dizin üzerinde yetki tanımlanmalı.
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.)
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
Kaydol:
Kayıtlar (Atom)
