yEmreAk
  • 📚Docs
  • Blog
    • 🔍Yapay Zeka ile Arastirmalarim
      • Fesleğen ve Nane Yetiştirme Yöntemleri ve İpuçları
      • React Native Tabanlı Hızlı Geliştirme Süreci
      • React Uygulamalarında Modern State Yönetimi ve Entegrasyon Saklama Yöntemleri
      • Icerikler neden etkileyici gelir
      • Beyin Performansını Artırma Stratejileri
    • 🌱Kișisel Gelișim
      • Iceriklerdeki Stillerin ve Renklerin Psikoljik Etkileri
      • Psychological Effects of Styles and Colors in Contents
      • Yalnizlik
      • Duygulari Tam Olarak Nasil Isleriz, Islenmemiz Duygulardan Kurtulmak
      • Hayattaki Firsatlari Wi-Fi Analojisi ile Anlamaya Calismak
      • İçimizdeki eksiklik hissini tamamlamamak için disaridan bir şey aramak surdurelebilir degildir
      • Duygularla Basa Cikmak icin Basit Ama Etkili Yontemler
      • AirBNB kurucunun 15 yil sonra kesfettigi ve asil ihtiyaci oldugunu dusundugu sey: anlamli iliskiler
      • Gerçek Güçlü Yönlerinizi Keşfetme: Tatmin Edici Bir Kariyer İçin Basit Bir Rehber
      • 🌟Bir insanin kendini gerceklestirebilmesi icin gerekli adimlar
      • 🌟Insanlarla iliski nasil kurulur? Guven nasil kurulur, nasil insanlarla anlasiriz?
      • Insanlar Neden Tek Bir Fikre Takili Kalirlar, Sabit Fikirli Olurlar
      • 🌟Neden acgozlu oluruz, acgozluluk nedir, nasil olusur?
      • 🌟Öğrendiklerimizi Neden Paylaşmalıyız? Kişisel Yolculukta Özgünlüğün ve Paylaşımın Gücü
      • 🌟Why Should We Share What We Learn? The Power of Authenticity and Sharing in Personal Journeys
      • Why Do Children Watch the Same Video or TV Show Over and Over?
      • Nihai huzur yani kalici bir mutluluk icin dengeyi bulmak onemlidir
      • The Diary of a CEO - Steven Bartlett
      • İlişkinizin uzun süremeyeceğinin 12 sinyali
      • Disiplinli olarak bir seyi ilertletmenin formulu
    • 👨‍💻Programlama
      • alfred5 workflow ile javascript calistirmak
      • Typescript / javascript ile date bilgisi almak
      • yt-dlp icin cookie bilgilerini kullanmak
      • fastify ile google cloud gibi VM’lere http uzerinden baglanmada sorun yasiyorsak 0.0.0.0’i host name olarak atamaliyiz
      • Regex ile string icerisindeki uzun metni parcalara bolmek
      • pm2 code: 'ERR_REQUIRE_ESM' trouble
      • Notion Integration olusturmak; database ve sayfalari yonetmek
      • Typescript ESM icin Jest calistirmak
      • Running Jest tests for Typescript ESM modules
      • Converting Instagram saved_collections.json file to csv file and importing it to notion
      • Instagram saved_collections.json dosyasini csv dosyasina cevirmek ve notion’a aktarmak
      • \u00f0\u009f\u0091\u0080 gibi unicode metinleri dosyadan okumak, saved_collections.json
      • Typescript ile Websocket uzerinden zamanli bir sekilde mesaj gondermek, message queue
      • Typescript ve macOS ile clipboard yonetimi, copy paste
      • Deleting files, completely, from git history
      • spawn ve tail ile loglari izleme ve pretty etmek
      • return await Promise ile return Promise farki
      • Promise’leri calistirmadan tanimlamak icin function () ⇒ {} olarak tanimlanmali
      • Google Cloud uzerindeki sunucumuzu websocket server olarak kullanma ve websocket uzerinden baglanma
      • Git geçmişinden dosya temizleme
      • pm2, pino ve pino-pretty ile bunjs projesinin raporlarini yonetmek
      • Edge Computing Nedir?
      • Jest Run it - Jest ile test islemlerini VS Code ile hizlica yapmak icin eklenti
      • Jest icin VSCode uzerinde debug yapilandirmasi
      • Tesseract ile metinden ve videodan metni almak, image to text
      • yt-dlp ve ffmpeg kullanarak typescript ile video indirme methodu
      • Google Cloud uzerindeki sunucuda websocket tcp baglantilarina izin vermek icin firewall izni olusturmak
      • Extract audio from video with Typescript and ffmpeg
      • Video uzerinden sesi almak - Typescript - ffmpeg
      • Typescript ile npm package olusturmak ve yayinlamak
      • ngrok ile raspberrypi sunucusunu SSH üzerinden erişime açmak
      • SSH key oluşturup, sunucuya yükleme
      • ssh ile sunucudaki GUI uygulamalarini (chromium gibi) macOS uzerinde calistirmak
      • .ssh/config dosyası ne işe yarar
      • Nodejs ile ele alinmamis promise.rejectleri yakamalar
      • rsync kullanarak dosya aktarımı
      • RaspberryPi Sifirdan Kurulumu, SSH ve VNC baglantisi, ngrok ile internetten erismek
      • Raspberry icin Nodejs kurulumu
      • Typescriptle google-spreadsheet ile google sheet duzenlemek
      • Homebrew linux icin Checking for sudo access (which may request your password)... sorunu
      • Node modullerinden gelen hatalari gizlemek, TypeError [ERR_INVALID_STATE]: Invalid state: Writer has been released
      • Bunjs ile Node gerektiren paketleri / modulleri (pino-pretty, pm2) indirmek ve kullanmak
      • VS Code Typescript auto import sorunu cozumu
      • TypeError [ERR_INVALID_STATE]: Invalid state: Writer has been released
      • Websocket error.code’larini aciklamalari
      • Git ile tum commit gecmisini temizleme ve sifirdan yeni commit ile pushlamak
      • By, with, via karsilastirmasi (by vs with vs via)
      • TypeScript ile decorator tanimlayarak methodlari ve siniflari loglamak
      • TypeScript kullanarak Bun:test ile Hata Fırlatılmasını Beklemek - ts(2348)
      • Bunjs ile cli uzerinden input almak
      • Named Parameters vs Positional Parameters in Typescripts
      • Debounce yapisi ile cok sik yapilan requestleri birlestirmek ve tek bir seferde yapmak
      • Bunjs ve Typescript ile CLI Uygulamasi gelistirmek
      • MindEase VSCode Theme: Neurodesign ile Hazırlanmış, Sizin İçin İnşa Edilmiş
      • MindEase for VSCode: Crafted with Neurodesign, Built for You
      • How to fix Bunjs broken —global download
      • Bunjs —global indirme sorunu cozumu
      • How to use any Nodejs dependened modules (pino-pretty, pm2) with Bunjs
      • Cleaning up unused imports in Python with autoflake using a VS Code task
      • VS Code task ile python autoflake kullanarak kullanilmayan importlari temizlemek
      • Git ile Güvenli Push: --force-if-includes Kullanımının Gücü
      • Safe Pushing with Git:-force-if-includes
      • Typescript ile Class ismini dinamik olarak almak
      • PyTest ile Testlerinizi Yönetin: Bağımlılıklar ve Sıralama
      • Python ile terminal üzerinde tablo gösterme
      • SSH ve Rsync Kullanımı: .ssh/config Dosyası, Anahtar Oluşturma ve Dosya Aktarımı
      • Alfred5 icin python ve alfred5 paketi ile Alfred Workflowu Gelistirmek
      • Expect to throw with Typescript using Bun:test - ts(2348)
      • Type Alias Gösterimi Sorunu ve Çözümü
      • TypeSciprt ile dynamic key tanimlamak
      • Developing Alfred5 workflow using alfred5 python package
      • Typescript full-stack projeleri icin proje dizin yapisi ve tsconfig dosyasi nasil olmali
      • Uploading image to Imgur with Bunjs
      • VS Code web kodlarini tarayici uzerinde gostermek
      • GitHub Pages ile Apex domain desteklemeyen bir siteye yönlendirme yapmak
      • Typesciprt ile async git komutu calsitirmak
      • Windows 10 için otomatik mouse ve klavye tetikleyicisi
      • Vim Temel Klavye Kısayolları ve Hareketler
    • ❣️Duygular
      • Giriş
      • Açlık
      • Ağırlık
      • Alaycılık
      • Arzu
      • Aşağılık Hissi
      • Aşk
      • Bağlanma
      • Bezginlik
      • Bıkkınlık
      • Cesaret
      • Coşku
      • Dalgınlık
      • Depresyon
      • Doymuşluk
      • Duygusal Boşluk
      • Duygusal Çöküntü
      • Eğlence
      • Endişe
      • Endişe
      • Enerji
      • Fedakarlık
      • Gerilim
      • Gıpta
      • Gurur
      • Hafiflik
      • Hayal Gücü
      • Hayal kırıklığı
      • Hayal
      • Hayranlık
      • Hayret
      • Heyecan
      • Hırs
      • Hoşnutluk
      • Huzur
      • İç Çatışma
      • İç huzur
      • İç Rahatsızlık
      • İçtenlik
      • İhtiras
      • İlgilenme
      • İlgisizlik
      • İnanç
      • İstek
      • İsteksizlik
      • İyimserlik
      • Kabullenme
      • Kabullenme
      • Kafa karışıklığı
      • Kaygı
      • Kayıp
      • Kayıtsızlık
      • Kazanç
      • Keder
      • Kendinden eminlik
      • Kendinden nefret
      • Kendini beğenmişlik
      • Kibir
      • Kıskançlık
      • Kötümserlik
      • Korkaklık
      • Korku
      • Kuşku
      • Memnuniyet
      • Merak
      • Merhamet
      • Minnettarlık
      • Mükemmelliyetçilik
      • Mükemmelliyetçilik
      • Mutluluk
      • Nefret
      • Neşe
      • Öfke
      • Özgüven
      • Özlem
      • Özsaygı
      • Pişmanlık
      • Rahatlama
      • Rahatsızlık
      • Sabırsızlık
      • Şaşırma
      • Şaşkınlık
      • Şefkat
      • Şehvet
      • Sevinç
      • Sıkılma
      • Sıkıntı
      • Sinirlilik
      • Stres
      • Suçluluk
      • Şüphe
      • Tahammülsüzlük
      • Tatmin Olmak
      • Tatmin
      • Telaş
      • Tiksinti
      • Ümitsizlik
      • Üstünlük Hissi
      • Üzüntü
      • Üzüntü
      • Umut Kırıklığı
      • Umut
      • Utangaçlık
      • Üzüntü
      • Yalnızlık
      • Yanılgı
      • Yetersizlik
    • 🎵Müzik Analizleri
      • 🤗Müziklerde Kendini Keşfetmeye Hazır Mısın
      • Adele - Rolling in the Deep
      • Andra Day - Rise Up
      • Arman Cekin & Faydee - Better Days
      • Aurora - Cure For Me
      • AVAION - Pieces
      • Bella Poarch - Living Hell
      • Billie Eilish - lovely (with Khalid)
      • Billie Eilish - Six Feet Under
      • Böyleyken Böyle - Niye Benle Savaştın
      • Brennan Savage - Look At Me Now
      • Bruno Mars - Just the Way You Are
      • Chandler Leighton - When You Say My Name
      • Christina Perri - A Thousand Years
      • Clean Bandit - Rather Be
      • Clean Bandit - Rockabye
      • Clean Bandit - Symphony
      • Demir Demirkan - Aşktan Öte
      • Drake - In My Feelings
      • Dua Lipa - Don't Start Now
      • Duman - Senden Daha Güzel
      • Ed Sheeran - Beautiful People
      • Ed Sheeran - Perfect
      • Ed Sheeran - Photograph
      • Ed Sheeran - Shape of You
      • Elli Eli - I Got Summer on My Mind
      • Emin Kadir - Geceler 2
      • Evgeny Grinko – It's Foggy Today
      • Evgeny Grinko – On The Waves
      • Ezginin Günlüğü - Küçüğüm
      • Fazıl Say - İnsan İnsan
      • Ferhat Göçer - Ayrılsak Ölürüz Biz
      • Hailee Steinfeld - Love Myself
      • Hans Zimmer - Interstellar
      • Hurts - Miracle
      • Imany - Don’t Be So Shy (Filatov & Karas Remix)
      • Jaymes Young - Infinity
      • John Legend - All of Me
      • Katy Perry - The One That Got Away
      • Koyu - Sen Benim Başıma Gelen En Güzel Şey
      • Kygo - Stole the Show
      • Leona Lewis - Bleeding Love
      • Lewis Capaldi - Someone You Loved
      • Lofi Fruits Music - Gangsta’s Paradise
      • LP - Lost on You
      • Mabel - Don't Call Me Up
      • Mad World - Gary Jules
      • Mark Ronson - Uptown Funk
      • Melek Mosso - Hayatım Kaymış
      • NEA - Some Say
      • Nico & Vinz - Am I Wrong
      • Nirvana - Smells Like Teen Spirit
      • OMI - Cheerleader (Felix Jaehn Remix)
      • Passenger - Let Her Go
      • Phantogram - Black Out Days
      • Pharrell Williams - Freedom
      • Pharrell Williams - Happy
      • Radio Company - Drowning
      • RAVENS ROCK - Sweet Dreams (Instrumental Guitar)
      • Rema, Selena Gomez - Calm Down
      • Rihanna - Diamonds
      • Robin Schulz - In Your Eyes
      • Sena Şener - Kaybettiklerimi Geri Ver
      • Serdar Ortaç - Karabiberim
      • Shawn Mendes, Camila Cabello - Señorita
      • Simge - Aşkın Olayım
      • Skrillex, Justin Bieber & Diplo - Where Are Ü Now
      • The Weeknd - Blinding Lights
      • Tiësto - The Business
      • Tom Odell - Another Love
      • Tones and I - Dance Monkey
      • Two Neighbors - Comfort Zone
      • Tylor Swift - Wildest Dreams
      • UNDREAM - Chemical X
      • Whitney Houston - I Will Always Love You
      • Wye Oak - Civilian
      • Yeni Türkü - Cember
      • Yüzyüzeyken Konuşuruz - Bodrum
      • Zero 9:36 - Leave the Light On
      • Zeynep Bastık - Uslanmıyor Bu
    • 📰Genel
      • Saçmalıklar ve onlara değer yüklememiz
      • Apple Watch shortcuts’lari guncellemiyor nasil cozulur
      • How to fix Apple Watch not updating shortcuts
      • Samsung ViewFinity S9 Monitor Black Screen and Failure to Turn on
      • Samsung ViewFinity S9 Monitor Siyah Ekran ve Acilmama Sorunu
      • Apple Calendar ile Google Calendar’i senktronize etmek
      • Ingilizcede TH seslerini telaffuz etmek
      • Sanatı Sormak: Öğrenme ve Bağlantıyı Açığa Çıkaran Beş Adım
      • Siri ile Text-to-speech ve Speech-to-text kullanmak, metinden sese, sesten metine
      • Hormonlarimizin Hayatimiza Etkisi ve Basa Cikma Yontemleri
      • Insanlara teklif sunarken izlenmesi gereken yollar
      • MBTI kisilik tipindeki her harfin kisaca anlami
      • Şeker en fazla 36mg tüketmeliyiz
      • Dikkatinizi Dağıtan 5 Hata - Odaklanmanızı Bozan 5 Hata
      • İyi bir üniversite deneyimi için 8 Strateji
      • CapCut uzerinde video uzerine resim eklemek, overlay
      • Alfred - Productivity App for macOS
      • Alfred’in belirli dosyalari gostermesini engellemek, exclude files
      • 2024 yilinda en cok kar elde eden sirketler ve sektorler
      • macOs ile terminallerin hepsini tek bir pencerede birlestirmek, merging all terminal tabs into one window
      • AirBNB kurucunun 15 yil sonra kesfettigi ve asil ihtiyaci oldugunu dusundugu sey: anlamli iliskiler
      • Chrome Dev Console ile aktif websocket verilerini yonetmek
      • ChatGPT, Mermarid ve ExcaliDraw ile Elle Cizilmis Flowchart Olusturmak
      • Yandex navigasyonu Carplay yani araba uzerinde kullanmak icin Yandex Plus aboneligi VPN ile nasil al
      • Yandex navigasyonu Carplay yani araba uzerinde kullanmak icin Yandex Plus aboneligi VPN ile nasil alinir
      • iOS, iPhone ile bilinmeyen numaralardan gelen SMS’ler icin bildirimi kapatmak
      • To turn off notifications for SMS messages from unknown numbers on iOS
      • Amazon AWS ve Azure için Şirketinize veya Vergi Numaranıza Fatura Kesmek
      • E Devlet Uzerinden Rahatsiz Edici SMS, Arama veya E-posta Bildirimlerini Engellemek ve Sikayet Etmek
      • Monitor Tercih ederken dikkat edilmesi gerekenler
      • Mac ve QuickTime Player ile videoları birleştirme, kırpma düzenleme
      • Ölümün insan üzerinde etkisi
      • iCloud üzerinden resimleri meta data (tüm bilgileri, konum, saat vs) ile indirme
      • Resim Boyutu Küçültmek Image Compress
      • iPhone’u fabrika ayarlarına döndürmek, beta sürümden çıkmak
      • GitHub search yapisi ile tum kodlarin arasinda hizlica gecis yapabilirsin
      • Platform Options for Content Creators
      • Separate ChatGPT inputs to chunks and save it to clipboard
    • 💎MBTI ve 16 Kişilik Tipleri, Envanteri
      • ENFJ - Önder - Protagonist
      • INTJ - Mimar - Architect
    • 📚Beğendiğim İçerikler
      • Video Ozeti - Hayatımızı Değiştirecek Teknoloji: NANOBOTLAR - Baris Ozcan
    • 🔮Hikaye Anlatıcılığı - Storytelling
      • Yakınlığın Değeri: İnsanları Yakından Tanımanın Önemi
  • Arsiv
    • 📚Kitaplar
    • 📖Yazılarım
      • 🤖Android Things
      • 📸CameraX Kullanımı
      • 🔥Firebase ML-Kit
      • 📍Google Maps Kullanımı
      • 👜Google Play Store
      • 🐞Android Default App Hatası
      • ✍️Kişisel Notlarım
      • 💁‍♂️Neden Kotlin
      • 🚧Proje İsmi Değiştirme
      • 📅Tarih işlemleri
      • 📲Telefonu Bilgisayara Bağlama
      • ✨Verimli Programlama
      • 🚫WebView İçerisindeki Reklamları Engelleme
      • 👷‍♂️Kotlin Kurulumu
      • 🚀Kotlin'in Java'ya Göre Avantajları (Kotlin vs Java)
      • 💥… (ellipsis) kullanımı
      • 🔢Algoritma Örnekleri
      • 🧾Fonksiyon Süresini ve Çağırıldığı Yeri Dekoratör ile Raporlama
      • 🐞ImportError: attempted relative import with no known parent package
      • 🧲İnternet Üzerinden Veri Çekme
      • 📊Verileri Kategorize Etme
      • 📦Pip ile Kurulabilir Python Paketi Oluşturma
      • 🌟Python'da Önemli Hususlar
      • 📈Verimli Kodlama
      • ℹ️aiohttp.ClientSession() içerisideki params, data ve json ne işe yarar
      • 📜Amazon AWS ve Azure için Şirketinize veya Vergi Numaranıza Fatura Kesmek
      • 📲Android Telefonlar için Faydalı Uygulamalar
      • 🔢Asal Sayılar
      • 💡Aydınlatma
      • 🪖Bedelli Askerlik için Bilmemiz Gerekenler
      • 🧠Beyin Kimyasının Gücü: Mutluluk ve Stres Hormonları
      • ⏳Bilgisayarda Zaman Yönetimi (Time Tracking)
      • 👨‍🏫ChatGPT modelini verilerimizle eğitmek
      • 🕵️‍♂️CoinMarketCap'ten Exchange Bilgilerini Çekme ve CSV'ye Kaydetme
      • 💵CoinMarketCap'ten Exchange için Currency Bilgilerini Çekme ve CSV'ye Kaydetme
      • 🈷️En Verimli Yazı Formatı ve Psikolojik Etkileri
      • 🗑️Facebook Hesabını Kalıcı Olarak Silmek
      • 🔥Firebase ML-Kit
      • 🔥Firebase
      • ⏩Gmail iletilerini otomatik olarak başka bir hesaba iletme
      • 🖼️iCloud üzerinden resimleri meta data (tüm bilgileri) ile indirme
      • 🤖Instagram Bot
      • 📱iPhone’u fabrika ayarlarına döndürmek, beta sürümden çıkmak
      • 🕵️Lastik Alırken Dikkat Edilmesi Gerekenler
      • 🔆Macbook ekranını kapatmak ve parlaklık sınırını zorlamak
      • 🌴Marcul Aurelius nasıl sakin kalıyor
      • 🚀Microsoft Student Partnership
      • 📶Mobil Telefonlar Nasıl Haberleşir
      • 📖Notion Kullanımı
      • 💸Öğrencilere Ücretsiz Yazılımlar
      • ✨pip ile requirements paketlerini güncelleme
      • ✈️Polonya'da Erasmus
      • 👨‍💼pyenv ve virtualenv ile birden fazla python sürümü yönetimi
      • 🔄pytest ile asyncio RuntimeError: Event loop is closed sorunu çözümü
      • 🧪PyTest ile Testlerinizi Yönetin: Bağımlılıklar ve Sıralama
      • 🐞Python için ImportError: attempted relative import with no known parent package
      • 📉Python ile grafik çizme ve çizgi kesişimlerini engelleme
      • 📧Python ve Twilio ile SMS server oluşturma
      • 🍓Raspberry Pi Kurulumu, Yönetimi ve Internet Paylaşımı
      • 🍓Raspberry Pi Kurulum, Yönetim ve Paylaşım
      • 🗜️Resim Boyutu Küçültmek Image Compress
      • 🔐SSH Konfigürasyon ve Kullanım Rehberi: Anahtarlar, Dosya Transferi ve Daha Fazlası
      • 🔐SSH ve Rsync Kullanımı: .ssh/config Dosyası, Anahtar Oluşturma ve Dosya Aktarımı
      • ⛅Sunucu Yönetimi
      • 🎨Tasarım Notları
      • 🧵Thread Pool (Executors) Kavramı
      • Type Alias Gösterimi Sorunu ve Çözümü
      • 🔱TypeScript | Readonly Async Property Tanımlama
      • 🐧Ubuntu 22.04 icin Nodejs Kurulumu
      • 🤖Valorant Trigger Bot
      • Vim Temel Klavye Kısayolları ve Hareketler
      • 🌌virtualenv ile sanal ortamlarda çalışmak
      • 📱Xiaomi Mi A2 Lite Notlarım
      • 🗺️Yazılıma Giriş Rehberi
      • ⬇️Youtube Üzerinden Video İndirmek
      • 💍Yüzük Alırken Nerelere Dikkat Edilmeli, Yüzük Ölçüsü Nasıl Bulunur
    • 👨‍💻Programlama Notları
      • 🧱Programlama Temelleri
        • 🙋‍ Programlamaya Giriş
        • 🌟Programlamada Önemli Hususlar
        • 💎Programlama Terimleri
        • 📈Verimli Programlama
      • 📑Markdown
        • 🔰Markdown'a Giriş
        • �� Markdown'da İstatistik
        • 🔗Markdown ile Link
        • 🧾Markdown to PDF
        • 💎Markdown Regexleri
      • 💎Regex
        • 🤯Gelişmiş Notlar | Regex
        • 🔰Kullanım | Regex
      • 🤝Yardımcı Diller
        • 👨‍💻Batch Script
        • 📈Excel
        • 🍃MongoDB
        • 💽MySQL
        • 🐘PostgreSQL
        • 👨‍💻Shell Script
        • 👨‍💼UML
      • 🐈Scratch
        • 🍱Blok Tanımlama | Scratch
        • 🔰Giriş | Scratch
        • 📢Haber Salma | Scratch
        • 👨‍💻Kodlama Notları | Scratch
        • ⭐Oyun Örnekleri | Scratch
      • 🧩Popüler Dosya Uzantıları
      • 🔐Yazılım Lisansları
      • 💻C#
        • 🎶C# Projeye Gömülü Ses Dosyası Ekleme
      • 🎮Oyun Programlama
        • 🔲Unity
        • 🛵Unreal Engine
      • 🔩C, C++
        • 👨‍🔧Hata Çözümleri | C
        • 💡Scanf Veri Alma Sorunu | C
      • ⏹️Roblox
        • 🚴‍♂️Giriş | Roblox
        • 📜Scriptler | Roblox
      • 🧩Visual Studio Eklentisi
        • 👨‍💼Eklenti Yönetimi | VSIX
        • 🤖IDE Objelerine Erişme | VSIX
        • 🚴‍♂️İlk Projeyi Oluşturma | VSIX
        • 👨‍💻Kod Örnekleri | VSIX
        • 📜XAML Notları | VSIX
    • 📦Uygulama Notları
      • 📌Google Notları
        • 🔱Google Chrome'da Verimlilik
        • 🟡Google Colab
        • ⛅Google Drive Notları
        • 🔍Google Hacking
        • 👀Google Hızlı Bakış
        • 📍Google Maps
      • 🥦JetBrains IDEs
        • ⚙️Ayarlar | JetBrains IDE
        • 🥴Diğer Notlar | JetBrains
        • 🌈Eklentiler | JetBrains IDE
        • 💞Kısayollar | JetBrains IDE
        • 🔌Plugin Oluşturma | JetBrains IDE
        • 🏗️Proje Yapılandırma | JetBrains IDE
        • 🥴Karma Notlar | JetBrains
        • 💞Kısayollar | JetBrains
        • 🏗️Proje Yapılandırma | JetBrains
      • 🌃Visual Studio Code
        • 💎Değişkenler | VS Code
        • 🔨Yapılandırma | VS Code
        • 🧩Eklentiler | VS Code
        • 🔰Giriş | VS Code
        • 👨‍🔧Hata Çözümleri | VS Code
        • 💞Kısayollar | VS Code
        • 🤹‍♂️Task oluşturma ve birbirine bağlama | VS Code
        • 👷‍♂️Tasks | VS Code
        • 🧩Eklenti Programlama | VS Code
      • 🧩Visual Studio Eklentisi
        • 🚴‍♂️Giriş | VS Extension
        • 👨‍💻Kod Örnekleri | VS Extension
        • 🤖Otomasyon | VS Extension
        • ⭐Proje Örneği | VS Extension
      • 📺Youtube
      • 👨‍🎨Adobe XD
      • 🧹CCleaner
      • 🎳Discord
      • 🐳Docker
      • 💫GittiGidiyor Entegrasyon
      • 🚗LGSV Simulator
      • 📑Notepad++
      • 📝OneNote
      • ⏹️Protocol Buffer (Protobuf)
      • 🏠Sid Meiers Civilization 5
      • 💌Telegram
      • 💚Warcraft 3 The Frozen Throne
    • 🐍Python
      • ⭐Proje Örnekleri
        • 💲Anlık Dolar Fiyatı Alma
        • 📑Google Sheet Düzenleme
        • 🧹LinkedIn üzerindeki bağlantıları temizleme
        • 🤖Telegram Botu Oluşturma
        • ⬇️Youtube Üzerinden Video İndirmek
      • 🔰Giriş
        • 💎Değişkenler
        • 💫Döngüler
        • 🙋‍♂️Hoş Geldin
        • 🔑Anahtar Kelimeler (Keywords)
        • ⚖️Koşullar
        • 💠Operatörler
        • 💻Python için VsCode
      • 🧱Temel
        • 🏗️Decorator
        • 📑Dokümantasyon
        • 🔮Fonksiyonlar
        • 🐛Hata Yönetimi
        • 👮‍ Kural Koyma
        • 📦Modül ve Paketler
        • Page 1
        • 🌟Popüler Paketler
        • 🔮Fonksiyonlar
        • 📜Raporlama
        • 🎲Rastgelelik
        • 💎Regex İşlemleri
        • 🍎Sınıflar ve Miras Alma
        • 🔤String İşlemleri
        • ⚗️Test İşlemleri
        • 🕐Zaman İşlemleri
      • 🏗️Veri Yapıları
        • 📁Array
        • 🍎Data Classes
        • 📙Dict
        • 🌟Hızlı Bakış
        • 🚧Veri Yapılarında İşlemler
        • 📋List
        • ⭕Set
        • 👝Tuple
      • 🚧Veri Yapılarında İşlemler
        • 🔍Arama
        • 📚Birleştirme
        • 🤸‍ Comprehensions
        • 💱Dönüşüm
        • 👯‍♀️Kopyalama
        • 🚄Sıralama
      • 📰Koleksiyonlar
        • ⏳Counter
        • 🌠Deque
        • 💎Namedtuple
        • 📗Verimli Dict Yapıları
      • 📂Dosya İşlemleri
        • 👮‍♂️Erişim Yöntemleri | Dosya
        • ⭐Örnekler | Dosya
        • 🚩Yol İşlemleri | Dosya
        • 🛍️Pathlib | Dosya
        • 🔨Properties | Dosya
        • 🌟Sık Kullanılanlar | Dosya
      • 🖤Komut İstemi
        • 💠Argparse Action
        • 🌊Argparse Nargs
        • ⭐Argparse Örnekleri
        • ✨Argparse
        • 👨‍💼Komut İstemi Yönetim
      • 🔆Grafiksel Arayüzler
        • 📈Grafik Çizimleri
        • 👨‍💻Görsel Programlama
        • 🍢System Tray App
        • 👨‍🎨Tkinter
      • 💞Eş Zamanlı İşlemler
        • 💫Asyncio
        • 🎌Komut Çalıştırma
        • 🎎Multiprocessing
        • 🧵Multithreading
      • 🕸️Web Programlama
        • 🔥Django
        • 🌶️Flask
        • 💌HTTP İstekleri
        • 🕳️Web Socket
      • 📚Diğer Notlarım
        • 🔄Continuous İntegration (CI)
        • 🔳Ekran Yönetimi
        • 🖤Executable Dosya Oluşturma
        • ✨Faydalı İşlemler
        • 🎴Görüntü İşlemleri
        • 👨‍🔧Hata Çözümleri
        • 💌HTTP İstekleri
        • ⌨️Input Yönetimi | pynput
        • ⌨️Klavye Yönetimi
        • 🏗️Kod içi Yapılar
        • 🖱️Mouse Yönetimi
        • 📦Pip ile Kurulabilir Python Paketi Oluşturma
        • ⚗️Test İşlemleri
        • 🌇Sanal Ortam Oluşturma
        • 👨‍🔧Sistem Yönetimi
        • 💫Thread ve MultiProcessing
      • 💚Anaconda
        • 👷‍♂️Anaconda & Miniconda Kurulumu
        • 🎪Diğer Notlar | Conda
        • 🏂Anaconda'ya Giriş
        • 📦Paket Kurulumları | Conda
        • 🌇Sanal Ortamlar | Conda
        • 🧱Temel Kullanım | Conda
        • 🧠Yapay Zeka Paketleri | Conda
      • 📗IPython
        • 🔗Faydalı Bağlantılar | IPython
        • 🚴‍♂️IPython'a Giriş
        • 🔆Görsel Arayüz (GUI) | IPython
        • 🔃I/O İşlemleri | IPython
        • 🧱Temel İşlemler | IPython
        • 🖤Terminal İşlemleri | IPython
      • 📦Faydalı Paketler
        • 🧐FileType
        • 🕐Schedule
      • 🔗Faydalı Bağlantılar
      • 🥴Karışık Notlar
        • 🔢Algoritma Örnekleri
        • ✨Faydalı İşlemler
        • 📈Verimli Kodlama
    • 🏫IUC CE - İstanbul Üniversitesi - Cerrahpaşa | Bilgisayar Mühendisliği
      • 💖Katkıda Bulunma Rehberi
      • 🏫Okul Hakkında Bilgiler
        • 👨‍🏫Akademik Kadro
        • 📙Ders Seçimi
        • 📗Faydalı Bilgiler
        • 👯Okul Kulüpleri
        • 🛫Polonya'da Erasmus
        • 🔬Proje Notları
        • 🌟Sık Kullanılan Bilgiler
        • 👨‍🏫Staj Notları
        • 🤑Ücretsiz Yazılımlar
      • 📚1. Sınıf 1. Dönem Notları
        • 🔰Bilgisayar Mühendisliğine Giriş
          • 📕Öğrenci Notları | BMG
        • 🧮Calculus 1
          • 📕Öğrenci Notları | C1
          • 📃Sınav Soruları | C1
        • 🔢Discrete Mathematics
          • 📕Öğrenci Notları | DM
          • 📃Sınav Soruları | DM
        • 💠Fizik 1
          • 📕Öğrenci Notları | F1
          • 📃Sınav Soruları | F1
        • 🔰Introduction to Algorithms
          • 📕Öğrenci Notları | ItA
          • 📃Sınav Soruları | ItA
        • ☪️Türk Dili 1
          • 📃Sınav Soruları | TD1
      • 📚1. Sınıf 2. Dönem Notları
        • 📅Atatürk İlkeleri ve İnkılap 2
          • 📚Ders İçeriği | Aİvİ2
          • 📃Sınav Soruları | Aİvİ2
        • 🔱Bilişim Etiği
          • 🆎Harf Notu | BE
          • 🎲Karma İçerikler | BE
        • 🧮Calculus 2
          • 📚Ders İçeriği | C2
          • 🆎Harf Notu | C2
          • 📕Öğrenci Notları | C2
          • 📃Sınav Soruları | C2
        • 💠Fizik 2
          • 📚Ders İçeriği | F2
          • 📃Sınav Soruları | F2
        • 🔰Introduction to Programming
          • 📖Genel Notlar | ItP
          • 🆎Harf Notu | ItP
          • 📕Öğrenci Notları | ItP
          • 📃Sınav Soruları | ItP
        • 🔢Linear Algebra
          • 📕Öğrenci Notları | LA
          • 📃Sınav Soruları | LA
        • 🔤Türk Dili 2
          • 📃Sınav Soruları | TD2
      • 📚2. Sınıf 1. Dönem Notları
        • 😵Derlenmemiş Notlar
          • 🗃️Sınavlar | DN
        • ⚡Devreler ve Sistemler
          • 📚Ders İçeriği | DvS
            • 📅Final | DvS
            • 👩‍🔬Lab Notları | DvS
            • 📅Vize | DvS
          • 📖Genel Notlar | DvS
          • sinav-sorulari | DvS
        • ➰Differantial Equations
          • 📕Öğrenci Notları | DE
          • 📃Sınav Soruları | DE
        • 🅾️Lojik Devre Tasarımı
          • 📚Ders İçeriği | LDT
            • 📅Final | LDT
            • 📅Vize | LDT
          • 📖Genel Notlar | LDT
          • 📕Öğrenci Notları | LDT
          • 📃Sınav Soruları | LDT
        • 👨‍💻Nesneye Yönelik Programlama
          • 📚Ders İçeriği | NYP
            • 📅Final | NYP
            • 📘Kitaplar | NYP
            • 📅Vize | NYP
          • 📕Öğrenci Notları | NYP
          • 📃Sınav Soruları | NYP
        • 🎲Olasılık Teorisi ve İstatistik
          • 📕2022 | OTvİ
          • 📕Ders İçeriği | OTvI
            • 2022
            • Eski
              • Final
              • Vize
          • 📚Ders İçeriği | OTvİ
            • 📅Final | OTvİ
            • 📅Vize | OTvİ
          • 📕Öğrenci Notları | OTvİ
          • 📃Sınav Soruları | OTvİ
        • 💾Veri Yapıları
          • 📚Ders İçeriği | VY
            • 📖Genel Notlar | VY
            • 👩‍🔬Lab | VY
            • ⭐Ödevler | VY
          • 📕Öğrenci Notları | VY
          • 📃Sınav Soruları | VY
      • 📚2. Sınıf 2. Dönem Notları
        • 👨‍🔬Bilgisayar Organizasyonu ve Tasarımı
          • 📚Ders İçeriği | BOvT
            • 📅Final | BOvT
            • 📅Vize | BOvT
          • 🆎Harf Notu | BOvT
          • 📕Öğrenci Notları | BOvT
          • 📃Sınav Soruları | BOvT
        • 🗃️File Organization
        • ➰Formal Diller ve Otomatlar
          • 📚Ders İçeriği | FDvO
            • 📅Final | FDvO
            • 📅Vize | FDvO
          • 📃Sınav Soruları | FDvO
        • 👨‍🔬Lojik Devre Tasarımı - Lab
          • 📚Ders İçeriği | LDT-L
          • 📕Öğrenci Notları | LDT-L
          • 📃Sınav Soruları | LDT-L
        • ⚙️Mikroişlemciler
          • 📚Ders İçeriği | M
            • 📅Final | M
          • 📕Öğrenci Notları | M
          • 📃Sınav Soruları | M
        • 👨‍💻Programming Applicaiton
          • 📚Ders İçeriği | PA
            • 📅Vize | PA
          • 🆎Harf Notu | PA
          • 📕Öğrenci Notları | PA
          • 📃Sınav Soruları | PA
        • 🎲Random and Stochastic Processes
          • 📚Ders İçeriği | RaSP
          • 🆎Harf Notu | RaSP
          • 📃Sınav Soruları | RaSP
        • 🔢Sayısal Metodlar
          • 📚Ders İçeriği | SM
          • 📕Öğrenci Notları | SM
          • 📃Sınav Soruları | SM
      • 📚3. Sınıf 1. Dönem Notları
        • 🧐Algorithm Analysis
          • 📚Ders İçeriği | AA
            • 2022 | AA
            • Eski
              • 📅Final | AA
              • Kitap
              • 📅Vize | AA
          • 🆎Harf Notu | AA
          • 📕Öğrenci Notları | AA
          • 📃Sınav Soruları | AA
        • 🧠Artificial Intelligence
          • 📚Ders İçeriği | AI
            • 📅Final | AI
            • 📅Vize | AI
          • 🆎Harf Notu | AI
          • 📕Öğrenci Notları | AI
          • 📃Sınav Soruları | AI
        • 👨‍🔬Bilgisayar Organizasyonu ve Tasarımı - Lab
          • 📚Ders İçeriği | BOvT-L
            • 2022 | BOvT
            • Eski
          • 📕Öğrenci Notları | BOvT-L
          • 📃Sınav Soruları | BOvT-L
        • ⚖️Bilişim Hukuku
          • 📕Ders İçeriği | BH
            • 2022 | BH
            • 📕Eski | BH
              • 📅Final | BH
              • 📹Sunumlar | BH
              • 📅Vize | BH
          • 📕Öğrenci Notları | BH
          • 📃Sınav Soruları | BH
        • 🏧Data Communication
          • 📕Öğrenci Notları | DC
          • 📃Sınav Soruları | DC
        • 💰Mühendislik Ekonomisi
          • 📕Öğrenci Notları | ME
          • 📃Sınav Soruları | ME
        • 💻Operating Systems
          • 📕Ders İçeriği | OS
            • 2022 | OS
            • 📕Eski | OS
              • 📖Genel Notlar | OS
              • 📘Kitaplar | OS
              • 📹Ders Sunumları | OS
          • 🆎Harf Notu | OS
          • 📕Öğrenci Notları | OS
          • 📃Sınav Soruları | OS
        • 📶Signal Processing
          • 📕Ders İçeriği | SP
            • 2021
            • 📕2022 | SP
            • 📕Eski | SP
              • 📅2019 | SP
              • 📅Vize | SP
            • Homework
          • 📕Öğrenci Notları | SP
          • 📃Sınav Soruları | SP
            • 🕐Eski | SP
            • ⭐Yeni | SP
        • 👨‍💻Sistem Programlama
          • 📚Ders İçeriği | SP
            • 📖Genel Notlar | SP
            • 👨‍💻Kodlar | SP
            • 📜PDF | SP
            • 🏗️Proje | SP
          • 📕Öğrenci Notları | SP
          • 📃Sınav Soruları | SP
        • 📂Veritabanı Yönetim Sistemleri
          • 📕Ders İçeriği | VYS
            • 📕2022 | VYS
              • [Odevler ve Sinavlar](arsiv/iuc-ce/<donem5/veritabani-yonetim-sistemleri/ders-icerigi/2022/Odevler ve Sinavlar/README.md>)
                • [📕 Ödevler ve Sınavlar | VYS](arsiv/iuc-ce/<donem5/veritabani-yonetim-sistemleri/ders-icerigi/2022/Odevler ve Sinavlar/VeritabaniOrnekOdevVeSinavPART1/README.md>)
                  • [VeritabaniOrnekOdevVeSinav](arsiv/iuc-ce/<donem5/veritabani-yonetim-sistemleri/ders-icerigi/2022/Odevler ve Sinavlar/VeritabaniOrnekOdevVeSinavPART1/VeritabaniOrnekOdevVeSinav/README.md>)
                • [VeritabaniOrnekOdevVeSinavPART2](arsiv/iuc-ce/<donem5/veritabani-yonetim-sistemleri/ders-icerigi/2022/Odevler ve Sinavlar/VeritabaniOrnekOdevVeSinavPART2/README.md>)
              • Slaytlar
              • Yonlendirme
            • 📕Eski | VYS
              • 📅Final | VYS
              • 📅Vize | VYS
              • 📖Ödevler | VYS
                • 📕Odev1
                • 📗Odev2
                  • 📢Açıklama
                  • 🗃️SQL
                • 📘Odev3
                • 📙Odev4
                • 📕Odev5
          • 📕Öğrenci Notları | VYS
          • 📃Sınav Soruları | VYS
      • 📚3. Sınıf 2. Dönem Notları
        • 🔲Bilgisayar Grafikileri
          • 📃Sınav Soruları | BG
        • 🏰Bilgisayar Mimarisi
          • 📚Ders İçeriği | BM
            • 📅Final | BM
            • 🏗️Proje | BM
            • 📅Vize | BM
          • 🆎Harf Notu | BM
          • 📕Öğrenci Notları | BM
          • 📃Sınav Soruları | BM
        • 🕸️Computer Networks and Technologies
          • 📚Ders İçeriği | CNaT
            • 📅Final | CNaT
            • 📅Vize | CNaT
            • 📖Genel Notlar | CNaT
          • 📕Öğrenci Notları | CNaT
          • 📃Sınav Soruları | CNaT
        • 🖼️Görüntü İşleme
          • 📚Ders İçeriği | Gİ
            • 📅Final | Gİ
            • 📅Vize | Gİ
          • 📕Öğrenci Notları | Gİ
          • 📃Sınav Soruları | Gİ
        • 👨‍⚕️İş Sağlığı ve Güvenliği
          • 📚Ders İçeriği | İSvG
          • 📕Öğrenci Notları | İSvG
          • 📃Sınav Soruları | İSvG
        • 👨‍💻Software Engineering
          • 📚Ders İçeriği | SE
            • 📅Final Kısmı | SE
            • 📅Vize Kısmı | SE
              • 👩‍🔬Lab Notları
              • 📃PDF
              • ☪️Slaytların Türkçesi
          • 🆎Harf Notu | SE
          • 📕Öğrenci Notları | SE
          • 📃Sınav Soruları | SE
        • 🧪Software Testing and Quality
          • 📚Ders İçeriği | STaQ
            • 📅Final | STaQ
            • 📅Vize | STaQ
          • 📕Öğrenci Notları | STaQ
          • 📃Sınav Soruları | STaQ
        • 🕸️Web Programlama
          • 📚Ders İçeriği | WP
      • 📚4. Sınıf 1. Dönem Notları
        • 📟Bilgisayar Aritmetiği
          • 📚Ders İçeriği | BA
          • 📕Öğrenci Notları | BA
          • 📃Sınav Soruları | BA
        • 💡Bilişim Proje Geliştirme
          • 📚Ders İçeriği | BPG
            • 📑Formlar | BPG
              • 📅2018
              • 📅2019
              • 📄Proje Geliştirme Raporları
            • ⭐Ödevler | BPG
            • 📹Ders Sunumları | BPG
          • 📖Genel Notlar | BPG
          • ✍️Öğrenci Notları | BPG
          • 📃Sınav Soruları | BPG
        • 💭Bulanık Mantık
          • 📚Ders İçeriği | BM
            • 📅2018 | BM
          • 🆎Harf Notu | BM
          • 📕Öğrenci Notları | BM
          • 📃Sınav Soruları | BM
        • 🔨Derleyici Tasarımı
          • 📚Ders İçeriği | DT
            • 📅2018 | DT
          • 🆎Harf Notu Dağılımı | DT
          • 📃Sınav Soruları | DT
        • 🔑İnformasyon Güvenliği ve Kriptoloji
          • 📚Ders İçeriği | İGvK
          • 🆎Harf Notu Dağılımı | İGvK
          • 📕Öğrenci Notları | İGvK
          • 📃Sınav Soruları | İGvK
        • 📶Kablosuz Haberleşme Ağları
          • 📕Öğrenci Notları | KHA
        • ➗Matlab
          • 📚Ders İçeriği | M
        • 📱Mobile Programming
          • 📚Ders İçeriği | MP
            • 📖Genel Notlar | MP
            • 🏗️Proje | MP
          • 🆎Harf Notu | MP
          • 📕Öğrenci Notları | MP
          • 📃Sınav Soruları | MP
        • 🧠Neural Networks
          • 📚Ders İçeriği | NN
          • 🆎Harf Notu | NN
          • 📕Öğrenci Notları | NN
          • 📃Sınav Soruları | NN
        • 📏Yön Eylem
          • 📚Ders İçeriği | YE
          • 📕Öğrenci Notları | YE
          • 📃Sınav Soruları | YE
      • 📚4. Sınıf 2. Dönem Notları
        • 🕸️Ağ Programlama
          • 📚Ders İçeriği | AP
          • 🎲Karma İçerikler | AP
          • 📕Öğrenci Notları | AP
          • 📃Sınav Soruları | AP
        • 👮‍♂️Bilgisayar Ağlarında Güvenlik
          • 📚Ders İçeriği | BAG
          • 🎲Karma İçerikler | BAG
          • 📃Sınav Soruları | BAG
        • 💎Bitirme Projesi | BP
        • 📈Finansta Bilişim Teknolojileri
          • 🎲Karma İçerikler | FBT
        • 🔸Information Technology Management and Standards
          • 📚Ders İçeriği | ITMaS
          • 🎲Karma İçerikler | ITMaS
        • 🏗️Object Oriented Analysis and Design
          • 📚Ders İçeriği | OOAaD
            • 📅Final | OOAaD
          • 🎲Karma İçerikler | OOAaD
          • 📕Öğrenci Notları | OOAaD
          • 📃Sınav Soruları | OOAaD
        • ⭐Special Topics on Computer Networks
          • 🎲Karma İçerikler | SToCN
        • 🏢Uygulamalı Girişimcilik
          • 📚Ders İçeriği | UG
          • 🏗️Proje Ödevi | UG
          • 📃Sınav Soruları | UG
      • 📚Karışık Notlar
    • 🚀yEmoji
      • 📖YEmoji Sözlüğü 👨‍🔬
      • 👨‍💻Geliştirici Commit'leri
      • 🔗Bağlantılar
    • 🎁Roblox
      • 💫Fonksiyonlar ve Kontroller
      • 🍹Gelişmiş Özellikler ve Başarılar: Oyununuzu Bir Sonraki Seviyeye Taşıyın
      • 🎯Karakterler, Eşyalar ve Görevler: Roblox Oyununuzda Hayat Yaratma
      • 🚀Lua ile Oyun Geliştirmeye Giriş
      • 📊Oyun İstatistikleri ve Yayın: Roblox Oyununuzun Performansını Takip Etme ve Dünyayla Paylaşma
      • 🎭Oyun Tasarımı ve Sanat: Oyununuzun Estetiğini Geliştirin
      • 🌃Roblox ile Duyusal Deneyimleri Tasarlama
      • 🌟Roblox ile Yaratıcı Oyun Tasarımları Oluşturma
      • 🔰Roblox ve Roblox Studio'ya Giriş
      • 🌍Roblox'ta Dünya Oluşturma: Haritalar ve Arazi
      • 🧪Roblox'ta Eğlenceli ve Öğretici Oyun Mekanikleri Oluşturma
      • 🚪Roblox'ta Kapılar ve Geçişler: Oyuna Canlılık Katma
      • 🎮Roblox'ta Karakter Kontrolleri ve Kamerayı Ayarlama
      • 🎮Roblox'ta Kodlama: Lua ile Oyun Mekaniği Oluşturma
      • 🎨Roblox'ta Modelleme ve Animasyon: Oyununuza Can Katma
      • 🎲Roblox'ta Oyun Tasarımı: Haritalar, Sesler ve Aydınlatma
      • 🌟Roblox'ta Oyun Tasarımı ve Geliştirmeye Devam Edelim
    • 💸Finans
      • Derinlemesine Mali Tablo Analizi
      • Finans ve Muhasebenin Derin Sularında Seyahat
      • Finansal Seyahatin İleri Seviyeleri
      • Gelişmiş Oran Analizi
      • İleri Finansal Modelleme ve Projeksiyon
      • İleri Seviye Finansal Performans Göstergeleri
      • Muhasebe ve Finansın Önemli Yolları
      • Nakit Akım Tablosu
      • Risk Yönetimi
      • Temel Performans Göstergeleri (KPI’s)
      • Yatırım Değerleme
      • Finansal Analiz
        • Giriş
      • Matematiksel modeller
        • Finansal Yapı oranları
        • Oran Analizi
      • Matematiksel olmayan modeller
        • Giriş
        • SWOT Analizi
        • Girişimcilik ve Yatırım İlişkileri
        • Global Finansal Trendler ve Piyasa Analizi
        • İleri Seviye Muhasebe İlkeleri
        • Kurumsal Finansman ve Yapılandırma
        • Stratejik Finansal Planlama
        • Yatırım Portföyü Yönetimi
      • Mali Tabloların Tanımları, Amaçları ve İşlevleri
        • Bilanço, teknik yapısı, İşletme Sermayesi
        • Gelir Tablosu, Sabit ve Değişken Maliyet/Giderler
        • Giriş
      • Muhasebe ile İlgili Genel Bilgiler ve Mali Tablolar
        • Dönemsellik İlkesi ve Tahakkuk Kavramı
        • Ertelenmiş Gelir
        • Faaliyet Harcamaları ve Yatırım Harcamaları
        • Gelir ve Giderlerin Tanınması
        • Ihtiyatlılık İlkesi ve Karşılık Kavramı
        • Karşılık Ayrılması ve Önemi
        • Muhasebenin İşlevi ve Yapısı
        • Opex vs Capex
        • Peşin Ödenmiş Gider
        • Tahakkuk Etmiş Gelir ve Giderler
      • Temelden İleri Seviyeye Finans ve Muhasebe Stratejileri
    • 👨‍🔬Kişisel Araştırmalarım
      • 🤖AI Destekli Kod Önerisi
      • 🤖AI ile Kod Tamamlama
      • 👨‍💻Çocuklar için Programlama
      • 💒Deprem Anında Kişisel Korunma
      • 👅İngilizce Notlarım
      • 🏫MIT gibi Yurt Dışı Eğitimleri Hakkında
      • 📶Nesnelerin İnterneti (IoT)
      • 💳Pasaport İşlemleri
      • 👨‍💻Scripting Languages
      • 📈Verimliliği Artıran Uygulamalar
    • 🏰Proje Yönetimi
      • 👨‍💻Kodlama Düzeni
      • 👨‍💼Projelerin Kontrolü
      • 🧩Git
        • 🌳Git ile Branch İşlemleri
        • 🤸‍ Git Cheat Sheet
        • ✨Git Commit İşlemleri
        • 🚶‍ Git Giriş
        • ⚓Git Hook
        • 🎳IDE üzerinden Git Kullanımı
        • 📦Git ile Repository İşlemleri
        • 📂Git Submodules
      • 📖GitBook
        • 💫GitBook Entagrasyon Yönetimi
        • 🌟GitBook Farklılıkları
        • 🐞GitBook Hata Notları
        • 📘GitBook Kullanımı
      • 🐙Github
        • 🔄Continuous İntegration | GitHub
        • 🎲Diğer Notlarım | GitHub
        • 🔰Giriş | GitHub
        • 💫API Kullanımı | GitHub
        • 👨‍💼Versiyon Yönetimi | GitHub
        • 🌍Web İşlemleri | GitHub
        • 🌈Workflow | GitHub
    • 💻İşletim Sistemi Notları
      • ⛺OS Genel Notlar
      • 🐧Linux Notları
      • 🎇Windows 10 Notları
    • 🔮Teknoloji Notları
      • 🔐Blockchain
      • 🛫Drone ve IHA Farkları
      • 💻HP Bilgisayar Sorunları
      • 📱HTC Desire 820
      • 📶Nesnelerin İnterneti (IoT)
      • 💸Notebook Satın Alma Notları
      • 🎤Ses Formatları
      • 📥Telefon Rehberini Taşıma
      • 📱Xiaomi Mi A2 Lite
    • 📕Üniversite Notlarım
      • 🧠Neural Network
    • 🛫İnsansız Hava Araçları
      • 🛬Drone ve IHA Farkları
      • 🚩Mission Planner
      • 👁‍🗨 Genel Bakış
        • 📙Dökümanlar
        • 🧰Faydalı Teknolojiler
        • 📺Motivasyon
      • 🛫PixHawk
        • 🔗Faydalı Bağlantılar
        • 🚀İlk Uygulama
        • 👨‍💻Kodlarını Derleme
        • 🔰PixHawk Giriş
    • 🌞Günlük Hayat Notları
      • 🎨Boyama
      • 👟"Skechers" markasındaki “arch fit” ile “massage fit” farkı nedir?
      • 🚘Trafik Cezası Ödeme
    • 🐧Linux
      • 🌟Faydalı Uygulamalar
      • 🔰Linux'a Giriş
      • 💖Kısayollar
        • 💫Masaüstü Kısayolları
        • ✨Kısayol Oluşturma
        • 🧱Temel Kısayollar
      • ⛺Genel Notlar
      • 📦Uygulama Notları
      • 🖤Terminal Notlarım
        • ✨Diğer Terminal Notları
        • ⏬Terminal İndiricileri
        • 👨‍💻Terminal Komutları
        • 👷‍♂️Uygulama Kurulumları
        • 🤞Terminal Numaraları
        • 🎨Terminal Teması
      • 👨‍🔧Yapılandırma Ayarları
      • 👨‍💻Geliştirici Notları
        • 👮‍♂️Dosya İzinleri
        • 📂Dosya Yönetimi
        • 👣Gnome Notlarım
        • 💎Kernel Güncelleme
        • 👨‍💼Pencere Yönetimi
        • 🚧Process Notlarım
      • 🐛Hata Notları
    • 📱Android
      • 🚩Çalışma Yolu
      • 🔰Android'e Giriş
        • 🏁Activity launch modes
        • ⭐Activity Örnekleri
        • 📃Activity ve Intent'ler
        • 💫Activity Yaşam Döngüsü
        • 🏹Implicit intents
      • 🧱Temel Bilgiler
        • 🌍Global Değişkenler
        • 👮‍♂️İzinlerin Yönetimi
      • ✨Görsel Arayüz
        • 🗨️AlertDialog
        • 🍱Fragment
          • 🏗️Oluşturma | Fragment
        • 🎪Android'de Animasyonlar
        • 🧐Component İsimleri
        • 🍱Menu
        • 🗂️RcycleView
      • 👨‍💼Verilerin Yönetimi
        • 📂Dosya İşlemleri
        • 📜JSON Yönetimi
        • 🎃Kotlin RoomDB
        • 💽Room Database
        • 👐Shared Preferences
        • 🗃️SQLite
        • 🔸Veri Saklama Yöntemleri
      • 🌄Arka planda Çalışma
        • ⏰Alarm
        • 💫Asenkron İşlemler
          • 🌃Asenkrona Giriş
          • 🔂AsyncTask Loader
          • 🔁AsyncTask
        • 👮‍♂️Çalışma Prensibi
        • 👷‍♂️Kotlin Coroutine
        • 🔔Notification
          • 🏗️Oluşturma | Notification
          • ✍️Yazılı Notlar | Notification
        • 🌠MultiThreading
        • 👷‍♂️WorkManager (👨‍🔬)
      • 📶Haberleşme İşlemleri
        • 📢Broadcast
          • 👣Giriş | Broadcast
          • 🏗️Oluşturma | Broadcast
          • 📡Receiver | Broadcast
        • ⏬Dosya İndirme
        • 💌HTTP İstekleri
        • 🌍İnternete Bağlanma
        • 📶WiFi P2P (Direct)
      • 🪐Servisler
        • 🌞Foreground Service
        • 🐥Intent Service
        • 🔰Servislere Giriş
      • 🥴Düzensiz Notlar
        • 🔰Giriş
        • 🐞Hata Notları
        • 👶İlk Etkileşimli UI
        • ⏬Scrolling views
        • 🔤TextView
        • 📜XML Örneği
      • 🔗Karışık Bağlantılar
      • 📝Dokümanlar
    • 📲Kotlin
      • 💎Değişkenler
        • 🐣Erişim | Değişkenler
        • 🚴‍♂️Giriş | Değişkenler
        • ⭐Özellikler | Değişkenler
      • 💎RegEx
      • 👮‍♂️Koşullar
      • 💠Fonksiyonlar
      • 🚅Diziler
      • 🍎Sınıflar
      • 📂Dosya İşlemleri
      • 🌇Coroutine
        • 🔗Bağlantılar| Coroutine
        • 🏹Dispatcher | Coroutine
        • 💨Flow | Coroutine
        • 🚴‍♂️Giriş | Coroutine
        • 🌄Scope | Coroutine
        • 🦄Singleton Yapısı
      • 📑Yazım Kuralları
      • 🏃‍♂️Hızlı Notlar
      • 🧐Kaynaklar
      • 🔗Faydalı Kaynaklar
    • 🪟Windows
      • 🔰Windows'a Giriş
        • 📂Önemli Dizinler
        • 🌠Genel Notlar
        • 👷‍ Windows 10 Kurulumu
        • 🔨Sistem Ayarları
      • 💞Kısayollar
        • 💘Varsayılan Kısayollar
        • 🌱YHotkeys
      • 🚀Verimlilik Notlarım
        • 📂Dosya Gezginini Geliştirme
        • ⚡Bilgisayarı Hızlandırma
        • 👨‍💼Paket Yöneticisi
        • 🌈Faydalı Uygulamalar
        • 🔏VPN Bağlantısı
      • 🖤Terminal İşlemleri
        • 🙋‍♂️Komut İstemine Giriş
        • 📜CMD Kod Parçaları
        • 🤎CMD Komutları
        • 👨‍💻PowerShell
      • 💫AutoHotkey
        • 🔰Giriş
        • 🧱Temel İşlemler
        • 🔡String İşlemleri
        • 🚄Diziler
        • 💞Kısayollar
        • 📂Dosya İşlemleri
        • ⚙️Yapılandırma Dosyası
        • 🖤Komut İstemi Arayüzü
        • 🌃Görsel Arayüz Oluşturma
        • 🎌Tavsiyelerim
        • 👨‍💻Scriptler
        • ⏬Dosya İndirme
      • 👨‍💻Geliştirici Notlarım
        • ✨Sağ Tık Menüsü Düzenleme Programım
        • 🧙‍ Gizlenmiş GodMode
        • 🐞Hata Notları
        • 🛍️Mağaza Uygulamalarını Komutla Açma
        • 🌃Ortam Değişkenleri
        • 👨‍💻PowerShell 6.0
        • ⏺️RegEdit Ayarları
      • 🐧Windows'ta Linux
        • 🐞Hata Notlarım
        • 🌇Windows Subsystem for Linux (WSL)
    • 🌐Web
      • 👨‍💼Web Sitesi Yönetimi
      • 🌎Natro Hosting
      • 🧇Wordpress
        • 🏠Localhost'ta Wordpress
        • 🐞Wordpress Hata Notları
        • 🔗Wordpress için Linkler
      • 🕸️Ağ Teknolojieri
        • 💌HTTP Protokolü
        • 📶Message Queueing Telemetry Transport
        • 🔌Remote Procedure Call
        • ⚓Webhooks
        • 🕳️Websocket
      • 🧰Web Teknolojileri
        • 🅰️Angular
        • 🔥Django
        • 🌶️Flask
        • ⚛️React
        • 🦇Vue
      • 👨‍💻Web Programlama
        • 🐜Ant Design
        • 📜Javascript
        • 🔶JQuery
        • 🐘PHP
        • 💚Nodejs
          • 🔰Nodejs Giriş
          • 🧱Nodejs Temelleri
          • 🥬NPM
        • ⚛️React
      • 💜Heroku
      • 🤖Selenium
      • 💳OpenCart
      • 🥴Karışık Notlar
    • ☕Java
      • 🔰Java'ya Giriş
        • 👶Başlangıç
        • 👩‍💻Javada İlk Program
        • 📝JavaDoc
        • ⏬NetBeans Kurulumu
      • 🧱Temeller
        • 👮‍♀️Koşul Yapıları
        • 💎Değişkenler
        • 📇Dizi İşlemleri
        • 📁Dosya İşlemleri
        • 🔗Harici Bağlantılar
        • 🤯İleri Seviye
        • 💠Method ve Classlar
        • 💠Scanner Metotları
        • 🔡String İşlemleri
      • 📝JavaDoc
      • 🏗️Obje Yapıları
        • 🏗️Builder
        • ⭐Enum
      • 🌆JavaFX
        • 🌃GUI Tasarımı | JavaFX
        • 🏃‍♂️Hızlı Notlar | JavaFX
        • 👨‍💻Kod Notları | JavaFX
      • ⛺Diğer Notlar
        • 🕸️Ağ Programlama
        • 💠GUI Component Metotları
        • ⭐Swing ile GUI Programlama
      • 🚧GroupLayouts
        • 🤯GroupLayout Detaylar
        • ⭐GroupLayout Örnekleri
        • 🔰GroupLayout'u Tanıyalım
    • ⭐Projeler
    • 🧠Yapay Zeka
      • 🕵️‍♂️Tensorflow Object Detection API ile Obje Bulma
      • 🕵️‍♂️Tensorflow Object Detection API
        • 📢Başlamadan Önce | TODP
        • 🌠Colab Üzerinden Tensorflow
        • 📂Dizin Yapısını Oluşturma
        • 🐞Hata Notları
        • 💷LabelImg Kurulumu
        • 👨‍🏫Modeli Eğitime
        • 👨‍🏫Özelleştirilmiş Tensorflow Obje Algılayıcısı Eğitme
        • 🍢Pipeline Yapılandırma
        • 🚧Tensorflow Algılama Modellerinin Kurulumu
        • 📃Tensorflow Kayıtları Oluşturma
        • 🚧Tensorflow Kurulumu
      • 📊Veri Bilimi
        • 📅CSV | Veri Bilimi
        • 🔰Giriş | Veri Bilimi
        • 📚GZip | Veri Bilimi
        • 📜JSON | Veri Bilimi
        • 🔢NumPy | Veri Bilimi
        • 🚅Pickle | Veri Bilimi
      • 👨‍💼Veri Yönetimi
        • 📈Matplotlib | Veri Yönetimi
        • 🗃️SQL | Veri Yönetimi
      • 🔢NumPy | Veri Yönetimi
        • 🚅Diziler | Numpy
        • 🔰Giriş | Numpy
        • 🥴Karışık Notlar
        • 👷‍♂️Numpy İşlemleri
      • 🐼Pandas | Veri Yönetimi
        • 🔗Faydalı Kaynaklar | Pandas
        • 🔰Giriş | Pandas
        • 💨Hızlı Notlar 2 | Pandas
        • 🏃‍♂️Hızlı Notlar | Pandas
        • 📊Tablo İşlemleri | Pandas
        • 🗃️Veri İşlemleri | Pandas
      • 🤯DeepLarning.ai
        • 👨‍💻Tensorflow Kod Notları
        • 📝Kişisel Notlarım
          • ⏬Coursera Çalışma Dosyalarını İndirme
          • 📉Logistic Regression
        • 🏗️Makine Öğrenimi Modeli Oluşturma
          • 👨‍🔧Hatalara Karşı Çözümler
          • ✨Model Eğitim Süreci
          • 👣Model Oluşturma Adımları
          • 🔤Terimler
        • 🥅Convolutional Neural Networks
          • 🍟CNN Ara İşlemleri
          • 🔰CNN Giriş
          • 💒CNN Mimarisi
          • 👁‍🗨 Klasik CNN Modellerini İnceleme
          • 👨‍💻Kod Notları
          • ⭐Sık Kullanılan CNN Modelleri
          • 🧱CNN Terimler
      • 🗃️Veri Kümeleri
      • 👨‍🏫Makine Öğrenimi
        • 🏂Makine Öğrenimine Giriş
        • 📉SciKit-Learn
        • 🚴‍♂️SciKit-Learn'e Giriş
      • ⚡Tensorflow (👨‍🔬 Beta)
      • 🚀Kişisel Projelerim
        • 🧠Yapay Zeka Çalışmalarım
        • 🕵️‍♂️Fotoşop Bulma
        • 🚗YSelf Driven Car Course
        • 🕵️‍♂️YTensorflow Object Detection API
        • ⭐Colab Üzerinden Tensorflow
      • 🌟Faydalı Kaynaklar
      • ⭐Ek Bilgiler
      • 🕵️‍♂️Araştırmalarım
    • 📜Diger
Powered by GitBook

© 2024 ~ Yunus Emre Ak ~ yEmreAk

On this page
  • 1. React Native Geliştirme Süreci
  • 2. Deployment Süreci
  • 3. Backend ve API Yönetimi
  • 4. Geliştirme Ortamı

Was this helpful?

  1. Blog
  2. Yapay Zeka ile Arastirmalarim

React Native Tabanlı Hızlı Geliştirme Süreci

PreviousFesleğen ve Nane Yetiştirme Yöntemleri ve İpuçlarıNextReact Uygulamalarında Modern State Yönetimi ve Entegrasyon Saklama Yöntemleri

Last updated 2 months ago

Was this helpful?

1. React Native Geliştirme Süreci

Kritik Mobil Kütüphaneler ve Araçlar

  • Paylaşım Uzantısı (Share Extension): Uygulamanıza diğer uygulamalardan içerik paylaşabilmek için iOS ve Android’de “share extension” desteği eklemeniz gerekir. Bu, React Native’de özel yerel kod yazmayı gerektirebilecek zorlu bir konudur. Ana uygulama ve paylaşım uzantısı ayrı süreçler olduğu için, aralarında veri paylaşmak için App Group gibi mekanizmalar kullanılmalı veya paylaşım sırasında sunucuya veri gönderip ana uygulama açıldığında alınmalıdır (). Bu amaçla react-native-receive-sharing-intent gibi kütüphaneler kullanılabilir. Expo kullanacaksanız, expo-share-extension adlı config plugin ile iOS paylaşım uzantısı eklemek mümkündür () ancak bu, Expo’nun derleme aşamasında native kod üretmesiyle sağlandığından, kurulum ve yapılandırma adımları gerektirir.

  • Durum Yönetimi (State Management): Mobil uygulamanızın durumunu yönetmek için ölçeğinize uygun bir kütüphane seçmelisiniz. Küçük ve basit uygulamalarda React’in yerleşik Context API + Hooks yaklaşımı yeterli olabilir (). Orta ve büyük ölçekli uygulamalarda ise yıllardır popüler olan Redux tercih edilebilir – özellikle web tarafında Redux kullanmaya alışkın geliştiriciler için merkezi ve tahmin edilebilir bir durum yönetimi sunar (). Redux’un dezavantajı bol miktarda şablon kod (boilerplate) gerektirmesi ve karmaşıklığıdır (). Daha hafif alternatifler olarak Zustand veya MobX gibi kütüphaneler, daha az kod ile global durum yönetimi sağlar; bu kütüphaneler minimal yapıda olup gereksiz yeniden render’ları önleyerek performansı artırabilir (). Ancak Redux kadar geniş eklenti/araç ekosistemine sahip olmayabilirler (). Ayrıca Recoil veya Jotai gibi modern state management kütüphaneleri de mevcuttur – hangisinin en uygun olacağı, projenizin karmaşıklığına ve ekibinizin deneyimine bağlıdır ().

  • Ses Kaydı ve Çalma: React Native içinde ses kaydı için platforma özel API’leri çağıran üçüncü parti kütüphaneler kullanılır. Eğer Expo kullanıyorsanız, expo-av modülü üzerinden Audio.Recording API’sini kullanarak kolayca ses kaydı yapabilirsiniz (). Expo, kayıt sırasında mikrofon izni isteme işlemlerini de kolaylaştırır. Standart React Native (CLI) projesinde ise react-native-audio-recorder-player gibi kütüphaneler hem iOS hem Android’de ses kaydedip oynatmak için yaygın olarak kullanılıyor – bu kütüphane her iki platformda da temel kayıt ve oynatma işlevlerini basit bir API ile sunar (). Bu tür kütüphaneler, genellikle ses dosyasını cihazda kaydederek yolunu verir ve sonrasında bu dosyayı sunucunuza yükleyebilirsiniz. Not: expo-av hızlı prototipleme için pratik olsa da, çok yüksek kalite veya özel gereksinimler için kısıtları olabilir (ör. örnekleme hızı sınırlamaları, ses dalga formu çıkarma gibi ileri konular) (). İhtiyacınıza göre, basit kullanımda expo-av hızlı çözüm sunarken, daha gelişmiş senaryolarda native kütüphaneye geçmek gerekebilir.

  • Navigasyon (Gezinme): Birden fazla ekran arasında geçiş yapabilmek için en popüler çözüm React Navigation kütüphanesidir. React Navigation, yığın (stack), sekme (tab) ve çekmece (drawer) gibi farklı navigasyon yapıları sağlar ve derin link (deep linking) desteğine sahiptir (). Örneğin, derin link sayesinde uygulamanız kapalıyken bile bir URL ile belirli bir ekranı açabilirsiniz (). Ayrıca iç içe navigasyonlar (örn. bir tab navigator içinde bir stack navigator) kurarak karmaşık ekran hiyerarşilerini yönetebilirsiniz (). React Navigation, güçlü ve esnek bir yapıya sahip olmasına rağmen JavaScript tabanlıdır ve performansı çoğu senaryoda yeterlidir (). Bir alternatif olarak, react-native-navigation (Wix) doğrudan native navigasyon bileşenlerini kullanır ve büyük, tamamen native hisli uygulamalar için tercih edilebilir () ancak kullanımı React Navigation’a kıyasla daha zordur ve genellikle mevcut native projelere RN entegre edilirken kullanılır. Eğer Expo kullanıyorsanız, React Navigation zaten önerilen çözüm olacaktır. Hatta Expo ekosisteminde Expo Router adıyla, Next.js benzeri dosya tabanlı bir yönlendirme sistemi de mevcuttur; Expo Router da altyapıda React Navigation kullandığı için istediğinizde her iki yaklaşımın avantajlarını birleştirebilirsiniz.

  • Yerel Depolama (Local Storage): Uygulamanızda kullanıcı tercihleri veya offline veriler gibi kalıcı tutulacak küçük veriler için AsyncStorage veya MMKV kullanabilirsiniz. AsyncStorage, React Native ile gelen (artık ayrı paket olarak çıkan) basit bir anahtar-değer depolama API’sidir ve ek bir kurulum gerektirmez. Ancak performans olarak çok yüksek hızlı değildir ve büyük veri setlerinde yavaşlayabilir (). Alternatif olarak, WeChat tarafından geliştirilen MMKV kütüphanesi, C++ tabanlı bir depolama olup AsyncStorage’a kıyasla ~20-30 kat daha hızlı okuma/yazma yapabilir ve büyük verilerle çalışırken bile verimli ve ölçeklenebilirdir () (). MMKV, şifreleme desteğiyle daha güvenli bir depolama da sunar. Dezavantajı, projeye ek bir yerel modül entegre etmeyi gerektirmesidir (Expo’da config plugin ile eklenebilir). Uygulamanızın ihtiyaçlarına göre seçim yapabilirsiniz: Küçük ayarlar ve basit veriler için AsyncStorage’ın basitliği yeterli olabilir, ancak yüksek performans kritikse MMKV tercih edilebilir, zira MMKV hem hız hem de büyük veriyi kaldırabilme açısından üstün bir çözüm sunuyor (). Bunların dışında, daha karmaşık veri yapıları için SQLite tabanlı çözümler (örn. react-native-sqlite-storage veya WatermelonDB) ya da NoSQL gömülü veritabanları (örn. Realm) da kullanılabilir – ancak Supabase’i backend olarak kullanacağınız için çoğu veriyi sunucuda tutup, mobilde sadece gerektiğinde önbellekleme yapmanız yeterli olacaktır.

Expo mu, React Native CLI mı?

Hızlı geliştirme için Expo genellikle öne çıkan bir seçenektir. Expo, React Native projelerini kolay başlatmak ve çalıştırmak için bir çerçeve ve hizmet platformu sunar. Eğer projenizin gereksinimleri Expo SDK’sının sunduğu özellikler içinde kalıyorsa, Expo kullanmak size ciddi ölçüde hız kazandırabilir. Örneğin, Expo ile hazır gelen API’ler (kamera, bildirim, konum vb.), OTA (over-the-air) güncelleme özelliği ve Expo Go uygulaması üzerinden anında cihazda test imkanı gibi avantajlar vardır () (). Expo, özellikle hızlı prototipleme ve MVP geliştirme için idealdir (). Ayrıca native kod bilginiz olmasa da, Expo birçok karmaşık adımı soyutlar – build ayarlarıyla uğraşmak yerine JavaScript kodunuza odaklanabilirsiniz.

Buna karşın Bare Workflow (React Native CLI), projeye tam hakimiyet sağlar. Eğer uygulamanız özelleştirilmiş native modüller gerektiriyorsa veya Expo’nun dışında kalan bir SDK kullanmak istiyorsanız, klasik React Native CLI ile projeyi başlatmak daha uygun olabilir (). Örneğin, native paylaşım uzantısı gibi Expo’da henüz tam desteklenmeyen bir özelliği uygulamak için, Expo projesini “prebuild” edip yine native kod eklemek gerekebilir. React Native CLI ile başlayan bir projede ise iOS ve Android klasörlerine doğrudan erişip dilediğiniz yerel kod değişikliklerini yapabilirsiniz. Kısaca, Expo size hız ve kolaylık sağlarken bazı ileri seviye konularda kısıt olabilir; CLI ise esneklik ve kontrol sağlarken başlangıçta daha fazla kurulum/configürasyon uğraşı gerektirir ().

Performans ve boyut konularında, geçmişte Expo ile derlenen uygulamaların boyutunun büyük olması gibi dezavantajlar konuşulsa da, artık Expo EAS Build sistemi ihtiyaç olmayan modülleri dahil etmiyor. Yani modern Expo ile üretilen .apk/.ipa dosyalarının boyutu, eşdeğer bare RN uygulamasıyla neredeyse aynıdır ve çalışırken bir performans dezavantajı yoktur (). Dolayısıyla seçiminizi performanstan ziyade gereksinimler ve geliştirme deneyimi belirlemeli: Mevcut teknoloji setiniz web ağırlıklı (Next.js) olduğundan, Expo’nun sunduğu hızlı başlangıç ve benzer geliştirme deneyimi (örneğin dosya tabanlı yönlendirme için Expo Router, hot-reload, vb.) işinizi hızlandıracaktır. Ancak paylaşım uzantısı gibi özel bir ihtiyaç için Expo’ya config plugin ekleyip eject (çıkarma) işlemi yapmanız gerekebileceğini unutmayın. Özetle, projeniz Expo’nun sınırları içinde kalacaksa Expo ile başlayın, aksi halde en baştan bare proje ile ilerleyin () ().

Gerçek Cihazda Lokal Test (iPhone 11 Pro)

Geliştirme sırasında uygulamayı gerçek bir cihazda test etmek, emülatörlere kıyasla size daha doğru sonuçlar verecektir (özellikle kamera, ses, sensör gibi donanım özelliklerini test etmek için). iPhone 11 Pro cihazınızda uygulamayı çalıştırmanın birkaç yolu var:

  • Expo ile: Eğer Expo kullanıyorsanız, en hızlı yol Expo Go uygulamasını kullanmaktır. Bilgisayarınızda expo start komutunu çalıştırdıktan sonra terminalde çıkan QR kodunu iPhone kameranız veya Expo Go içinden okutarak uygulamanızı anında cihazınızda çalıştırabilirsiniz (). Bu, aynı ağ üzerindeki cihaz ile bilgisayar arasında canlı güncellemeyi destekler – yaptığınız kod değişiklikleri anında cihaza yansır (Fast Refresh sayesinde). Cihazınızı USB ile bağlamaya gerek kalmadan, Wi-Fi üzerinden test edebilirsiniz. Ayrıca Expo, Apple Developer hesabı gerektirmeden bu yolu sağladığı için iOS cihazda geliştirme bariyerini azaltır.

  • React Native CLI ile: Bare React Native proje kullanıyorsanız, iPhone cihazınızı USB ile Mac bilgisayarınıza bağlayarak Xcode üzerinden çalıştırabilirsiniz. Xcode’da projenizi açıp hedef olarak bağlı iPhone’u seçtikten sonra Build & Run yapmanız yeterlidir. İlk seferde cihazınızı geliştirici olarak yetkilendirmeniz gerekebilir (cihazınızı “trusted developer” olarak ayarlamalısınız). Alternatif olarak, terminalden npx react-native run-ios --device komutuyla doğrudan bağlı cihaza derleyip göndermek de mümkündür. Bu yöntem için Apple Developer hesabınızla bir provisioning profile ayarlamış olmanız gerekebilir; ancak kendi cihazınızda test için ücretsiz hesapla da build alabilirsiniz. Gerçek cihazda çalıştırdığınız uygulama Metro Bundler’a bağlanarak kodu bilgisayarınızdan çekmeye devam eder, bu sayede kod değişikliklerinde hızlı yenileme yine mümkündür.

  • Hata ayıklama (Debugging): Hem Expo hem bare RN’de hata ayıklamak için React Native Debugger veya Chrome geliştirici konsolunu kullanabilirsiniz. Cihazda uygulama çalışırken, cihazı sallayarak (veya geliştirme menüsünü başka şekilde açarak) Debug Remote JS seçeneğini etkinleştirebilir, böylece console.log çıktıları ve hata mesajları bilgisayarınızdaki tarayıcı konsolunda görünebilir. Daha gelişmiş bir yöntem olarak, Flipper aracını kullanabilirsiniz. Flipper, React Native uygulamalar için geniş özellikler sunan bir debug aracıdır (network log, layout inceleme, vs.). Gerçek cihazı Flipper’a bağlamak için debug build’ini kullanmanız yeterli olacaktır.

Not: Uygulamayı yayınlamadan önce mutlaka farklı cihaz ve platformlarda (farklı iPhone modelleri, Android cihazlar) test etmeyi unutmayın. Geliştirme sırasında iPhone 11 Pro’yu esas almanız iyi bir başlangıç, ancak ekran boyutu, iOS/Android farkları gibi konular için ekstra testler gerekecektir.

2. Deployment Süreci

App Store & Google Play’e Hızlı Deployment

Mobil uygulamanızı mağazalarda yayınlama süreci, web’deki Vercel/Next.js dağıtımına kıyasla daha fazla adım içeriyor. Ancak doğru stratejiyle bu süreci olabildiğince hızlı yönetebilirsiniz:

  • Beta testini atlamak mümkün mü? Evet, eğer uygulamanızı yeterince kendi cihazlarınızda veya dahili test kullanıcılarında sınadıysanız, TestFlight’ı kullanmadan doğrudan App Store’da yayınlayabilirsiniz. Apple, Internal Testing adı altında geliştirici takımınızdaki 100 kişiye kadar TestFlight dağıtımını inceleme olmadan yapma imkanı da sunar. Yani isterseniz, uygulamayı önce sadece kendi cihazınıza ve birkaç takım arkadaşınıza TestFlight ile (internal) yükleyip test edebilir, ardından doğrudan App Store’a gönderebilirsiniz. Bu dahili dağıtım onaysız olduğu için hızlıdır; sonrasında App Store’a göndermek kalan tek onay adımı olur. Beta sürecini tamamen pas geçip direkt yayınlamak da mümkündür – tek yapmanız gereken versiyon bilgisini ve metadata’yı düzgün hazırlayıp “Submit for Review” demektir. Onay aldıktan sonra uygulamanız mağazada yayına girecektir. Apple’ın yönergelerine tam uyduğunuzdan emin olursanız (ör. gizlilik politikası, içerik kuralları, uygun ikon/screenshots vb.), onay sürecinde takılma ihtimalini minimize edersiniz.

CI/CD Pipeline ile Otomatik Dağıtım

Manuel olarak her seferinde derleyip mağazalara yüklemek hem vakit alıcı hem hataya açık olabilir. Bunu otomatize ederek, kodunuz belirli bir dala (örneğin main) geldiğinde otomatik olarak yeni bir sürümün derlenip dağıtılmasını sağlayabilirsiniz. Optimize bir CI/CD süreci için aşağıdaki araç ve yaklaşımları değerlendirin:

  • CI Hizmeti Seçimi: Fastlane’i çalıştırmak için bir CI/CD platformuna ihtiyacınız var. İki ana kategori var:

  • Pipeline Adımları:

    1. Build – CI ortamında uygulamayı derleyin. iOS için Xcode yüklü bir macOS runner üzerinde xcodebuild veya Fastlane gym kullanılır; Android için Gradle build. Gerekli yapılandırmaları (örn. signing configs) CI’da ayarlayın. Uygulama sürüm numarasını otomatik artırmak isterseniz bu da Fastlane ile mümkün.

    2. Test – Vakit varsa unit test ve e2e testleri (Detox gibi) entegre edin. Bu, hızdan biraz ödün verse de kaliteyi artırır.

    3. Distribüsyon – Derlenen çıktıyı ilgili mağazaya veya test platformuna yükleyin. Örneğin her ana branch birleşmesinde otomatik olarak TestFlight’a gönderip ekibinizle test edebilir, belirli tag’lerde ise prod olarak App Store/Play Store’a yükleyebilirsiniz.

    4. Onay Süreci – Google Play’e yükleme API ile tamamen otomatik yapılabilir (prod’da bile). Apple tarafında App Store Connect API ile yükleme otomatik, ancak App Store yayınlama için hala manuel onay gerekebilir. Yine de Fastlane deliver komutu ile metadata dahil her şeyi kodla gönderip bir tuşa basarak sunma noktasına gelebilirsiniz.

3. Backend ve API Yönetimi

AWS Lambda’yı Verimli Kullanma

Mevcut backend’iniz Supabase (PostgreSQL + Auth + Storage) üzerinde kurulu. AWS Lambda’yı bunun yanında kullanarak sunucusuz fonksiyonlarınızı ölçeklenebilir ve yönetimi kolay bir şekilde yazabilirsiniz. AWS Lambda’dan maksimum verimi almak için şu noktalara dikkat edin:

  • Doğru Dil ve Runtime: Lambda fonksiyonlarınızı Node.js ile yazmak, halihazırda JavaScript/TypeScript kullandığınız için geliştirme hızını artıracaktır. Node.js Lambda’ları özellikle Supabase entegrasyonu gibi işlemlerde uygundur, çünkü Supabase’in resmi JavaScript kütüphanesini kullanabilirsiniz. Alternatif olarak Python da düşünülebilir (zengin bilimsel/işlem kütüphaneleri için), ama iki farklı dilde geliştirme hızınızı yavaşlatabilir. Node.js 18.x runtime’ı hızlı cold start ve geniş ekosistem avantajı sunar.

  • Projeyi Yapılandırma: Birden fazla Lambda fonksiyonunuz olacaksa, bunları yönetmek için bir araç kullanmak verimli olur. Örneğin Serverless Framework veya AWS SAM (Serverless Application Model) ile tüm fonksiyonlarınızı ve gerekli AWS kaynaklarını (API Gateway, S3 tetikleyici vs.) bir konfigürasyon dosyasında tanımlayabilirsiniz. Bu, dağıtımı otomatikleştirir ve altyapıyı kod olarak versiyonlamanızı sağlar. Örneğin, serverless.yml içinde fonksiyonları ve tetikleyicilerini tanımlayıp serverless deploy diyerek hepsini tek seferde AWS’ye aktarabilirsiniz. Küçük bir proje için şart değil, ancak büyüdükçe düzen getirecektir.

  • Soğuk Başlangıç (Cold Start) Optimizasyonu: AWS Lambda, talep gelmediğinde fonksiyonu kapatır ve gerekince yeniden başlatır. Bu ilk başlatma gecikmesine cold start denir. Node.js genellikle soğuk başlangıç süresi kısa bir runtime’dır, ancak fonksiyonunuzun boyutu bunu etkiler. Mümkün olduğunca ufak boyutlu paketler oluşturun – kullanılmayan bağımlılıkları eklemeyin, büyük kütüphaneleri (özellikle devDependencies) pakete dahil etmeyin. Birden fazla fonksiyonunuz aynı kodları kullanıyorsa (örneğin aynı supabase client kodu vs.), bunu Lambda Layers olarak ayırmayı düşünebilirsiniz. Fakat ölçülü kullanın, zira layer yükleme de bir miktar overhead getirebilir. Cold start’ın çok problem olacağını düşünüyorsanız (örn. kullanıcı bekleyemeyecek kadar kritik bir işlem), Lambda için Provisioned Concurrency açılabilir; bu, belirli sayıda instancetan hep hazır tutarak ilk isteğin gecikmesini azaltır – ancak sürekli maliyet getirir. Genelde hızlı API çağrıları için standard (Provisioned olmayan) Lambda yeterli olacaktır.

  • Fonksiyon Tasarımı: Lambda fonksiyonlarınızı olabildiğince tek bir göreve odaklı yazın. Örneğin bir fonksiyon sadece ses dosyasını işlesin, diğeri sadece veritabanına yazsın gibi ayrımlar yapabilirsiniz. Ancak aşırı mikro-servis de karmaşıklığı artırabilir. Belki modüler bir yaklaşım: “SesYukleVeIsle” şeklinde bir API endpoint Lambda’sı, içinde gerekirse alt adımlar yapabilir. AWS Lambda’nın 15 dakikaya kadar çalışma süresi var – ses işleme genelde birkaç saniye süreceğinden bu limit geniş sayılır. Yine de, eğer bazı işlemler uzun sürecekse bunları asenkron yapmaya çalışın (mesela Lambda içinde bir işlem başlatıp sonucu döndürmeden önce beklemek yerine kuyruğa atmak gibi tasarımlar, ancak bu belki sizin durumunuzda gerekli olmayacak).

Özetle, AWS Lambda’yı etkin kullanmak için otomatize dağıtım, güvenli anahtar yönetimi ve performans optimizasyonuna odaklanın. Cursor IDE’de geliştirme yaparken bir yandan terminalden AWS CLI kullanarak fonksiyonlarınızı güncelleyip (aws lambda update-function-code komutu ile) logları takip edebilir, hatta gerektiğinde SAM CLI ile lokal testler yapabilirsiniz.

Supabase ile Entegrasyon

Supabase arka ucunuz olarak kalmaya devam edecek, Lambda’lar ise onun yanındaki yardımcı çalışanlar olacak. Entegrasyonu en iyi şekilde sağlamak için şu prensiplere dikkat edin:

  • Supabase İstemcisini Kullanın: Lambda fonksiyonlarınız içinde Supabase’e istek yapmak için Supabase’in resmi @supabase/supabase-js paketini kullanabilirsiniz. Bunu kullanmak, REST çağrılarını elle yapmaktan daha kolaydır ve gerçek zamanlı (realtime) özellikleri bile tetikleyebilirsiniz. Yukarıda bahsettiğimiz gibi, Lambda içinde Supabase istemcisini başlatırken Service Role anahtarını kullanın ki güvenlik kısıtlamalarına takılmayın (bu anahtar sadece sunucu ortamında tutulmalı). Supabase istemcisi üzerinden veritabanında istediğiniz sorguları yapabilir, depolama hizmetine dosya yükleyebilir veya güncelleyebilirsiniz.

  • Veritabanı İşlemleri ve RLS: Supabase, Postgres üzerinde Row Level Security (RLS) kurallarıyla çalışıyor olabilir. Lambda’lar genelde arka kapı işlemler yapacağı için Service Role anahtarı ile RLS’yi bypass edebiliyorsunuz. Bu güç sayesinde, Lambda fonksiyonlarınız kullanıcıdan gelecek veriyi alıp gerektiğinde birden fazla tabloya dağıtma veya özel iş kuralları uygulama noktasında serbest olacaktır. Örneğin, bir ses işleme isteği geldiğinde Lambda bunu “İşleniyor” statüsünde bir veritabanı kaydı olarak oluşturup, iş bitince statüyü “Tamam” yapabilir. Bu sırada normalde istemcinin yapamayacağı başka tablolara da (loglar, metrikler vs.) yazabilir.

  • Supabase Edge Functions Alternatifi: Bilgi için not düşmek gerekirse, Supabase son dönemde Edge Functions adını verdiği Deno tabanlı sunucusuz fonksiyon özelliğini devreye aldı. Sizin kullanım senaryonuzda buna pek ihtiyaç yok çünkü AWS Lambda kullanacaksınız, fakat küçük işlerde Supabase Edge Functions doğrudan Supabase altyapısında çalışıp veritabanına çok hızlı erişebilen fonksiyonlar sağlayabilir. Yine de, AWS Lambda dünya genelinde çok daha olgun bir ekosistem ve entegre servisler (Transcribe gibi) sunmasıyla avantajlı.

Ses Kaydı, İşleme ve Geri Bildirim Mekanizması

Bu özellik, uygulamanızın muhtemelen en önemli parçası olacak. Amacınız, kullanıcının mobil uygulamada yaptığı ses kaydını backend’e gönderip orada işlemler yapmak ve sonucunu kullanıcıya iletmek. Bunu en iyi şekilde kurgulamak için adım adım düşünelim:

  1. Ses Kaydının Uygulamadan Gönderimi: Kullanıcı, mobilde ses kaydını başlatıp durdurduğunda, ortaya bir ses dosyası (örn. .m4a uzantılı) çıkacaktır. Bu dosyayı backend’e göndermenin iki yolu var:

    • Doğrudan Lambda’ya upload: Uygulama, bir HTTP isteği ile (muhtemelen multipart/form-data veya base64 encode edilmiş gövde ile) ses dosyasını Lambda’nın API’sine gönderebilir. Dosya boyutu çok büyük değilse (saniyeler mertebesinde konuşma, ~100KB-1MB belki), bu yöntem basit ve yeterlidir. Lambda, isteği alırken dosyayı belleğinde tutup işleyecek, gerekirse geçici bir yere kaydedecektir.

    • Önce bir depolama servisine upload, sonra Lambda tetikle: Bu yöntem özellikle daha uzun veya büyük dosyalar için iyi olur. Örneğin, uygulama kaydı bitince dosyayı doğrudan Supabase Storage veya AWS S3 gibi bir yere yükler. Yükleme tamamlandığında, ilgili depolama servisinin tetikleme mekanizması Lambda’yı çalıştırır. AWS tarafında S3, bir bucket’a dosya eklendiğinde Lambda’yı tetikleyebilir. Supabase Storage şu an doğrudan Lambda tetikleyemez ama Supabase Edge Function ile tetiklenebilir veya dosya yükledikten sonra uygulama ayrıca Lambda’yı çağırabilir (dosyanın URL’sini parametre olarak vererek). S3 yolunu düşünürsek: kullanıcı uygulamadan doğrudan S3’e yükleme yapamaz (imza ister), ancak Lambda bir pre-signed URL oluşturup uygulamaya verebilir, uygulama dosyayı S3’e koyar, sonra Lambda’yı tetikler şeklinde bir akış kurulabilir. Mimari biraz karmaşık görünse de, büyük dosyalar için tavsiye edilen budur.

  2. Ses İşleme (Backend): AWS Lambda bu aşamada devreye giriyor. Ne tür bir işlem yapacağınıza bağlı olarak farklı yaklaşımlar var:

    • Eğer amaç farklı bir işlemse (ör. ses frekans analizi, duygu tespiti vs.), belki özel bir Python kütüphanesi veya bir ML modeli kullanmak gerekebilir. Bu durumda Lambda’nın runtime’ını Python seçip gerekli kütüphaneleri layer olarak eklemek veya AWS’in Machine Learning hizmetlerinden yararlanmak (Amazon Comprehend Medical, Amazon SageMaker vs. entegre) seçenekleri var. Çoğu durumda, konuşmayı metne çevirip sonra metin üzerinde analiz yapmak işinizi görecektir (örn. uygunsuz dil kullanımı analizi, anahtar kelime çıkarımı gibi işlemler metin üzerinde yapılabilir).

    • Örneğin: Kullanıcı bir cümleyi sesli söyledi, uygulama bunu gönderdi, Lambda Transcribe ile “Bu bir testtir” şeklinde metin haline çevirdi. Sonrasında Lambda bu metni alıp Supabase veritabanına kaydedebilir veya direkt yanıt olarak mobil uygulamaya dönebilir.

  3. Geri Bildirim Mekanizması: Kullanıcıya işlemin sonucunu ulaştırmak için iki temel yaklaşım var:

    • Senkron (eşzamanlı) cevap: Bu basit yoldur. Uygulama, Lambda’ya isteği yapar ve Lambda işlemi bitirinceye kadar bekler, sonra sonucu response olarak döner. Örneğin, Lambda ses dosyasını alıp 3 saniye içinde işleyecekse, kullanıcı uygulamada 3 saniyelik bir “yükleniyor” spinner’ı görür ve cevap gelir gelmez sonuç ekranda gösterilir. Bu yöntem, işlem süresi kullanıcı açısından kabul edilebilir düzeydeyse en kolayıdır. Tek HTTP isteği ile tüm süreç hallolur. Ancak Lambda’nın zaman aşımı süresini ve istemci tarafında bekleme süresini çok uzun tutmamak lazım. AWS API Gateway varsayılan timeout’u 30 saniyedir (maximum ~29 sn civarı) – uzun işlemler bunu aşarsa yanıt gelmez. Bu yüzden, eğer en kötü ihtimalle bile 10-15 saniyede iş bitecekse senkron yöntem kullanılabilir.

    • Bir diğer asenkron geri bildirim kanalı push notification olabilir. İşlem uzun sürecekse ve kullanıcı uygulamada beklemek zorunda değilse, iş bitince kullanıcıya push bildirimi atıp “sonuç hazır, uygulamayı aç” diyebilirsiniz. Bunu yapmak için Lambda içinden Apple APNS ve Google FCM servislerine istek gönderme altyapısı kurmak lazım, ki bu da ek uğraş demektir. Supabase yakın zamanda Push desteği getirmedi (henüz yok), ama belki ileride gelebilir. Şu an için en kolay yöntem, uygulama açıkken realtime ile, uygulama arkaplanda ise push ile kombine etmek olabilir.

Sizin önceliğiniz hızlı geliştirme olduğundan, büyük ihtimalle ilk etapta senkron yaklaşımı uygulamak daha kolay ve hızlı olacaktır. Yani: “Kullanıcı kaydı bitir -> Lambda çağır -> Lambda ses dosyasını işle -> Sonucu direkt döndür -> Uygulamada göster”. Bu akışı ayağa kaldırdıktan sonra, gerektiğinde asenkron modele geçebilirsiniz. Örneğin testlerde fark ettiniz ki bazı işlemler 5-10 saniyeyi aşıyor, o zaman API Gateway timeout sorun olabilir veya kullanıcı deneyimi kötüleşebilir; bu durumda işleyişi asenkrona çevirmek (Lambda hemen 202 Accepted döndürsün, işi arkada yapsın, uygulama beklesin) mümkündür.

AWS Servisleri Entegrasyonu: Ses işleme için özellikle önerilen Amazon servislerini de not edelim: Amazon Transcribe konuşma metin dönüşümü için, Amazon Comprehend metin analizi (duygu analizi, anahtar cümle bulma vb.) için kullanılabilir. Örneğin Lambda içinde Transcribe’dan dönen metin Comprehend’e gönderilip otomatik bir özet veya duygu skoru elde edilebilir. Bu tür servisler, API çağrısıyla kolayca entegre olduğundan geliştirme hızınızı kesmez, sadece sonucu anlamlandırmayı kolaylaştırır.

4. Geliştirme Ortamı

Cursor IDE ile AWS Lambda Geliştirme

Cursor IDE, VS Code tabanlı AI destekli bir geliştirme ortamıdır. Bunu avantaja çevirerek AWS Lambda fonksiyonlarınızı daha hızlı geliştirebilir ve yönetebilirsiniz. İşte Cursor ile çalışırken kullanabileceğiniz optimizasyonlar:

  • Proje Yapısını Kurma: Lambda fonksiyonlarınızı geliştirmek için yerel bir proje klasörü oluşturun. Örneğin lambda-functions/ adında bir dizinde her fonksiyon için ayrı dosyalar ve bir yapılandırma (serverless.yml veya template.yaml gibi) bulunsun. Cursor IDE’de bu projeyi açın. Cursor, kod yazarken AI önerileri sunabilir – fonksiyon iskeletini, AWS SDK kullanımını hatta örnek bir Express.js benzeri handler yazımını hızlandırabilir. Örneğin, “Supabase’den veri okuyan bir Lambda fonksiyonu” tarzında bir prompt vererek Cursor’ın size kod taslağı oluşturmasını sağlayabilirsiniz.

  • Sunuculess Framework/SAM ile Entegrasyon: Eğer Serverless Framework kullanıyorsanız, Cursor terminalinde serverless deploy dediğinizde tüm fonksiyonlarınız AWS’ye gidecektir. Bu komutun çıktısını takip edip hataları anında görebilirsiniz. AWS SAM CLI kullanıyorsanız, sam build ve sam deploy --guided komutlarını benzer şekilde çalıştırabilirsiniz. Cursor IDE’nin AI yardımcısı, bu YML dosyalarını yazarken de faydalı olabilir – mesela “S3 tetiklemeli Lambda şablonu” istediğinizde bunu size üretebilir.

  • Kod İnceleme ve Refaktör: Cursor’un AI kabiliyetlerini kullanarak Lambda kodlarınızı iyileştirebilirsiniz. Örneğin bir fonksiyonun kodunu seçip “Bunu optimize et” diye bir komut verirseniz, gereksiz kısımları kaldırma veya daha performanslı yazma konusunda öneriler alabilirsiniz. Ya da “Bu kodda gizli bug var mı?” diye sorup static analysis benzeri bir yanıt elde edebilirsiniz. Bu, deneysel bir yaklaşım olsa da AI yardımcıları bazen gözden kaçan hataları yakalayabiliyor.

  • Takım ile Paylaşım: Cursor IDE tek başına çalıştığınız bir ortam olabilir. CI/CD’de veya farklı bir makinede değişiklik yapıldığında (örneğin GitHub Actions pipeline’ınız Lambda kodunu değiştiriyor olabilir) bunları çekmeyi unutmayın. Cursor, Git entegrasyonu açısından VSCode gibidir. Versiyon kontrolü kullanarak, yaptığınız Lambda kodu değişikliklerini git commit ile kaydedin, repository’nize push edin. AWS Lambda kodu da altyapı koduyla beraber versiyon kontrolünde olmalı ki ileride değişiklikler takip edilebilsin.

Özetle, Cursor IDE’yi bir üretkenlik asistanı gibi kullanın: Terminaliyle AWS araçlarını çalıştırın, AI ile kod yazımını hızlandırın, hataları hızlı tespit edin. Böylece Lambda geliştirme süreciniz klasik yöntemlere göre daha seri olacaktır. Unutmayın, bulutta çalışan kodu debug etmek zor olabilir; mümkün olduğunca yerelde test edip öyle deploy edin. Cursor’un sunduğu konfor, tek bir pencereden kod, terminal ve AI yardımına sahip olmanız – bu da bağlam değiştirme ihtiyacını azaltarak hız kazandırır.

Lokal Geliştirme için Hızlı Workflow Önerisi

Mobil uygulama ve backend fonksiyonlarını birlikte geliştirirken zaman kazanmak için iyi bir çalışma akışı kurmak önemlidir:

  • Ortam Değişkenleri ve Yapılandırma: Hem mobil uygulamanız hem de Lambda fonksiyonlarınız, geliştirme (local/dev), test ve üretim ortamlarında farklı endpoint’lere bağlanacak şekilde olmalı. Örneğin, mobil uygulamanız geliştirme modunda API isteklerini https://localhost:3000 (veya makinenizin IP adresi) gibi bir URL’ye gönderebilir, production’da gerçek API Gateway URL’sine gönderir. Bu geçişi kolay yapmak için .env dosyaları veya build-time config kullanın. Next.js’de .env.local vb. kullanıyordunuz, benzer şekilde RN’de de react-native-config kütüphanesiyle ortama göre değişken yükleyebilirsiniz.

  • Eş Zamanlı Çalıştırma: Geliştirme sırasında, Metro Bundler’ı (npm run ios veya expo start ile) ve Lambda local server’ınızı aynı anda çalıştırın. Lambda’ları local’de test etmek için basit bir yöntem, Node.js ile küçük bir web sunucusu kurmaktır. Örneğin express veya aws-serverless-express kullanarak Lambda fonksiyonunuzu localde bir Express endpoint’i olarak ayağa kaldırabilirsiniz. Bu sunucu 3000 portunda bekler, mobil uygulamanız da local API’ye istek atar. iOS cihazdan bilgisayarınızdaki local sunucuya istek yapmak için, bilgisayarınızla aynı Wi-Fi’da olduğundan emin olun ve bilgisayarın IP adresini kullanın (localhost cihazın kendisine bakacağı için çalışmaz, onun yerine 192.168.x.x gibi IP gerekir). Expo kullanıyorsanız, expo start çıktısında LAN bağlantısı kurarak bu erişimi kolaylaştırabilirsiniz.

  • Hızlı Yenileme: React Native tarafında zaten fast refresh ile UI değişikliklerini anında görüyorsunuz. Backend tarafında da değişiklik yapıp kaydettiğinizde hızlıca test etmenin yolunu kurun. Örneğin local Express sunucunuzu nodemon ile çalıştırırsanız, dosya değişince yeniden başlatır. Veya SAM CLI’nın sam local start-api komutu ile template.yml’ınızı kullanarak local API Gateway emülatörü çalıştırabilirsiniz – kod değişince yeniden deploy etmek gerekebilir ama SAM’da da sam sync gibi bir özellik geliyor/var. Basit tutmak adına, belki her kritik değişiklikte bir deploy da edebilirsiniz, ama bu geliştirme hızını yavaşlatır.

  • Testler: Zaman kısıtınız olsa da, kritik fonksiyonlar için basit testler yazmak uzun vadede hız kazandırır. Örneğin ses işleme Lambda’sının belirli bir örnek girdi için beklenen çıktıyı döndürdüğünü otomatik test eden bir betik hazırlayın. Bunu yerelde çalıştırarak (CI olmadan bile) doğrulayabilirsiniz. Mobil tarafta da temel bileşenlerin render testleri veya önemli fonksiyonların unit testleri olursa, refactor sırasında güvende olursunuz.

  • CI/CD Geliştirme Ortamına Dağıtım: Otomatik pipeline’ınız sadece prod için değil, bir de staging (hazırlık) ortamı için çalışabilir. Örneğin main branch’a push’ladığınızda uygulamayı TestFlight ve Internal Test (Play) ile dağıtabilirsiniz. Bu sayede gerçek cihazda fakat dağıtım üzerinden denemeler yapabilirsiniz. Sürekli gerçek mağaza kurulumu yapmaktansa, CI’nın ürettiği bir Testflight build’ini cihazınıza yükleyip test etmek de hızlı geri bildirim verir.

  • Hatayı Tespit ve Giderme: Geliştirme sürecinde hızlı olmak kadar, sorunları hızlı görmek de önemli. Bunun için mobil uygulamada hata yakalama mekanizmalarını (ErrorBoundary gibi) kullanın ve gerekiyorsa Sentry gibi bir hata takip aracını entegre edin (geliştirme sırasında konsola düşer ama testlerde yakalayabilir). Backend’de Lambda’lar için CloudWatch loglarını düzenli kontrol edin, hatta aws logs tail komutunu development modunda sürekli çalıştırıp log akışını izleyin. Böylece Lambda’da beklenmedik bir hata olursa anında fark edersiniz.

  • Dokümantasyon ve Notlar: Hızlı koşarken bazı config detaylarını unutabilirsiniz, bu yüzden README benzeri bir dosyada önemli komutlar ve işlemleri listeleyin (örn. “Yerelde backend’i çalıştırmak için ...”, “CI’da çevresel değişkenleri eklemek için ...”). Bu hem size hem olası takım arkadaşlarına yol gösterir.

Sonuç olarak, “hızlı geliştirme” hedefine ulaşmak için paralel ve entegre bir çalışma tarzı kurmalısınız. Cursor IDE bu sürecin merkezinde yer alacak: Aynı anda mobil kodu ve Lambda kodunu açabilir, ikisi arasında hızlı geçiş yapabilirsiniz. Örneğin bir API sözleşmesi değişikliğinde (yeni bir JSON alan eklemek gibi), hem Lambda kodunu hem RN kodunu yan yana güncelleyip anında test edebilirsiniz.

Ayrıca, AI desteğini ufak şeyler için kullanmaktan çekinmeyin: “Şu JSON’ı TypeScript tipine çevir” veya “Şu hata mesajına göre olası sorunu bul” gibi istekler, zaman kazandırabilir. Yine de AI’nın her çıktısını doğrulayın; bazen ikna edici ama yanlış cevaplar verebilir.


Tüm bu önerilerle birlikte, senaryonuza uygun en iyi pratikleri bir araya getirdik. Önceliklendirme yaparsak: İlk olarak React Native app’inizi temel fonksiyonlarıyla ayağa kaldırıp Expo ile hızlıca cihazınızda çalışır hale getirin. Aynı anda basit bir Lambda (örneğin “Hello World”) yazıp API Gateway üzerinden uygulamaya bağlanmayı deneyin. Sonrasında kritik kütüphaneleri entegre edin (ses kaydı, navigasyon vs.), Lambda tarafında da gerçek işleve doğru geliştirin (ses dosyasını işleyip sabit bir cevap dönen prototip -> gerçek Transcribe entegrasyonu -> sonuçları Supabase’e kaydetme gibi adımlar). Her adımı manuel dağıtmak yerine, CI/CD’yi erken kurmak da uzun vadede sizi hızlandıracak – başta biraz zaman ayırıp Fastlane ve Actions ayarlarını yaparsanız, ileride “kaç saat derleme ile uğraştık” diye düşünmezsiniz.

En nihayetinde hedef, minimum zaman kaybı ile sonuç alabilmek. Bunu sağlamak için yukarıdaki teknolojileri birbiriyle uyum içinde kullanabilirsiniz. Özetle:

  • React Native tarafında: Expo (mümkün oldukça) + gerekli kütüphaneler (React Navigation, AsyncStorage/MMKV, expo-av vs.) + gerçek cihaz test.

  • Dağıtım tarafında: Hızlı mağaza yayını için beta adımlarını atlama stratejisi + Fastlane tabanlı CI/CD.

  • Geliştirme ortamında: Cursor IDE’de AI yardımıyla kodlama, AWS CLI ile anlık deploy/log, Metro ile canlı reload – hepsini senkronize yürütme.

Tüm bunları uyguladığınızda, fikir aşamasından yayın aşamasına kadar olabilecek en hızlı şekilde ilerleyebileceksiniz. Kolay gelsin!

Apple App Store: iOS uygulamalarını son kullanıcılara ulaştırmak için App Store onayı zorunludur. İlk defa uygulama yayınlıyorsanız, bir Apple Developer hesabına (yıllık ücretli) sahip olmanız ve uygulamayı App Store Connect üzerinden göndermeniz gerekir. Apple’ın inceleme süreci genellikle 1-3 gün sürer (çoğu zaman ~24 saatte sonuçlanır). Doğrudan üretim (Production) sürümü olarak gönderip TestFlight beta sürecini atlayabilirsiniz – Apple yeni uygulamalarda TestFlight’ı zorunlu tutmaz, bu geliştiricinin tercihine bağlıdır. Hatta bazı durumlarda, App Store için gönderilen bir yapının onayı, TestFlight dış test onayından daha hızlı gerçekleşebilir; örneğin bir geliştirici uygulamasının App Store onayının 2 saatten kısa sürede gelirken, TestFlight betasının ~2 gün sürdüğünü gözlemlemiştir (). Bu nedenle zaman kritik ise, doğrudan App Store’a “Production” olarak başvurmak mantıklı olabilir.

Google Play Store: Android tarafında uygulama yayınlamak genellikle biraz daha hızlı ve esnektir. Google Play’de bir geliştirici hesabı oluşturup (tek seferlik 25$ ücreti var) uygulama kaydınızı yaptıktan sonra APK/AAB dosyanızı Play Console üzerinden yükleyebilirsiniz. Google, ilk kez yayınlanan uygulamalarda genellikle otomatik kontrollerin ardından bir inceleme süreci de yürütür, bu süre yeni hesaplar için birkaç saatten bir kaç güne kadar değişebilir (genelde Apple’dan hızlıdır). Önemli olan, uygulama içeriği bildirimleri (Content Rating), gizlilik formu gibi istenen bilgileri doğru doldurmaktır. Google Play’de Internal Testing, Closed Testing, Open Testing gibi beta kanalları mevcuttur ancak bunlar opsiyoneldir. Doğrudan üretim kanalına bir sürüm yükleyebilirsiniz – bunun için Play Console’da Production sekmesinden yeni sürüm oluşturup yayınlamanız yeterli olacaktır (). Beta sürecine takılmadan direkt mağazaya hızlıca yükleme yapmak Google ekosisteminde kesinlikle mümkündür. Hatta Google Play, “İçeride test etmeden prodüksiyona geçmene izin veriyor mu?” tarzı sorulara cevaben “Evet, doğrudan Production’a bir sürüm oluşturup yayınla butonuna basarsanız uygulamanız genel kullanıma sunulur” şeklinde resmi yanıtlar vermiştir (). Yine de tavsiye, ilk yayınlamadan önce Internal Test veya Closed Track ile en azından kendiniz ve birkaç test kullanıcısına uygulamayı gönderip gerçek ortamda deneyimlemektir. Bu beta kanallarında yayınlamak hızlıdır (çoğunlukla otomatik onaylanır veya çok kısa bir kontrol olur) ve sorun çıkmazsa aynı sürümü “Promote to Production” yaparak herkesin erişimine açabilirsiniz (). Google Play’de bir diğer hızlı dağıtım yöntemi de “Internal App Sharing” özelliğidir – bu, uygulamayı imzalayıp bir paylaşım linki ile testers (test kullanıcılarına) dağıtma imkanı verir; ancak bu aslında mağaza dışı bir paylaşım olduğu için genelde dahili test amaçlı kullanılır, geniş kitleye değil.

Özetle, her iki platformda da beta aşamasını zorunlu kılan bir kural yoktur. Doğru hazırlık ile tek seferde üretim sürümünüzü onaya gönderebilirsiniz. Apple tarafında ilk versiyon onayı bir kez alındıktan sonra aynı versiyon numarası içinde TestFlight güncellemeleri otomatik onaylanır (ya da sonraki build’ler çok daha hızlı geçer) () – ancak siz direkt yayınlamayı hedefliyorsanız, ilk onayı bekleyeceksiniz demektir. Google tarafında da keza, ilk yayın sonrası güncellemeler genelde daha hızlanır. Beta sürecine takılmamak adına, mümkün olduğunca uygulamayı önceden cihazınızda ve çevrenizde test etmiş olun ki onay aşamasında reddedilip tekrar düzeltme yapmak zorunda kalmayın. Gerektiğinde her iki mağazada da hızlı güncelleme için mekanizmalar var (Apple’da Expedited Review talep edilebilir acil durumlar için, Google’da da benzer şekilde), fakat bunlar istisnai durumlar.

Fastlane: Mobil uygulama dağıtım otomasyonunda altın standarttır. Fastlane, iOS ve Android için ayrı ayrı bir dizi araca sahiptir (ör. gym ile .ipa derleme, deliver ile App Store’a yükleme, supply ile Play Store’a yükleme, pilot ile TestFlight’a gönderme gibi). Bir kez Fastlane yapılandırması yaptığınızda, bunu herhangi bir CI sistemi üzerinde çalıştırabilirsiniz – öğren bir kez, her yerde kullan mantığıyla geliştirilmiştir (). Fastlane ile sertifika ve imzalama işlemlerini de otomatikleştirebilir, kod imzalama sorunlarını azaltabilirsiniz. Örneğin match aracı, sertifikaları ve profilleri güvenli bir depoda tutup CI’da otomatik çekmenizi sağlar.

Mobil odaklı CI hizmetleri: Bitrise, Microsoft App Center, Codemagic gibi platformlar, React Native gibi projeleri tanıyıp minimal ayarla derleme yapabilirler (). Bunların avantajı, grafik arayüzle kolay kurulum ve mobil spesifik adımların hazır olmasıdır. Örneğin App Center dağıtım grubuna otomatik göndermek vb. Dezavantajı, kompleks özelleştirmelerde esneklik kısıtlı olabilir ve maliyetli olabilmeleridir.

Genel amaçlı CI hizmetleri: GitHub Actions, CircleCI, GitLab CI, Jenkins gibi sistemler her türlü projeye uyarlanabilir (). Bunları kullanırken macOS runner bulundurmak iOS için gereklidir (GitHub Actions, ücretsiz katmanda dahi macOS ajanlar sunmaktadır ()). Bu platformlarda Fastlane’i bir iş akışı olarak tetikleyebilirsiniz. Örneğin GitHub Actions’da bir push olduğunda iOS ve Android işlerini paralel başlatıp, Fastlane ile .ipa ve .aab dosyalarını üretip, sonra yine Fastlane ile mağazalara yükleyebilirsiniz.

Expo EAS (Expo kullanıyorsanız): Expo projelerinde, Expo Application Services (EAS) adlı CI/CD hizmetini kullanabilirsiniz. EAS, bulutta sizin yerinize iOS ve Android derlemelerinizi yapabilir ve hatta EAS Submit ile mağazalara yükleyebilir. EAS’i kendi CI’nize entegre etmenin iki yolu var: ya Expo’nun sunucularını kullanırsınız (ki ücretsiz plan günlük sınırlı derleme veriyor, pro planı ücretli), ya da eas build --local komutuyla CI’daki macOS makinede yerel olarak Expo build alırsınız (). Örneğin birçok takım, CI pipeline’ında expo prebuild ile native projeleri oluşturup ardından Fastlane ile devam etmeyi tercih ediyor (). Bu şekilde Expo projelerinde de Fastlane gücünden yararlanmak mümkün. Eğer EAS’ı tam kullanmak istemezseniz, Expo projelerini önce EAS ile prebuild edip sonrası bare workflow gibi muamele edebilirsiniz.

Kod Push ve OTA Güncellemeler: Mağaza onay sürelerini tamamen aşamasanız da, yayınlandıktan sonra küçük güncellemeleri anında iletmenin yolları var. Expo OTA güncellemeleri, Expo kullanırken her yeni publish yaptığınızda kullanıcıların uygulamayı yeniden indirmeden JS kodunun güncellenmesini sağlar (). Bare RN için ise Microsoft CodePush (App Center) kullanarak benzer şekilde JS bundle’ı anlık dağıtabilirsiniz. Bu yöntemler kritik bug fix’lerinde saatler içinde düzeltme sunmanıza olanak tanır. Ancak büyük değişiklikler ve yeni özellikler için mağaza güncellemesi gerektiğini unutmayın – CodePush/OTA sadece önceden onaylanmış native kod altyapısını kullanarak JS davranışını değiştirebilir.

Sonuç olarak, CI/CD pipeline’ınızı Fastlane + GitHub Actions (veya benzeri) şeklinde kurmanız, en az eforla en çok otomasyonu sağlar. Fastlane’i öğrenmek başlangıçta zaman alabilir ama bir kez kurduktan sonra mobil uygulamanızı tek komutla derleyip testlere sokup dağıtacak hale gelirsiniz (). Bu da size çok ciddi zaman kazandırır ve insan hatasını azaltır. Otomatik pipeline sayesinde, siz mobil ön yüz kodunu yazmaya odaklanırken arkaplanda makine sizin için yeni sürümleri kullanıcılara ulaştırmaya hazır hale getirebilir.

API Gateway veya Lambda URLs: Mobil uygulamanın Lambda’larınızla konuşabilmesi için bir HTTP arayüzü gerekiyor. AWS Lambda’ları tetiklemek için en yaygın yöntem AWS API Gateway kullanmaktır – REST API Gateway ile HTTP endpoint’ler tanımlayıp bunları Lambda fonksiyonlarına bağlayabilirsiniz. Böylece örneğin POST /processAudio gibi bir endpoint Lambda’nızı çağırır. API Gateway, isteği Lambda’ya iletmeden önce yetkilendirme kontrolü de yapabilir. Yeni bir alternatif olarak, AWS artık Lambda Function URL özelliğini sunuyor; bu sayede tek bir Lambda’ya doğrudan bir HTTPS URL atayabilirsiniz (API Gateway olmadan). Basit kullanım durumlarında Function URL hızlı ve maliyetsiz bir çözüm olabilir. Ancak güvenlik için bir Auth mekanizması eklemek gerekir (Function URL’de JWT kontrolünü Lambda içinde yapmalısınız). API Gateway kullanırsanız, Supabase JWT’lerini doğrulamak için Lambda Authorizer yazabilirsiniz – bu özel fonksiyon, gelen isteğin header’ındaki Supabase token’ını kontrol eder, geçerliyse asıl Lambda’ya izin verir (). Örneğin bir geliştirici Supabase Auth ile AWS API Gateway entegrasyonu için Lambda Authorizer kullanarak Supabase oturumlarını API Gateway seviyesinde doğrulamıştır (). Bu sayede Lambda fonksiyonlarınızın URL’leri gizli kalmasa bile, sadece Supabase’de oturum açmış kullanıcılar istek yapabilir.

Çevresel Değişkenler ve Gizli Bilgiler: Lambda fonksiyonlarınız Supabase ile etkileşime gireceği için Supabase’in Service Role (sunucu) anahtarını kullanmanız gerekecek (bu anahtar, RLS’i bypass edip tüm veritabanına erişim sağlar, bu yüzden istemciye asla dağıtılmaz). Bu anahtarı Lambda içinde kullanırken güvenli bir şekilde sağlamak önemlidir. AWS, Lambda için tanımlanan Environment Variables’ı sunar – bunlara Supabase URL ve Service Key’i koyabilirsiniz. Ancak bunlar şifrelenmemiş biçimde de tutulabilir. Daha güvenlisi, AWS Systems Manager Parameter Store veya Secrets Manager kullanıp, Lambda fonksiyonunun bu değerlere erişmesine izin vermektir. Örneğin, bir blog yazarının tavsiyesi Supabase URL ve Service Key bilgisini Parameter Store’a SecureString olarak koyup Lambda’nın buradan okuması yönünde olmuştur (). Uygulamada, Lambda fonksiyonunuz başlatıldığında (örneğin Node ortam değişkeni olarak) bu değerleri alıp Supabase istemcisini createClient(supabaseUrl, serviceRoleKey) ile oluşturabilirsiniz.

Logging ve İzleme: Lambda içinde console.log ile loglama yaparsanız, çıktılar CloudWatch Logs altında tutulur. Hata ayıklamada CloudWatch loglarını incelemek önemli. AWS’nin awslogs veya AWS CLI ile aws logs tail komutunu kullanarak Lambda loglarını gerçek zamanlı takip edebilirsiniz. Geliştirme aşamasında Cursor IDE içinde bir terminalden aws logs tail /aws/lambda/FonksiyonAdi --follow şeklinde komut çalıştırıp anlık log akışını görebilirsiniz (AWS CLI’yi önceden kurup aws configure ile kimlik bilgilerini girmiş olmalısınız) (). Ayrıca AWS Lambda arka planda başarısız çağrıları Amazon CloudWatch Metrics ile de izler (hata sayıları, çağrı süreleri vb.). Daha ileri seviye izleme için AWS X-Ray servisini Lambda ile entegre ederek hangi adım ne kadar sürüyor, görünür hale getirebilirsiniz – fakat bu opsiyonel bir detay.

Supabase Auth Entegrasyonu: Mobil uygulamanızda kullanıcı oturumları Supabase üzerinden yönetiliyor olacak. Bu oturumun JWT token’ını Lambda’ya göndererek kullanıcının kimliğini doğrulayabilirsiniz. Örneğin, uygulama bir API isteği yaptığında header’a Authorization: Bearer <supabase_jwt> koyabilir. Lambda tarafında bu JWT’yi çözerek kullanıcının user_id bilgisini alabilirsiniz. İsterseniz Supabase’in JWT imzasını doğrulamak için yine Supabase JWT Secret’ına ihtiyaç duyarsınız, ancak daha kolayı Supabase’in Auth API’larını kullanmak. Supabase JS client’ı ile supabase.auth.getUser(jwt) fonksiyonunu çağırarak token’ı doğrulatıp kullanıcıyı öğrenebilirsiniz. Hatta daha önce bahsedildiği gibi, API Gateway kullanıyorsanız bir Lambda Authorizer yazıp bu işlemi orada yapabilirsiniz – bu sayede gerçek fonksiyon kodunuzda sadece “kullanıcı kimliği doğrulanmış olarak” işinize odaklanırsınız (). Ali Khallad adlı geliştiricinin paylaştığı bir yöntemde, Supabase’in oturumunu API Gateway katmanında doğrulayarak sadece geçerli Supabase kullanıcılarının Lambda fonksiyonlarına erişmesini sağlamıştır ().

Supabase Realtime ile Birlikte Kullanım: Supabase’in en güçlü özelliklerinden biri gerçek zamanlı veritabanı bildirimleri sunmasıdır. Bu, Postgres’teki LISTEN/NOTIFY mekanizmasına dayanarak tablo değişikliklerini websocket üzerinden klientlere iletir. Lambda fonksiyonlarınızı, veritabanına yazıp çıkacak şekilde tasarlarsanız, istemci uygulamanız Supabase’in realtime’ını dinleyerek anında güncellemeler alabilir. Örneğin, Lambda bir “audio_results” tablosuna yeni bir satır eklediğinde, istemci o tabloya abone olmuşsa anında bu satırı çekebilir. Bu mimari ile, Lambda ve Supabase birlikte event-driven (olay güdümlü) bir yapı kurmanızı sağlar. Supabase Realtime + AWS Lambda entegrasyonu yüksek tepkisellik gerektiren uygulamalar oluşturmanıza imkan tanır – veritabanı değişikliğine göre Lambda tetiklemek dahi mümkündür ama Supabase henüz doğrudan Lambda tetikleme özelliği vermez; bunun yerine Lambda tarafı belirli aralıklarla kontrol yapabilir veya bir ara katman kullanılabilir. Örneğin Restack adlı bir kaynakta, Supabase Realtime ile AWS Lambda’yı entegre ederek veritabanı değişikliklerine yanıt veren serverless fonksiyonlar yazma konsepti anlatılıyor (). Bu, pratikte şöyle olabilir: Supabase üzerinde bir tabloya INSERT tetiklendiğinde, Supabase bir webhook çağırır (şu an için böyle bir özellik yok, ama Supabase Edge Functions ile benzeri yapılabilir) ve bu webhook Lambda’nızı tetikler; Lambda gerekli işlemi yapar (bildirim gönderme vs.). Doğrudan olmasa da, kendi kuyruğunuzu da oluşturabilirsiniz. Örneğin Lambda, düzenli aralıklarla Supabase’den “yapılmamış işleri” kontrol eder, bulduklarını işler. Ancak bu biraz son çare yaklaşımı olur. Çoğu durumda, istemciyi olaya dahil ederek (yani Lambda -> DB yazsın, istemci realtime ile görsün) çözüm üretmek yeterlidir.

Eğer amaç konuşmayı metne çeviri (speech-to-text) ise, AWS ekosisteminde bunun için en ideal servis Amazon Transcribe’dır. Lambda fonksiyonunuz, aldığı ses dosyasını Amazon Transcribe servisine gönderebilir ve sonucu alabilir. Amazon Transcribe’ı kullanmanın bir yolu, dosya S3’e yüklenince Lambda’nın otomatik olarak Transcribe işlemini başlatmasıdır (). AWS’nin dokümantasyonunda, Lambda’nın S3’e yüklenen bir MP3/WAV dosyasını alıp Transcribe’a submit etmesi ve transkripsiyon tamamlanınca sonucu başka bir yere koyması gibi örnekler bulunuyor (). Transcribe kısa sesler için senkron çalışabilir (kısa bir audio verip hemen sonucu almak mümkün), daha uzun sesler için asenkron job şeklinde çalışır (Lambda’yı ikinci kez bir sonuç alındı tetikleyicisi ile çağırmak gerekebilir). Sizin senaryonuz muhtemelen kısa ses kayıtları (kullanıcı konuşması) olacaktır, böylece Lambda içinde birkaç saniyede transkripsiyonu alabilirsiniz.

Asenkron (arkaplanda) cevap: Eğer işlem daha uzun sürebilir ya da kullanıcı beklemek zorunda kalmasın isteniyorsa, Lambda isteği alıp hemen yanıt olarak “işlem alındı” gibi bir onay döner, esas işlem arkaplanda sürer. Sonuç hazır olduğunda kullanıcıya bir bildirim gönderilir veya uygulama sonuç için polling yapar. Bunu gerçekleştirmenin güzel bir yolu Supabase’i araya koymaktır. Örneğin Lambda, hemen response olarak bir “işlem ID” dönebilir. Aynı ID ile Supabase veritabanında bir kayıt oluşturur, status=processing olarak. Uygulama bu ID’yi alır ve Supabase realtime ile bu kaydı dinlemeye başlar. Lambda işlem bittiğinde ilgili veritabanı kaydını günceller (transcript veya analiz sonucu alanlarını doldurur, status=completed yapar). Supabase realtime sayesinde mobil uygulama bu değişikliği anında yakalar ve kullanıcıya sonucu gösterir (). Bu sayede kullanıcı uygulamadan çıkmadan bekleyebilir; istersek ilerleme durumunu bile yansıtabiliriz (ör. % tamamlandı gibi, gerçi Transcribe bu bilgiyi anlık vermez ama tahmini bir ilerleme sunulabilir).

Son olarak, geri bildirim mekanizmasında Supabase’in rolünü vurgulayalım: Lambda sonuçları Supabase’e yazıp uygulamayı Supabase üzerinden dinletmek hem mimarinizi basitleştirir hem de Supabase’in gerçek zamanlı yeteneklerini değerlendirmiş olursunuz. Supabase ile AWS Lambda’nın birlikte kullanılması, örneğin bir bildirim sisteminde, gerçek zamanlı tepkiler vermeyi mümkün kılar (). Siz de ses işleme tamamlandığında Supabase’de bir tabloyu güncelleterek benzer bir bildirim/sonuç iletme yapısını rahatlıkla kurabilirsiniz.

AWS CLI Entegrasyonu: Cursor içinde bir terminal açarak normalde yapacağınız AWS CLI işlemlerini hızlıca gerçekleştirebilirsiniz (). Örneğin, Lambda fonksiyonlarınızı deploy etmek için aws lambda update-function-code --function-name ... --zip-file ... komutunu çalıştırabilirsiniz. Bu komutları terminale yazmayı Cursor’un AI’ını kullanarak hızlandırmak mümkün – ne yapmak istediğinizi doğal dille yazıp ilgili CLI komutunu üretmesini isteyebilirsiniz. AWS CLI’yi kullanarak fonksiyon oluşturma (aws lambda create-function), güncelleme, logları çekme (aws logs tail) gibi işleri IDE’den çıkmadan halletmek zaman kazandırır ().

Yerel Debug ve Test: Cursor IDE, VSCode temelli olduğu için eğer VSCode AWS Toolkit eklentisi destekleniyorsa, Lambda fonksiyonlarını yerelde debug edebilirsiniz. AWS Toolkit eklentisi, AWS SAM CLI ile entegre olarak bir Lambda’yı Docker konteyner içinde yerel çalıştırıp kodda breakpoint ile durmanızı sağlar () (). Cursor, eğer VSCode eklenti ekosistemine izin veriyorsa (bunu net bilmiyoruz, ama Cursor büyük oranda VSCode ile uyumlu), bu aracı kurabilirsiniz. Aksi halde, klasik yöntemlerle debug yapabilirsiniz: Örneğin fonksiyon kodunuzu küçük bir Node.js scripti olarak taklit edin. Bir event.json dosyası oluşturup Lambda’nıza girecek örnek girdiyi koyun ve terminalden node index.js event.json gibi bir komutla fonksiyon modülünüzü çağırın. Hataları try/catch ile yakalayıp console.log ile basın. Bu şekilde, gerçek AWS’ye deploy etmeden bir fonksiyonun mantığını test edebilirsiniz.

Backend tarafında: AWS Lambda + Supabase birlikteliğini event-driven düşünerek kullanma (Transcribe ile otomatik konuşma işleme, Supabase realtime ile anlık sonuç iletme) () ().

🔍
Supporting iOS Share Extensions & Android Intents on React Native
Supporting iOS Share Extensions & Android Intents on React Native
State Management in React Native Apps: A Comparative Guide | SpinDance
State Management in React Native Apps: A Comparative Guide | SpinDance
State Management in React Native Apps: A Comparative Guide | SpinDance
State Management in React Native Apps: A Comparative Guide | SpinDance
State Management in React Native Apps: A Comparative Guide | SpinDance
State Management in React Native Apps: A Comparative Guide | SpinDance
Record Audio and display audio wave graph. : r/reactnative
react-native-audio-recorder-player - npm
Record Audio and display audio wave graph. : r/reactnative
The 4 best React Native routing libraries - LogRocket Blog
The 4 best React Native routing libraries - LogRocket Blog
The 4 best React Native routing libraries - LogRocket Blog
The 4 best React Native routing libraries - LogRocket Blog
Alternative libraries - React Navigation
Choosing the Best Storage Solution for Your React Native App
Choosing the Best Storage Solution for Your React Native App
Choosing the Best Storage Solution for Your React Native App
Choosing the Best Storage Solution for Your React Native App
Which is better for developers to develop? React Native with expo CLI or Bare React Native app. - Stack Overflow
Expo vs React Native CLI: Key Differences Explained
Which is better for developers to develop? React Native with expo CLI or Bare React Native app. - Stack Overflow
Which is better for developers to develop? React Native with expo CLI or Bare React Native app. - Stack Overflow
Which is better for developers to develop? React Native with expo CLI or Bare React Native app. - Stack Overflow
What do companies use? (Expo or CLI) : r/reactnative
Which is better for developers to develop? React Native with expo CLI or Bare React Native app. - Stack Overflow
Which is better for developers to develop? React Native with expo CLI or Bare React Native app. - Stack Overflow
Running On Device · React Native
Y’all posting about quick review times for App Store but did anyone else notice that review process for Testflight takes waaay to long in comparision? : r/iOSProgramming
android - How to publish a production app without testing in google play store? - Stack Overflow
android - How to publish a production app without testing in google play store? - Stack Overflow
android - How to publish a production app without testing in google play store? - Stack Overflow
Y’all posting about quick review times for App Store but did anyone else notice that review process for Testflight takes waaay to long in comparision? : r/iOSProgramming
CI/CD choices for mobile app development | Alexander Zubko
CI/CD choices for mobile app development | Alexander Zubko
CI/CD choices for mobile app development | Alexander Zubko
Expo EAS with local hardware OR Jenkins? (What is the best way to have cheap and fast CI/CD with react native?) : r/reactnative
Expo EAS with local hardware OR Jenkins? (What is the best way to have cheap and fast CI/CD with react native?) : r/reactnative
Expo EAS with local hardware OR Jenkins? (What is the best way to have cheap and fast CI/CD with react native?) : r/reactnative
Expo vs React Native CLI: Key Differences Explained
CI/CD choices for mobile app development | Alexander Zubko
Integrate Supabase Auth with AWS API Gateway using Lambda Authorizer (React Implementation) – Ali Khallad
Integrate Supabase Auth with AWS API Gateway using Lambda Authorizer (React Implementation) – Ali Khallad
Integrate Supabase Auth with AWS API Gateway using Lambda Authorizer (React Implementation) – Ali Khallad
Aws Lambda and cursor - Discussion - Cursor - Community Forum
Integrate Supabase Auth with AWS API Gateway using Lambda Authorizer (React Implementation) – Ali Khallad
Integrate Supabase Auth with AWS API Gateway using Lambda Authorizer (React Implementation) – Ali Khallad
Supabase AWS Lambda Integration Guide — Restack
Audio Transcription with AWS Transcribe - Harsh - Medium
Audio Transcription with AWS Transcribe - Harsh - Medium
Supabase AWS Lambda Integration Guide — Restack
Supabase AWS Lambda Integration Guide — Restack
Aws Lambda and cursor - Discussion - Cursor - Community Forum
Aws Lambda and cursor - Discussion - Cursor - Community Forum
Introducing launch configurations support for SAM debugging in the AWS Toolkit for VS Code | AWS Developer Tools Blog
Introducing launch configurations support for SAM debugging in the AWS Toolkit for VS Code | AWS Developer Tools Blog
Audio Transcription with AWS Transcribe - Harsh - Medium
Supabase AWS Lambda Integration Guide — Restack