Tebrik cevabı

Herkese merhaba,

İlk defa bu derece uzun zamandır makale yazamadım veya eğitim videoları çekemedim. İlk yazamadığım zamanlar işlerin yoğunluğundan ötürüydü. Sonrasında evlilik sürecinden dolayı yazamadım. WhatsApp üzerinden elimden geldiğince cevaplasam da, gelen e-postalardaki evlilik tebrikleri über katsayıda olduğu için çoğunu cevaplayamadım. O yüzden e-postalara tek tek cevap yazmak hayli zorlayıcı oldu. Cevap atmadıklarım için çok özür dilerim. Bu mutlu günümüzde yanımızda olan veya mesaj atıp tebriklerini ileten herkese şükranlarımı borçluyum. Çok teşekkür ederiz.

Not: En yakın zamanda yeni makalelerde ve videolarda görüşmek dileğiyle!

 

What is JSON And How To Using It In C#

Merhabalar.

Geçen hafta C# Corner adresinde yayınlanmış olan İngilizce makalemin orijinal kopyasını kendi web adresimde de paylaşmaya karar verdim. 11.04.2016 10:47 itibari ile 2.9k okunmasıyla beraber, aldığım geri bildirimler ve gelen mesajlar ile “Bir sonraki makale ne olsun?” sorusuna da cevap arıyorum. Herkese iyi kodlamalar.

Working with JSON in C#
(What is JSON And How to Using It In C#)

This article will cover the following:

  • What is JSON
  • How to create JSON string in C#
  • How to read JSON string in C#

 

What is JSON

JSON (JavaScript Object Notation) is standard designed for human-readable data interchange. I think the thing of ‘human-readable’ for developers. JSON works with a tree structure and it looks like a XML. It’s shorter and It’s very easy for using. If you have already experience with XML, you will certainly learn easily.

JSON vs. XML

Let’s examine this expression { “name”: “Stephen Cousins” }

  1. If you’re using JSON, you must put your expression in “{ }”
  2. “name” is the key.
  3. “Stephen Cousins” is a value of “name” key

 

JSON has the logic like { “key”: “value” } statement.
And also JSON has the array.

Let’s take another expression and examine that:

"students": [
{ "name": "Stephen Cousins" },
{ "name": "Austin A. Newton" },
{ "name": "Adam Wilhite" },
{ "name": "Enis Kurtay YILMAZ" }
]
  1. “students” is the key.
  2. “[“ and “]” square brackets are array statement. It means there is the array between “[“ and “]” in brackets.
  3. All of statements in square brackets are value of “students” key.
  4. As you see there are four arrays in square brackets and it represents four student names.

 

How to create JSON string in C#

Please create your new console project from Visual Studio

File -> New-> Project->Console Application (.NET Framework 3.5)

If you want to create or read a JSON string, you need a JSON Serialize or Deserialize.

So, please open your Solution Explorer in Visual Studio, right click on References, click “Manage NuGet Packages”

Please search “Newtonsoft.JSON” on Nuget Package Manager and install it.

Please add “using Newtonsoft.Json;” statement. If you forget to add this statement, you can’t serialize any JSON strings.

Example JSON:

{
 "universities": {
 "university": "South Carolina State University",
 "students": [
 { "name": "Stephen Cousins" },
 { "name": "Austin A. Newton" },
 { "name": "Adam Wilhite" },
 { "name": "Enis Kurtay YILMAZ"}
 ]
 }
}

Now, you need to create class for example JSON. If you want to create easily, you can use that web site -> www.jsonutils.com

Creating JSON string in C#:

using System;
using System.Collections.Generic;
using Newtonsoft.Json;

namespace EKY.CSharpCornerJSONArticle
{
 public class Student
 {
 public string name { get; set; }
 }
 public class Universities
 {
 public string university { get; set; }
 public IList<Student> students { get; set; }
 }
 public class ClassUniversities
 {
 public Universities universities { get; set; }
 }
 class Program
 {
 static void Main(string[] args)
 {
 ClassUniversities university1 = new ClassUniversities();

 university1.universities = new Universities();
 university1.universities.university = "South Carolina State University";

 List<Student> listStudent = new List<Student>();
 Student student1 = new Student { name = "Stephen Cousins"};
 Student student2 = new Student { name = "Austin A. Newton" };
 Student student3 = new Student { name = "Adam Wilhite" };
 Student student4 = new Student { name = "Enis Kurtay YILMAZ" };

 listStudent.Add(student1);
 listStudent.Add(student2);
 listStudent.Add(student3);
 listStudent.Add(student4);

 university1.universities.students = listStudent;
 string json = JsonConvert.SerializeObject(university1);

 Console.WriteLine(json);
 Console.ReadLine();
 }
 }
}

Result.

 

How to read JSON string in C#

I think this part will be very easy for you. Just you need an example JSON string and JSON class of your example. You can use www.jsonutils.com again, if you want to create a class for your example JSON.

I will JSON strings from my website -> https://www.eniskurtayyilmaz.com/api/get_posts/

using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using System.Net;
using System.IO;

namespace EKY.CSharpCornerJSONArticle
{
 public class Category
 {
 public int id { get; set; }
 public string slug { get; set; }
 public string title { get; set; }
 public string description { get; set; }
 public int parent { get; set; }
 public int post_count { get; set; }
 }
 public class Tag
 {
 public int id { get; set; }
 public string slug { get; set; }
 public string title { get; set; }
 public string description { get; set; }
 public int post_count { get; set; }
 }
 public class Author
 {
 public int id { get; set; }
 public string slug { get; set; }
 public string name { get; set; }
 public string first_name { get; set; }
 public string last_name { get; set; }
 public string nickname { get; set; }
 public string url { get; set; }
 public string description { get; set; }
 }
 public class CustomFields
 {
 }
 public class Post
 {
 public int id { get; set; }
 public string type { get; set; }
 public string slug { get; set; }
 public string url { get; set; }
 public string status { get; set; }
 public string title { get; set; }
 public string title_plain { get; set; }
 public string content { get; set; }
 public string excerpt { get; set; }
 public string date { get; set; }
 public string modified { get; set; }
 public IList<Category> categories { get; set; }
 public IList<Tag> tags { get; set; }
 public Author author { get; set; }
 public IList<object> comments { get; set; }
 public IList<object> attachments { get; set; }
 public int comment_count { get; set; }
 public string comment_status { get; set; }
 public CustomFields custom_fields { get; set; }
 }
 public class Query
 {
 public bool ignore_sticky_posts { get; set; }
 }
 public class ClassWebsiteposts
 {
 public string status { get; set; }
 public int count { get; set; }
 public int count_total { get; set; }
 public int pages { get; set; }
 public IList<Post> posts { get; set; }
 public Query query { get; set; }
 } 
 class Program
 {
 static void Main(string[] args)
 {
 string url = "https://www.eniskurtayyilmaz.com/api/get_posts/";

 HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
 string jsonValue = "";
 using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
 {
 StreamReader reader = new StreamReader(response.GetResponseStream());
 jsonValue = reader.ReadToEnd();
 }

 ClassWebsiteposts websitePosts = JsonConvert.DeserializeObject<ClassWebsiteposts>(jsonValue); 
 }
 }
}

Result.

All of source code for downloading  http://download.eniskurtayyilmaz.com/csharpcornerarticle.rar


Enis Kurtay YILMAZ

Bir yazılım geliştiricinin donanımı

2013 yıllarının ortalarında şimdiki kullanmış olduğum dizüstü bilgisayarı aldım (Asus K55VM).

O zamanlar özelliği Intel i5 2.60 Ghz, 8 GB RAM DDR3, 2 GB ekran kartı ve 750 GB HDD idi..

Bu süreçte yazdığım uygulamalar ilk zamanlarda çok hızlı çalışıyordu ve zamanla derleme esnasında, uygulama çalıştırma durumlarında veya SQL Management Studio üzerinden yaptığım sorgunun geri gelme süreleri zamanla gecikmeye veya uzamaya başladı.

Herkes gibi düzenli olarak yeniden işletim sistemi dönemlerim başladı.
Beş (5) ay geçiyor, bir yavaşlama var..

Evet! Format zamanın geldi senin!

* * *

Elimde bir proje var ve gerçekten çok sıkıcı. Zamanında bir yazılımcı ilgili müşterime uygulamayı yazmış, kaynak kodlarını da teslim etmiş ve projeyi iki etaptan oluşturulmuş. Masaüstü ve web uygulaması. Web ve masaüstü uygulamasında birkaç değişiklik ve beş(5) adet raporlama istiyor, üstelik fiyat uçuk seviyede..

(Bu arada en nefret ettiğim iş türlerinden biridir başkasının yazdığı bir uygulamayı tekrar düzenlemek. Yazılımcının “yazdığı kafayı” anlamak, gerektiğinde onu tebrik etmek ve gerektiğinde de küfür etmek bunun içerisindedir bu süreçte)

Proje başarılı.
Bunu yazan kişi evet programlamayı yalayıp yutmuş, modellemeyi de üstelik çok iyi biliyor. Yazdığı sınıflardaki mantık bir o kadar güzel..

Fakat(!),
İçine etmiş her şeyin. Çok saçma sapan yerlerde, çok alakasız bir ilişki kurmuş.. Veritabanı öyle bir tasarlanmış ki “Neden müşterim benden önce bir yazılımcı bulamamış ve bütçe bu kadar uçuk?” sorusunun cevabını veriyor.

Uygulama resmen sadece bitirilmek için yazılmış. Yaparken modelleme başarılı ama alakasız şekilde olanlar o kadar çok fazla ki.. Yazılım resmen Tanrıya emanet çalışmış bunca zaman..

Hayatımda bu kadar berbat ve alakasız veritabanı tasarımı görmedim. [1]

Derle, 30 saniye bekle..
Uygulamanın veritabanına bağlanmasını bekle, sorgu çeksin, 10 saniye..
Web tarafını kodluyorsan, açılması için en az 20 saniye bekle..

Bir yanda ikinci bir kişinin yazdığı yazılımsal sorunlardan kaynaklanan yavaşlama, diğer yanda da benim cihazımın zamanla yıpranan donanımsal durumu..

* * *

(Önceki yazılım şirketinde sunucumuz için SSD almıştık ve performansın büyük işlemlerde ne kadar önemli olduğunu kanıtlamıştık. Kendi bilgisayarıma da bir SSD almak için hiçbir çaba da sarf etmemiştim o zamanlar)

* * *

Geçen hafta bu bahsetmiş olduğum müşterim bana SSD ve RAM almaya karar verdi. Çok sevdiğim ve gerçekten uzun bir süre ona yazılımlar yazacağım, saygımı kazanmış bir insan. Hiçbir dediğimi de iki etmemiştir. Ödeme konusunda ben bir şey demeden direk kendisi hallediyor, varın gerisini siz düşünün.

Sipariş verirken bilhassa Samsung EVO 850 serisi seçmeye özen gösterdim önceki tecrübemden dolayı. 540Mb Read/520 Write şeklinde 250 GB’lik bir SSD aldık ve 8GB RAM. Şu an toplamda 12 GB RAM takılı bu bilgisayara.

Dün bilgisayarıma yeniden işletim sistemi kurdum.
Yazılımları kur, konfigre et, yedekten geri dön falan bunları saymıyorum bile altı(6) saatimi yedi nerdeyse ve hala eski HDD’mdeki verileri sunucuya gönderiyorum şu an bu yazıyı yazarken.

* * *

Altı buçuk(6.5) – Yedi (7) saat sonra..

Kurtay deli küfür etmeye başladı
Hem de nasıl..

Seni zeki! Önceden neden böyle bir şey yapmadın!

Oha Windows 10 Enterprise beş(5) saniyede açılıyor, projeyi Visual Studio 2015 Enterprise’da açmak üç(3) saniye; debug edilip veritabanına bağlanması, sorgunun cevaplanması sayfanın yüklenmesi nerdeyse iki buçuk (2.5) saniye! Yuh ….. …….! Yok artık!

Sen nasıl bir SSD çıktın lan!

HDD’nin canı cehenneme!

* * *

SSD’lerinde belirli bir ömrü olduğunu hatırlatırım.

* * *

Şimdi gidip deli gibi kod yazacağım.

Enis Kurtay YILMAZ

Microsoft mu yoksa Linux mu; PHP mi ya da ASP.Net mi; yoksa Elma veya Armut mu?

windows-mac-or-linux

Herkese tekrardan merhaba.

Çok tartışmalı ve her seferinde aldığım geri bildirimler doğrultusunda yazılımcı arkadaşların bana gerek forumlarda, sosyal medyada veya attıkları e-postalarda bahsettikleri bir konuyu biraz karışık ve biraz da basit manada ele almak istiyorum.

Başlık, evet biraz tuhaf.

* * *

Kendimden ve sektörden örnekler vererek bu konuyu açıklığa kavuşturma hedefindeyim.

Aldığım freelancer işlerde, çalıştığım şimdiki veya önceki şirketlerde yaptığım projelerde; yapısı gereği yazdığım uygulamalar veya bileşenler çoğunlukla son kullanıcıya hitap eder.

Biz yazılımcılar uygulama geliştirirken yaptığımız ilk şey analizdir. Bu yadsınamaz bir gerçektir. Yani bir müşteri bizden bir X yazılımı / Y websitesi / Z bileşeni yaratmamızı istediğinde; önce onu anlamak isteriz. Bu müşteri ne istediğini biliyor mu?

(Bu soru, yüzlerce proje geliştirdikten sonra ortaya çıkan bir sorudur tabi. Çünkü müşteri çoğu zaman ne istediğini bilmez veya yapmak istediği şey hakkında bilgi eksikliğinden tarif edemez. O yüzden bu soruyu gerekirse defalarca kendimize ve onlara sorarak teyit almaya çalışırız, “Kullanıcı buraya tıkladığında yapılmasını istediğiniz şey nedir?, bu alan neyi ifade eder?, neyi tetiklemeli?, istediğiniz sonuç nedir?” vb. gibi sorular sorarız. Önce müşteriyi ve müşterinin istek/ihtiyaçlarını anlamak gerekir. Emin olun, müşterinin her zaman danışacağı veya fikir alacağı; bilgili veya çok az bilgili insanlar etrafında vardır. Fakat size değer katacağı yeni bilgiler veya yeni teknolojileri bile keşfetmenize olanak sağlayabilir. Tek yapmanız gereken Google amcaya sormaktır.) 

Eğer müşteri ne istediğini biliyorsa veya siz bu sorunu çözüme kavuşturmayı başarmışsanız; geriye hangi yöntemler, hangi teknolojiler, hangi bileşenler kullanılmalı şeklinde; kısacası “Hangi X kullanılacak” denklemleri kafanızda belirmeye başlar.

Bu süreçte vereceğiniz cevaplar çoğunluk kişisel olmakla beraber geleceğe bakış açınızla alakalıdır. Örneğin,

  • Desteği bitmiş bir teknolojiyi/bir bileşeni kullanıp, bir an önce işi çözüp zamanı nakit durumuna çevirmek ama gelecekte aynı müşteri size “Yeni özellikler eklenmeli isteğiyle” geldiğinde sıfırdan yazmak zorunda kalmak mı?
  • Performans bakımından şahane hızlı ama hiç bilmediğiniz bir teknolojiyi öğrenmek mi?
  • “Ya ben yazayım, nasıl çalışıyorsa çalışsın, zaten bir daha böyle iş ne zaman gelir?” mantığıyla işe tamamlamak mı?

Acemisinden profesyoneline; çakalından işin ehlisine kadar pek çok kişinin takıldığı yerlerdendir bu.

Profesyonel yazılım şirketleri veya geliştiriciler ise “Gelecek vaat eder mi?”, “İlerde bize ihtiyaç duyarlar mı? Duymazlarsa ne yap(ıl)malı?” sorusunun cevabını öngörür.

* * *

Bu yazıyı yazarken aklıma üniversite yıllarından Microsoft sevdalısı; hayranı ve bağımlısı bir arkadaşım geldi. Varsa yoksa “.Net” derdi. Biraz da egoistti. Microsoft tarafından aldığı MCPD sertifikalı bir arkadaşımızdı. Mesleki bakımından gerçekten başarılı bulduğum bir arkadaş olsa da bakış açılarımız tamamen çok farklıydı bu sektör ile alakalı. Çünkü gerektiğinde takım oyununu oynaman gerektirir bu sektör. Bu yüzden yenilikçi bakış açısına sahip olman gerekir.

Bir keresinde üniversite içerisindeki Teknopark gezimizde gerçekten profesyonel bakış açısına sahip, senelerini yazılıma vermiş; lise mezunu ve 4 milyon dolar üzerinde ciroya sahip olduğu yazılım şirketinin sahibine saçma sapan bir soru sorup, beş-on dakika sorular havada uçuşturarak “.Net” i kendince savunmuştu (Bana sorarsanız daha temkinli yaklaşabilir veya daha somut konuşarak işi çözümleyebilirdi. Bu şirket sahibi ağabeyimiz, %100 Pure Java takılırmış zamanında ama sırası geldiğinde başka teknolojileri de kullanmaktan çekinmezmiş). Bu deneyimli ve başarılı yazılımcı ağabeyimizin de cevabı yerindeydi, “Gözlerini biraz aç, yazılım sadece Microsoft’tan ibaret değil.”

Tabi bu bahsi geçen arkadaşım, üniversite sonrasında edindiği sektörel tecrübelerden artık şimdi Linux ortamında da uygulama geliştirmeye başlamış. Üstelik script bile yazıyormuş, laf aramızda kalsın ama arada bloğuna bakıp inceleme fırsatı buluyorum. Başarılı buluyorum. .Net’ten de biraz uzaklaşmış sanki. Ağabeyin verdiği tavsiyeye de uymuş.

* * *

Microsoft ile Linux’un bile yıldızları barıştı, siz neyden bahsediyorsunuz?

* * *

Uygulama geliştirirken, körü körüne bakmayı sevmem; kaldı ki şirketler de böyle yapmaz. Elindeki yeteneği ve bilgiyi dikkate alır çoğunlukla, alsalar da asıl olay; yazının başında belirttiğim gibi gelecek, zaman maliyeti ve bakış açısı ile ilgilidir.

Örneğin, ben web servislerle iletişim halinde olacak paket gönderen/alan bir web uygulaması yazacağım ve frameworklere ihtiyacım var. Hadi hep bildiğimiz teknolojiyi kullanalım, ASP.Net’te ilgili web servisini referans olarak gösterip, projeme dahil etmem sadece dört-beş tıklama. Hadi diyelim paket alıp gönderen kodu da yazdım.. Peki, ilgili paketi gönderip, cevabı response ederken bu arada geçen süre ne kadar verimli? Daha aza indirgeyen başka bir şey var mıdır?

Araştırmaya başlarım.
Benim gözümde bir şeyi araştırırken üç temel kavram vardır;

  1. Sizden önce Amerikayı keşfeden mutlaka biri vardır.
  2. Yanlış şekilde araştırıyor olabilir misin?
  3. İlk keşfeden sen olabilir misin?

Dileyim ki, bulduğum sonuçlar arasında yaptığıma benzer ama farklı içerikler kullanan biri “PHP ile birlikte Laravel kullanarak daha hızlı verim elde ettiğini” iddia etmiş.

Denerim, acımam..

Denemek için aldığım kodu komple indirdim, kendime göre düzenledim ve çalıştırdım (diyelim)..

İncelemeler sonucu, verimlilik ve performans bakımından, ASP.Net’ten daha etkin ve başarılı bir şey olduğuna kanaat kıldım. “Evet bu sefer oldu, şahane çalışıyor!”. 

Hiç vakit kaybetmeden bu projeyi kendime göre yeniden yapmaya karar veriyorum. Laravel’in son versiyonunu indiriyorum, önceden bulduğum kodları kendime göre entegre etmeye çalışıyorum.. Bir de ne göreyim, önceki indirdiğim kodlar Laravel’in eski versiyonu içinmiş.. Hayde..

Dur bakayım eski versiyonuna ait dökümantasyon var mı?

beş-on dakika sonra..
E, o da yok; ne yapacağız şimdi?

İşte burada bir çıkmaza girdik. Eski versiyona artık destek kalkmış.
Biraz daha araştırıyorum ve araştırmalarımın sonucunda CodeIgniter ile bu işi başaranları keşfediyorum. Ama ben hiç CodeIgniter kullanmamış biriyim.. Birkaç deneme yapıp, makale okuduktan sonra bakıyorum ki Laravel’den bile daha iyiymiş ve CodeIngiter framework’un dökümantasyonu şahane olmakla beraber, desteği hep verilecekmiş..

Hadi CodeIgniter öğrenelim,

bir-iki gün sonra..
aaa şahane bir şey lan bu!

* * *

Yukarıdakine benzer bir senaryoyu bir ay kadar önce bir projede yaşadık.
Neyse ki şirketteki deneyimli ağabeylerim sayesinde sorunu kısa sürede çözümledik.
Şimdilerde ise çatır çutur yazıyorum kodları acımadan.

* * *

Bu ana kadar anlattıklarımı gelişi güzel yazdım.
Yani akademik dilden çok, daha samimi şekilde ifade etmek istedim ama bazı detayları atlayarak 🙂

Daha fazla bilgi ve bakış açısı için; yazılım geliştirme süreci ile alakalı bu tezi incelemenizi isterim.

Bir sonraki makalede görüşmek üzere.

Enis Kurtay YILMAZ