Aklımda Kalası Kelimeler

* давайте работать вместе
* Zarf ve Mazruf, Zerafet(xHoyratlık) ile aynı kökten(za-ra-fe) gelir
* Bedesten
* Suç subuta ermiştir - Suç sabit olmuştur

31 Aralık 2009 Perşembe

Raj Kapor 1951 - Avaremu



Kimin hoşuna gitmezki Raj Kapor'un bu ünlümü ünlü şarkısı.

Elbette 1951 de ben yoktum ama çocukluğumda dinlediğim ve o dönem çevremdeki herkesinde sanki her defasında ilk kez duymuş gibi sevgiyle söyleyip dinledikleri şarkıdır. Sanki zenginleştikçe kopuyor ve vahşileşiyoruz bu ülkede. Sanki kızılderililer gibi doğadan koparılıp (tarım hayvancılık mesleğinden) şehirlere sürülen(sanayi işçisi yapılan) bizlere ters bir hayata konuluyoruz. Şehrin içinde vahşileşiyor birbirimizi tanımaz oluyoruz.

Ben zaten her iktidara muhaliftim ve öyle olmanında en doğrusu olduğunu düşünürüm. Bana göre iktidara yandaş olmak, ya çıkardan nemalanmak ya da daha iyi olmak için eksikleri görmeye çalışma çabasından kaçıp iradeyi teslim etmek demektir. Dünde muhaliftim demiştim, ama hiç bu kadar yoğun muhalefet içinde olmamıştım. IMF nin kucağına bilmem kaçıncı kez oturan bu hükümet diğerlerinden farklı olarak herşeyi yaptı. Evet evet herşeyi yaptılar. Kendi medyasını kendi zenginini hatta kendi fakirini ve dilencisini de yaptı.

Ama solcuya komünist, sağcıya faşist bakan bu millete dostluğu söylemek yerine her defasında diğerlerine "samimiyetsiz" dedi.

Hakikaten! Düşünsenize, birisi hep dürüstlükten bahsediyorsa şüphe etmez misiniz? Hep namustan, doğruluktan, samimiyetten bahsediyorsa, demez misiniz "bu adam niye ikide bir bunları söylüyor" diye? Ben soruyorum. Kendini bu kadar öveni sevmeyiz bizler. Rakibini karalayan satıcıyı hele hiç sevmeyiz. Ticarette yapmayız. Yani kuruşumuzu vermeyiz. Bilirizki dürüst, samimi insan ne dillendirir bunları, ne de öne atar kendini.

Ne diyordum gene. Hah, bilmem kaçıncı kez oturdular gene IMF nin kucağına diyordum. IMF'nin köyleri boşaltın emrini yerine getiriyorlar diyordum. Bizi de köyümüzden koparıp şehirlerde boğdu, boğuyorlarda. Dönümlere sığamazdık, 60 metre kare TOKİ'lere hapsettiler, sanki lütufetmiş gibi. Kendileri girse ya 60 metre evlere.

Dün hep kardeştik, bilmezdik kim kürt kim ermeni ama şimdi belledik herkesin kimliğini. Bugün ancak Taraf olabildik.

Fakir ama gururlu bir o kadar seven ve sevilen olmamız dileği ile. Bir de; yüce Türk milletiyiz biz(Kürtümüzle, çerkesimizle, arnavutumuzla ...). Bize lâyık helal süt emmişlere ermek ümidiyle. Nice güzel senelere 2010 ile hep birlikte.

Regular Expression

Önce hatırlatma:
METACHARECTERS (11 adet)Yazdırılamayan Karakterler

[
\
^
$
.
|
?
*
+
(
)
\t tab (0×09) (9)
\r carriage return (0×0D) (13)
\n new line (0×0A) (10)
\a bell (0×07) (7)
\e escape (0×1B) (27)
\f form feed (0×0C) (12)
\v vertical tab (0×0B) (11)



Aşağıdaki metin üzerinden regular expression ifadelerini çalışalım

“Özdemir, biliyor musun, gazetelerde Musevi ya da Yahudi kökenli işadamı Moiz Milka diye yazdıkları zaman tüylerim diken diken oluyor. Ermeni kökenli, Rum kökenli de diyorlar. Sana Türk kökenli Türk yazarı mı diyorlar? Bizler Türkiye Cumhuriyeti vatandaşlarıyız. Senin adının önüne kökenle ilgili bir sıfat yapıştırılmıyorsa, bizlere de yapıştırılamaz. Biz yasalara göre her vatandaş gibi Türk’üz!”

Her harfi ara:
>> .

Sadece noktaları arar:
>> \.

Harf ya da kelimeden önceki ve/veya sonraki harfleri harf ya da kelime ile birlikte arar:
>> ..b.


"k" harfi geçenleri arar:
Sadece
>> k
yazsaydık aşağıdaki sonuca ulaşırdık:


Sadece
>> \bk
yazsaydık, ilk harfi "k" başlayan kelimelerdeki "k" harfleri seçilecek.


Sadece
>> \bSana\b
yazarsak, "Sana" kelimesi seçilir.

>> \bsana\b
S!=s (byte değerlerini düşünürsek) bu yüzden hiç bulunamayacaktır.

>> \b..rk\b
4 Harfli kelime seçiyoruz(..rk). İlk iki harfi herşey olabilir ama son iki harfi rk olacak. Sonuç:


>> [Bb]iz


[] içinde geçen harflerin olduğu yerleri seç.

[a-z] Küçük harflerin geçtiği yerleri seç.

[a-zA-z] Büyük küçük harflerin geçtiği yerleri seç.

[0-9] Rakamların geçtiği yerleri seç

[^öşç] öşç olmayanları(^) seç:



Hiçbirini seç:
>> ^


Yan yana 2 ya da 6 adet olan "o" harflerini seç:
>> o{2,6}



"x" harfi ile başlayan ve o ile devam eden(yan yana n tane "o" olmak şartıyla devam eden) harfleri seç:
>> xo+

o ile başlayan(yan yana n tane "o" olmak şartıyla devam eden) ve "x" harfi ile biten harfleri seç:
>> o+x


o ile başlaması şart değil ama yan yana n tane "o" ile birlikte, "x" harflerinide seç:
>> o*x

o+x : en az bir tane "o" harfi gerekiyor.
0?x : "o" karakteri olmasada olur. "o" karakteri yoksa sadece "x" ama varsa "x" den önceki tek "o" karakteri.
o*x : "o" karakteri olmasada olur ama olursa x den önceki tüm "o" larla birlikte "x" karakterini de seç.



>> <.+w




>> <.+?w





Satırın sonundaki harfi seç:
>> >$

Satır sonundaki herhangi tek karakteri seç.
>> .$

>> x.*$





Sadece yazılı kısmı arar:
>> vatan


|(boru) dan önceki kısmı ya da sonraki kısmı arar
>> Türk|Yahudi


o harfinden sonra o harfi olmayan. Ama sonraki n tane harfi seçen. < karakterini görünce durup, < karakteri hariç seçen. >> o(?!o).*(?=<)






Php Regular ExpressionSpecial Sequences


  • w - Any “word” character (a-z 0-9 _)
  • W - Any non “word” character
  • s - Whitespace (space, tab CRLF)
  • S - Any non whitepsace character
  • d - Digits (0-9)
  • D - Any non digit character
  • . - (Period) – Any character except newline

Meta Characters


  • ^ - Start of subject (or line in multiline mode)
  • $ - End of subject (or line in multiline mode)
  • [ - Start character class definition
  • ] - End character class definition
  • | - Alternates, eg (a|b) matches a or b
  • ( - Start subpattern
  • ) - End subpattern
  • - Escape character

Quantifiers


  • n* - Zero or more of n
  • n+ - One or more of n
  • n ? - Zero or one occurrences of n
  • {n} - n occurrences exactly
  • {n,} - At least n occurrences
  • {,m} - At most m occurrences
  • {n,m} - Between n and m occurrences (inclusive)

Pattern Modifiers


  • i - Case Insensitive
  • m - Multiline mode - ^ and $ match start and end of lines
  • s - Dotall - . class includes newline
  • x - Extended– comments and whitespace
  • e - preg_replace only – enables evaluation of replacement as PHP code
  • S - Extra analysis of pattern
  • U - Pattern is ungreedy
  • u - Pattern is treated as UTF-8

Point based assertions


  • b - Word boundary
  • B - Not a word boundary
  • A - Start of subject
  • Z - End of subject or newline at end
  • z - End of subject
  • G - First matching position in subject

Assertions


  • (?=) - Positive look ahead assertion foo(?=bar) matches foo when followed by bar
  • (?!) - Negative look ahead assertion foo(?!bar) matches foo when not followed by bar
  • (?<=) - Positive look behind assertion (?<=foo)bar matches bar when preceded by foo
  • (? - Negative look behind assertion (?
  • (?>) - Once-only subpatterns (?>d+)bar Performance enhancing when bar not present
  • (?(x)) - Conditional subpatterns
  • (?(3)foo|fu)bar - Matches foo if 3rd subpattern has matched, fu if not
  • (?#) - Comment (?# Pattern does x y or z)



Java'da UTF-8 ve Regex için sorulmuş ve cevaplanmış bir soru(güzel anlatım):
Re: Testing for UTF-8 with RegEx?

That regex is designed to match raw byte sequences, not character sequences. When you read the file, you're converting the bytes to characters according to the default encoding, then applying the regex to the character sequence as if it were still the undecoded bytes. For example, assuming the text was really encoded as UTF-8, the character 'ä' would be represented by the two-byte sequence C3 A4. If you decode that using the windows-1252 encoding, it becomes the two-character sequence "ä" ("\u00C3\u00A4"). That matches the regex because the Unicode codepoints of the characters just happen to have the same value as their encodings. But that isn't the case with 'Ä'. Its UTF-8 encoding is C3 84, which becomes "Ä" ("\u00C3\u201E") after decoding, and of course, that doesn't match the regex.

If you want to confirm that a file contains UTF-8 encoded text, you have to work on the raw bytes. That means you can't use regexes, because Java regexes only work with char sequences. But that's a poor approach anyway, in my opinion. Here's a much better way: http://glaforge.free.fr/wiki/index.php?wiki=GuessEncoding



Differences are (from this site):



  1. \Q...\E escapes a string of metacharacters
    • .NET NO
    • Java YES
  2. \Q...\E escapes a string of character class metacharacters (in a character sets)
    • .NET NO
    • Java YES
  3. (?n) (explicit capture modifier)
    • .NET YES
    • Java NO
  4. ?+, *+, ++ and {m,n}+ (possessive quantifiers)
    • .NET NO
    • Java YES
  5. (?<=text) (positive lookbehind)
    • .NET Full regex
    • Java Finite length
  6. (?<!text) (negative lookbehind)

    • .NET Full regex
    • Java Finite length
  7. Conditionals of form (?(?=regex)then|else), (?(regex)then|else), (?(1)then|else) or (?(group)then|else)

    • .NET YES
    • Java NO
  8. (?#comment) comments
    • .NET YES
    • Java NO
  9. Character class is a single token (Free-spacing syntax)
    • .NET YES
    • Java NO
  10. \pL through \pC or \p{IsL} through \p{IsC} (Unicode properties)

    • .NET NO
    • Java YES
  11. \p{IsLu} through \p{IsCn} (Unicode property)
    • .NET NO
    • Java YES
  12. \p{InBasicLatin} through \p{InSpecials} or \p{IsBasicLatin} through \p{IsSpecials} (Unicode block)
    • .NET YES
    • Java NO
  13. Spaces, hyphens and underscores allowed in all long names listed above (e.g. BasicLatin can be written as Basic-Latin or Basic_Latin or Basic Latin)

    • .NET NO
    • Java YES (Java 5)
  14. Named captures of style (?<name>regex), (?'name'regex), \k<name> or \k'name'

    • .NET YES
    • Java NO
  15. Multiple capturing groups can have the same name
    • .NET YES
    • Java N/A (does not have named capture groups)
  16. XML character classes subtraction [abc-[abc]]
    • .NET YES (2.0)
    • Java NO
  17. \p{Alpha} POSIX character class
    • .NET NO
    • Java YES (ASCII)



http://www.orhandogan.us/2008/12/11/duzenli-ifadeler-regular-expression-regex/
http://www.grymoire.com/Unix/Regular.html
http://weitz.de/regex-coach/
http://weitz.de/files/regex-coach.exe







29 Aralık 2009 Salı

Bir web sayfasının dom yapısının TreeView da gösterimi


Form1.cs

using System;
using System.Linq;
using System.Windows.Forms;

namespace wfTreeWebBrowser
{
public partial class Form1 : Form
{
public Form1() { InitializeComponent(); }

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { }

private void fTamamlandi()
{
treeView1.Nodes.Add("0", "ROOT");
for (int i = 0; i < wb.Document.All.Count; i++)
{
treeView1.Nodes["0"].Nodes.Add((++count).ToString(), wb.Document.All[i].TagName);
if (wb.Document.All[i].All.Count>0)
{
fParse(wb.Document.All[i], count.ToString());
}
}
}

private int count;
private void fParse(HtmlElement he, string key)
{
for (int i = 0; i < he.All.Count; i++)
{
if (he.All[i].All.Count>0)
{
treeView1.Nodes.Find(key,true).First().Nodes.Add((++count).ToString(), count + " * " + he.All[i].TagName);
fParse(he.All[i], count.ToString());
}
else
{
treeView1.Nodes.Find(key,true).First().Nodes.Add((++count).ToString(), count + " - " + he.All[i].OuterHtml);
}

}
}

private void button1_Click(object sender, EventArgs e)
{
fTamamlandi();
}
}
}




Form1.Designer.cs

namespace wfTreeWebBrowser
{
partial class Form1
{
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

#region Windows Form Designer generated code
private void InitializeComponent()
{
this.wb = new System.Windows.Forms.WebBrowser();
this.treeView1 = new System.Windows.Forms.TreeView();
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// wb
//
this.wb.Location = new System.Drawing.Point(12, 62);
this.wb.MinimumSize = new System.Drawing.Size(20, 20);
this.wb.Name = "wb";
this.wb.Size = new System.Drawing.Size(250, 250);
this.wb.TabIndex = 0;
this.wb.Url = new System.Uri("http://localhost/", System.UriKind.Absolute);
this.wb.DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(this.webBrowser1_DocumentCompleted);
//
// treeView1
//
this.treeView1.Location = new System.Drawing.Point(268, 12);
this.treeView1.Name = "treeView1";
this.treeView1.Size = new System.Drawing.Size(290, 300);
this.treeView1.TabIndex = 1;
//
// button1
//
this.button1.Location = new System.Drawing.Point(12, 12);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(250, 23);
this.button1.TabIndex = 2;
this.button1.Text = "Ağaç yapısını çıkar";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(570, 464);
this.Controls.Add(this.button1);
this.Controls.Add(this.treeView1);
this.Controls.Add(this.wb);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);

}

#endregion

private System.Windows.Forms.WebBrowser wb;
private System.Windows.Forms.TreeView treeView1;
private System.Windows.Forms.Button button1;
}
}

24 Aralık 2009 Perşembe

Javada InnerClass lar


  • non-static variable this cannot be referenced from a static context:
    Statik bir noktadan statik olmayan bir değişkene erişilemez. Ama inner class olmayan A sınıfından bir obje türetmek sorunsuz olarak tamamlanıyor.
  • inner classes cannot have static declarations:
    Alt sınıflar statik tanımlamalara sahip olamaz


(alt sınıflı)Java kodunu derleme




public class Book {

private int pageNumber;

private class BookReader {

public int getPage() {
return pageNumber;
}
}
}


Path ayarlarını kalıcıda yapabiliriz.


Artık sadece "javac javaKodumuz.java" diyerek kodumuzu derleyebiliriz.

23 Aralık 2009 Çarşamba

C# Lookup ile gruplama





using System;
using System.Linq;

namespace caCop
{
class Program
{
static void Main(string[] args)
{
Ogrenci[] arrOgrenci = new Ogrenci[5];
arrOgrenci[0] = new Ogrenci() { adi = "ali", yas = 30 };
arrOgrenci[1] = new Ogrenci() { adi = "veli", yas = 30 };
arrOgrenci[2] = new Ogrenci() { adi = "mehmet", yas = 33 };
arrOgrenci[3] = new Ogrenci() { adi = "selim", yas = 33 };
arrOgrenci[4] = new Ogrenci() { adi = "yakup", yas = 33 };
foreach (Ogrenci ogrenci in arrOgrenci)
{
Console.WriteLine(ogrenci);
}

Console.WriteLine("-----");

Lookup lookup = (Lookup) (arrOgrenci.ToLookup(ob => ob.yas));
foreach (Ogrenci ogrenci in lookup[30])
{
Console.WriteLine(ogrenci);
}
}
}

class Ogrenci
{
public int yas { get; set; }
public string adi { get; set; }
public override string ToString()
{
return adi + " \t-> " + yas;
}
}
}

21 Aralık 2009 Pazartesi

UML Diyagramları ile Tasarım Şablonları



Gang of Four Tasarım Şablonları UML diyagramları

Behavioral patterns
  • * Chain of responsibility
  • * Command
  • * Interpreter
  • * Iterator
  • * Mediator
  • * Memento
  • * Observer




    C# Örnek:
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                var duygu = new EvAbone();
                Aydinlik aydinlik = new Aydinlik();
                aydinlik.Attach(duygu);
    
                EsnafAbone cem = new EsnafAbone();
                aydinlik.Attach(cem);
                
                aydinlik.HaberVer();
                Console.Read();
            }
        }
    
        interface IAbone
        {
            void HaberAl();
        }
    
        class EsnafAbone : IAbone
        {
            public void HaberAl()
            {
                // Telefon
                Console.WriteLine("telefon et");
            }
        }
    
        class EvAbone : IAbone
        {
            public void HaberAl()
            {
                // Kapıya bırak
                Console.WriteLine("kapıya bırak");
            }
        }
    
        abstract class Gazete
        {
            List<IAbone> aboneler = new List<IAbone>();
            public void Attach(IAbone abone)
            {
                aboneler.Add(abone);
            }
    
            public void Remove(IAbone abone)
            {
                aboneler.Remove(abone);
            }
    
            public void HaberVer()
            {
                aboneler.ForEach(a =>
                {
                    Console.WriteLine(a);
                    a.HaberAl();
                });
            }
        }
    
        class Hurriyet:Gazete
        {
            private bool bHurriyetGeldi = false;
        }
    
        class Aydinlik:Gazete
        {
            private bool bAydinlikGeldi = false;
        }
    }

    Javascript Örnek:
    function Olay(){
      var arrAboneler = [];
      
      this.AboneEkle = function(abone){
        arrAboneler.push(abone);
      }
      
      this.AboneCikart = function(abone){
        arrAboneler.splice(abone);
      }
    
      this.Notify = function(_obje) {
        arrAboneler.forEach(function(abone){
          abone.Calistir(_obje)
        });
      }
    
    }
    
    function Ihale(){
      var aboneler=[]; 
      
      this.f_ekle = function(ihale){
        this.Notify(ihale);
      }
    }
    
    Ihale.prototype = new Olay();
    
    // Abonemiz Elastic Search'e eklemek olsun
    function Elastic(){
    
      this.Calistir = function(_obje){
         console.log('elastice yazıldı');
         console.log(_obje);
      }
    }
    
    elastic = new Elastic();
    
    // Abone olacağımız konu ihale olacak:
    ihale = new Ihale;
    ihale.AboneEkle(elastic);
    
    // Şimdi bir olay tetikleyelim:
    ihale.f_ekle({a:1});

    Güzel bir referans.


    Bir nesnenin kendi durumunda olabilecek değişikliklerin haberdar edilmesi gereken başka nesneler varsa (nesneler arasında ilişki varsa) bu tasarım kalıbı kullanılır.
    Örneğin: Bir hisse kağıdındaki hareketden haberdar edilecek müşteriler, bir blog sitesinde meydana gelecek değişimden haberdar edilecek abonelerin haberdar edilmesi gibi.

    Blog sitemizdeki değişimleri abonelere bildirmek isteyelim. Buna göre blog sitemiz abonelerin listesini tutmalı. Ama abonelerimiz çeşitli tiplerde olabilir. Hisse senedindeki değişimden haberdar olmak isteyen bireysel yatırımcı, kurumsal yatırımcı, denetleme kurumu, SPK gibi abonler olabilir. Bu abone tiplerinin ortak bir tipte toplanması için bir arayüz ya da bir soyut sınıftan türetilmesi gerekir.

    Yukarıdaki anlatıma göre:
    Subject: Durum bilgisinin değişimini abonelere bildirecek nesnenin soyut sınıfı/arayüzü.
    Observer: Abonelerin türediği sınıf.
    Concrete Observer/Subject: Nesnelerin türediği sınıflar.

    Depişimini haber verecek sınıfların(ki bunlar Subject atasından türetilmiş olmalı), abonelerini (ki abonelerde Observer sınıfından türetilmiş olmalı(ki update() metotları olsun)) ekleyip, çıkartabilmesi gerekiyor. Bunun için Attach(Observer obj) ve Detattach(Observer obj) metotları olacak. Birde tüm bu değişimleri abonelerine bildirmek için Notify() metodu olacak. Notify metodu aslında abonelerinin update metodunu çağıracak. Update metodu Observer ata sınıfından gelen bir metotdu. Update metodu her sınıfın kendi içinde sağladığı (implement) bir metot olduğu için her abone sınıf tipi gelen değişim bilgisinde kendine özgü bir iş yapacak

  • * State
  • * Strategy




    Referans: doFactory.com




  • * Template method
  • * Visitor


Creational patterns



Structural patterns

  • * Adapter


    Bir projemiz var ve bu projede bir sürü Interface ve Class'larımız olsun.

    Bir gün dışarıdan bir sınıfı(örneğin SMS atan bir apiyi) projemize dahil etmemiz gereksin.

    Tabi o gün kullanılan Turkcell(En azından yerli sermaye az da olsa) GSM operatörü yerine, ileride başka bir GSM operatörü ve onun API'sini de kullanabileceğimizi düşünerek sistemimize, bu sınıfı dahil etmemiz gerekecektir.

    Bir adaptör sınıfı yazmamız gerekecek.

    1. Method : Class Adapter
    Sistemde mesaj atması gereken sınıfların uyguladığı arayüzü, kullanan bir sınıf oluştururuz. Bu sınıf aynı zamanda TurkcellApi sınıfını da miras alarak kısa mesaj atma metotlarını kullanmamızı sağlayabilir. Böylece TurkcellApi sınıfı dışarıdan gelip sisteme adapte edilen bir tip olarak kullanılabilir.

    2. Method: Object Adapter
    Sistemde mesaj atması gereken sınıfların uyguladığı arayüzü, kullanan bir sınıf oluştururuz. Bu sınıf aynı zamanda TurkcellApi sınıfından bir property (field, değişken ne derseniz deyin) içerir ve tüm kısa mesaj işlerini yeni sınıfımızın bu değişkenine yaptırılır. Böylece TurkcellApi sınıfndan(tipinden) bir değişkeni yeni sınıfımızda kullanarak sisteme adapte etmiş oluruz.



  • * Bridge
    Bridge tasarım şablonu, modelleme esnasında oluşan soyut oluşumlar ve bunların implementasyonunu ayırmak için kullanılır. Bu yöntem sayesinde sınıf hiyerarşileri daha esnek bir hale getirilebilir, çünkü üst sınıflar bünyelerinde barındırdıkaları soyut metodları bir interface sınıfına taşıyarak, alt sınıfların istedikleri bir implementasyonu kullanmalarına izin verirler.
    BridgeTasarimSablonu



  • * Composite


  • * Decorator


  • * Facade






    Facade objeleri genellikle Singleton dır. Çünkü sadece bir tane Facade objesi gereklidir.

  • * Flyweight



  • * Proxy