Dünyanın İlk Günü

Dünyanın İlk Günü

Beyazıt Akman tarafından yazılan romanda, Fatih Sultan Mehmet ve İstanbul'un fethi konu alınıyor. Sultan Mehmet'in Fatih olma sürecine ilaveten, eklenen yan hikayelerle, başta yeniçeriler olmak üzere, öne çıkan karakterlerin hayat hikayelerine ve gelişim süreçlerine yer veriyor.

Yazarın bu konuda çokça okuma yaptığı, romanı yazmadan önce konuyu iyice özümsediği ortada. Zaten kitabın kaynakça bölümüne bakıldığı zamanda bu açıkça belli oluyor. Roman, aynı zamanda tarih bilgimize de geniş katkı sağlıyor.

Roman içerisinde çok fazla karakterin hikayesine yer verilmesi konuyu bazen dağıtabiliyor. Zaman zaman sıkıldığım bölümler de mevcut. Ayrıca, roman dili, örneğin bir İskender Pala ile karşılaştırıldığı zaman, o kadar akıcı değil. Edebi bir hava vermiyor. Bazı paragrafları tekrar okumak zorunda hissediyorsunuz.

Tarihe, ders kitapları üzerinden değil de romanlar üzerinden tanık olmayı seviyorsanız, yazarın eserini de seveceksiniz. Yazarın tarih bilgisine ve bunu karakterler üzerinde anlatmasına da hayranlık duyacaksınız.

Sayfa Sayısı: 630
Puan: 6 / 10

Abum Rabum

Abum Rabum

İskender Pala tarafından yazılan romanda, üç büyük semavi dinin atası Hz. İbrahim'i konu alıyor. Hz. İbrahim'in mirası peşine düşen MİT, CIA, MOSSAD ile Zelotlar ve Grup Kardeşlik gibi radikal örgütlerin mücadelesinin konu edindiği polisiye bir roman şeklinde ilerliyor.

Diğer İskender Pala kitaplarında olduğu gibi, olay kurgusundan ziyade, Mezopotamya'nın kültürel ve dinsel tarihi üzerinde durularak, okuyucunun bu konuda ufkunun açılmasına sebep oluyor. Her şeyin başlangıcı gibi gösterilen Yunan medeniyetinden çok önceleri, Mezopotamya’da bir medeniyetin oluştuğu fikri sık sık işleniyor.

Kitabın çarpıcı bir sonla bitmiyor oluşu yine hayal kırıklığı oluşturuyor ama yazarın diğer eserlerinden bu duruma alışkınız.

İskender Pala’nın Babil'de Ölüm İstanbul'da Aşk eserini sevdiyseniz, bunu da seveceksiniz. Kitabı okurken sürekli aklım oraya gitti, bu yüzden kitabın sonunu da hemen tahmin edebildim.

Sayfa Sayısı: 528
Puan: 8 / 10

Newton-Raphson Metodu ile Fonksiyon Kök Bulma

Newton-Raphson metodu, sayısal analizde, eşitlik köklerinin bulunmasında en yaygın kullanılan metotlardan birisidir. Başlangıç için tahmini bir kök değeri seçilerek, yapılan iterasyon sonucu gerçek kök değerine oldukça yakın bir değere ulaşılır.

Newton-Raphson

Newton-Raphson metodunun C# dilinde yazılmış kaynak kodu yer almaktadır.

public class NewtonRaphson
{
    public uint MaxIteration { get; set; } = 50;
    public double Epsilon { get; set; } = 0.000001;

    public double Solve(Func<double, double> f, Func<double, double> df, double initialGuess)
    {
        var xn = initialGuess;

        for (var i = 0; i < this.MaxIteration; i++)
        {
            var xn1 = xn - f.Invoke(xn) / df.Invoke(xn);

            if (Math.Abs(xn - xn1) < this.Epsilon)
            {
                return xn1;
            }

            xn = xn1;
        }

        return xn;
    }
}

Örneğin f(x) = x^2 - 2 fonksiyonun köklerini bulmak için, metodu aşağıdaki şekilde çağırabiliriz. Tahmini kök değeri olarak 1 seçilmiştir.

var solver = new NewtonRaphson();
var root = solver.Solve(x => x * x - 2, x => 2 * x, 1);

Benzer şekilde, f(x) = x - Cos(x) fonksiyonun köklerini bulmak için ise, metodu aşağıdaki şekilde çağırabiliriz. f(x) = 1 + Sin(x) fonksiyonun türevidir.

var solver = new NewtonRaphson();
var root = solver.Solve(x => x - Math.Cos(x), x => 1 + Math.Sin(x), 2);
Etiketler:  C#

Bitcoin Altında Yatan Teknoloji / Blockchain

Blockchain, Bitcoin altında yatan teknolojidir.

Bitcoin para transferi konusunda alternatif bir yaklaşım getirmektedir. Mevcut sistemde, iki hesap arasında para transferi için, bankalar, WesternUnion, PayPal gibi aracı kurumlar kullanılır. Bu yöntem ile para transferi maliyetli ve yavaştır. Bitcoin ile, çok daha düşük maliyetlerle ve daha hızlı bir şekilde transfer işlemi yapmak mümkündür. Bitcoin'in bu avantajı sunmasının altında yatan ana sebep, aracı bir kuruma ihtiyaç duymamasıdır.

Bitcoin ile, merkezi otorite tarafından kontrol edilmeksizin ve dolayısıyla herhangi bir regülasyona tabi olmaksızın para transferi işlemi yapmak mümkündür. Merkez bankası, PayPal vb. merkezi otorite, yapılan transferin geçerliliğini kontrol eden ve her iki tarafa güven veren sistemdir. Bu görev, Bitcoin altında yatan Blockchain sistemi ile yerine getirilmektedir. Blockchain, şeffaf, merkezi olmayan, aracı yapılara ihtiyaç duymayan bir çözüm önerir.

Blockchain

Blockchain sisteminde veriler, katılımcılara açık bir dağıtık (distributed) ağ üzerinde, ağ üzerindeki her makinede birer kopyası olacak şekilde, blok (block) adı verdiğimiz yapılar üzerinde tutulur.

Blok, blockchain üzerinde, verilerin saklandığı yapılardır. Bloklar, bir zincir şeklinde birbirine bağlanarak dizilirler. Örnek gösterim aşağıda verilmiştir.

Blockchain Blocks

Zincir üzerindeki her blok, kendinden önceki bloğu bilmektedir. Dolayısıyla, bir önceki bloğun adresine sahiptir.

Blok, içerisindeki veriler ve üst bilgi (header) şeklinde iki bölümden oluşur. Üst bilgi, veri bütünlüğünü kontrol etmek, blok oluşturulduktan sonra, içerisindeki verilerin değiştirilmesini önlemek için kullanılır. Bunu sağlamak için, kriptografik özetleme (cryptographic hashing) işlemlerinden yararlanılır.

Her blok tekil bir adrese sahiptir. Blok üst bilgisi (header) içerisinde temel olarak, bloğun adresi, önceki bloğun adresi ve blok içerisindeki verilere ait Merkle kök değeri yer alır.

Blok adresi üretmek için özetleme (hash) fonksiyonlarından yararlanılır. Blok içerisindeki veriler ve önceki bloğun adresi kullanılarak bu değer hesaplanır.

Blok oluşturma işlemi, maliyetli bir işlemdir. Örneğin, Bitcoin sisteminde, bir blok üretimi 10 dakika kadar sürmektedir. Kötü niyetli bir kullanıcının bir bloğun verisini ve adresini değiştirmesi durumunda, blok adresi sonraki bloğun adres hesabında kullanıldığı için, kendinden sonraki tüm blok adreslerinin de yeniden hesaplanması gerekecektir. Bu sırada, ağ içerisinde yeni bloklar üretilmeye devam etmektedir. Blok oluşturma işleminin yüksek maliyetinden dolayı, blok içeriklerini değiştirmek pratikte mümkün değildir.

Blockchain üzerindeki tüm bloklar, dağıtık ağ (distributed network) üzerindeki tüm makinelerde kopyalar halinde bulunur. Dolayısıyla, ağ üzerindeki makinelerden birisinin, geçici ya da kalıcı olarak devre dışı kalması durumunda herhangi bir veri kaybı ya da aksama yaşanmaz. Bu durum, merkezi yapının getirdiği riskleri ortadan kaldırmaktadır.

Blockchain Network

Blockchain sistemi üzerinde sürekli yeni veriler dahil edilir. Dahil edilen veriler, ağ üzerindeki makinelerde bloklar şeklinde saklanır. Ağ üzerindeki makinelerin yeni bloklar üretme işlemine, madencilik (mining) denir. Blok oluşturma işlemi sırasında, blok içerisinde yer alacak verilerden Merkle ağacı ve kök değeri hesaplanır. Daha sonra, önceki bloğun adresi de kullanılarak, oluşturulacak yeni blok için uygun bir adres üretilmeye çalışılır. Adres bulma işlemi oldukça maliyetli bir işlemdir. Üretilecek blok adresi için bazı kısıtlamalar vardır. Dolayısıyla, uygun bir adres bulana kadar birçok deneme yapılır. Uygun adresi bulan ilk makine, oluşturduğu yeni bloğu ağ içerisindeki diğer makinelerle paylaşır. Diğer makinelerin çoğunluğunun yeni bloğu onaylaması durumunda, yeni oluşturulan blok blockchain içerisine eklenir. Bitcoin sisteminde, uygun adresi bulan makine Bitcoin ile ödüllendirilir.

.NET Proje - Website Visitor Tracker

Website Visitor Tracker uygulaması, web sitesine yapılan ziyaretlerin kayıt altına alındığı ve raporlandığı bir uygulamadır. Bu uygulama ile, yapılan tüm ziyaretler ve siteyi görüntüleyen kullanıcının bilgileri loglanarak, site sahibi için ziyaretçi raporları oluşturulur.

Proje ile, farklı müşterilerin ziyeretçi bilgilerinin ortak bir veritabanı üzerinde saklandığı, bulut üzerinden çalışan bir .NET uygulaması hazırlanması amaçlanmıştır.

Website Visitor Tracker

Projede bileşenleri ve kullanılacak teknolojiler aşağıdaki gibidir:

ASP.NET MVC Web Uygulaması

Web arayüzü kullanarak, site bilgilerini yönetmek ve ziyaretçi raporlarına erişmek için hazırlanacak web uygulaması

Apache Cordova Mobil Uygulaması

Ziyaretçi raporlarına mobil cihazlar üzerinden erişmek için hazırlanacak mobil uygulama

SQL Server

Ziyaretçi bilgilerinin tutulacağı veritabanı

LINQ to SQL

SQL Server üzerinde sorgulamalar yapma ve verileri yönetmek için kullanacağımız .NET bileşeni

C#, HTML, CSS

Uygulama C# ile yazılacaktır. Ekranlar için HTML ve CSS konuları konusunda bilgi sahibi olmak gerekecektir.

.NET Proje - Key Value Database

Key Value Database sistemleri, sadece bir anahtar ve bu anahtara sahip değerin saklandığı veritabanı sistemleridir. Saklanan veriler ilişkisel ya da hiyerarşik değildir ve veri saklama sırasında kullanılan anahtar ile istenen veriye tekrar erişilebilir.

Proje ile, farklı müşterilerin anahtar-değer verilerinin ortak bir veritabanı üzerinde saklandığı, bulut üzerinden çalışan bir .NET uygulaması hazırlanması amaçlanmıştır.

Key Value Database

Projede bileşenleri ve kullanılacak teknolojiler aşağıdaki gibidir:

ASP.NET MVC Web Uygulaması

Web arayüzü kullanarak veritabanı üzerinde değer kaydetmek ve kaydedilen değerleri raporlamak için hazırlanacak web uygulaması

ASP.NET Web API

Veritabanı üzerinde değer saklama, değer sorgulama vb. işlemlerin servis aracılığıyla yapılması için hazırlanancak servis katmanı

noSQL

Değerleri saklamak için kullanılacak, anahtar-değer deposu. Hangi noSQL teknolojisinin kullanılacağı proje sırasında karar verilecektir.

SQL Server

Müşteri bilgilerinin tutulacağı veritabanı

LINQ to SQL

SQL Server üzerinde sorgulamalar yapma ve verileri yönetmek için kullanacağımız .NET bileşeni

C#, HTML, CSS

Uygulama C# ile yazılacaktır. Ekranlar için HTML ve CSS konuları konusunda bilgi sahibi olmak gerekecektir.

C# 6.0 Exception Filter

tip

try catch kullanımı sırasında, catch bloğunun çalışması için koşul yazılabilir.

Örnek

try
{
    // Code
}
catch (ArgumentException ex) when (ex.ParamName == "p1")
{
    // ex.ParamName == "p1" koşulu sağlanması durumunda catch bloğu çalışır.
}
Etiketler:  C#

Infix, Prefix, Postfix Notasyonu

Bilgisayarda 3 x 4 + 5 vb. aritmetik ifadeleri çözümlemek zor olabilir. Yazacağımız kodda, işlem öncelikleri ve parantezler ifade sonucunu bulmayı zorlaştırabilir. Bu yüzden, aritmetik ifadeleri göstermek için farklı notasyonlar geliştirilmiştir.

Infix Notasyonu

Halihazırda kullandığımız notasyondur. 3 + 4 örneğinde olduğu gibi, operatörler ifade içerisindedir.

3 + 4 x 5 örneğinde olduğu gibi, operatörler arasında işlem önceliği vardır. Verilen örnekte, ilk olarak çarpma işlemi, ardından toplama işlemi yapılır.

İşlem sırasını değiştirmek için parantezler kullanılır. Örneğin, (3 + 4) x 5

Prefix Notasyonu (Polish Notation)

+34 örneğinde olduğu gibi operatörler, işleme sokulacak ifadelerin öncesine yazılır. Verilen örnekte, iki sayı toplanmak istenmektedir.

+3x45 örneğinde olduğu gibi, operatörler arasında işlem önceliği vardır. Verilen örnekte, ilk olarak çarpma işlemi, ardından, bulunan çarpım sonucu ile toplama işlemi yapılır. (Daha anlaşılır olması için +3x45 ifadesini +3[x45] şeklinde anlayabiliriz.)

İşlem önceliğini değiştirmek için parantez kullanmak gerekmez. Örneğin, (3 + 4) x 5 ifadesi x+345 şeklinde ifade edilir. Toplama işlemi yapıldıktan sonra, bulunan toplam sonucuna çarpma işlemi uygulanır. (Daha anlaşılır olması için x+345 ifadesini x[+34]5 şeklinde anlayabiliriz.)

Postfix Notasyonu (Reverse Polish Notation)

34+ örneğinde olduğu gibi operatörler, işleme sokulacak ifadelerin sonrasına yazılır. Verilen örnekte, iki sayı toplanmak istenmektedir.

345x+ örneğinde olduğu gibi, operatörler arasında işlem önceliği vardır. Verilen örnekte, ilk olarak çarpma işlemi, ardından, bulunan çarpım sonucu ile toplama işlemi yapılır. (Daha anlaşılır olması için 345x+ ifadesini 3[45x]+ şeklinde anlayabiliriz.)

İşlem önceliğini değiştirmek için parantez kullanmak gerekmez. Örneğin, (3 + 4) x 5 ifadesi 34+5x şeklinde ifade edilir. Toplama işlemi yapıldıktan sonra, bulunan toplam sonucuna çarpma işlemi uygulanır. (Daha anlaşılır olması için 34+5x ifadesini [34+]5x şeklinde anlayabiliriz.)

Tüm notasyonlarda işlem önceliği; parantez, üs alma, çarpma / bölme, toplama / çıkarma şeklindedir. Aynı işlem önceliğine sahip birden fazla ifadenin gelmesi durumunda, üs alma hariç, soldan sağa doğru işlemler yapılır.

.NET Proje - Link Kısaltma Servisi

Link Kısaltma Servisi uzun linkleri kısaltmak için kullanılan bir yöntemdir. Genel olarak, Twitter, SMS vb. karakter sınırı olan ortamlarda uzun linkleri paylaşmak ve link tıklamalarını raporlamak için tercih edilir.

Proje ile, kullanıcıların uzun linklerini kısaltabileceği ve görüntüleme raporlarına erişebileceği, bulut üzerinden çalışan bir .NET uygulaması hazırlanması amaçlanmıştır.

Link kısaltma işlemi sırasında, linkleri açmak için parola ve süre belirleme, kullanıcı kısıtlama, link görüntülenme sırasında bildirimler alma vb. bir dizi özellik de uygulanacaktır.

Link Kısaltma Servisi

Projede bileşenleri ve kullanılacak teknolojiler aşağıdaki gibidir:

ASP.NET MVC Web Uygulaması

Linkleri kısaltmak ve link tıklama raporlarına erişmek için hazırlanacak web uygulaması

SQL Server

Link verilerinin ve yapılan tıklamaların tutulacağı veritabanı

LINQ to SQL

Veritanını üzerinde sorgulamalar yapma ve verileri yönetmek için kullanacağımız .NET bileşeni

SMTP

Link tıklamalarını link sahiplerine bildirmek için kullanılacak, elektronik posta gönderme protokolü

C#, HTML, CSS

Uygulama C# ile yazılacaktır. Ekranlar için HTML ve CSS konuları konusunda bilgi sahibi olmak gerekecektir.

AJAX

AJAX (Asynchronous JavaScript And XML)

AJAX ile web sayfası yüklendikten sonra, sunucu üzerine veri göndermek ve sunucudan veri almak mümkündür. Böylece, sayfa yenilenmeden, sayfanın belirli bir bölümünün, sunucu tarafından alınan verilerle yenilenebilir.

AJAX

Sunucu ile iletişimi sağlamak için XMLHttpRequest nesnesi kullanılır. Tüm modern tarayıcılar XMLHttpRequest nesnesini destekler.

XMLHttpRequest nesnesi metotları

open(method, url, async) isteği oluşturur. method GET ya da POST olabilir. url iletişimin kurulacağı adrestir. async ise, iletişimin senkron ya da asenkron bir şekilde yapılacağını belirler. Asenkron işlemde, sunucu cevabı beklenmeksizin sayfa çalışmaya devam eder.

send() oluşturulan istediği sunucuya gönderir. method GET olarak seçildiği zaman kullanılır.

send(str) oluşturulan istediği sunucuya gönderir. method POST olarak seçildiği zaman kullanılır.

XMLHttpRequest nesnesi özellikleri

readyState XMLHttpRequest nesnesinin mevcut durumunu gösterir. 4 değeri, sunucu ile iletişimin kurulduğunu ve cevabın hazır olduğunu gösterir.

onreadystatechange readyState özelliğinde bir değişim olduğu zaman çağrılır. Örneğin, sunucuya yapılan istediğin tamamlanması durumunda tetiklenir.

status sunucudan alınan cevabın durumunu gösterir. 200 OK, 404 Not Found, 500 Internal Server Error vb. Ayrıca statusText özelliği de mevcuttur.

responseText sunucudan alınan cevaptır. Eğer sunucudan XML sonuç alınıyorsa, responseXML özelliği de kullanılabilir.

Örnek AJAX Kullanımı

<script type='text/javascript'>

    var request = new XMLHttpRequest();

    request.onreadystatechange = function () {
        // Sunucu cevabı hazır ve sunucudan bir hata alınmadıysa (200: OK)
        if (this.readyState == 4 && this.status == 200) {
            // Sunucudan dönen cevap
            var txt = this.responseText;
        }
    };

    // İstek oluşturuluyor.
    request.open("GET", "demo.aspx", true);

    // İstek gönderiliyor.
    request.send();

</script>

JQuery ile AJAX Kullanımı

JQuery kütüphanesi ile, tüm tarayıcılar ile uyumlu ve daha basit bir şekilde AJAX kullanımı mümkündür.

$.ajax() AJAX istediği oluşturur.

Örneğin, ASP.NET demo.aspx sayfası arkasında yer alan aşağıdaki metodun sonucunu sayfada göstermek istediğimiz zaman:

// JavaScript tarafından bu metoda erişebilmek için eklenmesi ve metodun statik olarak tanımlanması gerekiyor.
[WebMethod]
public static string Method1(string name, int number)
{
    return name + number;
}

JQuery ile yazılmış ilgili AJAX isteği:

<script type='text/javascript'>

    $.ajax({
        type: "POST", // GET ya da POST olabilir
        url: "demo.aspx/Method1", // Url
        data: '{"name":"selami","number":"3"}', // Sunucuya gönderilen veri
        contentType: "application/json",
        success: function (msg) {
            alert(msg.d);
        },
        error: function (err) { alert(err.responseText); }
    });

</script>

Data fazla detay için http://api.jquery.com/jquery.ajax/

Etiketler:  JavaScript
Sayfa 1 2 3

Kategoriler

Algoritma (4), Cheat Sheet (2), İpucu (4), Kendime Not (1), Kitap (2), Kod (5), Proje (4), Veritabanı (3), Workshop (3)

Etiketler

C# (10) HTML (1) JavaScript (2) SQL (3)

İngilizce / Türkçe

İngilizce / Türkçe kelime listesi kendime not