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

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.

Package – Dapper.Net

Bir nuget paketidir ve amacı databaseden gelen verileri poco classlara sqlconnection ile atanmasını sağlamaktır.
Generic Query üzerinden, dönen result’ın belirtilen tipe göre eşleştirilmesi amaçlanmıştır.

*Aynen Ado.Net’ te olduğu gibi SqlConnection nesnesi kullanıyoruz.
*Normal bir SQL sorgusu çalıştırıp sonuçlarını doğrudan POCO(Plain Old CLR Object) tipinden bir listeye atabiliyoruz.
*for döngüsünde dynamic kullanımı söz konusu(Debug edip bakın)
*Query metoduna yapılan çağrı sonucu elde edilen liste üzerinden LINQ(Language INtegrated Query) kabiliyetlerini kullanabiliyoruz.
*Dapper.Net’in tek bir dll olarak geldiğini görüyoruz.
Classımız;

public class Category
    {
        public int CategoryID { get; set; }
 
        public string CategoryName { get; set; }
 
        public string Description { get; set; }
    }

Verilerin geitirilmesi;

 public IEnumerable ListOfCategories()
{            
    var connectionString = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;
    using (IDbConnection connection = new SqlConnection(connectionString))
    {
        return connection.Query("Select CategoryID,CategoryName,Description FROM Categories");
    };
}

XMLHttpRequest ile Resim Kaydetme

Resim yükleyip göstermek istediğimizde sayfada tekrar yükleme yapılmasını istemediğimiz durumlarda aşağıdaki yapıyı kullanabiliriz.

Controller;

[HttpPost]
public JsonResult Upload(string Url)
{
for (int i = 0; i < Request.Files.Count; i++)
{
HttpPostedFileBase file = Request.Files[i]; //Uploaded file
//Use the following properties to get file's name, size and MIMEType
int fileSize = file.ContentLength;
string fileName = file.FileName;
string mimeType = file.ContentType;
System.IO.Stream fileContent = file.InputStream;
//To save file, use SaveAs method
file.SaveAs(Server.MapPath("~/Content/") + fileName); //File will be saved in application root
}
return Json("Uploaded " + Request.Files.Count + " files");
}

Script;
<script>
 $(document).ready(function () {

 $("#fileInput").change(function () {
 var formdataDP = new FormData();
 var fileInputDP = document.getElementById('fileInput');
 if (fileInputDP.files.length > 0) {
 for (i = 0; i < fileInputDP.files.length; i++) {
 formdataDP.append(fileInputDP.files[i].name, fileInputDP.files[i]);
 }
 var xhr1 = new XMLHttpRequest();
 xhr1.open('POST', '@Url.Action("Upload", "Home")');
 xhr1.send(formdataDP);
 xhr1.onreadystatechange = function () {
 if (xhr1.readyState == 4 && xhr1.status == 200) {
 $("#profileimage").attr("src", "@Url.Content("~/Content/")" + fileInputDP.files[0].name);
 }
 }
 }
 else { alert("lutfen_bir_dosya_seciniz"); }
 });

 });
</script>

Style;
<style type="text/css" media="screen">
.third-effect .mask{ position: absolute;overflow: hidden;top: 0;left: 0;}
.third-effect img { display: block;position: relative;}
.third-effect a.info { background:url(@Url.Content("/images/upload.png")) center no-repeat;display: inline-block;text-decoration: none;padding:0;text-indent:-9999px;width:90px;height:90px;}
.third-effect { float: left;overflow: hidden;position: relative;text-align: center;box-shadow: 0px 0px 5px #aaa;cursor: default;}
.third-effect .mask { width: 90px; height: 90px; opacity: 0; overflow:visible;border:39px solid rgba(0,0,0,0.7);-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transition: all 0.4s ease-in-out;-moz-transition: all 0.4s ease-in-out;-o-transition: all 0.4s ease-in-out;-ms-transition: all 0.4s ease-in-out;transition: all 0.4s ease-in-out;}
.third-effect a.info { left: -39px; position:relative;top:-39px;opacity: 0;-webkit-transition: opacity 0.5s 0s ease-in-out;-moz-transition: opacity 0.5s 0s ease-in-out;-o-transition: opacity 0.5s 0s ease-in-out;-ms-transition: opacity 0.5s 0s ease-in-out;transition: opacity 0.5s 0s ease-in-out;}
.third-effect:hover .mask { opacity: 1;border:39px solid rgba(0,0,0,0.7);}
.third-effect:hover a.info { opacity:1;-moz-transition-delay: 0.1s;-webkit-transition-delay: 0.1s;-o-transition-delay: 0.1s;-ms-transition-delay: 0.1s;transition-delay: 0.1s;}
#fileInput{width: 90px;height: 90px;z-index: 100;position: absolute;left: 0px;top: 0px;-webkit-appearance: none;opacity: 0;}
</style>

CSHTML
<div class="third-effect">
 <img id="profileimage" src="" width="90" height="90" style="cursor: pointer">
 <div class="mask" style="cursor: pointer">
 <a href="#" class="info"><input name="fileInput" id="fileInput" type="file" /></a>
 </div>
</div>

Asp.Net IIS Express Cpu Kullanımı Sorunu

Visual Studio 2013 üzerinde, Asp.Net Mvc projesi geliştirirken (özellikle Orchard Cms ile) IIS Express çok yüksek işlemci kullanımı sergiliyor.

Enable Browser kod tarafında yaptığınız değişikliklerin, tarayıcıda otomatik olarak güncellenmesini sağlıyor.
Bu özelliği kapattığımızda işlemci kullanımı normalleşiyor.
Kapatmak için ise aşağıdaki adımı uygulayarak, Enable Browser Link solundaki tiki kaldırın.

vs