CodeBehind

C# Developer’lar için Python Rehberi – 1

Sep
22

Merhaba,

Bu yazıda – ki seri olmasını ümit ediyorum – bir C# developer için Python-C# karşılaştırmasına değineceğim.

Malum, c# için geliştirme ortamı visual studio ve çoğu c# developer – ülkemiz için – başka bir dil öğrenme konusunda çok istekli olmuyor. Buna iten nedenlerden bazıları yetersiz ingilizce, text editor’lere alışamama gibi nedenler var. Tabiki sektörün c# ve java odaklı olmasınında bunda etkisi çok büyük. Bence temel neden bu olabilir.

Her ne kadar visual studio ile python geliştirme yapılsada global ölçekte sublime, atom gibi editörler kullanılıyor.

Karşılaştırmaya geçmeden önce C# ve python’un genel tanımlarını yapalım.

C#, Microsoft tarafından geliştirilmiş ve şu sıralar 7.0 çıkmış-çıkacak olan yeni nesil object oriented bir programlama dili. Temeli C++ üzerinden geliştirilmiş, olup .Net framework’unun temel parçası ve programlama dilidir. Java’dan oldukça fazla esinlenmiştir.

Bu yıla kadar sadece windows üzerinde çalışırken artık macos ve linux’ta da çalışır hale getirildi.

Syntax’ı C ile benzer ve örnek bir konsol uygulaması yazarsak:

using System;

class Program
{
    static void Main(String[] args)
    {
        Console.WriteLine("Hello, world!");
    }
}

Benzer uygulamayı Python’da yazmak istersek BIF’ler (Built-in function) devreye giriyor.

$ python

$>> print("hello world")

Bu kadar basit. Derlemeye gerek olmadan doğrudan Python içinde gömülü fonksiyonlar ile istediğimizi yapabildik.

Temelde Python, Java gibi Yüksek Seviye Diller işlenme tipine göre 2’ye ayrılır.

 

Interpreters ve Compilers

Bir Interpreter yani yorumlayıcı yazılan kodu okur ve işlemeye başlar. Compiler yani derleyici ise öncelikle kodu çalıştırmadan dönüştürmeye ihtiyaç duyar. Bu dönüştürme olmadan yazılan program çalışmaz. Ancak bir kere dönüştürülen program, istenilen sayıda tekrar tekrar çalıştırılabilir.

Bu bağlamda C# compiler’a ihtiyaç duyarken, Python için interpreter yeterlidir. Interpreter’i kullanmak için 2 yöntem var. Komut satırı modu ve script modu.

Komut satırında Python çalıştırmak için linux’da terminal windows’da command.exe gerekiyor.

Terminal’de >>python yazdığımızda Python Interpreter devreye girer. Aşağıdaki print metodunu çalıştırıp sonuç alabiliriz.

>> print("hello world")

Script modu için herhangi bir text editor’de .py soyadlı bir dosya açıp içine yukarıda kodu yazdıktan sonra yine terminal veya command’da aşağıdaki kodu çalıştıralım.

>> python ornek.py

Aynı sonucu elde etmiş olduk.

 

Değişkenler

Yazılım dünyasında ihtiyaca yönelik olarak epey değişken bulunuyor. Integer, String, Double vb. pek çok değişken var.

C#’ın aksine Python’da bir değişken tanımlarken başına bir belirteç koymaya gerek yok.

C#:

int a = 4;

Python:

a = 4

Oldukça basit. Tipinden emin olmadığınız bir değişken için type metodunu kullanabilirsiniz.

>> type("Hello, World!")
<type 'str'>

Matematiksel işlemler benzer şekilde yapılıyor. O nedenle değinmiyorum.

2. yazıda fonksiyonlara değineceğiz.

Görüşmek üzere.

 

C# 7 – Yeni özellikler

Apr
07

Microsoft’un Build 2016 etkinliği ile beraber C#’ın yeni özelliklerine dair bilgiler de gelmeye başladı.

En belirgin özellikler

  • C#’ı artık istediğimiz editörle yazabileceğiz. Yeni Roslyn compiler’ı buna olanak veriyor.
  • C#’ta açık kaynak kodlu hale geldi.
  • C#artık Windows’un yanı sıra Mac ve Linux’ta da kullanılabilir.
  • Xamarin sayesinde Windows uygulamaları dışında iOS’a ve Android’e de uygulama geliştirilebilecek
  • tuples, record types ve patter matching’le ilgili geliştirmeler var.

 

Detaylı tanıtım video’su için http://www.c-sharpcorner.com/article/what-is-the-future-of-C-Sharp/

Yeni özelliklerin kullanımı için https://www.kenneth-truyers.net/2016/01/20/new-features-in-c-sharp-7/

Yapay Zeka – 1

Jan
06

 

Dün Facebook’un kurucu Mark Zuckerberg’in Iron Man filmindeki asistan Jarvis gibi bir yapay zeka yapmak istediği haberi vardı.

 

Benim elimin altında 100’lerce zeki mühendis yok. Ancak bu benzer bir yapay zekayı tasarlamak nasıl olur sorunusu yanıtlamamıza engel değil.

 

Sorulara yanıt arayarak başlayabiliriz.

 

Yapay zeka nedir?

Filmden hatırlarsak Tony Stark’ın çeşitli konularla ektileşime geçtiği ve kendine karar kalabilen –izin verildiği ölçüde- bir yapı olarak özetleyebiliriz.

 

Detaya inersek:

  • Kişinin komutlarını (sesli veya yazılı) yorumlayıp veritabanından uygun işlemi bularak geri bildirim yapabilmeli.
  • Kurgulanan düşünme yapısına göre verdiği yanıtlar arasından doğru seçeneği seçebilmeli. Hata yapabilme riski olabildiğince insan davranışı ekleyecektir.
  • Ortamda yer alanla iletişime geçebilmeli ve kişiye bildirim yapıp istenilen işlemi yapabilmeli.

 

Nasıl düşünmeli?

Bu soruyu cevaplarken kendimizi düşünelim. Temel insan davranışı yıllar içerisinde aile, sosyal çevre vb. kişisel deneyimlere ile elde edilir. Ancak yapay zekanın bu kadar zamanı ve imkanı yok. Bu nedenle yönetilecek en temel soruyu bile anlayıp cevaplandırabilmesi için programatik olarak bunun yazılmış olması gerek.

 

Örneğin “merhaba” sorusuna cevap verdiğinizi düşünün. O anki modunuz yada kişiliğinize göre vereceğiniz “merhaba. Nasılsın?” yanıtı için belki 100’lerce yanıt bulacaksınız.

 

Bu nedenle Facebook gibi milyonlarca insanın her gün düzenli olarak etkileşime geçtiği bir yapıda bu olasılıkları bulmak çok zor değil. Hali hazırda anlık sohbet programı WhatsApp’ı da bu kervana eklerseniz aslında bu veriyi elde etmenin basit bir veritabanı sorgusu olduğunu görmek zor olmayacaktır.

 

İstenilen cevaplar için sadece facebook ve whatsapp bile yeterli başlangıç bilgisini verebilir. Üstelik hemen her dilde!

 

Programlama

Basit bir konsol uygulaması olarak yapay zekamızı kodlamaya başlayabiliriz.

 

Yapay zekanın adımınız bildiğini varsayıyorum.

  • Merhaba Behran!
  • Nasılsın?

 

Verilecek cevap için birçok seçenek var değil mi?

 

Günlük kullanımımızdan birkaç cevap türetelim.

“İyiyim. Sen nasılsın?” , “İyidir abi sen nasılsın?”, “iyi abi ne olsun? Senden naber?”

 

Örneğin Facebook’ta bu işi yapıyor olsam hazırlayacağım sorgu (TSQL) şöyle olurdu

“Select messages from dbMessages where parentMessageText like ’Nasılsın?’ ”

(Mantıksal olarak böyle. Tabiki parametreler vs. farklıdır : ] )

 

Listeyi uzatmak mümkün. “İyiyim. Sen nasılsın?” cevabını veriyorum.

 

Burada duralım. Bir insanla bu dialog kişiye göre sonsuz olasılıkla devam edebilir. Bu nedenle yapay zekamıza bir kişilik katmak istiyorsak belirli parametrelere göre yanıt üretebilmeli.

 

Birkaç parametre üretelim.

 

  • Sosyallik ( konuşkan bir yapay zeka bazen sıkıcı olabilir : ] )
  • Mutluluk
  • Üzgünlük

 

Yapay zekanın vereceği yanıt için bu parametrelerle bir bağlantı olması gerek. Kullandığımız emojiler ne güne duruyor! (bunu ben uydurdum. Belki işe yarıyordur kimbilir)

 

Evet temel olarak yapay zeka üzerine kaba taslak bir yapı oluşturduk. İkinci yazı ile biraz daha detaya ineceğim.

 

Görüşmek üzere.

jQuery EasyTables for Datatable.js v1.0

Jan
02

Hi!

I’ve been working with jQuery Datatables.js for a while with ASP.Net MVC projects. I implemented a small helper to create razor pages with datatables.

Go to my git repository and check it out – https://github.com/behrank/EasyTables 

thank you!

Ajax file upload with jQuery and Asp.Net MVC

Sep
24

In this article, I’ll try to give an example for file upload with using jQuery to a ASP.NET MVC controller.

Step 1: Creating Web Application

I’m going start working on our controller.

To create a simple MVC project:

  1. Open Visual Studio
  2. Click “New Project” and select “ASP.NET Web Application”
  3. Select empty project and click to MVC then click Ok.

Thats it! We have an empty mvc project. Right click to “controllers” on “Solution Explorer” tab. Click “Add” then “Controller” and name it as “Home”.

public class HomeController : Controller
{
   //
   // GET: /File/
   public ActionResult Index()
   {
        return View();
   }
}

We need a page for upload process so right click to somewhere of Index method then click to “Add View”. Uncheck “Use a layout page” then click to Add.
We wont work on this page until our controller prepared.

Now we can create a method which will handle process when client sent its upload request to server.

Simply add this method below Index.

 public JsonResult UploadFile(HttpPostedFileBase file)
 {
     var result = DoSomethingWithFile(file);
     return Json(result, JsonRequestBehavior.AllowGet);
 }

 

What is HttpPostedFileBase class? 
This is the base class for classes that provide access to individual files that have been uploaded by a client. For more detail check MSDN

What is JsonRequestBehavior?
Specifies wheter HTTP Get requests from clients.

 

We have declared a “result” variable in UploadFile method. With this, we will tell to client to what happened to his file. Saved or not. Simple.

Now we will prepare DoSomethingWithFile method.

Add following code to controller

private bool DoSomethingWithFile(HttpPostedFileBase file)
{
  try
  {
       var strFileLocation = "/temp/" + file.FileName;
       file.SaveAs(HttpContext.Server.MapPath(strFileLocation));
       return true;
  }
  catch (Exception)
  {
      return false;
  }
}

By the way we need to add a temp folder to save files. Rgiht click to project name and click “Add” then “Folder”. Name it as “temp”.

We are done with server side right now. Lets get started on our web page.

 

Step 2: Creating Page

Click to Views – File then Index.cshtml file from solution explorer.

Here we go.

Add jQuery library to page by following to head  tag:

<script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>

I’m going to use standart file input but we need a little trick here :)First of all we need a button and an input element to send file to server.

I’m going to create them into a container. You can put them anywhere you want of course 🙂

<button id="btn-upload">Send File</button>
<input type="file" id="file-uploader" />

If you want to create a custom design for upload which I preffer we need to trigger choose file event via jquery.

Usually a choose file event only triggered by inputs “choose file” button when its clicked. Let’s change the css of file input and make its width and height as 0. Also i’ll give some style to our button.

<style>
.upload-container {
   margin-left: auto;
   margin-right: auto;
   width: 125px;
   height: 35px;
   margin-top: 20%;
   background-color: #ccc;
   padding: 10px;
   -moz-border-radius: 4px;
   -webkit-border-radius: 4px;
   border-radius: 4px;
 } 
#btn-upload{
   width: 125px;
   padding-top: 10px;
   padding-bottom: 10px;
   border: none;
   text-align: center;
   background-color: rgb(113, 157, 163);
   color: white;
   -moz-border-radius: 4px;
   -webkit-border-radius: 4px;
   border-radius: 4px;
   line-height: 100%;
   cursor: pointer;
}
#file-uploader{
   width:0px;
}
</style>

We need to trigger choose file event when user clicks to our button. So to do this we need a jQuery script.

Let’s work on it.

<script type="text/javascript">
$(function () {
    $("#btn-upload").on("click", function () {
    $('#file-uploader').click();
  });
});
</script>

Quite simple isnt it?
We picked our file to upload. Whats next?

I want to send file to server after choosing a file. So we need to improve jquery code with few lines to add more functionality to “Change” event of file input.

<script type="text/javascript">
$(function () {
    $("#btn-upload").on("click", function () {
    $('#file-uploader').click();
  });
});
$(function () {
   $("#imageFile").on("change", function () {
   SubmitFile(); //This is going to be our upload function. 
 });
});
</script>

Now our ajax post will only work when file input change event triggered. I mean user chooses a file upload to server.

Let’s create a function for to send file to server.

<script type="text/javascript">
$(function () {
    $("#btn-upload").on("click", function () {
    $('#file-uploader').click();
  });
});
$(function () {
   $("#file-uploader").on("change", function () {
   SubmitFile(); //This is our upload function. 
 });
});
function SubmitFile() {
 var formData = new FormData(); //We need to create form. Beause we are sending a file here!
 var file = document.getElementById("file-uploader").files[0]; //file

 formData.append("file", file); //Added file to our form

 $.ajax({
    type: "POST",
    url: '@Url.Action("UploadFile","Home")', //Name of action and controller
    data: formData,
    dataType: 'json',
    contentType: false,
    processData: false,
    beforeSend: function () {
    //this event is unneccesary. You can use it for a loader. Triggers before sending data.
    $("#btn-upload").text("Uploading");
    },
    success: function () {
    //this event unneccesary too. I prefer to use it for showing a dialog to tell user "Hey, It's uploaded!"
    //Success doesnt mean file saved on server. It means only post succeed.
    $("#btn-upload").text('Hey, Its uploaded!');
    }
 });
}
</script>

Now we created our page.

 

Go head and run the project.

Summary

This is a simple uploader but its easy modify for more features like mutliple file upload or add a loader animation.

Sample project available on my Git

 

 

 

 

 

 

 

 

 

 

Swift Cheat Sheet

Jul
28

I have prepared a cheat sheet for Apple’s new language.

Swift Cheat Sheet

 

50 Visually Appealing CSS Tutorials & Techniques

Jul
23

There is nice post about CSS techniques on Speckyboy // CSS ile oluşturabileceğiniz görseller ile ilgili örnekler
http://speckyboy.com/2014/07/21/50-css-tutorials-techniques/

2013 Top 50 jQuery Plugins

Jan
01

SpeckyBoy’dan faydalı bir paylaşım daha..

2013 için en iyi 50 jQuery eklentileri

http://speckyboy.com/2013/12/11/jquery-plugins-2013/

 

jQuery Nested Plugin

Jan
01

Bu kadar gördüğüm en iyi jQuery plugin’lerinden biri.

http://suprb.com/apps/nested/

Özetle multi-column ve dinamik grid arayüz oluşturuyor. Deneyin derim..

 

2013 Top 50 Css Tools

Jan
01

2013 yılında CSS için en iyi 50 araç..
http://speckyboy.com/2013/12/16/50-css-tools-resources-2013/