Ana Sayfa Blog

Ubuntu + Icecast ile Radyo Server Kurulumu

0

Ubuntu yüklü sisteminiz üzerinde bir internet radyosu kurmak ve yönetmek ister misiniz? Shoutcast’e alternatif olarak Icecast oldukça popüler ve kullanılan bir yazılım. Bu yazılımın ubuntu üzerinde kurulum adımları aşağıdaki gibidir.

Kurulum

SSH ile sunucunuza bağlantı sağladıktan sonra, aşağıdaki adımları izlemelisiniz.

sudo apt-get update

APT paket listesini güncelledik. Sonrasında Icecast paketini yüklüyoruz.

sudo apt-get install icecast2

Paket yüklemesi tamamlandığında size konfüngrasyona başlamak isteyip istemediğinizi soracaktır. “Yes” seçerek devam edin.

Hostname ip:8000 veya domain.com:8000 şeklinde girilmelidir. 3 ayrı şifre girmeniz istenecektir. Bunlardan en önemlisi Administration ve source şifresidir. Source yayın yapacağınız durumlarda programlara veya yayın kaynağına girmeniz gereken bilgilerdir.

Kullanıcı adı: source
Şifre: ……

Yapılan konfügrasyonları daha sonra değiştirmek isterseniz /etc/icecast2/icecast.xml dosyası üzerinden işlem yapabilirsiniz.

Önemli: Kurulum adımları tamamlandığında ve konfügrasyon değişikliklerinde Icecast yeniden başlatılmalıdır.

Icecast başlatmak için:

sudo systemctl start icecast2

Icecast yeniden başlatmak için:

sudo systemctl restart icecast2

Icecast durdurmak için:

sudo systemctl stop icecast2

Yönetim Paneli

ipadresi:8000 veya domain:8000 üzerinden yönetim paneline erişebilirsiniz. Yayınları kontrol edebilirsiniz. Aynı sunucu üzerinden birçok yayın başlatabilirsiniz.

Şimdi source kullanıcınız ve ip adresiniz ile yayın yapmaya başlayabilirsiniz. Yayına başladığınızda paneldeki “Mountpoint List” sekmesi üzerinden yayınlarınıza ait bilgilere ulaşabilirsiniz.

SwiftUI: Json Veri Çekme, Parse Etme ve List İçerisinde Gösterme

0

Selam dostlar, Apple tarafından 15 Ekim tarihinde yayınlanan istatistiklere göre IOS 13 kullanımı tüm Apple cihazların %50’sinden fazlasında kullanılmaya başlandı bile.

Dolayısıyla geçtiğimiz aylarda yüzünü gösteren SwiftUI için çalışmalarımızı hızlandırma zamanı. Boş kaldıkça ufak tefek denemeler, kurcalamalar yaptığım SwiftUI ile ilgili örnekleri de elimden geldiğince burada paylaşmaya çalışacağım.

Şimdi gelelim SwiftUI ile uzak siteden json veri çekme ve parse etme olayına.

SwiftUI Fetch Remote Json And Parse

Öncelikle data modelimiz için struct oluşturalım.

import Foundation
struct Movie: Decodable, Identifiable {

    public var id: Int
    public var name: String
    public var released: String

    enum CodingKeys: String, CodingKey {
       case id = "id"
       case name = "title"
       case released = "year"
    }
}

Sonrasında JSON verimizi çekelim ve modelimize göre parse edelim.

import Foundation
public class MovieFetcher: ObservableObject {

    @Published var movies = [Movie]()

    init(){
        // load()
    }

    func load() {
        let url = URL(string: "https://gist.githubusercontent.com/rbreve/60eb5f6fe49d5f019d0c39d71cb8388d/raw/f6bc27e3e637257e2f75c278520709dd20b1e089/movies.json")!

        URLSession.shared.dataTask(with: url) {(data,response,error) in
            do {
                if let d = data {
                    let decodedLists = try JSONDecoder().decode([Movie].self, from: d)
                    DispatchQueue.main.async {
                        self.movies = decodedLists
                    }
                }else {
                    print("No Data")
                }
            } catch {
                print ("Error")
            }

        }.resume()

    }
}

Ve son aşama, verilerimizi listeleyelim.

import SwiftUI

struct ContentView: View {

    @ObservedObject var fetcher = MovieFetcher()

    var body: some View {
        VStack {

            Button(action: {
                self.fetcher.movies = []
                self.fetcher.load()
            }) {
                Text("Getir")
            }.padding()

            List(fetcher.movies) { movie in
                VStack (alignment: .leading) {
                    Text(movie.name)
                    Text(movie.released)
                        .font(.system(size: 11))
                        .foregroundColor(Color.gray)
                }
            }

        }
    }
}

Bu içerik https://medium.com/@rbreve kullanıcısından alınarak çalıştığı test edilmiş ve Türkçe olarak yayınlanmıştır.

SwiftUI: Dizi Oluşturma ve Eleman Ekleme (Append Item to Array)

0

SwiftUI ile çalışırken değişebilecek veriler için @State kullanılması gerekmektedir. Herhangi bir değişkenin başına @State eklemesi yaptığınızda, kullanıcı aksiyonları, fonksiyonlar vs. ile bu veri üzerinde değişiklik yapılabilmektedir. Örneğin bir bileşenin görünüp kaybolması veya renkler, bu herşey olabilir.

Detaylı bilgi için developer.apple.com adresine göz atabilirsiniz.

import Foundation
import SwiftUI

struct ToDoListModel: Identifiable {
    let id = UUID()
    let name: String
}

Yukarıdaki gibi bir ToDoList Modeli oluşturduğumuzu farz edelim. Bu model ile bir array oluşturalım.

@State var tasks = [ToDoListModel]()

@State var ile oluşturduğumuz tasks dizisi ToDoListModel tipinde. Ve içi boş. Eleman eklemek için aşağıdaki yöntemi kullanabiliriz.

self.tasks.append(ToDoListModel(name: "Arabayı yıka!"))

Bu şekilde belirli modellerde oluşturduğumuz dizilere veri eklemesi yapılabilmektedir.

AMP Sayfanıza Google Analytics Yerleştirme Kodu

2

AMP ile hazırladığınız sayfalarınızda Google Analytics hizmetini kullanabilmeniz için <amp-analytics> bileşenini kullanmanız gerekmektedir.

Google AMP hakkında bilgi edinmek için Google tarafından hazırlanan Türkçe dökümanlara buradan gözatabilirsiniz. Ayrıca dilerseniz amp-analytics bileşen sayfasına da bakabilirsiniz.

IOS Mobil Programlama İçin Hangi Eğitim Seti Alınmalıdır ?

0

Merhaba arkadaşlar, sizlerle bu blog üzerinden swift ve swiftui ile ilgili öğrendiklerimi, öğrenmeye çalışırken aldığım notları vs. paylaşmaya çalışıyorum. Peki nereden öğreniyorum ? Veya siz öğrenmek için eğitim seti satın almayı düşünürseniz nereden almalısınız ?

Mobil programlamaya yeni giriş yapmış bir full stack web developer olarak çok fazla şey öğrendiğimi, ve masaüstü ve web yazılımdan çok farklı ve yeni teknolojiler olduğunu söylemek isterim. Son 15 yılını yazılımla geçiren birisi olarak, gerek Swift ve SwiftUI, gerek React-Native ile çok farklı yapılarla çalışma fırsatı yakaladım. Yazılımın neresinde olursanız olun, hatta yazılımla uzaktan yakından bir alakanız olmasa bile mobil programlamaya bir şekilde sarılmanızı öneririm.

Bu artık frontend veya backend web, veya masaüstü programlama ile para kazanamayacağınız anlamına gelmiyor fakat..

Web Sitesi Yapan Kuzenler

Türedi! Her taraf web sitesi yapabildiğini zanneden insanlarla doldu. WordPress kurmayı bilen kendini yazılımcı, web tasarımcı vs. vs. diye servis ediyor. “Güncel ve özgün içerik yazarız ilk sırada çıkar” gibi düşüncelere ve 10 yıl öncesinin stratejilerine sahip seocular falan. Burayı kısa keseceğim. Sonra güncellerim.

Hangi Eğitim Setini Almalıyım ?

Amaç mobil programlama öğrenmek ise, ve iyi bir araştırma sonucu Swift, SwiftUI, Android veya her iki platform için de React-Native öğrenmeyi kafaya koyduysanız size bazı eğitim setleri önereceğim.

Swift ve SwiftUI için Atil Samancıoğlu eğitim setleri, React-Native için Mehmet Seven eğitim setlerini tercih edebilirsiniz.

O kadar boş laf bunun içindi. Udemy hesabımda mobil programlama ile ilgili yerli ve yabancı onlarca set olmasına rağmen, sizlerle bu yazıyı ve bu eğitmenleri özellikle paylaşmak istedim.

Swift veya SwiftUI mı React Native mi ?

React-native çalışırken SwiftUI suratıma tokat gibi çarpınca, hiç düşünmedim. Belkide hata yaptım. Bilmiyorum. Ama sırtımı facebook’a mı yaslarım, Apple’a mı derseniz aynı şekilde hiç düşünmeden Apple derim.

React-native çok güzel bir dil, güzel bi yapı. Javascript ile ilgileniyorsanız elbette ki öğrenmeniz, kullanmanız gereken bir yapı. Zaten javascript ile muhattapsanız bu soruya cevap bile aramayacağınıza eminim. Çatır çatır react-native yazmaya başlamış olmanız gerekiyor.

SwiftUI : Firebase Auth ve Firestorm Database Kullanımı

0

Firebase Google tarafından uygulamalarımızda ve websitelerimizde kullanabilmemize olanak sağlayan bulut tabanlı bir veritabanı çözümüdür. Bu yazımda Google firebase ve firestorm ile ilgili notlarımı sizlerle paylaşacağım. Bu kuruluma başlamadan önce sisteminizde cocoapods kurulu olduğundan emin olun.

Kurulum Adımları: Firebase‘de Proje Oluşturun

Projenizi oluşturduktan sonra Firebase sizi oldukça basit bir kurulum adımları sayfasına yönlendirecek.  Uygulama ile ilgili bundleID ve diğer bilgileri girin ve 2.adımda size verilen .plist uzantılı dosyayı indirip projenize dahil edin.

Not : Dosya isminin GoogleService-Infso.plist olarak eklendiğinden emin olun.

Kurulum Adımları: Pod Dosyasında İşlemler

Terminalden projenizin xcodeproj dosyasının olduğu dizine erişin ve pod dosyanızı aşağıdaki komut ile oluşturun.

pod init

daha sonra pod dosyanızı herhangi bir text düzenleyici ile açın ve aşağıdaki satırları use_frameworks! altına ekleyin.

pod 'Firebase/Core'  
pod 'Firebase/Firestore'
pod 'Firebase/Analytics'
pod 'Firebase/Auth'

Auth ve Analytics zorunlu değil. Auth firebase üzerinde E-Mail ile kullanıcı kaydı özelliği etkinleştirildiğinde gerekmektedir.

sonraki adım ise pod dosyasına işlediğimiz Firebase Core ve Database yüklenmesi. Terminalde aşağıdaki komutu yazarak devam edin.

pod install

Pod kurulumları böylelikle tamamlanmış oluyor.

Kurulum Adımları: AppDelegate İşlemleri

Son olarak AppDelegate.swift dosyasında bazı düzenlemeler yapmamız gerekiyor. Bunun için öncelikle AppDelegate.swift dosyasını açtıktan sonra Firebase import edilmelidir. ( Not: Firebase kullanacağımız her yerde import ediyoruz elbette )

import Firebase

Daha sonra aynı dosya içerisinde didFinishLaunchingWithOptions fonksiyonunun içinde return true satırından hemen önce aşağıdaki satırı ekleyin.

FirebaseApp.configure()

Ve Firebase artık projemize dahil oldu. Şimdi firebase ve firestorm ile veritabanı işlemlerine geçebiliriz.

Auth ile Üye Kaydı Oluşturma

Öncelikle Authentication bölümünden oturum açma metodu e-posta ve şifre olarak ayarlanmalıdır.

Auth.auth().createUser(withEmail: "[email protected]", password: "123123") { (data, err) in
   if err != nil {
      print(err!.localizedDescription) // Hata açıklaması.
   }else if data != nil {
      print(data!.user.uid) // Kullanıcı oluşturuldu. 
   }
}

Auth İle Üye Girişi Sağlama

Auth.auth().signIn(withEmail: "[email protected]", password: "123123") { (data, err) in
   if err != nil {
      self.errMessage = err!.localizedDescription // Hata Açıklaması..
   }else if data != nil {
      // Bilgiler doğrulandı.
   }
}

Oturumdaki Kullanıcının ID Bilgisi

Auth.auth().currentUser!.uid

Oturumun Kapatılması

Auth.auth().signOut()

Veritabanına Kayıt Eklemek

Database menüsünden Firestore sunucusu seçildikten sonra aşağıdaki şekilde veritabanına ekleme yapabilirsiniz.

let kisi : [String : Any] = ["name": "mehmet", "surname": "vatanlar"]
let db = Firestore.firestore()

let insert : DocumentReference = db.collection("Users").addDocument(data: kisi, completion: { (err) in
   if error == nil {
      self.resultMessage = err!.localizedDescription
   }else{
      self.errMessage = "hata oluştu"
   }
})

Veritabanından Kayıt Getirme (Filtresiz)

Bu aşamada yeni bir gelen verinin yapısını belirleyen struct bir de verileri çekeceğimiz class oluşturmamız gerekiyor.

Struct Dosyamızın İçeriği ( Alacağımız Veri Yapısı )

import SwiftUI

struct DataModel : Identifiable {
    var id: Int
    var name: String
    var uid: String
}

Class Dosyamızın İçeriği

import SwiftUI
import Firebase
import Combine

class UserStore : ObservableObject {
    let db = Firestore.firestore()
    var userArray : [DataModel] = []
    var objectWillChange = PassthroughSubject<Array<Any>, Never>()

    init(){
        db.collection("Users").addSnapshotListener { (snapshot, err) in

            if err != nil {
                print(err!.localizedDescription)
            }else{
                self.userArray.removeAll(keepingCapacity: false)
                for document in snapshot!.documents {

                    if let name = document.get("name") as? String{

                        if let surname = document.get("surname") as? String{

                            let user = DataModel(name: name, surname: surname)
                            self.userArray.append(user)

                        }
                    }
                }

                self.objectWillChange.send(self.userArray)

            }
        }
    }
}

Sonrasında @ObjectBinding ile gelen değişiklikleri yakalayabilmemiz mümkün oluyor.  View içerisinde aşağıdaki şekilde değişkeni tanımlıyoruz.

@ObjectBinding var gelenArray = DataStore()

Daha sonra View içerisinde aşağıdaki gibi gelen veriyi listeleyebiliriz.

VStack{

   List(guncelArray.userArray){ user in

      Text(user.name)

   }

}

Kayıt Filtreleme (whereField)

Kayıt filtreleme yaparken kayıt listelemede yapılan aynı işlemler yapılıyor. Tek fark whereField ekleniyor ve belli alanların belli alanlara eşitliği veya diğer koşulları kontrol edilebiliyor. whereField yazdıtan sonra çıkan sonuçlarda koşulları inceleyebilirsiniz.

db.collection("Users").whereField("surname", isEqualTo: "vatanlar").addSnapshotListener{...

Birden fazla whereField kullanabilirsiniz. Fakat burada yada (OR) sorgusu yapmayı henüz keşfedemedim. Ve (AND) sorgusu olarak kabul görüyor. Aşağıdaki gibi birden fazla koşulu filtrelemenizde kullanabilirsiniz. OR sorgusunu kullanabilmek için zannedersem 2 ayrı sorgu yapıp sonuçları elle filtrelemeniz gerekiyor.

db.collection("Chats")
   .whereField("surname", isEqualTo: "vatanlar")
   .whereField("name", isEqualTo: "mehmet")
   .addSnapshotListener {...

Bu bilgiler henüz Beta sürümlerde olduğumuz için değişkenlik gösterebilir. Ki bu notları ben 1 kez güncelledim bile. Yine değişiklikler olursa güncelleme yapmaya çalışacağım.

SwiftUI : Model Oluşturma ve Dizi İçinde Dizi Listeleme

0

Model oluşturmak için MyModel.swift isimli bir dosya oluşturduk ve içinde MyModel isminde bir struct tanımladık. Daha sonra aynı modeli kullanarak 2 adet MyModel tipinde tanımlama yaptık. Jenna ve Tarkan’ı modeller sanatcilar dizisine tanımlayarak View’ımızda listeleme için kullandık.

struct MyModel : Identifiable {
    var id = UUID()
    var name : String
    var surname : String
    var friends : [String]
}

let jenna = MyModel(name: "Jenna", surname: "Paul", friends: ["Asiye","Emine"])
let tarkan = MyModel(name: "Tarkan", surname: "Tevetoğlu", friends: ["İsmail","Hülya"])

let sanatcilar = [jenna,tarkan]

Listeleme İşlemi


struct ContentView: View {
    var body: some View {
        List(sanatcilar){ sanatci in
            Text(sanatci.name)
        }
    }
}

Modeller oluşturulduktan sonra proje içerisinde istenilen yerde çağrılabilmekte ve kullanılabilmektedir. Şimdi de sanatçının arkadaşlarını listeleyelim.

Dizi İçinde Dizi Listeleme

List{
     ForEach(sanatcilar){ sanatci in
         Section(header: Text(sanatci.name)) {
             ForEach(sanatci.friends, id: \.self){ arkadas in
                  Text(arkadas)
             }
         }
    }
}

Böylelikle içinde dizi barındıran diziler ile nasıl listeleme yapılacağını da öğrenmiş olduk.

 

SwiftUI : NavigationView, NavigationLink ve Sheet İle Sayfalar Arası Geçiş

0

NavigationLink Oluşturmak için bir NavigationView nesnesinin içinde olmamız gerekmektedir. Aşağıdaki kod yardımı ile bir View’dan diğer View’a geçiş sağlayabilirsiniz.

NavigationView{
    NavigationLink(destination: NavigationSecondView() ) {
        Text("Navigation Link")
    }
}

Sheet İle Popup Açtırma

Button(action: {
     self.shown.toggle()
}){
     Text("Tık")
}.sheet(isPresented: self.$shown) { () -> ArtistDetail in
     ArtistDetail()
}

Navigation ile ilgili notlar çok yakında güncellenecektir.

IOS 13 : Memojiler Klavyeden Nasıl Kaldırılır ?

0

IOS 13 güncellemesi ile birlikte gelen, emoji klavyesi içerisindeki memojiler biraz sinir bozucu şekilde konumlandırılmış. Memojilerden kurtulmanın yolu oldukça basit.

Bunun için mesajlara girip, herhangi bir mesajın içine girmeniz gerekiyor. Sonrasında en alttaki uygulamaların olduğu bar üzerinden en sağa gidip seçenekler butonuna tıklayın. Bu ekranda Memoji’leri favorilerden kaldırarak ve pasif konuma getirerek memojilerden kurtulabilirsiniz.

Memojilerle ilgili özelleştirmeleri güncelleme tamamlandıktan sonra yapabilmektesiniz.

Dilerseniz bu ekran üzerinden memojileri kullanmak istemediğinizi belirtebilir, memoji oluşturmadan bu ekrandan ayrılabilirsiniz.

Memojilerden Kurtulun

  1. SMS Mesajlara girin.
  2. Herhangi bir mesaja dokunun.
  3. En alttaki barı en sağa kaydırın.
  4. Seçeneklere dokunun.
  5. Düzenle butonuna dokunun.
  6. Memojileri pasifleştirin.
  7. Favorilerden kaldırın.

İşte bu kadar!

 

SwiftUI List Bileşeni (Listeleme İçin TableView Alternatifi)

0

Daha önce sizlerle Swift için TableView notlarımı paylaşmıştım. Artık SwiftUI bize göz kırpmışken bir yandan da kenardan kenardan SwiftUI’a yanaşayım dedim. SwiftUI ile ilgili List bileşeninden başlayarak öğrendikçe notlarımı sizlerle paylaşacağım.

List{
   // Listenecek Bileşenler
}

En basit hali ile yukarıdaki gibi tanıyabilirsiniz List bileşenini. Bir çok farklı kullanımı mevcut elbette. Tabiki içerisinde bazı View’lar olması gerekiyor. Örneğin text bileşeni ile kullanalım.

List {
    Text("deneme1")
    Text("deneme2")
    Text("deneme3")
    Text("deneme4")
    Text("deneme5")
}

Yukarıdaki kod bize görseldeki gibi bir görüntüyü çıkaracaktır. Sadece görseldeki gibi Text() bileşeni ile değil, farklı bileşenleri de barındırabiliyor List() bileşeni. Aşağıda bir kaç örnek daha paylaşacağım.

Farklı Bileşenlerin List İçerisinde Kullanımı

Bir başka yazıda ZStack, HStack ve VStack kullanımlarından bahsedeceğim. Aslında ilk bahsetmem gereken konu buydu. Fakat hızlı öğrenilecek konular olduğu için örneklerin içinde görebilirsiniz kullanımlarını. Ben şimdilik öncelik verme gereği duymadım.

List {

     HStack{
          Image("avatar").resizable()
          .frame(width: 25, height: 25, alignment: .center)
          Text("Deneme 2")
     }

     HStack{
          Image("avatar").resizable()
          .frame(width: 25, height: 25, alignment: .center)
          Text("Deneme 2")
     }

}

Yukarıdaki örnekte gördüğünüz gibi HStack bileşenlerin yanyana gelmesini sağlıyor. Yatay bir düzlem oluşturuyor. Örnekte Image() kullanımı da yukarıda gördüğünüz gibi.

Dilediğiniz gibi SwiftUI içerisinde kullanılabilen bir çok bileşeni List içerisinde kullanabilirsiniz.

List İçerisinde Array Listeleme

List hepimiz için 🙂 ForEach döngüsü ile aynı şekilde, aşağıdaki gibi kullanımı da mevcuttur. 3 Elemandan oluşan bir arkadaşlar dizisi tanımlayalım.

var arkadaslar = ["Fatma","Emine","Deniz"]

Sonrasında List içerisinde arkadaşlarımızı az önceki kodu güncelleyerek listeleyelim.

List(arkadaslar, id: \.self) { arkadas in
    HStack{
        Image("avatar").resizable()
        .frame(width: 25, height: 25, alignment: .center)
        Text(arkadas)
    }
}

Bu örnekte de text alanları arkadaş isimleri ile değişmektedir.