Entity Framework Kullanımı

Birden çok ORM yani Object Relational Mapping aracı vardır. .NET üstünde resmi frameworklerden biri Entity Framework'tür. Entitfy Framework kısaca EF, nesneye yönelik programlamada kullanılan ve veritabanındaki tablolara karşılık gelen nesneleri oluşturarak işlem yapan alt yapıdır. Entity Framewor ile veritabanı işlemleri daha hızlı ve daha kolay yapılmasına rağmen büyük projelerde hız konusunda sınıfta kalmaktadır. Hala veritabanında çalışan stored procedure tekniği daha hızlıdır. Tabi ki bu büyük proje dediğim kavramın gerçekten big datalarla çalışıldığı durumları içerdiğinin bilinmesi gerekir. Şu anda LINQ to Entities teknolojisi ile Entity Framework kullacağız. Temel kaydet, güncelle, dil ve ara işlemlerini yaparak Entity Framework kullanarak temel işlemlerimizi yapacağız.   Öncelikle Solution sekmemize sağ tıklayıp add -> new items sekmesinden ado entity data model seçimini yapıyoruz.    Ardından açılan pencerede eğer varolan bir veritabanından çağrı yapacaksak EF Designer from database sekmesini tıklayarak ilerliyoruz.      Açılan pencerede daha önce bir connection yani bağlantı olmadığı için new connection butonunu tıklıyoruz.      SQL Server bağlantı bilgilerimizi girdikten sonra veritabanını seçip pencereyi onaylıyoruz.      Artık bağlantımız hazır hale gelmiş durumda.        Gelen pencereden entity framework’ün hangi versiyonunu kullanacağımızı seçiyoruz.    Bu örneğimizde veritabanında olan tek tabloyu seçip modellenmesini istedik.      .edmx uzantılı diyagramımızda artık hikaye veritabanındaki hikayeler tablosunu görebiliyoruz.    Bu işlemleri yaptıktan sonra aşağıdaki isim alanları projemize eklendiler. Bundan sonra LINQ to Entities kullanarak temel işlemleri yapabiliriz.   EntityFramework System.ComponentModel.DataAnnotations System.Data.Entity System.Runtime.Serialization System.Security   Şimdi bir örnek uygulama yapalım. Kullanıcı arayüzümüz aşağıdaki gibidir;   Veri eklemek için buton click olayına aşağıdaki kodu yazalım;         privatevoid button2_Click(object sender, EventArgs e)         {             using (EFhikayeDBEntities efh = newEFhikayeDBEntities())             {                 hikayeler hky = newhikayeler();                 hky.tip = textBox1.Text;                 hky.hikaye = textBox2.Text;                 efh.hky.Add(hky);                 efh.SaveChanges();             }             textBox1.Text = "";             textBox2.Text = "";         }   Kayıt silmek için buton click olayımıza aşağıdaki kodu yazabiliriz;         privatevoid button3_Click(object sender, EventArgs e)         {             int id = Convert.ToInt32(dataGridView1.CurrentRow.Cells["ID"].Value);               using (EFhikayeDBEntities efh = newEFhikayeDBEntities())             {                 var liste = from h in efh.hky                             where h.ID == id                             select h;                   liste.ToList().ForEach(x => efh.hky.Remove(x));                 efh.SaveChanges();             }         }     }   Verileri listelemek içinde click olayımıza aşağıda kodu yazalım; privatevoid button1_Click(object sender, EventArgs e) {                  using (EFhikayeDBEntities ehd = newEFhikayeDBEntities())             {                 var liste = from h in ehd.hky                             orderby h.ID ascending                             selectnew                             {                                 Id=h.ID,                                 tip = h.tip,                                 hikaye = h.hikaye                             };                dataGridView1.DataSource = liste.ToList();             }         }   Container sınıfımızda aşağıdaki gibidir; publicpartialclassEFhikayeDBEntities : DbContext {         public EFhikayeDBEntities()             : base("name=EFhikayeDBEntities")         {         }           protectedoverridevoid OnModelCreating(DbModelBuilder modelBuilder)         {             thrownewUnintentionalCodeFirstException();         }           publicDbSet<hikayeler> hky { get; set; }   }

.NET üstünde MySQL ile çalışma

MySQL, çok sayıda sistemde çalışan multi threaded ve çok kullanıcılı bir veritabanı yönetim sistemidir. SQL Server sürümlerine bir alternatif olarak düşünebiliriz. Gerçek düyna da SQL Server'a rakip olabilecek birden fazla Veritabanı Yönetim Sistemi bulunmaktadır. Oracle DB saymazsak MySQL en çok kullanılan alternatiflerden biridir. Aynı zamanda sadece Windows platformlarında değil UNIX, OS/2 ve Linux platformlarında da hızlı bir performans sergilemektedir. Açık kaynak kodlu bir sistem olduğu için diğer platformlarada port edilebilir durumdadır. ODBC sürücüleri olduğundan .NET üzerinde de kolaylıkla MySQL veritabanı yönetim sistemine erişerek MySQL tabanlı uygulamalar geliştirebiliriz. MySQL tarihçesi şöyledir (Wikipedia’dan alıntıdır); 1994 MySQL'in geliştirilmesine başlandı. 1995 MySQL ilk sürümü yayınlandı. 2001 yılında MySQL 3.23 yayınlandı. 2004 MySQL 4.1 beta sürümü, ve gerçek sürümü Ekim 2004 yılında yayınlandı. (R-trees and B-trees, subqueries, prepared statements) 2008: MySQL 5.1 sürümü yayınlandı. (event scheduler, partitioning, plugin API, row-based replication, server log tables) 2008 Ocak: Sun Microsystems, bir milyar dolara MySQL'i satın aldı. 2009 Nisan: Oracle, Sun Microsystems'i satın aldı. Oracle, MySQL'i geliştirmeye devam edeceğini duyurdu.   MySQL Aşağıdaki yapıladı desteklemektedir; Tables (Tablo) Views (Görüntü) (Görüntüleme) Procedures (Prosedür) Triggers Cursors     MySQL veritabanı yönetim sistemini kurduktan sonra doğrudan .NET uygulamaları altında C# ile geliştirme yapamazsınız. Bunun için .NET Connector’a ihtiyacınız var. MySQL ADO.NET sürücüsünü mysql sitesinden indirebilirsiniz.      MySQL sürücüsünü kurmak indirdikten sonra bilgisayarınıza şöyle kurabilirsiniz;      Setup Type kısmında istediğiniz kurulum tipini seçeceksiniz.      Complete seçeneğini seçerseniz tüm frameworkler ve compact framework gibi alternatif araçlarda sisteminize yüklenecektir.          MySQL veritabanı motorunun yönetimini yapacağınız uygulama MySQL Workbench uygulamasıdır. Bu uygulama SQL Server üstündeki Management Studio’ya denk gelmektedir.      Workbench ekranı üstünden birden fazla connection ekleyebilir veya  yerel sunucunuzdaki verilerle çalışıp yönetebilirsiniz.      Workbenc üzerinde birden fazla araç barınmaktadır.      Tables, Views, Stored Procedures ve Functions kısmından işlevsel tüm özellikleri kullanabilirsiniz.      Aynı SQL Server üzerinde kullandığımız sql cümleciklerini ufak bazı değişikliklerle MySQL üzerinde de kullanabilirsiniz. Select * from yapısı aynı şekilde MySQL içinde de geçerlidir.      Farklı bir lokasyondaki veritabanına bağlanmak için aynı şekilde connect to database seçeneğini seçerek bağlantı sağlayabilirsiniz.     .NET uygulamamızda C# ile MySQL bağlantılı yazılım yazmak için öncelikle referanslar kısmından yüklediğimiz mysql connector’un dll paketlerini eklememiz gerekmektedir.    Kullanacağımız MySQL.Data referansı bize gerekli alt yapıyı sağlayacaktır. Aynı zamanda Entity Framework yapısı içinde destek bulunmaktadır.      Referanslara eklediğimizde MySql.Data başlığının projemize eklenmiş olduğunu görebiliriz.     Uygulamamızı yazarken gerekli olan namespace’ler MySql.Data, MySql, MySql.Data.MySqlClient isim alanlarıdır. Sql Server kodlaması yaparken kullandığımız SqlConnection gibi sınıfların isimleri bu isim alanı altında MySqlConnection gibi ufak değişiklikler göstermiştir. Aynı şekilde SqlCommand MySql ile kodlama yaparken MySqlCommand ismini almıştır. SqlDataAdapter ismi ise MySqlDataAdapter olmuştur. Bu şekilde klasik Ado.NET kodlaması yapabilirsiniz. MySQL ile bağlanan ve işlemler yapan bir sınıf aşağıdaki şekilde tanımlanmış ve kodlanmıştır. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; using System.Data; using MySql.Data; using MySql; using MySql.Data.MySqlClient;   namespace sample_db {     public class dblayer     {         string connectionstr;           public dblayer()         {             connectionstr = "Network Address=IP_Adresi;" +                                                    "Initial Catalog='database_ismi';" +                                                        "Persist Security Info=no;" +                                                    "User Name='kullanıcı_ismi';" +                                                    "Password='parola'";         }             public DataTable etkinlikleri_al()         {             DataTable dt = null;             try             {                 MySqlConnection connection = new MySqlConnection(connectionstr);                 string mysqlquery = "SELECT * FROM sample_db.etkinlik order by etkinlik.tarih desc";                 MySqlCommand command = new MySqlCommand(mysqlquery, connection);                 connection.Open();                 dt = new DataTable();                 MySqlDataAdapter adapter = new MySqlDataAdapter(command);                 adapter.Fill(dt);             }             catch             {                 return null;             }             return dt;         }           public DataTable projeleri_al()         {             DataTable dt = null;             try             {                 MySqlConnection connection = new MySqlConnection(connectionstr);                 string mysqlquery = "SELECT * FROM sample_db.proje order by id desc";                 MySqlCommand command = new MySqlCommand(mysqlquery, connection);                 connection.Open();                 dt = new DataTable();                 MySqlDataAdapter adapter = new MySqlDataAdapter(command);                 adapter.Fill(dt);             }             catch             {                 return null;             }             return dt;         }           public DataTable haberleri_al(string baslangic, string bitis)         {             DataTable dt = null;             try             {                 MySqlConnection connection = new MySqlConnection(connectionstr);                 string mysqlquery = "SELECT * FROM sample_db.haber where yayin_tarihi between " + baslangic + " and " + bitis + "order by haber.yayin_tarihi desc";                 MySqlCommand command = new MySqlCommand(mysqlquery, connection);                 connection.Open();                 dt = new DataTable();                 MySqlDataAdapter adapter = new MySqlDataAdapter(command);                 adapter.Fill(dt);             }             catch             {                 return null;             }             return dt;         }           public DataTable duyurulari_al(string baslangic, string bitis)         {             DataTable dt = null;             try             {                 MySqlConnection connection = new MySqlConnection(connectionstr);                 string mysqlquery = "SELECT * FROM sample_db.haber where yayin_tarihi between "+baslangic+" and "+bitis+" order by haber.yayin_tarihi desc";                 MySqlCommand command = new MySqlCommand(mysqlquery, connection);                 connection.Open();                 dt = new DataTable();                 MySqlDataAdapter adapter = new MySqlDataAdapter(command);                 adapter.Fill(dt);             }             catch             {                 return null;             }             return dt;         }       }   }

Uygulamalar da Toplu SMS ve SMS Kullanmak

Merhabalar Arkadaşlar, bugüne kadar bir yazılım geliştirici/yöneticisi olarak yazılarımı yazdım çoğunlukla kendi ürünlerime atıfta bulunmadım. hala da bulunmayacağım ve burada reklamını yapmayacağım. şirketimin reklamının yapılacağı yerin burası olduğunu düşünmüyorum. en azından yaptığımız uygulamaların ve projelerin. fakat gsm konusunda bir iş ortaklığı alarak toplu sms hizmeti vermeye başladık. buradaki önemli konu bu hizmetin verilmesi değil bu hizmeti yazılımlarınıza ve mobil uygulamalarınıza entegre ederek aktivasyon veya mesaj hizmetleri verebilirsiniz. ön ödemeli bir sistem olduğu için aldığın kadar kullan mantığıyla çalışmaktadır. şirketimizin sitesi bildiğiniz gibi www.software4galaxy.com bu hizmet içinse www.s4gsms.xyz adresinden sms paketleri satın alabilirsiniz. azılım altyapısı XML arabağlantı olanağı sağlamaktadır.   XML Arayüzü ile Bağlantı   XML Arayüzü ile yapılan istekler POST metodu ile çalışmakta olup aynı anda azami 100.000 adet kişiye sms gönderimine olanak sağlamaktadır. XML Arayüzü ile Bağlantı ile ilgili dökümantasyona menüden ulaşabilirsiniz. SMS ile mesaj gönderme: <SMS>    <oturum>       <kullanici>Kullanıcı adı</kullanici>       <sifre>Şifre</sifre>    </oturum>    <mesaj>       <baslik>DENEME</baslik>       <metin>XML Api ile sms gonderimi...</metin>       <alicilar>5329998877,5309998877,5429998877</alicilar>       <tarih>YYYY-MM-DD HH:MM:SS</tarih>    </mesaj>    <karaliste>kendi|genel</karaliste>    <izin_link>true</izin_link>    <izin_telefon>true</izin_telefon> </SMS> http://s4gsms.xyz/api-v3/xml_api.php   Post URL Parametreler : kullanici : Sistemde kayıtlı olan kullanıcı adınızdır. sifre : Sistemde kayıtlı olan şifrenizdir. baslik : Mesaj gönderiminin hangi başlık üzerinden yapılacağını belirtir. Azami 11 karakter olabilir. metin : Mesaj metnini belirtir. alicilar : Mesajın gönderileceği numaraları belirtir. Başına 0 konulmadan girilmelidir. Birden fazla kişiye mesaj göndermek için araya virgül (,) konularak yazılmalıdır. tarih : Boş bırakılması durumunda mesaj hemen gider, ileri bir tarihte gönderim için 19 karakter olacak şekilde yukarıdaki tarih formatına uygun olmalıdır. karaliste : Sistem üzerinde bulunan karalisteyi kullanarak mesaj göndermenizi sağlar. 2 parametre almaktadır. Bu parametreler, Genel (Genel olarak kullanılan karaliste) veya Kendi (size ait olan kara listeniz) olarak kullanılabilir. izin_link : true değeri gönderildiğinde mesaj metnine otomatik olarak iptal metninin eklenmesini sağlar. (Ör: SMS Listemizden çıkmak için http://iptal.biz/xxxxxx) izin_telefon : true değeri gönderildiğinde mesaj metnine otomatik olarak iptal telefonunun eklenmesini sağlar. (Ör: SMS Listemizden çıkmak için 02162120750 numarasını 1 kez çaldırınız.) Dönen Sonuçlar : Mesaj gönderiminin başarılı olması durumunda OK|MesajID şeklinde bir sonuç döner. OK| kısmı herzaman sabittir. | işaretinden sonraki kısım değişkendir.   Mesaj gönderiminin başarısız olması durumunda ERR ile başlayan ve türkçe açıklama içeren hata mesajları döner. ERR kısmı her zaman sabittir.   XML ile Hitaplı (Parametrik) SMS Gönderimi XML ile SMS Gönderimi azami 100.000 kişiye kadar yapılabilmektedir. 100.000 adet üzerindeki gönderimlerinizi loop ederek 100.000 er adetlik paketler halinde göndermeniz gerekmektedir.   XML ile Hitaplı (Parametrik) SMS Gönderimi için örnek XML Yapısı aşağıdaki şekildedir.   <SMS>    <oturum>       <kullanici>Kullanıcı Adınız</kullanici>       <sifre>Şifreniz</sifre>    </oturum>    <baslik>XML HITAPLI</baslik>    <mesaj>       <metin>Sayin Veli Dogan, borcunuz 15TL dir.</metin>       <alici>5428887766</alici>    </mesaj>    <mesaj>       <metin>Sayin Hasan Dogan, borcunuz 20TL dir.</metin>       <alici>5556665544</alici>    </mesaj>    <mesaj>       <metin>Sayin Haci Dogan, borcunuz 25TL dir.</metin>       <alici>5057776655</alici>    </mesaj> </SMS>   http://s4gsms.xyz/api-v3/xml_ozel_api.php   Post URL Parametreler : kullanici : Sistemde kayıtlı olan kullanıcı adınızdır. sifre : Sistemde kayıtlı olan şifrenizdir. baslik : Mesaj gönderiminin hangi başlık üzerinden yapılacağını belirtir. Azami 11 karakter olabilir. : N sayıdaki mesaj döngüsü temsil eder. metin : Mesaj metnini belirtir. alici : Mesajın gönderileceği numarayı belirtir. Başına 0 konulmadan girilmelidir.   Dönen Sonuçlar : Mesaj gönderiminin başarılı olması durumunda OK|MesajID şeklinde bir sonuç döner. OK| kısmı herzaman sabittir. | işaretinden sonraki kısım değişkendir.   Mesaj gönderiminin başarısız olması durumunda ERR ile başlayan ve türkçe açıklama içeren hata mesajları döner. ERR kısmı her zaman sabittir.   Başlıklı SMS göndermek için C#kodu aşağıdaki şekildedir;   publicstring SMSMesajGonder(string numara, string mesaj)         {             // DEĞİŞKENLER OLUŞTURULUYOR             string kullaniciAdi = "", sifre = "", baslik = "";             // XML DESENİ YARATILIYOR.             string xmlDesen = "<SMS><oturum><kullanici>" + kullaniciAdi + "</kullanici><sifre>" + sifre + "</sifre></oturum><mesaj><baslik>" + baslik + "</baslik><metin>" + mesaj + "</metin><alicilar>" + numara.ToString() + "</alicilar><tarih></tarih></mesaj></SMS>";             // APIYE XML DESENİ VE API ADRESİ GÖNDERİLİYOR.             WebRequest request = WebRequest.Create("http://s4gsms.xyz/api-v3/xml_ozel_api.php");             request.Method = "POST";             byte[] byteArray = Encoding.UTF8.GetBytes(xmlDesen);             request.ContentType = "application/x-www-form-urlencoded";             request.ContentLength = byteArray.Length;             Stream dataStream = request.GetRequestStream();             dataStream.Write(byteArray, 0, byteArray.Length);             dataStream.Close();             WebResponse response = request.GetResponse();             Console.WriteLine(((HttpWebResponse)response).StatusDescription);             dataStream = response.GetResponseStream();             StreamReader reader = newStreamReader(dataStream);             string responseFromServer = reader.ReadToEnd();             reader.Close();             dataStream.Close();             response.Close();             return responseFromServer;             // DÖNEN CEVAP İLGİLİ YERE GÖNDERİLİYOR.           }

Yazılım Dünyasından kısa kısa

Bir mühendis veya developer veya yazılımla uğraşan kişi asla microsoft’cu, linux’cu veya open source’cu olamaz. Tabi gönül ister her yazılım open source olsun. O noktaya doğru gidiyor aslında hangimiz linux üstünde yazılmış driverları inceliyor ve yeni bir linux paketini geliştirmek için o kodu okuyor bu tartışılır. Eğer böyle bir şey yapmayıp ürün geliştiriyorsanız open source olmasından daha çok esnekliği ve geliştirilebilirliği çok önemli. Zaten ekstra bir çok özellikleri uygulamalarımıza yeri geldiğinde kütüphane dahi yazarak biz ekleyebiliyoruz. Görmediğimiz kısımda da uygulama ile işletim sistemi arasında çağrılar yapılmakta. Açıkçası C dili ile ve Windows API’leri ile basit bir pencere yapmaya kalktığımda yıllar önce 1000 satırdan fazla kod yazdığımı çok net hatırlıyorum. Önemli olan yeni bir özellik kazandırabiliyorsam programa gerektiğinde istediğim bellek bölgesine ulaşıyorsam daha doğrusu ihtiyaç duyduğumda ulaşabiliyorsam benim için yeterli. Son yıllarda pointer'larla fazla işim olmuyor açıkcası. Çok fazla duyduğum bir soru ise visual studio ve üstünde yaptığım yazılımlar için lisans bedeli ödeyecek miyim veya ticari kullanıma yönelik uygulamalar yapabilir miyim oluyor. Eğer ücretsiz bir versiyon (community edition gibi) kullanıyorsanız .NET ortamındaki bir dili kullandığınız için ücret ödemezsiniz. Çok deneyimli olmayan bazı geliştirmeye hevesli arkadaşlar malesef aspragas haberleri yayabiliyorlar.   MS tarafında eğer sql server express kullanmayacaksanız ve ticari bir uygulama yapacaksanız lisanslar tabi ki ücretli. Ama .NET veya C# kullandığınız için illaki MS’in ürünü SQL Server kullanmak zorunda değilsiniz. Çok sayıda veri tabanı mevcut. Oracle, mysql, mariadb , mongo vs. Kullanabilirsiniz. Onun için önemli olan geliştirme ortamınızın ve dilin güçlü olması gerektiğini unutmayın.

Bir Geliştiricinin Alet Çantası

Şu anda çok fazla kullandığım bir kaç aracı sizinle paylaşmak istiyorum. Eğer bir yazılım ekibi olarak çalışıyorsanız. Bir kaç alete ihtiyacınız olacak. Burada geniş kapsamlı iç çözümlerimizden veya geniş kapsamlı uygulamalardan bahsetmeyeceğim. Temel olarak bazı araçları sizlere listeleyeceğim. Aslında çok fazla sayıda da değil. 1.       1-) Trello 2.       2-) Bitbucket 3.       3-) Visual Studio 4.       4-) Android Studio 5.       5-) Xcode 6.       6-) Xamarin 7.       7-) Notepad++ 8.       8-) Winrar 9.       9-) Photoshop Trello tüm projelerinizi ve işlerinizi organize edebileceğiniz ve ekipler oluşturabileceğiniz bir uygulama. Trello.com adresinden kullanmaya başlayabilirsiniz. Gold sürümü hariç tamamen ücretsizdir. Bu ücretsiz sürümde gayet yeterli olmakta. Hem cep telefonu hem de tablet versiyonlarıda mevcut. Yazılım projelerinde scrum uygularken trelloyu kullandım. Ve bu ihtiyacımada cevap verdiğini söylemek isterim. Bitbucket ise tüm versiyon kontrolü işlemlerini yapabileceğiniz ve yazılımcıların çoğununun haberdar olduğu git temelli bir cloud versiyon kontrolüdür. 5 kişiye kadar ekiplerde ücretsizdir. Bir üst paket aylık 10 dolar gibi cüzi bir rakam ödenmesi gerekmektedir. Zaten 5 kişilik ekipten daha büyük işler yapıyorsanız proje gelirlerinin de yüksek olduğunu düşünürsek 10 dolar oldukça komik bir rakam kalmaktadır.   Visual Studio, windows ortamında bir developer için tam bir alet çantası. Web, windows, entegrasyon ve bir çok işinizi yapmanızı sağlıyor. Bu yazıyı okuyanlar visual studio ile ilgili oldukça bilgi sahibi olduğunu düşünüyorum. Android Studio ve Xcode ise mobil platformlara hükmetmeniz açısından oldukça önemli. Xamarin ise şimdilik çok büyük bir proje yapmasamda cross platform için araçlarımda her daim saklı tuttuğum bir teknoloji.

Software4Galaxy Şirketi ve Teknolojik Gelişmeler

Merhabalar Arkadaşlar, Uzun zamandır bloguma post atamıyordum. Daha doğrusu kod parçaları veya sıradan kod makaleleri ile her zaman sizlerle olmayacağım. Artık proje yönetimi, yönetim ve bilişim dünyasıyla ilgili yeni yazılarda bulabileceksiniz blogumda. Eski yazılarıma zaten ulaşabiliyorsunuz. 16 mart 2016 tarihinde Software4Galaxy Limited şirketimi kurdum ve Genel müdür olarak çalışmalar yapmaktayım. Aslında bu bilişim dünyasında yöneticilik pozisyonunda ki ilk görevim değil. 2004 senesinden beri bilişim dünyasında profesyonel çalışmalar yapmaktayım. Son yıllarda takım lideri ve proje yöneticisi olarak bir çok çalışmalarım oldu. Müşteriler ile satış toplantıları dahil. Şu anda bir girişimci ve yakın bir zamanda 1 senelik bir limited şirketi olacak firmamda ise joker bir pozisyonda çalışmak zorundayım. Şirketler bir anda büyük ekipler barındırmıyor. Ekip kurarken bir çok insanla da tanışma fırsatı elde ettim. Sizlere biraz da bu kısımlardan bahsetmek istemekteyim. Bir çok iş görüşmesi yaptım ve deneme süresinde ayrılma kararı aldığımız arkadaşlar oldu. İş görüşmelerinde yeni mezun arkadaşlarla da çok fazla şekilde diyaloglar kurdum. Piyasada yetişmiş insan gücünden dem vurulduğunu sosyal medyada da çoğu sefer bazı profesyonel olmayan şirketlerin çok fazla bilgi birikimi istediği şeklinde geri bildirimler alıyordum. İş alımlarımı oldukça sade tutmaya çalışmıştım. Bir insan kaynakları departmanı olmadığı için bu görev bana düşüyordu. Malesef çoğu yeni mezun gerçekten kendini geliştirmeden yüksek ücretler talep edebiliyordu. 5 sene deneyimli birinin aldığı maaşın fazlasını istediklerine şahit oldum. Sosyal medyada dem vurulan noktalardan biri ise ünivesite okumayan yazılımcıların olduğu güruhtu. Bizim işini iyi yapıyorsa diploma şartı aramak gibi bir isteğimiz olmamıştı. Tabi ki onca iş görüşmesi ve 3-4 arkadaşla çalışınca bazı çıkarımlarımız oldu. Üniversite okumamış iş görüşmesine gelen bir kişi işte çalışırken sadece bildiği yerleri söylemesi gerektiğini ve sadece oralardan sorumlu tutulmasını istedi. Anladığım kadarıyla yeni bir şeyler öğrenmek gayreti içinde olmayacaktı. Aynı zamanda 4 gün sonra memurluk sınavı mülakatı olacağını 4 gün müsade etmemizi eğer kazanırsa gelmeyeceğinide belirtti. Gerçekten iş görüşmesine gelenler oldukça cesaretli davranışlar sergiliyordu. Burada anlatmak istediğim bazı şirketlerin çok şey istediğini ve yeni mezunlara şans verilmediği söylemiydi. Bunu fazlasıyla yaptığımı düşünüyorum. Malesef yeni mezun arkadaşlardan oluşan bir ekibin çokta başarılı olduğunu söyleyemem. Diğer şirketlerde incelediğimde yeni mezun arkadaşların ivmelenmesinin 5-10 sene veya daha üstü deneyimli olan kişiler arasında olduğuydu. Yani yeni mezunlardan bir ekip kurmaktan daha çok 5-10 sene deneyimli developerlardan oluşan bir ekip kurduğunuzda yanlarında sayıya oranla %20-%30 arası yeni mezun yerleştirdiğinizde performans artışını görebiliyorsunuz. Malesef yeni nesil veya yeni mezun dediğimiz yeni kuşakta oto kontrol ve iç disiplin ancak bu kişilerden oluşmuş deneyimli bir ekibin içinde birebir temas olduğu sürece geçerli olabildiğini gördüm. Bundan sonraki yazılarımda da teknik makaleler çok fazla yazar mıyım bilmiyorum ama proje yönetimi, yönetim ile ilgili yazılarda bulabileceksiniz. Bu arada C# 6.0 kitabım yakın bir zamanda ikinci baskısını C# 7.0 olarak yapacak. Şu anda yeni bir iki bölüm ve güncellemeleri yapmaktayım.   Yeni mezun arkadaşların çok fazla üstüne gittiğimin farkındayım bu yazımda ama siz de bir yeni mezun olarak iş yaşamınıza başlayacaksanız mutlaka iş disiplini, iş etiği gibi konularda da yazılım geliştirdiğiniz kadar iyi olmalısınız. Sadece okulla yetinip iş aramak değil en azından bir konuda kendinizi geliştirmiş olarak iş dünyasına adım atmalısınız. 

Visual Studio Code'un Bugünü ve Geleceği

Microsoft'un kaynak kodlarını yayınladığı Visual Studio Code, gelecekte Sublime Text ve Atom'u geçebilir mi?   Visual Studio Code, hata ayıklama özellikleriyle, gelişmiş web ve bulut uygulamaları üstünde kodları düzenlemeye, yeniden tanımlamaya ve optimize etmeye yarar. Visual Studio Code tamamen ücretsiz olup, dilediğiniz gibi kullanabilir, kodlarını inceleyebilir ve kendi ihtiyaçlarınıza göre değişim yapabilirsiniz. Uygulama, çoklu platform desteğine sahip olduğu için Linux, Mac OS X ve Windows üzerinde çalışır ve programcılar için yaklaşık 30 programlama dili desteği sunar. Desteklediği dil, kütüphane, çatı ve platformların listesini aşağıda bulabilirsiniz: Batch C++ Clojure Coffee Script Dockerfile F# Go Jade Java HandleBars Ini Lua Makefile Objective-C Perl PowerShell Python R Razor Ruby Rust SQL Visual Basic XML Groovy Markdown PHP Swift CSS HTML JavaScript JSON Less Sass TypeScript C# Visual Studio Code, Mac OS X, Linux ve Windows işletim sistemlerinde CoreCLR ve ASP.NET 5 uygulamaları geliştirmek ve diğer dilleri desteklemek için sunulan bir kod düzenleme yazılımıdır. Intellisense, hata ayıklama, sürüm kontrol ve ASP.NET 5 uygulamaları en önemli özellikleri arasında yer alır. IntelliSense, kodları yazarken API'leri açıklar, hızı ve doğruluğu artırmak için otomatik tamamlama yapar. Hızlı bilgi ipuçları, API tanımlarını incelememize olanak sağlar.   Kodlar arasında ilişkilendirmeler yapması ve kodun yazım esnasında sorunlar hakkında bilgi vermesi, programcıya epey kolaylık sağlar. Node.js, TypeScript ve JavaScript için tümleşik hata ayıklama araçları ile birlikte gelir. Uygulamalarımızla ilgili sorunları belirtir. Visual Studio Code'un sunduğu özellikler sayesinde yazdığımız kod üstünde kesme noktaları belirler, özel durumlarda değişkenleri izleyebilir ve kodumuzu adım adım ilerletebiliriz. Git araçları sayesinde birden fazla katılımcının bulunduğu projeler için de büyük kolaylık sağlar. Herhangi bir uzak sunucuya (GitHub, Azure Web Apps, Visual Studio Team Services vb.) kodu checkin/checkout ederek Git üzerinde bağlantı kurmaya olanak sağlar. Visual Studio Code'un özelliklerinden bahsedip, tanıtımını yaptıktan sonra objektif fikirlerimi size sunmak isterim. Microsoft platformları ile Windows üzerinde geliştirme yaparken yıllardan beri kazandığım deneyim, Visual Studio tümleşik geliştirme ortamı ve Notepad++ ile çalışmaktır. Bu platform için hâlâ bunu tercih etmeye devam edeceğim. Bildiğiniz gibi Visual Studio Community 2015 de ücretsiz sunulurken, bu ikili ve bazı geliştiriciye özel araçlar yeterli oluyor benim için.   Visual Studio Code'un geleceği Linux ve Mac OS X üzerinde daha çok rağbet görebileceğini düşünüyorum. Yeni geliştiriciler, Microsoft platformu ile yazılım dünyasına adım atarlarsa, Visual Studio Code yaygınlığı ilerleyen yıllarda artabilir. Benim için şu anda ihtiyaç listemde değil. Çok ihtiyacım olduğu zamanlar haricinde, Linux üzerinde geliştirme yapmıyorum. Geliştirme yapsam da MS platformları ile etkileşime girmiyorum. Mac OS'a ise iPhone geliştirme için gerek duyuyorum. Artık ticari olarak firmalar (IBM, Microsoft vb.) bulut bilişimi yaygınlaştırmaya para harcıyor. Gelişme araçlarının da oturduğunu düşünüyorum. Tabii ki her zaman daha gelişmiş özellikler gelecek ama bu tarz küçük uygulamalarla geliştiricileri heyecanlandırmaya çalışan bir Microsoft var karşımızda. Çoklu platform yazılımlarının mobil uygulamalar dışında çok değerli olduğunu düşünmüyorum. PhoneGap, Xamarin bunların başını çekiyor. Peki, ASP.NET geliştirmesini veya düzenlemesini Linux üstünde neden yapmalıyım? Mac OS X sahibi geliştiriciler, her zaman makinesinde bir Windows tutmaktadır. Linux geliştiricileri çok katı kurallara sahip değillerse aynı şekilde Windows ve Mac OS X çalıştırmaktadır. Bunu sanal makineyle veya fiziksel kurulumla sağlayabiliyorlar. ASP.NET sunucu tabanlı çalışan ve bir sunucuya yükleme gerektiren bir web teknolojisi. Dolayısıyla da Windows ortamını kullanmak ve Microsoft teknolojileri kullanan bir sunucuya sahip olmak şart. Diğer taraftan, Xamarin'i bundan ayrı tutuyorum. Linux üzerinde Visual Studio Code kullanılmasının avantajı ise kod düzenleme aracının gerçekten çok verimli olması. Visual Studio Code ile PHP, C++ geleneksel editörlerden daha iyi bir kullanım sağlayabilir. Dediğim gibi kullanılacak diller yine Linux üzerinde çalışacak diller olacaktır. Mac OS X tarafında Visual Studio Code ile aynı ılımlı düşüncelerim yok. Xcode yeterince gelişmiş ve geliştiricilerin aşina olduğu bir ortam. Visual Studio Code'un geleceği, yeni yazılım geliştiricilerin kullanım alışkanlıklarına bağlı olacak. Eğer mevcut sisteminizde Sublime Text ya da Atom gibi editör kullanıyorsanız, bunlarla devam edebilirsiniz. Yenilik arayanlar ve yeni başlayanlar için Visual Studio Code iyi bir alternatif.

Assembly Öğreniyorum - 2

Merhabalar arkadaşlar. Bu dersimizde Arm işlemcilerle Assembly öğrenmeye devam edeceğiz. Aynı zamanda kısa kısa problem çözümlerine de yer vereceğim. Bu sayede aktif alıştırmalar yapmanıza olanak sağlanacaktır. Örneğin bir kod yazdığımızda bunun 1 ve 0 lar ile değeri nedir veya 32 bitlik bir sistem de 64 bitlik 2 sayıyı nasıl toplarım gibi mantıksal sorulara da cevap arayacağız. 32 bitlik bir sistemde 64 bitlik 2 sayıyı nasıl toplarım sorusunun cevabını vermek isterim öncelikle. Toplam c ve toplanan iki sayı a ve b olsun. Bu durumda 32 bitlik 2 register kullanmak zorundayız. ARM işlemcimizde toplam register sayısı 16 tanedir. Registerlarımızında kısıtlı olduğunu unutmayalım. Bunun için sayıyı 32 bitlik 2 parçaya bölmemiz gerekir c=a+b   Burada asıl mesele r serisi registerlarımızı kullanırken ilk 32 bitlik bölümde elde olduğu zaman ne yapmamız gerektiğidir. Eldeyi tutmassak sonucu yanlış hesaplamış oluruz. Bunun için c sayısını r4 e veya r3e ekleyeceğiz. S statüs komutu ile c registerı oluşturulur ve elde buraya yazılmış olur. ADDS r5,r2,r1 ADC r6,r3,r4 Bu kısma değindikten sonra ARM işlemcimizde birden fazla komut kullanabileceğimizden bahsetmeliyiz. Bunlar; TEQ, TST, CMP, CNG Gibi komutlardır. Cmp komutu ise iki sayı arasında karşılaştırma yapar Compare kelimlerinin kısaltılmışıdır. Bu işlemi ise iki sayıyı birbirinden çıkartarak yapar eğer fark 0 değilse bu durumda sayılar eşit değildir. CMP r1,r2 Diğer bir örneğimiz ise; 4 ile bir sayıyı çarpacaksanız 4 ile çarpmazsanız sayınız 2 bit sola kaydırırsınız Bu da 2 üzeri 2 ile çarpmak anlamına geliyor. i kaydırmak 2 üstü i ile çarpmak demektir. sağa kaydırma ise tam sayı bölmedi. 3 ü 2 ye bölerseniz 1 elde edersiniz aynı şekilde i bit sağa kaydırırsanız 2 üzeri i ye bölmüş olursunuz. kaydırma işlemleri için c bayrak registerıda kullanılıır. yani status registerı değiştiriliyor bu durumda. LSL  ---------> Logical Shift Left LSR ----------> Logical Shift Right ALSL, ALSR komutları ise aritmetik kaydırma yapmak için kullanılır. Diğer önemli bir sorun ise; Bir sayının negatifini almak için o sayının 2’ye tümleyeneni almanız gerekmektedir. -9 sayıyı - ye çevirmek için 2ye tümleyeni alınacak   -9 u 2 ye tamsayı bölmek istiyorum bunun için 1 bit sağa kaymalı LSR -9,1  ------------> 0111 1011 -> bu negatif değil ASR -9,1 ---->          1111 1011 -----> farkı son biti tekrar kendine yazıyor bu sayede negatiflik duruyor son bit MSB’dir. Yani işaret bitidir. Assembly öğrenirken karşımıza çıkacak en önemli 3 konu şöyledir; 1- Registerlar 2- Komut Formatları 3- Adresleme Modları   Komutlara örnekler: add r1,r2,r3 add r1,r2, #5 add r1,r2,r3, lsl #5 add r1,r2,r3,lsl r4 armda dallanma nasıl oluyor armda 3 tip akışı değiştiren durum mevcut 1. si şartsız dallanma herhangi şartı gözetmeden nereye isteniyorsa oraya dallanır komutumuz B komutudur.   B Adres Örnek; B EXIT . . . EXIT   2. si şartlı dallanma BEQ BNE . . .   B den türetilmiş komutlardır   BEQ durum registerınıdaki Z bitine bakıyor ve 1 se yürütülüyor durum registerındaki Z biti 0 sa komut yürütülmüyor bunu da öncesindeki işlem sağlıyor. AŞAĞIDA ÇIKARTMADA SIFIR oluşmussa z biti 0 ise yürütülmeyecek 1 ise yrütecek SUBS r1,r2,r3 BEQ EXIT . . . EXIT Bazı eklerin anlamları şöyledir; NE -> not equal GT -> greater than AL -> always CS -> carry set PL -> N clear yani pozisitfse   3. durum komutun şartlı yürütülmesidir. alt programa dallanma için BL komutunu kullanıyoruz.   BL YORDAM geri dönüş adresini bir yerde saklamamız lazım o da Link Register(LR). bu sayede geri dönmemiz gerekli yordam bittikten sonra BL link registerda PC registerına kayıt yapmış olur. PC Program Counterdır. R0 dan R15 e kadar genel amaçlı register var R15 de PC registerıdır. BL YORDAM   MOV PC,LR yordama parametre nasıl yollayacağım içiçe 100 yordam çağıracaksam geri dönüşleri nasıl yapacağım bunun çözümü stackdir registerlar stacke yedeklenmelidir bellek bir stack gibi kullanıyoruz. kimi stack kimi heap kimi interrupt için kullanılacak. hepsi ram bellek üzerindedir. 4 tip stack var yukarı genişleyen stack TOS -> Top Of Stack yukarı genişleyen stack stack pointer yazılabilecek boş noktayı gösteriyor aşağı doğru genişleyen stack aşağı tepesini gösterir aşağı doğru genişler stack point yazılacak boş noktayı aşağıya doğru gösterir.  

Assembly Öğreniyorum -1

Eğer benim siteme ve bu yazıya rastladıysanız bilişim ve bilgisayar bilimleri ile ilgileniyorsunuz demektir. Alt seviyeli programlama olan assembly ile işlemcinin de komut setini kullanarak yapamayacağını bir şey yoktur. en alt seviye programlama olduğundan assembly dilini bilgisayar bilimlerinde uzmanım diyen birisinin mutlaka bilmesi gerekir. Normal hayatında uygulamıyorsa dahi en azından assembly dili ile program yazmış veya yazabilecek düzeyde olması beklenir. Bir bilgisayarın mimarisini başka türlü kavrayamaz ve hakim olamazsınız. Yapacağımı küçük bir yazı dizisi olmasına rağmen ilk yazımda sizlere assembly nedir assemler nedir gibi kavramların üzerinde durmayacağım. Bununla ilgili çok sayıda kaynak var. Wikipedia veya bir sürü sitede 80'lerden beri olan kaynaklara rastlayabilirsiniz. Ben size pratik olarak nasıl assembly dilinde program yazabileceğimizi anlatıyor olacağım.   Wikipedia'ya göre assembly dilleri; https://tr.wikipedia.org/wiki/%C3%87evirici_diller Assembly dilinin özel kullanım alanları vardır. Bunlar;  1- Bilgisayar sistemini yakından tanımak için,  2- Device driver (cihaz sürücüleri) yazmak için,  3- Chip’lere program yüklemek için (PIC, microcontroller gibi...)  4- İşletim sistemlerinin yapımında (OS),  5- Şifre kırma ve Hacking işlemleri için,  6- Virüs programları yazmak için,  7- Elektronik tablo’lama (Excel gibi) programlarında. kaynak:(Csharpnedir - eren erener) Birkaç assembly örneği yaparken kullanacağım Arm işlemci olacaktır. Bunun için Texas Instrunmentsin geliştirme kitini kullanacağız. Kullanacağım kitin modeli Texas Instruments Tiva™ C Series EK-TM4C123GXL Geliştirme Kiti'dir. Size 3 adet register ve ramde iş yapan assembly kodunu paylaşacağım. Bu assembly programlarını yazarken ve test ederken Texas Instrumentsin kendi geliştirme ortamını değil keil isimli geliştirme ortamını kullandım. Keil ortamını kurmak için: www.keil.com adresini kullanabilirsiniz. Şu anda temel assembly örnekleri vereceğim. daha sonra bu kodların geniş açıklamasını ve yeni örnekleri de sizinle paylaşıyor olacağım. Arm işlemciler ile assembly öğreniyorum küçük bir yazı dizisiz olacağından siz aşağıdaki assembly kodlarını incelerken serinin diğer yazıları hazırlanıyor olacaktır. İlk Assembly Örneğimiz: AREA main_kod, CODE, READONLY ENTRY   EXPORT SystemInit EXPORT __main EXPORT __use_two_region_memory   __use_two_region_memory EQU 0   SystemInit BX LR   __main    LDR R0,=SAYI1 LDR R1,=SAYI2   LDR R3,[R0] LDR R4,[R1]   ADD R5,R3,R4 SAYI1DCD 5 SAYI2DCD 8     END   İkinci Assembly Örneğimiz: AREA main_kod, CODE, READONLY ENTRY   EXPORT SystemInit EXPORT __main EXPORT __use_two_region_memory   __use_two_region_memory EQU 0   SystemInit BX LR   __main    LDR R0,=SAYI1 LDR R1,=SAYI2   LDR R3,[R0] LDR R4,[R1]   ADD R5,R3,R4   LDR R5,=SONUC STR R6,[R5]   SAYI1DCD 5 SAYI2DCD 8   DONGU B DONGU   AREA bellek, DATA,READWRITE SONUC DCD 0   END   Üçüncü Assembly Örneğimiz: AREA main_kod, CODE, READONLY ENTRY   EXPORT SystemInit EXPORT __main EXPORT __use_two_region_memory   __use_two_region_memory EQU 0   SystemInit BX LR   __main    LDR R0,=SAYI1 LDR R1,=SAYI2   LDR R3,[R0] LDR R4,[R1]   ADD R5,R3,R4 ADD R7,R3,R4, LSL #2   LDR R5,=SONUC STR R6,[R5] STR R5,[R0, #4]   SAYI1DCD 5 SAYI2DCD 8   DONGU B DONGU   AREA bellek, DATA,READWRITE SONUC DCD 0   END   Bir sonraki yazımızda register, komutlar, ram bölgesi vb. kavramları anlatırken aynı zamanda bu uygulamalarımızın adım adım ne yaptığını açıklayacağız.  

AngularJS Başlangıç İpuçları

Bu kategoride angularjs ipuçları vermeye çalışacağım. ilk vereceğim ipucu genel ve yeni başlayanlar için olacaktır. Zaman buldukça angulajs kategorisini ipuçları ve örneklerle geliştireceğim. AngularJS kullanmaya yeni başladıysanız fakat öncesinde javascript veya jquery ile geliştirme yaptıysanız hiç zorlanmayacağınızı söyleyebilirim.  Angularjs ile html tarafında bir değişkenin değerini almak için {{değer}} parantezlerini kullanabilirsiniz. Angularjs'i projenize eklemek için; <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script> taglerini kullanabilirsiniz. ng-init, ng-model,ng-disable,ng-hide,ng-click, ng-bind, ng-repeat gibi direktifler öncelikle işinizi görecektir. scope'lara dikkat etmek gerekir. O an çalıştığını scopetaysanız bir değeri $scope.degerismi veya doğrudan degerismi olarak çağırabilirsiniz. Eğer değişken üst scopetaysa $parent kullanmanız gerekir.