Visul Studio Kod Metrikleri (Code Metrics)

Kod metrikleri, Visual Studio içinde yer alan kaynak kodları incelemek ve çeşitli ölçülere göre yazılımı derecelendirmek için kullanılan matematiksel ve istatistiksel yöntemlerdir. Kod metrikleri, bir projenin sınıflarını, modüllerini ve namespacelerini, çeşitli ölçülerle değerlendirerek potansiyel sorun kaynaklarını vurgular.

  • Lines of Code
  • Class Coupling
  • Depth of Inheritance,
  • Cyclomatic Complexity
  • Maintainability Index

Kod Metrikleri, Solution Explorer’da bir projeye veya solution üzerine sağ tıklayıp “Calculate Code Metrics” diyerek veya Analyze menüsünden “Calculate Code Metrics For Solution / Project” ile hesaplanabilir.

Codemetrics

Lines of Code

Lines of Code, bir metoddaki işletilebilir kod satır sayısını gösterir. Alfabe dışı karakterler, commentler, tip ve namespace tanımları bu hesaplamanın dışında kalır. Çok yüksek bir değer, bir tipin veya metodun çok fazla iş yaptığı, bu yüzden de bölünmesi gerektiği anlamına gelir.

Lines of code

Class Coupling

Bu metrik; sınıf seviyesinde, parametreler, yerel değişkenler, dönüş tipleri, method çağırımları, generic ilklemeler, base sınıflar, arayüz implementasyonları vb. aracılığıyla diğer sınıflarla olan bağlantı sayısını ölçer. Kısaca bu metrik bir sınıfın bağlı olduğu sınıf sayısını gösterir. Bu sayının mümkün olduğunca az olması beklenir. Çünkü yüksek coupling değerleri, bir tasarımın diğer sınıflara bağımlılıkları yüzünden, yeniden kullanılmasının ve bakımının güç olduğu anlamına gelir.

classcoupling

Depth of Inheritance

Kalıtım derinliği, bir sınıfın, kalıtım ağacında o sınıfın üst düğümünden köke kadar olan sınıfların sayısını gösterir. Hiyerarşi ne kadar derinleşirse, hangi metodların veya alanların nerelerde tanımlandığını veya yeniden tanımlandığını takip etmek de zorlaşır. Çok derin kalıtım ağaçları, uygulamanın testinin ve bakımının karmaşıklığını arttırır.

Depth of Inheritance

Cyclomatic Complexity

Cyclomatic Complexity programdaki birbirinden farklı kod akışlarının sayısıdır. Daha basitçe açıklamak gerekirse, programdaki karar noktaları olan if bloklarının, do, while, foreach ve for döngülerinin ve switch case bloklarının sayısıdır. Yüksek cyclomatic completixy değerine sahip olan kodların test ve bakımı zor olmaktır. Çünkü bu kodlarda test edilebilecek çok sayıda farklı akış vardır.

Cyclomatic Complexity

Cyclomatic Complexity(CC) değerini hesaplamak için aşağıdaki gibi basit bir yol izlenebilir.

  1. Metodun akışına CC= 1 değeri ile başla.
  2. Her bir if,while,repeat, for, and , or anahtar kelimeleri veya eşdeğerleri için CC’ye 1 ekle
  3. Switch’teki her bir case için CC’ye 1 ekle

Metodlar için cyclomatic complexity değerleri ve riskleri belirtilmiştir. Cyclomatic complexity değeri ne kadar yüksekse metodun karmaşıklığı da o kadar fazladır.

cyclomatic complexity tablo

Maintainability Index

Sınıf üyeleri veya tipler seviyesinde kod bakımının kolaylığına gösteren bu değişken 0-100 arasında bir değer alır. Bu değerin yüksek olması programın sürdürebilirlik seviyesinin yüksek olduğu anlamına gelir. Namespace veya assembly seviyesindeki maintainability index, o namespace veya assembly içerisindeki bütün tiplerin maintainability indexlerinin ortalamasıdır. Bu metrik, Halstead Volume, Cyclomatic Complexity ve Lines of Code metrikleri bir araya getirilerek oluşturulmuştur. Halstead Volume, kullanılan işlenen (operand) ve işlemcilerin (operator) sayısıyla ilgili bir metriktir. Maintainability index için kullanılan denklem aşağıda verilmiştir.

—MI = 171 – 5.2 * log2 (HV) – 0.23 * (CC) – 16.2 * log2 (LOC)

—HV: Halstead Volume
—CC: Cyclomatic Complexity
LOC: Lines of Code

Maintainability index, kolay bir gösterimi olması için ikonlarla ifade edilmiştir. İkonlar için, değer aralıkları ve sürdürebilirlik seviyeleri aşağıdaki gibidir.

maintainability index

Alıntıdır.

https://sametbulu.wordpress.com/tag/metrik/

WSL ile linux sunucusuna uzak masaüstü bağlantısı sağlama


WSL'in açılımı Windows Subsystem for Linux'tur. Basit olarak konuşursak sanal makine olmadan Linux terminalini Windows üzerinde kullanmanızı sağlamaktadır. Git Bash gibi bir kaç UNIX komutu eklenmiş toollara göre farklılık göstermektedir. WSL üzerinde direkt olarak Linux uygulamalarını çalıştırabilirsiniz

Windows Subsystem for Linux(wsl) 
wsl -l -v //versiyonları ile OS'leri gösteririr.

Ubuntu içerindeki kodlar;
lsb_release -a //OS versiyon detayını gösteririr.
cd //anadizine geçişi sağlar.
pwd //gerçerli working directory gösterilir.
sudo apt update && sodu apt -y upgrade //paketlerin güncellenmesi ve yükseltilmesi sağlanır.
sudo apt install xrdp //uzak masa üstü erişimi kurulur.
sudo apt install -y xfce4 //lightweight grafik arayüzü yüklenir.
sudo apt install -y xfce4-goodies
sudo cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.bak //xrdp configurasyonu sağlanıyor.
sudo sed -i 's/3389/3390/g' /etc/xrdp/xrdp.ini
sudo sed -i 's/max_bpp=32/#max_bpp=32\nmax_bpp=128/g' /etc/xrdp/xrdp.ini
sudo sed -i 's/xserverbpp=24/#xserverbpp=24\nxserverbpp=128/g' /etc/xrdp/xrdp.ini
echo xfce4-session > ~/.xsession
sudo nano /etc/xrdp/startwm.sh
	son iki satıraın başına # konulur.
	# xfce
	startxfce4
sudo /etc/init.d/xrdp start


Dağıtımımızın GUI halini kullanmak için xfce4 yazılımını kurmak gereklidir. Bunun için WSL terminalinde “sudo apt install xfce4” komutunu çalıştırmalıyız.
Kurulum sürerken karşınıza klavye dili ayarı gelecektir, bu işlemi isteğinize göre ayarlayabilirsiniz.
Daha sonra Kali Linux sistemine RDP (uzak masaüstü) bağlantılarını sağlamak için “sudo apt install xrdp” komutunu yazmalıyız.
Xrdp yüklemesi tamamlanınca servisini başlatmak için “sudo /etc/init.d/xrdp start” komutunu çalıştırmamız gerekiyor.
Bu işlemin hemen ardından terminalden “ip add” komutuyla eth0 altındaki IP adresinizi kopyalayıp Windows’unuz üzerinden Uzak Masaüstü Bağlantısı uygulamasına yapıştırarak artık uzak masaüstü bağlantısı gerçekleştirebilirsiniz.

Winrar ile logları rarlayıp yedek almak

Dosya olarak tutulan log kayıtları belirli zaman aralığında(task schedule) temizlenerek hem dosya fazlalığından hemde disk alanınızdan tasararruf edebilirsiniz.

//Yedekle
cd C:\Program Files\WinRAR 
rar a  -r "D:\Test_Backup\Yedek_Log_%DATE:~7,2%-%DATE:~4,2%-%DATE:~-4%_%TIME:~0,2%-%TIME:~3,2%-%TIME:~-5,2% .rar"  "C:\Users\celma\Desktop\test"

//Yedekli dosyaları sil
set folder="C:\Users\celma\Desktop\test"
cd /d %folder%
del /S /Q *.*

//Yedekli klasörleri sil
rd /S /Q “C:\Users\celma\Desktop\test\Tools_klasoru”
rd /S /Q “C:\Users\celma\Desktop\test\Winscp_klasoru”

Git komutları notlar

$ git config --global user.name "John Doe"
$ git config --global user.email "john@doe.org"


git init = Bu klasör artık bir git reposudur. Gizli bir .git klasörü oluşturur.
git status = Bu klasör içerisindeki dosyaların repo’ya aktarılıp aktarılmadığını görebiliriz. Kırmızı ile belirtilen tüm dosyalar eklenmemiştir. Burada dikkat edilmesi gereken nokta .gitignore dosyasıdır eğer sisteminizde .gitignore dosyası var ise burada yer alan dosyalarınız her zaman repoya eklenmez. Bunu bir güvenlik olarak görebiliriz örneğin laravel’de env dosyasında veritabanı vb. şifreler yer aldığı için git reposuna dahil edilmemesi gerektiği .gitignore dosyasında belirtilmiştir. Böyle olunca kullanıcılara .env dosyası paylaşılmaz.
git add dosya.php = Sadece bir klasör veya dosya’yı repoya eklemek istediğimizde.
git add * = Burada * (yıldız) yerine . (nokta) ‘da kullanabiliriz. Tüm dosya ve klasörleri Repo’ya ekler. Bu kod bazı windows sistemlerinde çalışmama durumları olabilmektedir. bu gibi durumlarda git config core.autocrlf true bu kodu çalıştırıp daha sonra git add * çalıştırmalıyız.
git log = Bu repo’da daha önce commit işlemi yapılmış mı bunun kontrolünü sağlıyoruz.
git commit -m “Kurulum Yapıldı” = Bu kısımda git add * ile repomuza eklediğimiz dosya ve klasörlere bir sürüm tarzı bir sistem ekleyerek bir açıklama ile repo’yu ayırıyoruz. Bu ayarlamada ilk işlem sırasında bazı bilgiler isteyebilir bunları git config user.email “mail@adresiniz.com” ve git config user.name “Ad Soyad” girmeniz gerekmektedir. Bu işlem yapıldığında bir hata almaz iseniz git reposu belirlenmiş olacaktır.
git reset –hard * = Bu kod ile ilgili repo’ya geri dönüşümüze imkan sunacaktır, git log ile kontrol ettiğimiz  commit numarasını * yazan kısma yazdığımızda ilgili sürüme tek tıklama ile geri dönüş yapabiliriz.
git reset --hard HEAD: tüm değişiklikler silinir.

git branch v1.1 = Yeni bir branch oluşturduk.
git branch = Mevcut branch’leri kontrol ediyoruz. Yanında * olan branch kullandığınız branch’tir.
git checkout v1.1 = Artık v1.1 branch’imizde geliştirme yapıyoruz ve burada yaptığımız branch’ler v.1′ hiç bir şekilde bozmayacaktır. En temel anlamıyla düşünürsek v1 klasörünü kopyalayıp yapıştırdığımızda adını v1.1 yaparak v1.1 üzerinde düzenleme yapma gibi düşünebiliriz.
git merge v1.1 = Artık v1.1 geliştirmesini tamamlayıp tüm sistemi master branch’inde toplamak istediğimizde bu kodu kullanarak v1.1 branch’ini master branch’ine aktarıyoruz.
git branch -D v1.1 = v1.1 branch’ini siliyoruz.


# Two-step method
git branch NEW-BRANCH-NAME
git checkout NEW-BRANCH-NAME

//Yeni branch yarat ve remote'a gönder
git checkout -b test //test branchi oluşturup ona geçiş yapar.
git push -u origin test //branchi remote'a gönderir.

Bu sayfa ile artık mevcut local sistemimizde ki git’i github’a aktarabiliriz.
git remote add origin https://github.com/yusufkahramaner/repoismi.git = Üst kısımda belirtilen github linkini giriyoruz.
git push origin master = Master kısmı branch adımız. Bu işlem sırasında size kullanıcı adı ve şifre sorarak github senkronizasyonunu yapar.
git clone https://github.com/yusufkahramaner/repoismi.git = Github reposunu local’e çekmek için bu kodu kullanabiliriz.
git remote remove origin = Git veya bitbucket ile bağlantıyı koparır.



git init
git remote add origin https://gitlab.com/cem.elma/NetCoreApp.git
git add .
git commit -m "ilkkayit"
git status
git commit -am "ikinci kayıt" --Burada ek olarak kullandığımız a harfi kayıt işlemini yaparken bütün değişikliğe uğramış dosyaları da kayıta ekleyecektir.
git diff --yapılan değişiklikleri görme
git reset —hard HEAD --Projenizi en son kayıt yapılan haline döndürebilirsiniz.
git fetch origin --master branchini çeker.
git push -u origin master https://gitlab.com/cem.elma/NetCoreApp.git


# Commit tarihçesindeki en son 5 commit kaydının bilgilerini listeleyin
git log -n 5 

# Geri dönmek istediğiniz commit’in hash değerini belirledikten sonra

git revert <commit_hash_ilk_7_karakter> --no-edit

# Yerel deponuzu uzak depo ile senkronize edin
git push


*git --version	//Git versiyonu gösterir.

*git update-git-for-windows	//güncel git versionunun kurulmasını sağlar.

git status //hangi dosyaları değiştirdiğinizi, sildiğinizi veya hangi dosyaları eklediğinizi kolayca görebilirsiniz.

git log //Projeniz için oluşturduğunuz commit'lerin tarihçesini incelemek için kullanılır.

git push //uzaktaki repository’de yayınlama

ls -la //gizli dosylar dahil listeleme yapılır.

//SSH oluşturma
ssh-keygen -t rsa -b 4096 -C "cem.elma@cts.com.tr"
eval "$(ssh-agent -s)" //SSH-Agent in arkada çalışıp çalışmadığı kontrolü yapılır.
ssh-add ~/.ssh/id_rsa //oluşturulan ssh key sisteme eklenir.
cat ~/.ssh/id_rsa.pub // ssh key görüntülenir.

oluşturulan key git üzerinde ssh key olarak eklenir.
ssh -T git@gitlab.com //Remote ile local ssh bağlantısı kontrolü testi yapılır.

git clone //remote proje locale çekilir.

Not: Untracked (Takip Edilmeyen, henüz gite eklenmemiş ve versiyon kontrolü altında olmayan dosyalardır), Tracked (Takip Edilen) dosyalardır.
Değişiklikler working folder(working copy), uzak sunucu ve Staging Area'da tutulur.
Staging Area'yı, proje dosyalarımızdaki bir dizi değişikliği remote repository'ye göndermeden önce kayıt altında tuttuğunuz veri tabanı/alan olarak tanımlayabiliriz.

git add baslik_2.md baslik_2_1.md resimler/*	//baslik_2.md ve baslik_2_1.md dosyaları ile resimler klasörü altındaki tüm dosyaların Staging Area'ya eklenmesini sağlayabiliriz.
git commit -m "1.7 numaralı alt başlık içeriği tamamlandı"

git checkout app/screens/LeaveList/index.js //son staging area bilgisine geri dönülür.
git restore app/screens/Login2/index.js


index.js değişiklik yapılır.
git add app/screens/LeaveList/index.js // Stage'a eklenir
git reset app/screens/LeaveList/index.js // Stage geri alınır.
git checkout app/screens/LeaveList/index.js // Değişiklik geri alınır.

git revert commitnumber

git reset --hard HEAD~1 //bir önceki commite döner ve son commiti siler.
git reset –hard Son gönderiye geri almak. Eğer birleştirme sonucu çakışmalar çıktı ise ve bu çakışmayı geri almak istiyorsanız bu kodu kullanabiliriz.

git reset –hard ORIG_HEAD veya git reset –hard origin/master En son birleştirilmiş stabil duruma geri döndürür. Daha yeni birleştirme işleri için kullanışlıdır. Eğer birleştirme işinizde çakışma varsa “git reset –hard” kullanınız.

git reset –soft HEAD^ Son gönderinizde bazı şeyleri unuttunuz mu? Bu durumdan kurtulmak kolay. Son gönderiyi geri almak istiyorsak ve yapılan değişikliklerinde bir yerlerde saklanmasını istiyorsak bu komutu kullanmalıyız.

git commit –amend Yaptığınız değişiklikleri koruyarak önceki gönderiyi yenilemek istiyorsak bu komutu kullanırız. Ayrıca önceki gönderi mesajını yenilemek içinde kullanılır bu komut.

git checkout – <dosya_adi> Sadece belirtilen dosyayı geri almak için kullanılır.

git restore --staged app/screens/LeaveList/index.js // stagedan dosya geri alınır.
git restore app/screens/LeaveList/index.js //dosya localdende geri alınır.
git reset --hard HEAD~1 //bir önceki commite döner ve son commiti siler.

//istenilen commite dönülür ve ilerisi silinir.
git reset --hard <last_working_commit_id>
git push --force

git reset HEAD^ --hard 

git branch -v: branchleri son commit


Yanlış dosyayı git add ile ekledim ne yapmalıyım?
git reset HEAD readme.md

En son commit’i nasıl geri alırım?
git add .
git commit -m "Ceviz Ekle"
git revert HEAD
Bunu yaptığınız da editörünüz açılacak ve sizden bir commit mesajı girmenizi isteyecektir. Ve en son committe yaptığımız değişikleri geri alan yeni bir commit oluşturacaktır.
Çıktıdan anladığımız kadarıyla revert komutu, aslında gerçek anlamda geri alma işlemi yapmıyor, aksine bir commitin etkilerini geri alan yeni bir commit oluşturuyor

git reset
Şimdi senaryomuza geri dönelim ve lokal branchta çalışırken revert’in oluşturduğu ekstra committen duyduğumuz memnuniyetsizlikle son commit’i geri alalım.
git reset HEAD~1


git stash //devam eden bir işi yarıda bırakıp farklı bir işe geçtiğimizde stashe kaydedebiliriz.
git stash list //ekli olan stashler listelenir.
git stash apply stash{0} //stashe geçiş yapılabilir.
git reset --hard HEAD~1 //stashsiz hale dönülebilir ve tanımlı başka stashe geçilebilir.
git stash pop // yukarıdaki listenin en üstünde yer alan değişiklik geri yüklenecek ve bu değişiklik listeden silinecek.
git stash drop stash@{1} // stash silinir.

git reset -–hard origin/master //masterdan son hali alır.

git add app/screens/LeaveList/index.js // stashe ekleme yapılır.
git reset HEAD app/screens/LeaveList/index.js // stashe eklemesi unstash yapılır.

git revert HEAD // son commite dönülür.
git revert --abort //Dönülen son commit iptal edilir.
git revert --continou revert commiti kabul edilir.
git commit --amend -m "cem commit mesaji düzenlendi." //son commit mesajiını düzenlemek için kullanılır.

//SON YAPILAN COMMITE EK YAPMAK İÇİN;
git add bar.md
git commit --amend --no-edit
git status

Git, bizim için yaptığımız işlemlere referans kaydı tutuyor. Yukarıda revert komutunu geri alırken kullandığımız gibi. git reflog ile HEAD@{n} ‘i takiben yapılan işlemle de ilgili açıklamalar. Tarihten bu kesitlere istediğiniz gibi ışınlanabilirsiniz tek yapmanız gereken git reset HEAD@{n} ile istediğiniz noktaya gidebiliriz.
git reset HEAD@{1} //


git show 6cb87924dc57 // Committe yapılan değişiklikler görüntülenir.
git show 6cb87924dc57 --stat // Committe yapılan değişiklikler sadece dosya adları görünür, içeriksiz.
git log -p 6cb87924dc57 040b42bd78bb3 //iki commit farkları

VİM EDITOR KAPAMA;
"Esc" + ":wq!" YADA "Esc" + ":q!"


git checkout master //komutu ile değişikliklerin aktarılacağı hedef branch'inizi aktif (HEAD) hale getirirsiniz.
git merge loginsorunu //komutu ile kaynak branch'deki commit edilmiş değişiklikler HEAD'e entegre edilir.


git init //git projesi eklenir.
git clone //git projesi çekilir.



git checkout -b Cem developer
git push origin Cem
git push origin --delete Cem //-D silmeye zorlar, -d siler.
git checkout -- . //bütün değişiklikleri siler.
git reset --hard UID : dosyanlarin eski halini de orjinal haline ceviriyor, kalıcı silinir commitler ve dosyalar.
git reset --soft UID : Git bu belirttiğimiz commiti ve sonrasındaki commitleri silecektir, düzenlenmiş dosyalar da Git’e eklenmiş hale gelecektir. Dosyalardaki değişiklikler bozulmayacaktır. Sadece commit silinir dosyalar localde kalır.
git reset --mixed UID : belirttiğimiz commiti ve sonrasındaki commitleri silecektir. Dosyalarımızdaki değişiklikler gitmeyecek ancak dosyalarımız Git’e eklenmemiş olacaktır, yani untracked hale gelecektir.
git commit --amend : reset ettikten sonra dosyalardaki degisikligi yapip yeniden ADD etmek lazim. ADD yaptiktan sonra bir commit gondermek yerine eski commit uzerine yaz diyebiliriz. amacimiz show log diyince yaptigimiz duzeltmenin gereksiz yere log da gorunmemesi idi. bunun icin git commit --amend yazmamiz yeterli.
git branch -v : Detayli olarak branchleri listeler.

git config --global alias.s status <- git komutunu alias yaptik artik git s yazinca git status calisacak ayarlar kullanicinin home directorysinde duruyor, vim ~/.gitconfig yazarak incelenebilir (hic alias yapilmamis ise boyle bi dosya yoktur, ilk basta birseyleri alias yap) bu dosyayi direk olarak editleyerek de alias eklenebilir. veya ilgili satirlari silerek aliaslar silinebilir.
git config --global -unset alias.s <- boyle manuel de silebiliriz.

ep 08 : stash
git stash <- bu komut ile o andaki dosyalari stahse atiyoruz.
git stash list <- tum shash yaptiklarimiz gorebiliriz. dosyalari degil sadece stash yaparak kaydettiklerimizi
git stash pop ve git stash apply <- stashe atilanlari geri cagiriyoruz. pop yazinca stash listden de siliyor.
git stash drop <- bunu yazincada stash lisri siliyor.

eger komutlarin sonuna stash id yazmazsak en son stash icin gecerli islemler. yok yazarsak sadece o yazdigimiz stash id icin islem yapiyor.
stash id degeri list yapinca 2 noktadan onceki string. su sekilde mesela: stash@{0}

stash yaptigimiz branchi silsek bile bir baska branchde git stash appyl falan yaapabiliriz. yyada yeni bir bbracnh acip ona stash edebiliriz.
git stash branch deneme <-- yeni bir branch acar deneme adinda ve orada stashi appy eder.

git pull origin developer //değişikliklerin branche alınmasını sağlar.
git fetch // uzaktaki verileri indirir fakat çalışma alanındaki veriler üzerine yazılmaz, git pullda ise remotedan çekilen veriler otomatik git merge gibi çalışır

ElasticSearch kısa kısa

//create alias
POST /_aliases
{
    "actions" : [
        { "add" : { "index" : "product_search_201910101123", "alias" : "alias_product" } }
    ]
}


GET  product_search_20*


//Remove alias
POST /_aliases
{
    "actions" : [
        { "remove" : { "index" : "product_search_201910101123", "alias" : "alias_product" } }
    ]
}



GET alias_product
GET _cat/aliases?v //tüm alias listesi

GET _cat/indices?v //tüm index listesi

get product_search_201910101501

tüm indexler listelenir;
http://localhost:9200/_cat/indices


DELETE product_search_201910101256


index datalarını görme;
GET product_search_201910101653/_search

GET product_search_201910101653/_search
{
  "query": {
    "term": {
      "name": {
        "value": "iphone"
      }
    }
  }
}
YADA
GET product_search_201910101653/_search?q=name:iphone



ÇOKLU indexe ALİAS ATAMA
POST /_aliases
{
    "actions" : [
        { "add" : { "index" : "i_product", "alias" : "a_product" } },
        { "add" : { "index" : "product_search_201910111157", "alias" : "a_product" } }
    ]
}



GET a_product/_search  //tüm indexlerin bilgileri getirilir
GET product_search_201910111157/_search //sadece belirlenen indexin verisi getirilir.


size: geriye dönecek olan result sayısı (default 10)
from: result içerisindeki offset (default 0)
fields: geriye dönmesini istediğiniz field’lar
sort: neye göre sıralama yapılacağı
facets: data içerisindeki belirli bir field(lar) özelinde özet bilgileri getirmektedir (örneğin bir e-ticaret sitesinde bir ürün aradığınızda, genelde sol menüde o ürün özelinde hangi renkten kaç adet, hangi markadan kaç adet mevcut olduğu bilgileri)
filter: makalenin ilerleyen bölümlerinde detaylı olarak ele alacağız ama özetle filtreler query’leri daha fazla özelleştirebilmek için kullanılır


{
  "from": 0,
  "size": 5,
  "query": {
    "filtered": {
      "query": {
        "term": {
          "name": {
            "value": "iphone"
          }
        }
      },
      "filter": {
        "range": {
          "price": {
            "gte": 3900,
            "lte": 5000
          }
        }
      }
    }
  }
}

INDEX YENİDEN ADLANDIRMA ve eskisini silme
POST /_reindex
{
  "source": {
    "index": "netcoreapp-log-2019.10.14"
  },
  "dest": {
    "index": "netcoreapp-log-2019.10.13"
  }
}

DELETE /netcoreapp-log-2019.10.14



BIRDEN ÇOK INDEXE ALIAS VERME
POST /_aliases
{
  "actions": [
    {
      "add": {
        "index": "netcoreapp-log-2019*",
        "alias": "a_netcoreapp-log"
      }
    }
  ]
}

GET netcoreapp-log-2019.10.12/_search?q=message:"mesajı"

Visual Studio Kod Metrikleri

Kod metrikleri en genel tanımıyla ; kaynak kodları incelemek ve çeşitli ölçülere göre yazılımı derecelendirmek için kullanılan matematiksel ve istatistiksel yöntemlerdir. Kod metrikleri yazmış olduğumuz sınıflarda , metodlarda, projelerde aksayan ve karmaşıklaşmış noktalar var mı bulmamıza yardımcı olur. Bunu bulurken 5 temel kavramı bilmek gerekiyor.

Class Coupling : Diğer sınıflarla olan bağlantı sayısını ölçer. Bu rakamın yüksek olması yazdığımız metodun dışa bağlı olduğunu gösterir.

Depth of Inheritance : İlgili nesnelerin kalıtım derinliğini ölçer.

Cyclomatic Complexity : Karar ifadelerini ölçer yani if else gibi. Bu rakamında yüksek çıkması kodun karmaşık ve bakımının zor olması demektir.

Lines of Code : Commentler haricinde kalan satır sayısını gösterir. Bu rakamı da küçük tutmak karmaşıklığı azaltır.

Maintainability Index : Sınıf üyeleri veya tipler seviyesinde kod bakımının kolaylığına gösteren bu değişken 0-100 arasında bir değer alır. Bu değerin yüksek olması programın sürdürebilirlik seviyesinin yüksek olduğu anlamına gelir.

Index = MAX(0,(171 – 5.2 * ln(Halstead Volume) – 0.23 * (Cyclomatic Complexity) – 16.2 * ln(Lines of Code))*100 / 171)

Projenizin kod metriklerini görebilmek için önce VS Analyze menüsünden Calculate Code Metrics for Solution’a tıklamanız yeterli.

Nor: https://koraykirdinli.wordpress.com/2010/09/27/visual-studio-kod-metrikleri/ adresinden alıntıdır.

NSSM – The Non-Sucking Service Manager yazılımı(uygulamayı windows servis olarak çalıştırmak)

http://nssm.cc/download ile herhangi bir exe uygulamasının windows servis gibi çalışmasını sağlayabiliriz.

exe uygulamasını servis olarak kurmak için cmd satırına;

nssm.exe install Kibana

Kurulan servis uygulamasını silmek için;

sc  delete Kibana

komutları çalıştırılabilir. Servis özelliklerinden Startup Type: Automatic yapılırsa bilgisayar açıldığında servis otomatik olark çalışır şekilde olacaktır.

Servis çalışmasını durdurmak için:;

sc queryex Kibana

PID değeri alınır ve cmd satırında aşağıdaki komut satırı çalıştırılır.

taskkill /f /pid PID

Your system administrator does not allow the use of saved credentials to log on the remote computer – RDP hatası çözümü

RDP bağlantısı yaparken aşağıdaki uyarıyı verip credentials’ı kayıt etmiyor ve her seferinde tekrar bir credentials girmenizi istiyorsa Group Policy üzerinde aşağıda ki ayarları yaparak credentials bilgilerini kayıt etmesini sağlayabilirsiniz.

Your system administrator does not allow the use of saved credentials to log on the remote computer – RDP hatası çözümü

Başlattan Çalıştır penceresinden gpedit.msc komutu çalıştırılır.

Computer Configuration -> Administrative Templates -> System -> Credentials Delegation dizininden aşağıdaki kayıtlar enable seçilir ve Options kısmından “Add Servers to the list” karşısındaki Show Contents butonuna tiklanir. Açılan Pencereden Value değerine: TERMSRV/* yazılır.
Allow delegating default credentials with NTLM-only server authentication.
Allow delegating default credentials.
Allow delegating saved credentials.
Allow delegating saved credentials with NTLM-only server authentication.

İşlemlerden hemen sonra başlat-Çalıştır penceresinden gpupdate/force komutunu çalıştırıp group policy update etmesini sağlıyoruz.
Bu işlemlerden sonra credentials kayıt edilecek ve her bağlantıda tekrar login bilgisi sorulmayacaktır.

This could be due to CredSSP encryption oracle remediation – RDP Hatası Çözümü

RDP ile uzak masa üstü bağlantısı yaparken aşağıdaki hatayı alabilirsiniz windows 10 güncellemeleri sonrasında.

This could be due to CredSSP encryption oracle remediation.

Bu hatanın çözümü için komut satırını yönetici olarak açtıktan sonra aşağıdaki komutu çalıştırmanız sorunu çözecektir.

REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters /v AllowEncryptionOracle /t REG_DWORD /d 2

sql kayıt satır işlemlerinde kurallar belirlemek

Öncelikle kraulımızı kaydediyoruz.

CREATE RULE Rule_MinusControl
AS
@deger >= 0

Rule atama
Exec sp_bindrule Rule_MinusControl,'[dbo].[ContractDetails].Balance’

Rule kaldırma
Exec sp_unbindrule ‘[dbo].[ContractDetails].Balance’

ContractDetails.Balance değerine 0 ve küçük bir değer atanması durumunda sql belirlediğimiz kural için hata mesajı dönecek ve istenmeyen kayıtların eklenmesini engelleyecektir.