Yazar: vlyalcin

  • KKTC Ehliyetini Türkiye Cumhuriyeti Ehliyetine Çevirme

    KKTC Ehliyeti

    Sizlere Kuzey Kıbrıs Türk Cumhuriyeti ehliyetimi Türkiye Cumhuriyeti ehliyetine çevirme işlemlerindeki tecrübelerimi aktaracağım. Geniş kapsamlı bir yazıdan ziyade sadece kendi tecrübemi paylaşacağım.

    Konunun yakın tarihçesine gidersek, 2016 yılında KKTC yasalarında ehliyet alma konusundaki tüzük sebebiyle KKTC ehliyetlerinin TC ehliyetlerine çevrilmesi askıya alınmıştı.[1,2]

    Akabinde ben ve benim gibi sadece KKTC ehliyetine sahip olup, Türkiye Cumhuriyeti’nde yaşayan vatandaşlar ehliyetlerini yalnızca ülkeye giriş yaptığı tarihten 6 ay süresince kullanabiliyorlardı.

    Nihayetinde 2019 yılında [3, 4] KKTC ile TC arasında sürücü belgelerinin ve sürüş ehliyetlerinin karşılıklı tanınması ve değişimi anlaşması imzalandı. Bu sayede çevirme işlemlerinin önü açıldı.

    Bu tarihten sonra, çevirme işlemler için yapılması gereken işlemler şöyle:

    İlçe nüfus müdürlüğünden ehliyet için sıra alıyorsunuz. İlk aşama olarak ehliyetin renkli fotokopisiyle gidip talepte bulunuyorsunuz. Onlar KKTC ile yazışıp, yazışma sonunda size SMS ile bildiriminde bulunuyorlar. SMS bildiriminden sonra tekrar sıra alıp gerekli tüm evrakları teslim ediyorsunuz.

    KKTC İstanbul başkonsolosluğu sayfasında [5] ehliyet çevirme için gerekli tüm evraklar yer alıyor. Ben madde madde deneyimimi paylaşayım istiyorum:

    Sürücü sağlık raporu

    Aile hekiminden ücretsiz şekilde 5 dakika içerisinde aldım. Gözle görülür sağlık sorununuz yoksa ve göz testinden de geçiyorsanız hızlıca alabiliyorsunuz. Aile hekiminiz şüpheli bir durum tespit ederse hastaneye sevk edebilir, uzman doktor raporu isteyebilirler.

    Sağlık raporunun çıktısına gerek yok. Ehliyet çevirme anında nüfus müdürlüğünde sistemde otomatik olarak gözüküyor.

    Mezun belgesi (yurtdışından alınan mezun belgelerinin noter tasdikli tercümesi)

    Türkiye Cumhuriyeti dışından mezun olduğum için daha önce okul ile görüşüp, mezuniyetimin e-devlette gözükmesini sağlamıştım. Nüfus müdürlüğünde diplomamın aslını/fotokopisini görmek istediklerinde gerek olmadığı konusunda ufak bir direttim. Konuyu şeflerine danıştıklarında, e-devletten aldığım karekodlu öğrenim belgesini cep telefonundan taratıp onay aldılar ve belgenin yeterli olacağını söylediler.

    Sürücü belgesi değerli kağıt ve harç bedeli, vakıf payı

    Parayı Ziraat bankası gişelerinden yada bankamatiklerinden ilgili menülerden yatırabilirsiniz. Ben Ziraat bankası bankamatiğinden 988 TL yatırdım. TC kimlik numarası ile yatırdığım para sistemde otomatik gözüktü. Dekont yada makbuza gerek kalmadı.

    Youtube’de parayı Ziraat bankası ATM’sinden hangi menülerden yatıracağınıza dair videolar bile var 🙂

    KKTC Sürüş Ehliyeti’nin aslı ve renkli sureti

    Süresinin geçmemiş olması gerekiyor. Bunun dışında bildiğim özel bir durumu yok.

    Evrak tesliminde aslını sizden alıyorlar. Olur da KKTC ehliyetinize ihtiyacınız olursa, yeniden çıkarmanız gerekiyor.

    1 Adet biyometrik fotoğraf

    Biyometrik fotoğrafınız yoksa, fotoğrafçılara ehliyet için çektireceğinizi söylemeniz yeterli. Resmi tarayıp işlemler bittikten sonra geri veriyorlar.

    Talep edilmeyen maddeler

    Gerekli belgeler listesinde olmasına rağmen aşağıdaki iki belge benden talep edilmedi:

    • Kan grubunu gösterir belge veya yazılı beyan.
    • KKTC Kimlik Kartı.

    Sonuç

    Belgeleri teslim ettikten 1 gün sonra TC ehliyetimin PTT kargoya verildiğine dair SMS aldım. 3 gün sonra da ehliyet elime ulaştı.

    Herkese kazasız, belasız sürüşler dilerim 🙂

  • Python’da __future__ modülü ne işe yarar?

    __future__ modülü eski versiyonda yazılmış Python kodu içerisinde yeni versiyon özelliklerini kullanmanızı sağlayan bir modüldür. Yani mesela kullandığınız özelliğin yeni versiyonda başka bir işlevi olsun, __future__ modülünü kullanarak mevcut Python versiyonundaki özelliği değil de daha yeni versiyondaki özelliği kullanmasını söylersiniz.

    Başka bir deyişle, __future__ modülü ile derleyiciye dersiniz ki; mevcut versiyondaki davranışları sergilemek yerine Python’ın standardı haline gelmiş ileri versiyondaki davranışları sergile.

    Örnekler

    Bölme işlemi (from __future__ import division)

    Bölme işlemi sonucu Python 2.x versiyonlarında int dönüyor. Python 3.x versiyonlarında ise float dönüyor. Görelim:

    Python 2.x

    Python 2.7.17 (default, Nov  7 2019, 10:07:09) 
    [GCC 7.4.0] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> 9/4
    2
    

    Python 3.x

    Python 3.6.9 (default, Nov  7 2019, 10:44:02) 
    [GCC 8.3.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> 9/4
    2.25
    

    Bu noktada varsayılan bölme işleminin Python 2.x içerisinde Python 3.x’deki davranması için from __future__ import division kodunu ekliyoruz:

    Python 2.7.17 (default, Nov  7 2019, 10:07:09) 
    [GCC 7.4.0] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> 9/4
    2
    >>> from __future__ import division
    >>> 9/4
    2.25
    

    Diğer bir örnek: print (from __future__ import print_function)

    Herhalde Python 2.x ile 3.x geçişinde en yaygın karşılaşılan farklılıklardan birisi print olmuştur.

    print Python 2.x’de sadece özel bir anahtar kelime iken Python 3.x’de fonksiyona dönüşüyor. Görelim:

    Python 2.7.17 (default, Nov  7 2019, 10:07:09) 
    [GCC 7.4.0] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> print
    
    >>> from __future__ import print_function
    >>> print
    <built-in function print>
    

    Daha ne örnekler var?

    __future__ modülü ile uygulayabileceğiniz tüm özellikleri aşağıdaki tabloda bulabilirsiniz. feature satırında geçen özellikler optional in satırında belirten Python sürümünde isteğe bağlı olarak geliyor. mandatory in satırında ise artık varsayılan özellik olarak geliyor. effect satırında ise bu özelliklerin “neden” değiştiği ile ilgili kapsamlıca bilgi bulabilirsiniz.

    featureoptional inmandatory ineffect
    nested_scopes2.1.0b12.2PEP 227Statically Nested Scopes
    generators2.2.0a12.3PEP 255Simple Generators
    division2.2.0a23.0PEP 238Changing the Division Operator
    absolute_import2.5.0a13.0PEP 328Imports: Multi-Line and Absolute/Relative
    with_statement2.5.0a12.6PEP 343The “with” Statement
    print_function2.6.0a23.0PEP 3105Make print a function
    unicode_literals2.6.0a23.0PEP 3112Bytes literals in Python 3000
    generator_stop3.5.0b13.7PEP 479StopIteration handling inside generators
    annotations3.7.0b14.0PEP 563Postponed evaluation of annotations

    Bitirirken

    __future__ modülünün en çok nerede işe yarayacağı ile ilgili benim aklıma gelen örnek senaryo şu: Python 2.x’de yazılmış bir koda ekleme yapmanız gerekiyor ve bu kodu gelecekte Python 3.x’e geçirmeyi planlıyorsanız. Bu durumda hazırdaki Python 2.x koduna yeni yapacağınız eklemeleri ileride tekrar Python 3.x’e çevirmekle uğraşmamak için __future__ modülü ile şimdiden Python 2.x içerisinde Python 3.x yazar gibi yazmaya başlayabiliyorsunuz.

    Son

    Stackoverflow yorumlarının bir tanesinde geleceğe dönüş filmine atıfta bulunulmuş. Back to the __future__ 🙂

    Kaynaklar:

  • SQL Developer ile Oracle TimesTen Veritabanına Bağlanma

    Aşağıdaki yazıda Ubuntu 14.04’de çalışmakta olan SQL Developer ile TimesTen veritabanına nasıl bağlanılır onu anlatacağım. Sisteminizde hali hazırda kurulu bir SQL Developer’ınız olduğunu varsayıyorum.

    Oracle TimesTen Nedir?

    Oracle TimesTen RAM’de çalışan (In-Memory) ilişkisel veritabanı sistemidir. Başlangıçta Hewlett-Packard tarafından tasarlandı ve geliştirildi. 2005 yılında Oracle tarafından satın alındı.

    TimesTen Client kurulumu

    http://www.oracle.com/technetwork/database/database-technologies/timesten/downloads/index.html bağlantısından TimesTen Client için sisteminiz ile ilgili dosyayı indirin.

    İndirdiğiniz sıkıştırılmış dosyayı dışarı çıkartın.

    Sıkıştırılmış dosya içerisinden çıkan setup.sh dosyasını komut satırından sudo ile çalıştırın.

    setup.sh’ı çalıştırdıktan sonra kurulum adımlarını okuyarak tamamlayın.

    Kurulumdan sonra, TimesTen Client’ın lib dizininin yolunu LD_LIBRARY_PATH değişkenini atayın. Örnek: export LD_LIBRARY_PATH=”/opt/TimesTen/timestenclient/lib/”


    Buradaki adımları tamamladıktan sonra SQL Developer uygulamasında yapacağımız düzenlemelere geçebiliriz.

    SQL Developer ile bağlanma

    SQL Developer’da üstteki menüden Tool > Preferences seçin.

    Preferences penceresinde Database altında Third Party JDBC Driver menüsüne tıklayın.

    Açılan pencerede Add Entry düğmesine tıklayarak TimesTen Client’ın lib dizini altında ttjdbc8.jar dosyasını bulup seçin. Örneğin bende bu dosya /opt/TimesTen/timestenclient/lib/ttjdbc8.jar yolu altında bulunuyor.

    Bu aşamaları tamamladıktan sonra New Connection düğmesine tıklayarak yeni bağlantı oluşturma penceresini açın.

    Açılan pencerede Oracle sekmesinin yanında TimesTen sekmesi belirecek. TimesTen sekmesine geçin.

    İlgili alanları doldurduktan sonra artık TimesTen veritabanına bağlanabilirsiniz. 
    Kaynak: http://docs.oracle.com/cd/E18464_01/doc.30/e18474/connect.htm#TTSDV114

  • Linux’ta zamanlanmış görevlerde (cronjob) iş çakışmasını önlemek

    Bir crontab girdisi belirli zaman diliminde çalışması için ayarlanmışsa (örneğin dakikada bir) ve bir sebepten yapılan işlemin belirtilen zaman diliminden fazla sürme ihtimali var ise, aynı komut bir öncekinin bitmesini beklemeden, zamanı geldiğinde tekrar çalışmak isteyeceğinden çakışma gerçekleşebilir.

    Örneğin dakikada bir belirtilen kaynaktaki dosyaları işleyip veritabanına atan ve sonrasında kaynak dizini boşaltan bir uygulamamız için zamanlanmış görevimiz var. Diyelim ki gün için de öyle bir dakikaya geldik ki, o an tahmin edemediğimiz, öncesinde kestiremediğimiz şekilde, kaynağımıza fazladan dosyalar geldi. Yani o dakikada çalışan zamanlanmış görevin dosyaları işleyip veritabanına yollama işlemi 1 dakikadan fazla sürecek. Henüz program işlemini bitirmemişken 1. dakikanın sonunda aynı zamanlanmış görev, zamanı geldiği için tekrar çalışacak. Bu da veritabanında aynı verilerin tekrar etmesine sebep olacak.

    Bu durumdan sakınmak için flock komutundan yararlanabiliriz.

    flock’un basitçe kullanımı şu şekilde

    flock -w 5 /herhangi/bir/yol komut

    -w 5: eğer komut kullanımdaysa, belirtilen saniye kadar bekle. belirtilen sürede komut boşa çıkar ise, komutunu çalıştır.
    /herhangi/bir/yol: Var olan herhangi bir dizinin altına belirleyeceğiniz yol. flock belirttiğiniz yola boş dosya oluşturacak.
    komut: Çalıştırmak istediğiniz komut. mv, cp, wget, rm vs gibi.

    flock kullanımını bir örnek ile göstereyim.

    Görevimiz /dizin/kaynak/ yolu altındaki tüm dosyaları /dizin/hedef/ yoluna kopyalamak olsun.

    Bunun için komut satırına şu şekilde bir girdi giriyoruz.

    flock -w 0 /space/deneme cp /dizin/kaynak/* /dizin/hedef/

    /dizin/kaynak/ yolunun altına büyük dosyalar atarak, kopyalama işlemi gerçekleştiren komutu çalıştırın.
    Kopyalama işlemi devam ederken, aynı komutu terminal’de başka bir sekmede girmeyi deneyerek neler olduğunu görebilirsiniz.

    Kaynak: http://www.elevatedcode.com/2013/05/07/flock-for-cron-jobs.html

  • Çeviri sözlüğü yayında

    Özgür yazılım çevirileri arasında arama gerçekleştirmenizi sağlayan Çeviri Sözlüğü yayında.

    Proje fikri nereden çıktı?

    Sitenin hakkında kısmında da değindiğim gibi, Yakın Doğu Üniversitesi İnovasyon ve Bilişim Teknolojileri‘nde stajımı gerçekleştirirken özgür yazılım çevirilerine katkı sağlamıştık. Çeviriler yaparken en çok ihtiyaç duyduğum şey, birden fazla yaygın anlamı olan kelimenin daha önce hangi Türkçe karşılığı kullanıldığı oluyordu. Bence bu konu, çevirinin bütünlüğü açısından da önemli. Aynı projede hatta aynı programda kelimelerin ortak bir karşılığı kullanılması, kullanıcıların da isteyeceği bir şeydir diye tahmin ediyorum.

    Burada öğrendiğim yöntem ile, çevireceğim kelimenin daha önceki çevirisini görmek için ilgili projenin tüm çeviri dosyalarını bir dizine indirip, komut satırından “grep” komutu ile bulmak istediğim kelimenin çevirilerini ekrana getirebiliyorum.

    Zaman içerisinde bu işlemi web uygulaması ve veritabanı ile yapma fikri kafamda oluştu ve sitenin şuan ki hali meydana geldi.

    Teknik olarak neler var?

    Tüm çeviri dosyaları bir dizin altında bulunuyor. Ayıklama (parse) işlevi gören Java kodu, po uzantılı çeviri dosyalarını işleyerek İngilizcesini, Türkçe çevirisini ve dosya isimini veritabanına atıyor.

    Linux Tomcat üzerinde çalışan Jsp de sorgu çekmenizi sağlayıp, sonuçları ekrana getiriyor.

    Neden Java?

    İşin kodlama kısmında Java teknolojilerini tercih ettim. .po dosyalarını ayıklama işlemi Python’da polib kitaplığı ile hali hazırda gayet pratik bir şekilde yapılabiliyor. Lakin Java’yı seçerek iş yerinde kullandığım ve öğrendiğim teknolojiler yardımı ile hali hazırdaki bilgi birikimi mi kullanabilecek, aynı zamanda bu proje ile yeni öğrendiğim şeyler iş yerinde bana faydası dokunabilecekti. Aynı şekilde veritabanında da Postgresql tercih etmemin sebebi hem özgür olması hem de iş yerinde kullandığımız bir sistem olmasıdır.

    Yazdığım kodda doğrudan polib’den  yararlanmasamda, polib’in kaynak kodunu inceleyerek, ayıklama işi yapan Java kodu için fazlası ile ilham aldım.

    Lictionary.in

    Projeyi heyecanla ilerletirken bir yandan daha önce böyle bir çalışma olmuş ya da mevzu bahsi geçmiş mi diye araştırırken, lictionary.in sayfası ile karşılaştım. 2011 yılında gerçekleştirilen bu proje ile daha önce nasıl karşılaşmadım bilmiyorum.

    Çevirileri tablolama açısından benim yapmak istediğim site ile tamamen aynı fikir üzerine kurulu. Daha önce yapılmış olanı yapmak bir süre hevesimi kırsa da, projenin eğitici yönünden dolayı yaptığım işi yarıda bırakmak istemedim.

    Ne öğrendim?

    .po dosyalarını ayıklama işlemlerini gerçekleştirirken temel Java bilgilerimi ilerlettim.
    Postgresql bilgilerimi ilerlettim.
    Jsp ile tanıştım.
    Jsp’den gelen talepleri işlemek ve tekrar Jsp’ye göndermek için Servlet kullandım.

    Bu proje bahanesi ile DigitalOcean‘dan çok cüzi miktara Linux sunucu sahibi oldum. İnsanın elinin altında bandı geniş, alanı geniş bir VPS’i olması çok güzel 🙂 Sitenin yayında olmasını sağlayan işlerin çok büyük çoğunluğunu kendim gerçekleştirdim. Daha önce LKD’nin eğitimine katıldığım ve LFS ile uğraştığım için işin en kolay kısmı Linux sistem yönetimi alanında oldu 🙂

    DigitalOcean’dan kiraladığım sunucuya svn kurdum ve projeyi orada sakladım. svn co, svn up komutlarından öteye giderek svn yönetimi ile ilgili işleri öğrendim.

    Ha unutmadan birde, sunucu sahibi olmadan önce projemi dışarısı ile paylaşmak için dizüstünde kurulu olan Ubuntu sistemi mi kullanıyordum. Bilgisayarımı barındırma olarak kullanabilmek için port yönlendirme, iptables vb konularda bilgi sahibi oldum. Bilgisayarımı barındırma olarak kullanmak gençlik hayalimdi 🙂

    Sayfalama (pagination) işlemleri sırasında MVC ile tanıştım. Sürekli duyduğum birşeydi. Uygulamalı olarak tanımış oldum.

    Temel HTML, CSS kodlarını öğrendim.

    Proje ile uğraşırken karşılaştığım sorunlar ve çözümleri

    Birileri sayfama giripte, “bunu nasıl yapmış acaba” diyebileceği ve aynı zamanda benim üzerinde bir süre takıldığım konularda yararlandığım kaynakları paylaşmak istiyorum.

    tablonun css’i için hazır kodlar kullandım. Ufak tefek değişiklikler dışında olduğu gibi kaynaktan yararlandım

    http://johnsardine.com/freebies/dl-html-css/simple-little-tab/

    Sonuçları sayfalamak için aşağıdaki kaynağı takip ettim. Üzerine eklemeler yaptım. İlerleyen sürümlerde tablolamada jQuery’ye geçecek olsam da, MVC öğrenmeme vesile olması sebebiyle taglib (JSTL) kullandığıma pişman değilim.

    http://theopentutorials.com/examples/java-ee/jsp/pagination-in-servlet-and-jsp/ 

    Tomcat’te Türkçe karakter sorunu yaşadım. Konu Jsp ile alakalı zannederek Google’da bu konudaki bir çok sayfayı tekrar tekrar ziyaret ettim. Lakin bakış açımı değiştirince çözüm Tomcat’te olduğunu farkettim. Bunun ile ilgili

    http://struts.apache.org/release/2.0.x/docs/how-to-support-utf-8-uriencoding-with-tomcat.html

    Html etiketlerini düz metin olarak göstermek için

    http://stackoverflow.com/questions/6817262/how-to-display-html-tags-as-plain-text

    Sistem tarafında iş arkadaşım Gökhan Atmaca’dan, kodlama ve arayüz konusunda diğer çalışma arkadaşlarımdan epeyce fikir aldım. Onlara da teşekkürler.


    Biterken
    Veritabanı üzerinde çalışmak isteyenler için, yedeğini (dump) paylaşabilirim.

    Henüz 5 aylık Java serüvenim var. Bulduğunuz hata veya absürtlükleri değerlendirirken bunu göz önünde bulundurarak değerlendirirseniz sevinirim. 
    Böyle ufak bir proje için bu kadar dil dökmüş olmamı garipseyebilirsiniz, lakin yazmayı seviyorum 🙂
    Gelecek sürümlerde görüşmek üzere.