Sanırım Powershell'i çok seviyorum:) Bu aralar Powershell ile sıkça kullandığım işlemleri otomatize etmeye başladım. Özellikle de Framework Classnesne larını içerenleri.
Write-Host "Deger girin:" -NoNewline $arg = Read-Host$hash = [System.Security.Cryptography.MD5]::Create() $data = [System.Text.Encoding]::ASCII.GetBytes($arg) $array = $hash.ComputeHash($data) foreach($byte in $array) {$output += $byte.ToString("x2")} Write-Host "result -> " $output
Kodları "ps1" uzantı ile kayıt edip komut satırında parametre vererek çalıştırmak yeterli olacaktır.
Örnek script.
Geçenlerde bir uygulama için Captcha örneği hazırlıyoruz. Test aşamasında iken güvenilirliğini nasıl test edebiliriz diye düşündüm. Akabinde aklıma MS OneNote uygulaması geldi. Ms Outlook'tan sonra en sık kullandığım ikinci MS Office uygulamasıdır. Uygulamanın özellikleri saymakla bitmez ama bizi ilgilendiren ise bir çeşit OCR özelliği barındırmasıdır. Bu özellik sayesinde resimlerin içindeki metinleri ayrıştırabiliryorsunuz.
Resime sağ tıkla ve metni ayrıştır.
Basit bir örnek ile başlayalım.
Arial 14 gri üzerine siyah metin. Sonuç -> 5TSRB5
İki çizgi atalım Sonuç - > KW4
Arka planı HatchBrush ile değiştirelim Sonuç -> String.Empty :)
Not: Bu test 100% güvenilir değildir. Daha iyi algoritmalar ile ayrıştırma daha başarılı olabilir.
Örnek proje.
Windows tabanlı uygulama geliştirirken başlangıçta yüklü işlemleriniz olmasa bile çok fazla kontrol yada yüksek hacimli arkaplan resimleri kullanıldığında parça parça erkrana gelen kontroller yada kilitlenmeler kaçınılmaz olabiliyor.
Bu gibi durumlarda çözüm olarak Applicationuygulama Classnesne sının Idle Eventolay i kullanılabilir. Bu olay yardımı ile bir işlemin bittiği ve beklemeIdle durumuna geçtiği anlaşılabilir.
Örnekte; Form Opacitysaydamsızlık özellliği 0 yapılarak gizlenir. (Uygulamayı simüle etmek için Load olayında 3000 milisaniye bekleme sözkonusu) İşlem bittiğinde ise Opacity özelliği ile Form gösterilir.
public Form1() { Opacity = 0; InitializeComponent(); listBox1.Items.Add(string.Format("Initialize -> {0:HH:mm:ss}", DateTime.Now)); Application.Idle += new EventHandler(Application_Idle); } void Application_Idle(object sender, EventArgs e) { listBox1.Items.Add(string.Format("Idle -> {0:HH:mm:ss}", DateTime.Now)); Opacity = 1; Application.Idle -= new EventHandler(Application_Idle); } private void Loading_Load(object sender, EventArgs e) { listBox1.Items.Add(string.Format("Processing -> {0:HH:mm:ss}", DateTime.Now)); Thread.Sleep(3000); } private void button1_Click(object sender, EventArgs e) { listBox1.Items.Add(string.Empty); listBox1.Items.Add(string.Format("Processing -> {0:HH:mm:ss}", DateTime.Now)); Thread.Sleep(3000); }
Burada dikkat edilmesi gereken en önemli husus, görevi bittiğinde Idle olayının kaldırılmasıdetach gerekiyor.
Aksi takdirde olay sürekli tetiklenecektir.
Hepimiz zaman zaman standart Sql komutları (select insert gibi) dışında da kodlar yazmak durumda kalabiliyoruz. Çok tekrarlanmayan kodlar maalesef hafızamızda kalmıyor. Bu gibi durumlarda SSMS dan yardım almakta bir sakınca görmüyorum :)
Bu yazıda bildiğim 4 yöntemi sizlerle paylaşacağım.
1 - Template Explorer
View -> Template Explorer ile açılan pencere içinde birçok işlevin templateşablon kodlarına ulaşabilirsiniz. Çift tıkladığımızda kodlar ekrana gelecektir. Kolaylık olması için Ctrl+Shift+M kısa yolu ile template içindeki değişkenlere erişebilir ve değiştirebilirsiniz.
2 - Script As
Object Explorer içindeki nesnelere sağ tıklama ile erişebileceğiniz Script As menusu ile sql kodlarını elde edebilirsiniz.
3 - Generate Scripts
Yine Object Explorer içinde Database nesnesine sağ klik ile Tasks -> Generate Scripts... ile açılan sihirbazwizard ile sql kodları oluşturabilirsiniz.
4 - Script Action
Son olarak işlem yapılabilen pencerelerde bulunan Script düğmesibutton yardımı ile sql kodları da oluşturmak mümkün.
Umarım yardımı dokunmuştur.
Geçenlerde herhangi bir uygulama geliştiriyordum ki aniden bir kontrol ihtiyacım oldu. Söyle ki;
Bir Classnesne oluşturdum.
public class Employee { public int ID { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public decimal Salary { get; set; } public DateTime HireDate { get; set; } }
Daha sonra kopyasınıinstance çıkarıp özelliklerine değer atadım. Buraya kadar herşey normal. Peki dedim şunu birde WebForm'unda zahmetsiz bir şekilde gösterebilsem ne süper olur. Böyle durumda akla en yatkın DetailsView veri kontrolü kullanmaktır. Lakin kontrolün DataSource özelliğine herhangi bir nesneyi zart diye atayamazsınız. Eğer atarsanız şöyle bir hata alırsınız
Hoş değil :(
Bu gibi durumlarda olmasa ne zaman kontrol geliştireceğiz ki :) Peki ne yapmak lazım; Mantık basit. Reflection ile nesne özelliklerini okumak, kontrolün ihtiyaç duyabileceği ekstra bilgileri Attributenitelik yardımı ile iletmek.
[Serializable] public class Employee { [FieldAttributes(IsVisible = false)] public int ID { get; set; } [FieldAttributes(FieldHead = "Ad")] public string FirstName { get; set; } [FieldAttributes(FieldHead = "Soyad")] public string LastName { get; set; } [FieldAttributes(FieldHead = "Maaş", Format = "N2")] public decimal Salary { get; set; } [FieldAttributes(FieldHead = "İşe Başlama Tarihi", Format = "dd.MM.yyyy")] public DateTime HireDate { get; set; } }
Kullanımın kolay olması için SmartTag ve DesignTimeSupport gibi atraksiyonlar.
Sonuç;
Proje dosyası.