C++ ile Photoshop'u yeniden yaratma deneyimi
(f055.net)- 2006 yazında kişisel çizgi roman okuyucusu Fiew'i geliştirme deneyimi çıkış noktası oldu ve C++ ile Windows API kullanarak Photoshop benzeri görüntü düzenleyici Fedit bir bitirme tezi projesi olarak hayata geçirildi
- Fedit; kurulum programı, sıkıştırılmış arşiv, kayıt defteri anahtarı veya ek runtime olmadan tek bir çalıştırılabilir dosya olarak çalışıyordu; bu sayede kısıtlı yetkili PC'lerde veya USB sürücülerde doğrudan açılabiliyordu
- Arayüz, klasik Photoshop iş akışını andıracak şekilde tasarlandı; yüzen araç pencereleri, renk seçici, katman yönetimi, geri alma geçmişi, görüntü filtreleri ve özelleştirilebilir piksel kaydırma filtreleri içeriyordu
- En büyük zorluk kullanıcı arayüzünü yeniden üretmekti; araç ayar panelinin dock/undock davranışı ile renk ve araç seçicilerin uygulanması çok zaman aldı
- Proje, tezin başarıyla tamamlanmasına ve mühendislik lisans derecesinin alınmasına yol açtı; ardından GoldenLine CTO'sunda bıraktığı etki sayesinde toplu görsel yükleme için bir WinAPI uygulaması geliştirmeye yönelik bir C++ işi fırsatına dönüştü
Çizgi roman okuyucusu Fiew'den görüntü düzenleyici Fedit'e
- 2006'nın yaz başında çıkış noktası, mevcut görüntü okuyucu uygulamalarını beğenmemekti
- Özellikle okumayı yalnızca fareyle kontrol edememek ve sürekli klavyeye uzanmak zorunda kalmak rahatsız ediciydi
- Üniversitede C++/Windows API dersini yeni tamamlamıştı ve yaz tatili boyunca kişisel olarak ideal çizgi roman okuyucusunu geliştirdi
- Bu çizgi roman okuyucusunun adı Fiew idi
- 2006'nın sonbahar başında bitirme tezi konusu seçilmeliydi ve görüntü görüntüleyici geliştirme deneyimi sorunsuz geçtiği için bir görüntü düzenleyici de yapılabileceğine karar verildi
- O dönemde Adobe Photoshop yoğun kullanıldığı için hedef, Photoshop'a benzer bir düzenleyici yapmak oldu
Fedit'in uygulanışı ve dağıtım kısıtları
- Fedit, C++ ile yazılmış bir Advanced Image Editor olup Windows API ve GDI+ grafik kütüphanesini kullanıyordu
- Kullanıcı açısından avantajlı bir dağıtım biçimi için beş kurala uyuldu
- Kurulum programı yok
- Sıkıştırılmış arşiv yok
- Kayıt defteri anahtarı yok
- Ek runtime yok
- Tek bir çalıştırılabilir dosya
- Sonuç olarak kurulum gerektirmeden hemen çalışıyor, kısıtlı yetkili sistemlerde veya USB sürücülerde açılabiliyor ve az kaynak kullanan bir program haline geliyordu
Photoshop'a yakın arayüz ve özellikler
- Arayüz, klasik Photoshop gibi görünecek şekilde özenle hazırlandı ve sık kullanılan işlevleri içeriyordu
- Başlıca özellikler şunlardı
- Serbestçe yüzen araç pencereleri
- Renk seçici
- Kolay katman yönetimi
- Adım adım geri alınabilen geçmiş
- Çeşitli görüntü filtreleri
- Piksel kaydırma filtrelerini doğrudan kodlamaya imkân veren bir matris arayüzü
- Ayrıca önceki proje Fiew'den alınan büyük ölçekli bir görüntü kütüphanesi görüntüleyicisi de yer alıyordu
- Çok sayıda fotoğraf hızlı ve kolay şekilde kaydırılabiliyordu
Doğrudan debug edilmesi gereken geliştirme süreci
- MSDN ve Experts Exchange'den çok yararlanıldı, ancak sorunlar fazla spesifik olduğundan çoğu zaman doğrudan analiz ve debug yapmak gerekti
- Lisans tezi teslim tarihine yetişmek için son iki ay boyunca günde 14 saat çalışıldı
- En zorlu alan kullanıcı arayüzüydü
- Photoshop'a olabildiğince benzer bir iş akışı isteniyordu
- Araç ayar panelinin serbestçe dock edilip dock'tan ayrılabilen davranışı özellikle zordu
- Renk seçici ile araç seçiciyi yeniden üretmek de kolay değildi
- Proje biterken ciddi bir yorgunluk oluştu ve WinAPI'ye karşı bir soğukluk gelişti
Tez sonrası sonuçlar ve açık kaynaklar
- Tez başarıyla tamamlandı ve Warsaw University of Technology'den Bachelor of Science in Engineering derecesi alındı
- Fedit internette bazı olumlu incelemeler aldı, ancak aktif biçimde tanıtılmadı
- Daha sonra Fiew ve Fedit, GoldenLine CTO'sunda güçlü bir izlenim bıraktı ve Flickr klonu için toplu görsel yüklemeye yönelik yüksek verimli bir WinAPI uygulaması geliştirmeye odaklı bir C++ işine kapı açtı
- Açık kaynaklar
- Fedit ve Fiew kaynak kodu: GitHub üzerinden incelenebilir
- Tez dokümanı PDF: Fedit tez dokümanı
- Orijinal uygulama sitesinin Web Archive kaydı: dönemin web sitesi arşivi
- Hacker News tartışması: ilgili tartışma sayfası
1 yorum
Hacker News yorumları
“Kullanıcıya fayda sağlayan beş kural: kurulum aracı yok, sıkıştırılmış dosya yok, kayıt defteri anahtarı yok, ek çalışma zamanı yok, tek bir çalıştırılabilir dosya” cümlesini okuyunca içim ısındı ve mutlu oldum
Kayıt defterinin neden var olduğunu ve günümüz Windows yazılım ekosisteminin neden böyle işlediğini anlıyorum, ama eskiden masaüstü yazılımlarının çoğunun basit olduğu dönemleri gerçekten özlüyorum
Bu günlerde mümkün oldukça taşınabilir kurulum kullanıyorum ve keşke bu yaklaşım daha yaygın olsa. Ayarları tamamen geri getirebilecek miyim bilmemenin getirdiği zaman, zahmet ve belirsizlik yüzünden Windows’u yeniden kurmaktan özellikle kaçınır oldum
Eskiden taşınabilir yazılımları çok severdim, ama bugünlerde ikisi de sunuluyorsa daha çok kurulum aracını tercih ediyorum. Aksi halde aranabilir olmasını istiyorsam Başlat menüsüne kendim eklemem gerekiyor
Yine de kayıt defteri anahtarlarından nefret ediyorum. İşletim sistemini yeniden kurunca sık sık kayboluyorlar. Ayarların sadece %appdata% içinde saklanmasını isterdim
Alternatif olarak, NSIS ile tek bir çalıştırılabilir dosya paketleyip çalıştırmadan önce her şeyi geçici bir dizine açma yöntemini de kullanıyorum
Windows kayıt defterini tutarsız ve kötü tasarlanmış bir ıvır zıvır yığınına daha yakın görüyorum. Karşılaştırmak gerekirse Gnome’un kayıt defteri iyi tasarlanmış. Anahtar açıklamaları, sınırlı değer seçenekleri, varsayılan değerlerin gösterilmesi gibi şeyler iyi kullanıcı arayüzü tasarımıdır
Windows Grup İlkesi ile kayıt defteri eşlemesine bakmak bile aynı mantıksal yapının ne kadar dağınık olduğunu ve anahtarlara çift olumsuzlamaların bile karıştığını gösteriyor
Bugün de HKEY_CLASSES_ROOT içinde bunun izlerini görebilirsiniz
Teknik olarak kayıt defteri olmadan da nesne oluşturmak mümkün. DLL’i yükledikten sonra dışa aktarılan fonksiyonu çağırarak bir Factory nesnesi oluşturur, ardından o Factory nesnesiyle örneği yaratırsınız. COM’un kendi yaptığı iş de bu yöntemdir
Yazı da gerçekten harika bir geriye dönük değerlendirmeydi. Yalnız başlarda yazarın hafifçe ima ettiği zorlukları daha derin ele alsaydı iyi olurdu. Yine de bu küçük bir kusur arama sadece; yazı çok iyi ve yapılan iş gerçekten epey etkileyici görünüyor
Photoshop’ta gerçekten çok fazla özellik var; sadece birkaç görüntü filtresiyle buna yeniden yaratım demek zor
2006’daki GIMP’in de inanılmaz çok özelliği vardı, ama Photoshop’un arayüzüyle karşılaştırınca gerçekten berbattı
Bu harika projeye doğrudan bir bağlantı da olmalı
https://github.com/f055/fedit-image-editor
“Tanıtım yapmadım. Birkaç ay sonra C++ işi buldum. Sonuçta tüm o emekler karşılığını vermiş oldu” kısmı ilginç
İçgüdüsel olarak zor yapılan işlerin karşılığının olması gerektiğini biliriz, ama açık kaynak geliştiricilerinin özellikle prodüksiyonda yaygın kullanılan koda çok emek verip buna rağmen neredeyse hiç gerçek karşılık alamaması çok sık yaşanıyor, bu üzücü
Bu yüzden itibar kazancı arandığını ya da NPM’in “Bu kütüphanenin yazarına bağış yapmayı düşünür müsünüz?” gibi özellikler eklediğini, GitHub’ın da Patreon entegrasyonu yaptığını düşünüyorum
Saf ama çalışkan genç üreticileri sömürmeyen, bugünkünden daha iyi bir modele ihtiyacımız var
2000’lerin başında pixel32, daha sonra da Pixel Studio Pro adında bir proje vardı. Gerçekten iyi görünüyordu ve erken erişim olarak satılmıştı
Ama sonunda vaporware’e dönüştü; para ödeyenler çok öfkelendi ve yapımcısı hızla kahramandan kötü adama dönüştü
https://discuss.haiku-os.org/t/pixel-studio-pro-in-past-call...
Yazar Warsaw University of Technology mezunu olduğunu söylemiş; burası burada her zaman oldukça iyi okullardan biri sayılmıştır
Bunun yanında o dönemin bitirme tezlerinin bugünkülerden ne kadar farklı olduğu da göze çarpıyor. Yakın zamanda başka bir büyük şehirdeki teknik üniversitede tez yazdım; mühendislik lisans tezlerimizin %90’ı oldukça düşük seviyedeydi, benimki de dahil
Öne çıkan tezler de olacaktır, ama çoğu muhtemelen epey sıkıcıdır
Windows’u bu yüzden seviyorum. Belirli nişleri iyi dolduran küçük ve açık kaynaklı yazılımlardan inanılmaz fazla var
Eskiden sourceforge.net ve freshmeat — adı sanırım buydu — gibi yerlerde dolaşıp bir şeyler arardım
Phonegap’te çalışan bir arkadaşım, yaklaşık 10 yıl önce Adobe tarafından satın alındıktan sonra eğlencesine hemen Photoshop’u JavaScript’e port etmişti
Bir yazılım mühendisinin şirket içi hack projesi hikâyesinin ilginç olacağını sanmıştım, neyse artık
İnsanların yapıp da dünyaya duyurmadığı şeyler oluyor. GitHub’da duruyor olması iyi olmuş; gerçekten etkileyici