İngilizce Klavye Düzeninde Türkçe Karakter Kullanmak

Yazılım geliştirirken ingilizce klavye kullanmak çok pratik oluyor. Geliştirme sırasında bolca kullandığım [] ` {} ~ \ | gibi karakterler ingilizce klavyede erişimin çok kolay olduğu bölgelerde, bunun yanında türkçe karakterlere hemen hemen hiç ihtiyacım olmuyor. Bu nedenle bir süredir ingilizce klavye kullanmaya başladım. Bunun yanında günlük iletişimin çoğunluğu türkçe. İş arkadaşlarım ve yakın çevremle konuşurken türkçe karakter kullanmamak pek sorun olmuyor, fakat bir müşteriye mail atarken, ya da şuan olduğu gibi blog yazarken türkçe karakter kullanmak şart oluyor.


Emacs Tramp SSH Hostname Tamamlama

Ssh ile baglandigim makineleri kategorilerine göre farklı dosyalarda tutup ~/.ssh/config dosyasında Include ile tanımlıyorum. Aşağıdaki gibi bir tanımlama güzel oluyor

# ~/.ssh/ssh_config_company1
Host top-secret-prod-host
  Hostname prod.example.com
  User root
  
# ~/.ssh/ssh_config_company2
Host top-secret-dev-host
  Hostname dev.example.com
  User root

# ~/.ssh/config
Include ssh_config_company1
Include ssh_config_company2

Fakat emacs tramp ile sunuculara erişmeye çalıştığım zaman makine isimlerinin otomatik tamamlanmadığını farkettim. İsmi tam yazıp bağlandığımda güzelce çalışıyor, fakat TAB ile tamamlamaya çalıştığımda bir tepki alamıyordum. Biraz araştırdıktan sonra bir sonuç elde edemedim. Ya herkes bunun çözümünü biliyordu ya da ben doğru anahtar kelimeleri kullanmamıştım. Sonunda ilgisizi bir stackoverflow postunda aşağıdaki kod parçasını gördüm. Denediğimde işe yaradı.

(tramp-set-completion-function
 "ssh"
 '((tramp-parse-sconfig "/etc/ssh_config")
   (tramp-parse-sconfig "~/.ssh/config")))

Benzer bir problemde işinizi görebilir.


Maven İle Versiyon Numarası Güncelleme

Bir maven projeniz varsa ve versiyon numarasını güncellemek istiyorsanız, pom.xmli bir editör ile açıp versiyon numarasını güncelleyebileceğiniz gibi, maven kullanarak da bunu yapabilirsiniz.

Aşağıdaki gibi bir pom.xml dosyaminizin olduğunu düşünelim.

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0.0</version>

  <name>my-app</name>
</project>

Aşağıdaki komut ile 1.0.0 olan versiyon numarasını 1.0.5 olarak güncelledik.

mvn versions:set -DnewVersion=1.0.5 versions:commit

Eğer otomatik olarak versiyon numarasını yükseltmek istersek aşağıdaki komut işimizi görecek.

mvn build-helper:parse-version versions:set \
    -DnewVersion=\${parsedVersion.majorVersion}.\${parsedVersion.minorVersion}.\${parsedVersion.nextIncrementalVersion} \
    versions:commit

Artık versiyon numaramız 1.0.6

Minör versiyon yükseltmek isterseniz

mvn build-helper:parse-version \
    versions:set \
    -DnewVersion=\${parsedVersion.majorVersion}.\${parsedVersion.nextMinorVersion}.\${parsedVersion.buildNumber} \
    versions:commit

Major versiyon yükseltmek isterseniz

mvn build-helper:parse-version versions:set \
    -DnewVersion=\${parsedVersion.nextMajorVersion}.0.0 \
    versions:commit

Daha detaylı bilgi için aşağıdaki linki kullanabilirsiniz.

https://www.mojohaus.org/build-helper-maven-plugin/parse-version-mojo.html


Let's Encrypt ile Wildcard SSL Sertifika Oluşturma

Let’s Encrypt kullanarak wildcard sertifika oluşturabiliyoruz. Normal şartlarda sertifika oluştururken http://domain.com/.well-known altında bir dosya oluşturularak o alan adının sahibi doğrulanıyor. Fakat wildcard sertifika icin işler değişiyor. Bazı dns kayıtları girmemiz gerekiyor. Bunu kendimiz yapabileceğimiz gibi bu işi otomatize eden scriptler de kullanabiliyoruz.


Apache Tomcat Paralel Deploy

Apache Tomcat kullanıyorsanız aynı uygulamanın birden fazla sürümünü aynı anda aynı path üzerinde çalıştırabilirsiniz. Bu deploy yaparken kesintisiz hizmet sağlamak için çok yardımcı oluyor. Buna Parallel Deployment deniyor. Paralel deploy sırasında eğer uygulamanın bir önceki versiyonunda oturum açılmışsa istekler oraya gitmeye devam ediyor, yeni oturumlar yeni sürüme gitmeye başlıyor.


Cron Timezone Problemi

Zamanlanmış görevler için cron’u sık sık kullanıyorum. Bugüne kadar beni yarı yolda bıraktığı hiç olmadı. Birkaç gün önce iş arkadaşım gece 12de çalışması gereken bir işin, gece 3te çalıştığını bildirdi. Önce böyle birşey olmaz dedim ama loglara bakınca doğru olduğunu anladım.

Biraz araştırınca şunu öğrendim, timezona değiştiğinde eğer cron servisi yeniden başlatılmazsa eski timezone’u kullanmaya devam ediyor.

Kullandığız sistem göre aşağıdaki gibi bir komutla cron servisini yeniden başlatabilirsiniz.

service cron restart

Emacs Fill Column Indicator

Editörde 80. kolonun nerede bittiğini görmek için Alp Aker tarafından yazılmış olan fill-column-indicator kullanıyordum. Emacs 27.0.90 ile birlikte bu özellik yerleşik gelmeye başladı.

Aşağıdaki kodu .emacs dosyanıza ekleyerek versiyona göre uygun fill-column-indicator kullanabilirsiniz.

(if (version< emacs-version "27.0.90")
    (add-hook 'prog-mode-hook #'fci-mode)
  (global-display-fill-column-indicator-mode))

Eğer 80 karekter yetmiyorsa aşağıdaki kodla 120 karektere çıkartabilirsiniz.

(setq-default fill-column 120)

Fill Column Indicator Preview


Linuxda du kullanırken gizli dosyaları dahil etmek

du komutunu çok sık kullanıyorum. Makinede yer sıkıntısı yaşadığım zaman kesinlikle hayat kurtarıyor. Genellikle aşağıdaki şekilde kullanıyorum. du -sh * | sort -h Bu komut anlaşılır bir birimle tüm alt dizinlerin boyutlarını hesaplayıp küçükten büyüğe doğru sıralıyor. Bu komutun ve birçok linux komutunun sıkıntısı, wildcard kullanıldığında gizli dosyaları/dizinleri göstermiyor. Tabi bu kullandığınız kabukla ilgili. Ben bash kullanıyorum. Bunu aşmak için komutu aşağıdaki şekilde kullanabilirsiniz. du -sh .[!.]* * | sort -h Bu komutun da biraz sıkıntılar var.

Soyadım Değişti

Malum sıkıntılı bir soyada sahiptim, 3 aylık uğraş sonucunda soyadımı değiştirmeyi başardım. İleride belki bunun için bir blog yazarım. Yeni soyadım Özgür :)


Let's Encrypt

Daha önceki yazılarımda belirtiğim gibi ssl için startssl kullanıyordum. Ücretsiz sertifika verdiği için startssl uzun süre işimi gördü. Fakat son dönemde Let’s Encrypti keşfettim. Çok basit bir şekilde sertifika oluşturmamızı sağlıyor. İlk denememden sonra tüm kullandığım websitelerinde ve servislerde Let’s Encrypt kullanmaya karar verdim. Sizde seveceksiniz bundan eminim. Yaklaşık 12 sertifika oluşturdum, bunların takibini yapmak biraz sıkıntılı olacak. Bir de Let’s Encrypt sertifikaları 3 aylık oluşturuyor. Birşeylerin gözden kaçması çok mümkün.