20 Aralık 2015

SQL Sorgu: Türkçe karakterler için CharList


        private string sqlCharList(string str_)
        {
            string sonuc = "";

            string charList = "cçCÇgğGĞıiIİoöOÖsşSŞuüUÜ";   // Türkçe karakter dizisi
            char[] str = str_.ToCharArray();                // Aranan kelime diziye dönüştürülüyor
            
            for (int i = 0; i < str.Length; i++)
            {
                double lastCharIndex = charList.IndexOf(str[i].ToString()) + 1;
                lastCharIndex = (Math.Ceiling(lastCharIndex / 4) * 4);

                if (charList.IndexOf(str[i].ToString()) != -1)
                {
                    sonuc += "[" + charList.Substring((int)lastCharIndex - 4, 4) + "]";
                }
                else { sonuc += str[i].ToString(); }
            }
            return sonuc;
        }

C# Mdi Child Form'un 1'den Fazla Açılmasını Önleme

  private void mnuMyForm_Click(object sender, EventArgs e) // myFormu açmak için tıkla
    {
        foreach (Form item in this.MdiChildren) // tüm açık formları kontrol et
        {
            if (item.Name == "MyFormName") // ismi MyFormName olan var ise
            {
                item.BringToFront(); // öne getir, göster vs.
                return; // foreach i sonlandır
            }
        }

        // foreach MyFormName bulamaz ise return pass geçilir ve
        // aşağıdaki kod çalışır. sonrasını biliyorsunuz zaten. 
        MyForm frm = new MyForm();
        frm.MdiParent = this;
        frm.Show();
    }

25 Ağustos 2015

Modulus 11 ve Check Digit

Diyelim ki elimizde harflerden ve sayılardan veya sadece sayılardan oluşan bir karakter dizisi var. Bu karakter dizisi banka hesap numarası, konteyner numarası, ISBN numarası vb. olabilir. Bu numaraları manuel olarak bir sisteme girdiğimizi veya başka birisine mail ortamında bildirdiğimizi düşünelim. Peki bu karakter dizilerini klavyeden girerken hatalı girebilir miyiz? Tabi ki evet. Peki bu karakter dizisinin doğruluğundan nasıl emin olabiliriz? Hem de herhangi bir sistemden sorgulamadan. 

Karakterler arasında matematiksel bir bağ olsa ve son karakter (Check Digit) bu matematiksel işlemlerin sağlaması niteliğinde olsa. Aslında bütün hikaye bundan ibaret. Uzun karakter dizilerinin hatalı girilebilmesi ihtimaline karşı bu diziler içerisinde yapılacak matematiksel bazı işlemlerle doğruluğunu kontrol etmek. İşte bunun için Modülüs 11 algoritması kullanmış ve bir Check Digit'e ulaşılmış. Ben birazda işimle alakalı olduğu için bir konteyner numarasının doğruluğunu Modülüs 11 ve Check Digit mantığı ile nasıl buluruz onu anlatacağım.




Öncelikle konteyner numarası hakkında biraz bilgi vereyim; 

- Bir konteyner numarası 4 harf 6 sayı ve 1 check digit yani doğrulama numarasından oluşur.
- 4 harfin 3 tanesi konteyner sahibini temsil eder.
- Bu 4 harfin sonuncusu konteynerin kategorisini ifade eder ve bu harfler U, J veya Z olabilir.
- U tüm taşıma konteynerleri için kullanılır
- J bir ekipmana bağlı fakat ayrılabilir konteynerler için kullanılır
- Z ise dorse römork ve şasiler için kullanılır
- Devam eden 6 rakam konteynerin serisi
- En sonda bulunan rakam ise konteynerin kontrol rakamı yani Check Digittir.


Peki bu içinde harfler bulunan karakter dizisi ile matematiksel işlemleri nasıl yapacağız? 

Bunu aşağıdaki tabloda (Tablo-1) bulunan harf değer eşlemesi yardımı ile yapacağız. Bu değerler 10 dan başlayacak ve 11’in katları kullanılmayacak şekilde Z ye kadar verilecektir.


Tablo-1








A
10

N
25


B
12

O
26


C
13

P
27


D
14

Q
28


E
15

R
29


F
16

S
30


G
17

T
31


H
18

U
32


I
19

V
34


J
20

W
35


K
21

X
36


L
23

Y
37


M
24

Z
38









Harfler tamam peki sayılar? 

Sayılar kendi değerleri ile alınacaklar. 

Şimdi ARKU 830294-4 konteyner numarasının modulus 11 ile doğruluğunu kontrol edelim;

- 4 harften oluşan prefix ve 
- 6 sayıdan oluşan seri numarasını alalalım. 
- Her birinin karşısına değerlerini yazalım. 
- Şimdi çarpanları bulmak için her bir karakterin bulunduğu pozisyonu 2 nin kuvveti olarak alalım ve karşısına yazalım. Dikkat edilmesi gereken nokta pozisyon olarak alınacak sayıların 0 dan başlaması gerektiğidir. 
- Her bir karakter için elde edilen çarpımları toplayalım ve 11 değeri ile modunu alalım. Mod bölme işleminde kalanı veren bir fonksiyondur. 

Örn:
3 mod 2 = 1 ==> 3 ün 2 ile bölümden kalan 1 dir.
5 mod 3 = 2 ==> 5 in 3 ile bölümünden kalan 2 dir.

Karakter
Posizyonu
Karakter
Karakter
Değerleri
Çarpan
Çarpım
0
A
10
2⁰ =
1
10
1
R
29
2¹ =
2
58
2
K
21
2² =
4
84
3
U
32
2³ =
8
256
4
8
8
2⁴ =
16
128
5
3
3
2⁵ =
32
96
6
0
0
2⁶ =
64
0
7
2
2
2⁷ =
128
256
8
9
9
2⁸ =
256
2304
9
4
4
2⁹ =
512
2048
Toplam
5240

5240 mod 11 = 4 ==> 5240 ın 11 ile bölümden kalan 4 tür ve 4 Kontrol Numaramız yani Check Digitimizdir.




5 Temmuz 2015

Paul Graham - How to start a "startup" makalesinden bir bölüm

bizimle çalışan hemen herkes yaptığı işte bir canavardı. satışlardan sorumlu kadın o kadar azimliydi ki, onunla telefonda konuşan potansiyel müşterilere acırdım. oltanın ucunda çırpındıklarını hissedebilirdiniz ama kaydolana kadar kurtulamayacaklarını da bilirdiniz. 

tanıdığınız kimseleri düşünürseniz, canavarlık testini uygulamanın kolay olduğunu görürsünüz. o kişiyi gözünüzde canlandırıp "falanca bir canavardır" diye düşünün. eğer gülerseniz, değil demektir. bu büyük şirketlerde gereksinim duyulmayan, hatta arzu edilmeyen bir özellik olabilir, ama bir startup'ta gereklidir. 

programcılar için ilaveten üç testimiz daha vardı. bu insan gerçekten zeki miydi? eğer öyleyse, iş bitirici miydi? ve son olarak, bazı iyi hacker'lar çekilmez insanlar olduklarından, bu kişiyle aynı ortamda olmaya tahammül edebilir miydik? 

bu son test şaşılacak kadar az insanı eler. eğer bir insan gerçekten zekiyse her türlü sosyal beceriksizliğine katlanabilirdik. tahammülümüzü aşan şey fazla havalara giren kimselerdi. ama zaten böyle olanların çoğu gerçekten zeki değillerdi ve bu yüzden üçüncü testimiz çoğunlukla birincinin başka bir ifadesiydi. 

bu dörtgözlerin çekilmez olanları genelde akıllı görünmek için çok uğraştıklarından böyle olurlar. fakat ne kadar zeki olurlarsa, kendilerini o kadar az ukalalık yapmak zorunda hissederler. yani genelde gerçekten zeki insanları "bilmiyorum," "belki de siz haklısınızdır" ve "x'i pek anlamadım" gibi şeyleri söyleyebilmelerinden tanıyabilirsiniz. 

Kaynaklar; 
http://www.paulgraham.com/start.html
https://eksisozluk.com/startup--80125?p=4

4 Ocak 2015

C# ile Dörtgen Çizmek


private void Form1_Paint(object sender, PaintEventArgs e)
        {
            // bunun için öncelikle bir kalemimizin olması gerekir
            // kırmızı renkli bir kalem oluşturuluyor
            Pen mPen = new Pen(Color.Red);
            // çizgi kalınlığı ayarlanıyor
            mPen.Width = 5;

            // çizim için grafik nesnesi oluşturuluyor
            Graphics g = e.Graphics;

            // dörtgen nesnesi oluşturulyor
            // x ve y koordinatları ile çizim nerden başlayacak belirtiliyor
            // sonra da uzunluk ve yükseklik belirtiliyor
            Rectangle r = new Rectangle(50, 50, 100, 200);

            // çizime başlıyoruz.
            // DrawRectangle bizden kalem, 
            // dörtgenin konum ve boyut bilgilerini istiyor
            g.DrawRectangle(mPen, r);

            // çizim gerçekleşiyor

            // görevi sona eren nesneler bellekten atılıyor
            mPen.Dispose();
            g.Dispose();
        }

3 Ocak 2015

C# ile Basit Bir Çizgi Çizme

// bunun için öncelikle bir kalemimizin olması gerekir
// yeşil renkli bir kalem oluşturuluyor
Pen mPen = new Pen(Color.Green);

// çizim için grafik nesnesi oluşturuluyor
Graphics g = this.CreateGraphics();

// çizime başlıyoruz.
// DrawLine bizden kalem,
// başlangıç noktası için çizginin soldan ve yukarıdan koordinatını
// bitiş noktası için için çizginin yine soldan ve yukarıdan koordinatını istiyor
g.DrawLine(mPen, 0, 0, 200, 200);

// çizim gerçekleşiyor

// görevi sona eren nesneler bellekten atılıyor
mPen.Dispose();
g.Dispose();