Kayıtlar

Ocak, 2019 tarihine ait yayınlar gösteriliyor

Metin Seslendirme Sistemleri İçin Yöntemler

Bisqwit'in Let’s Create a Speech Synthesizer (C++17) with Finnish Accent!  videosunu izledikten sonra Türkçe için metin sentezleyicilerinin son durumuna hızlıca tekrar baktım. Türkçe için Sestek gibi çok başarılı ticari çözümler var. Eminim biraz araştırınca benzer kalitede farklı çözümler de bulunabilir. Şu an bununla ilgilenmediğim için bu görevi geçiyorum. Özgür yazılım olan ve sadece Türkçe için geliştirilen Oku var bildiğim kadarıyla: Turkish_TTS Oku 4.0 Oku'yu Wine ile çok kısa bir süre denedim. Henüz detaylı olarak test etmediğim için seslendirme kalitesi hakkında konuşmayacağım. Programın şu anki en büyük eksikliği, sadece Windows için geliştirilmiş olması. Windows'a özgü kod parçalarının çok platformlu alternatifleriyle değiştirilmesi bu projeye yapılabilecek en büyük katkı olur şu an. Ayrıca Türkçe desteği kazandırılmış özgür konuşma sentezleyiciler de var. Bunların tamamını araştırmak ve listelemek başlı başına bir iş ve başka bir yazının konusu olduğ...

Common Voice

Resim
Common Voice , özgür bir konuşma tanıma veritabanı oluşturmak için Mozilla tarafından başlatılan kitle kaynaklı bir projedir. Proje, örnek cümleleri seslendiren ve diğer kullanıcıların kayıtlarını inceleyen gönüllüler tarafından desteklenmektedir. Seslendirilen cümleler CC0 kamu malı lisanslı bir ses veri tabanında toplanır. Bu, geliştiricilerin veritabanını, sesten metne çeviren uygulamalarda kısıtlamasız ve maliyetsiz olarak kullanabilmelerini sağlar. Common Voice; Amazon Echo, Siri ve Google Asistan gibi büyük şirketlerin dil asistanlarına cevap olarak ortaya çıkmıştır. Common Voice'a ek olarak, Mozilla, Baidu 'nun DeepSpeech mimarisinin bir TensorFlow gerçeklemesi olan konuşma tanıma motoru DeepSpeech 'i de geliştiriyor. DeepSpeech, diğer şeylerin yanı sıra, Common Voice verilerini de kullanıyor ve Amerikan İngilizcesi için insan hata oranı yüzde 5,83 olan LibriSpeech-Clean-Test-Corpus'taki testlerde yüzde 11'lik bir kelime hata oranı (WER) elde ettiği id...

Jupyter ile C++ için Etkileşimli İş Akışları

Resim
Bilim insanları, eğitimciler ve mühendisler, programlama dillerini sadece yazılımlar oluşturmak için değil, aynı zamanda etkileşimli iş akışlarında, bir problemi ve sebeplerini araştırmak için de kullanır. Bazı kod parçalarını çalıştırmak, görselleştirmeye bakmak, veri yüklemek ve daha çok kod çalıştırmak. Hızlı yineleme, özellikle bir projenin araştırma aşamasında önemlidir. Bu tür bir iş akışı için C++ programlama dilinin kullanıcıları kısa bir süre öncesine kadar birbirleriyle uyum içinde, tüm süreci zahmetsiz ve yeniden üretmeyi kolaylaştıran homojen bir araç setine sahip değildi. Bu durum, C++ geliştiricilerinin üretkenliğini zedeliyordu: Yazılım projelerindeki ilerlemelerin çoğu, hedefe yavaş adımlarla ilerleyerek kaydedilir. Hızlı yinelemenin önündeki engeller, ilerlemeyi engeller. Bu aynı zamanda C++'ın öğretilmesini zorlaştırır. Öğrencilerin herhangi bir kod yazmadan önce küçük bir projeyi nasıl kurmaları gerektiğini öğrenmeleri gerektiğinden, C++ derslerinin ilk sa...

Basitleştirilmiş Bir Kural Motoruyla Bildirimsel if İfadeleri

Kod, bir yol gibi görülürse, if ifadeleri araç kullanırken arada sırada karşılaşılan kavşaklar olarak tanımlanabilir. Kavşaklar, gideceğiniz yere ulaşmak istiyorsanız ve daha önemlisi güvenli bir şekilde ulaşmak istiyorsanız, özellikle dikkat etmeniz gereken, yoldaki tehlikeli yerlerdir. Yoldaki kavşaklar gibi, if ifadeleri de gerekli karmaşıklık noktalarını belirtir. Siz de kod satırlarınızın şehir mimarı ve yapımcısı olarak, onları güvenli ve kodunuzun okuyucularının olabildiğince kolay gezinebileceği şekilde tasarlamanız gerekir. Birçok if ifadesi, tıpkı kesişen iki yolun bir trafik ışığıyla yönetilebilmesi gibi belirli bir tasarıma ihtiyaç duymaz. Ancak bazılarının karmaşıklığı, kodun doğru yöne girdiğinden ve okuyucularınızın kaybolmayacağından emin olmak için bir kavşak, hatta bir köprülü kavşak tasarlamanızı gerektirir. Şimdi bu karmaşık if ifadelerine odaklanalım ve bunları basitleştirilmiş bir kural motoruyla kodlayarak bildirimsel bir şekilde ifade edelim. İyi Müşteri...

C++'ta Dosya Boyutu Almak

Resim
C++17'den önce, dosya boyutu almak gibi basit işlerin bile karmaşık olduğundan şikayet edilebilirdi. std::filesystem ile işler biraz daha kolaylaşıyor! C++17'den önce STL, bir dosya sistemiyle çalışmak için hiçbir doğrudan olanak içermiyordu. Yalnızca Boost gibi üçüncü parti kütüphaneler veya işletim sistemlerinin sistem UPA'ları kullanabilirdi. Dosya boyutunu elde etmek için popüler bir teknik bir dosyayı açmak ve ardından dosyanın boyutunu hesaplamak için dosya konum işaretçisini kullanmaktı. stream kütüphanesini kullanan bir örnek şuradan görülebilir. Programla elde ettiğimiz değer, 38100108. Dosya boyutunun Dolphin'de görünüşü de şu şekilde: std::filesystem ile Dosya Boyutu C++17, dosyalar ve dizinler üzerinde birçok görevi düzene sokan std::filesystem'ı sunmaya başlamıştır. Sadece hızlı bir şekilde dosya boyutunu, özniteliklerini elde etmekle kalmaz, aynı zamanda yeni dizinler oluşturabilir, dosyalar arasında ilerleyebilir, yol nesneleriyle çalışabi...

Kate ve Blok Seçim Kipi

Resim
Terminalde GNU nano , grafik ekranda Kate  tercih ettiğim metin düzenleyiciler. GNU nano'yu temel olarak basitliği için sevsem de Kate'i sevmek için önceki yazılarımda da bahsettiğim gibi pek çok sebep sayabilirim: Kate ve Harici Araçlar Kate Sözdizimi Renklendirme Temaları Kate ile Borulama Kate, bugün de hayatımı çok kolaylaştırınca kısa bir övgü yazısıyla geliştiricilerine teşekkürlerimi sunmak istedim. A list of sample Web App Ideas yazısında yer alan uzun bir UPA listesini Markdown biçiminde yazdığım bir belgeye almak istedim. Bunu tek tek yapmak çok zor olacağı için işi olabildiğince pratikleştiren Kate'in blok seçim kipinden yararlandım. Şimdi işlem adımlarından bahsedeceğim ve bunu, çok zor olduğu veya benden başka kimse yapamayacağı için değil, yalnızca, henüz blok seçim kipine sahip olmayan bir metin düzenleyici kullananların neler kaçırdıklarını fark etmelerine yardımcı olmak için yapacağım. Bunu belki terminalden düzenli ifadelerle tek seferd...

Emojilerin Favicon Olarak Kullanımı

Resim
LinuxFr.org 'da yayımlanan Quelques cadriciels Web C++ yazısındaki basit web uygulamasını Cutelyst 'e aktarırken uygulamanın konusuna uygun olarak basitçe bir hayvan emojisi kullanmaya karar verdim. Google arama sonuçlarında karşıma çıkan Favicon.io  ile bir tilki emojisini favicon.ico olarak indirip geleneksel yollarla uygulamama dahil ettim. Bununla birlikte bu yöntemde beni rahatsız eden şeyler vardı. İlk başta Favicon.io gibi bir servis olmasaydı GIMP gibi bir resim işleme yazılımında biraz uğraşmam gerekecekti. Daha önemlisi webe yönelik geliştirme yapmaya yeni başlamış biri olarak devrimci kesilmek istemiyorum ama bu işi yapmanın en iyi yolunun bu olmadığını düşünüyorum. Bu şekilde düşünen tek kişi olmadığımı görünce sevindim. Kristján Oddsson, Twitter'da aşağıdaki gibi dert yanmış : Emojileri favicon olarak kullanabilmek için hangi teknik komiteye teklif sunmam gerekiyor? Sonra da güzel bir çözüme ulaşmış ve bunu günlüğünde benim gibi yenilerin de kolay...

Stemming ve Lemmatization

Metin işlemeyle uğraşırken örneğin basit bir arama yaparken kelimenin ekli halinden daha çok kök haliyle ilgileniriz. Kelime köküne erişmek için genel olarak iki yöntem vardır: stemming ve lemmatization. Her iki işlemin amacı da aynıdır: her kelimeyi eklerinden arındırıp ortak bir temel ya da köke dönüştürmek. Ancak, bu iki yöntem tam olarak aynı değildir. Bu yazıda bu farklılıkları ortaya çıkarmaya çalışacağız. Stemming ve Lemmatization Arasındaki Temel Farklar Hem stemming hem de lemmatization, genellikle veri ön işleme adımlarındandır ve aşina olmanız gereken şeylerdendir. Aralarındaki asıl farksa çalışma şekli ve dolayısıyla her birinin döndürdüğü sonuçtur. Stemming algoritmaları, ekli bir kelimede bulunabilen ortak ön eklerin ve son eklerin bir listesini dikkate alarak kelimenin başlangıcını veya sonunu kesmeye çalışır. Bu ayrım gözetmeksizin kesim, bazı durumlarda başarılı olabilir, ancak her zaman değil, bu yüzden bu yaklaşım bazı sınırlamalar getirir. Aşağıda, yöntem hem...

RISC - CISC

Resim
RISC mimarisinin avantajlarını ve dezavantajlarını incelemenin en basit yolu, öncülü CISC (Complex Instruction Set Computers, Karmaşık Komut Setli Bilgisayar) mimarisiyle karşılaştırmaktır. Görsel, RISC vs CISC videosundan alınmıştır. Bellekteki İki Sayının Çarpılması Aşağıda genel bir bilgisayarın depolama düzenini temsil eden bir şema görülebilir. Ana bellek (satır) 1: (sütun) 1 ila (satır) 6: (sütun) 4 numaralı konumlara bölünmüştür. Tüm hesaplamaları yapmaktansa yürütme birimi sorumludur. Bununla birlikte, yürütme birimi yalnızca altı kaydediciden birine (A, B, C, D, E veya F) yüklenen veriler üzerinde çalışabilir. Diyelim ki biri 2:3 konumunda, diğeri 5:2 konumunda kayıtlı iki sayının çarpımını bulmak ve ardından çarpımı tekrar 2:3 konumunda saklamak istiyoruz. CISC Yaklaşımı CISC mimarisinin temel amacı, bir görevi mümkün olduğu kadar az assembly satırıyla tamamlamaktır. Bu, bir dizi işlemi anlayabilen ve çalıştırabilen işlemci donanımı inşa edilerek başarılır...

Android APK'leri Üzerinde Çeşitli Tersine Mühendislik Uygulamaları

Bazen meraktan, bazen de diğer nedenlerden Android uygulamalarının içine bakmam gerekiyordu ve yer imlerime bu konuda yardımcı olacak çeşitli bağlantılar eklemiştim. Daha sonra bunlara daha az ihtiyaç duyduğumdan bu bağlantıları yer imlerimden kaldırıp bir Google Dökümanlar dosyasına aktardım. Şimdi de bu belgeyi başkalarının da işine yarayabilir düşüncesiyle Google Dökümanlar'dan kaldırıp burada yayımlıyorum. Başkalarının uygulamalarını buradaki gibi araçlarla incelerken yasalara aykırı bir şeyler yapmamanın tamamen sizin sorumluluğunuzda olduğunu lütfen unutmayın. Android APK Dosyalarından UPA Elde Etme Packet Capture veya benzeri bir uygulama kullanılarak ağ çağrıları izlenebilir. APK dosyası açılıp strings.xml'de veya daha az karışık sınıflarda UPA bağlantılarının geçip geçmediği kontrol edilebilir. Bunu doğrudan Android üzerinde yapmak isterseniz Show Java 'yı kullanabilirsiniz. apk_api_key_extractor isimli Python betiğiyle APK dosyalarından UPA anahtarl...