Çarşamba, Ekim 29, 2008

İletişim

Benimle iletişime geçebileceğiniz e-posta ve anlık mesajlaşma adreslerim:

Hakkımda

Bana ait CV'ye ulaşmak için tıklayın.
Birkaç cümleyle özetlenirse:
  • Bilgisayarla ilgili konularda uzmanlaşmaktan ve bu konularla uğraşmaktan mutluluk duyuyorum.
Yaptıklarım :
  • Şu anda Enterprise Java / JBoss-Seam konuları üzerine çalışmaktayım.
  • Asp.net ile yazdığım ve UML kullanılarak modellediğim Uzaktan Eğitim Sistemi.
  • C#.net ile 3M için otomasyon sistemi
  • Asp.net MVC framework ile blog sistemi çalışması
  • Bilgi Medya Bilişim Ltd. Sti 'de 20 gün staj çalışması
  • Asp.net ile kurumsal web siteleri ve portal, içerik yönetim sistemleri
  • Linux işletim sistemi ve kurumsal projelerde veritabanı, mail, uygulama, dosya sunucusu olarak kullanımı
  • C# ile sistem-dosya yedekleme projesi
  • C dili ile seri portları kullanan mesajlaşma yazılımı



Cumartesi, Ekim 18, 2008

Programlama Dilleri ve Yapısal Özellikleri

Bu yıl java dilin öğrenmeyi hayal ettiğim programlama dili dersinin içeriğinin değiştiğini öğrendiğimde önce biraz üzüntü duydum. Kendim java öğrenirken de burada paylaşmak istiyordum ki bu düşüncelerimi gerçekleştiremeyecek olmak beni üzdü. Fakat içeriği öğrendiğimde çok farklı şeyler düşündüm çünkü aldığım ders ile çoğu revaçta olan dilleri karşılaştırmalı olarak göreceğiz. Bu sayede dillerin gelişim süreçlerini bileceğiz ve uygulamalar için uygun dillerin seçimini de yapmamız kolay olacak. Bir diğer konu ise almaa başladığımız veri yapıları ve algoritmalar dersi. İlk başta bir yazılım mühendisi ile dışarıdan bu işi öğrenen bir progamcının farkının olmadığını düşünüyordum. Bu iki dersle birlikte özellikle yazılım konularında başarılı olmak için Veri Yapılarının ve Algoritmaların mühendis - tekniker- programcı ayrımı gözetmeden çok iyi incelenmesi gerektiğini öğrendim.
En önemli nokta da derslerin ve bu yoğunluğun arasında bazı şeylere zaman ayıramıyor olmam. Bunların başında da değerli blogum geliyor. Artık yazılarım azalıyor gibi olsa da daha dolu dolu içeriklerle tekrar birlikte olmak dileğiyle...

Cumartesi, Ekim 04, 2008

Java ile Programlama

Programlama ile ilgili yazacak yazılar ve araştırılması gereken çok konu var fakat önemli olan sanırım bu çabayı ve azmi kendinde bulabilmek. Programcının yararlanabileceği en büyük kaynak kendi araştırma azmidir demek içimden geliyor. Takvimler 2008 in de bitiyor olduğunu söylerken, geriye doğru baktığımda , bilgisayar ile programlama mantığı üzerine ilk düşünüşlerimin yine 2006 yılının sonlarına doğru olduğunu görüyorum. 2 yılda belki çok kısa bir zaman gibi görünebilir ama bilgisayar ile programlama yolculuğuma C- C++ - C# - ASP.NET- MSSQL- MYSQL- HTML- CSS gibi programlama dillerini ve yöntemlerini kattım. Bu kadar yazmışsın ama hepsini nasıl biliyorsun diye sorabilirsiniz. Hepsinde uzman olduğumu düşünmüyorum fakat bir Bilgisayar Mühendisinin bilmesi gerektiği kadar bildiğimi düşünüyorum. Önemli olan mantıktır, hangi dilde olursa olsun anlayışına katılmıyorum. Kendimi C-C++ programcısı olarak görmüyorum. İlk öğrendiğim diller olsalar da yapı itibariyle bu dillerle çalışmanın zor olduğunu düşünüyorum. Yönelmek istediğim diller sağlam bir Framework ile desteklenen diller. Java ve C# gibi. C# ve ASP.net alanında az zamanda çok büyük işler yapsam da zamanla ne olacağı belli olmaz diyerek Java dilini de alternatiflerim arasına almak istiyorum. Neyseki java öğrenmek için boş vakit aramama gerek kalmayacak çünkü bu yıl ilk dönem Java ile başlayacağımızı öğrendim. Üniversitede okumak bazen yararlı olabiliyormuş. Tabi bir de askerliği kısa yapıyorsunuz :)
Java için biraz hazırlık olsun diye Eclipse IDE lerinden birkaç çeşitini alet çantama alıyorum. Sağolsunlar Sun firması Netbeans 6.1 IDE dvd sini evime kadar göndermişlerdi. Bu konularda en iyi kaynağın derleyicilerin kendi dökümantasyonları olduğuna inanıyorum. ilk tanıştığım dökmantasyon Visual C++ 6.0 ile kurulmaya çalışan MSDN di. Kurduktan uzun bir zaman sonra anlamıştım msdn in ne büyük (VS 2008 için 1.5 GB) bir dökümantasyon olduğunu. Birkaç türkçe kitap da almayı düşünüyordum fakat komik çevirilerle dolu ve her an elinizin altında olması için 2 kiloya kadar ağırlık çalışmanız gereken (900 sayfa civarıdır) kitaplardan ilerde bir mühendis olarak kitaplığımda tozlandırmak için almanın daha iyi bir karar olduğunu düşünüyorum.
http://www.allimant.org/javadoc/ bu siteden iyi hazırlanmış java dökümanlarını indirebilirsiniz. Özellikle java tutorial çok güzel hazırlanmış. Java ile tanışınca ilk deneyimlerimden başlayarak burada yazmaya çalışacağım. Sanırım java ile ilgili önemli konuları da öğrenince programlamada yola hangi dille devam edeceğime karar vereceğim. "Ne olsa yazarım abi" ci değil "hepsini bilirim, birisiyle yazarım" cılardan olma yolunda ilerliyoruz. Görüşmek üzere.

FileUpload Kontrolünü Etkili Kullanmak ve Güvenlik Konuları

File Upload Kontrolü ASP.net 2.0 ile gelince çoğu problemimiz çözüldü fakat server ile ilgili ve HTTP altyapısında bulunan bazı kısıtlardan dolayı File Upload kullanımında sürükle bıraktan daha fazlasını bilmek gerekiyor. Öncelikli olarak server için yapılması gereken ayarlama FileUpload sonucu gönderilen dosyaların saklanacağı klasörün Network Service kullanıcı için read-write izinlerini sağlıyor olması gerekli. Bunun için ISS ile ya da Klasör için Advance Configurations ayarlarını yapmamız gerekiyor.(ISS 6-7 için Network Service,ISS 5 için ASP.net kullanıcısıdır.)
Bir diğer sorun da web.config içerinden ayarlanabilecek bir ayarlamayla

ile kb cinsinden dosya boyutları ve sn cinsinden time out süreleri ayarlanmalıdır. Bu iki konu aşıldığında ise FileUpload kontrolünü kullanmak kolay olacaktır. Server da gerçekleştireceğiniz diğer işlemler(XML okuma yazma ya da basit file Stream dahi) için ISS için söylediğim ayarlamalar yapılmalıdır. File upload kontrolünün bulunduğu sayfa için role tabanlı ya da windows tabanlı bir güvenlik sistemi oluşturulması izinsiz kişilerin sizin dosyalarınız arasına dosya göndermesini engeller fakat izinsiz kod çalıştırılmasını engellemek için sadece ihtiyaca göre dosya uzantılarını kısıtlarsak bunun önüne kolayca geçebiliriz.

protected void Button1_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile) // Dosya yolu girilmişse
{
string extension = System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
if (extension == ".jpg" extension == ".gif")
{
try
{
string path = Request.PhysicalApplicationPath + @"data\";
string dosyaAdi = Path.GetFileName(FileUpload1.PostedFile.FileName);
string uploadYolu = Path.Combine(path, dosyaAdi);
FileUpload1.PostedFile.SaveAs(uploadYolu);
Label1.Text = string.Format("Dosya yüklendi..
Dosya adı: {0}
Dosya boyutu: {1} byte
Dosya adresi: {2}", FileUpload1.PostedFile.FileName, FileUpload1.PostedFile.ContentLength, Server.MapPath("data") + FileUpload1.PostedFile.FileName);
}
catch (Exception ex)
{
Label1.Text = ex.Message;
}
}
}
}
Bu kodlarla ben sadece resim dosyaları için açtığım bir klasöre istediğim resim formatlarında olan dosyaları kabul ettim.Eğer böyle bir kontrol yapmamış olursam kötü niyetli bir kişi benim yapmış olduğum fileupload kontrolü ile kendi yazdığı asd.aspx ve asd.aspx.vb (kötü niyetli kişimiz vb ile yazıyor olsun :)) ) dosyalarını atarak ilk olarak düşünebildiğim benim klasörümdeki tüm resimlerimi silebilir. Bunu önlemenin diğer bir yolu da klasörümüzde bir kod sayfası bulundurmayacaksak ISS altındaki bu klasör için Network Service kullanıcısının executable yeteneğini kaldırabiliriz.

Perşembe, Ekim 02, 2008

web.config-I

web.config ASP.net ile haşır neşir olan herkesin birgün kesinlikle karşılaşacağı ve daha da önemlisi bir daha onsuz yapamayacağı bir dosya. Evet dosya çünkü içinde bildiğimiz XML formatında yazılmış bazı veriler var. Bu veriler ise işte o noktada kıyamet kopuyor doğru ayarlar sizi birçok sorumluluktan korurken, yanlış veya bilinmeyen yönleriyle bizi çok sıkı bir yola itiyor. Ben bu yazımda karşılaştığım ve sık sık kullandığım konulara yer vermeye çalışacağım.
Öncelikle web.config neyi ayarlar konusuna değinmeliyiz. Web.config aslında her server da bulunan ve güvenlik, doğrulama ve diğer verileri taşıyan machine.config dosyalarını ezmeye yarayan bir dosyadır. Ezmeye sözcüğünü kullandım çünkü durumu bu sözcük çok iyi anlatıyor. web.config ile ayarladığınız konularda sizin ayarlarınız etkin olurken hiç değinmediğiniz konularda serverda bulunan machine.config ler içindeki bilgilere göre hareket ediliyor. machine.config- ler diyorum çünkü machine.configler çok sayıdadır. (Birisi .net framework klasörü içindedir.) Local ISS ile çalıştırdığımız asp.net sayfalarımız için machine.config leri kullanarak da düzenleme yapabiliriz fakat bu iyi bir yöntem değildir çünkü çoğu programcı kendi bilgisayarında yazdığı kodu kendi ISS i ile internete yaymaz. config dosyalarının hiyerarşisini anladığımıza göre benim karşılaştığım noktalara değinebiliriz.
İlk konu bölgesel konular.Biz kullandığımız çoğu veriyi serverdan alma ihtiyacı duyarız. Saat - Tarih gibi bilgileri DateNow(); ile alınca benim bilgisayarımda Amerikan formatlarına göre gelirken Türkiyedeki bir hosting firmasında Türkiye ye göre gelir ve godaddy den hosting almışsanız yine Amerikan formatlarında gelir. Türk kullanıcıya 12.02 PM 12 Aug . 2008 gibi bi veriyi okutmak pek doğru olmaz. Bu sorunu çözmek için serverdaki ayarları kendinize göre değiştirmeniz gerekir. Bunu da web.config içerisine
<system.web>


<globalization culture="tr-TR" uiCulture="tr-TR" />

</system.web>

ekleyerek sağlayabilirsiniz.
Burada eksik kalan nokta XML yapısında olan bir döküman olduğu için web.config içerinde zaten element olarak <system.web> yazmanıza gerek yoktur. İncelediğinizde zaten var olduğunu göreceksiniz.


Bir web.config dosyasının hiyerarşik dizilimi:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
</system.web>
</configuration>


şeklindedir.
Diğer önemli konu da web.config global bir dosyadır. En önemli özelliklerinden biri dışarıdan bir kullanıcının bu dosyayı indirip okuyamıyor olmasıdır. Durum böyle olunca bizim global verilerimiz için de iyi bir saklama konumu olacaktır. Sql bağlantısı kullanan uygulamalarda ConnectionString bilgisini bu dosyaya <configuration> elementleri arasına yazmak adettendir. Adet olarak kabul görmesinin sebebi ise SqlConnection bilgilerimiz değişince sadece tek yerden bu veriyi değiştiriyor olmamızdır. Bu veriyi kodlarımız arasında nasıl kullanacağız derseniz tek satırlık kod ile işiniz çözülecektir.
ConfigurationSettings.AppSettings("sConnectionString");

Ayrıca bu ayarlar içerinde SMTP server bilgilerini saklamak da mantıklı bir çözüm olur.