Teknik

Bu blog yazımda sizlere Linux ve Linux türevlerinin mobil dünyadaki yerinden bahsedeceğim.

Linux, kaynak kodlarının GNU Genel Kamu Lisansı çerçevesinde dağıtılıp, değiştirilebildiği, ilk olarak Linus Torvalds tarafından yazılan, açık kaynak kodlu ve özgür bir işletim sistemi çekirdeğidir. Linux çekirdeği; bilgisayarlar, iş istasyonları, akıllı telefonlar, gömülü cihazlar, televizyonlar ve tabletler gibi hemen her platformda çalışabilmektedir.

Okumaya devam edin...

SQL Injection

Zinnur Yeşilyurt —  2 Eylül 2014 — 2 Comments

Merhabalar,

Bu benim bu blogdaki ilk yazım. Bu blogla Linux Yaz Kampı 2104’ü anlatan bir yazının altına attığım bir yorumla tanıştığım için Linux Yaz Kampı 2014’te Web Uygulama Güvenliği ve Güvenli Kod Geliştirme kursunda öğrendiğim bir konuyla başlamak istedim. Konunun çok ilerisini anlatan bir yazı değil de biraz özet maiyetinde. Zira bu konu için kitaplar var. o_O

Yazılımcı için iyi yazılım, uygulama geliştirmek önemlidir. Ancak geliştirdiğimiz işin güvenli olması da çok çok çok önemli bir konu. Zira çok fazla kişi internet bankacılığı, mobil ödeme, kredi kartı vs… kullanmakta.

Linux yaz kampı bünyesinde gittiğim kurs sonrası kursa dair bir doküman hazırlığındayım. Yakın zamanda bitecek ve yayınlayacağım. Kursun toparlama özeti gibi bir şey olacak sanırım. Ama şimdiden 25 sayfa olan bir özet görmedim. Neyse konumuza gelelim.

OWASP Top 10 sıralamasında 1. sırada yer alan Injections zafiyetinin bir çeşidi de Sql injection. Sql injection kullanıcıdan alınan input alanına arka tarafta çalışan Sql sorgusunu manipüle edip amacımıza hizmet edecek çıktılar vermesini sağlayacak Sql query’ler sokuşturmaktır.

Okumaya devam edin…

PostgreSQL’de sürekli erişilebilir (HA) bir küme yapılandırması (cluster configuration) kurmak, çeşitli replikasyon (replication) metodları ile mümkündür. Sıklıkla Warm Standby veya Log Shipping şeklinde anılan replikasyon modellerinde sürekli arşivleme (continuous archiving); birincil/ana (primary/master) sunucu başarısız olursa işlemleri devralmaya hazır bir ya da daha fazla yedek (replica) sunucu olması ile sağlanır.

Bu yazıda, ana (master) sunucuyu çeşitli sebeplerden dolayı kaybedersek (fail scenarios) replika (yedek) sunucuyu nasıl birincil/ana sunucuya yükseltebileceğimizi (promote) göreceğiz.

Öncelikle yük dağıtma (failover) senaryosunun düzgün tamamlanabilmesi için ana sunucudaki postgresql servisinin durmuş olduğundan emin olmalıyız. Aynı anda çift master rolü olan bir replikasyon beklenmedik sonuçlar doğuracaktır. O yüzden imkan varsa -sunucu erişilmez hale gelmiş olabilir; donanımsal sorunlar vs-, önce ana (master) sunucudaki postgresql servisini durdurmalıyız.

Okumaya devam edin...

Cron, Unix tabanlı işletim sistemlerinde zaman bazlı çalışan bir görev planlayıcısıdır (job scheduler). Sistem tarafında yaptırmak istediğimiz görevi belirlediğimiz zaman aralıklarında çalıştırır. /etc dizini altındaki crontab dosyası ise cronların çalışma zamanını ve görevlerini barındıran yapılandırma dosyasıdır. Windows’ taki karşılığı ise zamanlanmış görevlerdir.

Okumaya devam edin...

İşlerin sistematik olarak yürütülmesinin istendiği her çalışmanın bir proje analiz süreci vardır. Proje analiz sürecinde yapılacak işin net olarak belirlenmemesinin doğuracağı kafa karışıklıkları, işin ortasında gelecek revizyon taleplerinin sizi X yolundan çıkarıp Y yoluna sokmasının yaşatacağı zaman kayıpları ve tasarım sürecinde istenilen işlevlere sahip bir ürünün ortaya konulamaması gibi durumlar muhtemelen can sıkıcı olacaktır.

Wireframe, tek satır kod yazmadan, tabiri caizse tasarımın ‘T’ sine dahi dokunmadan projenin kurgusu ve işlevselliği hakkında hem yazılımcıya hem de müşteriye fikir sahibi olma imkanı sağlayan proje ön hazırlık aşamasıdır. Proje hakkında düşündüklerinizin görsel taslağı niteliğindedir ve projenin özellikleri ve fonksiyonalitesi hakkında bilgi verir. Proje içeriğinin nasıl konumlandırılacağını, neyin ne kadar yer kaplayacağını aşağı yukarı ortaya koyacağı için planlamanın doğru oranlarla yapılmasını sağlar.

Okumaya devam edin...

Logrotate komutu /usr/sbin klasörü altında yer alan bir komuttur. Bu komut ile

    • Dosya boyutu belirli bir büyüklüğe ulaştığında log dosyasını rotate(çevrim) etme
    • Rotate işleminden sonra yeni log bilgileri için dosya yaratma
    • Rotate edilmiş log dosyalarını sıkıştırma
    • Eski log dosyalarını kaldırma
    • Log dosyalarını tarihe göre saklama

gibi işlemler yapılabilir.
Logrotate komutunun çalışma yapısı aslında cronun çalışma yapısıdır. /etc/cron.daily/logrotate dizininde günlük olarak çalışan bir shell betiğidir (script).

Okumaya devam edin...

Android uygulama geliştirirken; gerek tasarım, gerekse yazılım geliştirmesi sırasında uygulamanın sınırlarını belirlemek gerekiyor. Net bir şekilde belirlenen isterler, uygulamanın geliştirme ve tasarım süresini kısaltacak ve mevcut sürenin verimli kullanılmasını sağlayacaktır.

Bir uygulamanın tablette mi telefonda mı ya da daha doğrusu hangi büyüklükteki ekrana sahip cihazlarda çalımasını istiyorsak, buna göre çeşitli ayarlamalar yapmalıyız.

Okumaya devam edin...

Directive’ler AngularJS’in temel taşı ve en kuvvetli özelliğidir. Bu sayede, kendi işimize yarayacak html tagler üretebiliriz. AngularJS kütüphanesiyle yazılmış kodlara baktığımız zaman `ng-app`, `ng-repeat`, `ng-controller` diye gördüğümüz her şey aslında birer `directive`dir. Şimdiye kadar ben de bu `directive`lerin son kullanıcısıydım. Artık kafama koydum ufak da olsa bu deryaya bir adım atacağım 🙂

Detaylı bilgi edinebilmek için bir çok kaynak okudum, teknik konuşmalar izledim ve aslında directivelerden önce `linking`, `compiling`, `scope`, `data binding` gibi kavramların da iyice sindirilmesi gerektiğini fark ettim. Bu araştırma sürecinde AngularJS’in yazarlarından Misko Hevery’nin bu video kaydını oldukça faydalı buldum. Gerek `directive`ler olsun, gerek AngularJS’in çalışma prensibi olsun oldukça basit bir dille ifade edilmiş. `Scope`larla ilgili olarak bu günlük yazısına bir göz atmanızı tavsiye ederim. AngularJS’te tek yönlü bağlama (one way binding), iki yönlü bağlama (two-way binding), metin bağlama (text binding) diye üç tip yöntem var. Bütün bu yöntemler bu kaynakta güzel açıklanmış. Vaktiniz olursa bu kitaba da bakmanızı öneririm.

Bu kadar araştırma yaptıktan sonra artık sağ-tık directive’ini yazmaya başlayalım derim.

Okumaya devam edin...

Merhabalar,

Sizlere bu yazımda Android uygulama geliştirmeye başlamak isteyenler için adım adım Ubuntu bilgisayarınıza nasıl Android kurabileceğinizden bahsetmek istiyorum.

Android uygulamaları, Eclipse üzerinde Java programlama dili ile yazıldığı için öncelikle Eclipse’i indirmemiz gerekiyor elbette.

Okumaya devam edin...

Fonksiyonel programlama dillerinde yaygın teknik; fonksiyonları mümkün olabilecek en alt fonksiyonlara ayırarak problemi çözme yönündedir. Yineleme yani ” recursion” fonksiyonları da bu noktada en iyi çözümlerden biridir. Yineleme fonksiyonu bildiğimiz üzere kendi kendini çağıran fonksiyondur.

Fakat yineleme fonksiyonları performans açısından yavaştır. Sebebi ise; fonksiyonlar, kendini her çağırdığında bellekte yeni bir yer açılır ve bu tarz fonksiyonlar, çağrılar sonucunda dönen değerleri kullanarak hesaplama yaptığı için hesaplama yapılana kadar tüm parametreler ve dönüş değerleri bellekte tutulur. Daha açık bir şekilde ifade edersek; son yineleme de dahil olmak üzere tüm yinelemeler bir değer döndürdükten sonra hesaplama yapıldığı için tüm değerler işlem sonuna kadar bellekte tutulur.

Böyle bir yöntem kullanınca da bellek fazla kullanıldığı için “StackOverflowException” ile karşılaşmak kaçınılmaz oluyor.

Okumaya devam edin...