Browsy Mascot LogoBrowsy Logo
Summarize videos and websites instantly.
Get Browsy now! 🚀

CS50: Harvard Üniversitesi Bilgisayar Bilimine Giriş

Go to URL
Copy

CS50 Tanıtımı

  • Summary Marker

    CS50, bilgisayar bilimleri ve programlamanın sanatı üzerine bir giriş dersi olarak tanıtılmaktadır.

  • Summary Marker

    Ders, Harvard Üniversitesi'nde Dr. David Malan tarafından verilmektedir.

  • Summary Marker

    Dersin temel amacı, öğrencileri algoritmik düşünme ve etkili problem çözme konularında eğitmektir.

David Malan'ın Kişisel Deneyimi

  • Summary Marker

    David Malan, bilgisayar bilimleri dersine katılma isteğinin başlangıcında tereddüt yaşadığını belirtmektedir.

  • Summary Marker

    Bilgisayar biliminin yalnızca programlama değil, problem çözme ile ilgili olduğunu keşfetmiştir.

  • Summary Marker

    Ders sonundaki projelerini tamamlamanın getirisi olan tatmin ve gurur duygusu vurgulanmaktadır.

Bilgisayar Bilimi Nedir?

  • Summary Marker

    Bilgisayar biliminin temelinin problem çözme olduğunu ifade etmektedir.

  • Summary Marker

    Algoritmik düşünme, bilgi işleme ve doğru bir şekilde düşünme becerilerini geliştirdiği belirtilmektedir.

  • Summary Marker

    Bilgisayarların verileri temsil etme şekli, insan dillerinden farklıdır ve sayılar kullanır.

Veri Temsili: İkilik Sistemi ve ASCII

  • Summary Marker

    Bilgisayarlar yalnızca 0 ve 1 ile çalışan ikilik sistemini kullanır.

  • Summary Marker

    Verilerin temsilinde ASCII kodlaması tanıtılmakta ve harflerin sayılara karşılık geldiği açıklanmaktadır.

  • Summary Marker

    Örneğin, büyük harf A'nın sayısal karşılığı 65'tir.

Unicode ve Geniş Kapsamlı Karakter Temsili

  • Summary Marker

    Unicode sistemi, daha fazla karakter ve sembolü desteklemek için ASCII'ye ek olarak geliştirilmiştir.

  • Summary Marker

    Unicode ile 2^16 yani 65.536'ya kadar sembol temsil edilebilir.

  • Summary Marker

    Emojiler ve diğer karakterlerin temsili için Unicode standartları oluşturulmuştur.

Renk Temsili ve Bilgisayar Grafikleri

  • Summary Marker

    Renkler, RGB (Kırmızı, Yeşil, Mavi) kombinasyonu ile temsil edilir.

  • Summary Marker

    Her rengin belirli bir değeri (0-255 arası) olduğu ve bu değerlerin karıştırılarak yeni renklerin oluşturulabileceği belirtilir.

  • Summary Marker

    Her piksel, bir ekran üzerinde görülen görüntüyü oluşturur ve genellikle 24 bit ile temsil edilir.

Ses ve Video Temsili

  • Summary Marker

    Ses ve müzik, MIDI formatında temsil edilebilir ve notasal bilgilerle işlenir.

  • Summary Marker

    Video, ardışık görüntüler kullanılarak zaman boyutu eklenmiş bir temsil biçimidir.

  • Summary Marker

    Yüksek kaliteli görüntüler için sıkıştırma tekniklerinin kullanıldığı açıklanmaktadır.

Algoritmalar ve Problem Çözme

  • Summary Marker

    Algoritma, bir problemi çözmek için adım adım talimatlar veren bir kavramdır.

  • Summary Marker

    Örnek olarak, telefon rehberinde bir isim arama süreci algoritma olarak sunulmaktadır.

  • Summary Marker

    Arama yöntemlerinin etkinliği ve doğruluğu üzerinde durulmaktadır.

Programlamanın Anlamı

  • Summary Marker

    Programlama, mevcut düşünceleri ifade etme biçimidir.

  • Summary Marker

    Algoritmalar, problem çözme yollarının tanımlanmasında önemli rol oynar.

  • Summary Marker

    Farklı algoritmaların performans ve verimlilik analizi yapılır.

Algoritmaların Verimliliği

  • Summary Marker

    Algoritmanın karmaşıklığı, problem boyutu ve çözüm süresi ile ilgilidir.

  • Summary Marker

    İlk algoritma doğrudan ilişki sunarken, ikinci algoritma iki kat hızlı sonuç almayı sağlar.

  • Summary Marker

    Logaritmik algoritmalar, büyük veri setlerinde daha etkili çözümler sunar.

Pseudocode Tanıtımı

  • Summary Marker

    Pseudocode, bir algoritmanın İngilizce'ye benzer bir dil ile yazılmasını sağlar.

  • Summary Marker

    Adım adım süreçleri açıklamak için kullanılabilir.

  • Summary Marker

    Programın mantığını sade bir şekilde anlatmak için idealdir.

Scratch ile Programlamaya Giriş

  • Summary Marker

    Scratch, görsel programlama dili olarak kullanılır ve başlangıç seviyesindeki kullanıcılar için idealdir.

  • Summary Marker

    Farklı renk ve şekillerde bloklar, işlevlerin ve mantıksal akışların temsili için kullanılır.

  • Summary Marker

    Scratch içerisinde hareket, görünüm, ses ve kontrol gibi kategorilerde bloklar bulunmaktadır.

Doğal Dil ve İşlevsellik

  • Summary Marker

    Fonksiyonlar, belirli görevleri yerine getiren kod parçalarıdır.

  • Summary Marker

    Koşul ifadeleri (conditionals) belirli durumlara göre farklı davranışlar sergilemek için kullanılır.

  • Summary Marker

    Döngüler (loops), belirli bir işlemin tekrar edilmesini sağlar.

Değişkenler ve Kullanımı

  • Summary Marker

    Değişkenler, program içinde veri depolamak için kullanılır.

  • Summary Marker

    İşlevler, argümanlar ve dönüş değerleri gibi özelliklerle zenginleştirilebilir.

  • Summary Marker

    Abstraksiyon, karmaşık çözümleri daha basit ve okunabilir hale getirmek için kullanılır.

Sonsuz Döngü Kullanımı

  • Summary Marker

    Sonsuz döngü, programın sürekli dinlemesi için kullanılabilir.

  • Summary Marker

    Program, durana kadar sürekli çalışır.

  • Summary Marker

    Fare hareket ettiğinde kedi tepki vermeye başlıyor.

Video Tabanlı Etkileşim

  • Summary Marker

    Video hareketi belirli bir eşik değeri aştığında ses çalar.

  • Summary Marker

    Eylemler, videonun arka planda uygulanmasıyla daha interaktif hale getiriliyor.

  • Summary Marker

    Farklı hızlarda hareket eden el, sesli tepkiler veriyor.

Whack-a-Mole Oyun Geliştirme

  • Summary Marker

    Bir katılımcı sahneye davet edilerek, Whack-a-Mole oyunu oynatılıyor.

  • Summary Marker

    Kullanıcı kafasını moles'in çıktığı dikdörtgen ile hizalıyor.

  • Summary Marker

    Eğlenceli oyun dinamikleri ve zamanlama ile puan toplayarak hız test ediliyor.

Proje Oluştururken Temel Bloklar

  • Summary Marker

    Çeşitli bu oyun öğelerini bir araya getirerek karmaşık projeler oluşturulabiliyor.

  • Summary Marker

    Her bir yeni özellik, küçük parçalara ayrılarak ekleniyor.

  • Summary Marker

    Örnek proje geliştirirken adım adım ilerlemek mümkün.

Kullanıcı Arayüzü ve Etkileşim

  • Summary Marker

    Kullanıcı arayüzü tasarımı önem kazanıyor.

  • Summary Marker

    Kullanıcının kişisel etkileşimini artırmak için grafikler ve sesler ekleniyor.

  • Summary Marker

    Rastgele nesneler kullanarak oyun mekaniği çeşitlendiriliyor.

Karmaşık Oyun Mekanikleri

  • Summary Marker

    Karakterlerin birbirini takip etme gibi gelişmiş oyun mekaniği uygulanıyor.

  • Summary Marker

    Oyun hedefe ulaşmayı zorlaştıran yaramaz karakterler ekleniyor.

  • Summary Marker

    Oyun içerisindeki nesnelerin konumunu yönetmek için matematik kullanılıyor.

Oyun Sorunları ve Çözümleri

  • Summary Marker

    Özelleştirilmiş blokal kodlama ile karşılaşılan problemler çözülüyor.

  • Summary Marker

    Her aşamada oyun akışını kontrol eden koşullar ekleniyor.

  • Summary Marker

    Skor takibi için değişkenler belirleniyor ve güncelleniyor.

C Programının Oluşturulması

  • Summary Marker

    İlk C programı, 'Hello, World!' mesajını yazdırarak oluşturulur.

  • Summary Marker

    Kodun başında 'stdio.h' kütüphanesi eklenir.

  • Summary Marker

    Kod çalıştırılmadan önce kaydedilmesi gerektiği belirtilir.

Programı Çalıştırma

  • Summary Marker

    Programın çalıştırılması için komut satırı kullanılmalı, çift tıklama yerine komut yazılmalıdır.

  • Summary Marker

    Kaydedilen programın çalıştırılması için 'make hello' komutu girilir.

  • Summary Marker

    './hello' komutunu kullanarak programın çıktısı alınabilir.

Makine Kodu ve Derleyici

  • Summary Marker

    C dilindeki kaynak kod, makine diline dönüştürülmelidir.

  • Summary Marker

    Bu dönüşüm için bir derleyici (compiler) kullanılır.

  • Summary Marker

    C dilinin bir derleyiciye ihtiyaç duyduğu belirtilir.

Bulut Tabanlı Programlama Ortamı

  • Summary Marker

    VS Code'un bulut tabanlı versiyonu kullanılarak program yazılabilir.

  • Summary Marker

    Bu ortam, herkesin aynı sayfada olmasını sağlar.

Terminal Penceresi

  • Summary Marker

    Terminal penceresi, komutları girmek için kullanılır.

  • Summary Marker

    Linux işletim sistemi kullanılarak komut satırı üzerinden program çalıştırılır.

Kod Satırları ve Hatalar

  • Summary Marker

    Kod değiştirildiğinde derleme sıklıkla yapılmalıdır.

  • Summary Marker

    Hatalar çıktısı dikkatlice incelenmelidir.

Girdi Alma ve Fonksiyonlar

  • Summary Marker

    Kullanıcıdan girdi almak için 'get_string' fonksiyonu kullanılır.

  • Summary Marker

    Fonksiyonlar, belirli bir veri türü döndürebilir.

printf Kullanımı

  • Summary Marker

    printf fonksiyonu, çıktıyı formatlamak için kullanılır.

  • Summary Marker

    Değişkenlerin çıktıda nasıl kullanılacağı anlatılır.

C Programlama Diline Giriş

  • Summary Marker

    C dilinde, bir işlevin çıktısının başka bir işlevin girdisi olabileceği bir konsept vardır.

  • Summary Marker

    printf işlevini kullanmak için, öncelikle uygun kütüphane dosyasının eklenmesi gerekir.

  • Summary Marker

    C dilinde ana program, 'int main(void)' ile başlar ve kod o blok içinde yazılır.

Kütüphaneler ve Header Dosyaları

  • Summary Marker

    Kütüphane, bilgilendirme işlevselliği sağlar, header dosyaları ise bu işlevleri kullanabilmek için gereklidir.

  • Summary Marker

    C programcıları, kütüphane dosyalarının içeriğini kullanarak fonksiyonları uygulamak için önceden tanımlanmış işlevlerle hazırlıkları yaparlar.

Veri Türleri ve Değişkenler

  • Summary Marker

    C dilinde temel veri türleri arasında int, float, double, char ve bool bulunur.

  • Summary Marker

    Veri türü, her bir verinin bellekte ne kadar yer kaplayacağını belirler.

  • Summary Marker

    Değişken tanımlanırken, veri türü ve bir başlangıç değeri belirlenmelidir.

Koşullu İfadeler ve Kontrol Akışları

  • Summary Marker

    Koşullu ifadeler, belirli koşulların karşılanıp karşılanmadığını belirlemek için kullanılır.

  • Summary Marker

    C dilinde 'if', 'else if' ve 'else' yapıları kullanılarak şartlı ifadeler oluşturulabilir.

  • Summary Marker

    Mantıksal ifadeler, programın işlem akışını yönlendirir.

Etkili Kod Yazımı ve İyileştirme

  • Summary Marker

    Kod yazarken, gereksiz tekrarları önlemek için sabit sayılar yerine değişkenler kullanılmalıdır.

  • Summary Marker

    Sabitler, programda kesin bir değerin değiştirilmesini engeller ve büyük harfle yazılması yaygındır.

  • Summary Marker

    Kodun temiz ve okunabilir olması, geliştirme sürecini kolaylaştırır.

Koşullu İfadeler ve Sözdizimi

  • Summary Marker

    C programlama dilinde bazı durumlarda noktalı virgül kullanılmaz.

  • Summary Marker

    Koşullu ifadelerde genelde noktalı virgül ihtiyaç duyulmazken, işlev sonunda kullanılır.

  • Summary Marker

    Çift eşittir işareti, eşitlik kontrolü için kullanılırken tek eşittir işareti atama işlemi içindir.

Parite Kontrol Programı

  • Summary Marker

    Kullanıcıdan bir sayı alarak bu sayının tek mi çift mi olduğunu kontrol eden bir program yazılır.

  • Summary Marker

    Remainder operatörü (%) kullanılarak bir sayının 0 ya da 1 ile bölünmesi sonucu tek veya çift olduğu belirlenir.

  • Summary Marker

    Eşitlik kontrolü için '==' operatörü kullanılır.

Kullanıcı Girdisi Alma

  • Summary Marker

    Kullanıcıdan evet veya hayır yanıtı almak için get_char fonksiyonu kullanılabilir.

  • Summary Marker

    Yanıtın durumunu kontrol etmek için 'if' ve 'else if' yapıları kullanılır.

  • Summary Marker

    Büyük/küçük harf duyarlılığına dikkat edilmeli; örneğin hem 'y' hem de 'Y' karşılanmalıdır.

Döngülerle Tekrar Etme

  • Summary Marker

    C dilinde bir işlemi tekrarlamak için while ve for döngüleri kullanılır.

  • Summary Marker

    While döngüsü bir koşul sağlandığı sürece sürekli çalışır.

  • Summary Marker

    For döngüsü ise belirli bir sayıda tekrarlar; başlangıç, bitiş ve artış değerleri döngü tanımında belirtilir.

Fonksiyonlar ve Prototipler

  • Summary Marker

    Fonksiyonlar belirli bir işi yapmak için tanımlanır, geri değer döndürme veya parametre alma kapasitesine sahiptir.

  • Summary Marker

    Fonksiyonu kullanmadan önce tanımlamak veya bir prototip belirtmek gereklidir.

  • Summary Marker

    Parametre sayısı değiştirilebilir; birden fazla parametre alabilen fonksiyonlar tanımlanabilir.

İndirim Hesaplama Fonksiyonu

  • Summary Marker

    İndirim oranı ve normal fiyatı alarak indirimli fiyatı hesaplayan bir fonksiyon tanımlanır.

  • Summary Marker

    Fonksiyon, hesaplamayı yaptığı sonucu return anahtar kelimesiyle geri döndürür.

  • Summary Marker

    Dışarıdan gelen parametrelerin etkisini anlamak için değişkenlerin kapsamı dikkate alınmalıdır.

Döngü Tasarımında İyileştirmeler

  • Summary Marker

    Döngülerin sonuna yerleştirilen komutlarla çıktıların daha düzenli hale getirilmesi.

  • Summary Marker

    Kullanıcıdan soru işareti veya madeni para miktarını almak için döngü yapılarının geliştirilmesi.

  • Summary Marker

    C programlama dilinde 'do while' döngüsünün kullanılması, koşulun en son kontrol edilmesini sağlar.

Döngü ve Kullanıcı Girdisi

  • Summary Marker

    'do while' döngüsü ile kullanıcıdan bir değer alınır ve kullanıcı uygun bir değer girene kadar döngü devam eder.

  • Summary Marker

    Değişkenlerin dinamik hale getirilmesi, kullanıcı girdisine göre çıktıların ayarlanması sağlanır.

  • Summary Marker

    Kullanıcının değer girmesi beklenmeden bazı işlemlerin önce yapılması gerektiği vurgulanır.

İç İçe Döngüler

  • Summary Marker

    Bir 'n x n' kare matris oluşturmak için iç içe döngülerin kullanılması.

  • Summary Marker

    Kullanıcıdan istenilen boyutta bir kare yapmak için ilk olarak sıra ve ardından sütun döngülerinin tanımlanması.

  • Summary Marker

    Döngüden sonra yeni bir satıra geçiş yapmak için 'newline' karakterinin kullanılması gerekliliği.

Sayılarla İşlemler ve Hassasiyet

  • Summary Marker

    Float türü ile kesirli sayılar arasında bölme işlemlerinin yanlış sonuçlar verebileceği açıklanır.

  • Summary Marker

    Tam sayı bölmesinin sonucu yalnızca tam kısmı döndüreceği ve kesir kısmının kaybolacağı belirtilir.

  • Summary Marker

    Tip dönüşümü kullanarak int değerini float olarak işlem yapmayı sağlayan yöntemler anlatılır.

Sonuçların Hassasiyeti ve Maliyet Hesaplamaları

  • Summary Marker

    Küçük değerlerde dahi kesirli sayılarda yaşanan hassasiyet sorunları.

  • Summary Marker

    Decimal yerine float kullanmanın neden olduğu sorunlar ve çözüm önerileri.

  • Summary Marker

    Döngülerin ve matematiksel işlemlerin güvenilir bir biçimde sağlanması için dikkatli bir şekilde programlama yapılması gerektiği.

Assembly Dili ve Temel Kavramlar

  • Summary Marker

    Assembly dili, bilgisayarın anlayabileceği en düşük seviyeli dil olarak tanımlanır.

  • Summary Marker

    Assembly dilinde, temel işlemler için kullanılan komutlar, geri bildirimde bulunarak bilgisayar işlemcisinde çalışır.

  • Summary Marker

    Her CPU, kendi talimat setine sahiptir, bu nedenle yazılımlar farklı platformlarda çalışmaz.

  • Summary Marker

    Derleme süreci, kaynak kodunu assembly diline ve ardından makine koduna dönüştürme işlemlerini içerir.

Bağlama ve Derleme

  • Summary Marker

    Kodun derlenmesi, yazılmış olan kodun makine dili olarak çalıştırılabilir hale getirilmesi sürecidir.

  • Summary Marker

    Bağlama işlemi, ayrı kaynak dosyalarını birleştirerek tek bir program dosyası oluşturur.

  • Summary Marker

    a.out, derlenen programların varsayılan dosya adıdır ve bu isim basit bir isimlendirme kuralıdır.

Hata Ayıklama Yöntemleri

  • Summary Marker

    Printf fonksiyonu, değişkenlerin değerlerini kontrol etmek için yararlı bir araçtır.

  • Summary Marker

    Debugging (hata ayıklama) süreci, kod hatalarını bulmak ve düzeltmek için kullanılan tekniklerdir.

  • Summary Marker

    Rubber duck debugging (lastik ördek ile hata ayıklama), bir nesne ile konuşarak sorunları çözme tekniğidir.

C Dilinde Veri Türleri ve Bellek Yönetimi

  • Summary Marker

    C dilinde int, float, char gibi temel veri türlerinin nasıl tanımlanacağı ve kullanılacağı anlatılır.

  • Summary Marker

    Veri türlerinin bellek üzerindeki boyutları ve yönetimi üzerine bilgi verilir.

  • Summary Marker

    Dizi (array) kullanarak birden fazla değişkeni tek bir isimle depolamak mümkündür.

Uygulama Örneği: Not Ortalaması Hesaplama

  • Summary Marker

    Kullanıcının notlarını almak ve bu notların ortalamasını hesaplamak için bir program örneği gösterilir.

  • Summary Marker

    Dizi kullanarak birden fazla notun depolanması ve ortalaması üzerine örnekler yapılır.

  • Summary Marker

    Kullanıcıdan giriş almak için get_int fonksiyonunun kullanımı gösterilir.

Programın Başlangıcı ve Hatalar

  • Summary Marker

    Programın cs50.h dosyasının eksik olduğunu fark ederek hatalar giderilmektedir.

  • Summary Marker

    Kullanıcıdan alınan not ortalamasını hesaplama programı, başlangıçta yalnızca üç notla sınırlıdır.

Kodun İyileştirilmesi

  • Summary Marker

    Kodun daha iyi bir tasarımına yönelik önerileri değerlendirilmekte.

  • Summary Marker

    Kullanım kolaylığı için döngülerden faydalanarak not alma işlemi basitleştirilmektedir.

  • Summary Marker

    Kullanıcıdan kaç not alınacağına dair bir girdi alma yöntemi tanıtılmaktadır.

Dizilerin Kullanımı ve Veri Türleri

  • Summary Marker

    Dizilerin, çok sayıda değişken adı yerine tek bir isim altında saklanmasını sağladığı açıklanmaktadır.

  • Summary Marker

    Farklı veri türlerinin (örneğin, int ve char) nasıl kullanılabileceği tartışılmaktadır.

Karakterlerin ASCII Değerleri

  • Summary Marker

    Karakterlerin sayısal karşılıkları ve ASCII sistemi açıklanmaktadır.

  • Summary Marker

    C dilinin, karakterleri sayısal değerlere otomatik olarak dönüştürme yeteneği olduğu belirtilmektedir.

Dizilerde Nul Karakterin Rolü

  • Summary Marker

    Dizilerde bir sonlandırıcı karakter olan nul karakterinin nasıl kullanıldığı açıklanmaktadır.

  • Summary Marker

    Bir stringin sonunu işaretlemek için hafıza yönetimi açısından nul karakterinin gerekliliği tartışılmaktadır.

String Uzunluğunu Hesaplama

  • Summary Marker

    Kullanıcıdan alınan bir stringin uzunluğunu hesaplamak için uygulama örneği sunulmaktadır.

  • Summary Marker

    Dinamik hafıza yönetimi ve stringlerin diziler olarak nasıl uygulanabileceği detaylandırılmaktadır.

C Kütüphanesi ve Kullanımı

  • Summary Marker

    C dilinin string.h kütüphanesi ve içinde bulunan önceden tanımlanmış işlevler tanıtılmaktadır.

  • Summary Marker

    strlen işlevinin, bir stringin uzunluğunu hesaplamak için mevcut olduğu gösterilmektedir.

Değişken Kullanımının Önemi

  • Summary Marker

    Değişkenler, kodda tekrarlanan değerlerin saklanması için kullanılır.

  • Summary Marker

    Bir işlevde en verimli sonuç için değişken kullanılarak sadece bir kez çağrılan değerler saklanabilir.

  • Summary Marker

    Program içindeki döngülerde ve koşullarda hafızada daha az yer kaplamak için değişken tanımlamak önemlidir.

Büyük Harf Yapma İşlevi

  • Summary Marker

    Girilen bir string'in başındaki harflerin büyük yapılması için bir program yazılmaktadır.

  • Summary Marker

    ASCII tablosuna bakılarak küçük harflerin büyük harflere dönüşümünde 32 sayısının çıkarılması gerektiği belirtilmektedir.

  • Summary Marker

    Her karakter için kontrol yapılır, eğer küçük harf ise, büyük harfle değiştirilir.

Standart Kütüphaneler ve Yeni Fonksiyonlar

  • Summary Marker

    C dilinde kullanılabilecek olan 'is-lower' ve 'to-upper' gibi standart fonksiyonların olduğunu görmek önemlidir.

  • Summary Marker

    Bu fonksiyonlar, kod yazımını daha basit hale getirir ve işlerimizi kolaylaştırır.

  • Summary Marker

    Kodda yapılan değişikliklerle beraber error handling (hata yönetimi) uygulanarak, kullanıcıdan alınan verinin doğruluğu kontrol edilir.

Komut Satırı Argümanları Üzerine

  • Summary Marker

    Komut satırı argümanları, kullanıcıdan verilerin alınmasını kolaylaştırır.

  • Summary Marker

    argc (argument count) ve argv (argument vector) yapıları kullanılarak argüman sayısı ve içeriği tanımlanır.

  • Summary Marker

    Kullanıcının programı çalıştırırken girdiği değerler argv dizisi üzerinde saklanır.

Çıkış Durumu ve Hata Yönetimi

  • Summary Marker

    C dilinde, programın çalıştırılmasından sonra bir değer döndürerek, programın başarılı ya da başarısız olarak bitip bitmediği belirtilebilir.

  • Summary Marker

    Başarılı bir çıkış için 0, başarısız bir çıkış için ise 1 kullanılabilir.

  • Summary Marker

    Çalışma mantığı açısından, kullanıcıdan doğru argüman alınmaması durumunda error handling uygulamak önemlidir.

Algoritma Verimliliği ve Zaman Ölçümü

  • Summary Marker

    Algoritmaların verimliliği, bellek kullanımı ve sonar başkalarının yazdığı kodlarla iş birliği yapma olasılığını artırarak tanımlanır.

  • Summary Marker

    Verimlilik, bir algoritmanın çalıştığı süre ile ölçülür ve bu süre Big O notasyonu ile ifade edilir.

  • Summary Marker

    Big O notasyonu, bir algoritmanın çalışmasıyla ilgili üst sınırları belirler ve zaman harcamalarını basit matematiksel ifadelerle tanımlar.

Algoritma Karşılaştırmaları

  • Summary Marker

    İlk algoritma sayfaları tek tek inceleyerek, ikinci algoritma ise sayfaları geri dönecek şekilde iki sayfa inceleyerek çalışır.

  • Summary Marker

    Üçüncü algoritma, 'divide and conquer' stratejisini kullanarak sayfaları ikiye ayırır, bu da daha hızlı bir çözüm sağlar.

  • Summary Marker

    Algoritmaların kıyaslamasında dikkat edilmesi gereken önemli bir nokta, büyük sayılarla çalıştıklarında(kullanıcı sayısı arttıkça) benzer performanslar sergileyebilmeleridir.

Lineer Arama Algoritması

  • Summary Marker

    Lineer arama algoritması, bir dizi içerisindeki öğeleri sırayla kontrol ederek doğru bulmayı hedefler.

  • Summary Marker

    Bu yöntemi kullanarak sonucu bulmak için, makul bir sıralama yapıldığında beklenen çalışma süresi O(n) şeklinde tanımlanır.

  • Summary Marker

    Görselleştirilen bir örnekte, sıralı kapılar arasında arama yaparak sonuçlar bulunmuştur.

İkili Arama Algoritması

  • Summary Marker

    İkili arama algoritması, sıralı verilere uygulanarak arama süresini minimuma indirir.

  • Summary Marker

    Sıralı bir veri setinde çalışırken zaman karmaşıklığı O(log n) olarak ifade edilir.

  • Summary Marker

    Bu yöntem, orta belli bir noktadan başlayarak arama yapar ve bu sayede daha az adımda sonuç bulunur.

Çalışma Zamanlarını Ölçme ve Stratejiler

  • Summary Marker

    Verilerin sıralanması durumu, arama işleminin verimliliğini büyük ölçüde etkiler.

  • Summary Marker

    Verimlilik kıyaslamalarında Bütün Veri Setinin sıralanması veya sadece doğrusal arama yönteminin kullanılması arasındaki ticaretin yapılması gerektiği vurgulanır.

  • Summary Marker

    Farklı kullanıcı talepleri ve yüksek veri hacmi gibi senaryolar bu stratejilerin seçiminde etkili olur.

Başlangıç ve Başarılı Çıkış Değeri

  • Summary Marker

    Bir döngü sonunda bir şey bulunamazsa, genellikle bir hata belirtmek için pozitif bir değer döndürülmelidir.

  • Summary Marker

    Ana fonksiyon başarılıysa, standart programlama kuralı olarak 0 döndürmek uygun bir uygulamadır.

Diziler ve Karakter Dizileri

  • Summary Marker

    Tamsayı dizisi yerine karakter dizisi (string) kullanarak isimleri saklama yöntemi tanıtılır.

  • Summary Marker

    String dizilerinde isimlerin tanımlanmasında 'string.h' kütüphanesi kullanılır.

  • Summary Marker

    Her bir ismin kontrol edilmesi için bir döngü kullanılarak arama yapılır.

Hatalı Karşılaştırma Hatası

  • Summary Marker

    Karakter dizilerini karşılaştırmak için 'strcmp' fonksiyonu yerine eşitlik operatörü kullanılamaz.

  • Summary Marker

    'strcmp' fonksiyonu, iki stringin karşılaştırılması sonucunda bir tamsayı döndürür ve bu değer sıralama yapmaya olanak tanır.

Telefon Rehberi Programı Geliştirme

  • Summary Marker

    İsimler ve telefon numaraları için iki ayrı dizi oluşturulması gerektiği gösterilir.

  • Summary Marker

    Kullanıcıdan bir isim arayarak eşleşirse, ilgili telefon numarasını bulma işlevi eklenir.

  • Summary Marker

    Dizilerin boyutunun sabit olmasının getirdiği sınırlama üzerinde durulur.

Veri Yapılarının Kullanımı

  • Summary Marker

    İsim ve telefon numarasını tutacak yeni bir veri yapısı (struct) tanımlanarak dizideki ilişkilerin güçlendirilmesi önerilir.

  • Summary Marker

    Struct ile verinin kapsüllenmesi, ilişkili bilgileri bir arada tutarak karışıklığı önler.

Sıralama Performansı

  • Summary Marker

    Sıralama algoritmalarının maliyetinin değerlendirilmesi yapılır.

  • Summary Marker

    Gerekli olan verinin sıralanması için farklı algoritmaların nasıl uygulanacağı üzerinde durulur.

Kısaca

  • Summary Marker

    Strcut kullanımı ile daha tutarlı ve yönetilebilir veri yapıları geliştirilir.

  • Summary Marker

    Kapsüllenmenin programlama güvenliğini artırdığı ve güncellemeleri kolaylaştırdığı vurgulanır.

Seçim Sıralama Algoritması

  • Summary Marker

    Algoritma, dizideki en küçük elemanı bulmak ve onu başa almak üzere tasarlanmıştır.

  • Summary Marker

    İlk olarak 8 eleman var; her iterasyonda en küçük bulunur ve konum değiştirilir.

  • Summary Marker

    Iterasyonlar ile problem boyutu giderek küçülür: 8, 7, 6, vb.

  • Summary Marker

    Seçim sıralama sürecinde her zaman en küçük elemanı bulmak için dizi taranır.

Zaman Karmaşıklığı

  • Summary Marker

    Seçim sıralamanın zaman karmaşıklığı O(n²) olarak tanımlanır.

  • Summary Marker

    Her eleman için dizinin tamamı taranır; bu durum n, n-1, n-2... elemanlarını içerir.

  • Summary Marker

    Sonuçta karmaşıklık, n (n+1)/2'ye eşit olur ve büyük n için n² terimi baskın hale gelir.

Balon Sıralama Algoritması

  • Summary Marker

    Balon sıralama, dizideki komşu elemanları karşılaştırarak en büyüklerin sona itilmesi üzerine çalışır.

  • Summary Marker

    Aynı dizi üzerinde sürekli tekrarlar yaparak işlem gerçekleştirir.

  • Summary Marker

    Balon sıralama da O(n²) zaman karmaşıklığına sahiptir ancak en iyi durum O(n) olabilir, eğer dizi zaten sıralıysa.

Yordamsal İyileştirmeler ve Yeni Yaklaşımlar

  • Summary Marker

    Her iki algoritmanın da sıralama sürecinin yavaş olmasının sebebi, tekrar tekrar aynı elemanları kontrol etmesidir.

  • Summary Marker

    Daha karmaşık ve daha verimli sıralama algoritmalarının keşfedileceği bilgisi verildi.

  • Summary Marker

    Yeni dizin sıralama algoritmaları için rekürsif yaklaşımın kullanılabileceği belirtilmiştir.

Hata Önleme ve Negatif Sayılar

  • Summary Marker

    Hataların önlenmesi için negatif sayıların kullanımının engellenmesi gerektiği belirtiliyor.

Merge Sort Nedir?

  • Summary Marker

    Merge sort, sıralama algoritları arasında yer alır ve diğer yöntemlere göre daha verimlidir.

  • Summary Marker

    Temel olarak, diziyi ikiye böler, sol ve sağ yarılar için sıralama yapıp birleştirir.

  • Summary Marker

    Recursion (özyineleme) kullanılarak uygulanan bir yöntemdir.

Merge İşlemi

  • Summary Marker

    İki sıralı listeyi birleştirme süreci, her iki listenin en küçük elemanını karşılaştırarak ilerler.

  • Summary Marker

    Birleştirme işlemi, her iki listenin başlangıcındaki elemanlar karşılaştırılarak yapılır.

Merge Sort Algoritmasını Uygulama

  • Summary Marker

    Daha karmaşık bir durumda, merge sort uygulanarak dizinin belirtilen elemanları sıralanır.

  • Summary Marker

    Sol ve sağ yarılar genişletilerek sıraya konur ve sonrasında merge işlemi yapılır.

Zaman Karmaşıklığı ve Bellek Kullanımı

  • Summary Marker

    Merge sort, genel olarak O(n log n) zaman karmaşıklığına sahiptir, bu da onu diğer sıralama yöntemlerinden daha verimli kılar.

  • Summary Marker

    Bellek kullanımı açısından merge sort, geçici diziler gerektirir ve bu nedenle daha fazla bellek tüketebilir.

Dört Haneli Hexadecimal Sistemi

  • Summary Marker

    Hexadecimal, bilgilendirmede ve bellekte sayıları daha kısa bir biçimde temsil etme imkanı sağlar.

  • Summary Marker

    Örneğin, 255 decimal sayısı hex formatında FF olarak gösterilir.

C Dilinde Bellek Erişimi

  • Summary Marker

    C dilinde bellek içinde verilere erişim sağlanabilir.

  • Summary Marker

    Bu güç güvenlik tehditlerine yol açabilir, diğer programların bellek verilerine erişim sağlamak mümkün olabilir.

  • Summary Marker

    Modern derleyiciler ve işletim sistemleri bu durumu biraz kontrol altına almaktadır.

Bellek Hataları

  • Summary Marker

    Bellek hatalarından biri yığın taşmasıdır, bu durumda hatalı bellek erişimi alınır.

  • Summary Marker

    Diğer hatalar arasında yığın ve bellek taşması gibi problemler bulunmaktadır.

  • Summary Marker

    Segmentation fault (segment hatası) en yaygın bellek hatalarından biridir.

Göstergelerin Kullanımı

  • Summary Marker

    Pointer (göstergeler) bellekteki adresleri tutar ve bu şekilde bellekteki verilere erişim sağlar.

  • Summary Marker

    C dilinde bir değişken tanımlandıktan sonra sadece ismi kullanılır, türü tekrar edilmez.

  • Summary Marker

    Gözlemler ve bellek adresi ile gösterim, birçok karmaşık yapı oluşturmaya olanak tanır.

Bellek Adreslendirme

  • Summary Marker

    C dilinde bellek adreslerine erişmek için * (yıldız) operatörü kullanılır.

  • Summary Marker

    Göstergenin içerdiği adrese gidildiğinde gösterilen değer alınır.

  • Summary Marker

    Bellekteki boşlukları etkili bir şekilde kullanmak için göstergelerin nasıl çalıştığını anlamak önemlidir.

Karmaşık Yapılar ve Dizi Gösterimi

  • Summary Marker

    Dilimler (strings) bellekte karakter dizileri olarak temsil edilir.

  • Summary Marker

    C'de diziler, bir karakterin adresini tutan bir pointer olarak ele alınır.

  • Summary Marker

    Gösterim ve dizilere erişim için kullanılacak yönetilen yöntemler örneklendirilmiştir.

Dizi Tanımlama

  • Summary Marker

    Bir dizi tanımlanarak, birlikte birkaç sayı otomatik olarak başlatılabilir.

  • Summary Marker

    Dizideki elemanlara doğrudan erişim ve printf ile baskı yapılabilir.

  • Summary Marker

    Pointer aritmetiği sayesinde, eleman sayılarına erişim kolaylaşır.

Pointer Aritmetiği

  • Summary Marker

    Pointer aritmetiği, veri türüne göre bellekteki kaydırmaları otomatikleştirir.

  • Summary Marker

    Programcı, ek asgari bilgilerle uğraşmadan dizi elemanlarına erişebilir.

  • Summary Marker

    Array ismi, dizinin ilk elemanının adresi olarak kullanılabilir.

String Kıyaslaması

  • Summary Marker

    Dizi karşılaştırmaları `==` ile değil, `strcmp` gibi fonksiyonlarla yapılmalıdır.

  • Summary Marker

    Stringler, bellekte farklı adreslerde saklanır; dolayısıyla, içerikleri aynı olsa da farklı sayılarla ifade edilir.

  • Summary Marker

    String kopyalama işlemleri için `strcpy` kullanılması önerilir.

Dinamik Bellek Yönetimi

  • Summary Marker

    Dinamik bellek tahsisi, `malloc` ile yapılır; `free` fonksiyonu ise bellek serbest bırakmak için kullanılır.

  • Summary Marker

    Bellek tahsis edilirken, yeterli bellek boyutu dikkatlice hesaplanmalıdır.

  • Summary Marker

    Dynamic memory allocation kullanımı ile programlar daha esnek hale gelir.

Bellek Hataları ve Otomatik Araçlar

  • Summary Marker

    Bellek taşmaları ve kayıpları, program çalışırken sorunlara yol açabilir.

  • Summary Marker

    Valgrind gibi araçlar, bellek hatalarını tespit etmek için kullanılabilir.

  • Summary Marker

    Doğru belleği yönetmek, performans ve güvenlik için kritiktir.

Bellek Sızıntıları ve Kontrol Araçları

  • Summary Marker

    Kodun sonunda belleği serbest bırakmak önemlidir.

  • Summary Marker

    Valgrind aracının kullanımı ile bellek sızıntılarını kontrol etme.

Garbage Değerler

  • Summary Marker

    Garbage değerler, başlatılmamış değişkenlerden kaynaklanır.

  • Summary Marker

    Başlatılmamış değişkenler rastgele veriler içerebilir, bu bellek güvenliğini tehdit eder.

Bellek Manipülasyonu ve Güvenlik Açıkları

  • Summary Marker

    Başlatılmamış değişkenler, kullanıcıların diğer kullanıcıların belleğini görmesine neden olabilir.

  • Summary Marker

    Bellek düzenleme yeteneği, güvenlik açıkları oluşturabilir.

Değişkenleri Değiştirme: İşlevler ve Geri Dönüşler

  • Summary Marker

    Fonksiyonlara değerlerin kopyaları gönderilir, bu nedenle değişiklikler ana değişkenlerde yapılmaz.

  • Summary Marker

    Referans işaretçileri (pointers) kullanarak değişkenlerin gerçek adreslerini geçirmenin avantajı.

Swapping Değişkenleri: Geçici Değişken Kullanımı

  • Summary Marker

    İki değişkenin değerlerini değiştirmek için geçici bir değişken kullanmak gereklidir.

  • Summary Marker

    Doğru geçici değişken kullanımı, bellekten değerlerin değiştirilmesi sürecini yönetir.

Güvenli Bellek Erişimi

  • Summary Marker

    Malloc ve calloc gibi dinamik bellek tahsis yöntemleri kullanılarak bellek güvenliği sağlanabilir.

  • Summary Marker

    Doğru bellek ayırma ve serbest bırakma, sistemin kararlılığını artırır.

Gizli Mesajın Filtrelenmesi

  • Summary Marker

    helpers.c dosyasında, resim filtresi uygulamak için oluşturulan bir filter fonksiyonu bulunmaktadır.

  • Summary Marker

    Fonksiyon, bir resmin yükseklik ve genişliğini, iki boyutlu bir dizi alır ve görüntüdeki her pikseli kontrol eder.

  • Summary Marker

    Mavi ve yeşil değerleri sıfırlayarak kırmızı filtre uygulayarak gizli bir mesajı ortaya çıkarmaktadır.

C Dilinin Yenilikleri ve Python'a Geçiş

  • Summary Marker

    C programlama dilinin beşinci haftasında son haftaya girilirken, Python'a geçileceği duyurulmaktadır.

  • Summary Marker

    Python, daha basit kod yazma imkanı sunarak, geliştirilmiş kütüphaneleri ve çerçeveleri kullanma olanağı tanır.

Bellek Yönetimi ve Veri Yapıları

  • Summary Marker

    Bellek, verilerin işlenebileceği bir tuval olarak ele alınır ve bu nedenle, byte'ların nasıl temsil edileceği üzerinde hakimiyet gerektirir.

  • Summary Marker

    Diziler, sıralı bellek alanlarıdır ve boyutları sabittir; ancak yeni veriler eklemek zor olabilir.

  • Summary Marker

    Veri yapıları konusunda daha esnek çözümler aramak amacıyla, dinamik bellek yönetimine ve yeni alanların yaratılmasına yönelik yöntemler keşfedilir.

Dizilere Veri Ekleme Sorunu

  • Summary Marker

    Dizilere veri eklendiğinde, mevcut bir dizi ile genişletmenin yolları açıklanır.

  • Summary Marker

    Genişletme işlemi sırasında hem zaman hem de bellek maliyetleri üzerinden alternatif çözümler sunulur.

Dinamik Bellek Yönetimi ve Malloc

  • Summary Marker

    Dizilerin boyutlarının değiştirilmesinde malloc ve realloc fonksiyonlarının kullanımı açıklanır.

  • Summary Marker

    malloc ile dinamik bellek tahsis edilirken, hâlâ bu belleği serbest bırakmanın önemi vurgulanır.

  • Summary Marker

    realloc, daha önce oluşturulmuş bir dizinin boyutunu değiştirebilen bir fonksiyondur ve tasarruf sağlar.

Bağlantılı Listeler

  • Summary Marker

    Bağlantılı listeler, bellek alanında verileri birbirine bağlamak için kullanılır ve her eleman sonraki elemanın adresini gösterir.

  • Summary Marker

    Bu yapı, bellekte parçalanmış verilerin yönetilmesine olanak tanırken, dizi boyutundan bağımsız veri ekleme imkanı sunar.

  • Summary Marker

    Noktalı işaretler (pointer) kullanarak birden fazla değer bir arada saklanabilir ve kolaylıkla erişilebilir.

Bellek Yönetimi

  • Summary Marker

    malloc, geçerli belleği ayırt etme işlevine sahiptir.

  • Summary Marker

    Heap ve stack bellek alanları hakkında bilgi verilmektedir.

  • Summary Marker

    Stack'teki geçerli ve geçersiz değerlerin yönetimi, derleyici tarafından sağlanmaktadır.

Node Kavramı

  • Summary Marker

    Node, bilgi kapsülleyen veri yapıları için genel bir terimdir.

  • Summary Marker

    C dilinde struct kullanarak bir node tanımlamak için typedef kullanılır.

  • Summary Marker

    Her node, bir sayı ve bir pointer içermektedir.

Bağlı Liste Oluşturma

  • Summary Marker

    Linked list oluşturulurken, her node için hafızadan alan istenir.

  • Summary Marker

    Öncelikle null olarak tanımlanmış bir liste değişkeni oluşturulur.

  • Summary Marker

    malloc ile yeni bir node oluşturulup, listeye eklenmektedir.

Node Ekleme

  • Summary Marker

    Her yeni eklenen node, önceki node'un next pointer'ına bağlanır.

  • Summary Marker

    Ekleme işlemleri için gerekli bellek kontrolü yapılmalıdır.

  • Summary Marker

    Node'un içindeki tüm alanlar uygun değerlerle başlatılmalıdır.

Linked List'te Gezinme

  • Summary Marker

    Bağlı listede gezinmek için pointer kullanımı gerekmektedir.

  • Summary Marker

    Yinelenen yapılar yerine for-loop ile traverse edilir.

  • Summary Marker

    Listeden bilgi okumak için mevcut node'a gidilir ve değerler ekrana basılır.

Hafıza Temizleme

  • Summary Marker

    Bağlı liste yapısındaki tüm node'lar serbest bırakılmalıdır.

  • Summary Marker

    Hafıza temizlenirken, listeyi takip eden bir geçici değişken kullanılmalıdır.

  • Summary Marker

    Serbest bırakma işlemleri, last in first out (LIFO) düzenine uygun şekilde yapılmalıdır.

Veri Yapısı ve Bellek Yönetimi

  • Summary Marker

    Sıralı verilerin güncellenmesi gerektiğinde dikkat edilmesi gerekenler.

  • Summary Marker

    Bellek tahsisi ve hafıza sızıntılarının önemi üzerinde duruldu.

  • Summary Marker

    Dinamik bellek tahsisi yapan veri yapılarında işaretçilerin kullanımı risklidir.

Sıralı Bir Listede Eleman Ekleme

  • Summary Marker

    Sıralı bir listeye eleman eklemek için izlenmesi gereken adımlar sergilendi.

  • Summary Marker

    Doğru sıraya göre noktalama, mevcut diğer noktaların bağlantılarını etkileyecektir.

  • Summary Marker

    Ekleme işlemleri esnasında önceki bağlantıların korunması gerektiğine dikkat çekildi.

İkili Ağaçların Tanımı

  • Summary Marker

    İkili ağaç yapısının her düğümünün iki alt çocuğu olabileceği anlatıldı.

  • Summary Marker

    İkili arama ağaçlarının hızlı veri arama imkânı sağladığına değinildi.

  • Summary Marker

    Ağaç yapılarında veri erişiminin nasıl çalıştığını göstermek için örnekler verildi.

Hafıza Yönetimi ve Bellek Temizleme

  • Summary Marker

    Ağaç yapılarında düğümlerin serbest bırakılmasının önemi vurgulandı.

  • Summary Marker

    Yinelenmeli yapıların kullanımı üzerinde duruldu.

  • Summary Marker

    Belirli bir düğümü iptal etmeden önce onun çocuklarının düzgün bir şekilde iptal edilmesi gerektiği anlatıldı.

Hash Table ve Kullanımı

  • Summary Marker

    Hash tablolarının veri yapılarını birleştirmede nasıl yardımcı olabileceği açıklandı.

  • Summary Marker

    Anahtar-değer eşleştirmelerinin nasıl işlediğine dair örnekler verildi.

  • Summary Marker

    Hash tablo yapısında çakışmaların nasıl işlendiği tartışıldı.

Hash Tablosu Temelleri

  • Summary Marker

    Hash tablosunun, dizi ve bağlı liste karışımı bir yapı olduğu açıklanır.

  • Summary Marker

    Aynı ilk harfe sahip olan elemanların bir bağlı listede zincirleme şeklinde depolandığı belirtilir.

  • Summary Marker

    Sıralı erişim sağlarken, uzun bağlı listelerin önlenmesine yönelik stratejiler tanıtılır.

Düğüm Yapısı ve Hash Tablosu Oluşturma

  • Summary Marker

    Bir bağlı listedeki düğüm yapısının nasıl tanımlanacağı açıklanır.

  • Summary Marker

    Hash tablosunun, düğümlerden oluşan bir dizi içerdiği belirtilir.

  • Summary Marker

    Çarpışmaları önlemek için daha fazla dizi oluşturma yöntemleri üzerinde durulur.

Hash Fonksiyonu ve Çarpışmaların Yönetimi

  • Summary Marker

    Hash fonksiyonunun, girdi olarak verilen bir ismin hash değerini hesaplayarak bir dizinin konumunu belirlediği anlatılır.

  • Summary Marker

    Çarpışma durumunun daha iyi yönetilmesi için girdi olarak iki harf kullanma önerisi yapılır.

  • Summary Marker

    Daha fazla düğüm ve kova içeren hash tablolarının avantajları tanıtılır.

Trie Veri Yapıları

  • Summary Marker

    Trie veri yapısının, isimlerin her harfi ile bir ağaç yapısı oluşturduğu açıklanır.

  • Summary Marker

    Shared data ile hafıza kullanımının optimize edildiği vurgulanır.

  • Summary Marker

    Arama ve yerleştirme zamanlarının bağımsız bir şekilde adım sayısına bağlı olduğu belirtilir.

Veri Yapılarının Performans Karşılaştırması

  • Summary Marker

    Hash tablosunun Big O notasyonu ile incelendiği ve en kötü senaryolarda O(n) performans gösterdiği belirtilir.

  • Summary Marker

    Trie yapısının, özellikle uzunluk bağımsız bir arama süresi sunduğu açıklanır.

  • Summary Marker

    Zaman ve hafıza arasındaki denge ile sistem tasarımında önemli noktalar üzerinde durulur.

Soyut Veri Yapıları ve Kullanım Alanları

  • Summary Marker

    Queue ve Stack veri yapılarının tanıtımı yapılır.

  • Summary Marker

    FIFO (First In, First Out) ve LIFO (Last In, First Out) yapıların kullanıldığı örnekler verilir.

  • Summary Marker

    Bu veri yapılarının yazılım ve gerçek dünya uygulamalarındaki önemine vurgu yapılır.

Söz Dizimi Farklılıkları

  • Summary Marker

    C dilinde süslü parantezler ve noktalı virgüller kullanılırken, Python'da bu unsurlar yerine girinti önemlidir.

  • Summary Marker

    Python'da koşul ifadeleri için parantez kullanımı gerekli değildir, bu da yazmayı kolaylaştırır.

  • Summary Marker

    Python'daki 'elif' ifadesi, 'else if' yerine kullanılır ve bu daha sade bir yapıdır.

Boole Verileri ve Dönüşüm

  • Summary Marker

    Python'da 'True' ve 'False' büyük harfle başlar.

  • Summary Marker

    Koşullu ifadelerinde Python, 'do while' yapısını desteklemez, bunun yerine döngüler daha basit bir yapı ile gerçekleştirilir.

Döngü Yapıları

  • Summary Marker

    Python'da bir döngü oluşturmak için 'for i in range(n)' ifadesi kullanılır; bu, belirli bir aralıkta yineleme sağlar.

  • Summary Marker

    Python'da listeler, bağlı listeler gibi yönetilir ve kullanılabilirlik açısından daha fazla esneklik sunar.

Python Veri Tipleri

  • Summary Marker

    Python, C diline göre daha az veri tipi içerir; bu türler yapılandırılmıştır ve Python otomatik olarak türü tahmin eder.

  • Summary Marker

    Python'ın veri yapıları arasında listeler, kümeler ve sözlükler yer alır.

Yükleme ve Bellek Yönetimi

  • Summary Marker

    Python'da bellek yönetimi otomatik olarak gerçekleşir; bu nedenle 'malloc' veya 'free' gibi işlevlere ihtiyaç yoktur.

  • Summary Marker

    Modül veya kütüphaneler Python'da sadece 'import' ile kullanılır; fonksiyonlar ayrıntılı olarak belirtilerek yüklenebilir.

Performans Karşılaştırması

  • Summary Marker

    Python, daha hızlı yazım kolaylığı sunarken, C dilinde yazılmış kodlar genellikle daha hızlı çalışır.

  • Summary Marker

    Büyük veri kümeleri üzerinde çalışırken C dilinde yazılmış kod kullanmak tercih edilebilirken, gelişim sürecini hızlandırmak için Python daha iyi bir seçenek olabilir.

Python ve Main Fonksiyonu

  • Summary Marker

    Python'da main fonksiyonu zorunlu değildir, bu, kod yazımını kolaylaştırır.

  • Summary Marker

    C dilinde main fonksiyonu bulunmasa derleme hatası alınır, fakat Python'da başlamak için gerekmez.

String Formatlama ve Kullanım

  • Summary Marker

    Python'da f-string ile değişkenleri kolayca yerleştirmek mümkündür.

  • Summary Marker

    Kıvrık parantezler olmadan değişkenler yerleştirilmez, bu yüzden dikkat edilmelidir.

Kullanıcı Girdisi ve Hata Yönetimi

  • Summary Marker

    Python'un input fonksiyonu, C dilindeki getString fonksiyonuna benzer.

  • Summary Marker

    Kullanıcıdan alınan değerler, string olarak döner ve tür dönüşümü gerektirir.

  • Summary Marker

    Hatalı kullanıcı girişi durumunda, Python'da exception yönetimi mümkündür.

Temel Hesaplama Fonksiyonu

  • Summary Marker

    Basit toplama işlemleri için Python'da doğrudan print komutu kullanılabilir.

  • Summary Marker

    Kullanıcıdan alınan girdiler string olarak döndüğü için, uygun dönüşümler yapılmalıdır.

Hata Ayıklama ve İzinler

  • Summary Marker

    Python'da çalışmayan hatalı kod durumlarında traceback bilgileri sağlanır.

  • Summary Marker

    Kütüphanelerdeki fonksiyonlar için namespace kullanımı önemlidir.

Döngü Kullanımı ve İşlevsellik

  • Summary Marker

    Python'da for döngüsü ile tekrarlayan işlemler basitçe yapılabilir.

  • Summary Marker

    Fonksiyon tanımlamaları ve çağırmaları ile kod daha düzenli hale gelir.

Input Kontrolü ve Negatif Değerler

  • Summary Marker

    Kullanıcıdan alınan değerin negatif olması durumu yönetilmelidir.

  • Summary Marker

    Bu durumda, kullanıcının tekrar giriş yapması için bir döngü kullanılabilir.

Python'da Do While Döngüsü Yaratma

  • Summary Marker

    Python'da doğrudan bir do while döngüsü yoktur.

  • Summary Marker

    Bununla birlikte, bir sonsuz döngü kullanarak bu mantığı başarıyla taklit edebilirsiniz.

  • Summary Marker

    Kullanıcıdan belirli bir değeri (örneğin, pozitif bir sayı) istedikten sonra döngüden çıkabilirsiniz.

Fonksiyon Tanımlama ve Kullanma

  • Summary Marker

    CS50 kütüphanesinin getInt fonksiyonu yerine bir get_height fonksiyonu tanımlamak.

  • Summary Marker

    Fonksiyona döngü içindeki işlemleri yerleştirip, doğru değeri bulduğunuzda geri dönebilirsiniz.

  • Summary Marker

    Python'da iç içe döngü değişkenlerinin kapsamı C'den farklıdır; döngüden sonra da erişilebilir.

Hatalarla Baş Etme Yöntemleri

  • Summary Marker

    Python'da try-except yapısı ile kullanıcıdan alınan girdi hatalarını yönetmek.

  • Summary Marker

    Yanlış bir girdi girildiğinde kullanıcıya hata mesajı vererek tekrar girdi istemek.

  • Summary Marker

    Bu süreçle programın çökmesini önleyerek kullanıcı deneyimini iyileştirmek.

Diziler ve Listeler

  • Summary Marker

    Python'da dinamik listeleri kullanarak kullanıcıdan veri almak.

  • Summary Marker

    Kullanıcıdan alınan değerleri dizide saklamak için append metodu kullanmak.

  • Summary Marker

    Python'da dizilerin boyutunun sabit olmadığını bilmek, eleman eklemeyi ve çıkarmayı kolaylaştırır.

Sözlükler ve Anahtar-Değer İlişkilendirmesi

  • Summary Marker

    Python’da anahtar-değer ilişkileri kurarak hızlı veri erişimi sağlamak için sözlükleri kullanmak.

  • Summary Marker

    Kullanıcının girdiği bir adı kullanarak o kişinin telefon numarasını almak.

  • Summary Marker

    Sözlük yapısının kolay erişim sağlaması ve kullanıcı dostu olması.

Python'da Sözlükler ile Veri Yönetimi

  • Summary Marker

    Python'da sözlükler, anahtar-değer çiftleri kullanarak veri Saklama yöntemi sunar.

  • Summary Marker

    Bir isimle bir numara almak için sözlükten veri çekmenin avantajları gösterilmiştir.

  • Summary Marker

    Sözlüklerde anahtarlar string olarak kullanılabilir, bu da veriye erişimi kolaylaştırır.

Phonebook.py Örneği

  • Summary Marker

    Phonebook.py dosyası, kullanıcıdan isim alarak karşılık gelen numarayı göstermektedir.

  • Summary Marker

    Programdaki hata, yanlış dosyanın çalıştırılmasından kaynaklanmıştır.

  • Summary Marker

    Kullanıcının isimleri girdiği ve karşılık gelen telefon numaralarını bulduğu bir telefon defteri uygulaması geliştirilmektedir.

CSV Dosyaları ile Veri Saklama

  • Summary Marker

    Veri kalıcılığı sağlamak için CSV (Virgül ile Ayrılmış Değerler) dosyaları kullanılmaktadır.

  • Summary Marker

    Program, kullanıcıdan isim ve numara alarak bunları CSV dosyasına eklemektedir.

  • Summary Marker

    CSV dosyaları, verilerin saklandığı basit metin dosyalarıdır ve kolayca okunabilirler.

Veri Analizi ile Örnek Uygulama

  • Summary Marker

    Kullanıcıların favori TV programlarını toplamak için bir Google Formu oluşturuldu.

  • Summary Marker

    CSV formatında indirilerek analiz yapılmak üzere bu veriler değerlendirildi.

  • Summary Marker

    Sonuçlar, hangi programların daha popüler olduğunu belirlemek için sayısal verilere dönüştürülmüştür.

Daha İleri Python Uygulamaları

  • Summary Marker

    Python'da ses tanıma ve yüz tanıma gibi ileri düzey uygulamalar için kütüphaneler tanıtıldı.

  • Summary Marker

    Kullanıcıdan ses alarak kişisel etkileşimler oluşturulması demo edilmiştir.

  • Summary Marker

    QR kodları üretme gibi eğlenceli özelliklerin de Python ile gerçekleştirileceği gösterildi.

Giriş ve Temizlik İşlemleri

  • Summary Marker

    Kullanıcı girdisinde boşlukları temizlemek için 'strip' fonksiyonu kullanılabilir.

  • Summary Marker

    Verileri tümünü büyük harfe dönüştürmek için 'upper' fonksiyonu kullanılmaktadır.

  • Summary Marker

    Python'da bir dizi fonksiyon çağrısını zincirleyerek daha düzenli kod yazmak mümkündür.

Dizi ve Set Kullanımı

  • Summary Marker

    Python'da dizilerden ziyade set kullanılarak, tekrar eden elemanların otomatik olarak filtrelenmesi sağlanabilir.

  • Summary Marker

    Veri sıralama işlemleri için Python'da 'sorted' fonksiyonu kullanılmaktadır.

Veri Sayma ve Sözlük Kullanımı

  • Summary Marker

    Kullanıcıdan gelen başlıkların sayısını tutmak için bir sözlük yapısı oluşturulabilir.

  • Summary Marker

    Bir başlık mevcutsa sayım artırılıp, yoksa başlangıç değeri olarak 1 atanmalıdır.

  • Summary Marker

    Kullanıcı girdilerinde büyük harf duyarlılığını önlemek için veriler her zaman büyük harfe dönüştürülmelidir.

Veri Analizi ve Hataları

  • Summary Marker

    Hataları gidermek için doğru anahtar yönetimi yapılarak, her başlığın sayımı izlenmelidir.

  • Summary Marker

    Excel ve Google Sheets gibi düz dosyalardan veritabanı oluşturmak için SQL kullanılabilir.

SQL'e Giriş

  • Summary Marker

    SQL, verileri oluşturma, okuma, güncelleme ve silme yeteneklerini barındıran bir dil olarak tanımlanır.

  • Summary Marker

    SQL ile tablolar oluşturularak veritabanları daha düzenli ve etkili şekilde yönetilebilir.

SQLite Kullanımı

  • Summary Marker

    SQLite, hafif bir SQL sürümüdür ve kullanımı oldukça yaygındır.

  • Summary Marker

    Kullanıcı girdilerini temizledikten sonra verilerin bir veritabanında depolanması sağlanabilir.

Veritabanı Oluşturma ve İlk Sorgular

  • Summary Marker

    CSV dosyasındaki verilerin favorites.db adlı bir SQLite veritabanına yüklendiği açıklanır.

  • Summary Marker

    SQLite3 arayüzünde veritabanı yapısının görüntülenmesi için .schema komutu kullanılır.

  • Summary Marker

    Otomatik olarak oluşturulan 'favorites' tablosunun üç metin sütunu: timestamp, title ve genres içerdiği belirtilir.

SQL Sorguları ile Veri İşleme

  • Summary Marker

    SELECT komutu kullanılarak titles alanından veriler çekilir.

  • Summary Marker

    Veri sorgulama sürecinin Python'da yazılan daha uzun kodların yerine SQL ile kısaltıldığı vurgulanır.

  • Summary Marker

    SELECT ile birden fazla sütun (örneğin, title ve genres) sorgulayarak sonuçlar elde edilir.

Veri Fonksiyonları ve Filtreleme

  • Summary Marker

    SQL'deki DISTINCT, COUNT, AVG gibi fonksiyonların kullanımı örneklendirilir.

  • Summary Marker

    WHERE koşulu ile belirli verilerin filtrelenmesi ve 'LIKE' anahtar kelimesinin kullanımı detaylandırılır.

  • Summary Marker

    Comma-separated values (CSV) yapısının veritabanı tasarımındaki zorlukları üzerinden geçilir.

Veritabanında Güncelleme ve Silme İşlemleri

  • Summary Marker

    UPDATE sorgusu ile mevcut verilerin değiştirilmesi gösterilir.

  • Summary Marker

    DELETE komutu ile belirli verilerin silinmesi gerektiği anlatılır.

  • Summary Marker

    Veritabanında değişikliklerin anlık olarak yansıtıldığı ve bunun yazılım uygulamalarındaki önemine değinilir.

Veri Mimarisi ve İlişkisel Veritabanı

  • Summary Marker

    İlişkisel veritabanlarını oluşturmak için birden fazla tablo (shows ve genres) kullanmanın avantajları vurgulanır.

  • Summary Marker

    Bir tabloya ait benzersiz kimliklerin (ID'ler) atanması ve verilerin daha anlamlı hale getirilmesi sağlanır.

  • Summary Marker

    Nesneler arası birçoktan bire ilişkilendirme üzerinde durulur.

Python ile SQL Entegrasyonu

  • Summary Marker

    Python'da SQL kodları ile veri erişimi ve işlemleri gerçekleştirilir.

  • Summary Marker

    cs50 kütüphanesi ile SQL kullanılarak veritabanı sorguları yapılır.

  • Summary Marker

    Kullanıcıdan alınan verilerin SQL komutlarıyla işlenmesi örneklenir.

Veri Tabanı Sorguları ve Sonuçlar

  • Summary Marker

    SQL sorgusu, belirli bir verinin sayısını döndürmeli ve sonuçları bir öğe sözlüğü şeklinde sunmalıdır.

  • Summary Marker

    Örnek olarak, 'The Office' başlıklı içerik toplam 12 kez bulunmuştur.

Veri Tabanı Yapılarıyla Çalışma

  • Summary Marker

    SQLite veritabanında tablolar ve veri türleri hakkında bilgiler verilmektedir.

  • Summary Marker

    Veri türleri arasında integer, text, numeric, ve BLOB bulunmaktadır.

İndeks Oluşturma ve Performans İyileştirme

  • Summary Marker

    SQL'de arama performansını artırmak için indeks oluşturulabilir.

  • Summary Marker

    İndeksler, verilerin daha hızlı erişimini sağlar ve bu sayede sorgu süreleri kısalır.

Join İşlemleri ile Birleştirme

  • Summary Marker

    Birden fazla tablo arasındaki verileri birleştirmek için JOIN ifadeleri kullanılır.

  • Summary Marker

    Kişi ID'si kullanılarak programcılar, belirli kişilere ait tüm programların başlıklarını sorgulayabilir.

SQL Enjeksiyon Saldırıları

  • Summary Marker

    Kötü niyetli kullanıcılar, SQL enjeksiyon saldırıları ile sistemlere zarar verebilir.

  • Summary Marker

    SQL sorgularında kullanıcı girdilerini yeterince filtrelemek önemlidir.

Yarış Koşulları ve Veritabanı Eşzamanlama

  • Summary Marker

    Çoklu kullanıcıların aynı anda veritabanına erişimi, yarış koşullarına yol açabilir.

  • Summary Marker

    Veritabanı işlemlerinin atomik olması, kullanıcıların verileri güvenli bir şekilde güncellemelerini sağlar.

Paralel İşlemler ve Problemler

  • Summary Marker

    İlk olarak, başlangıçta bir yumurta için 10 beğeni olduğunu varsayalım.

  • Summary Marker

    Kullanıcılar aynı anda beğeni butonuna tıkladığında, beğeni sayısı her kullanıcı için aynı kalabilir.

  • Summary Marker

    Veritabanına kaydedilmeden önce her iki istek de benzer sonuçlarla sonuçlanabilir.

Dışarıda İletişim Problemleri

  • Summary Marker

    İki kullanıcı, aynı değişkenin durumuna bakarak kararlara varır.

  • Summary Marker

    Sorunu çözmek için kullanıcılar arasında iletişimi sağlamak gerekir.

  • Summary Marker

    Yazılımlarda 'kilit' terimi, değişkenlerin güvenli bir şekilde güncellenmesini sağlamada kullanılır.

TCP/IP Protokolü

  • Summary Marker

    TCP/IP, veri paketlerinin yönlendirilmesi için kullanılan temel protokoldür.

  • Summary Marker

    IP adresleri, her bir cihazın internetteki benzersiz kimliğidir ve 32 bite kadar uzanabilir.

  • Summary Marker

    TCP, veri aktarımını güvence altına alarak paketlerin eksiksiz bir şekilde ulaşmasını sağlar.

HTTP ve HTTPS Protokolleri

  • Summary Marker

    HTTP, web tarayıcıları ve web sunucuları arasındaki iletişim için standart bir protokoldür.

  • Summary Marker

    HTTPS ise güvenli HTTP protokolüdür ve web içeriğinin korunması için kullanılır.

  • Summary Marker

    Web sayfaları ve içerikler arasında nasıl veri gönderileceği 'GET' ve 'POST' yöntemleri ile tanımlanır.

Veri İletişiminde Bağlantılar

  • Summary Marker

    Bir bağlantı isteği, istemci ve sunucu arasında iki aşamalı olarak gerçekleşir.

  • Summary Marker

    İstemci, bir URL talep ettiğinde, sunucu bu isteğe yanıt verir.

  • Summary Marker

    Her istek, belirli bir veri türünü geri döner ve bu veri türü içerik türleri ile tanımlanır.

HTTP Durum Kodları

  • Summary Marker

    HTTP 200 durumu, sayfanın doğru bir şekilde yüklendiğini gösterir.

  • Summary Marker

    HTTP 404 durumu, talep edilen sayfanın bulunmadığını belirtir.

  • Summary Marker

    Diğer yaygın HTTP durum kodları arasında 301 (kalıcı taşındı), 401 (yetkisiz) ve 500 (sunucu hatası) bulunur.

  • Summary Marker

    404 kodu, kullanıcının yanıtlanmayan bir sayfaya erişmeye çalıştığında görülen yaygın bir hatadır.

HTML ve CSS Dillerine Giriş

  • Summary Marker

    HTML, sayfaların yapısını oluşturmak için kullanılırken, CSS sayfaların stilini belirler.

  • Summary Marker

    HTML, etiketler ve nitelikler ile yapılandırılır; temel etiketler arasında , , ve bulunur.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Sayfa başlığı, <title> etiketinin içinde tanımlanır ve kullanıcıya tarayıcı sekmesinde gösterilir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">Web Sayfası Oluşturma</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Kullanıcıların tarayıcıları ile taleplerinde HTML kodu göndermeleri gerektiği vurgulanır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">HTML'de paragraf oluşturmak için <p> etiketinin kullanılması gerektiği gösterilir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Başlıklar için farklı HTML etiketleri (H1, H2, H3) tipik olarak farklı boyut ve vurgular sağlar.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">Liste ve Tablo Oluşturma</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">HTML'de sıralı (OL) ve sırasız (UL) listeler oluşturulabilir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Tablolar, <table>, <tr>, <th> ve <td> etiketleri ile oluşturulur.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Tablo başlıkları, bilgilerin anlaşılmasını kolaylaştırmak için kullanılır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">Görsel ve Medya Ekleme</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Resimler eklemek için <img> etiketi, video eklemek için ise <video> etiketi kullanılır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Resimlerin kaynağı, ilgili dosya yolunu gösterir ve alternatif metin seçenekleri (alt) eklenmelidir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Videolar için genişlik ve yüksekliği ayarlamak mümkündür.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">Bağlantılar ve İframe'ler</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Bağlantılar oluşturmak için <a> (anchor) etiketi ve HREF nitelikleri kullanılır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">İframe'ler, başka bir sayfanın içeriğini mevcut sayfada göstermek için kullanılır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">Phishing Saldırıları ve HTML Kullanımı</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Phishing saldırıları, kullanıcıyı yanlış yönlendiren HTML sayfalarının oluşturulmasını içerir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Bir web sayfasının görünümünü değiştirmek için HTML kodları kullanılabilirken, arka plandaki etiketler farklı linkler gösterebilir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Kullanıcıların bağlantılara tıklamadan önce dikkatli olmaları ve sağ altta görünen bağlantı adresine bakmaları gerekmektedir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">Sayfalar Arası Bağlantılar ve Hedefleme</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Bağlantı tanımlamak için HREF kullanarak diğer sayfalara nasıl yönlendirme yapılacağı gösterilmektedir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">HTML kodu kullanarak bir web uygulaması içinde çoklu sayfalar oluşturma imkanı sağlanır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">Responsive Tasarım</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Responsive tasarım, web sayfasının farklı cihazlarda uygun görünmesi için gerekli HTML etiketlerinin kullanımını ifade eder.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Viewport metatagı, cihazın boyutuna uyum sağlaması için tarayıcıya doğrultma sağlar.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">HTML Formları ve URL Parametreleri</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">HTML formları, kullanıcının bilgileri girmesi için alanlar ve bunları sunucuya iletme mekanizmaları içerir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">GET ve POST yöntemleri, URL üzerinde kullanıcı girişleri ile çeşitli parametreler yapar.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">CSS ile Stil Verme</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">CSS, web sayfalarının görünümünü ve düzenini değiştirmek için kullanılır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">HTML etiketlerine stiller ekleyerek metin boyutları, hizalamaları ve renkleri ayarlanabilir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">CSS ile Seçici Kullanımı</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">CSS'de bağlantı etiketlerinin varsayılan olarak metin süslemesi yoktur.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Nitelik seçici kullanarak, belirli URL'lere temel alarak stil vermek mümkündür.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Yıldız eşittir (*) kullanımıyla, bağlantı etiketlerinin içeriği üzerinde geniş bir seçim yapılabilir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">Framework Kullanımı</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Web geliştiricileri sıklıkla Bootstrap gibi framework'lerden yararlanarak daha hızlı ve estetik tasarımlar yapar.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Bootstrap, kullanıcıların sadece birkaç satır kod yazarak şık bileşenler oluşturmasını sağlayan bir CSS framework'üdür.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Bootstrap kullanarak sayfa yeniden tasarımı, kullanıcı deneyimini önemli ölçüde iyileştirir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">JavaScript ile Etkileşim</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">JavaScript, kullanıcı etkileşimlerini işlemek için kullanılır ve bu etkileşimler tarayıcıda gerçekleştirilir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Form verilerini işlemek için JavaScript'te olay dinleyicileri kullanılabilir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">JavaScript ile DOM üzerinde değişiklik yaparak sayfa içeriği dinamik olarak güncellenebilir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">Python ve Web Geliştirme</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Flask gibi Python framework'leri kullanarak web uygulamaları geliştirmek, kullanıcı isteklerini yönetmeyi kolaylaştırır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">URL'leri analiz ederek dinamik yanıtlar oluşturmak mümkündür.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Web uygulaması geliştirmek için gerekli olan temel dosyalar (app.py, requirements.txt) oluşturulmalıdır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">Flask Framework'e Giriş</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Flask, minimal bir mikro çerçeve olarak web uygulamaları geliştirmek için kullanılır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Farklı web çerçeveleri (Django, ASP.NET) farklı konvansiyonlar sunar.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Flask'in basit gereksinimleri ile uygulama oluşturmak kolaydır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">Uygulama Oluşturma</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">İlk olarak, 'app.py' dosyası oluşturulması ve basit bir selam mesajı içeren bir fonksiyon tanımlanması gerektiği belirtiliyor.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Flask uygulaması oluşturmak için gerekli kodlar yazılmalı ve 'index.html' adında bir şablon dosyası kullanılmalı.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Uygulama, '/' rotasında çalışacak şekilde ayarlanmalıdır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">HTML Şablonu Oluşturma</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">İlk olarak 'templates' dizini oluşturulmalı ve 'index.html' dosyası inşa edilmelidir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">HTML sayfası, sayfanın başlığı ve içerik kısmına selam mesajı eklenerek düzenlenmiştir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">CSS ve diğer statik içerikler için ayrı dizin kullanılmayacak.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">Flask Sunucusunu Çalıştırma</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Flask sunucusunu başlatmak için 'flask run' komutu kullanılmalıdır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Uygulama varsayılan olarak port 5000 üzerinde çalışır ve kullanıcı arayüzü bu port üzerinden görüntülenir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">HTML içeriği üzerinden kullanıcıya sunulur.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">Dinamik İçerik Ekleme</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Kullanıcının ismini dinamik olarak almak için URL'de parametre kullanımı gösterilir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Flask içinde 'request.args.get()' fonksiyonu ile kullanıcıdan alınan bilgi işlenir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Bu yöntemle, URL içeriği üzerinden dinamik olarak mesaj gösterilmesi sağlanır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">Form Kullanımı Eklemek</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Kullanıcıdan veri almak için basit bir form eklenir; bu form, verilere isim karşılığında kullanıcının adını almak için tasarlanır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Form, kullanıcının girdiği verileri '/greet' rotasına gönderecek şekilde yapılandırılır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Form gönderimi sonrası URL'deki parametre değişiklikleri gösterilir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">POST Yönteminin Kullanımı</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Formdan veri gönderirken 'GET' yerine 'POST' metodunun kullanılması, URL'de hassas bilgilerin gizlenmesini sağlar.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Uygulama içindeki rotaların POST isteklerini desteklemesi gerekir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Her bir yöntem farklı durumlarda farklı avantajlara sahiptir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">Hata Kontrolü ve Geliştirmeler</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Uygulamadaki hata kontrol mekanizmaları gereklidir; boş isim girişi yapıldığında kullanıcıya uygun bir geri bildirim sağlanmalıdır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Temel bir hata denetimi ile boş girdi algılandığında, varsayılan bir değerle (ör. 'dünya') cevap verilebilir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">HTML üzerinde bir 'required' özelliği kullanarak kullanıcı girişlerinin zorunlu olması sağlanabilir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">Şablon Düzenleme ve Yeniden Kullanım</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Ortak HTML yapısının yeniden kullanılabilirliği için 'layout.html' şablonu oluşturulması gerektiği açıklanır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Bu şablon üzerinden sayfaların genel yapısı korunarak form ve içerik kısımları özelleştirilebilir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Jinja şablon motoru kullanılarak değişkenlerin ve dinamik içeriklerin işlenmesi sağlanır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">GET ve POST İstekleri</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">request.args, GET istekleri için; request.form, POST istekleri içindir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">İkisinin işlevleri oldukça benzerdir, ancak doğru olanı kullanmak kullanıcıya bağlıdır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Kullanıcının girdiği veriyi görmek için request.args yerine request.form kullanılması gerekir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">MVC Yapısı</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">MVC (Model-View-Controller) yapısı, uygulama geliştirmede yaygın bir paradigmadır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">app.py dosyası, genellikle kontrolör olarak adlandırılır ve programlama mantığını içerir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">HTML ve Jinja kodu içeren dosyalar, görünüm şablonlarıdır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Model, verilerin saklandığı kısmı temsil eder ve daha sonra işlenecektir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">Form Oluşturma</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Kullanıcının spor kaydı oluşturması için bir form oluşturulmaktadır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Form, ad ve spor bilgilerinin toplanması için input alanları içermektedir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Dropdown menüsünde kullanıcıya üç spor seçeneği sunulmaktadır: basketbol, futbol ve ultimate frisbee.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">Hata Yönetimi</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Kullanıcının boş form göndermesi durumunda hata kontrolü yapılır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Hatalı kayıt durumunda kullanıcılara hata mesajları iletilmektedir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">İlgili hata mesajları, belirli bir hata durumuna (adı eksik, spor seçilmemiş) spesifik bir şekilde uygundur.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">Veri Saklama ve SQL Kullanımı</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Kullanıcıların kayıt bilgileri bir Python sözlüğü kullanılarak saklanmaktadır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Flask ile birlikte SQLite kullanarak gelen kullanıcı verileri kaydedilmektedir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Veritabanına bağlantı kurarak kayıt işlemleri gerçekleştirilir ve veritabanında saklanan kayıtlar görüntülenir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">Flask Uygulamasını Çalıştırma</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Uygulama başlar ve ana sayfa yüklenir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Kayıt için kullanıcı adı girilir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Kullanıcı, ultimate frisbee için kayıt olur ve başarılı bir şekilde eklenir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">Veri Tabanı Durumu</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">SQLite ile ilişkinin açılması ve mevcut kayıtlara erişim.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Daha önce sıfır olan kayıt sayısı, üçe çıkar.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Kayıtları görüntülemek için kullanılan HTML tablo yapısı incelenir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">Deregister İşlemi</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Kullanıcıları kaldırmak için düğmelere tıklanır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Deregister route'u üzerinden veritabanından kayıt silinir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Kayıt işlemi sırasında ID kullanmanın önemi vurgulanır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">POST ve GET İstekleri</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Kullanıcıların butonlar aracılığıyla nasıl etkileşimde bulunduğu gösterilir.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Düzenli şekilde POST istekleri kullanmanın avantajları açıklanır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Kötü niyetli bir URL kullanarak kullanıcıları kandırma riski örneği.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">Flask-Mail ile E-posta Gönderimi</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Flask-Mail kütüphanesi ile e-posta gönderme sürecinin gösterilmesi.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Kullanıcı kaydını onaylamak için otomatik e-posta gönderimi.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Gizli bilgilerin yönetimi için ortam değişkenlerinin kullanımı açıklanır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">Kullanıcı Oturumları ve Çerezler</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Oturumların nasıl çalıştığı ve bunların önemi.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Kullanıcıların tarayıcıları arasında nasıl tanındığı.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Çerezlerin güvenli bir şekilde kullanımı ve rolü açıklanır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">Alışveriş Sepeti Uygulaması</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Kullanıcıların kitapları sepete eklemesi için basit bir arayüz.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Sepet bilgileri oturumda nasıl saklanır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Farklı kullanıcıların ayrı sepetlerinin nasıl yönetildiği açıklanır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">JavaScript Entegrasyonu</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Otomatik tamamlama için JavaScript kullanarak dinamik bir arayüz.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Kullanıcı girişlerinin gerçek zamanlı olarak nasıl işlenebileceği.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">JavaScript, Python ve SQL'in nasıl entegre edileceği hakkında tartışma.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">JavaScript'in Temelleri</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">JavaScript kodu, bir metin kutusunu seçiyor ve input olayı için bir dinleyici ekliyor.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Input olayı, metin kutusuna yazma veya yapıştırma ile tetikleniyor.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Fetch fonksiyonu ile sunucudan bilgi alınıyor.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">Sunucudan Veri Çekme</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Fetch ile sunucudan alınan yanıt, 'shows' adlı bir değişkende saklanıyor.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Alınan yanıt, bir UL etiketi içinde görüntülenecek listeler oluşturuyor.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Geliştirici araçları kullanılarak işlem akışı izleniyor.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">Veri Gönderiminin İyileştirilmesi</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">HTML etiketlerini göndermek yerine JSON formatında veri gönderimi öneriliyor.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">JSON, daha verimli ve makine dostu bir veri formatıdır.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">API'lar, sunucudan JSON formatında verileri almak için kullanılıyor.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div><div class="flex w-full flex-wrap flex-row justify-start gap-3"><div class="flex w-full justify-start"><p class="text-wildSand text-xl font-bold font-robotoFlex break-words">HTML ve JavaScript Entegrasyonu</p></div><ul class="flex flex-col w-full gap-3"><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">JavaScript kullanarak sunucudan elde edilen veriyi HTML formatına dönüştürüyor.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Kullanıcıdan alınan input'a göre dinamik olarak içerik oluşturuluyor.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li><li class="flex flex-row w-full items-start gap-2 "><img alt="Summary Marker" width="20" height="20" decoding="async" data-nimg="1" style="color:transparent" src="/summary_marker_icon.svg"/><div class="flex flex-col w-full justify-start gap-3"><div class="flex w-full justify-start"><p class="text-smxGrayscaleMedium text-sm font-normal font-robotoFlex break-words ">Sonuç, kullanıcı dostu bir arayüz ve etkileşimli uygulamalar sağlıyor.</p></div><svg class="w-full" height="1" viewBox="0 0 100 1" preserveAspectRatio="none" fill="none"><path d="M0 0.5H100" stroke="#C6C6C6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 3" stroke-width="1" vector-effect="non-scaling-stroke"></path></svg></div></li></ul></div></div></div></div></div><div class="hidden pt-12 lg:flex lg:flex-col lg:w-[420px] lg:gap-4"><div class="sticky top-20"><div class="undefined"><iframe src="https://www.youtube.com/embed/8mAITcNt710?autoplay=1&playsinline=1&rel=0&mute=1&start=0&enablejsapi=1&origin=https://browsy.io&widgetid=1&forigin=https://browsy.io/&aoriginsup=1&vf=6" title="Harvard CS50 – Full Computer Science University Course" frameBorder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowFullScreen="" referrerPolicy="strict-origin-when-cross-origin" class="rounded-md aspect-video w-full h-full"></iframe><p class="text-sm text-white mt-2 text-wildSand" style="text-align:center">Harvard CS50 – Full Computer Science University Course</p></div><div style="height:220px;background-image:radial-gradient(125% 125% at 50% 0%, #020617 50%, #1E67C6);position:relative" class="p-4 rounded-xl text-white text-center font-semibold relative overflow-hidden w-full mx-auto rounded-xl mt-6"><b style="font-size:20px;position:relative;z-index:10"><div>Summarize videos and websites instantly.</div><div>Get Browsy now! 🚀</div></b><div style="position:relative;z-index:10" class="pt-6 flex justify-center"><a target="_blank" rel="noopener noreferrer" class="mt-4 inline-flex items-center gap-2 px-6 py-2 text-black bg-white rounded-lg text-lg font-bold shadow-lg transition" href="https://chromewebstore.google.com/detail/browsy/licbmpbojdchdkgfhpmlfchjccaappme"><img alt="Browsy Logo" loading="lazy" width="38" height="38" decoding="async" data-nimg="1" style="color:transparent" src="/logo_icon.svg"/>Install Browsy</a></div></div></div></div><div class="w-full pt-3 lg:hidden"><div class="place-items-center"><iframe src="https://www.youtube.com/embed/8mAITcNt710?autoplay=1&playsinline=1&rel=0&mute=1&start=0&enablejsapi=1&origin=https://browsy.io&widgetid=1&forigin=https://browsy.io/&aoriginsup=1&vf=6" title="Harvard CS50 – Full Computer Science University Course" frameBorder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowFullScreen="" referrerPolicy="strict-origin-when-cross-origin" class="rounded-md aspect-video w-full h-full"></iframe><p class="text-sm text-white mt-2 text-wildSand" style="text-align:center">Harvard CS50 – Full Computer Science University Course</p></div></div></div></div></div><!--$--><!--/$--><div role="region" aria-label="Notifications (F8)" tabindex="-1" style="pointer-events:none"><ol tabindex="-1" class="fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]"></ol></div><footer class="flex justify-center bg-[url('/footer_background.svg')] bg-cover bg-center w-full"><div class="container flex flex-col pt-8 pb-4"><div class="grid grid-cols-3"><a class="col-span-1 md:col-span-1 order-1 flex items-center gap-2 md:gap-3" href="/"><img alt="Browsy Mascot Logo" width="48" height="48" decoding="async" data-nimg="1" class="w-[35px] md:w-[48px]" style="color:transparent" src="/48.svg"/><img alt="Browsy Logo" width="107" height="31" decoding="async" data-nimg="1" class="pt-3 pb-1" style="color:transparent" src="/browsy_logo_white.svg"/></a><nav class="col-span-3 lg:col-span-1 lg:order-2 order-3 flex flex-col lg:flex-row flex-nowrap place-content-center pt-8 lg:pt-0 items-center gap-4"><a class="hover:text-tidal transition-colors text-white text-base font-robotoFlex font-normal" href="/">Home</a><a class="hover:text-tidal transition-colors text-white text-base font-robotoFlex font-normal" href="/#benefits">Benefits</a><a class="hover:text-tidal transition-colors text-white text-base font-robotoFlex font-normal" href="/#features">Features</a><a class="hover:text-tidal transition-colors text-white text-base font-robotoFlex font-normal" href="/#how-it-works">How It Works</a></nav><div class="flex flex-row col-span-2 lg:col-span-1 col-end-4 lg:order-3 order-2 place-content-end items-center gap-1 md:gap-3"><a target="_blank" href="https://browsyio.medium.com/"><img alt="Medium" width="44" height="44" decoding="async" data-nimg="1" class="w-[28px] md:w-[44px]" style="color:transparent" src="/medium_icon.svg"/></a><a target="_blank" href="https://www.linkedin.com/company/browsyio/"><img alt="LinkedIn" width="44" height="44" decoding="async" data-nimg="1" class="w-[28px] md:w-[44px]" style="color:transparent" src="/linkedin_icon.svg"/></a><a target="_blank" href="https://www.instagram.com/browsyio/"><img alt="Instagram" width="44" height="44" decoding="async" data-nimg="1" class="w-[28px] md:w-[44px]" style="color:transparent" src="/instagram_icon.svg"/></a><a target="_blank" href="https://x.com/browsyio"><img alt="twitter" width="44" height="44" decoding="async" data-nimg="1" class="w-[28px] md:w-[44px]" style="color:transparent" src="/twitter_icon.svg"/></a></div></div><div class="flex justify-center pt-6 pb-4"><div class="w-[1240px] h-px bg-bgTransparent"></div></div><div class="flex flex-col-reverse md:flex-row justify-between items-center"><p class="font-robotoFlex font-normal pt-5 md:pt-0 text-base text-footerTransparentWhite">© 2026 Browsy. All rights reserved.</p><a href="/privacy-policy"><p class="font-robotoFlex font-normal text-base text-footerTransparentWhite">Privacy Policy</p></a><a href="/terms-of-service"><p class="font-robotoFlex font-normal text-base text-footerTransparentWhite">Terms of Service</p></a></div></div></footer><script src="/_next/static/chunks/webpack-b5b7079219e7f4a5.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[7555,[],\"\"]\n3:I[1295,[],\"\"]\n6:I[9665,[],\"OutletBoundary\"]\n9:I[4911,[],\"AsyncMetadataOutlet\"]\nb:I[9665,[],\"ViewportBoundary\"]\nd:I[9665,[],\"MetadataBoundary\"]\nf:I[6614,[],\"\"]\n10:\"$Sreact.suspense\"\n11:I[4911,[],\"AsyncMetadata\"]\n13:I[6063,[\"5105\",\"static/chunks/0e5ce63c-c894a37c7cd25d54.js\",\"6453\",\"static/chunks/6453-88463a2ca59c1d38.js\",\"9406\",\"static/chunks/9406-5f958fb5ea9de092.js\",\"5125\",\"static/chunks/5125-b78db9f99e458993.js\",\"6874\",\"static/chunks/6874-5265e0ad6e229160.js\",\"3063\",\"static/chunks/3063-2c1142e7ff9d7699.js\",\"8975\",\"static/chunks/8975-cb9254902a113ae2.js\",\"6303\",\"static/chunks/6303-eb9ff6982a9dc819.js\",\"5376\",\"static/chunks/5376-b9055a1b07828b00.js\",\"8450\",\"static/chunks/app/%5Blocale%5D/layout-75106b0ec1af8cac.js\"],\"GoogleTagManager\"]\n14:I[983,[\"5105\",\"static/chunks/0e5ce63c-c894a37c7cd25d54.js\",\"6453\",\"static/chunks/6453-88463a2ca59c1d38.js\",\"9406\",\"static/chunks/9406-5f958fb5ea9de092.js\",\"5125\",\"static/chunks/5125-b78db9f99e458993.js\",\"6874\",\"static/chunks/6874-5265e0ad6e229160.js\",\"3063\",\"static/chunks/3063-2c1142e7ff9d7699.js\",\"8975\",\"static/chunks/8975-cb9254902a113ae2.js\",\"6303\",\"static/chunks/6303-eb9ff6982a9dc819.js\",\"5376\",\"static/chunks/5376-b9055a1b07828b00.js\",\"8450\",\"static/chunks/app/%5Blocale%5D/layout-75106b0ec1af8cac.js\"],\"default\"]\n16:I[6096,[\"5105\",\"static/chunks/0e5ce63c-c894a37c7cd25d54.js\",\"8465\",\"static/chunks/f4898fe8-ad228b2fb7648c8a.js\",\"6453\",\"static/chunks/6453-88463a2ca59c1d38.js\",\"9406\",\"static/chunks/9406-5f958fb5ea9de092.js\",\"5125\",\"static/chunks/5125-b78db9f99e458993.js\",\"6874\",\"static/chunks/6874-5265e0ad6e229160.js\",\"3063\",\"static/chunks/3063-2c1142e7ff9d7699.js\",\"8975\",\"static/chunks/8975-cb9254902a113ae2.js\",\"3479\",\"static/chunks/3479-6472ad04fa5c0df2.js\",\"4534\",\"static/chunks/4534-99ada12d8d90688a.js\",\"9476\",\"static/chunks/9476-de2d8969703eeb5a.js\",\"465\",\"static/chunks/app/%5Blocale%5D/page-d73748d0ffd82607.js\"],\"default\"]\n17:I[7536,[\"5105\",\"static/chunks/0e5ce63c-c894a37c7cd25d54.js\",\"6453\",\"static/chunks/6453-88463a2ca59c1d38.js\",\"9406\",\"static/chunks/9406-5f958fb5ea9de092.js\",\"5125\",\"static/chunks/5125-b78db9f99e458993.js\",\"6874\",\"static/chunks/6874-5265e0ad6e229160.js\",\"3063\",\"static/chunks/3063-2c1142e7ff9d7699.js\",\"8975\",\"static/chunks/8975-cb9254902a113ae2.js\",\"6303\",\"static/chunks/6303-eb9ff6982a9dc819.js\",\"5376\",\"static/chunks/5376-b9055a1b07828b00.js\",\"8450\",\"static/chunks/app/%5Blocale%5D/layout-75106b0ec1af8cac.js\"],\"AuthProvider\"]\n18:I[9558,[\"5105\",\"static/chunks/0e5ce63c-c894a37c7cd25d54.js\",\"6453\",\"static/chunks/6453-88463a2ca59c1d38.js\",\"9406\",\"static/chunks/9406-5f958fb5ea9de092.js\",\"5125\",\"static/chunks/5125-b78db9f99e458993.js\",\"6874\",\"static/chunks/6874-5265e0ad6e229160.js\",\"3063\",\"static/chunks/3063-2c1142e7ff9d7699.js\",\"8975\",\"static/chunks/8975-cb9254902a113ae2.js\",\"6303\",\"static/chunks/6303-eb9ff6982a9dc819.js\",\"5376\",\"static/chunks/5376-b9055a1b07828b00.js\",\"8450\",\"static/chunks/app/%5Blocale%5D/layout-75106b0ec1af8cac.js\"],\"SubscriptionProvider\"]\n19:I[6187,[\"5105\",\"static/chunks/0e5ce63c-c894a37c7cd25d54.js\",\"6453\",\"static/chunks/6453-88463a2ca59c1d38.js\",\"9406\",\"static/chunks/9406-5f958fb5ea9de092.js\",\"5125\",\"static/chunks/5125-b78db9f99e458993.js\",\"6874\",\"static/chunks/6874-5265e0ad6e229160.js\",\"3063\",\"static/chunks/3063-2c1142e7ff9d7699.js\",\"8975\",\"static/chunks/8975-cb9254902a113ae2.js\",\"6303\",\"static/chunks/6303-eb9ff6982a9dc819.js\",\"5376\",\"static/chunks/5376-b9055a1b07828b00.js\",\"8450\",\"static/chunks/app/%5Blocale%5D/layout-75106b0ec1af8cac.js\"],\"default\"]\n1a:I[6102,[\"5105\",\"static/chunks/0e5ce63c-c894a37c7cd25d54.js\",\"8465\",\"static/chunks/f4898fe8-ad228b2fb7648c8a.js\",\"6453\",\"static/chunks/6453-88463a2ca59c1d38.js\",\"9406\",\"static/chunks/9406-5f958fb5ea9de092.js\",\"5125\",\"static/chunks/5125-b78db9f99e458993.js\",\"6874\",\"static/chunks/6874-5265e0ad6e229160.js\",\"3063\",\"static/chunks/3063-2c1142e7ff9d7699.js\",\"8975\",\"static/chunks/8975-cb9254902a113ae2.js\",\"3479\",\"static/chunks/3479-6472ad04fa5c0df2.js\",\"4534\",\"static/chunks/4534-99ada12d8d90688a.js\",\"9476\",\"static/chunks/9476-de2d8969703eeb5a.js\",\"465\",\"static/chunks"])</script><script>self.__next_f.push([1,"/app/%5Blocale%5D/page-d73748d0ffd82607.js\"],\"TooltipProvider\"]\n1b:I[2558,[\"5105\",\"static/chunks/0e5ce63c-c894a37c7cd25d54.js\",\"6453\",\"static/chunks/6453-88463a2ca59c1d38.js\",\"9406\",\"static/chunks/9406-5f958fb5ea9de092.js\",\"5125\",\"static/chunks/5125-b78db9f99e458993.js\",\"6874\",\"static/chunks/6874-5265e0ad6e229160.js\",\"3063\",\"static/chunks/3063-2c1142e7ff9d7699.js\",\"8975\",\"static/chunks/8975-cb9254902a113ae2.js\",\"6303\",\"static/chunks/6303-eb9ff6982a9dc819.js\",\"5376\",\"static/chunks/5376-b9055a1b07828b00.js\",\"8450\",\"static/chunks/app/%5Blocale%5D/layout-75106b0ec1af8cac.js\"],\"Toaster\"]\n1c:I[9028,[\"5105\",\"static/chunks/0e5ce63c-c894a37c7cd25d54.js\",\"6453\",\"static/chunks/6453-88463a2ca59c1d38.js\",\"9406\",\"static/chunks/9406-5f958fb5ea9de092.js\",\"5125\",\"static/chunks/5125-b78db9f99e458993.js\",\"6874\",\"static/chunks/6874-5265e0ad6e229160.js\",\"3063\",\"static/chunks/3063-2c1142e7ff9d7699.js\",\"8975\",\"static/chunks/8975-cb9254902a113ae2.js\",\"6303\",\"static/chunks/6303-eb9ff6982a9dc819.js\",\"5376\",\"static/chunks/5376-b9055a1b07828b00.js\",\"8450\",\"static/chunks/app/%5Blocale%5D/layout-75106b0ec1af8cac.js\"],\"default\"]\n:HL[\"/_next/static/css/4a51cb462405fac2.css\",\"style\"]\n:HL[\"/_next/static/css/7e7d96b1e6991756.css\",\"style\"]\n:HL[\"/_next/static/css/0a63ca0f8b578c5e.css\",\"style\"]\n0:{\"P\":null,\"b\":\"TjtrnEupcm4XpbVHRNi9C\",\"p\":\"\",\"c\":[\"\",\"en\",\"video\",\"cs50-harvard-universitesi-bilgisayar-bilimine-giris+RGucjAHNcck\",\"tr\"],\"i\":false,\"f\":[[[\"\",{\"children\":[[\"locale\",\"en\",\"d\"],{\"children\":[\"video\",{\"children\":[[\"slug\",\"cs50-harvard-universitesi-bilgisayar-bilimine-giris%2BRGucjAHNcck\",\"d\"],{\"children\":[[\"lang\",\"tr\",\"d\"],{\"children\":[\"__PAGE__\",{}]}]}]}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/4a51cb462405fac2.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"locale\",\"en\",\"d\"],[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/7e7d96b1e6991756.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],\"$L4\"]}],{\"children\":[\"video\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"slug\",\"cs50-harvard-universitesi-bilgisayar-bilimine-giris%2BRGucjAHNcck\",\"d\"],[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}"])</script><script>self.__next_f.push([1,"],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"lang\",\"tr\",\"d\"],[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[\"$L5\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/0a63ca0f8b578c5e.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"$L6\",null,{\"children\":[\"$L7\",\"$L8\",[\"$\",\"$L9\",null,{\"promise\":\"$@a\"}]]}]]}],{},null,false]},null,false]},null,false]},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$1\",\"bu0b2L1sziGG8aeQzfLKuv\",{\"children\":[[\"$\",\"$Lb\",null,{\"children\":\"$Lc\"}],null]}],[\"$\",\"$Ld\",null,{\"children\":\"$Le\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$f\",\"$undefined\"],\"s\":false,\"S\":false}\ne:[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$10\",null,{\"fallback\":null,\"children\":[\"$\",\"$L11\",null,{\"promise\":\"$@12\"}]}]}]\n4:[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"$L13\",null,{\"gtmId\":\"GTM-TTX75R6F\"}],[\"$\",\"$L14\",null,{\"pixelId\":\"1882709605833968\"}],[\"$\",\"meta\",null,{\"name\":\"facebook-domain-verification\",\"content\":\"x11l7b6wozs4jkdbx3yxj2r7ls0uqw\"}]]}],[\"$\",\"body\",null,{\"className\":\"__className_f367f3\",\"children\":[[\"$\",\"noscript\",null,{\"children\":[\"$\",\"iframe\",null,{\"src\":\"https://www.googletagmanager.com/ns.html?id=GTM-TTX75R6F\",\"height\":\"0\",\"width\":\"0\",\"style\":{\"display\":\"none\",\"visibility\":\"hidden\"}}]}],\"$L15\"]}]]}]\n8:null\n15:[\"$\",\"$L16\",null,{\"formats\":\"$undefined\",\"locale\":\"en\",\"messages\":{\"Menu\":{\"home\":\"Home\",\"features\":\"Features\",\"benefits\":\"Benefits\",\"howItWorks\":\"How It Works\",\"testimonials\":\"Testimonials\",\"login\":\"Login\",\"register\":\"Register\",\"logout\":\"Logout\"},\"Header\":{\"installOnChrome\":\"Add to Chrome\",\"freeLabel\":\"— it's free\"},\"Auth\":{\"dashboard\":\"Dashboard\",\"login\":\"Login\",\"logout\":\"Logout\",\"loggingIn\":\"Logging in...\",\"loginWithGoogle\":\"Login with Google\",\"email\":\"Email\",\"emailAddressPlaceholder\":\"Enter your email address\",\"password\":\"Password\",\"passwordPlaceholder\":\"Enter your password\",\"forgotPassword\":\"Forgot Password?\",\"dontHaveAccount\":\"Don't have an account?\",\"alreadyHaveAccount\":\"Already have an account?\",\"signIn\":\"Sign In\",\"signUp\":\"Sign Up\",\"resetPassword\":\"Reset Password\",\"registerHere\":\"Register here\",\"orContinueWith\":\"Or\",\"username\":\"Username\",\"usernamePlaceholder\":\"Enter your username\",\"confirmPassword\":\"Confirm Password\",\"confirmPasswordPlaceholder\":\"Confirm your password\",\"creatingAccount\":\"Creating account...\",\"usernameValidation\":\"Username can only contain letters and numbers (a-z, A-Z, 0-9)\",\"registerSuccess\":\"Registration successful, please check your inbox to continue.\",\"forgotPasswordSuccess\":\"Password reset email sent successfully\",\"resetPasswordSuccess\":\"Your password has been reset successfully\"},\"Footer\":{\"privacyPolicy\":\"Privacy Policy\",\"termsOfService\":\"Terms of Service\",\"copyright\":\"© {year} Browsy. All rights reserved.\"},\"Home\":{\"free\":\"Free\",\"metadata\":{\"title\":\"Browsy - Summarize Video, Webpage \u0026 Document Instantly\",\"description\":\"Summarize YouTube videos, websites and documents instantly with our AI-powered extension and unlock valuable insights effortlessly!\",\"keywords\":\"AI, summarizer, website, YouTube, video, Chrome extension\"},\"hero\":{\"save\":\"Save\",\"yourTime\":\"Your time\",\"title\":\"Understand Anything in Seconds with AI\",\"subtitle\":\"Too much to read or watch? Let Browsy's AI summarize any website or video in seconds!\",\"cta\":\"Add to Chrome\",\"downloadAndStartUsing\":\"FREE DOWNLOAD - Start Now\",\"youtubeAndArticles\":\" and websites in seconds!\",\"summarizeInSeconds\":\"Summarize YouTube videos\",\"heroText\":\"Summarize YouTube videos, websites and documents instantly with one click and unlock valuable insights effortlessly!\",\"heroFree\":\"Complet"])</script><script>self.__next_f.push([1,"ely Free\",\"demo\":\"Watch Demo(30s)\",\"openAi\":\"Powered by OpenAI\",\"happyUser\":\"Happy Users\",\"free\":\"100% Free\",\"freeStart\":\"START FOR FREE\",\"multilingualSummaries\":\"Supports summaries in English, Spanish, Turkish, German and\",\"languages\":\"40+ languages\",\"summaries\":\"Summaries\",\"productivity\":\"Productivity Boost\",\"documentSummaries\":\"Documents Summarized\",\"languagesTooltip\":\"Click to see all supported languages\"},\"video\":{\"title\":\"See Browsy in Action\",\"subtitle\":\"Watch how Browsy can summarize any video for you in seconds.\",\"videoUrl\":\"https://www.youtube.com/embed/fxbCHn6gE3U\"},\"features\":{\"youtubeVideoSummaries\":\"YouTube Video Summaries\",\"youtubeVideoSummariesDescription\":\"Skip long videos, focus on key points.\",\"youtubeVideoSummariesItem1\":\"Generate summaries instantly with one click.\",\"youtubeVideoSummariesItem2\":\"Access and search transcripts easily.\",\"youtubeVideoSummariesItem3\":\"Summarize in your preferred language.\",\"youtubeVideoSummariesItem4\":\"Works seamlessly for websites and YouTube.\",\"youtubeVideoSummariesItem5\":\"Share summaries via email or messaging apps.\",\"websiteContentSummaries\":\"Website Content Summaries\",\"websiteContentSummariesDescription\":\"Turn hours of content into minutes of key insights.\",\"websiteContentSummariesItem1\":\"Generate summaries instantly with one click.\",\"websiteContentSummariesItem2\":\"Summarize in your preferred language.\",\"websiteContentSummariesItem3\":\"Share summaries via email or messaging apps.\"},\"benefits\":{\"title\":\"Smart Summaries for the Instant Clarity\",\"subTitle\":\"Quickly turn long content into clear, concise summaries with AI. Stay informed, save time, and share insights effortlessly.\",\"boostProductivity\":\"Boost Productivity\",\"boostProductivityDescription\":\"Summarize, learn, and act faster than ever.\",\"saveTime\":\"Save Time\",\"saveTimeDescription\":\"Turn hours of content into minutes of key insights.\",\"keyInsights\":\"Key Insights\",\"keyInsightsDescription\":\"Focus on what matters, not the fluff.\",\"multilingualSummaries\":\"Multilingual Summaries\",\"multilingualSummariesDescription\":\"Get clear, concise summaries in your preferred language.\",\"easySharing\":\"Easy Sharing\",\"easySharingDescription\":\"Share summaries instantly with teammates or on social media.\",\"reduceOverload\":\"Reduce Information Overload\",\"reduceOverloadDescription\":\"Focus on what truly matters with AI-driven insights.\"},\"howItWorks\":{\"title\":\"How It Works\",\"subtitle\":\"Simple, Fast, Smart\",\"subtitleDescription\":\"Join thousands of users who are already benefiting from AI-powered content summarization.\",\"step1\":\"1. Go to a Video or Website\",\"step1Description\":\"Watch a YouTube video or browse a website.\",\"step2\":\"2. Click “Summarize”\",\"step2Description\":\"One-click AI-powered summarization.\",\"step3\":\"3. Get Your Summary\",\"step3Description\":\"Access clear, concise insights instantly.\"},\"testimonials\":{\"title\":\"Transform the way you consume content!\",\"subtitle\":\"With Browsy, access information faster, save time, and boost your productivity.\"}},\"Login\":{\"metadata\":{\"title\":\"Browsy - Login\",\"description\":\"Login your account to summarize YouTube videos and websites instantly with one click and unlock valuable insights effortlessly!\",\"keywords\":\"\"},\"title\":\"Login to Your Account\",\"subtitle\":\"Enter your details to access your account\"},\"Register\":{\"metadata\":{\"title\":\"Browsy - Register\",\"description\":\"Create an account to summarize YouTube videos and websites instantly with one click and unlock valuable insights effortlessly!\",\"keywords\":\"\"},\"title\":\"Register\",\"subtitle\":\"Create a new account\"},\"ResetPassword\":{\"metadata\":{\"title\":\"Browsy - Reset Password\",\"description\":\"Summarize YouTube videos and websites instantly with one click and unlock valuable insights effortlessly!\",\"keywords\":\"\"},\"title\":\"Reset Your Password\",\"subtitle\":\"Enter your new password below.\",\"newPassword\":\"New Password\",\"newPasswordPlaceholder\":\"Enter your new password\",\"backToLogin\":\"Back to Login\",\"resetPassword\":\"Reset Password\"},\"ForgotPassword\":{\"metadata\":{\"title\":\"Browsy - Forgot Password\",\"description\":\"If you forgot your password, enter your email to "])</script><script>self.__next_f.push([1,"reset it.\",\"keywords\":\"\"},\"title\":\"Forgot Your Password?\",\"subtitle\":\"Enter your email address and we'll send you a link to reset your password.\",\"emailSent\":\"If an account exists for {email}, you will receive a password reset link shortly.\",\"sendResetLink\":\"Send Reset Link\",\"errorSendingLink\":\"An error occurred while sending the reset link. Please try again.\"},\"LoginCallback\":{\"title\":\"Processing your login...\",\"subtitle\":\"We're setting up your account and creating your subscription. This may take a few seconds...\",\"doNotCloseWindow\":\"Please do not close this window.\"},\"Settings\":{\"title\":\"Account Settings\",\"subtitle\":\"Manage your account settings and preferences.\",\"usernameUpdated\":\"Username updated\",\"usernameUpdatedMessage\":\"Your username has been successfully changed.\",\"passwordResetEmailSent\":\"Password reset email sent successfully\",\"noUsername\":\"No username set\",\"changeUsername\":\"Change Username\",\"noEmail\":\"No email set\",\"changePassword\":\"Change Password\",\"currentPlan\":\"Current Plan\",\"noSubscription\":\"No active subscription\"},\"Stripe\":{\"processing\":\"Processing your payment...\",\"processingMessage\":\"Please wait while we process your payment.\",\"paymentSuccess\":\"Payment successful!\",\"paymentSuccessMessage\":\"Thank you for your subscription. Your account has been upgraded.\",\"goToProfile\":\"Go to Profile\",\"paymentFailed\":\"Payment failed\",\"paymentFailedMessage\":\"We're sorry, but there was an issue processing your payment. Please try again.\"},\"Subscription\":{\"title\":\"Subscription\",\"subtitle\":\"Manage your subscription and billing details.\",\"subscriptionDetails\":\"Subscription Details\",\"manageBillingInfo\":\"Manage billing information\",\"currentPlan\":\"Current Plan\",\"status\":\"Subscription status\",\"statusActive\":\"Active\",\"statusInactive\":\"Inactive\",\"periodEnd\":\"Current period ends\",\"willCancel\":\"Will cancel at end of period\",\"noSubscription\":\"No active subscription. Choose a plan and start your subscription.\",\"chooseYourPlan\":\"Choose Your Plan\",\"month\":\"month\",\"getStarted\":\"Get Started\",\"subscribe\":\"Subscribe\"},\"Summary\":{\"noTranscript\":\"No transcript available for this video.\",\"ctaTitle\":\"Summarize videos and websites instantly.\",\"getMessage\":\"Get Browsy now! 🚀\",\"install\":\"Install Browsy\",\"summary\":\"Summary\",\"insights\":\"Insights\",\"transcript\":\"Transcript\",\"copy\":\"Copy\",\"copied\":\"Copied!\",\"goToUrl\":\"Go to URL\"},\"Errors\":{\"allFieldsRequired\":\"All fields are required\",\"passwordsDoNotMatch\":\"Passwords do not match\",\"invalidResetToken\":\"Invalid reset token\",\"invalidEmail\":\"Invalid email address\"},\"Common\":{\"loading\":\"Loading...\",\"tryAgainMessage\":\"An error occurred. Please try again.\",\"error\":\"Error\",\"success\":\"Success!\",\"cancel\":\"Cancel\",\"confirm\":\"Confirm\",\"yes\":\"Yes\",\"no\":\"No\",\"ok\":\"OK\",\"close\":\"Close\",\"saveChanges\":\"Save Changes\",\"tryAgain\":\"Try Again\",\"processing\":\"processing...\"},\"dialog\":{\"close\":\"Close\"},\"LanguageModal\":{\"title\":\"Supported Languages\",\"languageSummary\":\"Browsy supports {count}+ languages for content summaries.\",\"StartBrowsy\":\"Get Started with Browsy\",\"installExtension\":\"Install our Chrome extension and start summarizing content in any of these languages instantly!\"}},\"now\":\"$undefined\",\"timeZone\":\"UTC\",\"children\":[\"$\",\"$L17\",null,{\"children\":[\"$\",\"$L18\",null,{\"children\":[[\"$\",\"$L19\",null,{}],[\"$\",\"$L1a\",null,{\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}],[\"$\",\"$L1b\",null,{}],[\"$\",\"$L1c\",null,{}]]}]}]}]\nc:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n7:null\n1d:I[2291,[\"6453\",\"static/chunks/6453-88463a2ca59c1d38.js\",\"9406\",\"static/chunks/9406-5f958fb5ea9de092.js\",\"6874\",\"static/chunks/6874-5265e0ad6e229160.js\",\"3063\",\"static/chunks/3063-2c1142e7ff9d7699.js\",\"4534\",\"static/chunks/4534-99ada12d8d90688a.js\",\"5716\",\"static/chunks/app/%5Blocale%5D/video/%5Bslug%5D/%5Blang%5D/page-37d"])</script><script>self.__next_f.push([1,"9d10477a29867.js\"],\"default\"]\n1e:T9a4,Learn the basics of computer science from Harvard University. This is CS50, an introduction to the intellectual enterprises of computer science and the art of programming.\n\n💻 Slides, source code, and more at https://cs50.harvard.edu/x. \n\n❤️ Support for this channel comes from our friends at Scrimba – the coding platform that's reinvented interactive learning: https://scrimba.com/freecodecamp\n\n⭐️ Course Contents ⭐️\n⌨️ (00:00:00) Lecture 0 - Scratch\n⌨️ (01:45:08) Lecture 1 - C\n⌨️ (04:13:23) Lecture 2 - Arrays\n⌨️ (06:20:43) Lecture 3 - Algorithms\n⌨️ (08:37:55) Lecture 4 - Memory\n⌨️ (11:03:17) Lecture 5 - Data Structures\n⌨️ (13:15:36) Lecture 6 - Python\n⌨️ (15:39:25) Lecture 7 - SQL\n⌨️ (18:00:55) Lecture 8 - HTML, CSS, JavaScript\n⌨️ (20:23:38) Lecture 9 - Flask\n⌨️ (22:39:01) Lecture 10 - Emoji\n⌨️ (24:02:50) Cybersecurity\n\nRecorded in 2021.\n\n---\n\nHOW TO JOIN CS50 COMMUNITIES\n\nDiscord: https://discord.gg/cs50\nEd: https://cs50.harvard.edu/x/ed\nFacebook Group: https://www.facebook.com/groups/cs50/\nFaceboook Page: https://www.facebook.com/cs50/\nGitHub: https://github.com/cs50\nGitter: https://gitter.im/cs50/x\nInstagram: https://instagram.com/cs50\nLinkedIn Group: https://www.linkedin.com/groups/7437240/\nLinkedIn Page: https://www.linkedin.com/school/cs50/\nMedium: https://cs50.medium.com/\nQuora: https://www.quora.com/topic/CS50\nReddit: https://www.reddit.com/r/cs50/\nSlack: https://cs50.edx.org/slack\nSnapchat: https://www.snapchat.com/add/cs50\nSoundCloud: https://soundcloud.com/cs50\nStack Exchange: https://cs50.stackexchange.com/\nTikTok: https://www.tiktok.com/@cs50\nTwitter: https://twitter.com/cs50\nYouTube: https://www.youtube.com/cs50\n\nHOW TO FOLLOW DAVID J. MALAN\n\nFacebook: https://www.facebook.com/dmalan\nGitHub: https://github.com/dmalan\nInstagram: https://www.instagram.com/davidjmalan/\nLinkedIn: https://www.linkedin.com/in/malan/\nTikTok: https://www.tiktok.com/@davidjmalan\nTwitter: https://twitter.com/davidjmalan\n\nLICENSE\n\nCC BY-NC-SA 4.0\nCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License\nhttps://creativecommons.org/licenses/by-nc-sa/4.0/\n\n🎉 Thanks to our Champion and Sponsor supporters:\n👾 Raymond Odero\n👾 Agustín Kussrow\n👾 aldo ferretti\n👾 Otis Morgan\n👾 DeezMaster\n\n--\n\nLearn to code for free and get a developer job: https://www.freecodecamp.org\n\nRead hundreds of articles on programming: https://freecodecamp.org/news5:[\"$\",\"$L1d\",null,{\"summary\":{\"uniqueId\":\"RGucjAHNcck\",\"metadata\":{\"uniqueId\":\"RGucjAHNcck\",\"platform\":1,\"title\":\"Harvard CS50 – Full Computer Science University Course\",\"videoUrl\":\"https://www.youtube.com/watch?v=8mAITcNt710\",\"videoId\":\"8mAITcNt710\",\"publishDate\":\"2022-10-19T00:00:00\",\"viewCount\":12581485,\"channelId\":\"UC8butISFwT-Wl7EV0hUK0BQ\",\"description\":\"$1e\",\"duration\":89497,\"author\":\"freeCodeCamp.org\",\"sdkRequestTime\":1758133208608},\"creationDate\":\"2025-09-17T18:22:06.062277+00:00\",\"lastUpdate\":\"2025-09-17T18:22:06.062277+00:00\",\"category\":\"other\",\"tags\":[\"CS50\",\"Harvard\",\"Computer Science\",\"Programming\",\"Algorithms\",\"Programming\",\"Algorithms\",\"Scratch\",\"Computer Science\",\"Education\",\"Scratch\",\"Game Development\",\"Interactive Programming\",\"Education\",\"CS50\",\"C Programming\",\"Hello World\",\"VS Code\",\"Command Line\",\"Computer Science\",\"C Programming\",\"Programming Basics\",\"Data Types\",\"Conditional Statements\",\"CS50\",\"C Programming\",\"Conditionals\",\"Loops\",\"Functions\",\"Programming Basics\",\"C Programming\",\"Loops\",\"User Input\",\"Code Optimization\",\"Software Development\",\"C Programming\",\"Assembly Language\",\"Debugging\",\"Programming Fundamentals\",\"CS50\",\"C programming\",\"arrays\",\"strings\",\"programming basics\",\"CS50\",\"C Programming\",\"variables\",\"command line arguments\",\"functions\",\"CS50\",\"Algorithms\",\"Big O Notation\",\"Search Algorithms\",\"Data Structures\",\"Efficiency\",\"C Programming\",\"Data Structures\",\"Algorithms\",\"Programming\",\"CS50\",\"sorting algorithms\",\"selection sort\",\"bubble sort\",\"algorithm complexity\",\"computer science\",\"Merge Sort\",\"Sorting Algorithms\",\"Computer S"])</script><script>self.__next_f.push([1,"cience\",\"Data Structures\",\"Programming\",\"C programming\",\"Pointers\",\"Memory Management\",\"Data Structures\",\"Buffer Overflow\",\"Memory Management\",\"C Programming\",\"Pointers\",\"Arrays\",\"Dynamic Memory Allocation\",\"Memory Management\",\"C Programming\",\"Pointers\",\"Dynamic Memory\",\"Software Security\",\"C Programming\",\"Dynamic Memory\",\"Data Structures\",\"Linked List\",\"Arrays\",\"Linked List\",\"Data Structure\",\"Memory Management\",\"C Programming\",\"Pointer\",\"Linked List\",\"Binary Tree\",\"Data Structures\",\"Memory Management\",\"Hash Table\",\"Data Structures\",\"Hash Tables\",\"Tries\",\"Computer Science\",\"Algorithms\",\"Python\",\"C Programming\",\"Syntax Differences\",\"Programming Languages\",\"Code Optimization\",\"Python\",\"Programming\",\"CS50\",\"Coding\",\"Learn Python\",\"Python\",\"Programming\",\"CS50\",\"Error Handling\",\"Data Structures\",\"Python\",\"CSV\",\"Data Management\",\"Programming\",\"CS50\",\"Python\",\"Data Cleaning\",\"SQL\",\"SQLite\",\"Programming\",\"SQL\",\"SQLite\",\"Python\",\"Database Management\",\"Data Science\",\"SQL\",\"SQLite\",\"Database Management\",\"Data Structures\",\"Performance Optimization\",\"Web Development\",\"TCP/IP\",\"HTTP\",\"Programming\",\"Data Transfer\",\"HTML\",\"CSS\",\"Web Development\",\"HTTP Status Codes\",\"Programming Basics\",\"HTML\",\"CSS\",\"Web Design\",\"Responsive\",\"Web Development\",\"Web Development\",\"CSS\",\"Bootstrap\",\"JavaScript\",\"Flask\",\"Flask\",\"Web Development\",\"Python\",\"Programming\",\"Web Framework\",\"Flask\",\"Web Development\",\"Python\",\"MVC\",\"SQL\",\"Flask\",\"Web Development\",\"Python\",\"SQLite\",\"JavaScript\",\"JavaScript\",\"Web Development\",\"JSON\",\"API\",\"Dynamic Content\"],\"title\":\"CS50: Harvard Üniversitesi Bilgisayar Bilimine Giriş\",\"summary\":[{\"title\":\"CS50 Tanıtımı\",\"points\":[\"CS50, bilgisayar bilimleri ve programlamanın sanatı üzerine bir giriş dersi olarak tanıtılmaktadır.\",\"Ders, Harvard Üniversitesi'nde Dr. David Malan tarafından verilmektedir.\",\"Dersin temel amacı, öğrencileri algoritmik düşünme ve etkili problem çözme konularında eğitmektir.\"],\"timestamp\":\"00:00:00\"},{\"title\":\"David Malan'ın Kişisel Deneyimi\",\"points\":[\"David Malan, bilgisayar bilimleri dersine katılma isteğinin başlangıcında tereddüt yaşadığını belirtmektedir.\",\"Bilgisayar biliminin yalnızca programlama değil, problem çözme ile ilgili olduğunu keşfetmiştir.\",\"Ders sonundaki projelerini tamamlamanın getirisi olan tatmin ve gurur duygusu vurgulanmaktadır.\"],\"timestamp\":\"00:04:00\"},{\"title\":\"Bilgisayar Bilimi Nedir?\",\"points\":[\"Bilgisayar biliminin temelinin problem çözme olduğunu ifade etmektedir.\",\"Algoritmik düşünme, bilgi işleme ve doğru bir şekilde düşünme becerilerini geliştirdiği belirtilmektedir.\",\"Bilgisayarların verileri temsil etme şekli, insan dillerinden farklıdır ve sayılar kullanır.\"],\"timestamp\":\"00:12:00\"},{\"title\":\"Veri Temsili: İkilik Sistemi ve ASCII\",\"points\":[\"Bilgisayarlar yalnızca 0 ve 1 ile çalışan ikilik sistemini kullanır.\",\"Verilerin temsilinde ASCII kodlaması tanıtılmakta ve harflerin sayılara karşılık geldiği açıklanmaktadır.\",\"Örneğin, büyük harf A'nın sayısal karşılığı 65'tir.\"],\"timestamp\":\"00:25:00\"},{\"title\":\"Unicode ve Geniş Kapsamlı Karakter Temsili\",\"points\":[\"Unicode sistemi, daha fazla karakter ve sembolü desteklemek için ASCII'ye ek olarak geliştirilmiştir.\",\"Unicode ile 2^16 yani 65.536'ya kadar sembol temsil edilebilir.\",\"Emojiler ve diğer karakterlerin temsili için Unicode standartları oluşturulmuştur.\"],\"timestamp\":\"00:58:00\"},{\"title\":\"Renk Temsili ve Bilgisayar Grafikleri\",\"points\":[\"Renkler, RGB (Kırmızı, Yeşil, Mavi) kombinasyonu ile temsil edilir.\",\"Her rengin belirli bir değeri (0-255 arası) olduğu ve bu değerlerin karıştırılarak yeni renklerin oluşturulabileceği belirtilir.\",\"Her piksel, bir ekran üzerinde görülen görüntüyü oluşturur ve genellikle 24 bit ile temsil edilir.\"],\"timestamp\":\"01:22:00\"},{\"title\":\"Ses ve Video Temsili\",\"points\":[\"Ses ve müzik, MIDI formatında temsil edilebilir ve notasal bilgilerle işlenir.\",\"Video, ardışık görüntüler kullanılarak zaman boyutu eklenmiş bir temsil biçimidir.\",\"Yüksek kaliteli g"])</script><script>self.__next_f.push([1,"örüntüler için sıkıştırma tekniklerinin kullanıldığı açıklanmaktadır.\"],\"timestamp\":\"01:37:00\"},{\"title\":\"Algoritmalar ve Problem Çözme\",\"points\":[\"Algoritma, bir problemi çözmek için adım adım talimatlar veren bir kavramdır.\",\"Örnek olarak, telefon rehberinde bir isim arama süreci algoritma olarak sunulmaktadır.\",\"Arama yöntemlerinin etkinliği ve doğruluğu üzerinde durulmaktadır.\"],\"timestamp\":\"02:00:00\"},{\"title\":\"Programlamanın Anlamı\",\"points\":[\"Programlama, mevcut düşünceleri ifade etme biçimidir.\",\"Algoritmalar, problem çözme yollarının tanımlanmasında önemli rol oynar.\",\"Farklı algoritmaların performans ve verimlilik analizi yapılır.\"],\"timestamp\":\"00:40\"},{\"title\":\"Algoritmaların Verimliliği\",\"points\":[\"Algoritmanın karmaşıklığı, problem boyutu ve çözüm süresi ile ilgilidir.\",\"İlk algoritma doğrudan ilişki sunarken, ikinci algoritma iki kat hızlı sonuç almayı sağlar.\",\"Logaritmik algoritmalar, büyük veri setlerinde daha etkili çözümler sunar.\"],\"timestamp\":\"04:10\"},{\"title\":\"Pseudocode Tanıtımı\",\"points\":[\"Pseudocode, bir algoritmanın İngilizce'ye benzer bir dil ile yazılmasını sağlar.\",\"Adım adım süreçleri açıklamak için kullanılabilir.\",\"Programın mantığını sade bir şekilde anlatmak için idealdir.\"],\"timestamp\":\"12:45\"},{\"title\":\"Scratch ile Programlamaya Giriş\",\"points\":[\"Scratch, görsel programlama dili olarak kullanılır ve başlangıç seviyesindeki kullanıcılar için idealdir.\",\"Farklı renk ve şekillerde bloklar, işlevlerin ve mantıksal akışların temsili için kullanılır.\",\"Scratch içerisinde hareket, görünüm, ses ve kontrol gibi kategorilerde bloklar bulunmaktadır.\"],\"timestamp\":\"19:30\"},{\"title\":\"Doğal Dil ve İşlevsellik\",\"points\":[\"Fonksiyonlar, belirli görevleri yerine getiren kod parçalarıdır.\",\"Koşul ifadeleri (conditionals) belirli durumlara göre farklı davranışlar sergilemek için kullanılır.\",\"Döngüler (loops), belirli bir işlemin tekrar edilmesini sağlar.\"],\"timestamp\":\"31:00\"},{\"title\":\"Değişkenler ve Kullanımı\",\"points\":[\"Değişkenler, program içinde veri depolamak için kullanılır.\",\"İşlevler, argümanlar ve dönüş değerleri gibi özelliklerle zenginleştirilebilir.\",\"Abstraksiyon, karmaşık çözümleri daha basit ve okunabilir hale getirmek için kullanılır.\"],\"timestamp\":\"41:15\"},{\"title\":\"Sonsuz Döngü Kullanımı\",\"points\":[\"Sonsuz döngü, programın sürekli dinlemesi için kullanılabilir.\",\"Program, durana kadar sürekli çalışır.\",\"Fare hareket ettiğinde kedi tepki vermeye başlıyor.\"],\"timestamp\":\"00:00:00\"},{\"title\":\"Video Tabanlı Etkileşim\",\"points\":[\"Video hareketi belirli bir eşik değeri aştığında ses çalar.\",\"Eylemler, videonun arka planda uygulanmasıyla daha interaktif hale getiriliyor.\",\"Farklı hızlarda hareket eden el, sesli tepkiler veriyor.\"],\"timestamp\":\"00:04:00\"},{\"title\":\"Whack-a-Mole Oyun Geliştirme\",\"points\":[\"Bir katılımcı sahneye davet edilerek, Whack-a-Mole oyunu oynatılıyor.\",\"Kullanıcı kafasını moles'in çıktığı dikdörtgen ile hizalıyor.\",\"Eğlenceli oyun dinamikleri ve zamanlama ile puan toplayarak hız test ediliyor.\"],\"timestamp\":\"00:10:00\"},{\"title\":\"Proje Oluştururken Temel Bloklar\",\"points\":[\"Çeşitli bu oyun öğelerini bir araya getirerek karmaşık projeler oluşturulabiliyor.\",\"Her bir yeni özellik, küçük parçalara ayrılarak ekleniyor.\",\"Örnek proje geliştirirken adım adım ilerlemek mümkün.\"],\"timestamp\":\"00:15:00\"},{\"title\":\"Kullanıcı Arayüzü ve Etkileşim\",\"points\":[\"Kullanıcı arayüzü tasarımı önem kazanıyor.\",\"Kullanıcının kişisel etkileşimini artırmak için grafikler ve sesler ekleniyor.\",\"Rastgele nesneler kullanarak oyun mekaniği çeşitlendiriliyor.\"],\"timestamp\":\"00:25:00\"},{\"title\":\"Karmaşık Oyun Mekanikleri\",\"points\":[\"Karakterlerin birbirini takip etme gibi gelişmiş oyun mekaniği uygulanıyor.\",\"Oyun hedefe ulaşmayı zorlaştıran yaramaz karakterler ekleniyor.\",\"Oyun içerisindeki nesnelerin konumunu yönetmek için matem"])</script><script>self.__next_f.push([1,"atik kullanılıyor.\"],\"timestamp\":\"00:35:00\"},{\"title\":\"Oyun Sorunları ve Çözümleri\",\"points\":[\"Özelleştirilmiş blokal kodlama ile karşılaşılan problemler çözülüyor.\",\"Her aşamada oyun akışını kontrol eden koşullar ekleniyor.\",\"Skor takibi için değişkenler belirleniyor ve güncelleniyor.\"],\"timestamp\":\"00:50:00\"},{\"title\":\"C Programının Oluşturulması\",\"points\":[\"İlk C programı, 'Hello, World!' mesajını yazdırarak oluşturulur.\",\"Kodun başında 'stdio.h' kütüphanesi eklenir.\",\"Kod çalıştırılmadan önce kaydedilmesi gerektiği belirtilir.\"],\"timestamp\":\"00:01:00\"},{\"title\":\"Programı Çalıştırma\",\"points\":[\"Programın çalıştırılması için komut satırı kullanılmalı, çift tıklama yerine komut yazılmalıdır.\",\"Kaydedilen programın çalıştırılması için 'make hello' komutu girilir.\",\"'./hello' komutunu kullanarak programın çıktısı alınabilir.\"],\"timestamp\":\"00:05:00\"},{\"title\":\"Makine Kodu ve Derleyici\",\"points\":[\"C dilindeki kaynak kod, makine diline dönüştürülmelidir.\",\"Bu dönüşüm için bir derleyici (compiler) kullanılır.\",\"C dilinin bir derleyiciye ihtiyaç duyduğu belirtilir.\"],\"timestamp\":\"00:10:00\"},{\"title\":\"Bulut Tabanlı Programlama Ortamı\",\"points\":[\"VS Code'un bulut tabanlı versiyonu kullanılarak program yazılabilir.\",\"Bu ortam, herkesin aynı sayfada olmasını sağlar.\"],\"timestamp\":\"00:15:00\"},{\"title\":\"Terminal Penceresi\",\"points\":[\"Terminal penceresi, komutları girmek için kullanılır.\",\"Linux işletim sistemi kullanılarak komut satırı üzerinden program çalıştırılır.\"],\"timestamp\":\"00:20:00\"},{\"title\":\"Kod Satırları ve Hatalar\",\"points\":[\"Kod değiştirildiğinde derleme sıklıkla yapılmalıdır.\",\"Hatalar çıktısı dikkatlice incelenmelidir.\"],\"timestamp\":\"00:25:00\"},{\"title\":\"Girdi Alma ve Fonksiyonlar\",\"points\":[\"Kullanıcıdan girdi almak için 'get_string' fonksiyonu kullanılır.\",\"Fonksiyonlar, belirli bir veri türü döndürebilir.\"],\"timestamp\":\"00:30:00\"},{\"title\":\"printf Kullanımı\",\"points\":[\"printf fonksiyonu, çıktıyı formatlamak için kullanılır.\",\"Değişkenlerin çıktıda nasıl kullanılacağı anlatılır.\"],\"timestamp\":\"00:35:00\"},{\"title\":\"C Programlama Diline Giriş\",\"points\":[\"C dilinde, bir işlevin çıktısının başka bir işlevin girdisi olabileceği bir konsept vardır.\",\"printf işlevini kullanmak için, öncelikle uygun kütüphane dosyasının eklenmesi gerekir.\",\"C dilinde ana program, 'int main(void)' ile başlar ve kod o blok içinde yazılır.\"],\"timestamp\":\"00:00:00\"},{\"title\":\"Kütüphaneler ve Header Dosyaları\",\"points\":[\"Kütüphane, bilgilendirme işlevselliği sağlar, header dosyaları ise bu işlevleri kullanabilmek için gereklidir.\",\"C programcıları, kütüphane dosyalarının içeriğini kullanarak fonksiyonları uygulamak için önceden tanımlanmış işlevlerle hazırlıkları yaparlar.\"],\"timestamp\":\"00:10:45\"},{\"title\":\"Veri Türleri ve Değişkenler\",\"points\":[\"C dilinde temel veri türleri arasında int, float, double, char ve bool bulunur.\",\"Veri türü, her bir verinin bellekte ne kadar yer kaplayacağını belirler.\",\"Değişken tanımlanırken, veri türü ve bir başlangıç değeri belirlenmelidir.\"],\"timestamp\":\"00:20:30\"},{\"title\":\"Koşullu İfadeler ve Kontrol Akışları\",\"points\":[\"Koşullu ifadeler, belirli koşulların karşılanıp karşılanmadığını belirlemek için kullanılır.\",\"C dilinde 'if', 'else if' ve 'else' yapıları kullanılarak şartlı ifadeler oluşturulabilir.\",\"Mantıksal ifadeler, programın işlem akışını yönlendirir.\"],\"timestamp\":\"00:30:15\"},{\"title\":\"Etkili Kod Yazımı ve İyileştirme\",\"points\":[\"Kod yazarken, gereksiz tekrarları önlemek için sabit sayılar yerine değişkenler kullanılmalıdır.\",\"Sabitler, programda kesin bir değerin değiştirilmesini engeller ve büyük harfle yazılması yaygındır.\",\"Kodun temiz ve okunabilir olması, geliştirme sürecini kolaylaştırır.\"],\"timestamp\":\"00:40:20\"},{\"title\":\"Koşullu İfadeler ve Sözdizimi\",\"points\":[\"C programlama dilinde bazı "])</script><script>self.__next_f.push([1,"durumlarda noktalı virgül kullanılmaz.\",\"Koşullu ifadelerde genelde noktalı virgül ihtiyaç duyulmazken, işlev sonunda kullanılır.\",\"Çift eşittir işareti, eşitlik kontrolü için kullanılırken tek eşittir işareti atama işlemi içindir.\"],\"timestamp\":\"03:11\"},{\"title\":\"Parite Kontrol Programı\",\"points\":[\"Kullanıcıdan bir sayı alarak bu sayının tek mi çift mi olduğunu kontrol eden bir program yazılır.\",\"Remainder operatörü (%) kullanılarak bir sayının 0 ya da 1 ile bölünmesi sonucu tek veya çift olduğu belirlenir.\",\"Eşitlik kontrolü için '==' operatörü kullanılır.\"],\"timestamp\":\"05:59\"},{\"title\":\"Kullanıcı Girdisi Alma\",\"points\":[\"Kullanıcıdan evet veya hayır yanıtı almak için get_char fonksiyonu kullanılabilir.\",\"Yanıtın durumunu kontrol etmek için 'if' ve 'else if' yapıları kullanılır.\",\"Büyük/küçük harf duyarlılığına dikkat edilmeli; örneğin hem 'y' hem de 'Y' karşılanmalıdır.\"],\"timestamp\":\"10:35\"},{\"title\":\"Döngülerle Tekrar Etme\",\"points\":[\"C dilinde bir işlemi tekrarlamak için while ve for döngüleri kullanılır.\",\"While döngüsü bir koşul sağlandığı sürece sürekli çalışır.\",\"For döngüsü ise belirli bir sayıda tekrarlar; başlangıç, bitiş ve artış değerleri döngü tanımında belirtilir.\"],\"timestamp\":\"12:40\"},{\"title\":\"Fonksiyonlar ve Prototipler\",\"points\":[\"Fonksiyonlar belirli bir işi yapmak için tanımlanır, geri değer döndürme veya parametre alma kapasitesine sahiptir.\",\"Fonksiyonu kullanmadan önce tanımlamak veya bir prototip belirtmek gereklidir.\",\"Parametre sayısı değiştirilebilir; birden fazla parametre alabilen fonksiyonlar tanımlanabilir.\"],\"timestamp\":\"22:12\"},{\"title\":\"İndirim Hesaplama Fonksiyonu\",\"points\":[\"İndirim oranı ve normal fiyatı alarak indirimli fiyatı hesaplayan bir fonksiyon tanımlanır.\",\"Fonksiyon, hesaplamayı yaptığı sonucu return anahtar kelimesiyle geri döndürür.\",\"Dışarıdan gelen parametrelerin etkisini anlamak için değişkenlerin kapsamı dikkate alınmalıdır.\"],\"timestamp\":\"30:00\"},{\"title\":\"Döngü Tasarımında İyileştirmeler\",\"points\":[\"Döngülerin sonuna yerleştirilen komutlarla çıktıların daha düzenli hale getirilmesi.\",\"Kullanıcıdan soru işareti veya madeni para miktarını almak için döngü yapılarının geliştirilmesi.\",\"C programlama dilinde 'do while' döngüsünün kullanılması, koşulun en son kontrol edilmesini sağlar.\"],\"timestamp\":\"03:48\"},{\"title\":\"Döngü ve Kullanıcı Girdisi\",\"points\":[\"'do while' döngüsü ile kullanıcıdan bir değer alınır ve kullanıcı uygun bir değer girene kadar döngü devam eder.\",\"Değişkenlerin dinamik hale getirilmesi, kullanıcı girdisine göre çıktıların ayarlanması sağlanır.\",\"Kullanıcının değer girmesi beklenmeden bazı işlemlerin önce yapılması gerektiği vurgulanır.\"],\"timestamp\":\"07:31\"},{\"title\":\"İç İçe Döngüler\",\"points\":[\"Bir 'n x n' kare matris oluşturmak için iç içe döngülerin kullanılması.\",\"Kullanıcıdan istenilen boyutta bir kare yapmak için ilk olarak sıra ve ardından sütun döngülerinin tanımlanması.\",\"Döngüden sonra yeni bir satıra geçiş yapmak için 'newline' karakterinin kullanılması gerekliliği.\"],\"timestamp\":\"11:45\"},{\"title\":\"Sayılarla İşlemler ve Hassasiyet\",\"points\":[\"Float türü ile kesirli sayılar arasında bölme işlemlerinin yanlış sonuçlar verebileceği açıklanır.\",\"Tam sayı bölmesinin sonucu yalnızca tam kısmı döndüreceği ve kesir kısmının kaybolacağı belirtilir.\",\"Tip dönüşümü kullanarak int değerini float olarak işlem yapmayı sağlayan yöntemler anlatılır.\"],\"timestamp\":\"14:15\"},{\"title\":\"Sonuçların Hassasiyeti ve Maliyet Hesaplamaları\",\"points\":[\"Küçük değerlerde dahi kesirli sayılarda yaşanan hassasiyet sorunları.\",\"Decimal yerine float kullanmanın neden olduğu sorunlar ve çözüm önerileri.\",\"Döngülerin ve matematiksel işlemlerin güvenilir bir biçimde sağlanması için dikkatli bir şekilde programlama yapılması gerektiği.\"],\"timestamp"])</script><script>self.__next_f.push([1,"\":\"19:29\"},{\"title\":\"Assembly Dili ve Temel Kavramlar\",\"points\":[\"Assembly dili, bilgisayarın anlayabileceği en düşük seviyeli dil olarak tanımlanır.\",\"Assembly dilinde, temel işlemler için kullanılan komutlar, geri bildirimde bulunarak bilgisayar işlemcisinde çalışır.\",\"Her CPU, kendi talimat setine sahiptir, bu nedenle yazılımlar farklı platformlarda çalışmaz.\",\"Derleme süreci, kaynak kodunu assembly diline ve ardından makine koduna dönüştürme işlemlerini içerir.\"],\"timestamp\":\"00:00:00\"},{\"title\":\"Bağlama ve Derleme\",\"points\":[\"Kodun derlenmesi, yazılmış olan kodun makine dili olarak çalıştırılabilir hale getirilmesi sürecidir.\",\"Bağlama işlemi, ayrı kaynak dosyalarını birleştirerek tek bir program dosyası oluşturur.\",\"a.out, derlenen programların varsayılan dosya adıdır ve bu isim basit bir isimlendirme kuralıdır.\"],\"timestamp\":\"00:00:45\"},{\"title\":\"Hata Ayıklama Yöntemleri\",\"points\":[\"Printf fonksiyonu, değişkenlerin değerlerini kontrol etmek için yararlı bir araçtır.\",\"Debugging (hata ayıklama) süreci, kod hatalarını bulmak ve düzeltmek için kullanılan tekniklerdir.\",\"Rubber duck debugging (lastik ördek ile hata ayıklama), bir nesne ile konuşarak sorunları çözme tekniğidir.\"],\"timestamp\":\"00:01:30\"},{\"title\":\"C Dilinde Veri Türleri ve Bellek Yönetimi\",\"points\":[\"C dilinde int, float, char gibi temel veri türlerinin nasıl tanımlanacağı ve kullanılacağı anlatılır.\",\"Veri türlerinin bellek üzerindeki boyutları ve yönetimi üzerine bilgi verilir.\",\"Dizi (array) kullanarak birden fazla değişkeni tek bir isimle depolamak mümkündür.\"],\"timestamp\":\"00:03:20\"},{\"title\":\"Uygulama Örneği: Not Ortalaması Hesaplama\",\"points\":[\"Kullanıcının notlarını almak ve bu notların ortalamasını hesaplamak için bir program örneği gösterilir.\",\"Dizi kullanarak birden fazla notun depolanması ve ortalaması üzerine örnekler yapılır.\",\"Kullanıcıdan giriş almak için get_int fonksiyonunun kullanımı gösterilir.\"],\"timestamp\":\"00:05:45\"},{\"title\":\"Programın Başlangıcı ve Hatalar\",\"points\":[\"Programın cs50.h dosyasının eksik olduğunu fark ederek hatalar giderilmektedir.\",\"Kullanıcıdan alınan not ortalamasını hesaplama programı, başlangıçta yalnızca üç notla sınırlıdır.\"],\"timestamp\":\"00:00:45\"},{\"title\":\"Kodun İyileştirilmesi\",\"points\":[\"Kodun daha iyi bir tasarımına yönelik önerileri değerlendirilmekte.\",\"Kullanım kolaylığı için döngülerden faydalanarak not alma işlemi basitleştirilmektedir.\",\"Kullanıcıdan kaç not alınacağına dair bir girdi alma yöntemi tanıtılmaktadır.\"],\"timestamp\":\"00:04:10\"},{\"title\":\"Dizilerin Kullanımı ve Veri Türleri\",\"points\":[\"Dizilerin, çok sayıda değişken adı yerine tek bir isim altında saklanmasını sağladığı açıklanmaktadır.\",\"Farklı veri türlerinin (örneğin, int ve char) nasıl kullanılabileceği tartışılmaktadır.\"],\"timestamp\":\"00:06:30\"},{\"title\":\"Karakterlerin ASCII Değerleri\",\"points\":[\"Karakterlerin sayısal karşılıkları ve ASCII sistemi açıklanmaktadır.\",\"C dilinin, karakterleri sayısal değerlere otomatik olarak dönüştürme yeteneği olduğu belirtilmektedir.\"],\"timestamp\":\"00:09:50\"},{\"title\":\"Dizilerde Nul Karakterin Rolü\",\"points\":[\"Dizilerde bir sonlandırıcı karakter olan nul karakterinin nasıl kullanıldığı açıklanmaktadır.\",\"Bir stringin sonunu işaretlemek için hafıza yönetimi açısından nul karakterinin gerekliliği tartışılmaktadır.\"],\"timestamp\":\"00:15:00\"},{\"title\":\"String Uzunluğunu Hesaplama\",\"points\":[\"Kullanıcıdan alınan bir stringin uzunluğunu hesaplamak için uygulama örneği sunulmaktadır.\",\"Dinamik hafıza yönetimi ve stringlerin diziler olarak nasıl uygulanabileceği detaylandırılmaktadır.\"],\"timestamp\":\"00:19:00\"},{\"title\":\"C Kütüphanesi ve Kullanımı\",\"points\":[\"C dilinin string.h kütüphanesi ve içinde bulunan önceden tanımlanmış işlevler tanıtılmaktadır.\",\"strlen işlevinin, bir stringin uzunluğunu hesaplamak için mevcut olduğu gös"])</script><script>self.__next_f.push([1,"terilmektedir.\"],\"timestamp\":\"00:40:00\"},{\"title\":\"Değişken Kullanımının Önemi\",\"points\":[\"Değişkenler, kodda tekrarlanan değerlerin saklanması için kullanılır.\",\"Bir işlevde en verimli sonuç için değişken kullanılarak sadece bir kez çağrılan değerler saklanabilir.\",\"Program içindeki döngülerde ve koşullarda hafızada daha az yer kaplamak için değişken tanımlamak önemlidir.\"],\"timestamp\":\"00:00:45\"},{\"title\":\"Büyük Harf Yapma İşlevi\",\"points\":[\"Girilen bir string'in başındaki harflerin büyük yapılması için bir program yazılmaktadır.\",\"ASCII tablosuna bakılarak küçük harflerin büyük harflere dönüşümünde 32 sayısının çıkarılması gerektiği belirtilmektedir.\",\"Her karakter için kontrol yapılır, eğer küçük harf ise, büyük harfle değiştirilir.\"],\"timestamp\":\"00:04:30\"},{\"title\":\"Standart Kütüphaneler ve Yeni Fonksiyonlar\",\"points\":[\"C dilinde kullanılabilecek olan 'is-lower' ve 'to-upper' gibi standart fonksiyonların olduğunu görmek önemlidir.\",\"Bu fonksiyonlar, kod yazımını daha basit hale getirir ve işlerimizi kolaylaştırır.\",\"Kodda yapılan değişikliklerle beraber error handling (hata yönetimi) uygulanarak, kullanıcıdan alınan verinin doğruluğu kontrol edilir.\"],\"timestamp\":\"00:07:55\"},{\"title\":\"Komut Satırı Argümanları Üzerine\",\"points\":[\"Komut satırı argümanları, kullanıcıdan verilerin alınmasını kolaylaştırır.\",\"argc (argument count) ve argv (argument vector) yapıları kullanılarak argüman sayısı ve içeriği tanımlanır.\",\"Kullanıcının programı çalıştırırken girdiği değerler argv dizisi üzerinde saklanır.\"],\"timestamp\":\"00:13:10\"},{\"title\":\"Çıkış Durumu ve Hata Yönetimi\",\"points\":[\"C dilinde, programın çalıştırılmasından sonra bir değer döndürerek, programın başarılı ya da başarısız olarak bitip bitmediği belirtilebilir.\",\"Başarılı bir çıkış için 0, başarısız bir çıkış için ise 1 kullanılabilir.\",\"Çalışma mantığı açısından, kullanıcıdan doğru argüman alınmaması durumunda error handling uygulamak önemlidir.\"],\"timestamp\":\"00:22:50\"},{\"title\":\"Algoritma Verimliliği ve Zaman Ölçümü\",\"points\":[\"Algoritmaların verimliliği, bellek kullanımı ve sonar başkalarının yazdığı kodlarla iş birliği yapma olasılığını artırarak tanımlanır.\",\"Verimlilik, bir algoritmanın çalıştığı süre ile ölçülür ve bu süre Big O notasyonu ile ifade edilir.\",\"Big O notasyonu, bir algoritmanın çalışmasıyla ilgili üst sınırları belirler ve zaman harcamalarını basit matematiksel ifadelerle tanımlar.\"],\"timestamp\":\"06:26\"},{\"title\":\"Algoritma Karşılaştırmaları\",\"points\":[\"İlk algoritma sayfaları tek tek inceleyerek, ikinci algoritma ise sayfaları geri dönecek şekilde iki sayfa inceleyerek çalışır.\",\"Üçüncü algoritma, 'divide and conquer' stratejisini kullanarak sayfaları ikiye ayırır, bu da daha hızlı bir çözüm sağlar.\",\"Algoritmaların kıyaslamasında dikkat edilmesi gereken önemli bir nokta, büyük sayılarla çalıştıklarında(kullanıcı sayısı arttıkça) benzer performanslar sergileyebilmeleridir.\"],\"timestamp\":\"08:14\"},{\"title\":\"Lineer Arama Algoritması\",\"points\":[\"Lineer arama algoritması, bir dizi içerisindeki öğeleri sırayla kontrol ederek doğru bulmayı hedefler.\",\"Bu yöntemi kullanarak sonucu bulmak için, makul bir sıralama yapıldığında beklenen çalışma süresi O(n) şeklinde tanımlanır.\",\"Görselleştirilen bir örnekte, sıralı kapılar arasında arama yaparak sonuçlar bulunmuştur.\"],\"timestamp\":\"14:00\"},{\"title\":\"İkili Arama Algoritması\",\"points\":[\"İkili arama algoritması, sıralı verilere uygulanarak arama süresini minimuma indirir.\",\"Sıralı bir veri setinde çalışırken zaman karmaşıklığı O(log n) olarak ifade edilir.\",\"Bu yöntem, orta belli bir noktadan başlayarak arama yapar ve bu sayede daha az adımda sonuç bulunur.\"],\"timestamp\":\"25:30\"},{\"title\":\"Çalışma Zamanlarını Ölçme ve Stratejiler\",\"points\":[\"Verilerin sıralanmas"])</script><script>self.__next_f.push([1,"ı durumu, arama işleminin verimliliğini büyük ölçüde etkiler.\",\"Verimlilik kıyaslamalarında Bütün Veri Setinin sıralanması veya sadece doğrusal arama yönteminin kullanılması arasındaki ticaretin yapılması gerektiği vurgulanır.\",\"Farklı kullanıcı talepleri ve yüksek veri hacmi gibi senaryolar bu stratejilerin seçiminde etkili olur.\"],\"timestamp\":\"36:00\"},{\"title\":\"Başlangıç ve Başarılı Çıkış Değeri\",\"points\":[\"Bir döngü sonunda bir şey bulunamazsa, genellikle bir hata belirtmek için pozitif bir değer döndürülmelidir.\",\"Ana fonksiyon başarılıysa, standart programlama kuralı olarak 0 döndürmek uygun bir uygulamadır.\"],\"timestamp\":\"00:00:30\"},{\"title\":\"Diziler ve Karakter Dizileri\",\"points\":[\"Tamsayı dizisi yerine karakter dizisi (string) kullanarak isimleri saklama yöntemi tanıtılır.\",\"String dizilerinde isimlerin tanımlanmasında 'string.h' kütüphanesi kullanılır.\",\"Her bir ismin kontrol edilmesi için bir döngü kullanılarak arama yapılır.\"],\"timestamp\":\"00:05:00\"},{\"title\":\"Hatalı Karşılaştırma Hatası\",\"points\":[\"Karakter dizilerini karşılaştırmak için 'strcmp' fonksiyonu yerine eşitlik operatörü kullanılamaz.\",\"'strcmp' fonksiyonu, iki stringin karşılaştırılması sonucunda bir tamsayı döndürür ve bu değer sıralama yapmaya olanak tanır.\"],\"timestamp\":\"00:10:00\"},{\"title\":\"Telefon Rehberi Programı Geliştirme\",\"points\":[\"İsimler ve telefon numaraları için iki ayrı dizi oluşturulması gerektiği gösterilir.\",\"Kullanıcıdan bir isim arayarak eşleşirse, ilgili telefon numarasını bulma işlevi eklenir.\",\"Dizilerin boyutunun sabit olmasının getirdiği sınırlama üzerinde durulur.\"],\"timestamp\":\"00:15:00\"},{\"title\":\"Veri Yapılarının Kullanımı\",\"points\":[\"İsim ve telefon numarasını tutacak yeni bir veri yapısı (struct) tanımlanarak dizideki ilişkilerin güçlendirilmesi önerilir.\",\"Struct ile verinin kapsüllenmesi, ilişkili bilgileri bir arada tutarak karışıklığı önler.\"],\"timestamp\":\"00:20:00\"},{\"title\":\"Sıralama Performansı\",\"points\":[\"Sıralama algoritmalarının maliyetinin değerlendirilmesi yapılır.\",\"Gerekli olan verinin sıralanması için farklı algoritmaların nasıl uygulanacağı üzerinde durulur.\"],\"timestamp\":\"00:30:00\"},{\"title\":\"Kısaca\",\"points\":[\"Strcut kullanımı ile daha tutarlı ve yönetilebilir veri yapıları geliştirilir.\",\"Kapsüllenmenin programlama güvenliğini artırdığı ve güncellemeleri kolaylaştırdığı vurgulanır.\"],\"timestamp\":\"00:35:00\"},{\"title\":\"Seçim Sıralama Algoritması\",\"points\":[\"Algoritma, dizideki en küçük elemanı bulmak ve onu başa almak üzere tasarlanmıştır.\",\"İlk olarak 8 eleman var; her iterasyonda en küçük bulunur ve konum değiştirilir.\",\"Iterasyonlar ile problem boyutu giderek küçülür: 8, 7, 6, vb.\",\"Seçim sıralama sürecinde her zaman en küçük elemanı bulmak için dizi taranır.\"],\"timestamp\":\"07:43\"},{\"title\":\"Zaman Karmaşıklığı\",\"points\":[\"Seçim sıralamanın zaman karmaşıklığı O(n²) olarak tanımlanır.\",\"Her eleman için dizinin tamamı taranır; bu durum n, n-1, n-2... elemanlarını içerir.\",\"Sonuçta karmaşıklık, n (n+1)/2'ye eşit olur ve büyük n için n² terimi baskın hale gelir.\"],\"timestamp\":\"17:50\"},{\"title\":\"Balon Sıralama Algoritması\",\"points\":[\"Balon sıralama, dizideki komşu elemanları karşılaştırarak en büyüklerin sona itilmesi üzerine çalışır.\",\"Aynı dizi üzerinde sürekli tekrarlar yaparak işlem gerçekleştirir.\",\"Balon sıralama da O(n²) zaman karmaşıklığına sahiptir ancak en iyi durum O(n) olabilir, eğer dizi zaten sıralıysa.\"],\"timestamp\":\"29:59\"},{\"title\":\"Yordamsal İyileştirmeler ve Yeni Yaklaşımlar\",\"points\":[\"Her iki algoritmanın da sıralama sürecinin yavaş olmasının sebebi, tekrar tekrar aynı elemanları kontrol etmesidir.\",\"Daha karmaşık ve daha verimli sıralama algoritmalarının keşfedileceği bilgisi verildi.\",\"Yeni dizin sıralama algoritmaları için rekürsif yaklaşımın kullanılabileceği belirtilmiştir.\"]"])</script><script>self.__next_f.push([1,",\"timestamp\":\"39:30\"},{\"title\":\"Hata Önleme ve Negatif Sayılar\",\"points\":[\"Hataların önlenmesi için negatif sayıların kullanımının engellenmesi gerektiği belirtiliyor.\"],\"timestamp\":\"00:00:00\"},{\"title\":\"Merge Sort Nedir?\",\"points\":[\"Merge sort, sıralama algoritları arasında yer alır ve diğer yöntemlere göre daha verimlidir.\",\"Temel olarak, diziyi ikiye böler, sol ve sağ yarılar için sıralama yapıp birleştirir.\",\"Recursion (özyineleme) kullanılarak uygulanan bir yöntemdir.\"],\"timestamp\":\"00:00:33\"},{\"title\":\"Merge İşlemi\",\"points\":[\"İki sıralı listeyi birleştirme süreci, her iki listenin en küçük elemanını karşılaştırarak ilerler.\",\"Birleştirme işlemi, her iki listenin başlangıcındaki elemanlar karşılaştırılarak yapılır.\"],\"timestamp\":\"00:02:03\"},{\"title\":\"Merge Sort Algoritmasını Uygulama\",\"points\":[\"Daha karmaşık bir durumda, merge sort uygulanarak dizinin belirtilen elemanları sıralanır.\",\"Sol ve sağ yarılar genişletilerek sıraya konur ve sonrasında merge işlemi yapılır.\"],\"timestamp\":\"00:03:48\"},{\"title\":\"Zaman Karmaşıklığı ve Bellek Kullanımı\",\"points\":[\"Merge sort, genel olarak O(n log n) zaman karmaşıklığına sahiptir, bu da onu diğer sıralama yöntemlerinden daha verimli kılar.\",\"Bellek kullanımı açısından merge sort, geçici diziler gerektirir ve bu nedenle daha fazla bellek tüketebilir.\"],\"timestamp\":\"00:06:10\"},{\"title\":\"Dört Haneli Hexadecimal Sistemi\",\"points\":[\"Hexadecimal, bilgilendirmede ve bellekte sayıları daha kısa bir biçimde temsil etme imkanı sağlar.\",\"Örneğin, 255 decimal sayısı hex formatında FF olarak gösterilir.\"],\"timestamp\":\"00:08:33\"},{\"title\":\"C Dilinde Bellek Erişimi\",\"points\":[\"C dilinde bellek içinde verilere erişim sağlanabilir.\",\"Bu güç güvenlik tehditlerine yol açabilir, diğer programların bellek verilerine erişim sağlamak mümkün olabilir.\",\"Modern derleyiciler ve işletim sistemleri bu durumu biraz kontrol altına almaktadır.\"],\"timestamp\":\"00:00:00\"},{\"title\":\"Bellek Hataları\",\"points\":[\"Bellek hatalarından biri yığın taşmasıdır, bu durumda hatalı bellek erişimi alınır.\",\"Diğer hatalar arasında yığın ve bellek taşması gibi problemler bulunmaktadır.\",\"Segmentation fault (segment hatası) en yaygın bellek hatalarından biridir.\"],\"timestamp\":\"00:02:00\"},{\"title\":\"Göstergelerin Kullanımı\",\"points\":[\"Pointer (göstergeler) bellekteki adresleri tutar ve bu şekilde bellekteki verilere erişim sağlar.\",\"C dilinde bir değişken tanımlandıktan sonra sadece ismi kullanılır, türü tekrar edilmez.\",\"Gözlemler ve bellek adresi ile gösterim, birçok karmaşık yapı oluşturmaya olanak tanır.\"],\"timestamp\":\"00:04:00\"},{\"title\":\"Bellek Adreslendirme\",\"points\":[\"C dilinde bellek adreslerine erişmek için * (yıldız) operatörü kullanılır.\",\"Göstergenin içerdiği adrese gidildiğinde gösterilen değer alınır.\",\"Bellekteki boşlukları etkili bir şekilde kullanmak için göstergelerin nasıl çalıştığını anlamak önemlidir.\"],\"timestamp\":\"00:06:00\"},{\"title\":\"Karmaşık Yapılar ve Dizi Gösterimi\",\"points\":[\"Dilimler (strings) bellekte karakter dizileri olarak temsil edilir.\",\"C'de diziler, bir karakterin adresini tutan bir pointer olarak ele alınır.\",\"Gösterim ve dizilere erişim için kullanılacak yönetilen yöntemler örneklendirilmiştir.\"],\"timestamp\":\"00:08:00\"},{\"title\":\"Dizi Tanımlama\",\"points\":[\"Bir dizi tanımlanarak, birlikte birkaç sayı otomatik olarak başlatılabilir.\",\"Dizideki elemanlara doğrudan erişim ve printf ile baskı yapılabilir.\",\"Pointer aritmetiği sayesinde, eleman sayılarına erişim kolaylaşır.\"],\"timestamp\":\"00:00:01\"},{\"title\":\"Pointer Aritmetiği\",\"points\":[\"Pointer aritmetiği, veri türüne göre bellekteki kaydırmaları otomatikleştirir.\",\"Programcı, ek asgari bilgilerle uğraşmadan dizi elemanlarına erişebilir.\",\"Array ismi, dizinin ilk elemanının adresi olarak kullanılabilir.\"],\"timestamp\":\"00:03:12\"},{\"title\":\"String Kıyaslaması\",\"points\":[\"Dizi karşılaştırmaları `="])</script><script>self.__next_f.push([1,"=` ile değil, `strcmp` gibi fonksiyonlarla yapılmalıdır.\",\"Stringler, bellekte farklı adreslerde saklanır; dolayısıyla, içerikleri aynı olsa da farklı sayılarla ifade edilir.\",\"String kopyalama işlemleri için `strcpy` kullanılması önerilir.\"],\"timestamp\":\"00:07:40\"},{\"title\":\"Dinamik Bellek Yönetimi\",\"points\":[\"Dinamik bellek tahsisi, `malloc` ile yapılır; `free` fonksiyonu ise bellek serbest bırakmak için kullanılır.\",\"Bellek tahsis edilirken, yeterli bellek boyutu dikkatlice hesaplanmalıdır.\",\"Dynamic memory allocation kullanımı ile programlar daha esnek hale gelir.\"],\"timestamp\":\"00:10:00\"},{\"title\":\"Bellek Hataları ve Otomatik Araçlar\",\"points\":[\"Bellek taşmaları ve kayıpları, program çalışırken sorunlara yol açabilir.\",\"Valgrind gibi araçlar, bellek hatalarını tespit etmek için kullanılabilir.\",\"Doğru belleği yönetmek, performans ve güvenlik için kritiktir.\"],\"timestamp\":\"00:15:40\"},{\"title\":\"Bellek Sızıntıları ve Kontrol Araçları\",\"points\":[\"Kodun sonunda belleği serbest bırakmak önemlidir.\",\"Valgrind aracının kullanımı ile bellek sızıntılarını kontrol etme.\"],\"timestamp\":\"00:00:00\"},{\"title\":\"Garbage Değerler\",\"points\":[\"Garbage değerler, başlatılmamış değişkenlerden kaynaklanır.\",\"Başlatılmamış değişkenler rastgele veriler içerebilir, bu bellek güvenliğini tehdit eder.\"],\"timestamp\":\"00:03:00\"},{\"title\":\"Bellek Manipülasyonu ve Güvenlik Açıkları\",\"points\":[\"Başlatılmamış değişkenler, kullanıcıların diğer kullanıcıların belleğini görmesine neden olabilir.\",\"Bellek düzenleme yeteneği, güvenlik açıkları oluşturabilir.\"],\"timestamp\":\"00:06:00\"},{\"title\":\"Değişkenleri Değiştirme: İşlevler ve Geri Dönüşler\",\"points\":[\"Fonksiyonlara değerlerin kopyaları gönderilir, bu nedenle değişiklikler ana değişkenlerde yapılmaz.\",\"Referans işaretçileri (pointers) kullanarak değişkenlerin gerçek adreslerini geçirmenin avantajı.\"],\"timestamp\":\"00:09:00\"},{\"title\":\"Swapping Değişkenleri: Geçici Değişken Kullanımı\",\"points\":[\"İki değişkenin değerlerini değiştirmek için geçici bir değişken kullanmak gereklidir.\",\"Doğru geçici değişken kullanımı, bellekten değerlerin değiştirilmesi sürecini yönetir.\"],\"timestamp\":\"00:12:00\"},{\"title\":\"Güvenli Bellek Erişimi\",\"points\":[\"Malloc ve calloc gibi dinamik bellek tahsis yöntemleri kullanılarak bellek güvenliği sağlanabilir.\",\"Doğru bellek ayırma ve serbest bırakma, sistemin kararlılığını artırır.\"],\"timestamp\":\"00:15:00\"},{\"title\":\"Gizli Mesajın Filtrelenmesi\",\"points\":[\"helpers.c dosyasında, resim filtresi uygulamak için oluşturulan bir filter fonksiyonu bulunmaktadır.\",\"Fonksiyon, bir resmin yükseklik ve genişliğini, iki boyutlu bir dizi alır ve görüntüdeki her pikseli kontrol eder.\",\"Mavi ve yeşil değerleri sıfırlayarak kırmızı filtre uygulayarak gizli bir mesajı ortaya çıkarmaktadır.\"],\"timestamp\":\"00:00:00\"},{\"title\":\"C Dilinin Yenilikleri ve Python'a Geçiş\",\"points\":[\"C programlama dilinin beşinci haftasında son haftaya girilirken, Python'a geçileceği duyurulmaktadır.\",\"Python, daha basit kod yazma imkanı sunarak, geliştirilmiş kütüphaneleri ve çerçeveleri kullanma olanağı tanır.\"],\"timestamp\":\"00:06:00\"},{\"title\":\"Bellek Yönetimi ve Veri Yapıları\",\"points\":[\"Bellek, verilerin işlenebileceği bir tuval olarak ele alınır ve bu nedenle, byte'ların nasıl temsil edileceği üzerinde hakimiyet gerektirir.\",\"Diziler, sıralı bellek alanlarıdır ve boyutları sabittir; ancak yeni veriler eklemek zor olabilir.\",\"Veri yapıları konusunda daha esnek çözümler aramak amacıyla, dinamik bellek yönetimine ve yeni alanların yaratılmasına yönelik yöntemler keşfedilir.\"],\"timestamp\":\"00:10:00\"},{\"title\":\"Dizilere Veri Ekleme Sorunu\",\"points\":[\"Dizilere veri eklendiğinde, mevcut bir dizi ile genişletmenin yolları açıklanır.\",\"Genişletme işlemi sırasında hem zaman hem de bellek maliyetleri üzerinden alternatif çözümler sunulur.\"],\"timestamp\":\"00:15:00\"},{\"t"])</script><script>self.__next_f.push([1,"itle\":\"Dinamik Bellek Yönetimi ve Malloc\",\"points\":[\"Dizilerin boyutlarının değiştirilmesinde malloc ve realloc fonksiyonlarının kullanımı açıklanır.\",\"malloc ile dinamik bellek tahsis edilirken, hâlâ bu belleği serbest bırakmanın önemi vurgulanır.\",\"realloc, daha önce oluşturulmuş bir dizinin boyutunu değiştirebilen bir fonksiyondur ve tasarruf sağlar.\"],\"timestamp\":\"00:25:00\"},{\"title\":\"Bağlantılı Listeler\",\"points\":[\"Bağlantılı listeler, bellek alanında verileri birbirine bağlamak için kullanılır ve her eleman sonraki elemanın adresini gösterir.\",\"Bu yapı, bellekte parçalanmış verilerin yönetilmesine olanak tanırken, dizi boyutundan bağımsız veri ekleme imkanı sunar.\",\"Noktalı işaretler (pointer) kullanarak birden fazla değer bir arada saklanabilir ve kolaylıkla erişilebilir.\"],\"timestamp\":\"00:35:00\"},{\"title\":\"Bellek Yönetimi\",\"points\":[\"malloc, geçerli belleği ayırt etme işlevine sahiptir.\",\"Heap ve stack bellek alanları hakkında bilgi verilmektedir.\",\"Stack'teki geçerli ve geçersiz değerlerin yönetimi, derleyici tarafından sağlanmaktadır.\"],\"timestamp\":\"00:00:45\"},{\"title\":\"Node Kavramı\",\"points\":[\"Node, bilgi kapsülleyen veri yapıları için genel bir terimdir.\",\"C dilinde struct kullanarak bir node tanımlamak için typedef kullanılır.\",\"Her node, bir sayı ve bir pointer içermektedir.\"],\"timestamp\":\"00:04:30\"},{\"title\":\"Bağlı Liste Oluşturma\",\"points\":[\"Linked list oluşturulurken, her node için hafızadan alan istenir.\",\"Öncelikle null olarak tanımlanmış bir liste değişkeni oluşturulur.\",\"malloc ile yeni bir node oluşturulup, listeye eklenmektedir.\"],\"timestamp\":\"00:10:17\"},{\"title\":\"Node Ekleme\",\"points\":[\"Her yeni eklenen node, önceki node'un next pointer'ına bağlanır.\",\"Ekleme işlemleri için gerekli bellek kontrolü yapılmalıdır.\",\"Node'un içindeki tüm alanlar uygun değerlerle başlatılmalıdır.\"],\"timestamp\":\"00:20:45\"},{\"title\":\"Linked List'te Gezinme\",\"points\":[\"Bağlı listede gezinmek için pointer kullanımı gerekmektedir.\",\"Yinelenen yapılar yerine for-loop ile traverse edilir.\",\"Listeden bilgi okumak için mevcut node'a gidilir ve değerler ekrana basılır.\"],\"timestamp\":\"00:30:25\"},{\"title\":\"Hafıza Temizleme\",\"points\":[\"Bağlı liste yapısındaki tüm node'lar serbest bırakılmalıdır.\",\"Hafıza temizlenirken, listeyi takip eden bir geçici değişken kullanılmalıdır.\",\"Serbest bırakma işlemleri, last in first out (LIFO) düzenine uygun şekilde yapılmalıdır.\"],\"timestamp\":\"00:38:00\"},{\"title\":\"Veri Yapısı ve Bellek Yönetimi\",\"points\":[\"Sıralı verilerin güncellenmesi gerektiğinde dikkat edilmesi gerekenler.\",\"Bellek tahsisi ve hafıza sızıntılarının önemi üzerinde duruldu.\",\"Dinamik bellek tahsisi yapan veri yapılarında işaretçilerin kullanımı risklidir.\"],\"timestamp\":\"12:18\"},{\"title\":\"Sıralı Bir Listede Eleman Ekleme\",\"points\":[\"Sıralı bir listeye eleman eklemek için izlenmesi gereken adımlar sergilendi.\",\"Doğru sıraya göre noktalama, mevcut diğer noktaların bağlantılarını etkileyecektir.\",\"Ekleme işlemleri esnasında önceki bağlantıların korunması gerektiğine dikkat çekildi.\"],\"timestamp\":\"23:45\"},{\"title\":\"İkili Ağaçların Tanımı\",\"points\":[\"İkili ağaç yapısının her düğümünün iki alt çocuğu olabileceği anlatıldı.\",\"İkili arama ağaçlarının hızlı veri arama imkânı sağladığına değinildi.\",\"Ağaç yapılarında veri erişiminin nasıl çalıştığını göstermek için örnekler verildi.\"],\"timestamp\":\"34:30\"},{\"title\":\"Hafıza Yönetimi ve Bellek Temizleme\",\"points\":[\"Ağaç yapılarında düğümlerin serbest bırakılmasının önemi vurgulandı.\",\"Yinelenmeli yapıların kullanımı üzerinde duruldu.\",\"Belirli bir düğümü iptal etmeden önce onun çocuklarının düzgün bir şekilde iptal edilmesi gerektiği anlatıldı.\"],\"timestamp\":\"46:15\"},{\"title\":\"Hash Table ve Kullanımı\",\"points\":[\"Hash tablolarının veri yapılarını birleştirmede nasıl yardımcı olabileceği açıklandı.\",\"Anahtar-de"])</script><script>self.__next_f.push([1,"ğer eşleştirmelerinin nasıl işlediğine dair örnekler verildi.\",\"Hash tablo yapısında çakışmaların nasıl işlendiği tartışıldı.\"],\"timestamp\":\"55:40\"},{\"title\":\"Hash Tablosu Temelleri\",\"points\":[\"Hash tablosunun, dizi ve bağlı liste karışımı bir yapı olduğu açıklanır.\",\"Aynı ilk harfe sahip olan elemanların bir bağlı listede zincirleme şeklinde depolandığı belirtilir.\",\"Sıralı erişim sağlarken, uzun bağlı listelerin önlenmesine yönelik stratejiler tanıtılır.\"],\"timestamp\":\"00:00:00\"},{\"title\":\"Düğüm Yapısı ve Hash Tablosu Oluşturma\",\"points\":[\"Bir bağlı listedeki düğüm yapısının nasıl tanımlanacağı açıklanır.\",\"Hash tablosunun, düğümlerden oluşan bir dizi içerdiği belirtilir.\",\"Çarpışmaları önlemek için daha fazla dizi oluşturma yöntemleri üzerinde durulur.\"],\"timestamp\":\"00:05:00\"},{\"title\":\"Hash Fonksiyonu ve Çarpışmaların Yönetimi\",\"points\":[\"Hash fonksiyonunun, girdi olarak verilen bir ismin hash değerini hesaplayarak bir dizinin konumunu belirlediği anlatılır.\",\"Çarpışma durumunun daha iyi yönetilmesi için girdi olarak iki harf kullanma önerisi yapılır.\",\"Daha fazla düğüm ve kova içeren hash tablolarının avantajları tanıtılır.\"],\"timestamp\":\"00:10:00\"},{\"title\":\"Trie Veri Yapıları\",\"points\":[\"Trie veri yapısının, isimlerin her harfi ile bir ağaç yapısı oluşturduğu açıklanır.\",\"Shared data ile hafıza kullanımının optimize edildiği vurgulanır.\",\"Arama ve yerleştirme zamanlarının bağımsız bir şekilde adım sayısına bağlı olduğu belirtilir.\"],\"timestamp\":\"00:15:00\"},{\"title\":\"Veri Yapılarının Performans Karşılaştırması\",\"points\":[\"Hash tablosunun Big O notasyonu ile incelendiği ve en kötü senaryolarda O(n) performans gösterdiği belirtilir.\",\"Trie yapısının, özellikle uzunluk bağımsız bir arama süresi sunduğu açıklanır.\",\"Zaman ve hafıza arasındaki denge ile sistem tasarımında önemli noktalar üzerinde durulur.\"],\"timestamp\":\"00:20:00\"},{\"title\":\"Soyut Veri Yapıları ve Kullanım Alanları\",\"points\":[\"Queue ve Stack veri yapılarının tanıtımı yapılır.\",\"FIFO (First In, First Out) ve LIFO (Last In, First Out) yapıların kullanıldığı örnekler verilir.\",\"Bu veri yapılarının yazılım ve gerçek dünya uygulamalarındaki önemine vurgu yapılır.\"],\"timestamp\":\"00:25:00\"},{\"title\":\"Söz Dizimi Farklılıkları\",\"points\":[\"C dilinde süslü parantezler ve noktalı virgüller kullanılırken, Python'da bu unsurlar yerine girinti önemlidir.\",\"Python'da koşul ifadeleri için parantez kullanımı gerekli değildir, bu da yazmayı kolaylaştırır.\",\"Python'daki 'elif' ifadesi, 'else if' yerine kullanılır ve bu daha sade bir yapıdır.\"],\"timestamp\":\"00:00:48\"},{\"title\":\"Boole Verileri ve Dönüşüm\",\"points\":[\"Python'da 'True' ve 'False' büyük harfle başlar.\",\"Koşullu ifadelerinde Python, 'do while' yapısını desteklemez, bunun yerine döngüler daha basit bir yapı ile gerçekleştirilir.\"],\"timestamp\":\"00:08:13\"},{\"title\":\"Döngü Yapıları\",\"points\":[\"Python'da bir döngü oluşturmak için 'for i in range(n)' ifadesi kullanılır; bu, belirli bir aralıkta yineleme sağlar.\",\"Python'da listeler, bağlı listeler gibi yönetilir ve kullanılabilirlik açısından daha fazla esneklik sunar.\"],\"timestamp\":\"00:15:16\"},{\"title\":\"Python Veri Tipleri\",\"points\":[\"Python, C diline göre daha az veri tipi içerir; bu türler yapılandırılmıştır ve Python otomatik olarak türü tahmin eder.\",\"Python'ın veri yapıları arasında listeler, kümeler ve sözlükler yer alır.\"],\"timestamp\":\"00:24:17\"},{\"title\":\"Yükleme ve Bellek Yönetimi\",\"points\":[\"Python'da bellek yönetimi otomatik olarak gerçekleşir; bu nedenle 'malloc' veya 'free' gibi işlevlere ihtiyaç yoktur.\",\"Modül veya kütüphaneler Python'da sadece 'import' ile kullanılır; fonksiyonlar ayrıntılı olarak belirtilerek yüklenebilir.\"],\"timestamp\":\"00:40:42\"},{\"title\":\"Performans Karşılaştırması\",\"points\":[\"Python, daha hızlı yazım kolaylığı sunarken, C dil"])</script><script>self.__next_f.push([1,"inde yazılmış kodlar genellikle daha hızlı çalışır.\",\"Büyük veri kümeleri üzerinde çalışırken C dilinde yazılmış kod kullanmak tercih edilebilirken, gelişim sürecini hızlandırmak için Python daha iyi bir seçenek olabilir.\"],\"timestamp\":\"00:50:44\"},{\"title\":\"Python ve Main Fonksiyonu\",\"points\":[\"Python'da main fonksiyonu zorunlu değildir, bu, kod yazımını kolaylaştırır.\",\"C dilinde main fonksiyonu bulunmasa derleme hatası alınır, fakat Python'da başlamak için gerekmez.\"],\"timestamp\":\"00:00:00\"},{\"title\":\"String Formatlama ve Kullanım\",\"points\":[\"Python'da f-string ile değişkenleri kolayca yerleştirmek mümkündür.\",\"Kıvrık parantezler olmadan değişkenler yerleştirilmez, bu yüzden dikkat edilmelidir.\"],\"timestamp\":\"00:02:15\"},{\"title\":\"Kullanıcı Girdisi ve Hata Yönetimi\",\"points\":[\"Python'un input fonksiyonu, C dilindeki getString fonksiyonuna benzer.\",\"Kullanıcıdan alınan değerler, string olarak döner ve tür dönüşümü gerektirir.\",\"Hatalı kullanıcı girişi durumunda, Python'da exception yönetimi mümkündür.\"],\"timestamp\":\"00:04:00\"},{\"title\":\"Temel Hesaplama Fonksiyonu\",\"points\":[\"Basit toplama işlemleri için Python'da doğrudan print komutu kullanılabilir.\",\"Kullanıcıdan alınan girdiler string olarak döndüğü için, uygun dönüşümler yapılmalıdır.\"],\"timestamp\":\"00:08:35\"},{\"title\":\"Hata Ayıklama ve İzinler\",\"points\":[\"Python'da çalışmayan hatalı kod durumlarında traceback bilgileri sağlanır.\",\"Kütüphanelerdeki fonksiyonlar için namespace kullanımı önemlidir.\"],\"timestamp\":\"00:12:50\"},{\"title\":\"Döngü Kullanımı ve İşlevsellik\",\"points\":[\"Python'da for döngüsü ile tekrarlayan işlemler basitçe yapılabilir.\",\"Fonksiyon tanımlamaları ve çağırmaları ile kod daha düzenli hale gelir.\"],\"timestamp\":\"00:17:00\"},{\"title\":\"Input Kontrolü ve Negatif Değerler\",\"points\":[\"Kullanıcıdan alınan değerin negatif olması durumu yönetilmelidir.\",\"Bu durumda, kullanıcının tekrar giriş yapması için bir döngü kullanılabilir.\"],\"timestamp\":\"00:23:45\"},{\"title\":\"Python'da Do While Döngüsü Yaratma\",\"points\":[\"Python'da doğrudan bir do while döngüsü yoktur.\",\"Bununla birlikte, bir sonsuz döngü kullanarak bu mantığı başarıyla taklit edebilirsiniz.\",\"Kullanıcıdan belirli bir değeri (örneğin, pozitif bir sayı) istedikten sonra döngüden çıkabilirsiniz.\"],\"timestamp\":\"00:00:52\"},{\"title\":\"Fonksiyon Tanımlama ve Kullanma\",\"points\":[\"CS50 kütüphanesinin getInt fonksiyonu yerine bir get_height fonksiyonu tanımlamak.\",\"Fonksiyona döngü içindeki işlemleri yerleştirip, doğru değeri bulduğunuzda geri dönebilirsiniz.\",\"Python'da iç içe döngü değişkenlerinin kapsamı C'den farklıdır; döngüden sonra da erişilebilir.\"],\"timestamp\":\"00:05:53\"},{\"title\":\"Hatalarla Baş Etme Yöntemleri\",\"points\":[\"Python'da try-except yapısı ile kullanıcıdan alınan girdi hatalarını yönetmek.\",\"Yanlış bir girdi girildiğinde kullanıcıya hata mesajı vererek tekrar girdi istemek.\",\"Bu süreçle programın çökmesini önleyerek kullanıcı deneyimini iyileştirmek.\"],\"timestamp\":\"00:15:03\"},{\"title\":\"Diziler ve Listeler\",\"points\":[\"Python'da dinamik listeleri kullanarak kullanıcıdan veri almak.\",\"Kullanıcıdan alınan değerleri dizide saklamak için append metodu kullanmak.\",\"Python'da dizilerin boyutunun sabit olmadığını bilmek, eleman eklemeyi ve çıkarmayı kolaylaştırır.\"],\"timestamp\":\"00:27:48\"},{\"title\":\"Sözlükler ve Anahtar-Değer İlişkilendirmesi\",\"points\":[\"Python’da anahtar-değer ilişkileri kurarak hızlı veri erişimi sağlamak için sözlükleri kullanmak.\",\"Kullanıcının girdiği bir adı kullanarak o kişinin telefon numarasını almak.\",\"Sözlük yapısının kolay erişim sağlaması ve kullanıcı dostu olması.\"],\"timestamp\":\"00:48:56\"},{\"title\":\"Python'da Sözlükler ile Veri Yönetimi\",\"points\":[\"Python'da sözlükler, anahtar-değer çiftleri kullanarak veri Saklama yöntemi sunar.\",\"Bir isimle bir numara almak için sözlükten veri çekmenin avantajla"])</script><script>self.__next_f.push([1,"rı gösterilmiştir.\",\"Sözlüklerde anahtarlar string olarak kullanılabilir, bu da veriye erişimi kolaylaştırır.\"],\"timestamp\":\"00:00:55\"},{\"title\":\"Phonebook.py Örneği\",\"points\":[\"Phonebook.py dosyası, kullanıcıdan isim alarak karşılık gelen numarayı göstermektedir.\",\"Programdaki hata, yanlış dosyanın çalıştırılmasından kaynaklanmıştır.\",\"Kullanıcının isimleri girdiği ve karşılık gelen telefon numaralarını bulduğu bir telefon defteri uygulaması geliştirilmektedir.\"],\"timestamp\":\"00:05:00\"},{\"title\":\"CSV Dosyaları ile Veri Saklama\",\"points\":[\"Veri kalıcılığı sağlamak için CSV (Virgül ile Ayrılmış Değerler) dosyaları kullanılmaktadır.\",\"Program, kullanıcıdan isim ve numara alarak bunları CSV dosyasına eklemektedir.\",\"CSV dosyaları, verilerin saklandığı basit metin dosyalarıdır ve kolayca okunabilirler.\"],\"timestamp\":\"00:11:30\"},{\"title\":\"Veri Analizi ile Örnek Uygulama\",\"points\":[\"Kullanıcıların favori TV programlarını toplamak için bir Google Formu oluşturuldu.\",\"CSV formatında indirilerek analiz yapılmak üzere bu veriler değerlendirildi.\",\"Sonuçlar, hangi programların daha popüler olduğunu belirlemek için sayısal verilere dönüştürülmüştür.\"],\"timestamp\":\"00:18:00\"},{\"title\":\"Daha İleri Python Uygulamaları\",\"points\":[\"Python'da ses tanıma ve yüz tanıma gibi ileri düzey uygulamalar için kütüphaneler tanıtıldı.\",\"Kullanıcıdan ses alarak kişisel etkileşimler oluşturulması demo edilmiştir.\",\"QR kodları üretme gibi eğlenceli özelliklerin de Python ile gerçekleştirileceği gösterildi.\"],\"timestamp\":\"00:45:00\"},{\"title\":\"Giriş ve Temizlik İşlemleri\",\"points\":[\"Kullanıcı girdisinde boşlukları temizlemek için 'strip' fonksiyonu kullanılabilir.\",\"Verileri tümünü büyük harfe dönüştürmek için 'upper' fonksiyonu kullanılmaktadır.\",\"Python'da bir dizi fonksiyon çağrısını zincirleyerek daha düzenli kod yazmak mümkündür.\"],\"timestamp\":\"00:00:00\"},{\"title\":\"Dizi ve Set Kullanımı\",\"points\":[\"Python'da dizilerden ziyade set kullanılarak, tekrar eden elemanların otomatik olarak filtrelenmesi sağlanabilir.\",\"Veri sıralama işlemleri için Python'da 'sorted' fonksiyonu kullanılmaktadır.\"],\"timestamp\":\"00:08:00\"},{\"title\":\"Veri Sayma ve Sözlük Kullanımı\",\"points\":[\"Kullanıcıdan gelen başlıkların sayısını tutmak için bir sözlük yapısı oluşturulabilir.\",\"Bir başlık mevcutsa sayım artırılıp, yoksa başlangıç değeri olarak 1 atanmalıdır.\",\"Kullanıcı girdilerinde büyük harf duyarlılığını önlemek için veriler her zaman büyük harfe dönüştürülmelidir.\"],\"timestamp\":\"00:14:00\"},{\"title\":\"Veri Analizi ve Hataları\",\"points\":[\"Hataları gidermek için doğru anahtar yönetimi yapılarak, her başlığın sayımı izlenmelidir.\",\"Excel ve Google Sheets gibi düz dosyalardan veritabanı oluşturmak için SQL kullanılabilir.\"],\"timestamp\":\"00:20:00\"},{\"title\":\"SQL'e Giriş\",\"points\":[\"SQL, verileri oluşturma, okuma, güncelleme ve silme yeteneklerini barındıran bir dil olarak tanımlanır.\",\"SQL ile tablolar oluşturularak veritabanları daha düzenli ve etkili şekilde yönetilebilir.\"],\"timestamp\":\"00:25:00\"},{\"title\":\"SQLite Kullanımı\",\"points\":[\"SQLite, hafif bir SQL sürümüdür ve kullanımı oldukça yaygındır.\",\"Kullanıcı girdilerini temizledikten sonra verilerin bir veritabanında depolanması sağlanabilir.\"],\"timestamp\":\"00:30:00\"},{\"title\":\"Veritabanı Oluşturma ve İlk Sorgular\",\"points\":[\"CSV dosyasındaki verilerin favorites.db adlı bir SQLite veritabanına yüklendiği açıklanır.\",\"SQLite3 arayüzünde veritabanı yapısının görüntülenmesi için .schema komutu kullanılır.\",\"Otomatik olarak oluşturulan 'favorites' tablosunun üç metin sütunu: timestamp, title ve genres içerdiği belirtilir.\"],\"timestamp\":\"00:00:00\"},{\"title\":\"SQL Sorguları ile Veri İşleme\",\"points\":[\"SELECT komutu kullanılarak titles alanından veriler çekilir.\",\"Veri sorgulama sürecinin Python'da yazılan daha uzun kodların yerine SQL ile k"])</script><script>self.__next_f.push([1,"ısaltıldığı vurgulanır.\",\"SELECT ile birden fazla sütun (örneğin, title ve genres) sorgulayarak sonuçlar elde edilir.\"],\"timestamp\":\"00:10:00\"},{\"title\":\"Veri Fonksiyonları ve Filtreleme\",\"points\":[\"SQL'deki DISTINCT, COUNT, AVG gibi fonksiyonların kullanımı örneklendirilir.\",\"WHERE koşulu ile belirli verilerin filtrelenmesi ve 'LIKE' anahtar kelimesinin kullanımı detaylandırılır.\",\"Comma-separated values (CSV) yapısının veritabanı tasarımındaki zorlukları üzerinden geçilir.\"],\"timestamp\":\"00:20:00\"},{\"title\":\"Veritabanında Güncelleme ve Silme İşlemleri\",\"points\":[\"UPDATE sorgusu ile mevcut verilerin değiştirilmesi gösterilir.\",\"DELETE komutu ile belirli verilerin silinmesi gerektiği anlatılır.\",\"Veritabanında değişikliklerin anlık olarak yansıtıldığı ve bunun yazılım uygulamalarındaki önemine değinilir.\"],\"timestamp\":\"00:30:00\"},{\"title\":\"Veri Mimarisi ve İlişkisel Veritabanı\",\"points\":[\"İlişkisel veritabanlarını oluşturmak için birden fazla tablo (shows ve genres) kullanmanın avantajları vurgulanır.\",\"Bir tabloya ait benzersiz kimliklerin (ID'ler) atanması ve verilerin daha anlamlı hale getirilmesi sağlanır.\",\"Nesneler arası birçoktan bire ilişkilendirme üzerinde durulur.\"],\"timestamp\":\"00:40:00\"},{\"title\":\"Python ile SQL Entegrasyonu\",\"points\":[\"Python'da SQL kodları ile veri erişimi ve işlemleri gerçekleştirilir.\",\"cs50 kütüphanesi ile SQL kullanılarak veritabanı sorguları yapılır.\",\"Kullanıcıdan alınan verilerin SQL komutlarıyla işlenmesi örneklenir.\"],\"timestamp\":\"00:50:00\"},{\"title\":\"Veri Tabanı Sorguları ve Sonuçlar\",\"points\":[\"SQL sorgusu, belirli bir verinin sayısını döndürmeli ve sonuçları bir öğe sözlüğü şeklinde sunmalıdır.\",\"Örnek olarak, 'The Office' başlıklı içerik toplam 12 kez bulunmuştur.\"],\"timestamp\":\"00:00:00\"},{\"title\":\"Veri Tabanı Yapılarıyla Çalışma\",\"points\":[\"SQLite veritabanında tablolar ve veri türleri hakkında bilgiler verilmektedir.\",\"Veri türleri arasında integer, text, numeric, ve BLOB bulunmaktadır.\"],\"timestamp\":\"00:10:00\"},{\"title\":\"İndeks Oluşturma ve Performans İyileştirme\",\"points\":[\"SQL'de arama performansını artırmak için indeks oluşturulabilir.\",\"İndeksler, verilerin daha hızlı erişimini sağlar ve bu sayede sorgu süreleri kısalır.\"],\"timestamp\":\"00:20:00\"},{\"title\":\"Join İşlemleri ile Birleştirme\",\"points\":[\"Birden fazla tablo arasındaki verileri birleştirmek için JOIN ifadeleri kullanılır.\",\"Kişi ID'si kullanılarak programcılar, belirli kişilere ait tüm programların başlıklarını sorgulayabilir.\"],\"timestamp\":\"00:30:00\"},{\"title\":\"SQL Enjeksiyon Saldırıları\",\"points\":[\"Kötü niyetli kullanıcılar, SQL enjeksiyon saldırıları ile sistemlere zarar verebilir.\",\"SQL sorgularında kullanıcı girdilerini yeterince filtrelemek önemlidir.\"],\"timestamp\":\"00:40:00\"},{\"title\":\"Yarış Koşulları ve Veritabanı Eşzamanlama\",\"points\":[\"Çoklu kullanıcıların aynı anda veritabanına erişimi, yarış koşullarına yol açabilir.\",\"Veritabanı işlemlerinin atomik olması, kullanıcıların verileri güvenli bir şekilde güncellemelerini sağlar.\"],\"timestamp\":\"00:51:00\"},{\"title\":\"Paralel İşlemler ve Problemler\",\"points\":[\"İlk olarak, başlangıçta bir yumurta için 10 beğeni olduğunu varsayalım.\",\"Kullanıcılar aynı anda beğeni butonuna tıkladığında, beğeni sayısı her kullanıcı için aynı kalabilir.\",\"Veritabanına kaydedilmeden önce her iki istek de benzer sonuçlarla sonuçlanabilir.\"],\"timestamp\":\"00:00:45\"},{\"title\":\"Dışarıda İletişim Problemleri\",\"points\":[\"İki kullanıcı, aynı değişkenin durumuna bakarak kararlara varır.\",\"Sorunu çözmek için kullanıcılar arasında iletişimi sağlamak gerekir.\",\"Yazılımlarda 'kilit' terimi, değişkenlerin güvenli bir şekilde güncellenmesini sağlamada kullanılır.\"],\"timestamp\":\"00:03:12\"},{\"title\":\"TCP/IP Protokolü\",\"points\":[\"TCP/IP, veri paketlerinin yönlendirilmesi için kullanılan temel protokoldür.\",\"IP adresleri, her bir cih"])</script><script>self.__next_f.push([1,"azın internetteki benzersiz kimliğidir ve 32 bite kadar uzanabilir.\",\"TCP, veri aktarımını güvence altına alarak paketlerin eksiksiz bir şekilde ulaşmasını sağlar.\"],\"timestamp\":\"00:06:56\"},{\"title\":\"HTTP ve HTTPS Protokolleri\",\"points\":[\"HTTP, web tarayıcıları ve web sunucuları arasındaki iletişim için standart bir protokoldür.\",\"HTTPS ise güvenli HTTP protokolüdür ve web içeriğinin korunması için kullanılır.\",\"Web sayfaları ve içerikler arasında nasıl veri gönderileceği 'GET' ve 'POST' yöntemleri ile tanımlanır.\"],\"timestamp\":\"00:10:24\"},{\"title\":\"Veri İletişiminde Bağlantılar\",\"points\":[\"Bir bağlantı isteği, istemci ve sunucu arasında iki aşamalı olarak gerçekleşir.\",\"İstemci, bir URL talep ettiğinde, sunucu bu isteğe yanıt verir.\",\"Her istek, belirli bir veri türünü geri döner ve bu veri türü içerik türleri ile tanımlanır.\"],\"timestamp\":\"00:14:45\"},{\"title\":\"HTTP Durum Kodları\",\"points\":[\"HTTP 200 durumu, sayfanın doğru bir şekilde yüklendiğini gösterir.\",\"HTTP 404 durumu, talep edilen sayfanın bulunmadığını belirtir.\",\"Diğer yaygın HTTP durum kodları arasında 301 (kalıcı taşındı), 401 (yetkisiz) ve 500 (sunucu hatası) bulunur.\",\"404 kodu, kullanıcının yanıtlanmayan bir sayfaya erişmeye çalıştığında görülen yaygın bir hatadır.\"],\"timestamp\":\"00:00:00\"},{\"title\":\"HTML ve CSS Dillerine Giriş\",\"points\":[\"HTML, sayfaların yapısını oluşturmak için kullanılırken, CSS sayfaların stilini belirler.\",\"HTML, etiketler ve nitelikler ile yapılandırılır; temel etiketler arasında \u003chtml\u003e, \u003chead\u003e, \u003cbody\u003e ve \u003ctitle\u003e bulunur.\",\"Sayfa başlığı, \u003ctitle\u003e etiketinin içinde tanımlanır ve kullanıcıya tarayıcı sekmesinde gösterilir.\"],\"timestamp\":\"00:10:00\"},{\"title\":\"Web Sayfası Oluşturma\",\"points\":[\"Kullanıcıların tarayıcıları ile taleplerinde HTML kodu göndermeleri gerektiği vurgulanır.\",\"HTML'de paragraf oluşturmak için \u003cp\u003e etiketinin kullanılması gerektiği gösterilir.\",\"Başlıklar için farklı HTML etiketleri (H1, H2, H3) tipik olarak farklı boyut ve vurgular sağlar.\"],\"timestamp\":\"00:25:00\"},{\"title\":\"Liste ve Tablo Oluşturma\",\"points\":[\"HTML'de sıralı (OL) ve sırasız (UL) listeler oluşturulabilir.\",\"Tablolar, \u003ctable\u003e, \u003ctr\u003e, \u003cth\u003e ve \u003ctd\u003e etiketleri ile oluşturulur.\",\"Tablo başlıkları, bilgilerin anlaşılmasını kolaylaştırmak için kullanılır.\"],\"timestamp\":\"00:40:00\"},{\"title\":\"Görsel ve Medya Ekleme\",\"points\":[\"Resimler eklemek için \u003cimg\u003e etiketi, video eklemek için ise \u003cvideo\u003e etiketi kullanılır.\",\"Resimlerin kaynağı, ilgili dosya yolunu gösterir ve alternatif metin seçenekleri (alt) eklenmelidir.\",\"Videolar için genişlik ve yüksekliği ayarlamak mümkündür.\"],\"timestamp\":\"00:55:00\"},{\"title\":\"Bağlantılar ve İframe'ler\",\"points\":[\"Bağlantılar oluşturmak için \u003ca\u003e (anchor) etiketi ve HREF nitelikleri kullanılır.\",\"İframe'ler, başka bir sayfanın içeriğini mevcut sayfada göstermek için kullanılır.\"],\"timestamp\":\"01:10:00\"},{\"title\":\"Phishing Saldırıları ve HTML Kullanımı\",\"points\":[\"Phishing saldırıları, kullanıcıyı yanlış yönlendiren HTML sayfalarının oluşturulmasını içerir.\",\"Bir web sayfasının görünümünü değiştirmek için HTML kodları kullanılabilirken, arka plandaki etiketler farklı linkler gösterebilir.\",\"Kullanıcıların bağlantılara tıklamadan önce dikkatli olmaları ve sağ altta görünen bağlantı adresine bakmaları gerekmektedir.\"],\"timestamp\":\"00:00:00\"},{\"title\":\"Sayfalar Arası Bağlantılar ve Hedefleme\",\"points\":[\"Bağlantı tanımlamak için HREF kullanarak diğer sayfalara nasıl yönlendirme yapılacağı gösterilmektedir.\",\"HTML kodu kullanarak bir web uygulaması içinde çoklu sayfalar oluşturma imkanı sağlanır.\"],\"timestamp\":\"00:11:55\"},{\"title\":\"Responsive Tasarım\",\"points\":[\"Responsive tasarım, web sayfasının farklı cihazlarda uygun görünmesi için gerekli HTML etiketlerinin kullanımını ifade eder.\",\"Viewport metatagı, cihazın boyutuna uyum sağlaması için taray"])</script><script>self.__next_f.push([1,"ıcıya doğrultma sağlar.\"],\"timestamp\":\"00:16:09\"},{\"title\":\"HTML Formları ve URL Parametreleri\",\"points\":[\"HTML formları, kullanıcının bilgileri girmesi için alanlar ve bunları sunucuya iletme mekanizmaları içerir.\",\"GET ve POST yöntemleri, URL üzerinde kullanıcı girişleri ile çeşitli parametreler yapar.\"],\"timestamp\":\"00:32:03\"},{\"title\":\"CSS ile Stil Verme\",\"points\":[\"CSS, web sayfalarının görünümünü ve düzenini değiştirmek için kullanılır.\",\"HTML etiketlerine stiller ekleyerek metin boyutları, hizalamaları ve renkleri ayarlanabilir.\"],\"timestamp\":\"00:48:45\"},{\"title\":\"CSS ile Seçici Kullanımı\",\"points\":[\"CSS'de bağlantı etiketlerinin varsayılan olarak metin süslemesi yoktur.\",\"Nitelik seçici kullanarak, belirli URL'lere temel alarak stil vermek mümkündür.\",\"Yıldız eşittir (*) kullanımıyla, bağlantı etiketlerinin içeriği üzerinde geniş bir seçim yapılabilir.\"],\"timestamp\":\"00:00:00\"},{\"title\":\"Framework Kullanımı\",\"points\":[\"Web geliştiricileri sıklıkla Bootstrap gibi framework'lerden yararlanarak daha hızlı ve estetik tasarımlar yapar.\",\"Bootstrap, kullanıcıların sadece birkaç satır kod yazarak şık bileşenler oluşturmasını sağlayan bir CSS framework'üdür.\",\"Bootstrap kullanarak sayfa yeniden tasarımı, kullanıcı deneyimini önemli ölçüde iyileştirir.\"],\"timestamp\":\"00:07:00\"},{\"title\":\"JavaScript ile Etkileşim\",\"points\":[\"JavaScript, kullanıcı etkileşimlerini işlemek için kullanılır ve bu etkileşimler tarayıcıda gerçekleştirilir.\",\"Form verilerini işlemek için JavaScript'te olay dinleyicileri kullanılabilir.\",\"JavaScript ile DOM üzerinde değişiklik yaparak sayfa içeriği dinamik olarak güncellenebilir.\"],\"timestamp\":\"00:15:00\"},{\"title\":\"Python ve Web Geliştirme\",\"points\":[\"Flask gibi Python framework'leri kullanarak web uygulamaları geliştirmek, kullanıcı isteklerini yönetmeyi kolaylaştırır.\",\"URL'leri analiz ederek dinamik yanıtlar oluşturmak mümkündür.\",\"Web uygulaması geliştirmek için gerekli olan temel dosyalar (app.py, requirements.txt) oluşturulmalıdır.\"],\"timestamp\":\"00:25:00\"},{\"title\":\"Flask Framework'e Giriş\",\"points\":[\"Flask, minimal bir mikro çerçeve olarak web uygulamaları geliştirmek için kullanılır.\",\"Farklı web çerçeveleri (Django, ASP.NET) farklı konvansiyonlar sunar.\",\"Flask'in basit gereksinimleri ile uygulama oluşturmak kolaydır.\"],\"timestamp\":\"20:10\"},{\"title\":\"Uygulama Oluşturma\",\"points\":[\"İlk olarak, 'app.py' dosyası oluşturulması ve basit bir selam mesajı içeren bir fonksiyon tanımlanması gerektiği belirtiliyor.\",\"Flask uygulaması oluşturmak için gerekli kodlar yazılmalı ve 'index.html' adında bir şablon dosyası kullanılmalı.\",\"Uygulama, '/' rotasında çalışacak şekilde ayarlanmalıdır.\"],\"timestamp\":\"20:33\"},{\"title\":\"HTML Şablonu Oluşturma\",\"points\":[\"İlk olarak 'templates' dizini oluşturulmalı ve 'index.html' dosyası inşa edilmelidir.\",\"HTML sayfası, sayfanın başlığı ve içerik kısmına selam mesajı eklenerek düzenlenmiştir.\",\"CSS ve diğer statik içerikler için ayrı dizin kullanılmayacak.\"],\"timestamp\":\"21:25\"},{\"title\":\"Flask Sunucusunu Çalıştırma\",\"points\":[\"Flask sunucusunu başlatmak için 'flask run' komutu kullanılmalıdır.\",\"Uygulama varsayılan olarak port 5000 üzerinde çalışır ve kullanıcı arayüzü bu port üzerinden görüntülenir.\",\"HTML içeriği üzerinden kullanıcıya sunulur.\"],\"timestamp\":\"22:05\"},{\"title\":\"Dinamik İçerik Ekleme\",\"points\":[\"Kullanıcının ismini dinamik olarak almak için URL'de parametre kullanımı gösterilir.\",\"Flask içinde 'request.args.get()' fonksiyonu ile kullanıcıdan alınan bilgi işlenir.\",\"Bu yöntemle, URL içeriği üzerinden dinamik olarak mesaj gösterilmesi sağlanır.\"],\"timestamp\":\"22:37\"},{\"title\":\"Form Kullanımı Eklemek\",\"points\":[\"Kullanıcıdan veri almak için basit bir form eklenir; bu form, verilere isim karşılığında kullanıcının adını almak için tasarlanır.\",\"Form, kullanıcının girdiği verileri '/greet' ro"])</script><script>self.__next_f.push([1,"tasına gönderecek şekilde yapılandırılır.\",\"Form gönderimi sonrası URL'deki parametre değişiklikleri gösterilir.\"],\"timestamp\":\"23:30\"},{\"title\":\"POST Yönteminin Kullanımı\",\"points\":[\"Formdan veri gönderirken 'GET' yerine 'POST' metodunun kullanılması, URL'de hassas bilgilerin gizlenmesini sağlar.\",\"Uygulama içindeki rotaların POST isteklerini desteklemesi gerekir.\",\"Her bir yöntem farklı durumlarda farklı avantajlara sahiptir.\"],\"timestamp\":\"24:50\"},{\"title\":\"Hata Kontrolü ve Geliştirmeler\",\"points\":[\"Uygulamadaki hata kontrol mekanizmaları gereklidir; boş isim girişi yapıldığında kullanıcıya uygun bir geri bildirim sağlanmalıdır.\",\"Temel bir hata denetimi ile boş girdi algılandığında, varsayılan bir değerle (ör. 'dünya') cevap verilebilir.\",\"HTML üzerinde bir 'required' özelliği kullanarak kullanıcı girişlerinin zorunlu olması sağlanabilir.\"],\"timestamp\":\"25:40\"},{\"title\":\"Şablon Düzenleme ve Yeniden Kullanım\",\"points\":[\"Ortak HTML yapısının yeniden kullanılabilirliği için 'layout.html' şablonu oluşturulması gerektiği açıklanır.\",\"Bu şablon üzerinden sayfaların genel yapısı korunarak form ve içerik kısımları özelleştirilebilir.\",\"Jinja şablon motoru kullanılarak değişkenlerin ve dinamik içeriklerin işlenmesi sağlanır.\"],\"timestamp\":\"27:20\"},{\"title\":\"GET ve POST İstekleri\",\"points\":[\"request.args, GET istekleri için; request.form, POST istekleri içindir.\",\"İkisinin işlevleri oldukça benzerdir, ancak doğru olanı kullanmak kullanıcıya bağlıdır.\",\"Kullanıcının girdiği veriyi görmek için request.args yerine request.form kullanılması gerekir.\"],\"timestamp\":\"00:00:00\"},{\"title\":\"MVC Yapısı\",\"points\":[\"MVC (Model-View-Controller) yapısı, uygulama geliştirmede yaygın bir paradigmadır.\",\"app.py dosyası, genellikle kontrolör olarak adlandırılır ve programlama mantığını içerir.\",\"HTML ve Jinja kodu içeren dosyalar, görünüm şablonlarıdır.\",\"Model, verilerin saklandığı kısmı temsil eder ve daha sonra işlenecektir.\"],\"timestamp\":\"00:05:28\"},{\"title\":\"Form Oluşturma\",\"points\":[\"Kullanıcının spor kaydı oluşturması için bir form oluşturulmaktadır.\",\"Form, ad ve spor bilgilerinin toplanması için input alanları içermektedir.\",\"Dropdown menüsünde kullanıcıya üç spor seçeneği sunulmaktadır: basketbol, futbol ve ultimate frisbee.\"],\"timestamp\":\"00:12:58\"},{\"title\":\"Hata Yönetimi\",\"points\":[\"Kullanıcının boş form göndermesi durumunda hata kontrolü yapılır.\",\"Hatalı kayıt durumunda kullanıcılara hata mesajları iletilmektedir.\",\"İlgili hata mesajları, belirli bir hata durumuna (adı eksik, spor seçilmemiş) spesifik bir şekilde uygundur.\"],\"timestamp\":\"00:21:40\"},{\"title\":\"Veri Saklama ve SQL Kullanımı\",\"points\":[\"Kullanıcıların kayıt bilgileri bir Python sözlüğü kullanılarak saklanmaktadır.\",\"Flask ile birlikte SQLite kullanarak gelen kullanıcı verileri kaydedilmektedir.\",\"Veritabanına bağlantı kurarak kayıt işlemleri gerçekleştirilir ve veritabanında saklanan kayıtlar görüntülenir.\"],\"timestamp\":\"00:28:12\"},{\"title\":\"Flask Uygulamasını Çalıştırma\",\"points\":[\"Uygulama başlar ve ana sayfa yüklenir.\",\"Kayıt için kullanıcı adı girilir.\",\"Kullanıcı, ultimate frisbee için kayıt olur ve başarılı bir şekilde eklenir.\"],\"timestamp\":\"00:00:45\"},{\"title\":\"Veri Tabanı Durumu\",\"points\":[\"SQLite ile ilişkinin açılması ve mevcut kayıtlara erişim.\",\"Daha önce sıfır olan kayıt sayısı, üçe çıkar.\",\"Kayıtları görüntülemek için kullanılan HTML tablo yapısı incelenir.\"],\"timestamp\":\"00:02:15\"},{\"title\":\"Deregister İşlemi\",\"points\":[\"Kullanıcıları kaldırmak için düğmelere tıklanır.\",\"Deregister route'u üzerinden veritabanından kayıt silinir.\",\"Kayıt işlemi sırasında ID kullanmanın önemi vurgulanır.\"],\"timestamp\":\"00:03:40\"},{\"title\":\"POST ve GET İstekleri\",\"points\":[\"Kullanıcıların butonlar aracılığıyla nasıl etkileşimde bulunduğu gösterilir.\",\"Düzenli şekilde POST istekleri kul"])</script><script>self.__next_f.push([1,"lanmanın avantajları açıklanır.\",\"Kötü niyetli bir URL kullanarak kullanıcıları kandırma riski örneği.\"],\"timestamp\":\"00:06:50\"},{\"title\":\"Flask-Mail ile E-posta Gönderimi\",\"points\":[\"Flask-Mail kütüphanesi ile e-posta gönderme sürecinin gösterilmesi.\",\"Kullanıcı kaydını onaylamak için otomatik e-posta gönderimi.\",\"Gizli bilgilerin yönetimi için ortam değişkenlerinin kullanımı açıklanır.\"],\"timestamp\":\"00:11:30\"},{\"title\":\"Kullanıcı Oturumları ve Çerezler\",\"points\":[\"Oturumların nasıl çalıştığı ve bunların önemi.\",\"Kullanıcıların tarayıcıları arasında nasıl tanındığı.\",\"Çerezlerin güvenli bir şekilde kullanımı ve rolü açıklanır.\"],\"timestamp\":\"00:16:00\"},{\"title\":\"Alışveriş Sepeti Uygulaması\",\"points\":[\"Kullanıcıların kitapları sepete eklemesi için basit bir arayüz.\",\"Sepet bilgileri oturumda nasıl saklanır.\",\"Farklı kullanıcıların ayrı sepetlerinin nasıl yönetildiği açıklanır.\"],\"timestamp\":\"00:23:40\"},{\"title\":\"JavaScript Entegrasyonu\",\"points\":[\"Otomatik tamamlama için JavaScript kullanarak dinamik bir arayüz.\",\"Kullanıcı girişlerinin gerçek zamanlı olarak nasıl işlenebileceği.\",\"JavaScript, Python ve SQL'in nasıl entegre edileceği hakkında tartışma.\"],\"timestamp\":\"00:30:25\"},{\"title\":\"JavaScript'in Temelleri\",\"points\":[\"JavaScript kodu, bir metin kutusunu seçiyor ve input olayı için bir dinleyici ekliyor.\",\"Input olayı, metin kutusuna yazma veya yapıştırma ile tetikleniyor.\",\"Fetch fonksiyonu ile sunucudan bilgi alınıyor.\"],\"timestamp\":\"00:00:01\"},{\"title\":\"Sunucudan Veri Çekme\",\"points\":[\"Fetch ile sunucudan alınan yanıt, 'shows' adlı bir değişkende saklanıyor.\",\"Alınan yanıt, bir UL etiketi içinde görüntülenecek listeler oluşturuyor.\",\"Geliştirici araçları kullanılarak işlem akışı izleniyor.\"],\"timestamp\":\"00:00:45\"},{\"title\":\"Veri Gönderiminin İyileştirilmesi\",\"points\":[\"HTML etiketlerini göndermek yerine JSON formatında veri gönderimi öneriliyor.\",\"JSON, daha verimli ve makine dostu bir veri formatıdır.\",\"API'lar, sunucudan JSON formatında verileri almak için kullanılıyor.\"],\"timestamp\":\"00:01:30\"},{\"title\":\"HTML ve JavaScript Entegrasyonu\",\"points\":[\"JavaScript kullanarak sunucudan elde edilen veriyi HTML formatına dönüştürüyor.\",\"Kullanıcıdan alınan input'a göre dinamik olarak içerik oluşturuluyor.\",\"Sonuç, kullanıcı dostu bir arayüz ve etkileşimli uygulamalar sağlıyor.\"],\"timestamp\":\"00:02:30\"}],\"entities\":null,\"insights\":[{\"title\":\"Temel Çıkarımlar\",\"points\":[\"Bilgisayar bilimi, yalnızca programlama değil, sistematik problem çözme becerisini geliştirmekle ilgilidir.\",\"Algoritmalar, problemsel çözümler için sistematik bir yaklaşım sunar.\",\"Veri temsilinin temeli, ikilik sistemi ve ASCII gibi standartlar üzerinde inşa edilmiştir, bu nedenle tüm bilgisayarlar benzer şekilde işlev görür.\"]},{\"title\":\"Kritik Notlar\",\"points\":[\"Programlama, mantıklı düşünmeyi ve sorun çözmeyi geliştirir.\",\"Pseudocode yazmak, algoritmaların mantığını aydınlatır.\",\"Yüksek seviyeli soyutlamalar, kodun okunabilirliğini ve bakımını artırır.\"]},{\"title\":\"Temel Çıkarımlar\",\"points\":[\"Sonsuz döngüler interaktif programlarda etkileşimi artırır.\",\"Proje her seferinde küçük adımlar atarak geliştirilebilir.\",\"Karmaşık oyun mekaniği oluşturulurken birden fazla öğe kullanmak önemlidir.\"]},{\"title\":\"Programlama Sürecinin Özeti\",\"points\":[\"C programlaması, temel terimlerin ve yapıların anlaşılmasını gerektirir.\",\"Komut satırı, grafiksel arayüze göre hızlı ve etkili bir yöntemdir.\",\"Hatalarla başa çıkmak, deneyimle öğrenilen bir süreçtir.\"]},{\"title\":\"Temel Çıkarımlar\",\"points\":[\"C programlama dilinde, veri türleri ve değişkenler, yazılacak kodun temellerini oluşturur.\",\"Koşullu ifadeler, program akışını kontrol etmek için kritik bir rol oynar.\",\"İyi bir kod yazımı, ileride karşılaşılabilecek sorunları azaltır.\"]},{\"title\":\"Ana Temalar ve Kritik Noktalar\",\"points\":[\"C dilin"])</script><script>self.__next_f.push([1,"de şartlı ifadeler ve döngü yapıları kullanılarak etkileşimli programlar geliştirilebilir.\",\"Fonksiyonlar, kodun modüler olmasını sağlarken, tekrar eden hesaplamaları kolaylaştırır.\",\"Programlamada karar mantığı ve döngü kullanımı temel becerilere dönüşmüştür.\"]},{\"title\":\"Kritik Çıkarımlar\",\"points\":[\"'do while' döngüsü, öncelikle bir işlem yapmayı ve ardından koşula göre devam edip etmeyeceğini kontrol etmeyi sağlar.\",\"İç içe döngüler kullanarak, iki ya da daha fazla boyutta çıktı üretimi mümkündür.\",\"Sayıların hassasiyet sorunları, yazılım geliştirme süreçlerinde dikkatlice ele alınmalıdır.\"]},{\"title\":\"Kritik Öğrenimler\",\"points\":[\"Assembly dili, bilgisayar sistemlerinin temelini anlamak için önemlidir ve yazılımın nasıl çalıştığını gösterir.\",\"Hata ayıklama süreçleri, programlama kariyerinin önemli bir parçasıdır ve hatalar kaçınılmazdır.\",\"C dilindeki diziler, çoklu değişkenleri yönetimi kolaylaştırırken, bellek yönetimi için de verimlidir.\"]},{\"title\":\"Önemli Çıkarımlar\",\"points\":[\"Dizilerin ve nul karakterinin kullanımı, C programlamada verimli veri yönetimi sağlar.\",\"ASCII değerlerinin ve türlerin dönüştürülmesi, farklı veri tipleriyle çalışırken önemlidir.\",\"C dilindeki mevcut kütüphanelerin sağladığı işlevler, program yazımını hızlandırır ve kolaylaştırır.\"]},{\"title\":\"Önemli Noktalar\",\"points\":[\"Değişken kullanımı programı daha verimli hale getirir ve tekrar eden hesaplamalardan kaçınır.\",\"Standart kütüphaneler, belirli işlevlerin daha kolay uygulanmasını sağlar.\",\"Komut satırı argümanları kullanıcı etkileşimini kolaylaştırır ve programın esnekliğini artırır.\"]},{\"title\":\"Ana Çıkarımlar\",\"points\":[\"Algoritmaların verimliliği Big O notasyonu ile ifade edilir, bu da algoritmanın zaman karmaşıklığını analiz etmeye yardımcı olur.\",\"Lineer arama O(n) iken, ikili arama O(log n) zaman karmaşıklığına sahiptir, dolayısıyla daha verimlidir.\",\"Veri sıralama aşaması, arama işleminin ne kadar verimli bir şekilde gerçekleştirileceğini belirler.\"]},{\"title\":\"Ana Çıkarımlar\",\"points\":[\"Kapsüllenen veriler, yapının sağladığı güvenle güncellenebilir ve yönetilebilir.\",\"Dizi yapısının zayıflığını gidermek için yapısal veri türleri (struct) kullanılmalıdır.\",\"Arama ve sıralama algoritmalarının performansı, uygulama mantığını doğrudan etkiler.\"]},{\"title\":\"Kritik Çıkarımlar\",\"points\":[\"Seçim sıralama ve balon sıralama, temel sıralama algoritmaları olarak kabul edilir ancak O(n²) karmaşıklığı nedeniyle büyük veri setlerinde verimli değildir.\",\"Daha büyük birimlerde daha etkili sıralama yöntemlerine ihtiyaç vardır.\",\"Balon sıralama, sıradan durumlarda daha iyi bir performans gösterse de seçim sıralama ile benzer zaman karmaşıklığına sahiptir.\"]},{\"title\":\"Merge Sort Algoritmasının Avantajları\",\"points\":[\"Merge sort, özellikle büyük ve karmaşık veri setlerinde etkilidir.\",\"Zaman karmaşıklığı O(n log n) ile, sıralama işlemlerinde yüksek performans sunar.\",\"Daha fazla bellek kullanmasına rağmen, sıralama hızında önemli bir avantaj sağlar.\"]},{\"title\":\"Kritik Çıkarımlar\",\"points\":[\"Göstergeler, bellekle derinlemesine çalışarak programlarda veri yönetimini kolaylaştırır.\",\"Bu tür kontrol, potansiyel güvenlik açıklarını doğurabilir.\",\"C dilinin karmaşık bellek yönetim özelliklerinin etkili şekilde kullanılması, programcıların önemli yetkinlikler kazanmasını gerektirir.\"]},{\"title\":\"Anahtar Çıkarımlar\",\"points\":[\"Pointer aritmetiği, dizi elemanlarına erişimi basitleştirir ve daha az hata olasılığı sağlar.\",\"Dinamik bellek yönetimi, programların daha esnek bir şekilde çalışmasına olanak tanır.\",\"Bellek hatalarını önlemek için, her malloc işlemi sonrası serbest bırakma işlemi yapılmalıdır.\"]},{\"title\":\"Bellek Yönetimi Önemi\",\"points\":[\"Başlatılmamış değişkenler, yazılım hatalarına ve g"])</script><script>self.__next_f.push([1,"üvenlik açıklarına neden olabilir.\",\"Dinamik bellek yönetimi, programların verimliliğini ve güvenliğini artırır.\",\"Referanslarla değişken geçişi, fonksiyonel programlamada kritik bir beceridir.\"]},{\"title\":\"Sonuç ve Öneriler\",\"points\":[\"Dinamik bellek yönetimi, yazılım geliştirmede esneklik ve performans kazandırır.\",\"Diziler ve bağlantılı listeler gibi veri yapıları, bilgisayar belleğinin verimli kullanımı açısından kritik öneme sahiptir.\",\"Zaman ve bellek maliyetleri, yazılım geliştirme süreçlerinde her zaman göz önünde bulundurulmalıdır.\"]},{\"title\":\"Bağlı Liste Yönetimi İçin Temel Kurallar\",\"points\":[\"Bağlı liste oluşturmak ve yönetmek, dinamik bellek yönetimi anlayışı gerektirir.\",\"Her ekleme ve serbest bırakma işlemi dikkatlice planlanmalıdır.\",\"Bellek sızıntılarından kaçınmak için serbest bırakma süreçlerine dikkat edilmelidir.\"]},{\"title\":\"Temel Çıkarımlar\",\"points\":[\"Dinamik bellek tahsisinin riskleri ve işaretçilerle olan ilişkisi anlaşılmalıdır.\",\"Veri yapılarında sıralama ve bağlantı yönetiminin önemli olduğunu vurgulamak gerekir.\",\"Binary search tree yapısının mantığı ve performansı, düzensiz ağaçların aksine daha verimli arama sunar.\"]},{\"title\":\"Sonuçlar ve Önlemler\",\"points\":[\"Hash tabloları, çarpışma durumlarında veri yapılarını yönetmekte etkilidir ancak uzunca bağlı listeler performansı düşürebilir.\",\"Trie'ler, isimlerin paylaşımını kullanarak hafızayı optimize eder ve her arama işleminin süresini kısaltır.\",\"Veri yapıları tasarımında zaman ve hafıza kullanım dengesi, yazılım başarısı için kritik bir faktördür.\"]},{\"title\":\"Ana Çıkarımlar\",\"points\":[\"Python, okunabilirlik ve yazım hızı açısından avantajlar sağlarken, C dilinin performansı daha yüksektir.\",\"Python'da data yönetimi ve bellek otomasyonu ile geliştirici üzerindeki iş yükü azaltılmaktadır.\",\"Büyük projelerde ihtiyaç duyulan performans için C dilinin seçilmesi daha uygun olabilirken, küçük projelerde Python tercih edilmelidir.\"]},{\"title\":\"Önemli Çıkarımlar\",\"points\":[\"Python'da main fonksiyonu olmadan basit programlar yazmak mümkündür.\",\"String formatlama ve kullanıcı girişi işlemleri oldukça esneklik sağlar.\",\"Hata yönetimi, kod yazımını daha güvenli ve kullanıcı dostu hale getirir.\"]},{\"title\":\"Kritik Tümler\",\"points\":[\"Python'da sonsuz döngülerden yararlanarak kullanıcı girdisini kontrol etmek, etkili bir do while döngüsü taklidi yapar.\",\"Değişkenlerin kapsamını doğru yönetmek, hatalı girdi işlemlerinde büyük önem taşır.\",\"Dinamik listeler ve sözlükler kullanarak veriyi yönetmek, Python'un sunduğu en güçlü özelliklerdendir.\"]},{\"title\":\"Temel Çıkarımlar\",\"points\":[\"Python, veri yönetiminde sözlükler ve CSV dosyaları gibi güçlü araçlar sunar.\",\"Verileri kalıcı hale getirerek kullanıcı etkileşimini artırmak için CSV formatı kullanılmalıdır.\",\"Python ile veri analizi ve görselleştirme, programlama sürecini oldukça kolaylaştırır.\"]},{\"title\":\"Veri Temizleme ve Yönetimi Üzerine\",\"points\":[\"Girdilerdeki boşlukları ve büyük/küçük harf duyarlılığını temizlemek önemlidir.\",\"Veri setlerinde tekrar eden girdileri önlemek için set yapıları tercih edilmelidir.\",\"SQL ile veritabanı yönetimi, büyük veri setleri ile çalışırken performansı artırır.\"]},{\"title\":\"Sonuçlar ve Öğrenilenler\",\"points\":[\"SQL, büyük verileri yönetmek için Python'dan daha hızlı ve etkili yöntemler sunar.\",\"Doğru tablo ve veri yapısı tasarımı, verilerin kullanımını ve sorgulanmasını kolaylaştırır.\",\"Veritabanlarında CRUD işlemlerinin (Create, Read, Update, Delete) etkin kullanımı kritik öneme sahiptir.\"]},{\"title\":\"Performans İyileştirme Stratejileri\",\"points\":[\"SQL veritabanları, büyük veri kümeleriyle başa çıkmak için optimize edilmelidir.\",\"İndeks kullanımı, sorgu sürelerini önemli ölçüde kısaltabilir.\",\"Güvenlik açıklarını kapatmak için güvenli yazıl"])</script><script>self.__next_f.push([1,"ım geliştirme uygulamalarına önem verilmelidir.\"]},{\"title\":\"Kritik Çıkarımlar\",\"points\":[\"Web programlama sürecinde paralel işleme ve iletişim problemleri önemli zorluklar oluşturmaktadır.\",\"TCP/IP protokolü, internet üzerindeki veri aktarımını güvence altına alır ve etkili hale getirir.\",\"HTTP ve HTTPS, modern web uygulamalarında güvenli ve etkili veri iletimi için gereklidir.\"]},{\"title\":\"Final Verdict\",\"points\":[\"HTTP durum kodları, kullanıcıların web içeriği ile etkileşimini anlamalarına yardımcı olur.\",\"Bir web sayfasının temel bileşenlerini öğrenmek, web geliştirme yolculuğunda kritik bir adımdır.\",\"HTML yapısı, bir web sayfasının görsel ve yapısal düzenini belirler.\"]},{\"title\":\"Sonuçlar\",\"points\":[\"HTML ve CSS kombinasyonu, web tasarımında standart bir yaklaşım ve pratik sağlar.\",\"Phishing saldırılarına karşı dikkatli olunmalı, ve kullanıcıların bağlantılara tıklamadan önce kontrol etmeleri gerekmektedir.\",\"Responsive tasarım, mobil kullanıcı deneyimini önemli ölçüde iyileştirir.\"]},{\"title\":\"Önemli Çıkarımlar\",\"points\":[\"CSS ve Bootstrap kullanımı, etkili ve estetik bir ön yüz tasarımı sağlamada büyük kolaylık sunar.\",\"JavaScript, kullanıcı etkileşimleri ile dinamik içerik güncellemeleri yapmak için gereklidir.\",\"Flask gibi framework'ler, Python ile web geliştirmeyi daha yapılandırılmış ve etkili hale getirir.\"]},{\"title\":\"Kritik Noktalar\",\"points\":[\"Flask ile basit bir web uygulaması geliştirmek oturum açma ve veri işleme temellerini öğretir.\",\"GET ve POST metotlarının kullanımı kullanıcı deneyimini ve veri güvenliğini etkiler.\",\"Yapısal tutarlılık sağlamak için şablonlar kullanılarak kod tekrarı azaltılabilir.\"]},{\"title\":\"Kritik Çıkarımlar\",\"points\":[\"GET ve POST taleplerinin doğru kullanımına dikkat edilmelidir.\",\"MVC yapısı, uygulama geliştirmede güçlü bir temel sunar.\",\"Form doğrulama ve hata yönetimi, kullanıcı deneyimini iyileştirir.\"]},{\"title\":\"Sonuç\",\"points\":[\"Flask ile web uygulamaları geliştirirken POST ve GET isteklerini dikkatlice kullanmak önemlidir.\",\"Kullanıcı oturumları ve çerezler, kullanıcı deneyimini geliştirirken güvenliği de sağlamaktadır.\",\"JavaScript ile dinamik içerik sağlamak, modern web uygulamalarında kullanıcı etkileşimini artırır.\"]},{\"title\":\"Anahtar Çıktılar\",\"points\":[\"JavaScript ile hızlı ve dinamik web uygulamaları oluşturmak mümkündür.\",\"JSON formatı, verileri daha kolay işlemek için tercih edilmelidir.\",\"HTML ve CSS, veri sunumunu sağlarken, JavaScript etkileşimleri yönetir.\"]}],\"description\":\"Harvard Üniversitesi'nin en iyi bilgisayar bilimi kurslarından biri olan CS50 ile algoritmik düşünmeyi ve etkili problem çözmeyi öğrenin.\"},\"type\":\"video\",\"uniqueId\":\"RGucjAHNcck\",\"selectedLanguage\":\"tr\"}]\na:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"CS50: Harvard Üniversitesi Bilgisayar Bilimine Giriş - Browsy\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Harvard Üniversitesi'nin en iyi bilgisayar bilimi kurslarından biri olan CS50 ile algoritmik düşünmeyi ve etkili problem çözmeyi öğrenin.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"canonical\",\"href\":\"https://browsy.io/video/cs50-harvard-universitesi-bilgisayar-bilimine-giris%2BRGucjAHNcck/tr\"}],[\"$\",\"meta\",\"3\",{\"property\":\"og:title\",\"content\":\"CS50: Harvard Üniversitesi Bilgisayar Bilimine Giriş\"}],[\"$\",\"meta\",\"4\",{\"property\":\"og:description\",\"content\":\"Harvard Üniversitesi'nin en iyi bilgisayar bilimi kurslarından biri olan CS50 ile algoritmik düşünmeyi ve etkili problem çözmeyi öğrenin.\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:url\",\"content\":\"https://browsy.io/video/cs50-harvard-universitesi-bilgisayar-bilimine-giris%2BRGucjAHNcck/tr\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:image\",\"content\":\"https://browsy.io/og-min.png\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:image:alt\",\"content\":\"CS50: Harvard Üniversitesi Bilgisayar B"])</script><script>self.__next_f.push([1,"ilimine Giriş\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"$\",\"meta\",\"11\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"12\",{\"name\":\"twitter:title\",\"content\":\"CS50: Harvard Üniversitesi Bilgisayar Bilimine Giriş\"}],[\"$\",\"meta\",\"13\",{\"name\":\"twitter:description\",\"content\":\"Harvard Üniversitesi'nin en iyi bilgisayar bilimi kurslarından biri olan CS50 ile algoritmik düşünmeyi ve etkili problem çözmeyi öğrenin.\"}],[\"$\",\"meta\",\"14\",{\"name\":\"twitter:image\",\"content\":\"https://browsy.io/og-min.png\"}],[\"$\",\"meta\",\"15\",{\"name\":\"twitter:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"16\",{\"name\":\"twitter:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"17\",{\"name\":\"twitter:image:alt\",\"content\":\"CS50: Harvard Üniversitesi Bilgisayar Bilimine Giriş\"}],[\"$\",\"link\",\"18\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\",\"type\":\"image/x-icon\",\"sizes\":\"16x16\"}],[\"$\",\"link\",\"19\",{\"rel\":\"icon\",\"href\":\"/icon.svg?b5b20ae56841a3c5\",\"type\":\"image/svg+xml\",\"sizes\":\"any\"}],[\"$\",\"link\",\"20\",{\"rel\":\"apple-touch-icon\",\"href\":\"/apple-icon.png?34d11d31f13f6b34\",\"type\":\"image/png\",\"sizes\":\"180x180\"}]],\"error\":null,\"digest\":\"$undefined\"}\n12:{\"metadata\":\"$a:metadata\",\"error\":null,\"digest\":\"$undefined\"}\n"])</script></body></html><script defer src="https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integrity="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==" data-cf-beacon='{"version":"2024.11.0","token":"b9aae8c0680d4596b9bc9c8e06c94333","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>