?> Temmuz 2018 - Webmaster sitesi
Tem 312018
 

MariaDB ve MySQL Kardeş Kavgası

MariaDB ve MySQL Kardeş Kavgası

Image credits: unixmen.com

Başlıkta olayı dramatize ettiğime bakmayın! Fakat MariaDB ve MySQL garçekten de kardeşmiş. Her ikisi de aynı babanın (Michael “Monty” Widenius) ürünü.

Öykünün aslını bugün öğrendim. O yüzden, asıl seçimimi ve desteğimi bugüne kadar ertelemiş olduğum için kendimi de ayıpladım.

İzninizle bu hikayeyi size de özetleyeyim:

MariaDB adını ve bu sistemle MySQL veritabanlarının hiç bir değişikliğe gerek kalmadan aynen kullanılabileceğini bir kaç hafta önce öğrendim. Python Turkiye grubunda Python ile Windows ve Ubuntudan aynı veritabanı (MySQL) dosyalarını ortak kullanmaya yönelik bir soru sormuştum. Bir arkadaşım MySQL yerine MariaDB kullanmamı önerdi. MariaDB adını da ilk kez bu vesileyle duymuş oldum.

Yıllardır MySQL kullanıyorum. WordPress ağırlıklı web sitelerimde ve kişisel bilgisayarımda kullandığım veritabanı çoğunlukla MySQL oldu. Bazen de Firebird kullanırım. Diğer popüler ve kamuya açık bir çok veritabanını da denedim ama bana en sıcak ve en kolay bu ikisi geldi.

Bugün MySQL kullanan Delphi 7 ile yazmış olduğum kişisel bir programı, Ubuntu üzerinde de rahatça kullanabilmek için Python ile yeniden yazmaya karar verdim. Daha doğrusu bu kararı çok önceden vermiştim ama, bir türlü uygulamaya geçememiştim.

Önce Python’da MySQL için hangi paketleri kullanmam gerektiğini araştırmaya başladım. İşte bu araştırmaya MariaDB konusunu da dahil ettim. Ve oldukça ilginç bir öyküyle karşılaştım. Öykünün ana başlıkları şöyle:

  • Monty’nin ekibi mSQL çalışmalarına başlıyor.
  • 1995 yılında Monty’nin kızı My’ın adını çalışmaların adına ekleyerek MySQL olarak duyuruyorlar.
  • MySQL çift lisansa sahip (biri GPL).
  • Yazılımı geliştiren TcX firması adını MySQL AB olarak değiştiriyor. Yazılımı geliştirenler bu firmanın birer çalışanı oluyor.
  • 2005’te Oracle, InnoDB tablo tipini geliştiren Innobase firmasını satın alıyor.
  • 2006’da Oracle, Berkeley DB tablo yapısını geliştiren Sleepy Cat firmasını satın alıyor.
  • 2008’de Sun, MySQL AB’yi satın alıp, açık destekli geliştirme yapısını değiştiriyor.
  • 2010’da Oracle, Sun ve dolayısıyla MySQL’i satın alıyor ve geliştirme yapısını daha da değiştiriyor. (Ticari destek ücretlerine de % 600 zam yapıyor.)
  • Bu gelişmeler üzerine Monty, MySQL kodunu çatallayarak yeni bir veritabanı sisteminin çalışmalarına başlıyor. Bu çalışmaya ikinci kızının adını veriyor: MariaDB.
  • MariaDB, MySQL modelinde kullanılan aynı komut, arayüz, kitaplık ve API’leri kullanıyor.
  • MariaDB giderek popülerlik kazanmaya başlıyor.

Öykü bu. Oracle’ın dünya çapında kendi veritabanı tekelini kurma stratejisini çok açık bir şekilde göz önüne seriyor. (Öykünün ayrıntılarına referanslardaki linkten ulaşabilirsiniz.)

Tek bu neden bile MariaDB’ye geçmek için benim açımdan yeterli.

Peki Oracle, ileride MariaDB yeterince popüler olduğunda onu da satın almaz mı?

Olabilir elbette! Ama hayat devam ediyor. Belki Monty’nin üçüncü bir kızı olmayabilir ama, ekibindeki birilerinin de kızları vardır mutlaka!..

Açık kaynak çalışmalarını engelleme girişimleri her zaman olacak, ama o da her seferinde yepyeni isimler altında yeniden filizlenip gelişecek bir başka ortam bulacaktır.

Ahmet Aksoy

Referanslar:

  tarafından 6:53 pm itibariyle gönderildi.
Tem 312018
 

Pythonda Fonksiyon Dekoratörleri

En kaba tanımıyla dekoratörler, yazılım tasarım kalıplarıdır.

Dekoratörler fonksiyon, metod ve sınıfların işlevselliğinin, dekore edilen fonksiyonun veya alt sınıfların kaynak kodlarında değişiklik yapmaya gerek kalmadan değiştirilebilmesini sağlarlar.

Pythonda Fonksiyon Dekoratörleri

Özetle dekoratörler, yapısını değiştirmek istemediğimiz fonksiyonların davranışlarını; yani işlevlerini değiştirmek amacıyla kullanılır.

Dekoratörler, fonksiyonların hem parametre, hem de dönüş değeri olarak kullanılabilme özelliğine dayanır.

“@” işareti dekoratör tanım operatörü olarak kullanılır. (Aynı işaret matris çarpım operatörü olarak da kullanılmaktadır.)

Şimdi dekoratör uygulamasını örnekleyecek küçük bir örnek geliştirelim.
Eğer Türkçe karakterlerin kullanımı konusunda benim gibi titiz biriyseniz, string.lower() fonksiyonu uygulanmış Türkçe karakterlerden ‘I’ harfinin ‘ı’ yerine ‘i’ olarak geri döndüğünü farketmişsinizdir.

Bu hatayı gidermek için tr_lower_dekorator isimli bir fonksiyon hazırlayalım. Bu dekoratör fonksiyonumuz parametre olarak func isimli bir başka fonksiyon alıyor. Bu fonksiyonun aldığı parametre ise x stringi.

Dekoratör fonksiyonumuzun içinde fonksiyon(x) isimli ara fonksiyonumuz mevcut. Bu fonksiyon, önce, parametre olarak aldığı x stringindeki ‘I’ karakterlerini ‘ı’ harfine dönüştürüyor, sonra da orijinal fonksiyonu çağırarak ‘I’ harfleri düzeltilmiş stringe lower() fonksiyonunu uyguluyor.

Kodlar aşağıda. Sormak istediğiniz bir şey olursa, en aşağıdaki yorum alanını kullanabilirsiniz.

Betiğimizin döndürdüğü bilgiler şöyledir:

İlk satırda orijinal string, ikinci satırda string.lower() fonksiyonu kullanılarak elde edilmiş string, son satırda ise string.lower() fonksiyonuna dekoratör uygulanmış haliyle üretilmiş string yer almaktadır.

turkce_lower02() fonksiyonunu kolayca düzenleyip doğru sonuç üretmesini sağlayabilirdik. Örneğimizin anlaşılabilir olması için böyle basit bir fonksiyon kullandım. Bu fonksiyon yerine çok daha karmaşık bir fonksiyon olsaydı, dekoratörün etkisi daha açık bir şekilde ortaya çıkacaktı.

Dekoratörler bottle, flask ve django gibi ağ çerçevelerinde (web application framework) sıklıkla kullanılmaktadır.

Ahmet Aksoy

Referanslar:

  tarafından 6:12 pm itibariyle gönderildi.
Tem 312018
 

Python Zemberek Bağlantısını Güncelleyelim

Python Zemberek Bağlantısı2016 Mayısında yazdığım Python ile Zemberek Kütüphanesini Kullanmak makalesini artık güncellemenin zamanı geldi.

Aslında güncellenecek pek fazla şey yok.
Çünkü: zemberek-tum-2.0.jar kütüphane dosyası yine aynı.
JPype1-py3 bileşeninin sürüm numarası değişmedi: 0.5.5.2.
Sadece benim şimdiki Ubuntu sürümüm 16.04 ve Python sürümüm ise 3.6.3.

Önceki yazımda verdiğim kodlar bire bir geçerli.

Yine de kodları son haliyle anımsamakta yarar var:

Önceki yazımda zemberek-tum-2.0.jar dosyasının içindeki (veya herhangi bir jar dosyasının içindeki) sınıfların listesini nasıl elde ettiğimi belirtmemişim.
Aşağıdaki komut, bu listeyi elde etmemizi sağlıyor:

jar dosyasının adını değiştirerek istediğiniz sınıf listesini dökebilirsiniz.

Bu arada sevindirici bir başka haber: Zemberek projesi yeni bir yapılanmayla tekrar gündemde: Zemberek-NLP
Akın kardeşler Zemberek projesini eskisinden bağımsız bir şekilde yeniden geliştiriyorlar.
Sonucu ben de merakla bekliyorum.

Ahmet Aksoy

  tarafından 6:08 pm itibariyle gönderildi.