mertoztekin.com

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

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 »

USB Autorun’ı Kapatmak

Çok eskiden beri her format attıktan sonra ilk yaptığım işlem Windowstan USB autoplaylerini kapamak olur. USB disklere bulaşan virüsler autorun dosyası oluşturarak bilgisayarınıza taktığınızda otomatik çalışıp kendini bilgisayara bulaştırır. Bunu engellemenin en kolay ve efektif yolu windowsun Autoplay özelliğini kapatmak.

Read the full post »

İş Değişikliği

Yemek Sepeti Logo2008 kasım ayından beri devam ettiğim Anadolu Sigorta Sistem Analistliği görevimin sonuna geldim. Bundan sonra Türkiyenin en başarılı internet şirketlerinden yemeksepeti.com’da IT Proje Uzmanı olarak çalışmaya devam edeceğim :)

Bill Gates üstüne…

Bill GatesBugün şans eseri internette Bill Gates ile ilgili yazılmış bir makale buldum. Kendisi bence günümüz teknolojisine gelinmesini sağlayan en önemli insanlardan biridir(evet Steve Jobsta çok iyi işler yaptı ama kendisini günahım kadar sevmem, sevenlerde steve jobs ile ilgili bir kaç kitap okuyup imanı para olan bu adamdan neden nefret ettiğimi anlayabilirler).

Makalenin orjinalini http://sourcesofinsight.com/2011/01/19/lessons-learned-from-bill-gates/ adresinden okuyabilirsiniz.:

25 Lessons Learned from Bill Gates
Bill is full of lessons and insights.  Here are 25 plays we can take from the pages of his playbook:

  1. Change the world, or go home. There is a little sign on many doors at Microsoft.  It features the blue monster and it reads:  “Change the world, or go home.”  Not only does that phrase capture the spirit of thousands of Softies … it speaks to the way Bill Gates drives his life.  He lives to build a better world, whether it’s one version, one platform, one system, one idea, one cause, one innovation at a time.  The beauty is, he knows how to scale and amplify his impact in powerful ways – he’s on top of his game.
  2. Blaze the trail.  The path isn’t always there.  Sometimes you have to make it.  Sometimes people will think you’re crazy.   Sometimes you are just ahead of the curve.  it’s a dream for a reason, and sometimes making your dreams happen takes going out on a limb and giving your all for what you believe in.  Bill Gates believed that the personal computer was the future and that there should be one on every desktop and in the living room and it would change the way we work and how we live in unimaginable ways.
  3. Make an impact.   Drive from impact.  Bill Gates makes choices based on impact.  Whether it’s following his passion or investing in a cause, he drives from making impact.  He doesn’t just do things because he can.  He does things because they matter and he can make them scale. Read the full post »

Excel’de En Çok Kullandığım Fonksiyonlar

Selamlar,

Uzun süredir kafamda excelde günlük hayatımda en çok kullandığım fonksiyonları burada anlatmak vardı. Aslında çok kolay fonksiyonlar ama hemen hemen hergün 10larca kez kullanıyorum. Ne yazıkki çevremdeki bir çok insan bilmedikleri için Exceli açmıyorlar bile. Belki bu yazı onlara yardımcı olabilir :

DÜŞEYARA()

Düşeyarayı veritabanında yazdığını SQL Select sorgusu gibi düşünebilirsiniz. Belli bir tablo içinden anahtar ile bir satır arıyorsunuz ve o satırdaki herhangi bir kolonun değerini dönüyorsunuz.

=DÜŞEYARA(ArananDeğer , Arama Yapılacak Alan, Dönülecek Kolon Numarası , Yakın Eşleşmemi Tam Eşleşmemi)

ArananDeğer kısmı hangi değeri arıyorsunuz, yani SQLde WHERE ID=”$$$” dediğiniz kısımdaki $$$

Arama Yapılacak Alan kısmı ise hangi veriler arasında arayacaksınız. Bunu SQL deki tablo adı olarak düşünebilirsiniz. Ama excelde alan seçmeniz gerekiyor(yada daha önce Adlandırdığınız alanı belirtmeniz). Burdaki önemli nokta şu, düşeyara fonksiyonu aranacakdeğeri, belirtilen alanın en sol kolonunda bakıyor. Yani siz A1:D5 gibi bir alan seçtiğinizde, aranacak değerleri A1,A2,A3,A4,A5 kolonunda olmalı. Eğer anahtarınız B kolonunda ise B1:D5 olarak alan belirtmeniz lazım (tabi bu şekilde A kolonundan bilgi alamazsınız, eğer A kolonundan bilgi almanız gerekiyorsa, B kolonu ile A kolonunun yerini değiştirip A1:D5 olarak aratın)

Dönülecek Kolon Numarası, arama yapıldıktan sonra hangi kolonun değerinin yazdırılacağını belirtiyor. Yani siz A1:D5 alan seçtiyseniz ve dönülecek kolon numarasını 1 yaparsanız size bulunan satırın A kolonunun değerini döner. 3 yazarsanız C kolonunu döner. Eğer 6 yazarsanız Boş döner çünkü siz D kolonuna(Max 4) kadar alan seçmiştiniz. 6 girerseniz A+5 = F kolonunu kastetmiş olursunuz. Ki oda seçili değil.

Yakın eşleşmemi tam eşleşmemi kısmına DOĞRU veya YANLIŞ yazabiliyorsunuz. Bunu her zaman YANLIŞ olarak belirtin. YANLIŞ derseniz tam eşleşme gereksinimi olduğunu söylüyorsunuz. Yani eğer aranan değeri bulamazsa #YOK diye uyarı verecektir. Eğer DOĞRU derseniz, aranan değer olmasa bile ona en yakın değeri bulacaktır. Ki buda genelde sizin istemediğiniz bir durum. O yüzden elinizi YANLIŞ yazmaya alıştırın.

Düşey Ara

Düşey Ara yaparken sık sık karşılaşılan bir durum var. Birden fazla kolon anahtarı oluşturuyorsa DÜŞEYARA fonksiyonu yetersiz kalıyor. Yani şöle bir sql düşünün SELECT ADRES FROM TABLO WHERE IL=’06′ AND ILCE =’343′. Burda WHERE kısmında iki koşul koyuyorsunuz. Yukarıda gördüğünüz gibi DÜŞEYARA sadece tek koşul alıyor, oda belirtilen alanın en soldaki kolonu). Bu tarz birden fazla kolon koşulu olduğu durumlarda en kolay yöntem kendi anahtarınızı oluşturmak.

Düşey Ara 2

Örnek olarak 3 kolonlu bir exceliniz olduğunu düşünün. Plaka İl,Müşteri Tipi,Değer. Amacınız Plaka ili ve Müşteri tipi belirterek hangi değer aldığını bulmak. Yapmanız gereken bir kolon açıp (değerin sol tarafında olsun) iki anahtar alanınızı birleştirip yeni bir değer kümesi oluşturmak. Bunun için yeni açtığınız kolona =A1&B1 yazıp aşağı sürükleyebilirsiniz. Böylece iki kelimenin birleşimi yazacaktır. Fakat benim kişisel önerim =A1&B1 yerine =A1&”|”&B1 gibi bir şey yazmak. Yani birleştirme esnasında araya bir karakter koymak. Nedeni şu : Mesela ilk kolon 1den 20ye kadar sayılar, ikinci kolon 0 dan 10 a kadar olan sayılar(bunların metin olduğunu düşünün). Siz bunları =A1&B1 şeklinde birleştirirseniz iki tane 110 elde edersiniz (1+10 ve 11+0 (metin olduğu için direk karakter karakter birleştirdim. Sayısal olsa dahada curcuna)). Bu şekilde bir anahtar oluşturduğunuz aslında unique lik özelliğini kaybediyorsunuz. Bu tür bir sorunla karşılaşmamak için =A1&”|”&B1 tarzında birleştirirseniz 1|10 ve 11|0 gibi farklı anahtarlar oluşacaktır(seçiceğiniz karakterin anahtarlın içinde olmamasına dikkat edin. | karakteri genelde pek bulunmaz o yüzden onu seçmiştim).

DOLAYLI()

Dolaylı fonksiyonuda bir çok zaman ihtiyacınız olacak fonksiyon. Her ne kadar ismi çok amacını anlatmasada, bu fonksiyonu belirli bir hücrenin değerini, hücre adresini isim olarak yazarak bulmaya yarıyor. Yani B1 kolonuna gelip =DOLAYLI(”A1″) yazarsanız size A1 deki değeri yazar. Oldukça kullanışlı çünkü içerisi kelime olarak girildiğinden =DOLAYLI(”D”&(SATIR()+12)) gibi alt fonksiyonlar yazabilirsiniz. Kolay ve oldukça kullanışlı bir fonksiyon

Dolaylı

ADRES()

Adres fonksiyonu tek başına anlamlı olmasada DOLAYLI ile birlikte çok kullanacaksınız. Amacı belirtilen satır numarası ve sütun numarası için size o hücrenin Excel adresini vermek. Mesela 1 1 verirseniz size A1 yazıcaktır. 44 22 derseniz V44 ismini dönecektir. Bunun bazı alt parametreleri var ($ yazsınmı yazmasınmı gibi). Bunları açıkçası hiç kullanma gereği duyduğumu hatırlamıyorum. Ama bir iki deneme yaparak sizde çözebilirsiniz.

SATIR() ve SÜTUN()

Satır ve sütun fonksiyonları adından da anlaşılacağı gibi bulunduğu hücrenin satır veya sütun numaralarını verir. Mesela A4 kolonuna =SATIR() yazarsanız 1, =SÜTUN() yazarsanız 4 değerini verecek. Bunu yukarıdaki fonksiyonlarla kullanarak ilginç denemeler yapabilirsiniz. Mesela bir satırın sağ altındaki değeri bulmak için =DOLAYLI(ADRES(SATIR()+1;SÜTUN()+1)) yazabilirsiniz.

Aklıma geldikçe başka fonksiyonlarıda yazmaya çalışırım ama dediğim gibi bu fonksiyonlar günlük ihtiyacınızın %80 ini karşılayacaktır. Yukarıda anlattıklarımı içeren örnek excel dokümanını da inceleyebilirsiniz.

Örnek Excel Dosyası

Tez Konum…

Sonunda tez konumu belirledim (ve değiştirmeyi düşünmüyorum)

Bir süre Decision Treeler üzerinde çalışıp, bir kaç implementasyon yaptıktan sonra daha iyi olacağını düşündüğüm Recommender Systems konusuna yöneldim. Bu amazon’da youtube’da sizin kullanım kayıtlarınıza göre öneriler yapan sistem(bu kitabı, videoyuda seversin sen kesin)

Güzel şeyler buldukça burayada yazarım.

Kurumsallaşma üzerine…

Bugün güzel bir email geldi. paylaşmaya değer:

Karınca ile Aslan ….
Küçük bir Karınca her sabah erkenden işine gelir ve neşe içinde çalışmaya başlardı…..
Çok çalışır… Çok üretir… Ve bunları keyif içinde yapardı.

Patronu Aslan, Karınca’nın başında yöneticisi olmadan kendiliğinden bu kadar hevesle çalışmasına çok şaşırırdı. Bir gün karı ve verimliliği arttırmak için aklına parlak bir fikir geldi. Eğer Karınca, başında bir yönetici bile olmadan bu kadar üretken olabiliyorsa, bir de başarılı bir yöneticisi olsa neler yapardı.
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