mertoztekin.com

Siteyi açtık ama, yazmak da lazım...

Category: Programlama

PHP İle İlgili Bilinen 10 Yanlış

phplogoUzun zamandır blog’a birşey yazıcak zamanım olmuyor. Geçen gün phpclasses.org sitesinden aldığım günlük maillerden bir tanesini incelerken çok güzel bir blog yazısı dikkatimi çekti. Manuel Lemos tarafından yazılan Top 10 Wrong Ideas About PHP yazısı gerçekten çok başarılıydı. Bende yazıyı Türkçe’ye çevirip kendi bloguma koymaya karar verdim. Kendisinden email ile izin aldıktan sonra işte çevirim :


1. PHP Derlemeli(compiled) Bir Dil Değildir(Yorumlamalı Dildir)

2.PHP Bunları Yapamaz(Hafızaya erişme, donanıma erişme ve bu tarz şeyler)

3.PHP, X Dilinin Yapabildiği Birşeyi Yapamaz

4.PHP Sadece Web Projesi Geliştirmek İçindir

5.PHP Sadece Tek Bir Firma(Zend) Tarafından Kontrol Ediliyor

6. PHP Dokümantasyonu Kötü ve Yetersiz

7. PHP Projeleri Nesne Yönelimli(Object Oriented) Olmadıkları İçin Tekrar Kullanılabilir(Reusable) Değillerdir

8. PHP, Ruby On Rails, Phyton Django veya X Frameworkünden Daha Kötü

9. PHP Büyük Web Projeleri İçin İyi Değildir

10.PHP Yazılımcıları Daha Düşük Fiyata Çalışır Çünkü Daha Az Eğitimlidirler

Read the full post »

Ip Hatırlatma Servisi

Evdeki internetimi bir türlü sabit ip’ye çevirtemedim. Zaman bulupta telekoma gidip dilekçe veremiyorum(telefonla da olmuyormuş). Ara sıra evdeki bilgisayara remote desktopla girmem gerektiğinde “ip neydi yaw?” sorunsalıyla karşılaşmamak için geçen gün çok basit bir çözüm geliştirdim.

Read the full post »

Excel2Xml

Selamlar!

uzun zamandır bişi yazamıyordum. Master, iş, Starcraft2(ki sanırım en büyük suçlu o) derken pek ilgilenemedim. Neyse bugün biraz bi zamanım oldu ve geçenlerde şirkette yazdığım bi programı eklemeye karar verdim.

Şirkette analizini yaptığım ve yürüttüğüm bir proje için (batchte çalışan çoklu poliçelendirme sistemi) excelden xml’e çeviren bir programa ihtiyaç oldu. İş birimi çoklu poliçelendirme işlemi yapılacak kayıtların bilgilerini excel ile göndermek, yazılım ise xml ile almak istiyordu. İki tarafta kendince haklı olduğundan, sorunu araya bir dönüştürücü program yazarak çözmeye karar verdim. Excelden aslında XML üretmek için VBA yazılabiliyor fakat benim denemelerimde bir türlü UTF8 formatında dosya yaratamadım. Bu yüzden C# ile exceli okuyan, exceli istenen formatta xmle çeviren bir program yazdım.

Programın işleyişi oldukça basit : ekrandan Excel dosyasını ve Xml formatında Format dosyasını okutuyorsununuz. Program ilk önce Format dosyasını okuyor(Formatter sınıfı : XmlDocument), bir iki küçük check yapıyor(doğru dosya okundumu diye), daha sonra arka planda excel applicationu açıp, excel dosyasındaki ilgili sheeti DataTable olarak dönüyor.

Ekran Görüntüsü

Sonra bu datatableı, okunan formata göre işleyip bir preview sayfası çıkartıyor. Bu sayfada kullanıcı acaba mappingi doğru yapmışmı, yanlış okunan birşey varmı diye kontrol ediyor. Ayrıca eğer formatta bazı alanlar için özel kurallar girildiyse(zorunlu alan, numeric alan, enum vs.) o checkleri yapıp kullanıcıyı uyarıyor.

Eğer bir sorun yoksa Save As ekranı açıp, exceli istenen formatta Xml’e çeviriyor.

Preview Ekranı

Programın ne yazıkki unit testinglerini yazıcak vaktim olmadı. Zaten çokta kasış bişi olmadığından anlamakta zorluk çekilmeyecektir.

Eklere örnek bir xml ve excel dosyası da ekledim.

Format dosyası ile ilgili aşağıdaki kullanım klavuzunu yazmıştım. Neyin ne işe yaradığını kısaca anlatıyor. Bazı alanlar (DGR alanı gibi) şirkete özel kurallar. O yüzden sizin ihtiyacınız olmayacağından silebilirsiniz.

Format Xml İçeriği
<Format> : Format bölümü ana bölümdür ve bir kez tanımlanır.

  • tarih = Formatın düzenlenme tarihi
  • baslangicSatir = Excelde hangi satırdan itibaren poliçe kayıtları giriliyor.
  • maxSatir = Okunacak en fazla satır // şuan aktif değil
  • sheetName = Poliçe listesinin bulunduğu Sayfa ismi

<Alan> : Çıktı XML inde bulunacak bölümlerin listesi. <Alan> node’u iç içe olarak tanımlanabilir. Xml çıktısındaki hiyerarşik  yapıyla aynı şekilde tanımlanmalıdır. Node’un Text kısmına eğer var ise Exceldeki kolon ismi yazılmalıdır(A kolonu, B kolonu gibi).

  • name = Çıktı Xml’inde node ismi ne olarak yazılacak
  • root = Çıktı Xml’inde ana node olduğunu belirtir. Format dosyası içinde bir kere belirtilmelidir.
  • bosOlabilir = ilgili alanının Excel dosyasında belirtilmiş kolonda boş olup olamayacağını belirtir. Varsayılan true’dur.
  • dgrAlani = ilgili alanın Excel dosyasında DGR/TR olarak hem isim hemde ID tutan bir alan olduğunu belirtir. Dönüştürme esnasında isim kısmı silinip sadece ID kısmı çıktı xmline basılır. Varsayılan false’dur.
  • tarihKontrol = ilgili alanın Excel dosyasında tarih (YYYYAAGG) formatında girilmiş olmasını kontrol eder. Varsayılan false’dur.
  • enum = İlgili alanın Excelde sadece belirtilmiş kayıtlar arasında girilmiş olup olmadığını kontrol eder. Olası tüm seçenekler | karakteri ile ayrılarak girilmelidir.
  • value = value kısmı varsayılan değer olarak kullanılır. Eğer Excel’de ilgili alan boş bırakılmış ise, çıktı xml ine varsayılan değer yazılır.
  • requiredAlan = Eğer ilgili alan, çıktı xml’ine sadece altındaki herhangi bir alanın değeri verilmiş ise basılacak ise requiredAlan kısmına, altında boş olmaması gereken alanın ismi yazılır. Örnek olarak Donanım alanı sadece altında bulunan Bedel alanı doldurulmuş ise çıktı xml ine basılacaktır.

Format dosyasının değiştirilmesi :

Durum 1: Excel formatı değiştirilmiş ise

Excel formatında eğer yeni bir kolon eklenmiş veya kolonların sırası değiştirilmiş ise, format dosyasında <Alan> node’unun text kısmında karşılık gelen Kolon Adı kısmı güncellenmelidir. Yani, eğer müşteri numarası artık B kolonunda değil D kolonunda alınacak ise

<Alan bosOlabilir="false">B</Alan>

yerine

<Alan bosOlabilir="false">D</Alan>

olarak güncellenmelidir.

Excel’de kontrolsel değişiklikler (zorunlu alan, tarih alanı vb.) yapıldığında aynı değişikliklerin, kolonun dönüşümünden sorumlu <Alan>’ın attributeleri için tanımlanmalıdır. Örnek olarak, plaka türü artık zorunlu olmayan bir alan olur ise bosOlabilir = değeri true yapılabilir veya varsayılan değeri zaten true olduğu için silinebilir.

Dosyayı İndirmek İçin : Excel2Xml

DBScan

Yüksek lisans derslerimden biri için DBScan(Density-Based Spatial Clustering of Applications with Noise) algoritmasını implementasyonunu yapmıştım. Dönem bittiğine göre artık internette koymamın bir sakıncası kalmamıştır :)

Algoritma aslında oldukça kolay. http://en.wikipedia.org/wiki/DBSCAN adresini inceleyerek kolayca çözebilirsiniz.

Ödev aslında Java dilinde olmalıydı ama ben Java programıcısı olmadığım için ilk önce C# ile yazıp sonra Javaya çevirdim. İki koduda koyuyorum. Javada ilk projem olduğu için hatalarımı mazur görün :)

DBScan_CSharp

DBScan_Java

WTFCode.net

Bir arkadaşım çok eğlenceli bir sitenin adresini mail atmış. Sanırım kodlama ile ilgili özlü sözler topluyorlar :) Beğendiğim bir kaçını listeledim. Sitenin orjinal adresi : www.wtfcode.net

Good code is its own best documentation.

-Steve McConnell

Most software today is very much like an Egyptian pyramid with millions of bricks piled on top of each other, with no structural integrity, but just done by brute force and thousands of slaves.

-Alan Kay