Kotlin nasıl öğrenilir?

NyxFury

Picopat
Katılım
10 Ocak 2025
Mesajlar
66
Merhaba,

Cloudstream’e katkı sağlamak istiyorum ama repo yazmak için Kotlin bilmem gerekiyor.

Daha önce Kotlin’le hiç çalışmadım.
Sizce sıfırdan öğrenmek zor mu?

Hangi kaynaklardan başlamalıyım, dili genel olarak öğrenmek yeterli mi?
Takip ettiğiniz akıcı ve basitçe anlatılan kanallar var mı? Türkçe olursa iyi olur. Knedine özel platformları varsa bu da benim için iyi olur. Yoksa da sorun yok. İyi bir anlatım yapan kanal varsa onu da takibe alabilirim. Yabancı kanal da olabilir. Yeter ki anlatım, sunum gibi şeyleri iyi olsun.

Tecrübelerinizi ve tavsiyelerinizi paylaşırsanız çok sevinirim.
 
Öncelikle ben de yazılımla uğraşan bir öğrenciyim, Projenin GitHub sayfasındaki son güncellenen dosyaları biraz inceledim, temel seviyeden ziyade ortalama seviye ve üstü gerekli diyebilirim. Projede MVVM mimarisi ile çalışmışlar öncelikle MVVM nedir ona bakman lazım. Ekstra olarak katkıda bulunman için OOP bilmen lazım. Kendi sitelerinde temel ve ortalama seviye için dokümantasyon var ancak yeter mi bilmem.

Ha başka diller ile çalıştım, mimariyi de OOP'yi de biliyorum dersen syntaxının da dokümantasyonu sitelerinde mevcut. Hangi kısmına katkı sağlamak istiyorsun onu bilmediğimden son güncellenen dosyaların içeriklerini inceledim, umarım yardımım dokunmuştur.

 
Öncelikle ben de yazılımla uğraşan bir öğrenciyim, Projenin GitHub sayfasındaki son güncellenen dosyaları biraz inceledim, temel seviyeden ziyade ortalama seviye ve üstü gerekli diyebilirim. Projede MVVM mimarisi ile çalışmışlar öncelikle MVVM nedir ona bakman lazım. Ekstra olarak katkıda bulunman için OOP bilmen lazım. Kendi sitelerinde temel ve ortalama seviye için dokümantasyon var ancak yeter mi bilmem.

Ha başka diller ile çalıştım, mimariyi de OOP'yi de biliyorum dersen syntaxının da dokümantasyonu sitelerinde mevcut. Hangi kısmına katkı sağlamak istiyorsun onu bilmediğimden son güncellenen dosyaların içeriklerini inceledim, umarım yardımım dokunmuştur.


Bahsettiğin terminolojilere hakim değilim. Güvendiğim nokta yapay zeka ile destek ala ala belli bir temel oluşturmaktır. Eklentiyi güncelleyenleri gördüğümde bununla yaptıklarını biliyorum.

lGWdMBvb2Y.png

Direkt videoda kendisi söylüyor. Zor işler yapmıyor videoda, gördüğüm kadarıyla. Amaç bu iş gibi güncelleme küçük değişiklikler yapmaktır. Projeye göre yani. Bu anlamda bir önerin olursa çok daha verimli olur. Videoyu size nasıl gösterebilirim. Upload oranım berbat; yüklenmez diye yaptığı işlemeleri de tespit edemiyorum.

Aslında ederim de sesi olsa deşifre eder yine bir yol haritası çıkarırdım. Sadece Türkçe altyazısı var sesi yok. Büyük ihtimal kimse uğraşmasın diye sesli çekmediler. Sizin izlemenizi isterim. Forum kurallarını ihlal etmiş olmazsam iletişim adresi şeklinde discord gibi vs konuyu sizin anlamanızı dilerim. Belki o zaman yaptığı işlemlerin ne olduğunu çıkarabiliriz, ayıklayabiliriz. Sizin için çok basit işlem olduğuna eminim. Daha doğrusu temeli olan herhangi bir yazılım sevdalısı bunun ne yoldan gittiğini bilir. Gerçekten bana nasıl yardımınız dokunur?
 
Hocam şu sıra pek müsait değilim o yüzden buradan yardımcı olmaya çalışayım. Öncelikle attığınız link bir IDE, kodları derlemeye yarayan bir yazılım. Ücretsiz versiyonu ile Kotlin kodlayabilirsiniz. İkincisi attığınız görseldeki terimlerin çoğu da ilk mesajımda söylediğim OOP konusu ile alakalı. Mesela override anahtar sözcüğü ve constructor kullanılmış. Şimdi hiç tecrübeniz olmadığı için bu terimlerden hiçbir şey anlamayacaksınız farkındayım ancak bunun kestirme bir yolu yok. OOP üniversitelerde teorik tarafı ayrı işlenen bir ders ve kredisi de gerçekten yüksek olabiliyor.

Attığınız görselde API'den çağırma methodları falan da kullanılmış ama sanırım buraya girmeyeceksiniz, girecek olsanız işiniz çok daha zorlaşırdı. Size tavsiyem BTK'da 8 saatlik bir kurs var, buranın temelini aldıktan sonra fonksiyonlardan fonksiyonel programlamaya kadar olan bölümünü bitirirseniz bana bahsettiğiniz videodan bakıp benzeterek eminim yazarsınız. Synxtaxı farklı ancak Java kursu da alıp bu terimleri öğrenebilirsiniz, bunu söyleme sebebim Java çok daha yaygın bir dil olduğu için eminim daha çok kurs bulursunuz. Bu terimleri öğrendikten sonra herhangi bir dilde bu terimleri kullanmak için tek ihtiyacınız olan o dilin syntaxını yani söz dizim kurallarını öğrenmek oluyor. Yapay zekadan destek alma fikri de bence gayet yerinde, çalıştığınız projenin çalıştığınız yerlerindeki kodları örnek olarak yapay zekaya tanıtıp kendi yazdıklarınızı o şekilde yeniden formatlamasını isteyebilirsiniz. Eninde sonunda yaptığınız değişiklik GitHub tarafında kontrol edilecek yanlışlarınız varsa da düzeltilip öyle onaylanacaktır.
 
Hocam şu sıra pek müsait değilim o yüzden buradan yardımcı olmaya çalışayım. Öncelikle attığınız link bir IDE, kodları derlemeye yarayan bir yazılım. Ücretsiz versiyonu ile Kotlin kodlayabilirsiniz. İkincisi attığınız görseldeki terimlerin çoğu da ilk mesajımda söylediğim OOP konusu ile alakalı. Mesela override anahtar sözcüğü ve constructor kullanılmış. Şimdi hiç tecrübeniz olmadığı için bu terimlerden hiçbir şey anlamayacaksınız farkındayım ancak bunun kestirme bir yolu yok. OOP üniversitelerde teorik tarafı ayrı işlenen bir ders ve kredisi de gerçekten yüksek olabiliyor.

Attığınız görselde API'den çağırma methodları falan da kullanılmış ama sanırım buraya girmeyeceksiniz, girecek olsanız işiniz çok daha zorlaşırdı. Size tavsiyem BTK'da 8 saatlik bir kurs var, buranın temelini aldıktan sonra fonksiyonlardan fonksiyonel programlamaya kadar olan bölümünü bitirirseniz bana bahsettiğiniz videodan bakıp benzeterek eminim yazarsınız. Synxtaxı farklı ancak Java kursu da alıp bu terimleri öğrenebilirsiniz, bunu söyleme sebebim Java çok daha yaygın bir dil olduğu için eminim daha çok kurs bulursunuz. Bu terimleri öğrendikten sonra herhangi bir dilde bu terimleri kullanmak için tek ihtiyacınız olan o dilin syntaxını yani söz dizim kurallarını öğrenmek oluyor. Yapay zekadan destek alma fikri de bence gayet yerinde, çalıştığınız projenin çalıştığınız yerlerindeki kodları örnek olarak yapay zekaya tanıtıp kendi yazdıklarınızı o şekilde yeniden formatlamasını isteyebilirsiniz. Eninde sonunda yaptığınız değişiklik GitHub tarafında kontrol edilecek yanlışlarınız varsa da düzeltilip öyle onaylanacaktır.
Keşke yapay zeka ile dataset oluşturmak kadar kolay yolları olsaydı.
Değerli öneriler için teşekkür ederim.

Videonun gidişatını sessiz de olsa NLP ile çıkardım:

## Uygulama Adım Adım Rehberi (Step-by-Step Guide)

### 1. Depoyu açıyoruz

- Açılış (Open) → “Repository” veya proje klasörünü aç.


### 2. IntelliJ kullanıyorum

- IntelliJ IDEA IDE içinde çalışıyoruz.


### 3. IntelliJ içinde terminali açıyoruz

- Ctrl + Alt + T veya ekranın alt kısmındaki Terminal sekmesine tıklayıp açıyoruz.


### 4. Yapacağım eklentinin adını giriyorum (Enter the name of the plugin)

- Terminale eklenti adı yazılır: myPluginName


### 5. Varsayılan gelen dosyaların isimlerini değiştiriyorum (Rename default files)

- Dosyaya sağ-tık (Right-click) → Rename (Yeniden Adlandır) seçeneği.


### 6. Dosya adlarını düzenli olarak değiştiriyorum (Use Rename)

- Örneğin DefaultClass.javaMyPluginClass.java


### 7. Yolun sonunda bulunan “/” işaretini siliyorum (/ removal)

- metin içinde mainUrl/ → sondaki / işaretini sil.


### 8. “Türler” (genres) bölümüne gidiyorum (Navigate to “genres” section)

- İlgili dosya veya kod satırına tıklayıp açıyoruz.


### 9. İlgili alanları seçip Ctrl + Backspace ile siliyorum (Delete fields with Ctrl + Backspace)

- Tüm metni seç (Shift + Arrow) → Ctrl + Backspace


### 10. Aynı işlemi diğer alanlarda da tekrarlıyorum

- Gereken tüm yerlerde aynısını uyguluyoruz.


### 11. Fare orta tuşu ile seçim yapıyorum (Select with middle-click)

- Orta fare tuşuna basılı tutarak sürükleyip metni seçiyorum.


### 12. Orta tuş ile seçip “to” yazıyor ve Ctrl + Del ile hizalıyorum

- Seçim sonrası to yazılır → Ctrl + Del ile metni hizala.


### 13. Liste sonlarında virgül olduğundan emin oluyorum (Ensure commas at ends)

- Her satır sonunda , (virgül) var mı kontrol et.


### 14. Sadece mainUrl değişince hepsinin etkilenmemesi için fonksiyonu kopyalıyorum (Copy function to isolate mainUrl)

- İlgili fonksiyonu seç → Ctrl + C → başka yere Ctrl + V.


### 15. Ana URL kısmına bu kopyayı yapıştırıyorum (Paste into main URL section)

- mainUrl alanına Ctrl + V ile yapıştır.


### 16. Diğer sayfaları almak için URL yapısına bakıyorum (Check URL structure for pagination)

- URL örneği: ...?page=1


### 17. ?page= varsa diğer sayfalar için bunu ekliyoruz

- ?page=1?page=$page


### 18. Sayfa sayısı yerine $page yazıyoruz (Use variable $page)

- Değişkenle yapılandır: $mainUrl?page=$page


### 19. Arama kısmında bulduğumuz yapıyı (ör. div.class) tarıyoruz (Search via selector)

- Kodda div.class gibi CSS seçicisini arama/kullanma.


### 20. “Enter” bastıkça içerik değişiyorsa doğru div’dır (Test selector)

- Enter ile test, içerik değişiyorsa seçici div.col olarak doğrulandı.


### 21. Ana sayfa kısmına bu div.col seçiciyi ekliyoruz (Add selector to homepage scraping)

- Kodda homepage element tanımına ekle.


### 22. Başlık için a.list-title kullanıyoruz (Use a.list-title for title)

- Eğer a etiketi içinde class="list-title" varsa, bu seçiciyle başlık çekilir.


### 23. img yoksa biraz ileride arıyoruz (Look beyond for image tags)

- Kodda ilerleyerek img veya data-src attribute kontrolü.


### 24. Verinin data-src içinde geldiğini buluyoruz (Find data in data-src)

- Poster bilgisinin burada olduğunu tespit et.


### 25. Posterleri div.media.cover içinden alıyoruz (Extract poster from div.media.cover)

- Selector: div.media.cover → attribute data-src.


### 26. URL’de “film” varsa tipini film olarak ayarlıyoruz (If URL contains “film”, mark type film)

- Koşul: if (url.contains("film")) type = "film";


### 27–28. if / else ile koşulları ayarlıyoruz (Set if/else logic)

- Kodda mantıkla ayrıştır ve tür belirle.


### 29–31. “search” fonksiyonu hazırlığı (Configure search function)

- search(query) fonksiyonunda query kullanıcı deyimi: "ne arayacak".


### 32. Emülatöre gönderip test ediyorum (Test on emulator)

- Emulator çalıştır → test.


### 33–36. Poster sorunu varsa logla ve düzelt (Log and fix poster issues)

- Log: poster alanı boşsa, log at → incele → düzelt.


### 37–41. load fonksiyonu içinde film sayfasını inceliyoruz (Inspect in load function)

- Detaylı veri çekimi için adım adım doğrula: açıklama, başlık, poster vs.


### 42–45. Diğer alanları kontrol et (Check other fields like rating, duration)

- Sayfa kaynağında yoksa ignore et.


### 46–49. “Önerilenler” ve oyuncuları ekle/sil (Manage recommendations and actors)

- Gerekli olanları ekle, olmayana geç.


### 50–55. Bölümler ve sezonları ayarla (Handle episodes & seasons)

- episodes div içindeki a etiketleri, sezon/bölüm bilgilerini substring veya attribute içinden çıkar.


### 56–60. Bölüm adı ayarlama (Set episode names)

- Boşsa “Bölüm X”, doluysa name kullan.


### 61–67. Test et, düzelt, tekrar test et (Test, fix, retest)

- Her adımda test et → sorun varsa düzelt → tekrar dene.


### 68–72. Anime için benzer süreç (Repeat process for anime)

- Farklı element yapısı varsa benzer mantık uygulanır: title, description, subtitles.


### 73–77. Videoların iframe yolunu bul (Extract video from iframe)

- iframe src çek → log → test.


### 78–87. Video oynatma ve play test (Play video)

- iframe URL’i doğruysa video oynar.


### 88–91. build.gradle ve authors bölümünü düzenle (Update build.gradle & authors)

- Gerekli bağımlılıklar ve yazar açıklamasını ekle.
 

Tek kaynak olarak yeterli. Implemente edilecek seyler icin kullanilacak stdlib API'larini zaten kullandikca arastirip ogrenirsin. Bunun yanisira sundugu OOP ve functional imkanlari, reflection, garbage collection mekanizmasini, concurrency ve pointer mekanigini anlamak yeterli. Sonrasi zaten syntax. Farkli dillerde bu konularda tecrube varsa hizlica ogrenilir.

Cloudstream nedir bilmiyorum ama eger kendi icinde byte code manipulasyonlari, P2P encryption vs yapiyorsa bu konseptler icin stdlib disina cikmak gerebilir, dependency'lerini incelemek gerekiyor.
 
Merhaba,

Cloudstream’e katkı sağlamak istiyorum ama repo yazmak için Kotlin bilmem gerekiyor.

Daha önce Kotlin’le hiç çalışmadım.
Sizce sıfırdan öğrenmek zor mu?

Hangi kaynaklardan başlamalıyım, dili genel olarak öğrenmek yeterli mi?
Takip ettiğiniz akıcı ve basitçe anlatılan kanallar var mı? Türkçe olursa iyi olur. Knedine özel platformları varsa bu da benim için iyi olur. Yoksa da sorun yok. İyi bir anlatım yapan kanal varsa onu da takibe alabilirim. Yabancı kanal da olabilir. Yeter ki anlatım, sunum gibi şeyleri iyi olsun.

Tecrübelerinizi ve tavsiyelerinizi paylaşırsanız çok sevinirim.
Amacın uygulama geliştirmek değilde bahsi geçen uygulamaya plugin yazmaksa api request-parsing gibi şeyleri bilmen yeterli olacaktır. Class, data class'lara bakmanda da fayda var.
 

Technopat Haberler

Yeni konular

Geri
Yukarı