{"id":32145,"date":"2025-10-18T08:01:19","date_gmt":"2025-10-18T05:01:19","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/kisumu-havalimaninda-ucak-inislerini-aninda-takip-etmek-neden-onemli\/"},"modified":"2025-10-18T08:01:19","modified_gmt":"2025-10-18T05:01:19","slug":"kisumu-havalimaninda-ucak-inislerini-aninda-takip-etmek-neden-onemli","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/kisumu-havalimaninda-ucak-inislerini-aninda-takip-etmek-neden-onemli\/","title":{"rendered":"Kisumu Havaliman\u0131&#8217;nda U\u00e7ak \u0130ni\u015flerini An\u0131nda Takip Etmek Neden \u00d6nemli?"},"content":{"rendered":"<p><body><br \/>\n    <span style=\"display: none;\">Kisumu Havaliman\u0131 \u0130\u00e7in AWS ve OpenSky API ile Ger\u00e7ek Zamanl\u0131 U\u00e7ak \u0130ni\u015f Takip Sistemi Kurulumu<\/span><\/p>\n<p>Kisumu Havaliman\u0131&#039;nda u\u00e7ak ini\u015f ve kalk\u0131\u015flar\u0131n\u0131 anl\u0131k olarak takip etmek mi istiyorsunuz? Bu makalede, AWS&#039;nin g\u00fc\u00e7l\u00fc bulut altyap\u0131s\u0131n\u0131 ve OpenSky API&#039;nin zengin havac\u0131l\u0131k verilerini kullanarak nas\u0131l ger\u00e7ek zamanl\u0131 bir takip sistemi kuraca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m ke\u015ffedeceksiniz. Operasyonel verimlili\u011fi art\u0131r\u0131rken yolcu deneyimini iyile\u015ftirmenin yollar\u0131n\u0131 \u00f6\u011frenin.<\/p>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen d\u00fcnyas\u0131nda, havac\u0131l\u0131k sekt\u00f6r\u00fc de s\u00fcrekli olarak daha \u015feffaf, daha verimli ve daha g\u00fcvenli olma aray\u0131\u015f\u0131nda. \u00d6zellikle yolcular i\u00e7in u\u00e7u\u015f gecikmeleri veya iptalleri gibi durumlar, stresli ve belirsiz anlara neden olabiliyor. Peki, Kisumu Havaliman\u0131 gibi orta \u00f6l\u00e7ekli bir havaliman\u0131nda u\u00e7aklar\u0131n ger\u00e7ek zamanl\u0131 konumlar\u0131n\u0131 ve ini\u015f saatlerini bilmek ne gibi avantajlar sunar? A\u00e7\u0131k\u00e7as\u0131, bu bilgi sadece yolcular i\u00e7in de\u011fil, ayn\u0131 zamanda havaliman\u0131 y\u00f6netimi, yer hizmetleri ve havayolu \u015firketleri i\u00e7in de kritik \u00f6neme sahiptir.<\/p>\n<p>\u00d6ncelikle, yolcu deneyimi a\u00e7\u0131s\u0131ndan bakacak olursak, bir yolcunun u\u00e7a\u011f\u0131n\u0131n ne zaman inece\u011fini veya kap\u0131s\u0131n\u0131n ne zaman a\u00e7\u0131laca\u011f\u0131n\u0131 bilmesi, bekleme s\u00fcrelerini daha iyi planlamas\u0131na olanak tan\u0131r. \u00d6rne\u011fin, Nairobi&#039;den Kisumu&#039;ya gelen bir u\u00e7a\u011f\u0131n beklenenden erken veya ge\u00e7 gelece\u011fini \u00f6nceden bilmek, kar\u015f\u0131layacak ki\u015filer i\u00e7in b\u00fcy\u00fck bir kolayl\u0131k sa\u011flar. Bu sayede, gereksiz beklemelerin \u00f6n\u00fcne ge\u00e7ilir ve genel memnuniyet art\u0131r\u0131l\u0131r. Dahas\u0131, havayolu \u015firketleri, ger\u00e7ek zamanl\u0131 veri ak\u0131\u015f\u0131yla operasyonel aksakl\u0131klar\u0131 daha h\u0131zl\u0131 tespit edebilir ve \u00e7\u00f6z\u00fcm \u00fcretebilir. Bu da, m\u00fc\u015fteri \u015fikayetlerini azalt\u0131rken marka itibar\u0131n\u0131 g\u00fc\u00e7lendirir.<\/p>\n<p>Operasyonel verimlilik a\u00e7\u0131s\u0131ndan de\u011ferlendirildi\u011finde, ger\u00e7ek zamanl\u0131 u\u00e7u\u015f takibi, havaliman\u0131 personelinin i\u015f y\u00fck\u00fcn\u00fc optimize etmelerine yard\u0131mc\u0131 olur. Bagaj ta\u015f\u0131ma ekipleri, yak\u0131t ikmal servisleri ve di\u011fer yer hizmetleri sa\u011flay\u0131c\u0131lar\u0131, bir u\u00e7a\u011f\u0131n ini\u015fini veya kalk\u0131\u015f\u0131n\u0131 milimetrik hassasiyetle takip ederek kaynaklar\u0131n\u0131 daha etkin bir \u015fekilde y\u00f6netebilirler. Bir u\u00e7a\u011f\u0131n tam ini\u015f saati bilindi\u011finde, sonraki kalk\u0131\u015f i\u00e7in haz\u0131rl\u0131klar daha koordineli bir \u015fekilde y\u00fcr\u00fct\u00fclebilir. Bu durum, zaman ve maliyet tasarrufu sa\u011flarken, operasyonel gecikmeleri minimize eder. Kisumu gibi daha az yo\u011fun havalimanlar\u0131nda bile, her dakikan\u0131n de\u011feri b\u00fcy\u00fckt\u00fcr. \u00d6zellikle uluslararas\u0131 ba\u011flant\u0131l\u0131 u\u00e7u\u015flarda, k\u0131sa s\u00fcreli gecikmeler bile zincirleme etki yaratarak di\u011fer u\u00e7u\u015flar\u0131 olumsuz etkileyebilir. Bu nedenle, proaktif bir yakla\u015f\u0131m benimsemek esast\u0131r.<\/p>\n<p>G\u00fcvenlik ve acil durum y\u00f6netimi de bu sistemin sa\u011flad\u0131\u011f\u0131 \u00f6nemli faydalardan biridir. U\u00e7aklar\u0131n anl\u0131k konumlar\u0131n\u0131 bilmek, \u00f6zellikle olas\u0131 bir acil durumda h\u0131zl\u0131 m\u00fcdahale kapasitesini art\u0131r\u0131r. Kurtarma ekipleri, u\u00e7a\u011f\u0131n son bilinen konumuna veya beklenen ini\u015f noktas\u0131na daha h\u0131zl\u0131 ula\u015fabilirler. Bu t\u00fcr bir sistem, ayn\u0131 zamanda hava sahas\u0131 y\u00f6netiminde de de\u011ferli bilgiler sunar; hava trafik kontrol\u00f6rlerinin i\u015flerini daha g\u00fcvenli ve etkin bir \u015fekilde yapmalar\u0131na olanak tan\u0131r. Dolay\u0131s\u0131yla, Kisumu Havaliman\u0131 i\u00e7in geli\u015ftirilecek ger\u00e7ek zamanl\u0131 bir u\u00e7ak ini\u015f takip sistemi, sadece teknolojik bir yenilik olman\u0131n \u00f6tesinde, t\u00fcm ekosistem i\u00e7in kritik bir iyile\u015ftirme vaat etmektedir. \u015eimdi bu sistemi nas\u0131l kuraca\u011f\u0131m\u0131z\u0131n temellerine ge\u00e7elim.<\/p>\n<h2>Ger\u00e7ek Zamanl\u0131 Takip Sistemi Kurulumu \u0130\u00e7in AWS ve OpenSky API Temelleri Nelerdir?<\/h2>\n<p>Ger\u00e7ek zamanl\u0131 bir u\u00e7ak takip sistemi in\u015fa etmek, do\u011fru ara\u00e7lar\u0131 se\u00e7mekle ba\u015flar. Bu projemizde, d\u00fcnyan\u0131n \u00f6nde gelen bulut hizmet sa\u011flay\u0131c\u0131s\u0131 Amazon Web Services (AWS) ve kapsaml\u0131 havac\u0131l\u0131k verileri sunan OpenSky API&#039;yi kullanaca\u011f\u0131z. Bu iki teknoloji, projemizin temel ta\u015flar\u0131n\u0131 olu\u015ftururken, hem g\u00fc\u00e7l\u00fc hem de esnek bir mimari kurmam\u0131za olanak tan\u0131yacak.<\/p>\n<h3>OpenSky API Nedir ve Havac\u0131l\u0131k Verilerini Nas\u0131l Sa\u011flar?<\/h3>\n<p>OpenSky Network, havac\u0131l\u0131k alan\u0131nda \u015feffafl\u0131\u011f\u0131 ve ara\u015ft\u0131rmay\u0131 desteklemek amac\u0131yla kurulmu\u015f kar amac\u0131 g\u00fctmeyen bir kurulu\u015ftur. Temel olarak, d\u00fcnya genelindeki g\u00f6n\u00fcll\u00fcler taraf\u0131ndan kurulan ve bak\u0131m\u0131 yap\u0131lan ADS-B (Automatic Dependent Surveillance-Broadcast) al\u0131c\u0131lar\u0131ndan gelen verileri toplar. ADS-B, u\u00e7aklar\u0131n konum, h\u0131z, rota gibi bilgilerini s\u00fcrekli olarak yay\u0131nlad\u0131\u011f\u0131 dijital bir yay\u0131n sistemidir. OpenSky API, bu devasa veri ak\u0131\u015f\u0131n\u0131 geli\u015ftiricilere ve ara\u015ft\u0131rmac\u0131lara sunarak, u\u00e7u\u015f takibi, hava trafik analizi ve daha bir\u00e7ok uygulama geli\u015ftirmelerine imkan tan\u0131r.<\/p>\n<p>OpenSky API \u00fczerinden alabilece\u011fimiz veriler olduk\u00e7a \u00e7e\u015fitlidir:<\/p>\n<ul>\n<li><b>U\u00e7ak Kimli\u011fi (ICAO24):<\/b> Her u\u00e7a\u011fa \u00f6zg\u00fc 24-bitlik Hexadecimal kimlik kodu.<\/li>\n<li><b>Konum Verileri:<\/b> Enlem, boylam ve irtifa bilgileri.<\/li>\n<li><b>H\u0131z ve Rota:<\/b> Yere g\u00f6re h\u0131z, dikey h\u0131z ve manyetik rota.<\/li>\n<li><b>U\u00e7u\u015f Numaras\u0131:<\/b> Havayolu ve u\u00e7u\u015f numaras\u0131 (\u00f6rn. TK1951).<\/li>\n<li><b>Durum Bilgileri:<\/b> Yerde mi havada m\u0131 oldu\u011fu, navigasyon modlar\u0131.<\/li>\n<\/ul>\n<p>    Kisumu Havaliman\u0131 \u00f6zelinde, API&#039;yi kullanarak belirli bir co\u011frafi alan i\u00e7erisindeki (Kisumu ve \u00e7evresi) u\u00e7aklar\u0131 filtreleyebiliriz. Bu, gereksiz veri \u00e7ekimini \u00f6nleyerek sistemimizin daha verimli \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar. API genellikle RESTful mimari prensiplerine uygun \u00e7al\u0131\u015f\u0131r, yani HTTP istekleri (GET, POST) ile veri al\u0131p g\u00f6nderebilirsiniz. Kimlik do\u011frulama i\u00e7in genellikle bir API anahtar\u0131 veya basit HTTP basic authentication kullan\u0131l\u0131r. A\u00e7\u0131k\u00e7a, OpenSky API, havac\u0131l\u0131k verilerine eri\u015fim i\u00e7in paha bi\u00e7ilmez bir kaynak sunar ve projemizin veri kayna\u011f\u0131n\u0131 olu\u015fturur. Ancak, bu verileri i\u015flemek ve ger\u00e7ek zamanl\u0131 olarak sunmak i\u00e7in g\u00fc\u00e7l\u00fc bir altyap\u0131ya ihtiyac\u0131m\u0131z var: AWS.<\/p>\n<h3>AWS&#039;nin G\u00fcc\u00fc: Sunucusuz Mimarinin Avantajlar\u0131 Nelerdir?<\/h3>\n<p>Amazon Web Services (AWS), bulut bili\u015fim alan\u0131nda lider konumda olup, sunucusuz (serverless) mimari ile uygulamalar geli\u015ftirmek i\u00e7in geni\u015f bir hizmet yelpazesi sunar. Sunucusuz mimari, geli\u015ftiricilerin sunucu y\u00f6netimi, \u00f6l\u00e7eklendirme veya bak\u0131m gibi operasyonel y\u00fcklerle u\u011fra\u015fmadan kodlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmas\u0131na olanak tan\u0131r. Bu model, maliyet etkinli\u011fi, otomatik \u00f6l\u00e7eklenebilirlik ve y\u00fcksek eri\u015filebilirlik gibi pek \u00e7ok avantaj sunar. Projemiz i\u00e7in \u00f6zellikle \u00f6nemli olan AWS hizmetleri \u015funlard\u0131r:<\/p>\n<ul>\n<li><b>AWS Lambda:<\/b> Sunucusuz bilgi i\u015flem hizmetidir. Kodunuzu olaylara yan\u0131t olarak \u00e7al\u0131\u015ft\u0131r\u0131r ve yaln\u0131zca kodunuz \u00e7al\u0131\u015ft\u0131\u011f\u0131 s\u00fcrece \u00fccret \u00f6dersiniz. OpenSky API&#039;dan veri \u00e7ekmek ve i\u015flemek i\u00e7in idealdir.<\/li>\n<li><b>Amazon DynamoDB:<\/b> Tamamen y\u00f6netilen, anahtar-de\u011fer ve belge veritaban\u0131d\u0131r. Milisaniyeler i\u00e7inde performans sa\u011flayan, sunucusuz uygulamalar i\u00e7in tasarlanm\u0131\u015f y\u00fcksek performansl\u0131 bir NoSQL veritaban\u0131d\u0131r. U\u00e7aklar\u0131n anl\u0131k konum verilerini depolamak i\u00e7in m\u00fckemmeldir.<\/li>\n<li><b>Amazon S3 (Simple Storage Service):<\/b> Nesne depolama hizmetidir. G\u00fcvenli, dayan\u0131kl\u0131 ve \u00f6l\u00e7eklenebilir bir \u015fekilde b\u00fcy\u00fck miktarda veri depolamak i\u00e7in kullan\u0131l\u0131r. Ham OpenSky verilerini ar\u015fivlemek veya i\u015flenmi\u015f veri \u00e7\u0131kt\u0131lar\u0131n\u0131 saklamak i\u00e7in kullanabiliriz.<\/li>\n<li><b>AWS API Gateway ve AWS AppSync:<\/b> Uygulamalara g\u00fcvenli ve \u00f6l\u00e7eklenebilir API&#039;ler olu\u015fturmak, yay\u0131nlamak, s\u00fcrd\u00fcrmek, izlemek ve g\u00fcvenli\u011fini sa\u011flamak i\u00e7in kullan\u0131l\u0131r. \u00d6zellikle ger\u00e7ek zamanl\u0131 veri ak\u0131\u015f\u0131 (WebSockets) i\u00e7in AppSync veya API Gateway&#039;in WebSocket \u00f6zelli\u011finden faydalanabiliriz.<\/li>\n<\/ul>\n<p>Sunucusuz mimarinin sundu\u011fu bu hizmetler sayesinde, Kisumu Havaliman\u0131 i\u00e7in olu\u015fturaca\u011f\u0131m\u0131z takip sistemi, ba\u015flang\u0131\u00e7ta k\u00fc\u00e7\u00fck bir kullan\u0131c\u0131 kitlesi i\u00e7in bile uygun maliyetli olacak, ancak talep artt\u0131\u011f\u0131nda otomatik olarak \u00f6l\u00e7eklenebilecek bir yap\u0131ya sahip olacakt\u0131r. Bu, geli\u015ftirme s\u00fcrecini basitle\u015ftirirken, operasyonel y\u00fck\u00fc minimuma indirir ve kaynaklar\u0131m\u0131z\u0131 sistemin \u00e7ekirdek mant\u0131\u011f\u0131na odaklamam\u0131z\u0131 sa\u011flar. Bu temel bilgilerle donand\u0131ktan sonra, art\u0131k sistemimizin mimarisini taslamaya ve veri ak\u0131\u015f\u0131n\u0131 planlamaya ge\u00e7ebiliriz.<\/p>\n<h2>Kisumu Takip Sistemimizin Beyni: AWS \u00dczerinde Nas\u0131l Bir Mimari Olu\u015fturaca\u011f\u0131z?<\/h2>\n<p>Ger\u00e7ek zamanl\u0131 u\u00e7ak takip sistemimizin kalbini, AWS&#039;nin sunucusuz hizmetleri ve OpenSky API aras\u0131ndaki entegrasyon olu\u015fturacak. Ba\u015far\u0131l\u0131 bir sistemin temeli, iyi d\u00fc\u015f\u00fcn\u00fclm\u00fc\u015f bir mimaridir. Bu b\u00f6l\u00fcmde, sistemimizin ana bile\u015fenlerini ve veri ak\u0131\u015f\u0131n\u0131 ad\u0131m ad\u0131m tasla\u011f\u0131n\u0131 \u00e7\u0131karaca\u011f\u0131z. Amac\u0131m\u0131z, hem g\u00fcvenilir hem de \u00f6l\u00e7eklenebilir bir yap\u0131 kurmakt\u0131r.<\/p>\n<p>Sistem mimarimizi, \u00fc\u00e7 ana katmana ay\u0131rabiliriz:<\/p>\n<ol>\n<li><b>Veri Toplama ve \u0130\u015fleme Katman\u0131:<\/b> OpenSky API&#039;dan ham veriyi \u00e7eker ve i\u015fler.<\/li>\n<li><b>Veri Depolama Katman\u0131:<\/b> \u0130\u015flenmi\u015f verileri kal\u0131c\u0131 olarak depolar ve h\u0131zl\u0131 eri\u015fim sa\u011flar.<\/li>\n<li><b>Ger\u00e7ek Zamanl\u0131 Sunum Katman\u0131:<\/b> Depolanan verileri frontend uygulamas\u0131na ger\u00e7ek zamanl\u0131 olarak iletir.<\/li>\n<\/ol>\n<p>    Bu katmanlar, AWS Lambda, DynamoDB, S3, API Gateway\/AppSync gibi hizmetler arac\u0131l\u0131\u011f\u0131yla birbirine ba\u011flanacakt\u0131r. Sistemin genel i\u015fleyi\u015fi \u015fu \u015fekilde \u00f6zetlenebilir: Belirli aral\u0131klarla tetiklenen bir Lambda fonksiyonu, OpenSky API&#039;dan Kisumu ve \u00e7evresindeki u\u00e7aklar\u0131n anl\u0131k verilerini \u00e7eker. Bu veriler i\u015flenir ve k\u0131smen anl\u0131k durum i\u00e7in DynamoDB&#039;ye, k\u0131smen de ar\u015fivleme ve analiz i\u00e7in S3&#039;e kaydedilir. Ard\u0131ndan, bir WebSocket API (API Gateway veya AppSync \u00fczerinden), bu g\u00fcncellenmi\u015f verileri ger\u00e7ek zamanl\u0131 olarak web aray\u00fcz\u00fcne g\u00f6nderir. Kullan\u0131c\u0131lar, bu web aray\u00fcz\u00fc \u00fczerinden u\u00e7aklar\u0131n harita \u00fczerindeki hareketlerini anl\u0131k olarak izleyebilirler.<\/p>\n<h3>Veri Ak\u0131\u015f\u0131 Diyagram\u0131 (S\u00f6zl\u00fc Anlat\u0131m)<\/h3>\n<p>Bu sistemin veri ak\u0131\u015f\u0131n\u0131 g\u00f6rselle\u015ftirmek i\u00e7in \u015f\u00f6yle bir senaryo hayal edebiliriz:<\/p>\n<ul>\n<li><b>Ad\u0131m 1: Zamanlanm\u0131\u015f Tetikleyici (EventBridge\/CloudWatch Events):<\/b> Her 5-10 saniyede bir, bir AWS EventBridge (eski ad\u0131yla CloudWatch Events) kural\u0131, bir AWS Lambda fonksiyonunu tetikler.<\/li>\n<li><b>Ad\u0131m 2: Veri Al\u0131m\u0131 (AWS Lambda &#038; OpenSky API):<\/b> Tetiklenen Lambda fonksiyonu (\u00f6rne\u011fin Python ile yaz\u0131lm\u0131\u015f), OpenSky API&#039;ye HTTP GET iste\u011fi g\u00f6ndererek Kisumu Havaliman\u0131&#039;n\u0131n co\u011frafi koordinatlar\u0131n\u0131 i\u00e7eren bir s\u0131n\u0131rlay\u0131c\u0131 kutu i\u00e7indeki t\u00fcm u\u00e7aklar\u0131n anl\u0131k konum verilerini ister. Yan\u0131t olarak JSON format\u0131nda veri al\u0131r.<\/li>\n<li><b>Ad\u0131m 3: Veri \u0130\u015fleme ve D\u00f6n\u00fc\u015f\u00fcm (AWS Lambda):<\/b> Lambda fonksiyonu, OpenSky API&#039;dan gelen ham JSON verisini ayr\u0131\u015ft\u0131r\u0131r. Sadece gerekli alanlar\u0131 (u\u00e7u\u015f numaras\u0131, ICAO24, enlem, boylam, irtifa, h\u0131z, ini\u015f durumu gibi) se\u00e7er ve uygulaman\u0131n depolama format\u0131na uygun hale getirir. Bu ad\u0131mda, Kisumu&#039;ya yak\u0131nl\u0131\u011f\u0131 veya ini\u015f modunda olup olmad\u0131\u011f\u0131 gibi ek mant\u0131klar da eklenebilir.<\/li>\n<li><b>Ad\u0131m 4: Anl\u0131k Veri Depolama (Amazon DynamoDB):<\/b> \u0130\u015flenmi\u015f anl\u0131k u\u00e7ak verileri, h\u0131zl\u0131 eri\u015fim ve g\u00fcncelleme i\u00e7in Amazon DynamoDB&#039;ye yaz\u0131l\u0131r. Her u\u00e7ak i\u00e7in ICAO24 kodu birincil anahtar olarak kullan\u0131larak, mevcut kay\u0131tlar g\u00fcncellenir veya yeni u\u00e7aklar i\u00e7in yeni kay\u0131tlar olu\u015fturulur.<\/li>\n<li><b>Ad\u0131m 5: Ar\u015fivleme ve Analitik (Amazon S3):<\/b> Ham OpenSky verileri veya i\u015flenmi\u015f, zaman damgal\u0131 verilerin bir kopyas\u0131, uzun vadeli depolama, ge\u00e7mi\u015f analizleri veya makine \u00f6\u011frenimi modelleri i\u00e7in Amazon S3&#039;e kaydedilir. Bu, ileride detayl\u0131 u\u00e7u\u015f trendlerini analiz etmek i\u00e7in de\u011ferli bir veri kayna\u011f\u0131 olu\u015fturur.<\/li>\n<li><b>Ad\u0131m 6: Ger\u00e7ek Zamanl\u0131 Veri Ak\u0131\u015f\u0131 (AWS AppSync\/API Gateway &#038; WebSockets):<\/b> DynamoDB&#039;deki veriler her g\u00fcncellendi\u011finde (DynamoDB Streams kullan\u0131larak), ba\u015fka bir Lambda fonksiyonu tetiklenebilir veya AppSync\/API Gateway do\u011frudan DynamoDB ile entegre olabilir. Bu g\u00fcncel veriler, WebSocket ba\u011flant\u0131lar\u0131 \u00fczerinden ba\u011fl\u0131 olan t\u00fcm istemcilere (web taray\u0131c\u0131lar\u0131) anl\u0131k olarak g\u00f6nderilir.<\/li>\n<li><b>Ad\u0131m 7: Veri G\u00f6rselle\u015ftirme (Frontend Uygulamas\u0131):<\/b> Bir web taray\u0131c\u0131s\u0131nda \u00e7al\u0131\u015fan frontend uygulamas\u0131 (HTML, CSS, JavaScript), WebSocket \u00fczerinden gelen g\u00fcncel u\u00e7ak verilerini al\u0131r. Bu verileri kullanarak u\u00e7aklar\u0131 bir harita \u00fczerinde (\u00f6rne\u011fin Leaflet veya Mapbox GL JS ile) ger\u00e7ek zamanl\u0131 olarak konumland\u0131r\u0131r ve hareketlerini g\u00f6sterir.<\/li>\n<\/ul>\n<p>Bu mimari, tamamen sunucusuz oldu\u011fu i\u00e7in, ba\u015flang\u0131\u00e7ta \u00e7ok d\u00fc\u015f\u00fck maliyetlerle \u00e7al\u0131\u015f\u0131r ve Kisumu Havaliman\u0131&#039;ndaki trafi\u011fe ba\u011fl\u0131 olarak otomatik olarak \u00f6l\u00e7eklenir. \u00d6rne\u011fin, yo\u011fun saatlerde daha fazla u\u00e7ak verisi geldi\u011finde Lambda daha fazla \u00f6rnek \u00e7al\u0131\u015ft\u0131r\u0131r ve DynamoDB otomatik olarak daha fazla okuma\/yazma kapasitesi sa\u011flar. Bu sayede, herhangi bir manuel m\u00fcdahaleye gerek kalmadan sistem s\u00fcrekli performans\u0131n\u0131 korur. \u0130\u015fte bu sa\u011flam temel \u00fczerine, \u015fimdi veri toplama ve i\u015fleme ad\u0131mlar\u0131na daha yak\u0131ndan bakal\u0131m.<\/p>\n<h2>OpenSky API&#039;dan Kisumu Verilerini AWS&#039;ye Nas\u0131l Ak\u0131taca\u011f\u0131z?<\/h2>\n<p>Sistem mimarimizi belirledikten sonra, projemizin en kritik ad\u0131mlar\u0131ndan birine geliyoruz: OpenSky API&#039;dan ger\u00e7ek zamanl\u0131 u\u00e7u\u015f verilerini \u00e7ekmek ve bunlar\u0131 AWS ortam\u0131m\u0131za aktarmak. Bu s\u00fcre\u00e7, temelde bir AWS Lambda fonksiyonu arac\u0131l\u0131\u011f\u0131yla ger\u00e7ekle\u015ftirilecek ve verilerin veritaban\u0131m\u0131za sorunsuz bir \u015fekilde ula\u015fmas\u0131n\u0131 sa\u011flayaca\u011f\u0131z. Bu b\u00f6l\u00fcmde, Python kullanarak nas\u0131l bir Lambda fonksiyonu yazaca\u011f\u0131m\u0131z\u0131 ve bu verileri DynamoDB&#039;ye nas\u0131l depolayaca\u011f\u0131m\u0131z\u0131 ele alaca\u011f\u0131z.<\/p>\n<h3>OpenSky API&#039;dan U\u00e7u\u015f Verilerini \u00c7ekme (Python &#038; Lambda)<\/h3>\n<p>\u0130lk ad\u0131m, belirli bir co\u011frafi b\u00f6lge (Kisumu Havaliman\u0131 \u00e7evresi) i\u00e7indeki u\u00e7ak verilerini OpenSky API&#039;dan almak. Bunun i\u00e7in bir Python Lambda fonksiyonu kullanaca\u011f\u0131z. Lambda, olay bazl\u0131 \u00e7al\u0131\u015ft\u0131\u011f\u0131 i\u00e7in, d\u00fczenli aral\u0131klarla tetiklenerek API&#039;den yeni verileri \u00e7ekebilir. AWS EventBridge (eski ad\u0131yla CloudWatch Events), bu fonksiyonu belirli aral\u0131klarla (\u00f6rne\u011fin her 10 saniyede bir) otomatik olarak tetiklememize olanak tan\u0131r.<\/p>\n<p>OpenSky API&#039;ye istek g\u00f6nderirken, Kisumu Havaliman\u0131&#039;n\u0131n co\u011frafi koordinatlar\u0131n\u0131 (enlem ve boylam) i\u00e7eren bir s\u0131n\u0131rlay\u0131c\u0131 kutu (bounding box) kullanmak \u00f6nemlidir. Kisumu Havaliman\u0131&#039;n\u0131n yakla\u015f\u0131k koordinatlar\u0131 0.0886\u00b0 S, 34.7297\u00b0 E&#039;dir. Bu koordinatlara dayanarak, \u00e7evresini kapsayan bir bbox tan\u0131mlayabiliriz. \u00d6rne\u011fin, min_latitude, max_latitude, min_longitude, max_longitude de\u011ferlerini OpenSky API endpoint&#039;ine parametre olarak g\u00f6nderece\u011fiz.<\/p>\n<p>\u0130\u015fte bu i\u015flemi ger\u00e7ekle\u015ftiren basit bir Python Lambda fonksiyonu \u00f6rne\u011fi:<\/p>\n<pre><code>\nimport requests\nimport os\nimport boto3\nimport json\n\ndef lambda_handler(event, context):\n    # Kisumu Havaliman\u0131 \u00e7evresini kapsayan yakla\u015f\u0131k s\u0131n\u0131rlay\u0131c\u0131 kutu\n    # [min_latitude, max_latitude, min_longitude, max_longitude]\n    # \u00d6nemli: Bu de\u011ferleri ger\u00e7ek harita \u00fczerinden daha hassas ayarlayabilirsiniz.\n    bbox_kisumu = \"min_lat=-0.2,max_lat=0.0,min_lon=34.6,max_lon=34.8\" \n    \n    # OpenSky API endpoint&#039;i\n    opensky_url = f\"https:\/\/opensky-network.org\/api\/states\/all?{bbox_kisumu}\"\n    \n    # API kimlik bilgileri (iste\u011fe ba\u011fl\u0131, daha fazla istek i\u00e7in gereklidir)\n    # opensky_username = os.environ.get(\"OPENSKY_USERNAME\")\n    # opensky_password = os.environ.get(\"OPENSKY_PASSWORD\")\n\n    try:\n        # API&#039;ye istek g\u00f6nderme\n        response = requests.get(opensky_url) # auth=(opensky_username, opensky_password)\n        response.raise_for_status() # HTTP hatalar\u0131n\u0131 kontrol et\n        \n        data = response.json()\n        \n        # Verileri DynamoDB&#039;ye g\u00f6nderecek fonksiyonu \u00e7a\u011f\u0131r\n        process_and_store_data(data)\n        \n        return {\n            &#039;statusCode&#039;: 200,\n            &#039;body&#039;: json.dumps(&#039;U\u00e7u\u015f verileri ba\u015far\u0131yla \u00e7ekildi ve i\u015flendi.&#039;)\n        }\n    except requests.exceptions.RequestException as e:\n        print(f\"OpenSky API iste\u011fi ba\u015far\u0131s\u0131z oldu: {e}\")\n        return {\n            &#039;statusCode&#039;: 500,\n            &#039;body&#039;: json.dumps(f&#039;API hatas\u0131: {e}&#039;)\n        }\n    except Exception as e:\n        print(f\"Genel hata: {e}\")\n        return {\n            &#039;statusCode&#039;: 500,\n            &#039;body&#039;: json.dumps(f&#039;\u0130\u015fleme hatas\u0131: {e}&#039;)\n        }\n\ndef process_and_store_data(data):\n    dynamodb = boto3.resource(&#039;dynamodb&#039;)\n    table = dynamodb.Table(os.environ.get(\"DYNAMODB_TABLE_NAME\", \"KisumuFlightTracker\")) # Tablo ad\u0131n\u0131 ENV de\u011fi\u015fkeninden al\n    \n    if data and &#039;states&#039; in data and data[&#039;states&#039;]:\n        for state in data[&#039;states&#039;]:\n            # OpenSky API&#039;den gelen verilerin yap\u0131s\u0131\n            # [icao24, callsign, origin_country, time_position, last_contact, longitude, latitude, baro_altitude, \n            # on_ground, velocity, true_track, vertical_rate, sensors, geo_altitude, squawk, spi, position_source]\n            \n            # Gerekli verileri ay\u0131kla\n            flight_data = {\n                &#039;icao24&#039;: state[0],\n                &#039;callsign&#039;: state[1].strip() if state[1] else &#039;N\/A&#039;,\n                &#039;origin_country&#039;: state[2],\n                &#039;time_position&#039;: state[3],\n                &#039;last_contact&#039;: state[4],\n                &#039;longitude&#039;: state[5],\n                &#039;latitude&#039;: state[6],\n                &#039;baro_altitude&#039;: state[7], # Barometrik irtifa\n                &#039;on_ground&#039;: state[8],\n                &#039;velocity&#039;: state[9], # Yere g\u00f6re h\u0131z\n                &#039;&#039;true_track&#039;: state[10], # U\u00e7a\u011f\u0131n y\u00f6n\u00fc\n                &#039;vertical_rate&#039;: state[11], # Dikey h\u0131z\n                &#039;geo_altitude&#039;: state[13], # GPS irtifa\n                &#039;squawk&#039;: state[14],\n                &#039;timestamp&#039;: int(time.time()) # Anl\u0131k zaman damgas\u0131\n            }\n\n            # Sadece ge\u00e7erli konum verisi olan u\u00e7aklar\u0131 kaydet\n            if flight_data[&#039;longitude&#039;] is not None and flight_data[&#039;latitude&#039;] is not None:\n                try:\n                    table.put_item(\n                        Item=flight_data\n                    )\n                    # print(f\"U\u00e7u\u015f {flight_data[&#039;callsign&#039;]} g\u00fcncellendi\/eklendi.\")\n                except Exception as e:\n                    print(f\"DynamoDB&#039;ye yazarken hata olu\u015ftu ({flight_data.get(&#039;callsign&#039;, &#039;Bilinmeyen u\u00e7ak&#039;)}): {e}\")\n            else:\n                print(f\"U\u00e7u\u015f {flight_data[&#039;callsign&#039;]} i\u00e7in ge\u00e7ersiz konum verisi, atlan\u0131yor.\")\n    else:\n        print(\"OpenSky API&#039;dan Kisumu i\u00e7in veri al\u0131namad\u0131 veya bo\u015f geldi.\")\n    <\/code><\/pre>\n<div class=\"expert-tip\">Uzman \u0130pucu: OpenSky API&#039;den daha fazla istek almak i\u00e7in \u00fccretsiz bir hesap olu\u015fturabilir ve kimlik bilgilerinizi Lambda fonksiyonunuzda ortam de\u011fi\u015fkenleri (Environment Variables) olarak saklayabilirsiniz. Bu, hassas bilgilerin kodunuz i\u00e7inde g\u00f6r\u00fcnmesini engeller. Ayr\u0131ca, <code class=\"language-plaintext\">requests<\/code> k\u00fct\u00fcphanesini Lambda katman\u0131 (Layer) olarak ekleyerek paket boyutunu optimize edebilirsiniz.<\/div>\n<h3>Verileri AWS DynamoDB ve S3&#039;e Depolama Stratejileri Nelerdir?<\/h3>\n<p>\u00c7ekti\u011fimiz ve i\u015fledi\u011fimiz u\u00e7u\u015f verilerini depolamak i\u00e7in iki ana AWS hizmetini kullanaca\u011f\u0131z: Amazon DynamoDB ve Amazon S3. Her birinin farkl\u0131 bir amac\u0131 vard\u0131r ve birlikte g\u00fc\u00e7l\u00fc bir depolama \u00e7\u00f6z\u00fcm\u00fc sunarlar.<\/p>\n<h4>Amazon DynamoDB ile Anl\u0131k Veri Depolama<\/h4>\n<p>DynamoDB, ger\u00e7ek zamanl\u0131 uygulama gereksinimlerimiz i\u00e7in ideal bir NoSQL veritaban\u0131d\u0131r. D\u00fc\u015f\u00fck gecikme s\u00fcresi, y\u00fcksek performans ve otomatik \u00f6l\u00e7eklenebilirlik sunar. U\u00e7aklar\u0131n anl\u0131k konumlar\u0131n\u0131, h\u0131zlar\u0131n\u0131 ve durumlar\u0131n\u0131 depolamak i\u00e7in kullanaca\u011f\u0131z. DynamoDB tablomuzun temel yap\u0131s\u0131 \u015f\u00f6yle olabilir:<\/p>\n<table class=\"table-striped\">\n<thead>\n<tr>\n<th>\u00d6zellik Ad\u0131<\/th>\n<th>Veri Tipi<\/th>\n<th>A\u00e7\u0131klama<\/th>\n<th>Not<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>icao24<\/code><\/td>\n<td>String<\/td>\n<td>U\u00e7a\u011f\u0131n benzersiz ICAO 24-bit Hex kodu.<\/td>\n<td>Partition Key<\/td>\n<\/tr>\n<tr>\n<td><code>timestamp<\/code><\/td>\n<td>Number<\/td>\n<td>Verinin kaydedildi\u011fi Unix zaman damgas\u0131.<\/td>\n<td>Sort Key (iste\u011fe ba\u011fl\u0131, GSI ile)<\/td>\n<\/tr>\n<tr>\n<td><code>callsign<\/code><\/td>\n<td>String<\/td>\n<td>U\u00e7u\u015f kodu (\u00f6rn. KQ600).<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><code>longitude<\/code><\/td>\n<td>Number<\/td>\n<td>U\u00e7a\u011f\u0131n mevcut boylam\u0131.<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><code>latitude<\/code><\/td>\n<td>Number<\/td>\n<td>U\u00e7a\u011f\u0131n mevcut enlemi.<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><code>altitude<\/code><\/td>\n<td>Number<\/td>\n<td>U\u00e7a\u011f\u0131n irtifas\u0131 (barometrik veya GPS).<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><code>velocity<\/code><\/td>\n<td>Number<\/td>\n<td>Yere g\u00f6re h\u0131z\u0131 (m\/s).<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><code>on_ground<\/code><\/td>\n<td>Boolean<\/td>\n<td>U\u00e7a\u011f\u0131n yerde olup olmad\u0131\u011f\u0131.<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><code>origin_country<\/code><\/td>\n<td>String<\/td>\n<td>U\u00e7a\u011f\u0131n kay\u0131tl\u0131 oldu\u011fu \u00fclke.<\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Yukar\u0131daki <code class=\"language-plaintext\">process_and_store_data<\/code> fonksiyonu, bu tablo yap\u0131s\u0131na uygun olarak verileri DynamoDB&#039;ye <code class=\"language-plaintext\">put_item<\/code> i\u015flemiyle yazar. Bir <code class=\"language-plaintext\">icao24<\/code> de\u011feriyle gelen her yeni veri, mevcut kayd\u0131 g\u00fcncelleyecektir, bu da her u\u00e7a\u011f\u0131n en son konum bilgisinin her zaman veritaban\u0131nda olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h4>Amazon S3 ile Uzun Vadeli Ar\u015fivleme ve Analiz<\/h4>\n<p>OpenSky API&#039;dan gelen ham verileri veya i\u015flenmi\u015f zaman damgal\u0131 verileri uzun vadeli depolamak i\u00e7in Amazon S3&#039;\u00fc kullanmak ak\u0131ll\u0131ca bir yakla\u015f\u0131md\u0131r. S3, y\u00fcksek dayan\u0131kl\u0131l\u0131k, eri\u015filebilirlik ve maliyet etkinli\u011fi sunar. Her Lambda \u00e7a\u011fr\u0131s\u0131nda, \u00e7ekilen t\u00fcm ham veriyi bir JSON dosyas\u0131 olarak S3&#039;e kaydetmeyi d\u00fc\u015f\u00fcnebiliriz. Bu, veri kayb\u0131n\u0131 \u00f6nler ve gelecekteki analizler, makine \u00f6\u011frenimi modelleri veya uyumluluk gereksinimleri i\u00e7in zengin bir veri g\u00f6l\u00fc olu\u015fturur.<\/p>\n<p>S3&#039;e veri kaydetme i\u015flemi, Lambda fonksiyonumuza basit\u00e7e ekleyebilece\u011fimiz bir kod par\u00e7as\u0131yla yap\u0131labilir:<\/p>\n<pre><code>\nimport boto3\nimport json\nimport time\nimport os\n\ndef save_to_s3(data, bucket_name, prefix=\"raw_opensky_data\"):\n    s3 = boto3.client(&#039;s3&#039;)\n    timestamp = int(time.time())\n    # Dosya ad\u0131n\u0131 benzersiz hale getir\n    file_name = f\"{prefix}\/{timestamp}_opensky_data.json\"\n    \n    try:\n        s3.put_object(\n            Bucket=bucket_name,\n            Key=file_name,\n            Body=json.dumps(data)\n        )\n        print(f\"Veriler S3&#039;e kaydedildi: s3:\/\/{bucket_name}\/{file_name}\")\n    except Exception as e:\n        print(f\"S3&#039;e yazarken hata olu\u015ftu: {e}\")\n\n# Lambda&#039;dan \u00e7a\u011fr\u0131:\n# save_to_s3(data, os.environ.get(\"S3_BUCKET_NAME\", \"your-kisumu-flight-tracker-s3-bucket\"))\n    <\/code><\/pre>\n<div class=\"expert-tip\">Uzman \u0130pucu: S3&#039;e kaydetti\u011finiz verileri daha sonra Amazon Athena ile SQL sorgular\u0131 kullanarak analiz edebilir, Amazon Kinesis Firehose ile ba\u015fka bir veri ak\u0131\u015f\u0131na y\u00f6nlendirebilir veya veri ya\u015fam d\u00f6ng\u00fcs\u00fc kurallar\u0131 (Lifecycle Rules) ile belirli bir s\u00fcre sonra daha uygun maliyetli depolama s\u0131n\u0131flar\u0131na (\u00f6rne\u011fin S3 Glacier) ta\u015f\u0131yabilirsiniz.<\/div>\n<p>Bu entegre depolama stratejisiyle, hem anl\u0131k, h\u0131zl\u0131 eri\u015fim gerektiren verilere sahip olacak hem de uzun vadeli analizler ve ar\u015fivleme i\u00e7in sa\u011flam bir temel olu\u015fturmu\u015f olaca\u011f\u0131z. Art\u0131k verilerimizi g\u00fcvenle \u00e7ekip depolayabildi\u011fimize g\u00f6re, s\u0131rada bu verileri kullan\u0131c\u0131lar\u0131m\u0131za ger\u00e7ek zamanl\u0131 olarak g\u00f6rselle\u015ftirmek var.<\/p>\n<h2>Toplad\u0131\u011f\u0131m\u0131z Verileri Kullan\u0131c\u0131 Dostu Bir Aray\u00fcze Nas\u0131l D\u00f6n\u00fc\u015ft\u00fcrece\u011fiz?<\/h2>\n<p>Verilerimizi OpenSky API&#039;dan \u00e7ekip AWS DynamoDB&#039;de depolad\u0131k. \u015eimdi s\u0131ra geldi bu verileri son kullan\u0131c\u0131ya, yani Kisumu Havaliman\u0131 yolcular\u0131na, \u00e7al\u0131\u015fanlar\u0131na veya merakl\u0131lar\u0131na sunmaya. Ger\u00e7ek zamanl\u0131 bir takip sistemi i\u00e7in bu, verilerin harita \u00fczerinde anl\u0131k olarak g\u00f6rselle\u015ftirilmesi anlam\u0131na geliyor. Bu b\u00f6l\u00fcm, AWS AppSync veya API Gateway ile ger\u00e7ek zamanl\u0131 veri ak\u0131\u015f\u0131n\u0131 nas\u0131l kuraca\u011f\u0131m\u0131z\u0131 ve basit bir web aray\u00fcz\u00fc ile u\u00e7aklar\u0131 haritada nas\u0131l g\u00f6sterece\u011fimizi anlatacak.<\/p>\n<h3>AWS AppSync veya API Gateway ile Ger\u00e7ek Zamanl\u0131 Veri Ak\u0131\u015f\u0131 Kurulumu<\/h3>\n<p>Web uygulamam\u0131z\u0131n verileri anl\u0131k olarak alabilmesi i\u00e7in, sunucudan istemciye s\u00fcrekli bir ileti\u015fim kanal\u0131 kurmam\u0131z gerekiyor. Geleneksel HTTP istekleri bu t\u00fcr ger\u00e7ek zamanl\u0131 senaryolar i\u00e7in yeterli de\u011fildir, \u00e7\u00fcnk\u00fc istemcinin s\u00fcrekli sunucuyu sorgulamas\u0131 (polling) hem gereksiz trafik yarat\u0131r hem de gecikmelere neden olur. \u0130\u015fte bu noktada WebSockets devreye girer. WebSockets, istemci ve sunucu aras\u0131nda \u00e7ift y\u00f6nl\u00fc, kal\u0131c\u0131 bir ba\u011flant\u0131 kurarak anl\u0131k veri al\u0131\u015fveri\u015fini m\u00fcmk\u00fcn k\u0131lar.<\/p>\n<p>AWS \u00fczerinde WebSockets destekli bir API kurmak i\u00e7in iki ana se\u00e7ene\u011fimiz var:<\/p>\n<ol>\n<li><b>AWS API Gateway (WebSocket API):<\/b> Do\u011frudan WebSocket API&#039;leri olu\u015fturman\u0131za ve y\u00f6netmenize olanak tan\u0131r. Mesajlar\u0131 Lambda fonksiyonlar\u0131na y\u00f6nlendirebilir ve ba\u011flant\u0131 y\u00f6netimini \u00fcstlenebilirsiniz. Bu, daha d\u00fc\u015f\u00fck seviyeli kontrol isteyenler i\u00e7in uygundur.<\/li>\n<li><b>AWS AppSync (GraphQL &#038; Real-time Subscriptions):<\/b> GraphQL API&#039;leri olu\u015fturmak i\u00e7in y\u00f6netilen bir hizmettir. Dahili olarak WebSockets kullan\u0131r ve abonelikler (subscriptions) arac\u0131l\u0131\u011f\u0131yla ger\u00e7ek zamanl\u0131 veri g\u00fcncelle\u015ftirmeleri sunar. \u00d6zellikle karma\u015f\u0131k veri modelleri ve client-side frameworklerle (React, Vue) \u00e7al\u0131\u015f\u0131rken geli\u015ftirici deneyimini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde basitle\u015ftirir. DynamoDB ile do\u011frudan entegrasyonu sayesinde, DynamoDB&#039;deki de\u011fi\u015fiklikleri otomatik olarak abonelere iletebilir.<\/li>\n<\/ol>\n<p>Projemiz i\u00e7in AppSync, \u00f6zellikle DynamoDB ile olan entegrasyonu ve GraphQL&#039;in esnekli\u011fi nedeniyle daha ideal bir se\u00e7im olabilir. DynamoDB tablomuzda bir de\u011fi\u015fiklik oldu\u011funda (yani bir u\u00e7a\u011f\u0131n konumu g\u00fcncellendi\u011finde), AppSync bunu alg\u0131layarak ba\u011fl\u0131 olan t\u00fcm istemcilere yeni veriyi g\u00f6nderecek \u015fekilde yap\u0131land\u0131r\u0131labilir. Bu, genellikle DynamoDB Streams ve bir AppSync Resolver ile sa\u011flan\u0131r.<\/p>\n<p>AppSync ile basit bir GraphQL aboneli\u011fi kurmak i\u00e7in:<\/p>\n<ol>\n<li>Bir AppSync API olu\u015fturun.<\/li>\n<li>DynamoDB tablonuzu veri kayna\u011f\u0131 olarak ekleyin.<\/li>\n<li>Bir GraphQL \u015femas\u0131 tan\u0131mlay\u0131n. \u00d6rne\u011fin:\n<pre><code>\ntype Aircraft {\n    icao24: String!\n    callsign: String\n    longitude: Float\n    latitude: Float\n    altitude: Float\n    velocity: Float\n    on_ground: Boolean\n    timestamp: Int\n}\n\ntype Query {\n    getAircraft(icao24: String!): Aircraft\n    listAircrafts: [Aircraft]\n}\n\ntype Mutation {\n    updateAircraft(icao24: String!, input: AircraftInput): Aircraft\n}\n\ntype Subscription {\n    onAircraftUpdate: Aircraft\n        @aws_subscribe(mutations: [\"updateAircraft\"])\n}\n            <\/code><\/pre>\n<p>            Bu \u015femada <code class=\"language-plaintext\">onAircraftUpdate<\/code> aboneli\u011fi, <code class=\"language-plaintext\">updateAircraft<\/code> mutasyonu \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda tetiklenecektir. Verilerimizi DynamoDB&#039;ye yazan Lambda fonksiyonumuz, bu mutasyonu \u00e7a\u011f\u0131racak \u015fekilde g\u00fcncellenerek AppSync \u00fczerinden ger\u00e7ek zamanl\u0131 ak\u0131\u015f\u0131 tetikleyebilir.\n        <\/li>\n<li>DynamoDB&#039;den veri \u00e7eken ve abonelikleri i\u015fleyen resolver&#039;lar\u0131 yap\u0131land\u0131r\u0131n.<\/li>\n<\/ol>\n<p>    Bu sayede, frontend uygulamam\u0131z, AppSync API&#039;mize ba\u011flanarak <code class=\"language-plaintext\">onAircraftUpdate<\/code> aboneli\u011fine abone olacak ve u\u00e7ak verileri g\u00fcncellendi\u011finde an\u0131nda bildirim alabilecektir.<\/p>\n<h3>Basit Bir Web Aray\u00fcz\u00fc ile U\u00e7aklar\u0131 Haritada G\u00f6sterme (HTML\/JS)<\/h3>\n<p>Kullan\u0131c\u0131 aray\u00fcz\u00fc (UI), taray\u0131c\u0131 tabanl\u0131 basit bir web uygulamas\u0131 olacak. HTML, CSS ve JavaScript kullanarak olu\u015fturaca\u011f\u0131z. Harita g\u00f6sterimi i\u00e7in Leaflet.js gibi a\u00e7\u0131k kaynakl\u0131 bir harita k\u00fct\u00fcphanesini kullanabiliriz. Leaflet, hafif, kullan\u0131m\u0131 kolay ve mobil uyumlu haritalar olu\u015fturmak i\u00e7in pop\u00fcler bir se\u00e7imdir.<\/p>\n<p>\u0130\u015fte basit bir HTML yap\u0131s\u0131 ve JavaScript ile AppSync aboneli\u011fine nas\u0131l ba\u011flan\u0131laca\u011f\u0131n\u0131 g\u00f6steren bir \u00f6rnek:<\/p>\n<pre><code>\n<!DOCTYPE html>\n<html lang=\"tr\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Kisumu U\u00e7ak Takip<\/title>\n    <link rel=\"stylesheet\" href=\"https:\/\/unpkg.com\/leaflet@1.7.1\/dist\/leaflet.css\" \/>\n    <style>\n        #map { height: 100vh; width: 100%; }\n        \/* Mobil uyumluluk i\u00e7in medya sorgular\u0131 *\/\n        @media (max-width: 768px) {\n            #map { height: 80vh; }\n            h1 { font-size: 1.5em; }\n        }\n    <\/style>\n<\/head>\n<body>\n    <div id=\"map\"><\/div>\n\n    <script src=\"https:\/\/unpkg.com\/leaflet@1.7.1\/dist\/leaflet.js\"><\/script>\n    <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/aws-amplify@4.x\/dist\/aws-amplify.min.js\"><\/script>\n    <script>\n        \/\/ AWS Amplify konfig\u00fcrasyonu (AppSync API bilgilerinizle doldurun)\n        Amplify.configure({\n            API: {\n                aws_appsync_graphqlEndpoint: &apos;YOUR_APPSYNC_GRAPHQL_ENDPOINT&apos;,\n                aws_appsync_region: &apos;YOUR_AWS_REGION&apos;,\n                aws_appsync_authenticationType: &apos;API_KEY&apos;, \/\/ veya AWS_IAM, AMAZON_COGNITO_USER_POOLS\n                aws_appsync_apiKey: &apos;YOUR_APPSYNC_API_KEY&apos;, \/\/ API_KEY kullan\u0131yorsan\u0131z\n            }\n        });\n\n        const API = Amplify.API;\n        const appSyncQuery = <code>subscription OnAircraftUpdate {\n                onAircraftUpdate {\n                    icao24\n                    callsign\n                    longitude\n                    latitude\n                    altitude\n                    velocity\n                    on_ground\n                }\n            }<\/code>;\n\n        \/\/ Harita ba\u015flatma\n        const map = L.map(&apos;map&apos;).setView([-0.0886, 34.7297], 12); \/\/ Kisumu koordinatlar\u0131\n        L.tileLayer(&apos;https:\/\/{s}.tile.openstreetmap.org\/{z}\/{x}\/{y}.png&apos;, {\n            attribution: &apos;&copy; <a href=\"https:\/\/www.openstreetmap.org\/copyright\">OpenStreetMap<\/a> contributors&apos;\n        }).addTo(map);\n\n        const aircraftMarkers = {}; \/\/ U\u00e7ak i\u015faret\u00e7ilerini tutmak i\u00e7in nesne\n\n        \/\/ AppSync aboneli\u011fine ba\u011flanma\n        API.graphql({\n            query: appSyncQuery,\n            variables: {}\n        }).subscribe({\n            next: ({ provider, value }) => {\n                const aircraft = value.data.onAircraftUpdate;\n                if (!aircraft || !aircraft.latitude || !aircraft.longitude) return;\n\n                const lat = aircraft.latitude;\n                const lon = aircraft.longitude;\n                const icao24 = aircraft.icao24;\n                const callsign = aircraft.callsign || &apos;Bilinmeyen&apos;;\n\n                if (aircraftMarkers[icao24]) {\n                    \/\/ Mevcutsa i\u015faret\u00e7iyi g\u00fcncelle\n                    aircraftMarkers[icao24].setLatLng([lat, lon]);\n                    aircraftMarkers[icao24].setPopupContent(<code><b>U\u00e7u\u015f: ${callsign}<\/b><br>\n                        ICAO24: ${icao24}<br>\n                        \u0130rtifa: ${aircraft.altitude ? aircraft.altitude.toFixed(0) + &apos;m&apos; : &apos;N\/A&apos;}<br>\n                        H\u0131z: ${aircraft.velocity ? (aircraft.velocity * 3.6).toFixed(0) + &apos; km\/s&apos; : &apos;N\/A&apos;}<br>\n                        Yerde: ${aircraft.on_ground ? &apos;Evet&apos; : &apos;Hay\u0131r&apos;}<\/code>);\n                } else {\n                    \/\/ Yeni u\u00e7aksa i\u015faret\u00e7i ekle\n                    const marker = L.marker([lat, lon]).addTo(map)\n                        .bindPopup(<code><b>U\u00e7u\u015f: ${callsign}<\/b><br>\n                            ICAO24: ${icao24}<br>\n                            \u0130rtifa: ${aircraft.altitude ? aircraft.altitude.toFixed(0) + &apos;m&apos; : &apos;N\/A&apos;}<br>\n                            H\u0131z: ${aircraft.velocity ? (aircraft.velocity * 3.6).toFixed(0) + &apos; km\/s&apos; : &apos;N\/A&apos;}<br>\n                            Yerde: ${aircraft.on_ground ? &apos;Evet&apos; : &apos;Hay\u0131r&apos;}<\/code>);\n                    aircraftMarkers[icao24] = marker;\n                }\n            },\n            error: (error) => console.warn(error)\n        });\n    <\/script>\n<\/body>\n<\/html>\n    <\/code><\/pre>\n<p>Bu JavaScript kodu, AWS Amplify k\u00fct\u00fcphanesini kullanarak AppSync API&#039;mize ba\u011flan\u0131r ve <code class=\"language-plaintext\">onAircraftUpdate<\/code> aboneli\u011fine abone olur. Her yeni veri geldi\u011finde, kod haritadaki ilgili u\u00e7a\u011f\u0131n i\u015faret\u00e7isini g\u00fcnceller veya yeni bir u\u00e7aksa yeni bir i\u015faret\u00e7i ekler. Bu sayede, Kisumu Havaliman\u0131 \u00e7evresindeki u\u00e7u\u015f trafi\u011fi anl\u0131k olarak g\u00f6zlemlenebilir hale gelir.<\/p>\n<div class=\"expert-tip\">Uzman \u0130pucu: U\u00e7ak ikonlar\u0131n\u0131 daha g\u00f6rsel hale getirmek i\u00e7in \u00f6zel Marker ikonlar\u0131 kullanabilir, u\u00e7a\u011f\u0131n y\u00f6n\u00fcn\u00fc (<code class=\"language-plaintext\">true_track<\/code>) kullanarak ikonlar\u0131 d\u00f6nd\u00fcrebilirsiniz. Ayr\u0131ca, performans optimizasyonu i\u00e7in ekranda olmayan i\u015faret\u00e7ileri gizleyebilir veya daha karma\u015f\u0131k harita g\u00f6rselle\u015ftirme k\u00fct\u00fcphaneleri (\u00f6rn. Mapbox GL JS) ile daha ak\u0131c\u0131 animasyonlar sa\u011flayabilirsiniz.<\/div>\n<p>B\u00f6ylece, sistemimizin t\u00fcm ana katmanlar\u0131n\u0131 tamamlam\u0131\u015f oluyoruz. Veri toplama, depolama ve ger\u00e7ek zamanl\u0131 g\u00f6rselle\u015ftirme ad\u0131mlar\u0131n\u0131 att\u0131k. Ancak, her sistemde oldu\u011fu gibi, uzun vadeli ba\u015far\u0131 i\u00e7in ileri d\u00fczey optimizasyon ve y\u00f6netim stratejilerini de g\u00f6z \u00f6n\u00fcnde bulundurmam\u0131z gerekiyor.<\/p>\n<h2>Sisteminizi Daha G\u00fc\u00e7l\u00fc ve Verimli Hale Getirmek \u0130\u00e7in Ne Yapabilirsiniz?<\/h2>\n<p>Kisumu Havaliman\u0131 i\u00e7in ger\u00e7ek zamanl\u0131 u\u00e7ak takip sistemimizin temelini att\u0131k. Ancak, herhangi bir ger\u00e7ek d\u00fcnya uygulamas\u0131nda oldu\u011fu gibi, bu sistemin de zamanla geli\u015fmesi, optimize edilmesi ve olas\u0131 sorunlara kar\u015f\u0131 diren\u00e7li olmas\u0131 gerekir. Bu b\u00f6l\u00fcmde, sisteminizi daha g\u00fc\u00e7l\u00fc, daha verimli ve daha g\u00fcvenli hale getirecek baz\u0131 ileri d\u00fczey ipu\u00e7lar\u0131 ve p\u00fcf noktalar\u0131na de\u011finece\u011fiz.<\/p>\n<h3>Performans ve Maliyet Optimizasyonu Stratejileri<\/h3>\n<p>Sunucusuz mimarinin en b\u00fcy\u00fck avantajlar\u0131ndan biri, kulland\u0131\u011f\u0131n\u0131z kadar \u00f6deme yapman\u0131zd\u0131r. Ancak bu, optimizasyon yapmaya gerek olmad\u0131\u011f\u0131 anlam\u0131na gelmez. Tersine, sunucusuz kaynaklar\u0131n\u0131z\u0131 ak\u0131ll\u0131ca y\u00f6netmek, maliyetleri \u00f6nemli \u00f6l\u00e7\u00fcde d\u00fc\u015f\u00fcr\u00fcrken performans\u0131 art\u0131rabilir:<\/p>\n<ul>\n<li><b>Lambda Bellek ve S\u00fcre Optimizasyonu:<\/b> Lambda fonksiyonlar\u0131n\u0131z\u0131n bellek (memory) ayar\u0131n\u0131 ve \u00e7al\u0131\u015fma s\u00fcresini dikkatlice izleyin. Genellikle, daha fazla bellek, daha h\u0131zl\u0131 CPU d\u00f6ng\u00fcs\u00fc anlam\u0131na gelir. Fonksiyonlar\u0131n\u0131z\u0131n ideal bellek ve \u00e7al\u0131\u015fma s\u00fcresi ayar\u0131n\u0131 bulmak i\u00e7in testler yap\u0131n. Gereksiz uzun s\u00fcren veya \u00e7ok fazla bellek t\u00fcketen fonksiyonlar maliyeti art\u0131r\u0131r.<\/li>\n<li><b>DynamoDB Okuma\/Yazma Kapasitesi:<\/b> DynamoDB&#039;nin sa\u011flad\u0131\u011f\u0131 okuma ve yazma kapasite modlar\u0131n\u0131 (sa\u011flanan veya iste\u011fe ba\u011fl\u0131) anlay\u0131n. Anl\u0131k trafi\u011finiz tahmin edilebilirse &#8220;sa\u011flanan&#8221; kapasite daha uygun maliyetli olabilir. Ancak, de\u011fi\u015fken trafik i\u00e7in &#8220;iste\u011fe ba\u011fl\u0131&#8221; mod daha esnektir. <code class=\"language-plaintext\">on_demand<\/code> modunda iken gereksiz yazma\/okuma i\u015flemlerinden ka\u00e7\u0131n\u0131n.<\/li>\n<li><b>S3 Ya\u015fam D\u00f6ng\u00fcs\u00fc Kurallar\u0131:<\/b> S3&#039;e kaydetti\u011finiz eski veriler i\u00e7in ya\u015fam d\u00f6ng\u00fcs\u00fc kurallar\u0131 (Lifecycle Rules) tan\u0131mlay\u0131n. \u00d6rne\u011fin, 30 g\u00fcn sonra standart depolamadan daha uygun maliyetli S3 Infrequent Access&#039;e veya 90 g\u00fcn sonra S3 Glacier&#039;a ta\u015f\u0131nmas\u0131n\u0131 sa\u011flayabilirsiniz.<\/li>\n<li><b>API \u0130stek Limiti Y\u00f6netimi:<\/b> OpenSky API&#039;nin \u00fccretsiz katman\u0131nda belirli bir istek limiti bulunur. Lambda fonksiyonunuzu bu limitleri a\u015fmayacak \u015fekilde tasarlay\u0131n (\u00f6rn. her 10 saniyede bir yerine 15-20 saniyede bir istek g\u00f6ndermek). Daha y\u00fcksek limitler i\u00e7in OpenSky&#039;\u0131n \u00fccretli planlar\u0131n\u0131 d\u00fc\u015f\u00fcnebilirsiniz.<\/li>\n<li><b>Veri Filtrelemesi:<\/b> OpenSky API&#039;den sadece Kisumu \u00e7evresi i\u00e7in veri \u00e7ekti\u011finizden emin olun. Lambda fonksiyonunuzda, gereksiz verileri DynamoDB&#039;ye veya S3&#039;e kaydetmeden \u00f6nce filtreleme yaparak depolama ve i\u015flem maliyetlerini azalt\u0131n.<\/li>\n<\/ul>\n<h3>G\u00fcvenlik ve \u0130zleme (Monitoring)<\/h3>\n<p>Her bulut tabanl\u0131 uygulama i\u00e7in g\u00fcvenlik ve izleme kritik \u00f6neme sahiptir.<\/p>\n<ul>\n<li><b>IAM Rolleri ve Politikalar\u0131:<\/b> Lambda fonksiyonlar\u0131n\u0131za ve di\u011fer AWS kaynaklar\u0131n\u0131za en az ayr\u0131cal\u0131k ilkesiyle (Least Privilege Principle) IAM (Identity and Access Management) rolleri atay\u0131n. Yani, bir kaynak sadece i\u015fini yapmak i\u00e7in ihtiya\u00e7 duydu\u011fu izinlere sahip olmal\u0131d\u0131r. \u00d6rne\u011fin, Lambda fonksiyonunuzun sadece belirli DynamoDB tablosuna yazma izni olmal\u0131, t\u00fcm tablolara de\u011fil.<\/li>\n<li><b>Ortam De\u011fi\u015fkenleri:<\/b> API anahtarlar\u0131, veritaban\u0131 ba\u011flant\u0131 dizeleri gibi hassas bilgileri kod i\u00e7inde do\u011frudan tutmak yerine AWS Secrets Manager veya Lambda ortam de\u011fi\u015fkenleri arac\u0131l\u0131\u011f\u0131yla g\u00fcvenli bir \u015fekilde y\u00f6netin.<\/li>\n<li><b>AWS CloudWatch:<\/b> T\u00fcm AWS hizmetleriniz i\u00e7in merkezi bir izleme ve g\u00fcnl\u00fckleme hizmetidir. Lambda \u00e7a\u011fr\u0131lar\u0131n\u0131, DynamoDB performans\u0131n\u0131, API Gateway isteklerini ve S3 aktivitesini CloudWatch metrikleri ve loglar\u0131 arac\u0131l\u0131\u011f\u0131yla izleyin. Anormal durumlar i\u00e7in alarmlar kurarak potansiyel sorunlardan an\u0131nda haberdar olun.<\/li>\n<li><b>AWS WAF (Web Application Firewall):<\/b> E\u011fer frontend uygulaman\u0131z veya API Gateway&#039;iniz do\u011frudan internete a\u00e7\u0131ksa, k\u00f6t\u00fc niyetli sald\u0131r\u0131lara kar\u015f\u0131 korunmak i\u00e7in AWS WAF&#039;\u0131 kullanmay\u0131 d\u00fc\u015f\u00fcn\u00fcn.<\/li>\n<\/ul>\n<h3>\u00d6l\u00e7eklenebilirlik ve Esneklik<\/h3>\n<p>Kurdu\u011fumuz sunucusuz mimari zaten do\u011fas\u0131 gere\u011fi olduk\u00e7a \u00f6l\u00e7eklenebilirdir. Ancak baz\u0131 noktalar\u0131 daha da peki\u015ftirebiliriz:<\/p>\n<ul>\n<li><b>Lambda E\u015fzamanl\u0131l\u0131k (Concurrency):<\/b> Lambda fonksiyonlar\u0131n\u0131z\u0131n e\u015fzamanl\u0131l\u0131k limitlerini ihtiya\u00e7lar\u0131n\u0131za g\u00f6re ayarlay\u0131n. A\u015f\u0131r\u0131 y\u00fcksek limitler beklenmedik maliyetlere veya di\u011fer hizmet limitlerinin a\u015f\u0131lmas\u0131na neden olabilir.<\/li>\n<li><b>DynamoDB Streams:<\/b> Ger\u00e7ek zamanl\u0131 ak\u0131\u015f\u0131 daha da optimize etmek i\u00e7in DynamoDB Streams kullanabilirsiniz. Bir DynamoDB kayd\u0131nda herhangi bir de\u011fi\u015fiklik oldu\u011funda, bu ak\u0131\u015flar otomatik olarak tetiklenerek ba\u015fka bir Lambda fonksiyonunu (\u00f6rne\u011fin AppSync&#039;e veri g\u00f6nderen) tetikleyebilir. Bu, polling ihtiyac\u0131n\u0131 ortadan kald\u0131r\u0131r ve ger\u00e7ek &#8220;ger\u00e7ek zamanl\u0131&#8221;l\u0131\u011f\u0131 sa\u011flar.<\/li>\n<li><b>Hata \u0130\u015fleme ve Yeniden Denemeler:<\/b> Lambda fonksiyonlar\u0131n\u0131zda ve di\u011fer bile\u015fenlerde sa\u011flam hata i\u015fleme mekanizmalar\u0131 uygulay\u0131n. Ge\u00e7ici hatalar i\u00e7in otomatik yeniden deneme mant\u0131\u011f\u0131 ekleyin. AWS Step Functions, daha karma\u015f\u0131k i\u015f ak\u0131\u015flar\u0131 ve hata i\u015fleme senaryolar\u0131 i\u00e7in de de\u011ferlendirilebilir.<\/li>\n<li><b>B\u00f6lgesel Yedeklilik:<\/b> Kisumu Havaliman\u0131 takip sistemimiz tek bir AWS b\u00f6lgesinde \u00e7al\u0131\u015f\u0131yor olsa da, daha kritik uygulamalar i\u00e7in birden fazla b\u00f6lgeye da\u011f\u0131t\u0131m (multi-region deployment) d\u00fc\u015f\u00fcn\u00fclerek y\u00fcksek eri\u015filebilirlik art\u0131r\u0131labilir.<\/li>\n<\/ul>\n<p>Bu ileri d\u00fczey ipu\u00e7lar\u0131 ve teknikleri uygulayarak, Kisumu Havaliman\u0131&#039;n\u0131n ger\u00e7ek zamanl\u0131 u\u00e7ak takip sistemini sadece \u00e7al\u0131\u015f\u0131r durumda tutmakla kalmayacak, ayn\u0131 zamanda uzun vadede s\u00fcrd\u00fcr\u00fclebilir, g\u00fcvenli ve maliyet etkin bir \u00e7\u00f6z\u00fcme d\u00f6n\u00fc\u015ft\u00fcreceksiniz. Bu, projenizin sadece teknik bir ba\u015far\u0131 de\u011fil, ayn\u0131 zamanda operasyonel bir ba\u015far\u0131 olmas\u0131n\u0131 sa\u011flayacakt\u0131r.<\/p>\n<h2>Kisumu U\u00e7ak \u0130ni\u015f Takip Sistemi ile Gelece\u011fe Y\u00f6nelik Ad\u0131mlar<\/h2>\n<p>Bu makale boyunca, Kisumu Havaliman\u0131 i\u00e7in AWS&#039;nin g\u00fc\u00e7l\u00fc sunucusuz hizmetleri ve OpenSky API&#039;nin zengin havac\u0131l\u0131k verilerini kullanarak nas\u0131l ger\u00e7ek zamanl\u0131 bir u\u00e7ak ini\u015f takip sistemi in\u015fa edece\u011fimizi ad\u0131m ad\u0131m ele ald\u0131k. Giri\u015ften ba\u015flayarak sistem mimarisine, veri toplamadan depolamaya ve son olarak kullan\u0131c\u0131 dostu bir aray\u00fczde ger\u00e7ek zamanl\u0131 g\u00f6rselle\u015ftirmeye kadar her a\u015famay\u0131 detayland\u0131rd\u0131k. Bu sistem, havaliman\u0131 operasyonlar\u0131n\u0131n verimlili\u011fini art\u0131rman\u0131n yan\u0131 s\u0131ra, yolcu deneyimini de \u00f6nemli \u00f6l\u00e7\u00fcde iyile\u015ftirme potansiyeli ta\u015f\u0131maktad\u0131r.<\/p>\n<p>Ger\u00e7ek zamanl\u0131 u\u00e7u\u015f verilerine eri\u015fim, gecikmeleri ve aksakl\u0131klar\u0131 daha etkin bir \u015fekilde y\u00f6netmek i\u00e7in kritik bir ara\u00e7t\u0131r. Havayolu \u015firketleri, yer hizmetleri ve hava trafik kontrol\u00f6rleri i\u00e7in bu t\u00fcr bir sistem, daha bilin\u00e7li kararlar almalar\u0131na olanak tan\u0131r. Yolcular ise, u\u00e7u\u015flar\u0131n\u0131n durumu hakk\u0131nda \u015feffaf ve anl\u0131k bilgiye sahip olarak seyahatlerini daha az stresle planlayabilirler. Ayr\u0131ca, toplanan zengin veri seti, gelecekteki operasyonel analizler, tahmin modelleri ve hatta makine \u00f6\u011frenimi uygulamalar\u0131 i\u00e7in de\u011ferli bir temel olu\u015fturur. \u00d6rne\u011fin, tarihsel ini\u015f verilerini analiz ederek hava ko\u015fullar\u0131, g\u00fcn\u00fcn saati veya havayolu \u015firketlerine g\u00f6re gecikme e\u011filimleri gibi i\u00e7g\u00f6r\u00fcler elde edilebilir.<\/p>\n<p>Elbette, bu sistemin \u00fczerine eklenebilecek pek \u00e7ok \u00f6zellik bulunmaktad\u0131r. U\u00e7u\u015f gecikmeleri i\u00e7in otomatik bildirimler, tahmini ini\u015f s\u00fcrelerinin (ETA) g\u00f6sterimi, u\u00e7aklar\u0131n rotalar\u0131n\u0131 g\u00f6steren interaktif harita \u00e7izgileri, farkl\u0131 havalimanlar\u0131 i\u00e7in takip se\u00e7enekleri veya mobil uygulama entegrasyonu gibi geli\u015ftirmeler, sistemin de\u011ferini daha da art\u0131racakt\u0131r. Bu projenin sadece teknik bir ba\u015flang\u0131\u00e7 noktas\u0131 oldu\u011funu ve havac\u0131l\u0131k sekt\u00f6r\u00fcnde dijital d\u00f6n\u00fc\u015f\u00fcm\u00fcn ve inovasyonun ne kadar b\u00fcy\u00fck bir potansiyel ta\u015f\u0131d\u0131\u011f\u0131n\u0131 g\u00f6stermektedir. Umar\u0131z bu rehber, kendi ger\u00e7ek zamanl\u0131 takip sistemlerinizi olu\u015fturman\u0131z i\u00e7in size ilham vermi\u015ftir.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<ul>\n<li>\n<h4>Bu sistemin kurulum maliyeti ne kadard\u0131r?<\/h4>\n<p>Maliyet, kullan\u0131lan AWS hizmetlerinin miktar\u0131na ve OpenSky API kullan\u0131m\u0131na g\u00f6re de\u011fi\u015fiklik g\u00f6sterir. Sunucusuz mimari sayesinde, k\u00fc\u00e7\u00fck \u00f6l\u00e7ekli kullan\u0131mda (az say\u0131da u\u00e7ak takibi, d\u00fc\u015f\u00fck trafikli aray\u00fcz) AWS&#039;nin &#8220;Free Tier&#8221; limitleri dahilinde \u00e7ok d\u00fc\u015f\u00fck veya neredeyse hi\u00e7 maliyetiniz olmayabilir. Trafik artt\u0131k\u00e7a ve AWS hizmetleri daha yo\u011fun kullan\u0131ld\u0131k\u00e7a maliyetler artar, ancak kulland\u0131\u011f\u0131n\u0131z kadar \u00f6deme yapars\u0131n\u0131z. OpenSky API&#039;nin \u00fccretsiz s\u00fcr\u00fcm\u00fc belirli limitlere sahiptir, daha fazla veri i\u00e7in \u00fccretli plana ge\u00e7meniz gerekebilir.<\/p>\n<\/li>\n<li>\n<h4>OpenSky API&#039;dan ald\u0131\u011f\u0131m veriler ne kadar do\u011frudur?<\/h4>\n<p>OpenSky API, b\u00fcy\u00fck \u00f6l\u00e7\u00fcde ADS-B verilerine dayan\u0131r. ADS-B verileri genellikle olduk\u00e7a do\u011frudur (konum, h\u0131z, irtifa gibi). Ancak, veri al\u0131m\u0131n\u0131n kalitesi, OpenSky a\u011f\u0131na ba\u011fl\u0131 g\u00f6n\u00fcll\u00fc istasyonlar\u0131n kapsam\u0131na, hava ko\u015fullar\u0131na ve u\u00e7a\u011f\u0131n ADS-B transponder&#039;\u0131n\u0131n \u00e7al\u0131\u015f\u0131r durumda olmas\u0131na ba\u011fl\u0131d\u0131r. Kisumu gibi belirli bir b\u00f6lgede, veri kapsam\u0131 zaman zaman de\u011fi\u015fkenlik g\u00f6sterebilir.<\/p>\n<\/li>\n<li>\n<h4>Bu sistemi ba\u015fka havalimanlar\u0131 i\u00e7in de uyarlayabilir miyim?<\/h4>\n<p>Kesinlikle! Bu makalede anlat\u0131lan mimari ve kullan\u0131lan teknolojiler, herhangi bir havaliman\u0131 i\u00e7in uyarlanabilir. Yapman\u0131z gereken tek \u015fey, OpenSky API iste\u011finde Kisumu Havaliman\u0131 yerine hedefledi\u011finiz havaliman\u0131n\u0131n co\u011frafi koordinatlar\u0131n\u0131 i\u00e7eren s\u0131n\u0131rlay\u0131c\u0131 kutuyu (bounding box) de\u011fi\u015ftirmektir. AWS taraf\u0131ndaki kurulum ayn\u0131 kalacakt\u0131r.<\/p>\n<\/li>\n<li>\n<h4>Sistemdeki verileri ne kadar s\u00fcreyle saklamal\u0131y\u0131m?<\/h4>\n<p>Bu, projenizin gereksinimlerine ba\u011fl\u0131d\u0131r. Anl\u0131k g\u00f6sterim i\u00e7in DynamoDB&#039;deki verileri birka\u00e7 dakikal\u0131k veya saatlik bir s\u00fcreyle saklay\u0131p daha sonra TTL (Time-To-Live) ile otomatik silebilirsiniz. Ancak, ge\u00e7mi\u015f analizleri veya yasal uyumluluk i\u00e7in, S3&#039;e kaydedilen verileri aylarca veya y\u0131llarca saklayabilirsiniz. S3&#039;\u00fcn ya\u015fam d\u00f6ng\u00fcs\u00fc kurallar\u0131 (Lifecycle Rules) ile eski verileri daha uygun maliyetli depolama katmanlar\u0131na otomatik olarak ta\u015f\u0131yarak maliyetleri optimize edebilirsiniz.<\/p>\n<\/li>\n<li>\n<h4>Mobil cihazlarda performans nas\u0131l olur?<\/h4>\n<p>Web tabanl\u0131 frontend uygulamam\u0131z, modern taray\u0131c\u0131larda ve mobil cihazlarda sorunsuz \u00e7al\u0131\u015facak \u015fekilde tasarlanabilir. CSS medya sorgular\u0131 kullanarak duyarl\u0131 (responsive) bir tasar\u0131m uygulad\u0131k. AWS Lambda ve DynamoDB gibi sunucusuz hizmetler, arka u\u00e7ta otomatik olarak \u00f6l\u00e7eklendi\u011fi i\u00e7in yo\u011funluk artt\u0131\u011f\u0131nda bile mobil kullan\u0131c\u0131lar i\u00e7in iyi bir performans sunar. Ancak, \u00e7ok yo\u011fun harita animasyonlar\u0131 veya karma\u015f\u0131k g\u00f6rselle\u015ftirmeler, eski veya daha az g\u00fc\u00e7l\u00fc mobil cihazlarda performans\u0131 etkileyebilir.<\/p>\n<\/li>\n<\/ul>\n<p><\/body><\/code><\/p>\n","protected":false},"excerpt":{"rendered":"Kisumu Havaliman\u0131 \u0130\u00e7in AWS ve OpenSky API ile Ger\u00e7ek Zamanl\u0131 U\u00e7ak \u0130ni\u015f Takip Sistemi Kurulumu Kisumu Havaliman\u0131&#039;nda u\u00e7ak&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-32145","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Kisumu Havaliman\u0131&#039;nda U\u00e7ak \u0130ni\u015flerini An\u0131nda Takip Etmek Neden \u00d6nemli?<\/title>\n<meta name=\"description\" content=\"Kisumu Havaliman\u0131&#039;nda u\u00e7ak ini\u015f ve kalk\u0131\u015flar\u0131n\u0131 anl\u0131k olarak takip etmek mi istiyorsunuz? Bu makalede, AWS&#039;nin g\u00fc\u00e7l\u00fc bulut altyap\u0131s\u0131n\u0131 ve OpenSky API&#039;nin zengin havac\u0131l\u0131k verilerini kullanarak nas\u0131l ger\u00e7ek zamanl\u0131 bir takip sistemi kuraca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m ke\u015ffedeceksiniz. Operasyonel verimlili\u011fi art\u0131r\u0131rken yolcu deneyimini iyile\u015ftirmenin yollar\u0131n\u0131 \u00f6\u011frenin.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/kisumu-havalimaninda-ucak-inislerini-aninda-takip-etmek-neden-onemli\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kisumu Havaliman\u0131&#039;nda U\u00e7ak \u0130ni\u015flerini An\u0131nda Takip Etmek Neden \u00d6nemli?\" \/>\n<meta property=\"og:description\" content=\"Kisumu Havaliman\u0131&#039;nda u\u00e7ak ini\u015f ve kalk\u0131\u015flar\u0131n\u0131 anl\u0131k olarak takip etmek mi istiyorsunuz? Bu makalede, AWS&#039;nin g\u00fc\u00e7l\u00fc bulut altyap\u0131s\u0131n\u0131 ve OpenSky API&#039;nin zengin havac\u0131l\u0131k verilerini kullanarak nas\u0131l ger\u00e7ek zamanl\u0131 bir takip sistemi kuraca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m ke\u015ffedeceksiniz. Operasyonel verimlili\u011fi art\u0131r\u0131rken yolcu deneyimini iyile\u015ftirmenin yollar\u0131n\u0131 \u00f6\u011frenin.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/kisumu-havalimaninda-ucak-inislerini-aninda-takip-etmek-neden-onemli\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-18T05:01:19+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"30 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kisumu-havalimaninda-ucak-inislerini-aninda-takip-etmek-neden-onemli\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kisumu-havalimaninda-ucak-inislerini-aninda-takip-etmek-neden-onemli\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Kisumu Havaliman\u0131&#8217;nda U\u00e7ak \u0130ni\u015flerini An\u0131nda Takip Etmek Neden \u00d6nemli?\",\"datePublished\":\"2025-10-18T05:01:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kisumu-havalimaninda-ucak-inislerini-aninda-takip-etmek-neden-onemli\/\"},\"wordCount\":5315,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kisumu-havalimaninda-ucak-inislerini-aninda-takip-etmek-neden-onemli\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kisumu-havalimaninda-ucak-inislerini-aninda-takip-etmek-neden-onemli\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/kisumu-havalimaninda-ucak-inislerini-aninda-takip-etmek-neden-onemli\/\",\"name\":\"Kisumu Havaliman\u0131'nda U\u00e7ak \u0130ni\u015flerini An\u0131nda Takip Etmek Neden \u00d6nemli?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-18T05:01:19+00:00\",\"description\":\"Kisumu Havaliman\u0131'nda u\u00e7ak ini\u015f ve kalk\u0131\u015flar\u0131n\u0131 anl\u0131k olarak takip etmek mi istiyorsunuz? Bu makalede, AWS'nin g\u00fc\u00e7l\u00fc bulut altyap\u0131s\u0131n\u0131 ve OpenSky API'nin zengin havac\u0131l\u0131k verilerini kullanarak nas\u0131l ger\u00e7ek zamanl\u0131 bir takip sistemi kuraca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m ke\u015ffedeceksiniz. Operasyonel verimlili\u011fi art\u0131r\u0131rken yolcu deneyimini iyile\u015ftirmenin yollar\u0131n\u0131 \u00f6\u011frenin.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kisumu-havalimaninda-ucak-inislerini-aninda-takip-etmek-neden-onemli\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kisumu-havalimaninda-ucak-inislerini-aninda-takip-etmek-neden-onemli\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kisumu-havalimaninda-ucak-inislerini-aninda-takip-etmek-neden-onemli\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kisumu Havaliman\u0131&#8217;nda U\u00e7ak \u0130ni\u015flerini An\u0131nda Takip Etmek Neden \u00d6nemli?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Kisumu Havaliman\u0131'nda U\u00e7ak \u0130ni\u015flerini An\u0131nda Takip Etmek Neden \u00d6nemli?","description":"Kisumu Havaliman\u0131'nda u\u00e7ak ini\u015f ve kalk\u0131\u015flar\u0131n\u0131 anl\u0131k olarak takip etmek mi istiyorsunuz? Bu makalede, AWS'nin g\u00fc\u00e7l\u00fc bulut altyap\u0131s\u0131n\u0131 ve OpenSky API'nin zengin havac\u0131l\u0131k verilerini kullanarak nas\u0131l ger\u00e7ek zamanl\u0131 bir takip sistemi kuraca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m ke\u015ffedeceksiniz. Operasyonel verimlili\u011fi art\u0131r\u0131rken yolcu deneyimini iyile\u015ftirmenin yollar\u0131n\u0131 \u00f6\u011frenin.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/kisumu-havalimaninda-ucak-inislerini-aninda-takip-etmek-neden-onemli\/","og_locale":"tr_TR","og_type":"article","og_title":"Kisumu Havaliman\u0131'nda U\u00e7ak \u0130ni\u015flerini An\u0131nda Takip Etmek Neden \u00d6nemli?","og_description":"Kisumu Havaliman\u0131'nda u\u00e7ak ini\u015f ve kalk\u0131\u015flar\u0131n\u0131 anl\u0131k olarak takip etmek mi istiyorsunuz? Bu makalede, AWS'nin g\u00fc\u00e7l\u00fc bulut altyap\u0131s\u0131n\u0131 ve OpenSky API'nin zengin havac\u0131l\u0131k verilerini kullanarak nas\u0131l ger\u00e7ek zamanl\u0131 bir takip sistemi kuraca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m ke\u015ffedeceksiniz. Operasyonel verimlili\u011fi art\u0131r\u0131rken yolcu deneyimini iyile\u015ftirmenin yollar\u0131n\u0131 \u00f6\u011frenin.","og_url":"https:\/\/fatihsoysal.com\/blog\/kisumu-havalimaninda-ucak-inislerini-aninda-takip-etmek-neden-onemli\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-18T05:01:19+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"30 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/kisumu-havalimaninda-ucak-inislerini-aninda-takip-etmek-neden-onemli\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/kisumu-havalimaninda-ucak-inislerini-aninda-takip-etmek-neden-onemli\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Kisumu Havaliman\u0131&#8217;nda U\u00e7ak \u0130ni\u015flerini An\u0131nda Takip Etmek Neden \u00d6nemli?","datePublished":"2025-10-18T05:01:19+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/kisumu-havalimaninda-ucak-inislerini-aninda-takip-etmek-neden-onemli\/"},"wordCount":5315,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/kisumu-havalimaninda-ucak-inislerini-aninda-takip-etmek-neden-onemli\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/kisumu-havalimaninda-ucak-inislerini-aninda-takip-etmek-neden-onemli\/","url":"https:\/\/fatihsoysal.com\/blog\/kisumu-havalimaninda-ucak-inislerini-aninda-takip-etmek-neden-onemli\/","name":"Kisumu Havaliman\u0131'nda U\u00e7ak \u0130ni\u015flerini An\u0131nda Takip Etmek Neden \u00d6nemli?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-18T05:01:19+00:00","description":"Kisumu Havaliman\u0131'nda u\u00e7ak ini\u015f ve kalk\u0131\u015flar\u0131n\u0131 anl\u0131k olarak takip etmek mi istiyorsunuz? Bu makalede, AWS'nin g\u00fc\u00e7l\u00fc bulut altyap\u0131s\u0131n\u0131 ve OpenSky API'nin zengin havac\u0131l\u0131k verilerini kullanarak nas\u0131l ger\u00e7ek zamanl\u0131 bir takip sistemi kuraca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m ke\u015ffedeceksiniz. Operasyonel verimlili\u011fi art\u0131r\u0131rken yolcu deneyimini iyile\u015ftirmenin yollar\u0131n\u0131 \u00f6\u011frenin.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/kisumu-havalimaninda-ucak-inislerini-aninda-takip-etmek-neden-onemli\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/kisumu-havalimaninda-ucak-inislerini-aninda-takip-etmek-neden-onemli\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/kisumu-havalimaninda-ucak-inislerini-aninda-takip-etmek-neden-onemli\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Kisumu Havaliman\u0131&#8217;nda U\u00e7ak \u0130ni\u015flerini An\u0131nda Takip Etmek Neden \u00d6nemli?"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32145","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=32145"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32145\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32145"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32145"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32145"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}