Çevre ve Sokak Hayvanları Derneği Projesi — Askıda Kod

olcay
TalentGrid
Published in
5 min readAug 18, 2021

TalentGrid’in başlattığı sosyal sorumluluk projesi Askıda Kod kapsamında Çevre ve Sokak Hayvanları Derneği ile tanıştım. Uzun süredir web yazılımı geliştiriyorum ve hali hazırda iki kedi sahibi olarak minik yavrulara bir faydam olmasını istedim.

Beşiktaş Çevre ve Sokak Hayvanları Derneği olarak çevremizdeki tüm hayvan dostlarımıza kucak açmaya, yardımcı olmaya ve yaşam koşullarını iyileştirmeye kendini adamış bir kuruluşuz. Günümüz dünyasında gönüllü işleri yürütmek adına dijital dünyada var olmanın öneminin farkında olarak Askıda Kod projesinde yer almak kuruluşumuz için çok yararlı oldu.
TalentGrid, gönüllü yazılımcılarla bizi buluşturarak hayvan dostlarımız için daha fazla insana erişmemize, onların sahiplenebilmeleri için kullanılacak bir platform oluşturmamıza yardımcı olarak derneğimize büyük bir destek sağladı. Projede yer alan herkese çok teşekkür ederiz.

— Ege Güner
Beşiktaş Çevre ve Sokak Hayvanları Derneği Genel Sekreteri

Projeye Başlarken

Projenin ihtiyaçlarını TalentGrid sitesinde görebilirsiniz.
Henüz dernek ile görüşme yapmamıştık, o yüzden bu sayfada bahsi geçen sosyalpetlebi web sitesini incelemeye başladım. İlk bakışta mesajlaşmanın olduğu bir alışveriş sitesi izlenimi aldım. Bunu yapabilmek için backend’inde bir web API olan (hem daha sonra mobil uygulaması da yapılırsa kolaylık olur düşüncesiyle) bir mimari üzerinde çalışmaya başladım. TalentGrid tarafından düzenlenen dernek görüşmelerinden sonra ihtiyaçlar şekillendikçe bu çözümün gereğinden fazla karmaşık olduğu ortaya çıktı.

Bunları anlatmamın sebebi 3 farklı ülkede, Türkiye’nin en büyükleri dahil 7 farklı şirkette, 13 yıldır web yazılımı geliştiren yüksek lisans mezunu, Microsoft sertifikalı Azure Solutions Architect Expert olarak artık gözüm kapalı sanal POS yazabilecek seviyede hala nasıl hata yaparak geliştiğimi anlatmak ve birlikte ders çıkarmaktır.

Geliştirme Aşamaları

Site şu anda https://cevrevesokakhayvanlari.org.tr/ adresinde yayında ama bu noktaya gelene kadar geçirdiği aşamaları sizlerle paylaşmak istiyorum. Bu yazıya döküm kısmını, profesyonel hayatımda da projenin karar aşamalarında mutlaka yaparım çünkü şahane bir fikir bulduğunuzu düşündüğünüz o anı bir daha yakalamanız çok zor. Bir de dağıtık mimari kullanıyorsanız; ileride çıkan sorunlar tam dedektiflik gizemlere dönüşüyor.

En iyi yazılımcı hafızasına güvenmeyendir.

Başta bahsettiğim o karmaşık site hala https://pet.olcay.dev/ adresinde yayında. İsterseniz kaynak kodlarını da inceleyebilirsiniz.
Backoffice uygulamalarında web arayüz geliştirirken Angular tercih ederim ama bu site için doğru tercih değildi. Sitenin amaçları derneğe bir internet varlığı kazandırmak ve sahiplendirme ilanlarını güncel bir şekilde paylaşabilmek.
Paylaşım, günümüzde SEO (search engine optimization veya arama motoru optimizasyonu) uyumluluğu ile ölçülüyor ve Google tarafından geliştirilen Angular’ın SEO uyumsuz olacağı aklımdan dahi geçmedi. Yıl olmuş 2021.

https://cevrevesokakhayvanlari.org.tr/

Maliyet

Bir yandan bu karmaşık ve maliyetli yapıyı asgari tutarda nasıl çözeceğimi araştırıyordum. Çeşitli cloud platformlarının ücretsiz servislerini kullanarak en sonunda aylık €2 gibi bir maliyete kadar indirgedim.

Ücretsiz hizmetler üzerine inşaa edilmiş modern bir web mimarisi.

Başlangıçta Azure Storage’da, yüklenen resimleri boyutlandıran fonksiyonun kodları ve test amaçlı bir kaç resim olduğu için aylık fatura sadece kuruşlardan oluşuyordu. Bu maliyet Azure için bile o kadar düşüktü ki ay sonunda sistemleri bu ödemeyi alamadı ve faturayı iptal etmek zorunda kaldılar.

Microsoft Destek’den gelen, fatura iptali epostası.

Dev bütçeli sistemlerde istisnalar oluşturmak hoşuma gidiyor. Aslında her hata bir istisnadır. Bazen öngörülür bazen de görülemez veya göz ardı edilir. Çömez olarak çalıştığım ilk işlerimden birinde, istisnalar (exceptions) üzerine sunum yapmamı istemişlerdi.

İlk Toplantıyla Değişen Kararlar

TalentGrid Askıda Kod yöneticisi Özge Aydın organizasyonuyla ilk toplantımızı gerçekleştirdik ve ben biraz işgüzarlık yaparak hazırladığım siteyi sundum. Talep oluşmadan arz etmiştim. Çalıştığım yerlerde savunduğum prensiplere aykırı davranıyordum. Talepler kağıt üzerinde olgunlaşmadan üretime geçmek şirket kaynaklarını tüketmektir. En azından şirket olmayışımıza dayanarak ve herkesin müsait zamanını ayırdığını varsayarak yaptığım hatayı biraz hafifletebilirim sanırım.

İlk toplantıdan aldığım notlar ve ekran görüntüsü üzerindeki işaretlerin ifadesi;

  • Dernek sadece Beşiktaş ilçesinde olduğu için şehir bilgisi gerekmiyor.
  • Irk olarak ben 300 seçenekten (kedi ve köpek toplamı) oluşan bir liste eklemiştim. Bunu sadece 3 ırka (bozuk yazı ile belirtilen Tekir, Siyam ve Scottish) indirgeyebiliriz.
  • Genelde kedi oldukları için boyutları çeşitlilik göstermiyor.
  • Hepsi dernekten olacağı için kimden kısmındaki barınak veya sahibinden seçeneklerine de gerek kalmıyor.
  • Bir de anlık olarak en fazla 20 ilan olacağı için arama filtresi gibi bir araca da gerek duyulmuyor.
  • Üyelik ve mesajlaşma olmayacak. İlanlar sadece dernek tarafından eklenecek.
Angular ile hazırlanan form ve çizim ile toplantı notları.

Sil Baştan

Bu bilgilerin ışığında siteyi baştan tekrar oluşturdum. Önyüzde yine Bootswatch Minty temasını kullandığım için görsel olarak pek fark etmedi ama backend ortadan kalktı. İlk diyagramda gördüğünüz en sağda bulunan Github Pages servisi dışında her noktayı resimden çıkardım. Angular da SEO konusunda aciz olduğu için onu da çıkardım. Bu noktada sadece server-side rendering yapacaktın bu kadar basit diyenler olabilir ama JavaScript uygulamasını server-side render edeceksem neden JavaScript kullanayım. ASP.NET Core kullanırım ve tek projede full-stack çözüm üretmiş olurum ama amaç Microsoft’u bile şaşırtacak kadar düşük maliyetli bir proje ile, sadece bağışlarla ayakta duran bir derneğe, sürdürülebilir bir hizmet vermek.

Kendi blogumu ve daha bir çok siteyi ücretsiz olarak Github Pages ile host ettiğim için ondan daha uygun bir çözüm düşünemedim. Daha önce Github Pages kullanımındaki ısrarımdan ötürü Github Amsterdam ofisinde tebrik edilmişliğim bile var.

Sonuç olarak bir veritabanı ya da bir resim hosting’i kullanmayan, SIFIR maliyetli sitemizi yayına aldık. Alan adını bu hesaba dahil etmiyorum çünkü ondan kaçış yok. Yine de eklemek gerekirse; en uygunu METUnic (ODTÜ’nün yeni alan adı hizmeti) üzerinden 5 yıl için 120 liraya alındı.

Açık kaynak olarak bir Github repository’sinde yayınlanan kodları ve Markdown formatında dosya olarak tutulan ilanları bulabilirsiniz. Böylece sayfaların güncellenme geçmişlerini de görebiliyoruz. Bir değişiklik olduğunda Jekyll (Ruby ile yazılmış ve Liquid şablonlu bir araç) kullanılarak statik sayfalar otomatik olarak üretiliyor.

Detayları Askida-Kod/petibor’de bulabilirsiniz. Katkıda bulunmak isterseniz açık issue’lara bekleriz.

Son Kullanıcı

Peki bir kod repository’si oluşturduk ve Markdown ile yazılıyor ama son kullanıcı bunu nasıl kullanacak. Burada da başka bir ücretsiz servis devreye giriyor. Prose.io, Github üzerinde bulunan sayfalarınızı yönetmenizi sağlayan sade bir içerik yönetim sistemi. Github kullanıcınız ile giriş yaptıktan sonra repository’lerinizi görebiliyorsunuz. Basit arayüzü ile yeni blog yazıları yada bizim durumumuzda ilanlar oluşturabiliyorsunuz. Arayüzün bir kısmı da sizin tercihinize bırakılmış. Burada görüntülenecek form seçeneklerini projenizin _config.yml dosyasında belirleyebilirsiniz. Seçilen değerler sayfada YAML formatında front matter olarak tutulur. Jekyll da yazılımcının önceden oluşturduğu Liquid şablonlarına bu değerleri yerleştirerek sayfaları üretir.

Prose.io üzerinde özelleştirilmiş form.

Gelecek

Gelecekten beklentimiz, bu projelere sizlerin de katkıda bulunmasıdır. Eğer aklınızda herhangi bir soru işareti varsa ya da bunun gibi bir siteyi siz de yapmak istiyorsanız ama nereden başlayacağınızı bilmiyorsanız iletişime geçmekten çekinmeyin. Düşüncelerinizi bu yazıya yorum olarak da bırakabilirsiniz.

Lütfen, sosyal ağlarınızda bu sosyal sorumluluk projesinin adının daha fazla geçmesini sağlayın. İyilikler, zehirli konular kadar tepki çekemedikleri için daha az görünüyorlar.

Kendi bloglarıma da beklerim. Türkçe olanı başlangıç seviyesinde, İngilizce olanı ise biraz daha ileri seviye tutmaya çalışıyorum.

Hepsini https://olcaybayram.com.tr/ adresinde bulabilirsiniz.

--

--

olcay
TalentGrid

Helping robots to concur the world with serverless IoT.