MongoDB Güvenlik Politikaları ve Yapılandırma

Bir önceki yazımda MongoDB’den kısaca bahsetmiştim. Mongo’yu tanımak ve ilk adımı atmak isteyenler için bir takım özet bilgiler vermiştim. Bu makalemde ise yazılım projesinde Mongo’yu kullanmak isteyenler için güvenlik politikalarından, yetkilendirme mekanizmalarından ve kullanıcı – rol mimarilerinden bahsetmek istedim.

Kullanıcı ve Rol Kavramı

Güvenlik politikalarına hakim olmak bu işin olmazsa olmazıdır diyebiliriz. Öncelikle Mongo’de default olarak gelen (Built-In) rolleri inceleyelim.

tumblr_inline_n5mzh5mHU61qzyevi

 

Built-In Roller

Database User Roles
Database Administration Roles
Cluster Administration Roles
Backup and Restoration Roles
All-Database Roles
Superuser Roles
Internal Role

 

 

Bu rollerden “Database User” ve “Database Administrator” rollerini herhangi bir veritabanında kullanabilirsiniz; fakat diğer tüm built-in roller sadece “admin” veritabanında kullanılabilir. Burada şöyle bir soru gelebilir: Veritabanı bazında kullanıcı mı tanımlayacağız? – Evet, doğrudur. Dilerseniz bir root kullanıcısı tanımlayıp tüm erişimleri bu kullanıcıdan da gerçekleştirebilirsiniz; fakat iyi bir güvenlik yapılandırması için bu doğru bir tercih değildir. DB bazlı user authentication daha sağlıklı olacaktır.

Custom Roles

Dilerseniz db.createRole() komutu ile kendi rol modelinizi oluşturabilirsiniz.

Veritabanına Kullanıcı Ekleme

Not: Bir veritabanına yeni kullanıcı ekleyebilmek için öncelikle o veritabanında “userAdmin” ya da “userAdminAnyDatabase” rollerinden birisine sahip olmanız gerekmektedir. Bu yüzden ilk MongoDB kurulumu ile birlikte en az bir User Administrator eklemeniz de faydalı olacaktır. Bu kullanıcı ile sisteme istediğiniz kadar kullanıcı ekleyebilirsiniz. Ayrıca “userAdmin” ya da “userAdminAnyDatabse” Unix sistemlerdeki “root” kullanıcısı gibi DEĞİLDİR. Kullanıcı yönetimi dışındaki bir üst level işlevlerini yapamaz (ek izinler almadan).

Ayrıca “userAdmin” rolüne sahip kullanıcı yalnızca bulunduğu veritabanında kullanıcı yönetimi yapabilir. Diğer veritabanlarında bu işlemi yapma yetkisi yoktur. Yalnızca “admin” tablosundaki kullanıcı “userAdminAnyDatabase” yetkisi aldıysa tüm veritabanlarındaki kullanıcıları yönetebilir. Bu kullanıcı MongoDB system superuser’ı olarak da adlandırılabilir; fakat yalnızca kullanıcı yönetiminden sorumludur. Veritabanındaki (clean, create, index, drop vs.) admin komutlarını çalıştırabilmek için ise dbAdmin ya da dbAdminAynDatabase (tüm veritabanlarında) rolüne sahip olunmalıdır.

En üst düzey yetkili kullanıcı “root” rolüne sahip kullanıcıdır. “root” rolüne sahip kullanıcı readWriteAnyDatabase, dbAdminAnyDatabase, userAdminAnyDatabase, clusterAdmin ve restore rollerinin tamamına sahip olur. MongoDB sistemindeki tüm işlemleri yapmak için bir root kullanıcısı bulundurabilirsiniz. (Bkz. db.auth())

Bir veritabanındaki yetkili kullanıcıları listeleme:

Sistemdeki tüm kullanıcıların detaylı dökümünü almak için:

 

MongoDB Yetkilendirme (authentication) Mekanizmaları

1. Şifre Bazlı Yetkilendirme (Password-based authentication)

Kullanıcı önceden tanımlanmış şifresi ile authentication sağlar. Şifreleme algoritması olarak MongoDB 3.0 ve üzerinde SCRAM-SHA-12 kullanılır. (Eski versiyonlarda: MONGODB-CR)

2. Sertifika Bazlı Yetkilendirme (Certificate-based authentication)

İstemci güvenilir bir Sertifika Otoritesi tarafından imzalanmış bir x.509 sertifikası sunar.

3. Harici Yetkilendirme (External authentication)

Kullanıcı harici bir servis kullanarak kimliğini doğrular (Kerberos ya da LDAP)

 

10 Maddede MongoDB Güvenliğini Arttırın

Ek olarak özet mahiyetinde internette bulduğum 10 maddelik güvenlik yapılandırması makalesinin çevirisini sunmak istiyorum:

1. auth’u aktifleştirin:

mongod.conf dosyasından yada mongod –auth parametresi ile auth’u aktifleştirin.

 

2. Veritabanınıza erişimi internete açmayın:

Herhangi bir saldırganın fiziki olarak veritabanınıza erişmesine izin vermeyin. DB erişimi yalnızca localden sağlayın. Son kullanıcı yalnızca uygulama üzerinden read, write vs. istekleri yapabilsin.

 

3. Firewall kullanın:

Yalnızca uygulama sunucunuzun veritabanınıza erişmesine izin verin. Tamamına hükmedemediğiniz ağlarda ideal bir iptables senaryosu oluşturabilirsiniz.

 

4. Replica set mimarilerinden key dosyaları kullanın:

Farklı MongoDB instance’ları arasında iletişim sağlamak için key dosyası oluşturun ve authentication’ı bununla sağlayın.

 

5. HTTP Status arayüzünü pasifleştirin:

Mongodb default olarak http://localhost:28017 adresinde size bir web arayüzü sunar ve bu ekrandan durum (status) bilgisi alabilirsiniz. Http arayüzünün kapatılması güvenlik için doğru bir adım olacaktır.

 

6. REST arayüzünü pasifleştirin:

Buraya yapılacak REST istekleri ile Mongo’daki tüm db ve collection’lara erişim sağlanabilir. –auth modunu aktifleştirseniz bile product’a çıktığınızda bu arayüzün pasif kalması daha isabetli olacaktır.

 

7. Bind_ip değerini ayarlayın:
Eğer sisteminizde birden fazla network arayüzü varsa bind_ip ayarı ile mongodb sunucunuza erişimi sınırlandırmalısınız. Default olarak mongodb tüm arayüzlere bağlanabilecek şekilde gelir.

 

8. SSL kullanın:

Man in the middle saldırılarının önüne geçebilmek için sunucu ve istemci arasındaki istekleri SSL ile sağlayın. Mongodb’nin güvenli olmayan bir ağ arayüzü ile internete çıkmasına izin vermeyin.

 

9. Rol bazlı yetkilendirme (Role based authorization)

MongoDB her kullanıcı için önceden tanımlanmış (built-in roles) ya da özel (custom roles) yetkilendirme yapısına sahiptir. Rol bazlı yetkilendirme ile kullanıcılara sınırlandırılmış yetkiler atayabilir ve bu kurguya göre veritabanı sunucunuza erişim izni verebilirsiniz.

 

10. Enterprise mongodb & Kerberos
Enterprise mongodb Kerberos ile tam entegredir. Dilerseniz maliyetini göze alıp enterprise modele de geçebilirsiniz.

 

Ek olarak MongoDB Security Checklist’e de gözatabilirsiniz:

https://docs.mongodb.org/manual/administration/security-checklist/

 

Notlar:

  • admin veritabanı MongoDB kurulumundan sonra default olarak gelir.
  • mongod –auth ile çalıştığınızda web client’a -kullanıcı adı ve şifre yazsanız bile- erişim sağlayamazsınız.
  • Internal Authentication ile replicat set ve sharded cluster memberlarını yetkilendirebilirsiniz.
  • Varolan bir kullanıcıyı authenticate etmek için db.auth(“username”, “password”) metodunu kullanabilirsiniz.
  • Her veritabanı için farklı yetkilere sahip, ayrı kullanıcılar oluşturabilirsiniz.

 

Kaynaklar:

https://docs.mongodb.org/manual/reference/built-in-roles/

https://docs.mongodb.org/manual/tutorial/manage-users-and-roles/

https://docs.mongodb.org/manual/reference/method/db.auth/

https://scalegrid.io/blog/10-tips-to-improve-your-mongodb-security/

 

MongoDB Kurulumu ve Mongo Shell Kullanımı

MongoDB-Logo-7db53b4037f9953e9df4f694c758141fcfa022cee1d2ff50749d133d0b70b692MongoDB ilişkisel olmayan, NoSql (Not Only SQL) kavramı üzerine C++ ile geliştirilmiş, açık kaynak kodlu bir veritabanıdır. Geleneksel RDBMS (Relational Database Management System) veritabanlarının hantal geldiği uygulamalarda ya da uygulamanın bazı modüllerinde tercih edilir.

Yüksek hacimli depolamar yapılacağı zaman MongoDb doğru tercih olabilir. Bazı projelerinizde aktivite logları tutmak isteyebilirsiniz ya da analiz yapmak için yığın verilere ihtiyaç duyabilirsiniz. Cache, yorum, etiketleme vs. gibi yığın veriler tutma ihtiyacınızı MongoDB ile pratik bir şekilde sağlayabilir ve mevcut RDBMS veritabanınızın (MySQL, vs.) şişmesinin önüne geçebilirsiniz.

Sıradan uygulamalarda MySQL ile MongoDB arasında yüksek performans farkı olmayabilir; fakat büyük ölçekli çalışmalarda MySQL’de yığın oluşmasını ve hantallaşmanın önüne geçeceğiniz kesin. MySQL’de bir tablo 5-10 GB büyüklüğe ulaştığında artık performans konusunu tekrar gözden geçirmeniz gerekecektir. Bu noktada MongoDB imdada yetişir. Bu hantallaşmanın önüne geçmek için yığın verileri MongoDB’ye yıkabilirsiniz. (Aynı projede hem MySQL hem de MongoDB veritabanlarını birlikte kullanabilirsiniz.)

MongoDB döküman tabanlıdır. MySQL’deki tabloların karşılığı olarak MongoDB’de collection (koleksiyon) vardır. Bu collection’larda veriler JSON objelerine çok benzeyen bir yapıda tutulur.

MacOS MongoDB Kurulumu

Sırasıyla aşağıdaki komutları çalıştırın:

 MongoDB’yi Başlatma ve Mongo Shell

 Mongo Shell’de Bazı İşlevler

 Genel Notlar

  • Collection’daki veriler döküman tabanlı olduğu için standart bir field yapısı yoktur. Bir satırdaki veri ile diğer satırdaki verinin field’ları farklılık gösterebilir. Kurgu tamamen size aittir.
  • mongod” servisinin çalıştırırken –rest komutu ile çalıştırırsanız (“mongod –rest“), http://127.0.0.1:28017/ URL’sinden MongoDB RESTful arayüzüne erişebilirsiniz. Bu arayüzden çeşitli REST komutları ile MongoDB sunucusu ve veritabanlarınız ile ilgili her şeye erişebilirsiniz (Sunucu durumu, veritabanlarını listele, collectionları listele, satırları göster vs.)
  • MongoDB’nin default’da gelen bir phpMyAdmin tarzı arayüzü yoktur; fakat çok sayıda açık kaynak kodlu Admin UI sunulmuştur. Ör: https://github.com/rsercano/mongoclient
  • Tablolarınızdaki index kurgusunu ve güvenlik politikalarını da gözden geçirmenizi tavsiye ediyorum.

Faydalı olması dileklerimle… :)

Kaynaklar:

Mongo Dökümantasyonu

https://docs.mongodb.org/manual/

Mongo Shell Komutları

https://docs.mongodb.org/manual/mongo/

Mongo ve SQL Karşılaştırması

https://docs.mongodb.org/manual/reference/sql-comparison/

Xcode “Missing iOS Distribution signing identity for …” Hatası ve Çözümü

Logo_xcode14 Şubat 2016 itibariyle Xcode üzerinden yeni bir uygulama yüklemek istediğinizde karşılaşabileceğiniz potansiyel “Missing iOS Distribution signing identity for … ” hatasını gidermek için aşağıdaki adımları izleyebilirsiniz.

1. Keychain Access‘i açın.

2. Üst menüden View -> Show Expired Certificates’i tıklayın.

3. Soldaki “System” sekmesini seçin ve sertifika listesindeki “Apple Worldwide Developer Relations Certificate Authority Intermediate certificate (expired on February 14, 2016)” sertifikayı silin.

4. Aşağıdaki bağlantıdan kadar geçerli olan yeni WWDR intermediate certificate dosyasını indirip, çift click ile kurulum gerçekleştirin.

WWDR intermediate certificate

İyi çalışmalar dilerim.

Jenkins nedir? Mac OS X’de Jenkins Kurulumu ve Yapılandırma

continuous integrationContinuous Integration (kısaltması CI) Türkçe manası ile “Sürekli Entegrasyon” anlamına gelmektedir. CI araçlarının esas amacı bir yazılım projesine birden fazla developer geliştirme yapıyorsa; geliştirilen iş paketlerinin belli aralıklarla ana projeye entegre olmasını sağlamaktır.

Daha açık ve somut bir örnekle şöyle açıklayabiliriz:
Bir yazılım projesi üzerine kod yazan bir ekibiniz var. Projenizde bir versiyon kontrol sistemi (VCS) kullanıyorsunuz (Github, Bitbucket, vs.). Yazılım ekibi iş paketlerini tamamladıkça  çalışmalarını versiyon kontrol sistemi sunucusuna gönderiyor (commit, push). Bu versiyon kontrol sistemi ile senkron çalışan bir CI aracınız var. Yazılım ekibi tarafından VCS sunucularına yeni bir paket geldiği anda CI sunucunuz tetiklenir ve sizin belirlediğiniz bir takım işlevleri yerine getirir. Ne gibi? Tamamlanmış iş paketlerini çek (pull), derle (build), bildirim gönder (notification) ve yayınla (deploy). Tamamen hayal gücünüz ile sınırlı!

 

jenkins-logo

 Jenkins nedir?

Jenkins Java dili geliştirilmiş, açık kaynak kodlu (open source) bir CI aracıdır ve Jenkins için yazılmış yüzlerce eklenti (plug-in) vardır. Jenkins’i bir otomasyon (automation) yazılımı olarak düşünebiliriz.

Jenkins Kurulumu (Mac OS X)

Jenkins kurulum dosyasını (pkg) indirelim ve kuralım:
https://jenkins-ci.org/content/thank-you-downloading-os-x-installer/

Diğer işletim sistemlerinde kurulum için bağlantıyı inceleyebilirsiniz:

https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins

Kurulum tamamlandıktan sonra http://localhost:8080/ adresine tıklayarak Jenkins anasayfasına (dashboard) erişebilirsiniz.

Jenkins Güvenliği

Kurulumdan sonra ilk adım olarak:

bölümünden kullanıcı ekleyin. Ekleyeceğiniz ilk kullanıcı tam yetkili olsun. Dilerseniz sonraki ekleyeceğiniz kullanıcılar için özel izinler belirleyebilirsiniz (ACL). Kullanıcı tanımlama işlemini tamamladıktan sonra oturum güvenliğini aktifleştirin:

 Not: Jenkins otomatik olarak tarayıcının diline göre arayüzünü sunar. Türkçe dil desteği çok iyi olmadığı için; ingilizce kullanmanızı tavsiye ediyorum. Bunun için Chrome’un varsayılan (birincil) dilini ingilizce yapmanız yeterlidir.

Jenkins Bitbucket Plug-in Eklentisi Kurmak

Jenkins için geliştirilmiş yüzlerce plug-in’den birisi olan Bitbucket eklentimizi kuralım.

Öncelikle yukarıdaki menüye ulaşıp, üst bölümdeki “Filter” kutusuna “Bitbucket” yazalım ve çıkan sonuçlardan “Bitbucket Plugin” i seçip kuralım. (Wiki sayfası: https://wiki.jenkins-ci.org/display/JENKINS/BitBucket+Plugin)

 Jenkins Görevi Oluşturmak

Jenkins’de yeni kullanıcımız ile oturum açtıktan sonra anasayfada iken sol menüden New Item’ı tıklayınız. Gelen ekranda “Item name” bir isim yazıp aşağıdaki seçeneklerden “Freestyle project” i seçip, ilerleyin. Sonraki ekranda karşınıza konfigürasyon ekranı gelecek.

Sırasıyla:

kutucuklarını işaretleyelim.

Ayrıca “Trigger builds remotely” kutucuğunu işaretledikten sonra açılan “Authentication Token” kutusuna bir token bilgisi girelim. Bu, eklemiş olduğumuz görevin özel Token’ı olacak ve örnek gösterilen URL’ye manuel yapılan istekle de dilersek trigger yapabileceğiz.

Build Triggers seçeneğinden anlaşılacağı üzere BitBucket’a bir değişiklik gönderildiğinde (push yapıldığında) bu görevin çalışmasını istiyoruz.

Ve en önemli 2 bölüm: Build ve Post-build Actions.

Build
Bu görev çalıştığı zaman neler yapılacağını içerir ve aşağıdaki “Execute shell” başlığı altındaki “command” bölümüne konsol komutlarınızı yazmanız gerekmektedir.

Yukarıdaki örneğimizden yola çıkacak olursak, yeni bir paket geldiğinde (push), ilgili proje değişiklikleri çeksin (pull).

Command:

Görmüş olduğunuz gibi “Command” kutusuna dilediğiniz işlevleri gerçekleştirecek komutları yazabilir, daha önceden hazırlamış olduğunuz bash script’lerinizi çalıştırabilirsiniz. Tamamen hayal gücü ve kabiliyetinizle sınırlı diyebilirim. İhtiyacınız ne ise; ona özgü bir çözüm üretmeniz için Jenkins hazır kıta bekliyor olacak.

Post-Build Actions
Bu bölümde ise üstteki “Build” çalıştıktan sonra yapılması istenen sonraki görevi seçiyorsunuz: Örneğin e-posta gönder, ayrıntılı log dosyasını kaydet ya da bir sonraki projeye geç ve onu paketle, gibi…

Tüm konfigürasyonlar tamamsa Save‘e tıklayın ve kaydedin.

Atlassian_Bitbucket_Logo
Bitbucket Ayarları ve Trigger

Jenkins’e görevi verdik. Artık tetiklendiği anda ilgili klasöre gidip, önceden tanımlanmış olan (init) Bitbucket repository’sini çekmeye hazır. Şimdi sırada Bitbucket’a bir gönderim geldiğinde (push), Bitbucket’in Jenkins’e bildirimde bulunmasını yapmasını sağlamak.

Jenkins User API Token
Öncelikle Jenkins kullanıcımız için bir API Token almamız gerekiyor. Bunun için:

bölümüne erişip; API TOKEN başlığı altında “Show API Token” a tıklayarak User ID ve API Token bilgilerini not edin. (API Token yok ise “Change API Token” butonu ile oluşturabilirsiniz.) Save edip, ana ekrana dönebilirsiniz.

Bitbucket Repository Services (Hook)
Bitbucket’da repository’imizi seçip; “Settings” bölümünden “Services” a tıklayalım.

“Select a Service”  a tıklayıp Jenkins’i seçin ve “Add service” tuşuna basın.

Açılan kutucukta “Csrf Enabled” işaretsiz kalıyor. Ve sırasıyla:

 Modem Port Yönlendirmesi
Bir router arkasındaysanız internete çıktığınız ip adresinin 8080 portuna gelen istekleri, modem kontrol panelinden Jenkins’in kurulu olduğu sunucuya yönlendirmeyi unutmayın.

Uçuşa Hazır

Artık Bitbucket ile entegre çalışan Jenkins CI sunucumuz hazır. İlgili repository’e bir commit push edin ve Jenkins dashboard’unda Build’i izleyin. :) Bir hata ile karşılaşılırsa “Console Output” dan log kaydına bakabilirsiniz.

Önemli Notlar

  • Jenkins kurulduktan sonra Mac OS’da “jenkins” isminde ve “everyone” kullanıcı grubuna ait bir kullanıcı eklenir. Buradan çıkan sonuç, yeni oluşturulan “jenkins” kullanıcısı mevcut Mac OS oturumunuzdaki admin hesabınızla erişebildiğiniz tüm servislere doğrudan erişemeyebilir. (git, gem, vs.) Bunun için gerekli izinleri kurgulamak biraz vaktinizi alabilir.
  • Jenkins ile command kutucuğundan “git” işlemleri yapmak için jenkins kullanıcısının home dizininde (/Users/Shared/Jenkins/Home/) bir ssh-key oluşturup; bitbucket’daki kullanıcınıza bu key’i eklemeniz gerekmektedir. Ayrıca .git/config dosyası içerisindeki https repository’yi, ssh modeline çevirmelisiniz.Örnek config dosyası:
  • Güvenlik için jenkins kullanıcısının tüm sistem işlevlerini rahatlıkla kullanması için “admin” grubuna terfi ettirmeyip, izinleri mutlaka kontrollü bir şekilde belirlemelisiniz.
  • Jenkins’in kurulu olduğu sunucunun bulunduğu ağda bir güvenlik duvarınız varsa Bitbucket bildirim sunucularının ip adreslerini white list’e ekleyebilirsiniz.
    Ip Adresleri:
  • Bitbucket’da SSH ile çalışma modeli için aşağıdaki bağlantıları inceleyebilirsiniz:
    https://confluence.atlassian.com/bitbucket/set-up-ssh-for-git-728138079.html
    https://confluence.atlassian.com/bitbucket/troubleshoot-ssh-issues-271943403.html
  • Bitbucket’dan gelen her commit ve push için trigger etmeyebilirsiniz. Dilerseniz bitbucket’tan yanlızca approved pull request’lerden sonra tetikle vs. gibi özel işlevler hazırlayabilirsiniz. Kurgu tamamen size kalmış.
  • Jenkins Plug-in Listesi için:
    https://wiki.jenkins-ci.org/display/JENKINS/Plugins
  • İhtiyaç duyulabilecek olan Mac OS Terminal Komutları

    Son Söz
    Ana hatları Continuous Integration ve Jenkins kurgusundan bahsetmeye çalıştım. Tüm başlıkları daha detaylı bir şekilde anlatmak isterdim; fakat kısa zamana ancak bu kadarını sığdırabildim. Belki yakın zamanda bu konuyla ilgili bir webinar hazırlayabilirim.

    Faydalı olması dileklerimle… :)

    Kaynaklar

  • https://jenkins-ci.org/
  • https://wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkins

ADB nedir? ADB ile Cihazınızdan Kablosuz Uygulama Çalıştırma

Android ADB

Bilindiği üzere ADB (Android Debug Device) Android geliştiricilerinin kullandığı bir komut kütüphanesidir. ADB, simülatör (sanal cihaz) ya da bilgisayarınıza bağlı gerçek cihazınızla iletişim kurulmasını sağlar. Client (istemci), server (sunucu) ve daemon (arka plan görevi, bekletici, vb. isimlendirilebilir) olmak üzere 3 bileşeni vardır.

Herhangi bir IDE ile (Android Studio, Eclipse vs.) Android proje geliştirirken gerçek cihazlarda çalıştırma (debug) gereksinimini kablosuz (Wi-Fi üzerinden) gerçekleştirmek için aşağıdaki adımları gerçekleştirebilirsiniz.

1. Adım: Cihazınızı USB kablosu ile bilgisayarınıza bağlayın.

2. Adım: Cihazınızla ilk kez uygulama debug işlemi yapacaksanız; “USB Debugging / Hata Ayıklama” özelliğininin yani “Geliştirici Modu” açık olması gerekmektedir. Bunu sağlamak için cihazı bağladıktan sonra gelen bilgilendirme kutularını onaylayın.

3. Adım: Terminal’de (komut istemi) “adb” yazıp; enter tuşuna basın. Karşınıza adb’nin komut listesi gelmiyorsa; terminalde küçük bir konfigürasyon yapmanız ya da adb’nin bulunduğu dizine gitmeniz gerekmektedir.

MacOS için terminalde iken aşağıdaki komutu yazarak terminalden adb’ye erişim sağlayabilirsiniz:

(Diğer işletim sistemleri için Google’da hızlı bir arama ile adb erişimi hakkında bilgi alabilirsiniz. Örnek:http://stackoverflow.com/questions/15201344/how-to-write-adb-commands-in-windows-7-command-prompt)

4. Adım: adb sunucusunu başlatmak için aşağıdaki komutu çalıştırın:

(Yeniden başlatmak için önce “adb kill-server”, daha sonra “adb start-server” komutlarını çalıştırabilirsiniz.)

5. Adım: Bağlı cihazları listelemek için aşağıdaki komutu çalıştırın:

6. Adım: Cihazınızın ip adresini ve bağlantı kurmak istediğiniz portu belirtip işlemi tamamlayın.

7. Adım: Artık USB kablonuzu çıkarıp, uygulamanızı kablosuz olarak cihazınızda debug edebilirsiniz.

Cihazınızın (telefon, tablet, vs.) ip adresini öğrenmek için:

1. Seçenek: Ayarlar (Settings) -> Hakkında (About) -> Durum (Status) -> Ağ (Network) bölümüne bakabilirsiniz.

2. Seçenek: Terminal’de aşağıdaki komutu çalıştırabilirsiniz:

Örnek çıktı:

Sonuç olarak adb ile uygulamanızı kablosuz debug edebiliyorsunuz; fakat kablo bağlantısına göre biraz daha yavaş olduğunu açıkça belirtmek de fayda var.

Faydalı olması dileğiyle,

İyi çalışmalar.

Kaynaklar:

http://developer.android.com/tools/help/adb.html

MacOS Android Studio [Error:Could not initialize class java.lang.UNIXProcess] Hatası

Merhaba,

MacOS platformunda yeni bir Android Studio kurulumundan sonra şöyle bir hata ile karşılaşabilirsiniz:

Çözüm olarak:

İyi çalışmalar.

Symfony2 Monolog ile Hata Bildirimleri Loglama ve E-Posta Bildirimleri

Bir yazılım projesinin olmazsa olmaz yapı taşlarından birisi Error ve Bug Tracker’dir (hata izleyicileridir). Geliştirdiğiniz bir Symfony2 web projesindeki hata bildirimlerini loglamak, soket servislerine ve bildirim sunucularına rapor göndermek için Monolog kütüphanesini kullanabilirsiniz.

Symfony2 ile default vendor (varsayılan) olarak gelen Monolog kütüphanesini diğer PHP projelerinde kullanmak için composer paket yöneticisini kullanıp doğrudan kurabilirsiniz.

Örnek Senaryo:

Yazılım projemizde 400 ve 500 serisi bir hata aldığımız zaman (401, 403, 404, 500 vs.) bunu istediğiniz bir dizindeki .log dosyasında depolasın ve özel bir formatta belirttiğimiz e-posta adresine iletsin. Bu log dosyasında -eğer oturum açıldıysa- oturum açan kullanıcı hakkında ek bilgiler de yer alsın.

Not: Oturum açan kullanıcının bilgisine ulaşmak için Symfony2 projenizde FOSUserBundle kurulu olmalı ve oturum açmış olmalısınız.

1. Adım: config_prod.yml (Geliştirme aşamasında config_dev.yml’ı kullanmalısınız.)

 2. Adım: config.yml

3. Adım: AppBundle/Controller/SessionRequestProcessor.php

 4. Adım: parameters.yml (Swift Mailer ile e-posta gönderimi için)

 5. Adım: config.yml (Swift Mailer ile e-posta gönderimi için)

 6. Adım: Bir hata yapın! :)

Her şey yolunda gittiyse belirttiğiniz dizine bir “hata.log” dosyası oluşmuş olacak ve e-posta kutunuzda yeni bir “Hata Bildirimi” göreceksiniz.

Hata bildirim seviyelerini (level) şöyle sıralayabiliriz:

Ek olarak Monolog ile elde ettiğiniz hataları log dosyasına yazdığınız gibi:

  • Redis, MongoDB, MySQL platformlarında da depolayabilirsiniz,
  • AMQB gibi kuyruk protokolllerine gönderebilirsiniz (rabbitmq),
  • HipChat, PushOver, Growl gibi yazılım ve servislere entegre edebilirsiniz.

Faydalı olması dileğiyle.

Kaynaklar:

 

Xcode ve Objective-C Eğitimi

Denizli Hackerspace online eğitim serilerimizden Xcode ve Objective-C Eğitimine Giriş sunumumda aşağıdaki konu başlıkları hakkında detaylı bilgi edinebilirsiniz.

  • Xcode Kurulumu
  • Xcode Tanıtımı, Proje Konfigürasyonu, Dizin Yapısı
  • Simulator Kullanımı ve Detaylı İpuçları
  • Storyboard ve Nesneler
  • İlk Uygulama: Merhaba Mobil!
  • Merak Edilen Konular
    • Apple Developer Olmak (iOS, Mac ve Safari)
    • Developer Hesabı Türleri ve Özel Kurallar (Bireysel ve Kurumsal Başvurular)
    • AppStore’da Uygulama Yayınlama Kuralları ve Süreci
    • AppStore’dan Para Kazanma Modelleri

OS X Yosemite Kurulumu (USB)

Kurulum için öncelike USB ortamında Yosemite OS X Installer’a ihtiyacınız var. Bunu edinmek için başka bir Mac bilgisayarından AppStore’a girip; bu bilgisayara tek dosyalık bir kurulum dosyası olarak (yaklaşık 6 GB) indirebilirsiniz.

Daha sonra yine en az 6 GB’lık bir flash disk’i cihazınıza bağlayın ve Terminal’den aşağıdaki komutu çalıştırın:

Şöyle bir çıktı alana kadar bekleyin:

Başarı ile bu aşamaya ulaştıysanız işlem tamamdır. USB belleği kurulum yapmak istediğiniz Mac’e takın (mount) ve bilgisayarı yeniden başlatın. Başlama esnasında alt tuşuna (option) basılı tutun. Karşınıza gelen ekrandan USB Belleği çift tıklayıp; kuruluma başlayın.

Kolay gelsin.