18 Ağustos 2014 Pazartesi

bash Standard Output

Throwing Output Away
bash yönlendirme yazısına taşıdım.

Connecting Programs By Output As Input
Pipe işaret ile yapılır. Dikkat edilmesi gereken nokta her komut kendi kabuğu içinde paralel olarak başlatılır. Örnek:
svn -v | less

Beware ,however , that commands run this way (i.e. connected by pipes), are run in separate subshells.




Image 2

Image Döndürme
C#
Bitmap sınıfı
RotateFlip metodu
Bu metod sadece döndürme veya döndürme + flip işlemini yapabilir. Örnek:
Sadece döndürme için 90 derecelik artırımlı enum'lar var. Rotate90FlipNone, Rotate180FlipNone, Rotate270FlipNone gibi.


TransformedBitmap sınıfının RotateTransform ile kullanılması
Örnek:
var tb = new TransformedBitmap();
BitmapImage bi = Type.Image.Clone();
tb.BeginInit();
tb.Source = bi;
var transform = new RotateTransform(180);
tb.Transform = transform;
tb.EndInit();


TransformedBitmap sınıfının ScaleTransform ile kullanılması 
Örnek:
ScaleX = -1 ise solda ayna varmış gibi döndürür.


15 Ağustos 2014 Cuma

Shell

Background Process

Shell (kabuk) ile bir process'i arkaplana atınca CPU açısından hiç bir şey değişmez. Aslında CPU bir process'in arka veya önplanda olup olmadığını da bilmez. Arka veya önplanda olma kavramları tamamen kabuk ile ilgilidir. Bu kavram sadece kabuğun bir process'in bitip bitmesini bekleyip beklemeyeceğini gösterir.

Programı Durdurmak
"Ctrl + C" tuşları ile ön planda çalışan bir programı durdurmak mümkün. Bu tuşlar ile programa SIGINT gönderiliyor. Konuylar ilgili Linux Sinyalleri başlıklı yazıya göz atabilirsiniz.

Ön Planda Çalışan Programı duraklatmak

"Ctrl + Z" tuşları ile ön planda çalışan bir programı duraklatmak mümkün. Bu tuşlar ile programa SIGTSTP sinyali gönderiliyor. Konuylar ilgili Linux Sinyalleri başlıklı yazıya göz atabilirsiniz.
Duraklatılan program ps ile bakılınca T işareti ile belirtilir.

oli     3278  0.0  0.0  14492  3160 pts/4    T    13:59   0:00 nano TEST
Process State Codes tablosu
PROCESS STATE CODES
       
       D    uninterruptible sleep (usually IO)
       R    running or runnable (on run queue)
       S    interruptible sleep (waiting for an event to complete)
       T    stopped, either by a job control signal or because it is being traced.
       W    paging (not valid since the 2.6.xx kernel)
       X    dead (should never be seen)
       Z    defunct ("zombie") process, terminated but not reaped by its parent.


Çıktının akışını durdurmak
"Ctrl + S" ile çıktının akması durdurulur. "Ctrl + Q" ile devam ettirilir. Bu tuşlat vt100 terminalinde Software Flow Control için kullanılırlar. XON ve XOFF sinyali göndererek akışı kontrol ederler. Bilgi için Seri Port API'si başlıklı yazıya da göz atabilirsiniz.

Shell ve EOF
Linux'ta Ctrl + D , Windows'ta Ctr + Z ile input stream'e EOF yazılarak shell'in çalıştırdığı programın input stream'i kapatılabilir. Böylece program sonlanır.


12 Ağustos 2014 Salı

Gömülü Proje - TransmissionQueue

Giriş
TransmissionQueue gönderme amacına göre birçok farklı şekil alabilen bir bileşen. Aşağıda bazı sınıflandırmalarda bulunmaya çalıştım.

Genel Tasarım
TransmissionQueue --(has)--TransmissionList--(has)--TransmissionNode--(has)--Data

TransmissionList bir LinkedList (ortadan silinen kuyruklar için) veya Dequeue (FIFO kuyruklar için) olabilir.

Gönderim Sırasına Göre
Periyodik Kuyruklar
Bir timer XGenerator sınıfını periyodik olarak tetikler. XGenerator TransmissionQueue kuyruğunu baştan sonra dolaşır ve zamanı gelen mesajları gönderir. Bu tür kuyruklar her 2 saniyede bir X gönderilecektir türündeki işler için kullanılır.

FIFO Kuyruklar
Kuyruğun sonuna yerleşen mesaj sırası gelince XGenerator tarafından kuyruktan çekilir ve hemen gönderilir.

Verinin Kopya veya Referans Olarak Kullanım Şekline Göre
Kopya Alan Kuyruk
Bazı kuyruklar eklenen verinin kopyasını alırlar. Böylece veri güncellenirse bir önce hali ile karşılaştırıp gönderim kuralını değiştirmeleri mümkün olur.

Reference Counting Yapan Kuyruk
Bazı kuyruklar reference counting yaparlar. Böylece verinin kopyasını almaya gerek kalmaz. Kuyrukta bekleyen veri değiştirilebilir.

Verinin Serialize Edilmesi
Gönderilecek veri bir XProtocolConverter sınıfına verilerek serialize edilir.

Periyodik Kuyruk aşağıdaki gibi olabilir
XProtocolConverter protocol (channel);
transmissionQueue.Walk (protocol);


FIFO kuyruğun serialize edilmesi aşağıdaki gibi olabilir. Eğer gönderilecek veri yoksa XProtocolConverter veri olmadığını belli eden bir mesaj gönderilir.

XProtocolConverter protocol;
TransmissionItem item = transmissionQueue.PopHead ();
if (item != NULL) {
  protocol.Serialize (stream, item);
}
else {
 protocol.SerializeEmptyMsg (stream);
}
channel.Send (stream);

Örnek
Aşağıda, serialization işlemini ve gönderim kuyruğunu gösteren basit bir tasarım örneği var.
Gönderilmek İstenen Mesajın Alınması
Gönderilmek istenen DomainObject, OutgoingMessageListener tarafından alınır. TransmissionQueue nesnesine verilir. 

Gönderilme Kurallarının Hazırlanması
Bu kuyruk, DomainObject nesnesinin nasıl parçalanması, kaç defa gönderilmesi gerektiğine karar veren bir Scheduler nesnesine verilir. Bu bilgiler TransmissionItem nesnesinde saklanır. 

Gönderme Zamanı
Kuyruğu periyodik olarak dolaş bir thread, gönderme zamanı gelen TransmissionItem nesnesini alır ve serialization işleminden geçirerek, kanaldan gönderir.

Veriyi TranmissionItem nesnesinin içine koyarak veriyi zarflama veya çalışılan platforma göre Big Endian, Little Endian göndermek gibi imkanlara da kavuşabiliriz.








2 Ağustos 2014 Cumartesi

bash file test operators

Giriş
file test operators bir nesnenin var olduğunu kontrol etmek için vardır.
Aşağıda konuyla ilgili notlarım var. Tüm seçenekleri eklemedim.

-a aslında -e seçeneği ile aynıdır ancak deprecate edilmiştir. Kullanılmamalıdır.

-e  dosyanın var olduğunu kontrol eder
True if file exists.

-f normal bir dosyanın var olduğunu kontrol eder
True if file exists and is a regular file.

-p pipe'ın var olduğunu kontrol eder.
True if file exists and is a named pipe (FIFO).
 Örnek:
if [ -p "$pipe" ]


30 Temmuz 2014 Çarşamba

Parasoft C/C++ Test Metrics Notlarım

Giriş
Konuyla ilgili olarak Parasoft C/C++ Test Statik Analiz başlıklı yazıya göz atabilirsiniz.

Eğer Parasoft pahalı geliyorsa Visual Studio ile de Code Metric alınabiliyor. Ancak bu araç sadece managed code için çalışıyor.

Builtin Metrics Konfigürasyonu
Builtin > Static Analysis > Metrics konfigürasyonu kullanılarak metrikler ölçülebilir. Esasında bu konfigürasyon herşey için yeterli. Kendi statik analiz projemiz ile metrik ölçümünü aynı konfigürasyon içine koyabiliriz ancak bence bu tercih edilmemeli.

Kendi Konfigürasyonumuz İçin Metrik Ayarlaması

Metrikler Number of Fields/Methods etrafında yoğunlaşıyor.

Coupling Between Objects    <30
Inheritance Depth                  <5
Lack of Cohesion                 < 0.9

Number of private fields         < 20
Number of private methods     < 20
Number of protected fields      < 20
Number of protected methods < 20
Number of public fields          < 20
Number of public methods      < 20

Number of constructors          <6
Number of fields                    < 30
Number of instance fields      < 10
Number of instance methods < 30
Number of methods               < 50

Number of static fields           < 20
Number of static methods      < 20



İlginç metrikler "Coupling Between Objects" (çok fazla bağımlılık) ve "Lack of Cohesion" (sınıfın birden fazla iş yapması)
Functionally Cohesive ve Sequentially Cohesive arasındaki farkı anlatan bir yazı burada.

Metrik Sonuçları
Metrik sonuçları Parasoft > Show View > Metrics veya Parasoft > Show View > Quality Tasks altında görülebilir. İlk pencere okuması daha kolay bir sunum sağlıyor.

Olmayan metrikler
Kodlama standartlarına konmasına rağmen olmayan bazı metrikler var. Demek ki bu metrikler aslında çok önemli değil.

Length of Method
Metodların uzunluğu konusunda bir çok fikir öne sürülüyor. 20, 65 veya 100 satırı geçmemeli diyenler var.

Clean Code: A Handbook of Agile Software Craftsmanship, Robert Martin:

The first rule of functions is that they should be small. The second rule of functions is that they should be smaller than that. Functions should not be 100 lines long. Functions should hardly ever be 20 lines long.


29 Temmuz 2014 Salı

Outlook Notlarım

E-Postanın To Kısmı
İsmin baş kısmını yazıp Ctrl + K tuşlarına basınca ismi tamamlar.