4 Ekim 2018 Perşembe

Yaz Nasıl Geçti ve Staj-2

 Evet bir yaz daha geride kalmış ve benim için dolu dolu geçmiş iken bu yazın bir blog yazısının olması gerektiğini düşündüm.

 Bu yaz ODC İş Çözümleri şirketinde staj yaptım. Okulum kapandıktan hemen sonra çalışmaya başladım. Okul açılana kadar da devam ettim. Bu staj benim ikinci stajım olduğu için biraz tecrübeli sayılırdım. Ama her şeye rağmen heyecan hep vardı.


 Staj boyunca Rest API ve UI ile ilgilendim. Api tarafında manuel olarak yapılan işleri arayüze taşıyıp daha kolay yapılmasını sağladım. Bu sırada hiç bilmediğim AngularJS öğrendim, az bildiğim Javayı da geliştirmiş oldum. Ve tabi ki daha bir sürü şey kattı. Çalışma süresince kendimi şirketin çalışanı gibi hissettim böylece iş hayatını tam olarak yaşamış oldum. Bence bu durumun her staj yerinde olmadığını düşünüyorum. Her gün yapılan durum toplantıları sayesinde tüm stajyer arkadaşlarımın neler yaptığını bilmek de bana çok katkı sağladı. Kulak dolgunluğum oldu :)


 Tabi ki sadece çalışmadım :D Bu yaza 2 festival, İstanbul'da bir sürü yeni yer, yeni lezzetler, yeni arkadaşlıklar da sığdırdım. Eğer hafta içi her gün çalışıyorsanız hele ki İstanbul'da iseniz sizin için gün ne kadar erken başlıyor biliyorsunuzdur. Eve döndüğünüzde sizin hayatınıza çok az bir vakit kalıyor. Bu yüzden hafta sonlarının kıymetini iyi anladım ve güzel değerlendirmeye çalıştım :)


 Benim eğlendiğim, eğlenirken öğrendiğim, ortaya bir şeyler çıkan verimli ve unutulmaz bir yazdı. Bu yazın bu kadar verimli geçmesini sağlayan Serdar Yiğit'e, taa Ankara'dan her zaman destek olan ve birlikte çok çalıştığımız Ahmet Can Kepenek'e, 'Siz neler yapıyorsunuz şuan?' diye sürekli yanlarına gittiğim Melih Korkmaz ve Oğuz Örcün'e, kısa da olsa çalışma fırsatım olduğu Sinan Dirlik ve Bünyamin'e buradan çok teşekkür ederim. Ve tabi ki her zaman Necdet Hocam'a da sonsuz teşekkür ederim.


                           


   Etkisinden uzun süre çıkamadığım Pentagram Konseri de burada anı olarak kalsın \o/                             








23 Ağustos 2018 Perşembe

$git stash Neden kullanılır ve Nasıl kullanılır?

     $git stash, o anki çalışma dizininizin durumunu ve index ini kaydedip daha sonra değişiklikleri geri getirmemizi sağlayan bir komuttur.

 Şöyle ki: bulunduğum projede bir takım değişiklikler yapıyorum. Bu değişiklikleri göndermeden önce projenin güncel halini çekmek istiyorum. $git pull komutunu girdikten sonra birde ne göreyim, conflict hatası ile karşı karşıyayım. Benim değişiklik yaptığım yerde daha önceden bir değişiklik olmuş ve bu yüzden bir çakışma mevcut. Bu sorunu halletmenin kısa yolu ise şöyle:

Var olan değişikliklerimiz $git status ile görüntülüyoruz:



Bu değişiklikleri $git stash diyerek kaydettik. 




Tekrar $git status yaptığımızda yerinde yok. Peki nerede?



 Tabi ki değişikliklerimiz burada. $git stash list yapılan değişiklikeri "WIP on <branchname>" mesajı ile görüntülüyoruz. 



 Tekrar değişiklik yapıp bu değişiklikleri kaydetmek istediğimizde $git stash komutunu kullanabiliriz.  
stash@{0} ve stash@{1}  olmak üzere iki tane değişikliğimiz kaydedilmiş olur. $git stash list çıktısı aşağıdaki gibi olur. 

Değişiklikleri geri getirmek için iki komut kullanılır. 
$git stash pop stash@{<revision>} ve 
$git stash apply  stash@{<revision>}
  Farkları ise  pop değişikliği geri getirdikten sonra listeden siler, apply listeden silmez.



Kaydedilen değişikliklerin farklarını görmek için: $git stash show -p 




Eğer "stash@{0}: WIP on <branchname>" mesajını değiştirmek istiyorsak:

Dosyada değişikliği yaptıktan sonra $git stash save "buraya mesaj gelecek" komutunu yazarak yazılan mesaj ile değişikliği kaydeder. Ekstra $git stash komutunu kullanmamıza gerek yok.



Değişikliği listeden silmek için: $git stash drop stash@{<revision>} 

Tüm değişiklikleri silmek için: $git stash clear

28 Temmuz 2018 Cumartesi

$scope ve $rootScope Nedir, Farkı


$scope Nedir?

 HTML ve JavaScript arasında ki bağlantıyı sağlayan angularJS nesnesidir. MVC'de ki view ile controller arasında ki bağlantıyı sağlayan modelimiz $scope'dur. Hem controller hem de view için kullanılabilir. Tüm $scope'lar $rootScope'un çocuğudur ve sadece bulunduğu controller altında çalışır. 


$rootScope Nedir?

 HTML ng-app içeren kısmın tamamını kapsar. AngularJS'de en baştaki tek $scope'tur. Diğer scopelar bu $rootScope'tan gelir. Aynı değişkenleri farklı controllerda kullanmak için $rootScope kullanılır.

Not: $rootScope projede kontrollünde zorluk yarattığı için kullanımı önerilmiyor.

Örnek:
<body> <div ng-app="burcinApp"> {{yaz}} <div ng-controller="thisController"> {{yaz}} </div></div> <script> var app=angular.module("burcinApp",[]); app.run(function($rootScope){ $rootScope.yaz="rootScope.."; }); app.controller("thisController",thisController); function thisController($scope){ $scope.yaz="scope"; } </script></body>

İlk {{yaz}} ifadesinde controller içerisinde olmadığı için $rootScope etki eder.
İkinci {{yaz}} ifadesinde controller içinde yazıldığı için controller da yazılan $scope
etki eder. Kodu çalıştırmak için tıklayınız.

27 Ekim 2016 Perşembe

STAJ-1

Üstünden biraz zaman geçsede ilk stajım hakkında genel bir yazı yazmasaydım içimde kalırdı :)



Bu yaz 2 ay boyunca Kaan'ın yanında Gamegos'ta ilk stajımı yaptım. Staja başlamadan önce "acaba ne olucak?", "acaba olucak mı?", "ne yapacağım şimdi ben?"(ne yapacağımı tabi ki önceden biliyordum :) )gibi bir sürü sorular vardı aklımda. Ama çalışmaya başladıktan sonra günlerin nasıl geçtiğini bile anlamadım.

Staja gitmeden önce bir ön hazırlık yaptım. Önceki blog yazılarımdan da anlaşıldığı üzere Docker imajları ile uğraştım. Staj boyunca hedefim ise Docker imajı olmayan bir uygulamanın imajını yapmaktı. Staj sonuna kadar da hedefimi gerçekleştirdim.

Staj benim için büyük bir ilerlemeydi. Örneğin ilk kez okuduğum belgeyi pek anlayamazken biraz daha araştırma yapıp tekrar belgeyi okuduğumda artık onu anlıyor olmak küçük sevinçlerimden biri oldu. Belge demişken acı bir gerçek var "her şey ingiliççe." İngilizcenin önemini bir kez ve bir kez daha anladım. Bir şeyden daha bahsetmek gerekirse Google'da doğru bir şekilde arama yapmayı öğrendim. Tabi ki hatasız kul olmaz :P Kesinlikle hatalarla karşılaşıyoruz. Karşılaştığımız bu hataları doğru sözcükler kullanarak arama yapabilirsek büyük ihtimalle çözüme ulaşabiliriz. Ve tabi ki yine ingiliççe ile :)

En güzel tecrübelerimden bir tanesi de İstanbul'da uzun (benim için uzun dünya için kısa) süre tek başıma yaşamak. Bu süre zarfında da İstanbul'un güzelliklerini de görmüş oldum. Kısacası hıphızlı geçen en süperli yazdı. Staj boyunca bana sürekli yardım eden Kaan'a ve tabi ki Necdet Hocama sonsuz teşekkürler :) 







7 Eylül 2016 Çarşamba

KIBANA

İmajını yaptığım Kibana nedir ve neler yapar kısaca bundan bahsedicem.

Kibana veriyi birden fazla boyutta gösterim sağlayan ve bu bağlamda veriyle etkileşime geçip kullanıcıya güçlü ve çarpıcı dashboardlar sunan açık kaynak kodlu veri görüntüleme platformudur. 


Bu kibana imajı ile neler yapabiliriz?


Bunu da kibana imajını çalıştırırken eğer istersek verebildiğimiz çevresel değişkenlerle anlatmak istiyorum.  
Aslında kibananın official imajı var ama imajı çalıştırırken bize sadece url ayarı yapabilme imkanı veriyor. Benim imajımda da bütün config dosyasındaki ayarları çevresel değişkenlerle ayarlayabiliyoruz.

Bu çevresel değişkenler nelerdir?

SERVER_BASEPATH
Bu değişkeni eğer proxy arkasında çalıştırmak ve bunun yolunu belirtmek istiyorsanız kullanırsınız. eğik çizgi ile bitirmeyin.


SERVER_MAX_PAYLOAD_BYTES
Eğer gelen sunucu isteklerinin maksimum yük boyutunu ayarlamak istiyorsanız kullanılır.


http://ELASTICSEARCH_HOST:ELASTICSEARCH_PORT

ELASTICSEARCH_HOST: hostunuzu bu değişkenle
ELASTICSEARCH_PORT: portunuzu da bu değişkenle belirtebilirsiniz.

KIBANA_INDEX
Kibana kayıtlı aramaları ve görsellikleri saklamak için Elasticsearch indeksini kullanır. Eğer bu indeks yoksa yeni bir indeks yaratır.

KIBANA_DEFAULT_APP_ID
Varsayılan uygulamayı yüklemek için.


ELASTICSEARCH_PING_TIMEOUT
Elasticsearh un pinglere cevap vermesi için milisaniye cinsinden zaman girilmesi beklenir.

ELASTICSEARCH_REQUEST_TIMEOUT
Elasticsearch ten gelen yanıtları beklemek geriye cevap verilmesi için de milisaniye cinsinden zaman girilmesi beklenir.


ELASTICSEARCH_STARTUP_TIMEOUT
tekrar deneme öncesinde 

PID_FILE
Yaratılması istenen işlem ıd dosyasının bulunmasını istediğiniz dizin.

LOGGING_DEST 
Log çıktı dosyasının yer almasını istediğiniz hedef dizin bununla  belirtilir.


LOGGING_SILENT
Log çıktılarının oluşmasını durdurmak için kullanılır.


LOGGING_QUIET
Hata mesajları dışındaki tüm log çıktılarının oluşmasını durdurmak için kullanılır.

LOGGING_VERBOSE
Tüm sistem kullanım bilgileri talepler ve etkinliklerin loglanması için kullanılır.


İmajı Çalıştırma

İmajı çalıştırmak için en temel komut :
docker run -d -p 5601:5601 -e
ELASTICSEARCH_HOST=your_elasticsearch_host burcina/kibana

Eğer çevresel değişkenler eklemek istiyorsanız -e parametresini kullanmanız gerekir.

Eğer kullanıcı değişkenini kullanmak istiyorsanız parola değişkenini de kesinlikle kullanmanız gerekir, aynı işlem tam tersi içinde geçerlidir. Bu girilen kimlik doğrulaması elasticsearch e ait olan kimlik doğrulamasıdır.
docker run -d -p 5601:5601 -e ELASTICSEARCH_HOST=your_elasticsearch_host -e ELASTICSEARCH_USER=your_user -e ELASTICSEARCH_PASS=your_password burcina/kibana

Gelen istekler için kendi ssl inizi kullanmak istiyorsanız volume kullanmanız gerekir. Bunu da -v parametresiyle belirtmeniz gerekir:


docker run -d -p 5601:5601 -e ELASTICSEARCH_HOST=your_elasticsearch_host -e SERVER_SSL_CERT=/path/to/your/container/server.crt 
-e SERVER_SSL_KEY=/path/to/your/container/server.key 
-v /path/to/your/host/cert/:/path/to/container/cert/ -v /path/to/your/host/key/:/path/to/your/container/key/ kibana

Aslında -v ile belirtilen sizin kendi bilgisayarınızda bulunan bir dosya yoludur. Böylece kendi bilgisayarınızda bulunan bir dosyayı imajı çalıştırırken kullanabilirsiniz.
Burada SERVER_SSL_CERT değişkeninde belirtmiş olduğunuz yol(path/to/your/container/) ile -v ile belirtmiş olduğumuz yerelimizde bulunan imajda kullanacağımız dosya yolu ile aynı olmalıdır. Aynı işlem SERVER_SSL_KEY içinde geçerlidir.
yani
/path/to/your/host/cert/:/path/to/container/cert/
Burda : önceki yol yerelimizde bulunan dosyanın yolu, : den sonraki yolda bu dosyanın kopyalanması gereken yeri temsil ediyor. Burda da
SERVER_SSL_CERT=/path/to/your/container/server.crt  konteynera kopyaladığımız yerden kullanmamızı sağlayan değişken.

Not: Bu kibana imajının sürümü 4.5.4
İmaj için ayrıntılar:
Github
Dockerhub

4 Eylül 2016 Pazar

KIBANA

What is Kibana?

Kibana is an open source data visualization platform that allows you to interact with your data through stunning, powerful graphics that can be combined into custom dashboards that help you share insights from your data far and wide.

What can we do with this Kibana image?

Actually there is an official Kibana image you can only set the host environment. But you can set all environments with this Kibana image I coded. 

What are these environment variables that we give?

SERVER_BASEPATH
If you are running kibana behind a proxy and want to mount it at a path, specify that path here. The basePath can't end in a slash.

SERVER_MAX_PAYLOAD_BYTES

The maximum payload size in bytes on incoming server requests.

ELASTICSEARCH_PRESERVE_HOST

Preserve_elasticsearch_host true will send the hostname specified in `elasticsearch`.

KIBANA_INDEX
Kibana uses an index in Elasticsearch to store saved searches, visualizations and dashboards. It will create a new index if it doesn't already exist.

KIBANA_DEFAULT_APP_ID
The default application to load.

ELASTICSEARCH_PING_TIMEOUT
Time in milliseconds to wait for elasticsearch to respond to pings, defaults to request_timeout setting

ELASTICSEARCH_REQUEST_TIMEOUT
Time in milliseconds to wait for responses from the back end or elasticsearch.

ELASTICSEARCH_SHARD_TIMEOUT
Time in milliseconds for Elasticsearch to wait for responses from shards.

ELASTICSEARCH_STARTUP_TIMEOUT
Time in milliseconds to wait for Elasticsearch at Kibana startup before retrying

PID_FILE
Set the path to where you would like the process id file to be created.

LOGGING_DEST
If you would like to send the log output to a file you can set the path below.

LOGGING_SILENT
Set this to true to suppress all logging output.

LOGGING_QUIET
Set this to true to suppress all logging output except for error messages.

LOGGING_VERBOSE
Set this to true to log all events, including system usage information and all requests.


Usage

The basic commands that can be executed:

docker run -d -p 5601:5601 -e ELASTICSEARCH_HOST=your_elasticsearch_host burcina/kibana

If you enter user environment variable, you must enter password environment. 
If you enter password environment variable, you must enter user environment.

docker run -d -p 5601:5601 -e ELASTICSEARCH_HOST=your_elasticsearch_host -e ELASTICSEARCH_USER=your_user -e ELASTICSEARCH_PASS=your_password burcina/kibana

docker run -d -p 5601:5601 -e ELASTICSEARCH_HOST=your_elasticsearch_host -e SERVER_SSL_CERT=/path/to/your/container/server.crt -e SERVER_SSL_KEY=/path/to/your/container/server.key -v /path/to/your/host/cert/:/path/to/container/cert/ -v /path/to/your/host/key/:/path/to/your/container/key/ kibana

The local file path that use in the image (-v) and path(path/to/your/container/) which we define with SERVER_SSL_CERT must be same. The same process is approved also for SERVER_SSL_KEY. 

/path/to/your/host/cert/:/path/to/container/cert/
Before ":" source is the path in our local pc. After ":" is target means that file to be stored.

SERVER_SSL_CERT=/path/to/your/container/server.crt
We can use it as we store in container.

Note: This is Kibana 4.5.4

24 Ağustos 2016 Çarşamba

.sh Dosyasıyla İlgili Not

-> Dockerfile için yazdığımız .sh uzantılı dosya set -e ile başlamalıdır.
set -e : Hata denetimini sağlar. Tüm komutların kontrolünü yaptıktan sonra hata çıkarsa komut iptal edilir.

-> Son olarakta exec “$@” ile bitirilir.
exec “$@” :
konteyner içinde çalışan uygulamanın PID 1 olur. Bu sayede uygulama için koteynera gönderilen Unix sinyallerini alırız. 
exec olmazsa çalıştırılabilir SIGTERM(sonlandırma sinyali) alamayacağımızdan dolayı docker stop <container>. exec kullandığımızda linux sinyallerini aldığımızdan emin olabiliriz.