En büyük ve en sade açılış sayfası
Olmazmi arama
tr
en
anasayfa siteler rssler
   
 Oyunvarmi.com'da binlerce flash oyun sizi bekliyor. Oyunvarmi.com ile tanışmadıysanız buraya tıklayınız.

Teknoloji - Ferruh Mavituna RSS

The Triumph of the Nerds @ 10-01-2009 03:45

2 kelime, bulun ve izleyin.

Eminim hepimiz hikayenin bazı parçalarını biliyoruz, ama izleyince ben bazı eksik parçaları yerine oturttum.



Son Zamanlarda @ 10-01-2009 03:45

Her ne kadar FriendFeed' den kısa dalga yayın yapsamda, bazı şeyleri burada tekrar yazmak istedim:

  • SQL Injection Wiki Beta yayınına açtım,
  • Stackoverflow' u keşfettim, geliştiriciler için harika bir site. Ek olarak web projeleri geliştirenler içinde inanılmaz bir case study olur,
  • IPhone için gelmiş geçmiş en iyi yazılımın InstaPaper olduğunu anladım,
  • Hacker News' i takip etmeye başladım,
  • Paul Graham' ın tüm yazılarını okumaya başladım,
  • Önümüzdeki ay İstanbul' a gelmenin planlarını tamamladım,
  • Kendime yılbaşı hediyesi olarak şunlardan bir tane aldım, bu sayede dandik Philips 5.1' lerden kurtulmuş olacağım. Philips almamayı öğrendim,
  • Zeitgeist ve Zeitgeist Addendum' u izledim, Hem doğru, hem yanlış, yoğun şekilde tek taraflı propogandanın ve eski fikirlerin bilmeyen insanlara cilalanıp tekrar gösterilince viral etkisi yapabildiğini öğrendim. Yargılayarak izlenirse, tavsiye edilir.
  • Fringe' i keşfettim, süper. Doğru dozda bilim-kurgu, ne az, ne fazla. En azından Klington ile ilgili bir olay yok!
  • Crash Commando oynamaya başladım
  • Call of Duty 4 ve 5' in nin kesinlike gelmiş geçmiş en gerilim yüklü ("intense") multiplayer oyun olduğuna tekrar kanaat getirdim,
  • "Yerli malı yurdun malı, herkes onu kullanmalı zihniyetinin" ne kadar yavanca anlaşıldığını ve uygulandığını tekrar, tekrar ve tekrar keşfedip, sadece Sakaryalı hemşehrilerimden hosting hizmeti almaya karar verdim(!) İnsanlara bu zihniyetin hiç bir şeye yardım etmediğini hatta sektöre zarar verdiğini anlatmaya üşendim, "koy arka tarafına, gitsin" edası takındım.
  • ""Nerd" telefonu telefon hakkında konuşmak için kullanan kişiye" denir gibi acayip bir laf duydum, kendi kendime güldüm. Kendi kendime gülünce kendimi biraz a-sosyal hissettim, kendime bir social-bunny ısmarlayıp, b-sosyal konuma geçirdim.



Köle Olmayı Seçmek @ 10-01-2009 03:45

Bu yazı arada yazdığım gibi giriş – gelişme – sonuç kavramlarından uzak, daha çok bazı duyguları düşünceleri tetiklemeye eğimli bir yazıdır. Ek olarak yazı genel bir konu üzerinde dolaşmayı bile becerememekte. Dolayısıyla diğer bir kendi halinde yazı olarak Kabul edilebilir...

İnsanoğlu kendi elleriyle hayatı o kadar komplike bir hale getirdi ki bu dünyada hayatta kalabilmesi için artık 15 sene eğitim alması gerekir hale geldi. Yaşayabilmesi için hayatının %75' ini çalışarak geçirmek zorunda kaldı. Küçüklükten başlayarak bu durumu o kadar güzel bir şekilde yeni beyinlere empoze etti ki, kişiler kendilerinin köleliğini savunur hale geldi. Para, dünya, şan, şöhret için çalışmak önemli, değerli hatta saygı duyulacak bir iş gibi gösterildi. Daha sonra öyle bir noktaya geldi ki artık herkes bunlar konusunda hem fikir olmaya başladı.

Bir insan şunu söyleyebilir hale geldi:

Eğer zengin olsaydım da bu şekilde çalışırdım

Eğer siz de haftanın 5-6 gününü geri kalan 1-2 gününü yaşayabilmek için harcadığını hazmedeyenlerdenseniz, neden bahsettiğimizi anlıyorsunuz demektir. Çalışmak için çalışan insanların olduğu bir toplumda yaşar olduk, artık bizi köle yapmıyorlar biz kendimiz "özgür" irademiz ile köle olmayı seçiyoruz. Kendimizi kendimizden azad edebilecek miyiz?

Herkese yetecek bir dünyayı paylaşamıyoruz, 1500 somalilinin öldüğü bir operasyonda 18 amerikan askeri için film çekiyoruz (çünkü 1 yankee = 100 somalili değerinde!), neyi neden yaptığımızı bilmiyoruz, nereye gideceğimizi düşünmüyoruz. Bir kaç gün önce dünyayı değiştirecek fikirleri düşünüyordum, "Her iyilik yapılan kişi üç kişiye iyilik yapsa", "The Venus Project" vs.

Sanırım "Bill Gates' i müslüman yapmak" listenin başına konulabilir. Bunun anlamı dünyanın en zengin adamlarından birinin Zekat ödeyeceği yani her sene elindeki tüm değerlerin 40/1 ini fakirlere dağıtacağı anlamına geliyor. Belki sadece Bill Gates' i müslüman yapmak tek başına dünyadaki açlığı çözmeyecektir, ama ütopik bir şekilde tüm dünyanın zekat verdiğini düşünün. Bu ütopik dünyada fakirlik diye bir sorun olmayacaktı.

Bugünün global dünyasında yaşayan insanlar olarak her saniye suçluluk duygusu içerisinde olmamak mümkün olabilir mi? Benim doğduğum yer ondan daha iyi, o daha doğarken kaybediyor. Ben komşumdan daha çok kazanıyorum, benim şansım yaver gitti, kolum ve bacağım var, görebiliyorum ve konuşabiliyorum. Oradan insanlar savaşta ölürken ben MSN' de arkadaşlarımla muhabbet edip blogumda züppelik yapıyorum, suçluluk duygusu içerisinde olmamak mümkün mü?

Sanırım bunun tek çözümü İlahi Adalet' e inanmak, bilmek değil idrak etmek. Hiç bir şeyin kimsenin yanın kalmayacağını ve kimsenin sınavının başka biri ile aynı olmadığını anlamak.

Şimdi hepinize Happy Xmas, Hannukah ve new year...

* The Venus Project ve Zeitgeist Addendum -çok tek taraflı bir film, izlerken yargınızı kaybetmemeye çalışın- bunu tetikledi



Insecure Trends in Web 2.0 @ 10-01-2009 03:45

We are living the second dot-com craziness, although this time it doesn't look like a bubble, it works just fine and every month a new Web 2.0 application acquired for millions.

Couple of popular web trends appeared and revived in Web 2.0 applications:

  • Usability
  • Simplicity
  • Sociability
  • Integration
  • Outsourcing
  • Cutting Edge Technology
  • Trust

All sounds good but also they came with their sins. And their disease of being insecure just spreads.... New start-ups and all kind of Web 2.0 entrepreneurs following previously "worked" insecure practices for the sake usability, simplicity, sociability and money.

 

Usability & Simplicity

Usability is really important, everything should be so easy in Web 2.0 applications, such as:

 

Change password functionality

Why bother with requesting user's current password before changing their password, they've already logged in, right(!). Impact of this is quite obvious. Permanent account hijacking in shared computers or result of an XSS attack.

Guilty:  twitter

Give me your Hotmail password so I can get your contact list

Since when giving your e-mail password to a website is OK? Thanks to social websites now it's a common thing to give away your e-mail passwords to other websites. What's next, giving away your online banking password? (Didn't I tell you? Mint already did that!)

Guilty: Bebo, Facebook, Diigo, LinkedIn, slideshare and every single social Web 2.0 application out there

 

SSL

Big web 2.0 applications are so popular and they are generally traffic heavy. Which causes them to simply ignore SSL for performance reasons. Even if they supports SSL generally they don't mark cookies as 'secure' which allows an attacker to carry out successful session hijacking attacks.

Guilty: Most of the Web 2.0 applications and particularly Gmail for the last 4 years. They've recently introduced an option to force gmail to work over SSL. Funny enough it's still not over SSL by default.

Retrieving Password by E-mail

Almost all web applications can retrieve your password to your e-mail without requesting any other extra information like a "security question" or something.  This means if your e-mail account get hacked your identity has gone within moments.

Guilty: Almost all Web 2.0 Applications

Plain Stupid Simplicity

Couple of Web 2.0 application doesn't even allow you to choose a password more than 8 characters because they keep it simple(!) Forcing your users to choose insecure passwords is not simplicity it's stupidity.

   

Remember Me

We might forgive this one but now every single application allows this feature which makes them easier to exploit against Cross-site Scripting attacks or account hijacking in shared computers.

Guilty: Everyone!

 

Sociability

Social engineering was some kind of an art but now it's bloody easy. If you are trying to learn more information about someone such as "what colour of undies she's wearing" or "what's her birthday" or "who's her boyfriend" or "where was she last night" or "in which company she's working as personal assistant" just visit her profile in Facebook, myspace, bebo, read her twitter messages, learn her taste of music by checking out her last.fm profile. Don't stop there learn what she reads from librarything and what she eats from another social website, and see her resume in LinkedIn. Finally don't forget her blog where she writes every little totally useless information about her daily life. Funny enough you'll figure pretty soon her e-mail password is her dog's name.

Couple of years ago we were talking about how "out-of-office" replies leaks information, now we are talking about massive information leakage about everything. All employees blog about stuff, companies being "open" and "transparent". That's the Web 2.0 for you where your birthday is publicly available in 15 different social websites and your company's new and super project's first draft already published in one of your developer's blog.

Password cracking and Social Networks

Beside of the obvious potential social engineering attacks, identity theft or faking one's identity sort of attacks there are other issues. An attacker can use different social networks to find answers of "secret questions" to reset the password of his or her victims in different websites furthermore an attacker can gather all of this information and might use it in a dictionary attack against online accounts or an offline password cracking attack.

Integration

CSRF(able) Bookmarklets and Tool Integration

Bookmarklets are inherently vulnerable to CSRF attacks and most of the Web 2.0 applications which supports social integration provides several bookmarklets.

Guilty: twitter, Diigo

Overpowered APIs and Duplicated Code

To increase the integration between services most of the Web 2.0 applications provides powerful APIs. Generally the web application doesn't use these APIs internally which leads developers to common security pitfalls such as "duplicated code", "broken authorisation", "information leakage".

Features in the APIs provides more than the user interface and generally provides easier automation which can cause massive information leakage issues. Same things goes for different interfaces to access the same functionality. For example twitter protected itself against CSRF in the web interface although it was still vulnerable to CSRF in the mobile interface (which was in the same domain therefore vulnerable).

Guilty: Facebook, twitter (mobile interface)

 

Outsourcing

Since lots of things have been already built, why bother to build our own system. Let's just use others'. From productivity point of view this is one of the greatest things happened to web, just like programmers using external libraries now web developers can use external widgets. Instead of building your own photo gallery just use Flickr, instead of using your own flash player just embed it from youtube. Instead of rolling your own webstats just use "google analytics", add an "adsense javascript" or "google ad manager" so you don't need to manage your ads.

This is all good but it comes with a price, it increases the attack surface of the applications. Do you remember Fluffy Bunny's attack to SecurityFocus ? Every piece of javascript, flash animation, java applet, RSS feed is a potential vulnerability in your website. If an attacker can gain access to one of this external resources game is over in the client-side. Now your website is vulnerable to Cross-site Scripting because of this.

It's client-side, that's true, but what about attack opportunities such as stealing keylogs in login forms via JavaScript? After this an attacker might login as admin, and now it's a proper defacement.

Guilty: The Internet

Cutting Edge Technology

Everyday there is new buzz in Web 2.0. It can be AJAX, Flex, Adobe AIR, Silverlight, Comet, Flash & Web Services, Widgets, Crazy JavaScript libraries etc. When the technology is new that means "best practices" are not defined yet, they are "work in progress". Which generally results with issues such as "Premature AJAX-ulation", Javascript Hijacking, Flash XSS issues or plain stupid usage of the technology.

Beside of these all of these new technologies increase the attack surface of the client as well. Your website can be vulnerable to XSS because of an Adobe PDF file (Adobe Universal XSS) or a Flash File (clicktag XSS).

Trust

Even after massive number of phising attacks, fake websites, so called "legitimate business", it's quite impressive to see how much people still trust the websites.

Google wants your medical records with Google Health and another Web 2.0 application Mint wants your bank account details (no I'm not kidding) to manage your finance. We already knew there are crazy people out there who upload their private videos and pictures to websites by marking them as "private". Guess what, they're not that private after all as seen on a Facebook vulnerability which allows to see private photo albums of anyone.

Developers should be careful about these common but insecure practices of Web 2.0 and should be aware of the consequences of the technology they choose and design decisions.



Functional Testing vs Unit Testing @ 10-01-2009 03:45

Her ne kadar TDD ve Unit Testing' i bir boyutta uygulasam da yazılım geliştirirken XP (extreme programming) ya da benzer bir metodolojiyi sıkı sıkıya takip etmiyorum. Her konuda yaptığım gibi açık fikirli olup, değişik yaklaşımları analiz edip, haklarında bilgi toparlayıp kendi durumuma göre kendi hybrid modelimi kullanmaya çalıştırıyorum. Bu aralar özellikle yazılım geliştirme ile çok iç içeyim ve bunun sonucunda Unit Testing, TDD ve Functional Testing konularında denemeler yapıp en iyi birleşimi bulmaya, işimi en iyi görecek çözüme ulaşmaya çalışıyorum.

Devam etmeden Functional Testing ile Unit Testing' e ve aralarındaki farklara bakalım.

Unit Testing

  • Sistemin en küçük birimlerini test etmektir,
  • Hızlıdırlar,
  • İzolasyon kritiktir ve hiç bir testin diğer testleri ya bir dış kaynağın çalışan testleri etkilememesi gerekir. Bu amacı yerine getirmek için bir web server ya da file system erişimde, ya da diğer herhangi bir class ile konuşma noktasında Mocking devreye girer,
  • Kodda hata oluştuğunda kesin olarak hatanın nerede oluştuğunu saptamak çok kolaydır. (Çünkü sistemin en küçük birimlerini test ediyoruz),
  • Yüksek Code Coverage almaya uygundur,
  • Genelde koddaki her değişiklikten sonra çalıştırılır. Bu sayede kodda gözü kapalı değişiklik yapabilir ve bir sorun varsa anında farkına varabilirsiniz. Bunun anlamı sorun çok daha büyümeden ya da tasarımın içerisine girmeden sorunu çözmek demektir.


Functional Testing (Automated)

  • Sistemin parçalarını ya da sistemin bütün olarak işleyişini otomatik şekilde test etmektir,
  • Daha gerçekçi testler ortaya çıkmasını sağlar,
  • Yavaştırlar (izolasyonun az olması bunun ana nedenidir),
  • Kodun bir yerinde hata oluşması testlerin büyük bir kısmını geçersiz hale getirebilir,
  • Kodda hata oluştuğunda nokta atışı hatayı bulmak pek basit olmayabilir,
  • Bazı testler Unit Testing' e göre çok daha hızlı yazılabilir, çünkü çok daha az test yapmak gerekir. Mesela bir class' ın private method' ları vs. test edilmez. Class' ın geneli beklendiği gibi çalışması yeterlidir,
  • Code Coverage' i yükseltmek zor olabilir çünkü her durumu geniş perspektiften simule etmek mümkün olmayabilir ya da gereğinden çok efor gerektirebilir,
  • Yavaşlığından dolayı ve coverage azlığından dolayı her kod değişikliğinden ya da yeni koddan sonra çalıştırılmaya pek uygun değildir.


Functional Testing' i Unit Testing ile birlikte kullanmak popüler kullanımlardan biri, bu sayede en ince detayda ve tam bir bütün olarak kodun beklenildiği gibi çalıştığı otomatik olarak kontrol edilebilir.

Genel olarak insanların TDD (önce test, sonra kod) ya da klasik Unit Testing yapmamalarının nedeni testleri yazmanın getirdiği ekstra külfet. Özellikle Türkiye gibi agresif, kısa deadline' lı projeler ile dolup taşan yerlerde yazılımcılara Unit Testing önermek küfürmüş gibi algılanıyor. Açıkçası kimse gerçek bir getirisi olmayan bir şey için ekstra vakit ayırmak istemez ama bu işin gerçek ve gözle görülür bir getirisi var (kanıtlanmış mı? Hem evet hem hayır! o başka bir yazı konusu).

Hybrid Model
Eğer...

  • Yazılımınınız çok kritik bir iş yapmıyorsa, (örnek: Ayda cirit atacak robot kontrolü, Nükleer füze tetikleyicisi, Merkez Bankasının para-girdi çıktı düzenleyicisi, Britney Spears' a hava durumuna göre ayakkabı önermeciliği )
  • Geniş bir takıma ve uzun, rahat geliştirme planına sahip değilseniz,
  • Az koyup çok almak istiyorsanız...

bu model sizin işinizi görebilir. Pareto Prensibini bilirsiniz, hani şu 80/20 kuralı. Bir süredir bu mantığa dayanarak Functional Testing ile ve aralarda Unit Testing desteği ile bir proje geliştiriyorum ve otomatik testlerden alacağım faydanın %80' ini %20 efor ile aldığıma inanıyorum.

  • Private method vs. leri test etmiyorum,
  • Çok az mock objesi kullanıyorum,
  • Aşırı izolasyon yapmıyorum,
  • Küçük detayların harici uzun soluklu functional testlere odaklanıyorum,
  • Hata çıkarma olasılığı çok olan, kritik olan kod kısımlarını Unit Testing ile destekliyorum.

Bu modelin en ciddi sorunlarından biri kodun highly coupled (Law of Demeter) olmasına izin veriyor. Tabii ki bunu düzeltmek geliştirici olarak sizin elinizde ama TDD odaklı bir geliştirmede highly coupled class' lar bulmanız pek mümkün olmayacaktır. Açıkçası highly/tightly coupled olmayan kod yazmak gerçekten zor bir iş.

Bu benim yaklaşımım şu ana kadar benim için istediğim kıvamda çalıştığını söyleyebilirim. Eğer şimdiye kadar hiç yapmadıysanız bu şekilde hafif bir başlangıç yapabilir ve biraz tadını çıkartabilirsiniz.
Farklı deneyimleri duymak da hoşuma gider. Özellikle Unit Testing yapıp mutlu olanlar ya da yapmayı deneyip verim alamayanlar gibi.



Visual Studio’ nun Hakkını Verme @ 10-01-2009 03:45

Üç sene kadar önce silahını tanı başlıklı bir yazı yazmıştım. Dün Visual Studio ile biraz vakit harcayıp istediğim hale getirdim, Visual Studio konusunda bilmeniz gereken bazı temel şeyler var:

  • Visual Studio' nun Express Edition' ları tamamen ücretsiz, Yalnız bu Express Edition' lar aşadağıdaki gibi bazen çok önemli olabilecek şeyleri desteklemiyor:

    Class Designer
    FxCop Entegrasyonu
    Gelişmiş Debug Seçenekleri (özellikle condition dayalı breakpoint' lerin olmaması)
    VS.NET eklenti Desteği
    Multi-Thread Debugging Desteği
    Farklı .NET dillerinde projeleri aynı proje üzerinden yönetebilme

  • Tüm kendi özelleştirmelerinizi Export / Import edebilirsiniz. Bu sayede tüm özelleştirmeleri bir defa yapmanız yeterli. Daha sonra Tüm VS sistemlerine bunları basitçe taşıyabilirsiniz.
  • Pencereler iki ana durumda saklanıyor, birinci geliştirme süreci, ikincisi debugging yaparken. Bunlar her zaman son olarak kullandığınız şekilde saklanıyorlar. Mesela debugging yaparken "Immediate" penceresini ikinci monitöre taşırsanız, bir sonraki debugging' e başladığınızda "Immediate" penceresi gene ikinci monitöre geçecek ve debugging' i bitirdiğinizde geliştirme sürecindeki yerine geri dönecektir.
  • Visual Studio' da Bilmeniz Gereken Kısa Yollar

 

VS.NET 2008 Team System ve MBUnit

VS.NET 2008 Team System Unit Testing Framework' ü ile birlikte geliyor ama normalde bu sadece MS Unit Testleri ile çalışıyor. Eğer siz de benim gibi Row Testing' ten vazgeçemeyenlerdenseniz nUnit (son versiyonu) ya da MbUnit gibi bir framework kullanıyor olacaksınız ve bu durumda VS.NET' in Test çözümü yerine ekstra bir yazılıma ihtiyaç duyacaksınız.

MbUnit v3' VS.Net 2008 Team System için tam entegre bir çözüm geliştirmiş yani ekstra bir Unit Testlerinizi test edecek ekstra bir araç yerine VS.NET ile olan Test pencerelerini kullanabilir hale gelebilirsiniz. Bunun için şunlara ihtiyacınız var :

  • VS.NET Team Team System 2008 + SP1
  • MbUnit v3

Ek olarak MbUnit v3 yenilikleri, MbUnit ve VS.NET ve VS.NET' te test projelerini nasıl belirtebilirsiniz yazılarını okumanızı şiddetle tavsiye ederim. Şu an ben bunu kullanır hale geldi ve TestDriven.NET ya da ReSharper olmadan VS.NET içerisinde testleri çalıştırmak çok keyifli.

 

VS.NET 2008 Hızlı Kod Yazma Eklentileri

Bu konuda iki tane çok popüler eklenti var :

Maalesef bu iki eklentinin de tam verisyonu ücretli ve biraz da pahalı ama verdikler hız etkisini düşününce muhtemelen iki ay içerisinde paranızı geri almış olacaksınız. İkisi arasında benim tercihim CodeRush.

Bazı diğer eklentiler.

Şekil Yapma

VS.NET İpuçları

Bir sürü ipucu sitesi ve kaynağı var ama Sara Ford' un websitesi sanırım bu sitelerin içerisindeki en iyilerden biri. Şu an itibari ile 372 ipucu var, bazıları "File altında Open diye bir menü var, biliyor muydunuz?" derecesinde salakken bazıları gerçekten de çok güzel. Takibe ve arşivlerini analiz okumaya değer.

Visual Studio sandığınızdan çok daha güçlü, güzel ve gelişmiş şekilde. Son olarak ben de zamanında VS.NET' e küçük bir eklenti yazmıştım, The Guardian (download). VS.NET 2008 ile çalışığ çalışmadığını bile bilmiyorum ama ilginizi çekebilir. Süper dağınık bir yazının sonuna geldik, umarım siz parçaları birleştirebilir ve bu yazıdan işinize yarayan bir şeyler çıkartabilirsiniz.



Kurban Bayramınız Mübarek Olsun @ 10-01-2009 03:45

Hepimizin bayramı mübarek olsun.

Ben de bayram boyunca kendime tatil aldım. Buralarda Kraliçe' den başka el öpmesine gideceğimiz kimse olmadığı için yatıyor, yazılım geliştiriyor, oyun oynuyor ve blog yazıyor olacağım.



Blog Yazılarının Formatı @ 10-01-2009 03:45

Ben bu konuda süper bir örnek değilim ve benim de yapmadığım, yapamadığım bir çok şey var ama blog yazarken yazının formatı hakkında şunlara dikkat etmekte fayda olduğunu düşünüyorum.

Bunların bazıları mesela "paragraf kullanmak" bence ölümcülken bazıları "çok fazla smiley kullanmamak" sadece kişisel tercih. Liste büyüdükçe yazı formatı harici bir kaç konuyu da eklemiş bulundum.

  • Paragraf Kullanın, bol bol kullanın okunabilirliği inanılmaz derecede arttırıyor,
  • Çok küçük fontlar kullanmayın,
  • Okunaksız renk kombinasyonları kullanmayın, beyaz arka plan üzerine siyah yazı gibi temiz ve herkes tarafından sevilebilecek kombinasyonlar kullanabilirsiniz,
  • Linklerinizin link olduğu belli olsun, rengi değişik olsun ve mümkünse altı da çizgili olsun,
  • Uzun alıntılarda italik  kullanmayın, onun yerine CSS ile bu yazının alıntı olduğunu belirtin. İtalik olarakta okunaklı olan yazılar hariç.
  • Cümlenin sonunda "nokta" koyun ve noktadan sonra da "boşluk" bırakın,
  • Madde olarak listelenecek şeyleri HTML listeleri ile destekleyin,
  • Anlamsal sayıları yazı, matematiksel veya hesapsal sonuç içeren sayıları ise rakam ile yazın,
  • "Buraya Tıklayınız" tarzı linkler vermeyin, anlamı içeren yazı parçasına link koyun,
    "Hocus Pocus Yazılımı için buraya tıklayınız " yerine "Hocus Pocus uygulamaları hızlıca gizlemenize yarayan küçük bir uygulamadır." gibi.
  • Aynı linki aynı yazıda birden fazla defa vermeyin, Aynı şekilde diğer aynı linkleri de iki defa tekrar etmeyin,
  • Eğer kullandığınız terim çok az bilinen bir terim değilse bu terimi Wikipedia' ya veya benzeri bilgi merkezlerine linklemeyin. Bir web tasarım blogunda CSS terimini Wikipedia' ya linklemenin hiç bir anlamı yok. Gördüğünüz gibi Google ya da Wikipedia gibi yerlerden bahsederken de link atmanın pek bir anlamı yok, 
  • Eğer teknik terimleri Türkçeye çevirecekseniz ingilizcesini de belirtin,
  • Çok uzun parantez açıklamaları yerine dipnotlar oluşturun, yazıyı okuyan kişinin dikkatini dağıtmayın,
  • Kalın, İtalik gibi yazı tiplerini yazının içeriğine göre kullanın, bu sayede yazıyı daha takip edilebilir kılacaksınız,
  • Paragraflar arasında boşlukları çok bırakın yeni satır ile paragraf arasındaki farkı anlayın,
  • Yazının genişliğini 600px' den çok tutmamaya çalışın bundan sonra yazıyı takip etmek zorlaşabiliyor (tamamen kşisel görüşüm, genelde insanlar bu konuda ikiye ayrılıyor)
  • Türkçede ayrı yazılan de, da gibi tırı-vırı ama insanların takıntılı olduğu konulara dikkat edin, sonuçta okuyucuların yazıyı anlamasını istiyorsunuz, yazıyı okurken ufak şeylere takılmalarını değil,
  • Türkçe yazı editöründen geçirin,
  • Argo kelimelerden, MSN Türkçesinden uzak durmaya çalışın,
    Argo kelimelerde bence pek bir sorun yok ama "hadi yaw, kanka" gibi bir şey okumak pek keyifli değil. Tabii ki bazen yazı stili bunu gerektirebiliyor, o durumları saymıyorum.
  • Yazılara resim koyun,
    Açıkçası yazılara alakasız sadece resim koymak için resim koymayı ben kendime yediremiyorum, yani boyama kitabı ya da üçüncü kalite bir yapımı pazarlarmışcasına. Ancak aynı fiyat etiketlerini 0.99 YTL yapmak gibi bu da çalışan salak taktiklerden biri. Bunun harici eğer konuya yardımcı olabilecek resim veya video varsa kesinlikle blog yazısına ekleyin, yazıyı aşırı derecede canlandırıyor.
  • Yazılara etiket (tag) eklerken çok etiket eklemeye değil çok yazıya aynı etiketleri eklemeye çalışın, eğer etiketler gruplanamıyorsa etiketlemenin bir anlamı kalmıyor değil mi?
  • Yazılarda çok fazla "smiley (sırıtan küçük salak ikonlar, lolcatz' in yazı içerisinde hayat bulmuş hali diye de bilinir)" kullanmayın, hatta hiç kullanmayın.
  • (!) işareti cümlenin sonunda o cümlenin sarkastik bir şekilde söylendiğini belirtir, bunu bilerek kullanın,

Son olarak bütün bunların kendi tarzınızın, ya da yazma isteğinizin önüne geçmesine izin vermeyin ve unutmayın ki "içerik hala tahtta" *


Bu liste genelde diğer blog yazan kişileri okurken beni rahatsız eden konuları içeriyor, siz bu blogu okurken nelerden rahatsız oluyorsunuz? ya da bu listede olmayan ama başka blogların yaptığı ve sizi rahatsız eden şeyler neler?



Fikir Üretme, Etki ve Tepki @ 10-01-2009 03:45

Hiç dikkatinizi çekti mi bilmiyorum ama bir bakıyorsunuz altı tane aynı dönem şairi çok yakın arkadaşlar, çünkü hepsi aynı mahallede büyümüşler ya da bir dizi oyuncunun hepsi çocukluk arkadaşı ve hepsi de çok ünlü ve benzer projelerde çalışıyorlar. Mesela Türkiye de bir dönem çok popüler olan muhasabe yazılım firmalarının en büyük ikisinin sahibi üniversitede aynı sınıfta olmaları ya da bugünün internet ve bilgisayar dünmyasının bu hale gelmesinde MIT' nin büyük rolü ve o günün MIT' sindeki simaların bugün bu sektörde çok büyük imzalarının bulunması gibi. Örnekleri çoğaltabiliriz popüler IDS' lerin geliştiricilerinin oda arkadaşı olması gibi. [1]

Benim eski ve uçuk teorilerimden biri insanların etrafındaki kişilerin beyin dalgalarından etkilenip istem dışı olarak bilgi çalmaları ve aynı noktaya ulaşmalarıdır. A Scanner Darkly' de bir yatak muhabbetinde de bu felsefenin kırıntıları görülebilir. Yani bir nevi beyninizin diğer insanların beyin dalgalarını çalıp bilinçaltında kullanması. Tabii ki yıllardan sonra bu teorimi daha oturaklı bir hale getirdim ve şuna çevirdim:

İnsanlar çok gelişmiş makineler, lakin girdi olmadan çıktı üretemezler. Mesela henüz ergenliğe erişmemiş bir çocuğa cinsel ilişkiyi anlatamazsınız [5], o çocuk henüz o bilgiyi idrak edecek bir girdiye, içgüdüye sahip değildir. Rasgelelik konusuna hakim olanlar buradaki noktayı daha çabuk kavrayabilirler. Rasgele bir sayı üretmek için genelde bir "seed" kullanırsınız, yani rasgeleliğin temelini oluşturacak girdi. Bilgisayarlar tamamen tahmin edilebilir olduklarından bilgisayarın kendisi aslında hiç bir zaman rasgele bir şey üretemez, bu yüzden gerçek rasgelelik (TRNG) çok daha komplike bir sistem gerektirir mesela "evren" gibi, "dünya" gibi, bu tip planını yapamadığımız, bir sonraki adımını tahmin edemediğimiz sistemler bizim için rasgele olan girdiler sağlayabilirler. Bu yüzden bazı sistemler rasgelelik sağlayabilmek için dış dünya datalarını kullanırlar, sıcaklık, nem, ses, hareket, ışık vs.

Şimdi demek ki insan girdi olmadan çıktı üretemiyor, hayalgücünün belli limitleri ve şekillendiricileri var, demek ki gerçekte rasgelelik yok ama bir dizi etken ve sonuçlar var. Teoride buna dayanıyor. Eğer insanlar aynı kaynaklardan besleniyorsa ürettikleri şeyler ve ulaştıkları noktalar da benzer olacaktır. Yani aynı web sitelerinden, aynı bloglardan, aynı televizyon dizilerinden, aynı filmlerden, aynı müziklerden ve bazen aynı coğrafyadan, hatta aynı öğretemenlerden, aynı kitaplardan beslenen topluluğa dahil olan kişiler aynı ve benzer üretimler yapacaktır. Eğer yarın bir gün bir sosyal platform çıkar ve bu kaynakları tek bir yerde toplar ardından da aynı kaynaklardan beslenen kişileri eşleştirirse bu kişilerin benzer çıktılar ürettiğini gösterecektir.

Özellikle yakın dönem trendlerini tahmin etme ve bir sonraki adımı görme de bunun sonuçlarından biridir. Ancak buradaki kişi çok sevinmemeli çünkü sektörün bir sonraki adımını tahmin edebilmiş olsa da onunla aynı havuzdan beslenen diğer kişilerde bu bir sonraki adımı tahmin edebilecektir. İşte o noktada "Fikir x Harekete Geçirme x Hız" formülü sonucun değerini belirleyecektir. Fikir' i bu formülden çıkartırsanız gerçekten önemli olanın eyleme geçirme kalitesi ve bunu ne kadar hızlı yapabildiğiniz olduğunu göreceksiniz [2].

Aynı nedenlerden dolayı tarihe icatlar ile ya da yeni yaklaşımlar ile geçmiş bir çok kişi toplum tarafından "kopuk", "manyak", "deli", "sorunlu" olarak nitelendirilmiştir, ya da okuldan atılmıştır. Ressam, müzisyen ve benzeri sanatçılar olduğu kadarıyla teknik kişiler de bir istisna değildir. Ek olarak bazı bilim adamlarının büyük bir buluşa ulaşmalarını sağlayan neden onların "genel olarak kabul gören" bir şeyi kabul etmemiş olmalalarıdır. Bu da aynı "Balığa suyu anlatmak gibidir", Ne zaman balık kendini sudan bağımsız sayabilir o dakikada suyun ne olduğunu anlayabilir, aksi takdirde su onun için dogma bir bilgidir, bunu tekrar tanımlamak ve anlatmak mümkün olmayabilir.

Ana konuya dönersek iki tip girdi olduğunu görebiliriz:

Genel Girdi
Bu klasik genel kültür girdisidir, bunun sayesinde kahvede iyi bir konuşmacı olabilir ve hatta bir sonraki haftaki memleket gündemini bile çözebilirsiniz. Ek olarak bu tip girdi toplumların kanalize edilmesindeki en mükemmel yoldur, çünkü bilinçli ya da bilinçsiz (hem yayıncı hem izleyici tarafında) belli etkiler oluşur ve sonuçlar benzer çıktılara yol açar. On sene önce yayınlanan bir televizyon serisi on sene sonraki ülkenin belli yaşındaki insanları üzerinde etki yapıp, belli akımlara yol açabilir. [6]

Alternatif Girdi
Eğer "Genel Girdi" yi popüler kültür ve standart yaşam tarzı noktasına indirgersek "Alternatif Girdi" yi de normal şartlarda bulunduğun coğrafya, etnik kültürde pek bilinmeyen ve beklenmeyen bilgi ile beslenme olarak tanımlayabiliriz. Mesela İstanbul - Bostancı' daki bir adamın Afrika Etnik müziği dinlemesi tam anlamıyla o kişi için alternatif bir girdidir. Dolayısıyla bu kişinin her adımdaki çıktısını etkileyecektir. [7]


Aynı dalgadan girdiye maruz kalan insanlar istem dışı aynı şeyleri üretecektir. Mesela ben XSS Shell' i yayınladığım hafta Attack API ve BeeF te yayınlandı. 2005' te bu konunun ilk örneği geliştirilmesine rağmen tam iki sene sonra, üç farklı kişi aynı konsepti daha farklı bir şekilde birbirlerinden haberdar olmadan tekrar yaptı[3]. İlk bakışta bu her ne kadar tuhaf görünse de bu kişilerin hepsinin benzer arka plana sahip oldukları (yazılım geliştiriciliği, güvenlik ve web uygulaması güvenliği odağı),  aynı blogları takip ettiği, son zamanlardaki aynı makaleleri okudukları düşünülünce, sonuç biraz kaçınılmaz oluyor. [8] Sonuçların ikisi çok yakınken diğeri biraz farklıydı. Bunun da ana nedenini, o kişinin alternatif girdilerine bağlıyorum. Onun ürettiği yazılım tamamen JavaScript ağırlıklı idi ve kendiside diğer iki kişiye göre JavaScript ile çok daha yoğun şekilde uğraşıyordu.

Son zamanlarda okuduğum Paul Graham' ın Cities and Ambition yazısı[4] tüm bu anlattıklarıma başka bir açıdan yaklaşıyor. O da yaşadığı şehrin insana verdiği mesajdan ve insanın o mesajdan etkilenip hayat tarzını ona göre şekillendirmesinden bahsediyor ki bu da burada bahsettiğim girdi ve çıktı fikrini destekliyor.

Tüm bunlar sizin günlük hayatınızda bir anlam ifade ediyor mu? Anlam ifade ettiği tek şey nasıl bir "girdi" [9] istediğinizi tanımlamak olabilir. Bunun sonucunda da çalıştığınız iş yerini, okuduğunuz siteleri, kitapları, kaynakları, ilgilendiğiniz hobileri, gördüğünüz yerleri, yaşadığınız şehri, yaşadığınız odayı, yaşağıdınız ülkeyi değiştirmek, çeşitlendirmek olabilir.





[1] Bunların hepsini kişi ve örnekleri isimler ile detaylı vermek isterdim ama maalesef hiç biri detayları ile aklımda kalmadı, eğer benzer kesin ve güzel örnekler biliyorsunuz yorum olarak belirtebilirsiniz.
[2] Bundan sonra tabii ki bu işi pazarlama gibi noktlar var, onlara değinmiyorum
[3] Burada kimsenin birbirinden duyarak yapması mümkün değildi çünkü projenin geliştirilme aşaması bir haftadan kısa olamaz, dolayısıyla bu üç kişinin de bunu tamamen birbirlerinden bağımsız yaptıklarını söyleyebiliriz. Daha da uç bir örnek vermek gerekirse, 5-6 sene kadar önce bir web projesini henüz açmadan, aynı fikri, neredeyse aynı arabirim ile ve hatta aynı renkler ve aynı arkaplan ile (benim soldan sağa iken onunki sağdan solaydı) başka birisi benim yayın tarihimden bir hafta kadar önce açtı. Eminim sizin de bizzat tanık olduğunuz benzer örnekler vardır.
[4] Bu Paul Graham' ın diğer yazıları gibi harika bir yazı, İstanbul tam olarak ne mesaj gönderiyor, henüz ben çözemedim. Ama sanırım gönderdiği mesajlardan biri "Hayatta Kal!" .
[5] İmam-ı Gazali' nin enfes metaforlarından biri, maalesef orijinal kullanım konusu aklımda değil
[6] Sanıyorum ki açmıştır da, ama o gözlemi yapmak beni aşan konulardan biri, belki yirmi sene sonra gene bu konuda blog yazarsam, tekrar bu gözlemi yapabilirim!'
[7] Bu noktada Kelebek Etkisini unutmamak lazım, ama aynı şekilde bir zarı 1000 defa atarsanız tüm zarların ortalaması 3 olacağı gibi genel çıktılar belli ortak paydalarda buluşacaktır
[8] Burada muhtemelen çok daha fazla kişi aynı arka plana ve girdiye sahipti ancak, bir çok farklı etkenden dolayı tahmin ediyorum ki bir çok kişi bu projeyi hiç bir zaman hayata geçirmedi.

[9] Bu "girdi" kelimesi çok fena yanlış anlaşılmalara neden oluyor!



Reklam Korkusu @ 10-01-2009 03:45

Nedense bizde genel olarak bir reklam yapma korkusu var. Mesela üzerinde markanın büyük harflerle yazdığı kıyafetleri "Ben bedavaya adamın reklamını mı yapacağım?" diye giymeyen insanlar var. Sanki bizim arka mahallenin sidikli Murat' ı değil de David Beckham arkadaş. Bu o kadar büyük bir mevzu değil ama bu işin özü.

Olayın değişik çıktılarını farklı yerlerde görebiliyoruz;

  • Türk dizilerinde, filmlerinde markaların hepsi sansürlüdür, firma adları, ürün isimleri söylenmez,*
  • Microsoft Zirvelerinde konuşmacılar Linux değil, Linux ve türevlerini kastederken "Diğer İşletim Sistemleri" derler,
  • Firmalar resmi olmayan yerlerde diğer benzer ürün ve firmalardan bahsederken "rakiplerimiz", ya da "benzer ürünler" derler, rakip bariz ve tek olsa bile isim kullanılmaz, Öyle ya reklamın iyisi kötüsü yoktur,
  • Microsoft' un yabancı evangelistleri hatta direk o ürünler üzerinde çalışanlar bile ürünlerini benzerlere göre zayıflıklarını açık açık söylerken,Türkiye' dekiler bu tip şeyleri asla kabul etmez ve rakip firma, ürün ismi kullanmaz. Microsoft örneğini ikinci defa veriyorum çünkü çok tanık oldum ve MS' in diğer ülkelerdeki yaklaşımı ile Türkiye' deki yaklaşımı bireyler açısından çok değişik, dolayısıyla farkı görmek çok basit.
  • Çok fazla Türk roman okumuyorum, pek atmış olmayayım ama gördüğüm kadarıyla romanlarda da marka, ürün vs. isimleri geçmez.


Mesela Stephen King' te görürsünüz ki karakterler Seven Eleven' da Coca Cola içerler, bilmem ne markası ile ellerini yıkarlar. Ya da Big bang Theory de Penny Age of Conan oynar, her üç dizinin ikisinde karakterler XBox onar. Bizde ise Wii ürününü göstermemek için üç takla atılır, hele ismi ise kesinlikle zikredilmemelidir.

Her zamanki bu sonuçsuz daha çok neden böyle sorusunu akla getiren bir yazı. Henüz ben bunun neden böyle olduğunu psiko-analiz edemedim, edenler vardır. Herkesin "Türkler ..." diye başlayan şeylerden sıkıldığını biliyorum ama bence çok önemli bir konu çünkü bu tip şeyler toplum olarak nerelerde doğru nerelerde yanlış yaptığımızı ortaya koyacak şeyler. Global bir dünyadayız sosyal hoppalık hepimizi dünya ile burun buruna getirdi, farklılıkları görmek çok daha kolay. Başkalarının ne sorunları nasıl çözdüğünü, neyi yanlış yaptığını, ne tip bir tarihin onları nasıl iyi veya kötü etkilediğini görmemiz çok daha kolay. Bunların sonucunda rakı masasında ülkeyi kurtaracak halimiz yok ama her zaman kendimiz kurtarabilir ve dalgaya kapılmadan kendi yolumuzu çizebiliriz.

Son olarak bloglar gibi organik ve kurumsal olmayan yapılar her ne kadar bunu takmasa da orada da başka bloglardan bahsetme korkusu zaman zaman başgösterir, mesela yazıya link verilmez "alıntı" yapılır, bu "alıntı" lar o kadar büyükdür ki adeta yazıyı almış gitmişsin gibi olur. Gene de sanırım internetin doğal samimi yapısı bu olayı çok ciddi şekilde kırıyor ve çok değil yakında kurumsal anlamda da bu yapıların başka coğrafyalarda kırıldığı gibi bizde de kırılacağına eminim.

* Türk dizi, film vs. lerde gizli reklam yasasından dolayı bunların bir çoğu mümkün olmuyor olabilir, ama yegane örnek bu değil ve sanırım genel kanıyı değiştirmiyor, ek olarak eminim ki bununda kanuni olarak üzerinden gelmenin bir yolu vardır. Bu konuda daha bilgili olan birinde işin o kısmının detaylarını duyabilirsek güzel olur.



Obsesif Programcılık @ 10-01-2009 03:45

Programcılık kısa zamanda takıntıya dönüşen işlerden biri sanırım. Sitenin düzenli takipçileri farketmişlerdir bu aralar pek bir şey yazamadım. Genel mevzular dışında yoğun şekilde programlama yapıyorum. Son üç günüm tam anlamıyla feciydi. .NET ile SSL trafiğinede müdahaleyi sağlayacak bir proxy server yazmak ile uğraşıyorum. Aslında daha önceden XSS Tunnel için bir proxy yazmıştım ancak o proxy SSL, keep-alive desteklemiyor ve daima tek bir server ile HTTP objeleri üzerinden konuşuyordu.

Dolayısıyla TCP ile sadece tarayıcıdan proxy' ye gelen istekleri işliyordum, diğer taraf gene .NET' in HTTPWebRequest objelerini kullanıyordu. Gelen cevabı da değiştirip tarayıcıya geri gönderiyordum.

Bu yeni sistemde ise tam bir proxy implemantasyonu yapıyorum. Yaptığım iş tam olarak MITM – Attacking / Debugging proxylerin yaptığı işin aynısı. Bunun da bir çok gereksinimi var. SSL' e MITM yapmanız gerekiyor, HTTP Protokolünü kendiniz implemente etminiz gerekiyor. Son üç-dört gündür vaktimi harcadığım konular:

  • .NET' te TCPClient ile SSL bağlantısını self-signed bir sertifika ile kabul etme
  • TCPClient ile Chunked encoding' i destekleme
  • HTTP/HTTPS implementasyonu
  • Gzip, Deflate' i anlama, decode edebilme

Bazıları uzun, bazıları kısa sürdü ama bazı noktalarda ciddi derecede bunalıma girdim. Eğer 3 saat süreceğini planladığınız bir iş 2 gün sürüyorsa moraliniz bozuluyor ve bazen öyle bir noktaya geliyorsunuz ki "Acaba sonuçlar buna değecek mi?" ya da "Hiç bir zaman çalışmayacak mı?" gibi soruları kendinize sormaya başlıyorsunuz.

Ama Allaha şükür dört günün sonunda bir dizi hata ayıkladıktan sonra, tuhaf sorunlar ile karşılaştıktan sonra, HTTP RFC' lerini daha detaylı okuduktan sonra sistem çalışmaya başladı. Kodu deneysel aşamadan kurtarıp adam akıllı bir hale sokmak ve çeşitli şekillerde test etmek, performansı artırmak biraz daha vakit alacak ama bundan sonrası basit.

Bu arada programcılıkta akıcı noktayı yakalamak ile ilgili bu grafik çok hoşuma gitti. Neyse bu kadar işten sonra ödülü hakettim değil mi?

Yazar Call of Duty 5 Multiplayer' ı açar ve "Capture the flag" çığlıkları arasında çeşitli Yankee ve Japon askerlerini öldürür....



Bilgi ve YAGNI @ 10-01-2009 03:45

YAGNI - You Ain't Gonna Need It,  yazılım çevrelerinde kabul gören ve benim de şiddetle izlemeye çalıştığım prensiplerden biridir. Basit şekilde "bir şeye ihtiyacın yoksa yapma, ne zaman ihtiyacın olur o zaman yaparsın" diye özetlenebilir.

Bugün aklıma şu soru geldi: Bu prensibi bilgiye de uygulayabilir miyiz? Mesela "İspanyolca öğrenmeye henüz ihtiyacım yok, niye gidip İspanyolca öğreneyim ki?" Ya da "Ruby on Rails" seksi duruyor ama henüz benim bir işime yaramıyor gibi. Bu konu hafiften Genel Kültür Çağımızın En Büyük Yalanıdır konusu ile de ilişkili, henüz ben bir karara varamadım, karara varıp varmamak pratik yaşantıda ne kadar şeyi etkileyecek emin değilim ama ilginç sonuçlar getirebilir.



SSL İmplementasyon Güvenliği @ 10-01-2009 03:45
SSL İmplementasyon Güvenliği dokümanımı Web Güvenliği Topluluğu (WGT) altında yayınladım. Dokümanı daha önce ingilizce olarak SSL Implementation Security FAQ adı ile yayınlamıştım, Türkçe versiyonu biraz daha fazla bilgi içeriyor. Çevirirken tekrar üzerinden geçme fırsatım oldu. Eğer yazılım ve web uygulaması geliştiriyorsanız kesinlikle bir göz atın.



Yorgunum Dostlar @ 10-01-2009 03:45
Artık neden blog yazmadım, 15-20 gündür neden gözükmüyorum vs. gibi konuları yazmıyorum bile. Çünkü ben sıkıldım, sizin ne kadar sıkıldığını tahmin bile edemiyorum.

Herneyse şimdi hızlı şekilde neler oldu, neler bitti?

  • Sistemi yeniledim, yeni bir harddisk, yeni bir işlemci, yeni bir grafik kartı aldım,
  • Hazır o kadar şey yapmışken Vista x64' e de geçtim,
  • 10 senedir beklediğim Fallout 3 çıktı (bunun hakkında daha sonra detaylı yazacağım inşallah)
  • Yılbaşı nedeniyle onlarca süper oyun piyasaya çıkıyor ve çıktı onlarla vakit harcıyorum, şu aralar oynadığım oyunlar:
    • Mass Effect
    • Fallout 3
    • Call of Duty 5 : World at War (Multiplayer Beta)
    • Soul Calibur IV
  • Arada bir baktıklarım da:
    • King's Bounty
    • Mirror's Edge
  • Genel olarak sağlığım iyi olsa da inanılmaz bir halsizlik hali içerisindeyim, kansızlığım azdı herhalde,
  • İş yoğunluğum normalin üzerinde, bu dönem çok yoğunuz dolayısıyla pek kendime vakit ayıramıyorum,
  • Sitenin SSL' i nin yenileme tarihi geçti, bu da blog ekranlarının SSL desteğinde sorun çıkardı, vs. vs.
Bunların içerisinde sizi ilgilendiren bir şey var mı? Muhtemelen yok.

Bütün bu dönemde ben gene aktif paylaşıma FriendFeed, Twitter ve RSS Paylaşımından devam ediyordum. Dolayısıyla blog' ta yeni yazı yokken canınız sıkılırsa buraları takip edebilirsiniz.



Büyük Resmi Görebilmek @ 10-01-2009 03:45

Tatilim bitti, tekrar beyaz ekranlara döndüm ***. Uzun süredir kafamda dönen, herkesin bildiği lakin göze tekrar sokulmayı hakeden bir konuda yazmak istiyorum.

Büyük resmi görmek detaylardan kopup gerçek olayı görmek, getiriyi ve götürüyü analiz edebilmektir. Bu hayatın her yerinde karşı karşıya olduğumuz bir durumdur, elimizdekine odaklanıp gerçek amacı unutmak, bir projenin bir bölgesine yoğunlaşıp uzun vadede hataya dönüşen bir karar vermek, günü kurtarmak için 5-10 dakikadan kar edip işin sonunda günler kaybetmek ile alakalıdır.

Hatta genel olarak gizli servislerin ve devletlerin suni gündem yapması da bizim büyük resmi görmemizi engellemek içindir. Bu suni ya da gerçek ekonomik sıkıntı, savaş, magazin değerli bir haber ya da tamamen gerçek dışı bir olay olabilir. Bunlar sayesinde odağın kayması ve gerçekte, büyük çapta olan olayın farkedilmemesi sağlanır.

Büyük resmi görmeye bir kaç örnek;

Toplu Taşıma Sorunlarını Çözmek:

Bir metropolde toplu taşımanın geliştirilmesi ciddi maliyetlere çıkacaktır, ancak toplu taşımayı çözmenin tek amacı sadece insanların daha mutlu olmasını sağlamak için değildir, bunun getireceği güzellikler arasında şunlar da vardır :

  • Toplu taşımada kaybedilen insan gücünün ekonomiye geri dönmesi,
  • Toplu taşımanın kötülüğünden dolayı artan kişisel araç kullanımının artması
    • Bu hava kirliliği,
    • Daha fazla benzin harcanması (paranın yurtdışına çıkması) ve
    • Daha fazla kişisel aracın satılması (paranın yurtdışına çıkması) anlamına geliyor.
  • vs. vs.

Dolayıysıyla toplu taşımayı çözmenin kendini ne kadar sürede amorti edeceği hesaba katılmalıdır, bu sadece insanlar dah fazla oy versin diye yapılması gereken bir şey değil.

Çalışanların öğle yemeği vakti:

Yapılan araştırmalarda öğle yemeğine 30 dk. yerine 60 dk. ayıran firmalar çalışanlarından daha yüksek performans alıyorlarmış*. Burada büyük resmi gören firmalar 30 dk. kar etmeye değil bunun uzun ve orta vadedeki etkilerini görebiliyorlar. Benzer bir şekilde zamanında Hayalet Çalışan başlığı altında benzer bir konudan bahsetmiştim.

TDD, Test Driven Development :

TDD bir yazılım geliştirme metodolojisidir. TDD ile yazılım geliştirirken her yazılan kod için bir de test kodu yazılır, bu da tabii ki yazılan kod oranını ciddi şekilde yükseltiyor. TDD' nin özellikle Türkiye gibi sıkışık, aceleci, henüz tam oturmamış ülkelerde yerleşememesinin en büyük nedeni de gene büyük resmi görememektir. TDD konusunda yapılan bir çok araştırmada TDD' nin uzun vadede bakım, hata ayıklama ve benzeri proseslerden kazancından dolayı çok daha verimli olduğunu ortaya konulmuştur. Bugün bir çok firma ya TDD uyguluyor ya da sadece Unit Testing yapıyor. Dolayısıyla günlük yazılım geliştirme hızı düşse de sonuçta kazanç artıyor, bu noktada büyük resmi göremeyen yazılım firmaları da günü kurtarmaya devam ediyor **.

Maalesef hayatta da büyük resmi kaçırabiliyoruz, yegane amacı kaçıyoruz. Burada bir kaç nokta var, 

  • Yaptığınız şeyleri yaparken kendinize “Neden?” sorusunu sorun,
  • Yeni bir karar verirken sadece kısa vadeyi değil ana nedeni düşünün,
    Mesela üniversite sınavlarından sonra okul seçerken sadece iyi okul seçmeyi düşünmekle yetinmeyin “Neden Okuduğunuzu” u düşünün.
  • Her işinizi yaparken arada bir adım geri atın ve tüm olayı bir bütün olarak görmeye çalışın. Detaylarda kaybolmayın. Neden başladığınızı, şu an yaptığınızı neden yaptığınızı, bu yapılan ana sonuca yardımı olup olmayacağını değerlendirin.
  • Konunun içerisinde olmayan biriyi konuya çekip hızlı şekilde fikir alın.
    Programcılıkta bir yerde saatlerce takılır ve sorunu çözemezseniz hemen etraftaki bir programcıyı bulur ve ona sorunu sorarsanız, sizin iki saattir çözemediğiniz olayı genelde o bir dakikada tespit eder. Çünkü bu sorun genelde ya yazım hatasıdır, ya yazdığınız kod ile baktığınız çıktının farklı olmasıdır. Dışarıdan gelen kişi sizin kadar işin içerisinde olmadığından varsayım yapmadan en aptalca olan şeyleri bile kontrol eder. Yani size “Sunucunun prizi takılı mı?”, “Baktığın tarayıcı cache’ in de mi tutuyor?”, “Çalıştırdığın yazılım eski verisyonu mu son olarak compil ettiğin mi?” diye sorabilir. Siz ise bunları o noktada düşünemeyebilirsiniz (Hatayla Yaşamak ve Sorun Çözmek).

Konu bundan çok daha geniş ama siz zaten konuyu biliyorsunuz, bu ise size bir hatırlatma. Şimdi bir adım geri atın ve düşünün.

 

 

* Makalenin kaynağı BA Business Life dergisi, ancak online olarak bulamadığımdan kaynağı veremiyorum.

** Bu konuda bir çok istisna var, her firma illa TDD kullanacak diye bir şey yok, her projeye uygun da olmayabilir, ama TDD başarısı kanıtlanmış metodolojilerden biri.

*** “yeşil sahalara dönme” kelime grubuna yapılan göndermedir bu, bu noktada okuyucunun suratında bir tebessüm oluşması gerekiyor.



Eğer Başka Bir İş Yapacak Olsaydınız @ 10-01-2009 03:45

Bu zaman zaman aklıma gelir, eğer şu an yaptığım şeyi yapmıyor olsaydım olsaydım ne yapardım?

Ben genelde istediğim şeyin peşinden giden insanlardan biriyimdir ama buna rağmen hayatın rüzgarını, gerçekçi planları ve elimdeki kaynakları kararlarıma da dahil ederim. Dolayısıyla bir konuda 10 sene harcadıktan sonra bam başka bir konuya atlayacağımı sanmıyorum.

  • Oyun Programcılığı
    Oyun programcılığı içimde kalmış uktelerden biridir, hatta bundan 4,5 - 5 sene kadar önce oyun programcısı olarak bir firmada başlıyordum, sonra olmadı.

    Lakin C++ taki deneyimsizliğim, çok güçlü bir matematik hatta fizik altyapımın olmaması ve deneyim kazanacak imkan olmaması yüzünden sanırım hiç bir zaman bu konuda uzmanlaşamadım.
  • Oyun Yazarlığı
    Oyunlar benim en büyük hobilerimden biridir, sadece oynamak değil kültürü, tuhaf oyunları görmek, yeni akımları incelemek vs. O yüzden her zaman oyun tanıtım yazılarını profesyonel olarak yapmayı da düşünmüşümdür. Lakin kalemimin güçlü olmaması, sektörün maddi yönden tatmin edici olmaması gibi etkenlerden hiç ciddi olarak düşünmedim bile.
  • Web Girişimcisi
    Bir çok kişinin web girişimciliği sadece son senelerdeki patlamaya dayanırken benim hayallerim yaklaşık 9-10 sene önceye dayanıyor (dot-com bubble' ı ve sonrası). Hani şu Google' un henüz Google olmadığı günler. Kişisel bir sürü fikir yanında ilk çalıştığım firmalardan birinde Ali Baba benzeri bir sistem kurmaya çalışıyorduk, bu sırada Türk Ticaret.net açılması ile bizim projemizde hafiften elimizde patlamış oldu. Tabii ki projedeki teknik ve iş planındaki yetersizliklerden bahsetmiyorum bile. Bu dönemde Gitti Gidiyor' un kurucu ekibi ile de hem tanıştık hem de birlikte çalışmıştık. O dönemden bu zamana adam gibi pek internet firması da Türkiye de ayakta duramadı, duranlarda Gitti Gidiyor gibi gerçekten ciddi bir konuma geldiler.

    Bunun yanında bir çok startup' ın kurulum sürecinde teknik ekipte geliştirici olarak ya da güvenlik/yazılım danışmanı olarak bulundum, şu an da bir kısmı battı, bir kısmı ise keyfi yerinde devam ediyor. Dolayısıyla klavyede uyumayı, mcdonalds' larda plan yapmayı, evlerde switch' leri kurup yazılım geliştirmeyi, dışarıdan gelen pizzalar ile gün boyu hayat geçirmeyi ve günün sonunda multiplayer bir oyun atmanın tadını bilirim. Nitekim bazen sevdim, bazen nefret ettim...

    Web girişimciliği benim uzun soluklu hayallerimden, internet ikinci dot com furyasını yaşarken belki bir fırsat bulur ben de sızarım. Girişimcilik artık bir çok açıdan daha kolay, dolayısıyla hareket etmek için de güzel bir vakit.
  • Yazarlık
    Deneme ve kısa hikaye yazmak sevdiğim işlerden, özellikle bir bilim-kurgu/polisiye arası bir roman yazmayı isterdim ama gel gör ki yeteneğim yok (pardon şöyle ifade edeyim : dünya beni anlamaya hazır değil), yeteneğim de olsa kim yazarlıktan para kazanmış ki?

    Daha çok teknoloji ile alakasız olmak istediğim şeyler yazabilseydim keşke ...

Açıkçası hadi ben "meme" yaptım, gitsin herkes yazsın ya da "sen", "sen", "bir de o köşedeki ufak blog sahibi, sen" yaz demeyi sevmiyorum ama siz ben bunu memelerim yazarım derseniz de kimseyi tutacak değilim. Yaparsanız da adresi yorumlara link olarak bırakın lütfen.

Açıkçası benim merak ettiğim bir konu, okuyuclardan da yorumları bekliyorum. Şu anki işinizi yapmasaydanız ne yapardınız? Ya da şöyle dile getireyim "Büyüyünce ne olmak istiyorsun çocuğum?"



Paul Graham ve Girişimcilik Dersleri @ 10-01-2009 03:45

Bugün bir çok Paul Graham makalesi okudum, How to Start a Startup yazısında şu dikkatimi çekti.

...

So who should start a startup? Someone who is a good hacker, between about 23 and 38, and who wants to solve the money problem in one shot instead of getting paid gradually over a conventional working life.

..

The other cutoff, 38, has a lot more play in it. One reason I put it there is that I don't think many people have the physical stamina much past that age. I used to work till 2:00 or 3:00 AM every night, seven days a week. I don't know if I could do that now.

...

During this time you'll do little but work, because when you're not working, your competitors will be. My only leisure activities were running, which I needed to do to keep working anyway, and about fifteen minutes of reading a night. I had a girlfriend for a total of two months during that three year period. Every couple weeks I would take a few hours off to visit a used bookshop or go to a friend's house for dinner. I went to visit my family twice. Otherwise I just worked.

Doğal olarak yazıyı okurken kendimle kıyaslıyorum ve Graham' ın burada bahsettiği şeyleri ben 18-22 yaşları arasında yaşadım ve maalesef deneyimsizlik ve nasipsizlik yüzünden istediklerimi alamadım. Şimdi ise bunları yapmak bana çok uzak geliyor yani 23 yerine bu işe çok erken girmek beni henüz 38 olmadan 38 gibi hissettirmeye başladı. Tabii ki bu senelerdeki boşa küreklerimiz deneyim olarak geri döndü inşallah ama eğer bir defa daha cesaret eder ve bir startup denersem o zaman göreceğiz, bir daha böyle çalışabilecek miyim? Ya da önceki deneyimler işimize yarayacak mı?

Bu arada söylemeyi unuttum, biraz bariz ama gene de söyleyeyim "tatilden döndüm" :)



Hayat Detoksu @ 10-01-2009 03:45

Hayatın ticari toksinlerinden kurtulma amacı ile 15 günlüğüne hayat detoksuna gidiyorum. Bu süre içerisinde yorumlar mucizevi bir şekilde onaylanacak, ancak yeni bir yazı site semalarında gözükmeyecektir.

Şimdi ben 15 gün boyunca yazı yazmayınca tüm site okurları boykota gidecek, hatta insanlar sitelerini kapatıp benim 15 gün blog yazmamamı protesto edecek, imza toplayıp avrupa insan haklarına gidip "blogu okuma haklarının ellerinden alınamayacağını" belirtecek, fanatikler yeni bir worm yazıp Ferruh yazı yazmıyorsa internetin ne anlamı var diyerekten ünlü 13 hayalete DDoS saldırıları düzenleyecekler.

Lütfen arkadaşlar bu tip şeylere gerek yok, bakınız :

SELECT COUNT(*) FROM Article
1737

1.737 yazı sizi bekliyor...

Ben sitede yokken biraz yorum yazın da, site canlı gözüksün. Bir de ben yok hergün bir doz şu videoyu izleyin :

This isn't a seminar, this isn't a weekend retreat. You have to realise that someday you will die, Until you know that, You are useless.

26 Eylül 2008

Ailenizin ziyaretçi kaygısı olmayan, her telden çalan, cümle başına 17 yazım hatası yapan, ayrı yazılan de ve da' lar kan davası olan, sorunlu blogcusu.



iPhone Almamak İçin 22 Neden @ 10-01-2009 03:45

Bir ay kadardır IPhone 3G kullanıyorum, TR' de de herkes sanal kamp yapmaya başlamış o yüzden almadan önce keşke bilseydim dediklerimi yazayım dedim.

  1. Şarjı çok az gidiyor, Vasat bir kullanım ile 1-2 gün civarı,
  2. İnternet beklediğinizden çok daha yavaş, kapsama alanları aslında o kadar da kapsamıyor,
  3. Wireless desteği kötü ve yavaş,
  4. IPhone için kaliteli uygulama çok az, yazılımların yarısı arada bir kitlenip, uçuyor,
  5. Kırmadan (jailbreak vs.) yükleyebileğiniz yazılım sayısı az,
  6. Yazılım geliştirirken maalesef .NET ya da Java desteği yok,
  7. Bir çok video formatını desteklemiyor,
  8. Windows kullanıcıysanız ITunes + Quicktime kurmanız zorunlu ve bunların ikisi de birbirinden rezil ve Windows ortamında saçmalık derecesinde yavaş yazılımlar,
  9. ITunes' un backup alması 1-4 saat arasında sürüyor, genelde sıkılıp MobileBackup.exe yazılımını direk sonlandırmak zorunda kalıyorsunuz.
  10. GPS şaka gibi, internet olmadan çalışmıyor, çalıştığı zamanlarda da süper yavaş çalışıyor. Gerçek ve offline bir GPS yazılım ile gelmiyor, dolayısıyla eğer GPS özelliğini gerçek bir GPS gibi kullanmayı düşünüyorsanız şimdiden vazgeçin,
  11. IPhone içerisindeki dosya, klasörlere direk erişim yok. Herşeyin ITunes üzerinden yapılması gerekiyor bu da senkronizasyon vs. gibi işleri çok zorlaştırıyor. Kendi bilgisayarınızın başında değilken IPhone' unuza müzik, video atmanız imkansız hale geliyor,
  12. Pahalı,
  13. MMS desteği yok,
  14. Her ne kadar işim olmasa da kendi MP3 vs. dosyalarınınizdan ringtone yapmamanız başka salak bir limitasyon,
  15. Ses ile kontrol, Kulaklık üzerinden çağrı kabul etme vs. gibi özellikleri yok,
  16. Iphone 3G' nin bazı eski IPhone / IPod aksesuarları ile uyumsuz olması, Kendini şarj etmemesi vs. (bkz. IDragon)
  17. Safari' de Flash' ın çalışmaması, buna rağmen youtube videoları özel yazılım ile çalışıyor,
  18. PDF, CHM vs. adam gibi hiç bir formatı okuyamıyor olması. O kadarki aslında dosya transferi yapamadığınızdan ve dosya sistemine erişmedeğinizden HTML bile okuyamıyor diyebiliriz. Bu da e-book konseptini öldürüyor.
  19. Apple her zamanki gibi mouse' da 2 butona ne hacet mantığı ile, Kopyala / Yapıştır sizin neyinize diyerekten böyle bir özellik sunmayı da gereksiz bulmuş. Ne de olsa salak bir sanal klavye ile 15 karakter şifre girme çok doğal bir iş.
  20. Uzun listelerde scroll yaparken, parmaklarınızın ağrıması ve hayatınızın gözlerinizin önünde şerit IPhone uygulaması olarak geçmesi.
  21. Kontakları SMS ile gönderememe (Bundan emin değilim, ben henüz bulamadım bulan varsa söylesin),
  22. Video kayıt özelliğinin olmaması.

 

Yiğidi Öldür Hakkını Yeme Listesi

  1. Bir çok açıdan donanım ve yazılım çok kullanışlı,
  2. Seksi & İnce,
  3. Video kalitesi, müzik kalitesi ve genel olarak IPod fonksiyonu güzel,
  4. Telefon ile konuşurken IPhone' u kullanmaya pürüzsüz devam edebilme, IPod dinlerken gelen çağrıları vs. güzelce kabul edebilme ve yeni arama yapabilme.
  5. Text-render ve görüntü kalitesi,
  6. Ekranın kendini ışığa doğru ayarlaması, dönmesi, kulağınıza getirince ekranın kapanması çekince tekrar açılması ve benzeri sensör aksiyonları,
  7. Kaliteli kulaklık.

Keşke biri Windows Mobile' ı bu donanımın içine koyabilse o zaman dünya çok daha güzel bir yer olurdu...



Yeni Tasarımın Yapılışı - II @ 10-01-2009 03:45

Bu yazının ilk bölümü: Yeni Tasarımın Yapılışı - I

Tasarımı HTML’ e aktarmak - 07.04.08

Pazar sabahı, 9:45 gibi uyandım, önce sitenin tasarımını Fireworks üzerinde fena olmayan bir seviyeye getirdim. Bunu yaparken RSS ikonuna ihtiyacım oldu normal RSS ikonlarını Feed Icons sitesinden aldım. Ek olarak e-mail ile RSS’ e üye olacaklar içinde bir ikona ihtiyacım oldu. Onun için de E-mail Subscriptions Icons’ u buldum ve onu da oradan çarptım. Tabii ki ikiside ücretsiz ve serbest şekilde dağıtılıyor, dolayısıyla isteyen sitesinde kullanabilir. İkonları ve benzer dış kaynakları kullanırken lisansa bakmak her zaman önemli, aksi takdirde Süleyman Hocam canımıza okur :)

CSS Tasarımı

Önce istediğimiz yapı için bir CSS şablonu bulmak gerekiyor. CSS’ yi kendimiz de yazabiliriz ama yapılmışı tekrar yapmamak için hemen CSS şablon avına çıkıyoruz. CSS şablonu veren bir çok site var ama şu iki tanesi benim hoşuma gidiyor. Iron Myers – Pure CSS Layouts ve Layout Gala ikiside her tarayıcıda bu CSS’ lerin sorunsuz çalıştığını iddia ediyorlar. Ben de onlara inanıyorum ve CSS’ lerinin basit ve temizliğinden dolayı Layout Gala’ yı seçiyorum.

İlgimi çeken CSS’ yi yüklüyor, Edit+ ile HTML kodlamaya başlıyorum.

Arada bir dizi başka iş yaptım, saat şu an 15:27...

Alıntı CSS’ si oluşturmak

Blog yazarken sık sık gereken bir şey başkalarından alıntı yapmak. O yüzden güzel bir blockquote tagını çok kullanıyorum, bunu belli etmek için güzel bir CSS oluşturmam gerekiyordu. Bu iş için Design Meme’ de güzel bir örnek var ama sadece Firefox’ ta çalışıyor bu da bizim işimizi görmüyor tabii ki. Bende şu an ki sitedeki gibi basit bir şey yapmak istedim. Aşağıdaki gibi bir şey yaptım;

image

CSS ise şu şekilde;

blockquote{

background: url('mg/openquote.gif') no-repeat left top;
padding-left: 16px;
padding-top:2px;
color:#555;
margin-left:14px;

}

blockquote p,blockquote div,blockquote td,blockquote span{

font:italic 14px "Georgia", serif;

}

İlk İzlenimler

Sağ taraftaki hakkında kısmını da hallettikten sonra aşağıdaki gibi bir HTML’ e ulaştım.

image

Resimde görülen sağdaki navigasyon kısım başlıklarını şu şekilde bir CSS ile gerçekleştirdim.

div.section h2{
text-align:center;
background: url('/mg/blackdot.gif') repeat-x center;
margin-top:0;
}

div.section h2 span{
font: normal 24px Times, serif;
color:#333;
background-color:#FFF;
padding:0 10px 0 10px;
}

HTML kısmı ise gene çok basit;

ARAMA

Şimdilik güzel gidiyoruz.saat : 17:35. Bir kaç kek ve 330ml Coca Cola tükettim.

Yazı devam edecektir...



.NET Reflection, RCE and Hard Coded Keys @ 10-01-2009 03:45

Sometimes you need to extract some data out of another application but the data stored as encrypted. As you might guess generally keys are just hardcoded, but mostly algorithm is custom. Since there is no such a thing as "client-side security", there are so many ways to do decrypt this data.

You can go and reverse the code which is decompiling the application and copy, paste then tweak the code to compile. But this can be a real pain when dependencies and obfuscated code comes into the play.  Since new obfuscators taking the advantage of IL tricks, generally it's not easy to use decompiler generated high-level code without heavy modification.

Unless you are a masochist I'd suggest you to use the application's code to do the job.

  1. Find the decryption point and the DLL,
  2. Invoke the related decryption function using reflection.

We use reflection instead of simply referencing the dll because this way it's possible to call any method within any scope such as private and friend which wouldn't be possible otherwise. Also it allows us to easily bypass Strong Name restrictions without touching to the original binary.

Here is the code: