13 Haziran 2017 Salı

Amsterdam Şehir İçi Ulaşım Tavsiyeleri

Hollanda'nın başkenti Amsterdam için bir gezi planlıyor ve şehir içi ulaşımın nasıl olacağını merak ediyorsanız bu yazıya bir göz atın isterim. Fazla uzatmadan net bilgi vermeye çalışacağım. Öncelikle belirteceğim durumlar Haziran 2017 için geçerli olan durumlar ve fiyatlardır. Yıllar sonra bu postu okuyup buna göre davranmamanızı tavsiye ederim.

Amsterdam'da 3 günlük bir gezi planı üzerinde duracağım. Bulunduğum konum olarak Amsterdam Id otelinden ulaşım olanaklarını aktaracağım. Bu otel Amsterdam Sloterdijk tren istasyonuna oldukça yakın. Konum bilgisi için tıklayabilirsiniz.

Amsterdam'da 3 günlük bir gezi için multi-day ticket almak uyguna geliyor. Ulaşım ücretleri 2.5 ile 3.5 euro arasında değişmektedir. Bu yüzden ilk tavsiyem kesinlike multi - day ticket almanız. Böylece sınırsız toplu ulaşım imkanınız oluyor fakat karışıklık burada başlıyor. Amsterdam'da toplu ulaşım için birkaç yöntem var.

  1. NS Tickets & Service
  2. GVB Tickets & Info
  3. I amsterdam City Card
  4. EBS Tickets & Info
  5. Connexxion Tickets & Info
NS biletleri trenlerde, otobüslerde, tramlarda, metroda ve feribotlarda kullanılabilir. Özellikle trenlerde diyorum çünkü diğer kartların biletleri ile trenlere ( metroları kastetmiyorum ) binilmiyor. Amsterdam Id otelinden merkez tren istasyonuna (Centraal Station) en kolay gidiş de trenle olduğu için NS almak mantıklı hale geliyor. Çünkü diğer kartlar ya aktarma ile merkeze ulaşabiliyor ya da merkeze daha uzak yerlerden geçen otobüslere sahip. NS kart (Amsterdam Travel Ticket) için ücretlendirme 1 gün için €16, 2 gün için €21, 3 gün için €26. Malesef 3 güne kadar multi day yapabiliyorsunuz.


GVB biletlerde yukarıda belirttiğim üzere trenler ve feribotlar dışındaki ulaşımı kullanabiliyorsunuz. Bu bilet türünde 4 güne kadar multi day yapılabiliyor. 1 gün için €7.5 , 2 gün için €12.5 , 3 gün için €17, 4 gün için €22. Bulunduğunuz konumdan merkeze GVB otobüsler ile gidebiliyorsanız bu sizin için daha uygun olacaktır. Gidip gidemediğinizi siteden sorgulayabilirsiniz. Bu kart ile havalimanı gidiş dönüş otobüsleri kullanılamıyor bunu da belirtmekte fayda var. Zaten havalimanına gitmek zorundasınız eğer turist olarak gidiyorsanız.

I amsterdam City Card bazı müzeler, hayvanat bahçesi ve kanal turu yapabileceğiniz GVB türünden standart paket bir karttır. GVB olduğu için trenleri kullanamazsınız. Müze odaklı bir seyahat planlıyorsanız bu kart sizin için uygun olabilir.

Diğer bilet türlerini kesinlikle tavsiye etmiyorum. 

8 Haziran 2017 Perşembe

Pointer Kullanarak Array Elemanlarına Erişim (Accessing Array Elements Using a Pointer)

C#'da bir array ile bu array verisi ile aynı veri tipinde (int,char,string,vs..) olan pointer aslında aynı değişken tipinde değildirler. Peki bu ne demek. Örneğin, int *v ile int[] v aynı türden değişkenler değildir. Pointer olan değişkenin değeri artırılabilir veya azaltılabilir çünkü bu değer memoryde sabit değildir fakat array adresi memory üzerinde sabittir ve değiştirilemez.

Bu nedenle array verisine pointer kullanarak erişmek istiyorsak, C ve C++'daki gibi fixed keywordünü kullanmamız gerekir. Aşağıdaki gibi bir örnekle açıklamaya çalışalım.

using System;
namespace UnsafeCodeApp
{
   class TestPointerCls
   {
      public unsafe static void Main()
      {
         int[]  list = {10, 100, 200};
         fixed(int *ptr = list)
         
         for ( int i = 0; i < 3; i++)
         {
            Console.WriteLine("Address of list[{0}]={1}",i, (int)(ptr + i));
            Console.WriteLine("Value of list[{0}]={1}", i, *(ptr + i));
         }
         
         Console.ReadKey();
      }
   }
}

Yukarıdaki kod compile edilip çalıştırıldığında aşağıdaki gibi bir çıktı verecektir. Main metodunun pointerları çalıştırabilmesi için unsafe tanımladığına dikkat edelim.

Address of list[0] = 31627168
Value of list[0] = 10
Address of list[1] = 31627172
Value of list[1] = 100
Address of list[2] = 31627176
Value of list[2] = 200

Alıntı

25 Eylül 2016 Pazar

Encrypt / Decrypt Connection String in Web.Config

Giriş


Bu ipucu, Web.Config içinde bulunan connection stringin nasıl encrypt edileceği hakkında bilgi içermektedir. Böylece güvenlik artırılacak, database bağlantısının daha güvenilir olmasını sağlayacaktır. Web.Config, connection string dışında daha bir çok şifrelenmesi gereken farklı hassas bilgiler barındırabilir. Bu makalede öncelikle ConnectionString'in encrypt edilmesinden bahsedilecektir.

Neden Önemli?

Web.Config içerisinde bulunan, gizliliği yüksek bilgiler içeren sectionların şifrelenmesi önemlidir. Bu bilgilere açık bir şekilde erişilmesi muhtemel açıkları doğurur. Örneğin production serverda bulunan bir Web.Config dosyasını düşünelim.Web uygulamasının çalışması için gerekli tüm bilgilere sahip olabilir. SQL Database bağlantı şifreleri, SMTP server, API keys vb. diğer tüm hassas bilgiler bunlara örnek verilebilir. Bu kadar önemli bilgiler içermesine rağmen Web.Config dosyasına genellikle bir kaynak kod dosyası olarak davranılır. Bunun anlamı şudur. Takımınızdaki herhangi bir yazılım geliştirici veya kaynak kodlara erişim yetkisine sahip herhangi bir kişi Web.Config içerisinde bulunan hassas bilgileri görebilir ve okuyabilir.

Connection String'in Şifrelenmesi

Örneğimizde Web.Config içerisinde bulunan connectionStrings bölümünün şifrelenmesini gerçekleştireceğiz. Diğer bölümler de aynı yöntem kullanılarak şifrelenebilmektedir.

Web.Config Şifrelemeden Önce

Aşağıdaki örnekte bir bölümü bulunan Config dosyasını incelerseniz kolaylıkla okunabildiğini görebilirsiniz. Bu kaynak kodlara erişebilecek kişiler düşünüldüğünde, çok da güvenli bir yöntem olmadığı açıktır.
<configuration>
  <connectionStrings>
    <add name="SqlServices" connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=TestCtlg;" />
  </connectionStrings>
</configuration>

Web.Config Şifreleme

  1. Command Promptu Yönetici olarak açın.
  2. Aşağıda belirtilen klasör konumuna gidin. Bu konumda Aspnet_regiis.exe isimli çalıştırılabilir dosyanın olduğunu kontrol edin.
    cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
  3. Örneğin Web.Config dosyanızın "D:\Projects\TestProject" içinde bulunduğunu varsayalım. Şifrelemek için aşağıdaki komutu kullanın.
  4. ASPNET_REGIIS -pef "connectionStrings" "D:\Projects\TestProject"
    Aspnet_regiis.exe toolu pef seçeneği ile Web.Config klasör yolu verilerek üstteki gibi kullanılır.
    Not : "connectionStrings" case sensitive bir parametredir.

Web.Config Şifrelemeden Sonra

Connection string şifrelendikten sonra aşağıdaki gibi artık okunabilir bir formatta olmayacaktır.
<configuration>
  <connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
    <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
      xmlns="http://www.w3.org/2001/04/xmlenc#">
      <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
      <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
        <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
          <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
          <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
            <KeyName>Rsa Key</KeyName>
          </KeyInfo>
          <CipherData>
            <CipherValue>ZbDTF00MYzUUW5U3w3PU0rfiAH1UKhvuLSNWPmB/YifBKne6HAWfVc3CnKVimyP8SFyamaR5oAIAxj/xavfpox8EOYXNI+afsksiuA5huSDupCZKNuXq+VCZrdIyn6YOq+W7s3Ojlu7q9VwKcoKurl28l2hcPvWkBk11KYB7hr0=</CipherValue>
          </CipherData>
        </EncryptedKey>
      </KeyInfo>
      <CipherData>
        <CipherValue>42IPPRUjJxCNDHEBLCAJI4/NyLpLueZSBzUXO69lVdZU8+nLpxO+opnbZNxqddyzNnbCO1Uk2Da3ljExkqnLIxT2zs90JAhZvJ5ljIgCipq7ZEp7zHOpvTH9fBGoZJJWhgdddOrHZsLDE9mILjlvBHDhPQrYcMHtY6oLIbxJq92it82iBJv0fS7v1S/o0p4hAtfky+6hXCZWSKUJHr88NDrKe2EEK3mazD2QD5Ozf/w=</CipherValue>
      </CipherData>
    </EncryptedData>
  </connectionStrings>
</configuration>

Decrypt Edilmiş Configuration Ayarlarına Erişim

ASP.NET'in Web.Config dosyasını işleme koyduğunda otomatik olarak içeriğini decrypt ettiğini bilmek çok güzel. Bu yüzden encrypted dosyayı decrypt etmek için herhangi bir ekstra adıma ihtiyacımız yok.Var olan uygulamanızı şifrelenmiş Web.Config olmasına rağmen herhangi bir değişikliğe ihtiyaç duymadan çalıştırmaya devam edebilirsiniz. Uygulamanız sorunsuz bir şekilde çalışacaktır. Bu ilginç değil mi?
string appConnString = ConfigurationManager.ConnectionStrings[1].ToString();

Web.Config Şifresini Çözme

Peki Web.Config şifresini çözüp orjinal formatı tekrar okumak mümkün müdür? Sorunun cevabı EVET. Basitçe aşağıdaki komut satırı çalıştırılarak Web.Config içindeki connectionStrings bölümü decrypt edilebilir.
ASPNET_REGIIS -pdf "connectionStrings" "D:\Projects\TestProject"
Not : "connectionStrings" case sensitive bir parametredir.

Soru ve Cevap

  1. En basitçe şöyle bir soru sorulabilir. Madem ASPNET_REGIIS kullanılarak Web.Config şifrelenebiliyor ve çözülebiliyor. Bu durumda Web.Config'e erişen bir kişi aynı yöntemi kullanarak şifreyi çözüp gizlenen bilgilere ulaşabilir.
    • Bu soruya cevabım kesinlikle hayır. Web.Config'i şifrelediğinizde, işlemi yaptığınız makineye özel anahtar ile şifrelenir. Şifrelenmiş dosyayı başka bir sistemde çözmeye kalkışırsanız, bulunduğunuz makinenin anahtarı ile uyuşmayacağından hata alacaksınız.
  2. Web.Config içeriği şifrelendikten sonra okunabilir bir formatta değildir. Bu bilgilere nasıl ulaşacağım.
    • Bunun için kodunuzda herhangi bir değişiklik yapmanıza gerek yoktur. ASP.NET otomatik olarak config dosyasını decrypt edip işleme koymaktadır.
  3. Şifrelenmiş config dosyası üzerinde nasıl değişiklik yapacağım.
    • Bunu yapmanız imkansız. On the fly olarak bir değişiklik gerçekleştiremezsiniz. Eğer bir değişiklik gerçekleştirebilmek için ilk önce decrypt etmeniz gerekecektir.
  4. Serverda işlem yapma yetkisine sahip kişi bu işlemleri yapabilir. Bu durumda ne yapacağım?
    • Web.Config şifreleme sadece birkaç saniye süren bir işlemdir. Açık yazılmış bir text dosyasından daha güvenilir olduğu kesindir. Çalışılan serverda full işlem yapma yetkisine sahip bir hacker için güvenlik sağlamamaktadır.

17 Haziran 2016 Cuma

Chrome Yazı Tipi Sorunu

Chrome her ne kadar en çok kullanılan browser olma özelliği taşısa da bazen çok değişik problemlere sebep olup insanları uğraştırabiliyor. Bu problem de onlardan yalnızca biri. Yazı tipinde okuma zorluğu olarak değerlendirebiliriz. Bazı harfler kalın, bazı harfler ince bir font ile görüntülenmekte bu da okurken gözünüzün bozuk olduğu hissine kapılmanıza neden olmaktadır. Örneğin aşağıdaki resimde bozuk karakterlerden oluşmuş bir ekran alıntısı bulunmaktadır.


Çözüm basit. Adımlar şu şekilde.

  1. Chrome'da yeni bir sekme aç.
  2. Yeni sekmeye chrome://flags/ yaz ve enter tuşuna bas.
  3. Google deneysel özelliklerin bulunduğu bir liste açılacaktır.Burada DirectWrite özelliğini bulun.
  4. Özelliği devre dışı bırakın.
  5. Devre dışı bıraktığınızda Şimdi Yeniden Başlat seçeneği ile Chrome'u yeniden başlatın.

24 Mart 2016 Perşembe

SUPERIMPOSED CODING

Bu kod superimposed kodun çalışma prensibini göstermektedir. Superimposed kod ile dosyadan erişmek istediğimiz bilgiye daha az yere bakarak ulaşabiliriz. Bu da retrieval işlem süresini azaltır.

“desserts.txt” dosyası içinde pasta isimleri ve içinde bulunan malzemelerin ( “1” var , “0” yok şeklinde ) kodları bulunmaktadır. “ingredients.txt” dosyasının içinde ise pastanın içinde bulunan malzemelerin kodları bulunmaktadır.

Örneğin ” ingredients.txt ” içinde ilk sırada bulunan “APPLES 00100100” elmanın kodunu göstermektedir. Eğer ” desserts.txt ” içinde bir pastanın kodunun ilk biti 1 ise bu o pastada elma olduğunu gösterir.

KODLAR