Takip et

Tek Başıma İklim Duyarlı Bir Bahçe Planlayıcı Nasıl Geliştirdim?

Küresel ısınma ve beraberindeki iklim değişiklikleri, mevsim normallerinin dışına çıkan hava olaylarını giderek daha sık karşımıza çıkarıy…

Tek Başıma İklim Duyarlı Bir Bahçe Planlayıcı Nasıl Geliştirdim?

Değişen iklim koşulları, bahçecilik ve tarım pratiklerini derinden etkiliyor. Geleneksel ekim takvimleri ve bölgesel bilgiler artık her zaman geçerli olmayabiliyor. Bu durum, kişisel bir ilgi alanımdan yola çıkarak, iklim verilerini akıllıca kullanarak bahçe sahiplerine daha doğru ve sürdürülebilir planlama imkanı sunan bir araç geliştirme fikrini doğurdu. Bu makalede, tek kişilik bir geliştirme yolculuğunda, iklim duyarlı bir bahçe planlayıcısını nasıl inşa ettiğimi, karşılaştığım zorlukları ve kullandığım teknolojileri detaylandıracağım.

Problem Tanımı ve Motivasyon

Küresel ısınma ve beraberindeki iklim değişiklikleri, mevsim normallerinin dışına çıkan hava olaylarını giderek daha sık karşımıza çıkarıyor. Bu durum, amatör bahçıvanlardan profesyonel çiftçilere kadar herkesi etkiliyor.

Değişen İklim Koşullarının Bahçeciliğe Etkisi

Son yıllarda, don olaylarının beklenmedik zamanlarda yaşanması, aşırı sıcak dalgaları veya ani kuraklıklar gibi olaylar, bitkilerin büyüme döngülerini bozmakta ve verimi düşürmektedir. Geleneksel olarak bilinen “son don tarihi” veya “ilk don tarihi” gibi referanslar, bölgesel mikro iklim farklılıkları ve genel iklim değişikliği nedeniyle güvenilirliğini yitirmiştir. Bu belirsizlik, bahçıvanların ne zaman ekim yapacakları, hangi bitkileri seçecekleri ve nasıl bakım yapacakları konusunda büyük bir kafa karışıklığına yol açmaktadır.

Geleneksel Bahçe Planlamasının Eksiklikleri

Mevcut bahçe planlama araçları veya kitapları genellikle genel bilgiler sunar ve belirli bir coğrafi konuma veya güncel iklim verilerine adapte olma yeteneğinden yoksundur. Bu durum, kullanıcıların kendi bölgeleri için en uygun kararları vermekte zorlanmasına neden olur. Örneğin, Akdeniz iklimine uygun bir bitkinin Karadeniz’de aynı başarıyla yetişmesi beklenemez, ancak daha da önemlisi, Akdeniz’in kendi içinde bile bölgesel farklılıklar ve yıllara göre değişen iklim dinamikleri göz ardı edilir.

Kişisel Bir İhtiyaçtan Doğan Fikir

Kendi bahçecilik deneyimlerimde yaşadığım bu zorluklar, beni daha kişiselleştirilmiş ve dinamik bir çözüm arayışına itti. Neden bulunduğum konumun gerçek zamanlı ve geçmiş iklim verilerini analiz ederek, bana özel ekim ve bakım önerileri sunan bir araç olmasın? Bu fikir, iklim duyarlı bahçe planlayıcısı projemin temel motivasyon kaynağı oldu. Amacım, bahçıvanların iklim belirsizliği karşısında daha bilinçli ve başarılı olmalarını sağlamaktı.

Teknolojilerin Seçimi ve Mimari

Tek kişilik bir geliştirici olarak, projenin sürdürülebilirliği ve hızlı geliştirme imkanı benim için kritikti. Bu nedenle, modern, iyi belgelenmiş ve geniş topluluk desteğine sahip teknolojileri tercih ettim.

Frontend Teknolojileri

Kullanıcı arayüzü için hızlı, etkileşimli ve modüler bir yapıya ihtiyacım vardı. Bu yüzden React çatısını seçtim. React’ın bileşen tabanlı yapısı, karmaşık UI elementlerini yönetmeyi kolaylaştırdı ve geliştirme hızımı artırdı. Durum yönetimi için Redux kullandım, bu da uygulamanın genel durumunu merkezi bir yerde tutmamı sağladı. Stillendirme için Tailwind CSS‘i tercih ettim; bu, hızlı ve özelleştirilebilir bir tasarım süreci sundu.

Backend Teknolojileri

Backend tarafında, esneklik ve JavaScript ekosistemi ile uyumluluk açısından Node.js ve Express.js kombinasyonunu kullandım. Node.js’in asenkron yapısı, API çağrıları ve veri işleme gibi I/O yoğun görevler için idealdi. Express.js ise RESTful API’ler oluşturmak için basit ve güçlü bir çerçeve sağladı. Kimlik doğrulama ve yetkilendirme için JWT (JSON Web Tokens) kullandım.

Veritabanı Seçimi

İklim verileri, bitki bilgileri ve kullanıcı tercihleri gibi ilişkisel verileri depolamak için güçlü ve güvenilir bir veritabanına ihtiyacım vardı. Bu nedenle PostgreSQL‘i seçtim. PostgreSQL, coğrafi veri (PostGIS eklentisi ile), JSONB desteği ve sağlam ACID uyumluluğu ile karmaşık veri modellerini yönetmek için mükemmel bir seçimdi. ORM (Object-Relational Mapping) olarak Sequelize‘ı kullandım, bu da veritabanı işlemlerini JavaScript kodu üzerinden daha kolay yapmamı sağladı.

Bulut Altyapısı ve Dağıtım

Uygulamayı dağıtmak ve ölçeklenebilir bir altyapı sağlamak için Amazon Web Services (AWS)‘ı tercih ettim. Frontend uygulaması için AWS S3 ve CloudFront, backend API’leri için AWS EC2 ve veritabanı için AWS RDS (PostgreSQL) kullandım. Sürekli entegrasyon ve sürekli dağıtım (CI/CD) için GitHub Actions‘ı yapılandırdım, bu da kod değişikliklerinin otomatik olarak test edilmesini ve dağıtılmasını sağladı.

İklim Verileri Entegrasyonu

Uygulamanın kalbi, doğru ve güncel iklim verilerini entegre edebilme yeteneğinde yatıyor. Bu süreç, projenin en karmaşık ama aynı zamanda en kritik aşamalarından biriydi.

Veri Kaynakları ve API’ler

Güvenilir iklim verileri elde etmek için çeşitli kaynakları araştırdım. Başlangıçta, NOAA Climate Data Online (CDO) API ve Open-Meteo gibi küresel ve bölgesel hava durumu API’lerini kullandım. Bu API’ler, belirli bir coğrafi konum için geçmiş sıcaklık, yağış, nem, rüzgar hızı gibi verileri sağlamaktadır. Ayrıca, Türkiye için Meteoroloji Genel Müdürlüğü (MGM)‘nün sunduğu verileri de değerlendirdim, ancak API erişimi konusunda bazı kısıtlamalarla karşılaştım ve genellikle küresel API’lere yöneldim.

Örnek bir API çağrısı (pseudo-kod):


async function fetchClimateData(latitude, longitude, startDate, endDate) {
  const apiKey = 'YOUR_API_KEY';
  const url = https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}&hourly=temperature_2m,precipitation&start_date=${startDate}&end_date=${endDate};
  
  try {
    const response = await fetch(url);
    const data = await response.json();
    return data;
  } catch (error) {
    console.error("İklim verileri alınırken hata oluştu:", error);
    return null;
  }
}

Veri Temizliği ve İşleme

API'lerden gelen ham veriler genellikle doğrudan kullanıma uygun değildir. Eksik veriler, hatalı ölçümler veya farklı formatlar gibi sorunlarla karşılaşmak olasıdır. Bu verileri veritabanına kaydetmeden önce kapsamlı bir temizlik ve işleme sürecinden geçirdim. Örneğin, günlük ortalama sıcaklıkları hesaplamak, toplam yağış miktarını belirlemek ve veri setindeki boşlukları doldurmak için istatistiksel yöntemler kullandım. Bu adım, algoritmaların doğru ve güvenilir çıktılar üretmesi için hayati önem taşıyordu.

Konum Bazlı İklim Analizi

Kullanıcının belirlediği konuma (enlem ve boylam) göre en yakın hava istasyonlarından veya grid verilerinden iklim bilgilerini çekmek için coğrafi sorgular kullandım. PostgreSQL'in PostGIS eklentisi, bu tür uzamsal sorguları verimli bir şekilde yapmamı sağladı. Kullanıcının seçtiği konum için geçmiş 10-20 yıllık verileri analiz ederek, o bölgeye özgü ortalama son don tarihi, ilk don tarihi, ortalama sıcaklık aralıkları ve yağış miktarları gibi kritik parametreleri belirledim. Bu analiz, bitki seçim ve takvimlendirme algoritmalarının temelini oluşturdu.

Bitki Seçimi ve Takvimlendirme Algoritmaları

Uygulamanın en karmaşık ve özgün kısmı, iklim verileriyle bitki gereksinimlerini eşleştiren akıllı algoritmalardır. Bu algoritmalar, bahçıvanlara kişiselleştirilmiş ve iklim koşullarına duyarlı öneriler sunar.

Bitki Veritabanı Oluşturma

İlk adım, geniş ve detaylı bir bitki veritabanı oluşturmaktı. Bu veritabanı, her bitki türü için aşağıdaki gibi kritik bilgileri içerir:

  • Minimum/Maksimum büyüme sıcaklığı
  • Don toleransı
  • Güneş ışığı gereksinimi
  • Toprak tipi tercihi
  • Su ihtiyacı
  • Ekim derinliği ve aralığı
  • Ortalama çimlenme süresi
  • Ortalama hasat süresi
  • Hastalık ve zararlı direnci
  • pH toleransı

Bu verileri botanik kaynaklardan, tarım üniversitelerinin yayınlarından ve güvenilir çevrimiçi veritabanlarından topladım ve düzenledim.

İklim Verisiyle Eşleştirme Mantığı

Kullanıcının konumuna özel olarak analiz edilen iklim verileri (ortalama son don tarihi, ortalama sıcaklık eğrileri, vb.) ile bitki veritabanındaki gereksinimleri eşleştiren bir algoritma geliştirdim. Bu algoritma, her bitkinin belirli bir konumda başarılı olma olasılığını hesaplar. Örneğin:

  • Bitkinin don toleransı, bölgenin ortalama son don tarihinden sonraki don riski ile karşılaştırılır.
  • Bitkinin büyüme sıcaklığı aralığı, bölgenin mevsimlik ortalama sıcaklık eğrileriyle örtüştürülür.
  • Bitkinin su ihtiyacı, bölgenin ortalama yağış miktarı ve potansiyel buharlaşma oranı ile değerlendirilir.

Bu eşleştirme sonucunda, her bitki için bir "uygunluk puanı" hesaplanır ve kullanıcıya en uygun bitkiler listelenir.

Ekim/Hasat Takvimi Algoritması

Bitki uygunluğu belirlendikten sonra, her bitki için en uygun ekim ve hasat tarihlerini öneren bir takvim algoritması devreye girer. Bu algoritma, bitkinin çimlenme ve büyüme sürelerini, bölgenin ortalama son don tarihini, beklenen ilk don tarihini ve mevsimlik sıcaklık değişimlerini dikkate alır. Örneğin, eğer bir bitki don riskinden sonra ekilmeli ve belirli bir sıcaklık aralığında büyümeli ise, algoritma bu koşulları sağlayan en erken ve en geç ekim tarihlerini belirler.

Basit bir algoritma mantığı:


function calculatePlantingWindow(plant, climateData) {
  const { minTemp, maxTemp, frostSensitive } = plant;
  const { avgLastFrostDate, avgFirstFrostDate, dailyTemps } = climateData;

  let earliestPlantDate = avgLastFrostDate; // Başlangıçta son don tarihi sonrası
  
  // Eğer bitki dona duyarlıysa, son don tarihinden sonraki güvenli bir tarihi bul
  if (frostSensitive) {
    // Güvenli bir don olmayan dönem bul
    // Bu kısım daha karmaşık bir mantık gerektirebilir (örneğin, 5 yıllık veriye bakma)
  }

  // Minimum sıcaklık gereksinimini karşılayan ilk tarihi bul
  for (let i = 0; i < dailyTemps.length; i++) {
    if (dailyTemps[i].date > earliestPlantDate && dailyTemps[i].avgTemp >= minTemp) {
      earliestPlantDate = dailyTemps[i].date;
      break;
    }
  }

  // Hasat süresini ve ilk don tarihini dikkate alarak son ekim tarihini belirle
  const latestPlantDate = new Date(avgFirstFrostDate);
  latestPlantDate.setDate(latestPlantDate.getDate() - plant.daysToHarvest); // Hasat süresini çıkar

  return { earliest: earliestPlantDate, latest: latestPlantDate };
}

Risk Analizi ve Öneriler

Algoritma sadece uygunluk ve takvim sunmakla kalmaz, aynı zamanda potansiyel riskleri de değerlendirir. Örneğin, belirli bir ekim tarihi için beklenenden daha soğuk bir hava dalgası veya aşırı sıcak riski varsa, uygulama kullanıcıyı uyarır ve alternatif ekim tarihleri veya bitki koruma önlemleri önerebilir. Bu, bahçıvanların olası felaketlere karşı daha hazırlıklı olmalarını sağlar.

Kullanıcı Deneyimi ve Arayüz Tasarımı

Teknik olarak ne kadar gelişmiş olursa olsun, bir uygulamanın başarısı büyük ölçüde kullanıcı deneyimine (UX) ve kullanıcı arayüzüne (UI) bağlıdır. Solo bir geliştirici olarak, bu alana da özel önem verdim.

Kullanıcı Odaklı Tasarım Yaklaşımı

Tasarım sürecine başlamadan önce potansiyel kullanıcılarla (amatör bahçıvanlar) görüştüm ve onların ihtiyaçlarını, beklentilerini ve mevcut zorluklarını anlamaya çalıştım. Bu geri bildirimler, uygulamanın temel özelliklerini ve akışını şekillendirmemde kilit rol oynadı. Amacım, teknik karmaşıklığı arka planda tutarak, kullanıcıya sezgisel ve keyifli bir deneyim sunmaktı.

Harita Entegrasyonu ve Konum Seçimi

Kullanıcıların bahçe konumlarını kolayca belirleyebilmeleri için Leaflet.js kütüphanesini kullanarak interaktif bir harita entegrasyonu yaptım. Kullanıcılar, harita üzerinde doğrudan konumlarını işaretleyebilir veya adreslerini girerek otomatik olarak enlem ve boylam bilgilerini alabilirler. Bu, iklim verilerinin doğru bir şekilde çekilmesi için kritik bir adımdır ve kullanıcıya kişiselleştirilmiş bir başlangıç noktası sunar.

Sezgisel Planlama Arayüzü

Bahçe planlama süreci, sürükle-bırak (drag-and-drop) arayüzü ile mümkün olduğunca basit hale getirildi. Kullanıcılar, önerilen bitkiler listesinden seçim yaparak bunları sanal bahçe alanlarına yerleştirebilirler. Her bitki için ekim derinliği, sıra aralığı gibi bilgiler otomatik olarak gösterilir ve kullanıcıya görsel bir rehberlik sağlanır. Ayrıca, farklı ekim bölgeleri veya yataklar oluşturma imkanı da sunuldu.

Görselleştirme ve Raporlama

Kullanıcılara sadece öneriler sunmakla kalmayıp, aynı zamanda planlarının görsel bir özetini ve detaylı raporlarını da sağlamak önemlidir. Uygulama, kullanıcının bahçe düzenini görsel olarak sunar ve her bitki için özel bir takvim görünümü oluşturur. Bu takvimde, ekim, sulama, gübreleme ve hasat tarihleri renk kodlarıyla belirtilir. Ayrıca, seçilen bitkilerin iklim verileriyle nasıl uyum sağladığına dair özet raporlar da sunulur, bu da kullanıcıların daha bilinçli kararlar almasına yardımcı olur.

Örnek bir takvim listesi:

Bitki Adı Ekim Tarihi Beklenen Hasat Risk Durumu
Domates (Çeri) 15 Mayıs 15 Temmuz - 15 Eylül Düşük (Geç don riski geçti)
Marul (Kıvırcık) 1 Nisan 1 Mayıs - 1 Haziran Orta (Erken sıcak dalgası riski)
Salatalık 20 Mayıs 20 Temmuz - 20 Ağustos Düşük

Geliştirme Süreci ve Karşılaşılan Zorluklar

Tek kişilik bir geliştirme projesi, esneklik ve hızlı karar alma avantajları sunsa da, beraberinde birçok zorluğu da getirir. Bu bölümde, projenin geliştirme aşamasında karşılaştığım temel zorlukları ve bunları nasıl aştığımı anlatacağım.

Zaman Yönetimi ve Tek Başına Geliştirmenin Getirdikleri

Projenin tüm aşamalarını (araştırma, tasarım, geliştirme, test, dağıtım) tek başıma yürütmek, etkili zaman yönetimi gerektirdi. Genellikle bir geliştirme ekibinin üstlendiği rolleri tek başıma üstlenmek zorunda kaldım. Bu durum, özellikle motivasyonu yüksek tutmak ve ilerlemeyi sürdürmek açısından zorlayıcı olabiliyordu. Bu zorluğun üstesinden gelmek için, görevleri küçük, yönetilebilir parçalara ayırdım ve her gün belirli bir ilerleme kaydetmeye odaklandım. Ayrıca, düzenli molalar vererek ve hobilerime zaman ayırarak tükenmişliği önlemeye çalıştım.

Veri Entegrasyonundaki Karmaşıklıklar

Farklı iklim veri API'lerinden gelen verileri tutarlı bir formatta işlemek ve veritabanına kaydetmek, beklediğimden daha karmaşık bir süreçti. API'lerin farklı veri birimleri, zaman dilimleri ve veri eksiklikleri, veri temizleme ve normalleştirme süreçlerini uzattı. Bu sorunu çözmek için, her API'den gelen veriyi tek bir standart formata dönüştüren ara katman yazılımları (middleware) geliştirdim. Ayrıca, eksik verileri doldurmak için basit interpolasyon (iç değer tahmini) teknikleri ve geçmiş ortalamaları kullandım.

Performans Optimizasyonu

Özellikle uzun yıllara ait iklim verilerini analiz ederken ve bitki algoritmalarını çalıştırırken performans sorunları yaşadım. Büyük veri setleriyle çalışmak, sorgu sürelerini ve işlem gücü ihtiyacını artırıyordu. Bu sorunu aşmak için:

  • Veritabanı indekslerini optimize ettim.
  • Sık kullanılan iklim analizi sonuçlarını önbelleğe aldım (caching).
  • Backend tarafında asenkron işlemleri ve paralel işlemeyi daha etkin kullandım.
  • Frontend'de React'ın performans optimizasyon tekniklerini (memoization, lazy loading) uyguladım.

Test ve Hata Ayıklama Süreçleri

Tek başına geliştirme yaparken, kapsamlı testler yazmak ve hataları ayıklamak için ek bir çaba sarf etmek gerekiyor. Her yeni özellik eklediğimde, mevcut işlevselliğin bozulmadığından emin olmak için hem birim testleri (unit tests) hem de entegrasyon testleri (integration tests) yazdım. Ayrıca, kullanıcı arayüzündeki hataları yakalamak için manuel testler ve tarayıcı geliştirici araçlarını yoğun bir şekilde kullandım. Hata raporlama araçları (örneğin, Sentry) entegre ederek, kullanıcıların karşılaştığı sorunları gerçek zamanlı olarak izleyebildim.

Gelecek Planları ve Sonuç

Bu proje, tek kişilik bir geliştirici olarak hem teknik becerilerimi geliştirmem hem de gerçek dünya sorunlarına çözüm üretmem açısından benim için inanılmaz bir öğrenme deneyimi oldu. Ancak geliştirme süreci hiçbir zaman bitmez; her zaman yeni fikirler ve iyileştirmeler mevcuttur.

Ek Özellikler ve Geliştirmeler

Gelecekte uygulamaya eklemeyi düşündüğüm bazı özellikler şunlardır:

  • Bitki Hastalıkları ve Zararlıları Tahmini: İklim verileriyle (nem, sıcaklık) bitki hastalıklarının yayılma riskini tahmin eden ve önleyici tedbirler öneren bir modül.
  • Toprak Analizi Entegrasyonu: Kullanıcıların toprak testi sonuçlarını girerek, toprağın pH değeri, besin içeriği gibi parametrelere göre bitki ve gübre önerileri alabilmesi.
  • Su Yönetimi Optimizasyonu: Yağış miktarı, bitki ihtiyacı ve buharlaşma oranına göre akıllı sulama takvimleri.
  • Mobil Uygulama: Daha erişilebilir bir deneyim için iOS ve Android platformlarına özel mobil uygulamalar.
  • Kullanıcı Topluluğu: Bahçıvanların birbirleriyle bilgi ve deneyimlerini paylaşabileceği bir forum veya topluluk özelliği.

Topluluk Katılımı ve Açık Kaynak Potansiyeli

Bu projenin açık kaynaklı hale getirilmesi potansiyelini de değerlendiriyorum. Böylece diğer geliştiriciler ve bahçıvanlar da projeye katkıda bulunabilir, yeni özellikler ekleyebilir ve daha geniş bir kitleye ulaşabiliriz. Açık kaynak, projenin sürdürülebilirliğini artırırken, bilgi paylaşımını ve iş birliğini de teşvik edecektir.

Elde Edilen Dersler ve Genel Değerlendirme

Bu projeden öğrendiğim en önemli derslerden biri, karmaşık bir problemi küçük, yönetilebilir parçalara ayırmanın ve adım adım ilerlemenin önemidir. Ayrıca, kullanıcı geri bildirimlerini erken aşamalarda almak ve tasarım kararlarını bu geri bildirimlere göre şekillendirmek, uygulamanın başarısı için kritik rol oynadı. Tek başına geliştirme zorlu olsa da, bir fikri baştan sona hayata geçirmenin verdiği tatmin paha biçilemez. İklim duyarlı bahçe planlayıcısı, sadece bir yazılım projesi olmanın ötesinde, değişen dünyamızda doğa ile daha uyumlu yaşama çabamızın küçük bir yansımasıdır.

SSS (Sık Sorulan Sorular)

Bu bahçe planlayıcı hangi coğrafi bölgeler için geçerlidir?

Uygulama, küresel iklim veri API'lerini kullandığı için prensipte dünya genelindeki tüm coğrafi bölgeler için geçerlidir. Ancak, veri yoğunluğu ve doğruluğu, belirli bir bölgedeki hava istasyonlarının sayısına ve veri kalitesine bağlı olarak değişebilir. Türkiye özelinde de kullanılabilir.

Uygulama hangi iklim veri kaynaklarını kullanıyor?

Başlıca NOAA Climate Data Online (CDO) API ve Open-Meteo gibi küresel hava durumu ve iklim veri API'lerini kullanmaktadır. Gelecekte bölgesel ve ulusal meteoroloji kurumlarının API'leri de entegre edilebilir.

Uygulama mobil uyumlu mu?

Mevcut web uygulaması responsive bir tasarıma sahiptir, yani mobil cihazlarda da kullanılabilir. Ancak, gelecekte daha optimize edilmiş bir kullanıcı deneyimi için iOS ve Android için özel mobil uygulamalar geliştirmeyi planlıyorum.

Bu proje açık kaynak mı?

Şu an için özel bir projedir. Ancak, topluluk katılımını teşvik etmek ve projenin gelişimini hızlandırmak amacıyla gelecekte açık kaynaklı hale getirme potansiyelini değerlendiriyorum.

Diğer bahçe planlama uygulamalarından farkı nedir?

En temel farkı, statik bilgiler yerine dinamik ve konum bazlı iklim verilerini kullanarak kişiselleştirilmiş ekim/hasat takvimleri ve bitki önerileri sunmasıdır. Bu, değişen iklim koşullarına daha iyi adapte olabilen, daha sürdürülebilir bir bahçecilik deneyimi sağlar.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.