T-SQL Binary Comparison - CAST Operator

by Yasin Sirkecili 23. Ekim 2009 14:34

Herkese merhabalar bu yazımızda SQL Server kullanan geliştiriciler için case sensitive karşılaştırmaların nasıl yapılacağına değineceğim;

Bildiğiniz gibi MSSQL Server kurulumu esnasında Collation konfigürasyonunda herhangi bir ayarlama yapmaksızın default olarak kurduğunuz SQL Server ile oluşturduğunuz tablo verileri içerisinde çalıştırdığınız sorgular insensitive olarak çalışmaktadır. Bu durumda geliştirdiğimiz uygulamalar içerisinde parola doğruma noktasında sıkıntı yaratmaktadır.

MSSQL ile oluşturduğunuz tablolarda kolonlara göre sorgularınızın case sensitive/insensitive olarak çalışmasını kolaylıkla konfigüre edebilirsiniz. Bunun için ilgili tablonun Design modunda kolonun Collation ayarlarına gelerek Case Sensitive checkbox'ını seçili konuma getirmeniz yeterlidir.

Ancak sorgularınızın dinamik oluştuğu durumlarda veya SQL Server yönetiminin elinizde olmadığı durumlarda bu işlemleri T-SQL ile nasıl gerçekleştirebiliriz ona bakalım;

DECLARE @Name nvarchar(50)
SET @NAME = 'yasin'
select * from WebUsers where CAST(Name as binary)=CAST(@NAME as binary);

Burda kullandığımız method basitçe şöyle izah edilebilir. Hem Kolonda bulunan verileri hemde gönderdiğimiz parametreyi binary tipine dönüştürüyoruz. SQL Server'a ait bu karşılaştırmayı yapan CPU için büyük ve küçük karakterler farklı kod dizilimleri yaratacağından birbiriyle case sensitive olarak eşleşmeyen verilere ait sonuçlar dönmeyecektir.

kolay gelsin...

6 kişi tarafından 4.3 olarak değerlendirildi

  • Currently 4,333333/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

MSSQL | T-SQL

SmtpClient SendCompleted Event

by Yasin Sirkecili 23. Ekim 2009 12:12

System.Net.Mail namespace'i altında yer alan SmtpClient sınıfını kullanarak mail gönderme işleminden daha önce bahsetmiştim. Bu yazıda sadece SmtpClient class'ından türettiğiniz instance'in Send(); fonksiyonunun sonucunda oluşan SendCompleted event'ini inceleyeceğiz.

Basitce bir mail gönderme uygulaması yazacak olursak;

protected void Button1_Click(object sender, EventArgs e)
{
SmtpClient smtppc = new SmtpClient("mail.alanadi.com");
smtppc.SendCompleted +=
new SendCompletedEventHandler(smtppc_SendCompleted);
MailAddress frommail = new MailAddress("from@alanadi.com", "From Sender Name");
MailAddress tomail = new MailAddress(to@alanadi.com);
MailMessage yenimail = new MailMessage(frommail, tomail);
yenimail.SubjectEncoding = System.Text.
Encoding.GetEncoding("ISO-8859-9");
yenimail.BodyEncoding = System.Text.
Encoding.GetEncoding("ISO-8859-9");
yenimail.Subject = TextBox1.Text.Trim();
yenimail.Body = TextBox2.Text.Trim();
yenimail.IsBodyHtml =
false;
yenimail.Priority =
MailPriority.High;
System.Net.
NetworkCredential izin = new System.Net.NetworkCredential("from@alanadi.com", "password");
smtppc.UseDefaultCredentials =
false;
smtppc.Credentials = izin;
smtppc.Port = 587;
try
{
smtppc.Send(yenimail);
}
catch
{
ScriptManager.RegisterStartupScript(Page, typeof(string), Guid.NewGuid().ToString(), "alert('Hata Oluştu');", true);
return;
}
}
protected void smtppc_SendCompleted(object sender, EventArgs e)
{
ScriptManager.RegisterStartupScript(Page, typeof(string), Guid.NewGuid().ToString(), "alert('lletiniz gönderildi');", true);
}

Gözlemleyebildiğiniz gibi try blogu içerisinde mail gönderme işlemi başarı ile sonuçlandıktan sonra smtppc_SendCompleted event'i tetiklenecek ve bu blok içerisine yazdığınız kodlar çalışacaktır. Tek yapmanız gereken SmtpClient nesnesinden bir instance türettikten sonra SendCompleted eventini

smtppc.SendCompleted += new SendCompletedEventHandler(smtppc_SendCompleted);

şeklinde türeterek karşılık gelen ilgili fonksiyonu türetmektedir.

kolay gelsin...

5 kişi tarafından 4.0 olarak değerlendirildi

  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP.NET | C#

Free IP to Geographic Location

by Yasin Sirkecili 23. Ekim 2009 11:30

 

IPINFODB.COM un sundugu ücretsiz lokasyon tesbiti uygulamasını kullanarak kullanıcıların IP Adresinden bulundukları lokasyonu kolayca tesbit edebilirsiniz. Normalde böyle bir uygulama için IP2LOCATION.COM a yüklü miktarda para ödemeniz gerekebilir. Ama bunu ücretsiz olarak kullanabilirsiniz.

DataSet dset = new DataSet();
dset.ReadXml(
http://ipinfodb.com/ip_query.php);
Label1.Text = dset.Tables[0].Rows[0][
"CountryName"].ToString();
Label2.Text = dset.Tables[0].Rows[0][
"City"].ToString();

 

Ben sadece Ülke adı ve Şehir adı bilgisini aldım ancak dönen XML verisinin tamamı şöyledir;

 <Response>
  <Ip>95.70.229.81</Ip>

  <Status>OK</Status>
  <CountryCode>TR</CountryCode>
  <CountryName>Turkey</CountryName>
  <RegionCode>34</RegionCode>
  <RegionName>Istanbul</RegionName>
  <City>Istanbul</City>
  <ZipPostalCode />
  <Latitude>41.0186</Latitude>
  <Longitude>28.9647</Longitude>
  <Timezone>2</Timezone>
  <Gmtoffset>2</Gmtoffset>
  <Dstoffset>3</Dstoffset>
</Response>

Siz kendinize göre ihtiyacınız olan verileri kullanabilirsiniz.

Kullanıcılarınızı üye olurken, uçak bileti alırken, tatil sepeti kiralarken vb...  seçtiği dropdownlistlerde bulunduğu lokasyonu otomatik olarak seçili getirip şaşırtabilirsiniz :)

kolay gelsin...

4 kişi tarafından 4.5 olarak değerlendirildi

  • Currently 4,5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP.NET | C#

VSTO - C# - OCR with MS Office Document Imaging 12.0

by Yasin Sirkecili 23. Ekim 2009 09:37

Herkese merhabalar;

Bugünkü konumuz printer, daktilo, fotokopi vb. kağıt halindeki çıktılardan tutunda plaka tanıma sistemlerine kadar uzanan insan hayatını kolaylaştıran en sevdiğim yapay zeka uygulamalarından olan OCR(Optical Character Recognition) uygulamasının C# ile nasıl yapılacağına basitce bakacağız. Amacımız JPG dosyasındaki text verileri tanımlayıp *.txt dosyasına aktaracak bir OCR(Optical Character Recognition) uygulaması gerçekleştirmek.

İlk olarak projemize COM objesi olan Microsoft Office Document Imaging 12.0 Type Library referansını ekliyoruz. bu referans eklendiğinde MODI adında bir namespace'in kullanılabilir olduğunu göreceksiniz. Bu API Office 2003 ile birlikte geldiğinden Office 2003 veya üstü versiyonlarla kullanabilirsiniz. Ben projemi bir ASP.NET Web uygulaması olarak gerçekleştirdim siz isterseniz Windows Application kullanarak taranan veriyi richtextbox'a aktarabilirsiniz.

uygulamamızın xhtml görünümü şöyledir;

<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
</div>
</form>

Sadece bir FileUpload ve button kontrolü kullandığımız projenin icrası şu yönde olacaktır; Resim seçildikten sonra eğer jpg formatındaysa resmin adı değiştirilip jpgs diye bir klasöre aktarılacak daha sonra burda OCR işlemi gerçekleştirilecek.

if (FileUpload1.HasFile)
{
string uzanti = System.IO.Path.GetExtension(FileUpload1.FileName.ToLower().Replace("", "i"));
if (uzanti == ".jpg")
{
string dosyaadi = DateTime.Now.ToString().Replace(".", "").Replace(":", "").Replace("/", "").Replace("-", "").Replace(" ", "");
dosyaadi += uzanti;
FileUpload1.SaveAs(
HttpContext.Current.Server.MapPath("~/jpgs/" + dosyaadi));
System.IO.
FileStream fstream;
System.IO.
StreamWriter swriter;
try
{
MODI.
Document mdoc = new MODI.Document();
mdoc.Create(
HttpContext.Current.Server.MapPath("~/jpgs/" + dosyaadi));
mdoc.OCR(MODI.
MiLANGUAGES.miLANG_TURKISH, true, true);
MODI.
Image mimg = mdoc.Images[0] as MODI.Image;
fstream =
new System.IO.FileStream(HttpContext.Current.Server.MapPath("~/yasin.txt"), System.IO.FileMode.OpenOrCreate);
swriter =
new System.IO.StreamWriter(fstream);
swriter.Write(mimg.Layout.Text);
swriter.Close();
fstream.Close();
}
catch
{
ScriptManager.RegisterStartupScript(Page, typeof(string), Guid.NewGuid().ToString(), "alert('Hata olutu');", true);
}
}
else
{
ScriptManager.RegisterStartupScript(Page, typeof(string), Guid.NewGuid().ToString(), "alert('.jpg formatında bir dosya seçiniz.');", true);
}
}
else
{
ScriptManager.RegisterStartupScript(Page, typeof(string), Guid.NewGuid().ToString(), "alert('Dosya seçmediniz.');", true);
}

Kodlarımızı açıklayacak olursak;

İlk olarak System.IO.Path sınıfı altındaki getextension fonksiyonundan faydalanarak aktarılan dosyanın .jpg uzantısına sahip olup olmadığını kontrol ediyoruz. Daha sonra bu dosyayı jpgs adında oluşturduğumuz klasöre aktarıyoruz.(Dosya adının çakışmasını engellemek için tarihe göre isim değiştiriyoruz) Sonrasında Jpg file içerisinde taranan karakterleri *.txt dosyasına aktarmamızı sağlayacak olan filestream ve streamwriter classlarından birer instance yaratıyoruz.

MODI.Document mdoc = new MODI.Document();

ile mdoc adında MODI.Document classından OCR işleminde kullanacağımız yeni bir instance türettik.

mdoc nesnesinin Create fonksiyonunu kullanarak parametre olarak taranacak jpg dosyasının yolunu belirtiyoruz.

mdoc nesnesinin sahip olduğu en önemli fonksiyonumuz olan OCR fonksiyonuna gönderdiğimiz parametrelerle tarama işleminin sonuçlanmasını sağlıyoruz. Burdaki parametrelere ait açıklamalar şöyledir;

1 -) LangId : MODI.MiLANGUAGES enum değişkeninde tanımlanan karakter setlerinden size uygun olanı seçmenizi sağlar.
2- ) OCROrientImage : Sayfanın yatay veya dikey olup olmadığının API tarafından algılanmasını sağlayan boolean tipli bir değerdir.
3- ) OCRStraightenImage :  API tarafından image üzerindeki karakter tanımayı engelleyici eğimlerin otomatik olarak düzenmesine karar veren  boolean tipli değişkendir.

daha sonra MODI.Image tipinde oluşturduğumuz mimg nesnemize mdoc içerisindeki resimlerden istediğimizi aktarıyoruz.(Biz tek bir resim üzerinde işlem yaptığımızdan 0 index'ine sahip resmi aktardık)

bu işlemleri tamamladıktan sonra taranan ve karakter haline çevrilen verileri yasin.txt dosyasına yazarak filestream, streamwriter nesnelerinden türettiğimiz instance'ları Close(); methoduyla sonlandırarak jpg file içerisindeki karakterlerin yasin.txt dosyasına aktardığını gözlemleyebiliriz.

OCR işlemlerinin en basit hali bu şekilde uygulanabilir, dilerseniz siz daha detaylı OCR uygulamaları geliştirebilirsiniz.

kolay gelsin...

 

5 kişi tarafından 4.6 olarak değerlendirildi

  • Currently 4,6/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP.NET | C#

Eğer Ancak ise - Yanlış ve Yanlış <--> Doğru

by Yasin Sirkecili 14. Ekim 2009 16:01

Bugün Sultanla önermeler üzerine telefonda tartışırken bişeyi farkettim. Matematikde kullandığımız mantık ile programatik olarak akışlara yön vermemizi sağlayan mantıksal koşullama ifadeleri arasında bi farkı var.

Telefonda ısrar ettiğim üzere Yanlış ve Yanlış doğrudur sonucu malesef yanlışmış.

P Q   \neg P P \land Q P \lor Q P \to Q P \leftrightarrow Q
D D   Y D D D D
D Y   Y Y D Y Y
Y D   D Y D D Y
Y Y   D Y Y D

D

Programatik olarak kullandığımız if örgüsü meğer "Eğer ancak-ise" mantığı ile çalışıyormuş :)

Örenmiş olduk... :) Daha çok matematik çalışmak lazım... :) 

 

3 kişi tarafından 4.0 olarak değerlendirildi

  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

Genel | Yasin Sirkecili

pardon...

by Yasin Sirkecili 4. Ekim 2009 13:15

Pardon bakarmısınız... Tanışmış mıydık?...
Sevmişmiydim ben sizi hiç? Sevişmiş miydik?


Bugün kendinize bir iyilik yapın... ve Sezen Aksu - Yürüyorum Düş Bahçelerinde albümünü satın alın... Fakir bir pazar gününe ait muhteşem bir tını olduğundan emin olabilirsiniz...

Sezen AKSU'nun 23. albümü olan Yürüyorum Düş bahçelerinde içerisinde 9. şarkı olan Söz ve Müziği Sibel Algan'a ait olan "Pardon" şarkısına bayıldığımı söyleyebilirim... Bu şarkı albümü alan herkes tarafından defalarca dinlenmek istenecektir diye düşünüyorum.

Aşağıdaki link ile hemen satın alabilirsiniz.

http://www.hepsiburada.com/sezen-aksu-yuruyorum-dus-bahcelerinde-2-cd-1-dvd/productDetails.aspx?categoryid=10759&productid=musicdmc162

1 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

İş Sözleşmeleri

by Yasin Sirkecili 3. Ekim 2009 16:07

4 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

Görev Tanımları

by Yasin Sirkecili 3. Ekim 2009 16:06
 
Bir iş yerindeki görev tanımları... :)

-9 kadının 1 bebeği 1 ayda doğurabileceğini söyleyen kişiye “Proje Müdürü” denir...
...
-1 bebeği tutup geri kalanların satılarak şirkete kaynak sağlayacağını söyleyen ve “Proje Müdürünün” işten çıkarılmasını öneren kişiye “Finans Müdürü” denir...
...
-1 bebeğin 18 ayda ancak doğacağını söyleyen kişiye “Üretim Müdürü” denir...
...
-Tek bir kadının 1 ayda 9 bebek doğurabileceğini söyleyen kişiye “Planlama Müdürü” denir...
...
-Bebeğin üretim şeklinin ille de yanlış olduğunu söyleyen kişiye “Kalite Müdürü” denir...
...
-Dünyada hiç kadın ve erkek kalmasa o bebeği kendisinin doğurabileceğini söyleyen kişiye “Pazarlama Müdürü” denir...
...
-1 kadından 1 bebeği 1 ayda doğurmasını bekleyen kişiye “Genel Müdür” denir...
...
-1 ayda, dokuz doğuran kişiye “Memur”, bebek filan istemediğini söyleyen kişiye de “Müşteri” denir...

6 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

Genel

Vanilyalı Dondurma

by Yasin Sirkecili 2. Ekim 2009 02:34

Vanilyalı dondurma

General Motors şirketinin Pontiac marka otomobil departmanına gelen bir şikayet mektubu şu satırlardan oluşuyordu:

"Her akşam yemekten sonra ailecek dondurma yeme alışkanlığına sahibiz. Fakat bir çok dondurma çeşidi olduğu için her yemekten sonra ne çeşit dondurma yiyeceğimize hep karar veririz. Ben de markete gider alırım. Geçen ay otomobilimi değiştirip yeni bir pontiac aldım ve o günden beri markete gidip gelmek benim için sorun olmaya başladı. Çünkü ne zaman vanilyalı dondurma alsam market çıkışında otomobilimi çalıştıramıyorum. Fakat başka çeşit bir dondurma aldığımda arabam gayet güzel çalışıyor. Bu sorun size çok saçma bile gelse, benim çok ciddi olduğumu bilmenizi isterim. Vanilyalı dondurma aldığımda arabam çalışmazken, neden başka dondurma aldığımda arabam çalışıyor?"

Kolaylıkla buruşturulup atılacak bir şikayet mektubu gibi görünüyor, değil mi? Öyle de olabilirdi. General Motors yetkilileri bu şikayet mektubunu bir kenara atabilirdi, müşterinin sorusuda sonsuza dek yanıtsız kalabilirdi. Ancak General Motors şirketi olayı araştırması için bir mühendisi görevlendirdi.

Mühendis, nezih bir muhitte oturan, iyi eğitim almış Pontiac sahibiyle karşılaşınca biraz şaşırmıştı, böyle bir konuda dalga geçecek birine benzemiyordu. Akşam yemekten sonra yapılan dondurma alışverişine birlikte çıktılar. Vanilyalı dondurma alıp geri döndüklerinde, gerçekten de otomobil çalışmıyordu. Ertesi akşam çikolatalı dondurma aldılar ve araba çalıştı. Üçüncü akşam sıra çilekli dondurmadaydı ve araba yine çalışıyordu. Son deneme turunda vanilyalı dondurma alındı ve maalesef araba yine çalışmadı.

General Motors yetkilisi şaşkındı. Bir mühendis olarak, arabanın vanilyalı dondurmaya alerjisi olduğunu düşünmek pek akıllıca gelmiyordu. Bunun üzerine ziyaretlerine bir süre daha devam etti. Olayın günün hangi saatinde olduğunu, hangi tip benzin kullanıldığını, gidip gelme süresini ve daha pek çok ayrıntıyı incledi. Kısa bir süre içinde de ilk ipucunu elde etti. Vanilyalı dondurma almak diğer çeşitlere oranla çok daha kısa sürüyordu. Çünkü en çok aranılan ürün olan vanilyalı dondurma marketin hemen girişindeki dolapta satılıyordu. Diğer dondurma çeşitleri ise marketin en arka kısmında kurulu bir tezgahtan seçiliyordu. Herhangi değişik bir çeşidi almak bu yüzden çok daha uzun sürüyordu. Şimdi mühendisin karşı karşıya kaldığı soru şuydu? Otomobil neden daha kısa süre içinde geri dönünce çalışmıyordu? Zaman faktörü işin içine girince mühendis sorunun cevabını bulmakta zorlanmadı. Sorun, motor soğuduğunda devreye giren buhar kilidinden kaynaklanıyordu. Bu kilit, normal şartlarda motor durduktan hemen sonra devreye girip çalışıyordu ve çikolatalı yada çilekli dondurma alana dek geçen süre, motorun tekrar çalışması için yeterli soğumaya imkan tanıyordu. Vanilyalı dondurma gecelerinde ise süre çok kısa olduğu için motor soğuyacak vakit bulamıyor ve buhar kilidi devreye girmiyordu.

 Bu öyküden de anlaşılacağı gibi, komik hatta asılsız gibi görünen bir müşteri şikayeti bir şirketin ürün geliştirmesinde kullanabileceği değerli bir veri haline dönüşebiliyor. Müşteri şikayetlerinin değerlendirildiği zamanlarda bir kurum için hediye niteliği taşıdığı bilinir. Bu gerçek öykü, garip bile olsa müşteri sorunlarının ve şikayetlerinin ürün ve hizmet geliştirmeye olan katkısının önemini gösteriyor.

 

3 kişi tarafından 4.7 olarak değerlendirildi

  • Currently 4,666667/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

Genel

Visual Studio 2010 Reset Settings

by Yasin Sirkecili 2. Ekim 2009 00:38
Visual Studio 2010 üzerinde default gelen ayarları değiştirmiş ve tekrar düzeltemiyorsanız.
Başlat > Çalıştır (Winkey + R) alanına devenv /resetsettings yazıp entera basmanız yeterli. Visual Studio 2010 ayarlarınız ilk haline dönecektir.

8 kişi tarafından 3.5 olarak değerlendirildi

  • Currently 3,5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

Genel

C# 4.0 Specification E-Book

by Yasin Sirkecili 1. Ekim 2009 12:19

C# 4.0 ile gelen yeni özellikleri bulabileceğiniz 25 sayfalık bir e-book download için aşağıdaki linke tıklayabilirsiniz.

CSharp-40-Specificationdoc.pdf (272,34 kb)

1 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

Genel

Powered by BlogEngine.NET 1.4.5.0
Theme by Mads Kristensen

Yasin Sirkecili


Yasin Sirkecili
Software Developer
MSN & Mail: yasin@sirkecili.com

Bağlantılar

Calendar

<<  Şubat 2012  >>
PaSaÇaPeCuCuPa
303112345
6789101112
13141516171819
20212223242526
2728291234
567891011

View posts in large calendar

Son Yorumlar

Bağlantılar 2