<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Nuray Kılıç on Medium]]></title>
        <description><![CDATA[Stories by Nuray Kılıç on Medium]]></description>
        <link>https://medium.com/@nuraykilic?source=rss-11942fb66f01------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*y3Q2qAiFxkujS4ThznFJ_Q@2x.jpeg</url>
            <title>Stories by Nuray Kılıç on Medium</title>
            <link>https://medium.com/@nuraykilic?source=rss-11942fb66f01------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 04:33:51 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@nuraykilic/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Angular Öğreniyorum #3 Data Binding Yapısı]]></title>
            <link>https://medium.com/@nuraykilic/angular-%C3%B6%C4%9Freniyorum-3-data-binding-yap%C4%B1s%C4%B1-32ab4189bfcf?source=rss-11942fb66f01------2</link>
            <guid isPermaLink="false">https://medium.com/p/32ab4189bfcf</guid>
            <category><![CDATA[angular]]></category>
            <category><![CDATA[data-binding]]></category>
            <category><![CDATA[data-binding-in-angular]]></category>
            <dc:creator><![CDATA[Nuray Kılıç]]></dc:creator>
            <pubDate>Wed, 19 Jul 2023 08:34:19 GMT</pubDate>
            <atom:updated>2023-07-19T08:34:19.302Z</atom:updated>
            <content:encoded><![CDATA[<p>Merhabalar, nasılsınız umarım iyisinizdir.</p><p>Öğrenme serime devam ediyorum. Bu yazımda <strong>Data Binding Yapısı</strong> hakkında detaylı bilgi vereceğim.</p><p>Umarım okumaktan keyif alırsınız.</p><h3>Data Binding Nedir?</h3><ul><li>Component classta bulunan bir veri modelinin template’deki bir alan veya DOM nesnesi ile senkronize etmek için kullanılan mekanizmadır.</li></ul><blockquote>Data Binding bağlantı yapısına göre değişir. Bunlar ise şöyledir:</blockquote><ul><li><strong><em>Text Interpolation</em></strong></li><li><strong><em>Property Binding</em></strong></li><li><strong><em>Event Binding</em></strong></li><li><strong><em>Two Way Binding</em></strong></li><li><strong><em>Attribute Binding</em></strong></li><li><strong><em>Class Binding</em></strong></li><li><strong><em>Style Binding</em></strong></li></ul><h4>1 - Text Interpolation</h4><ul><li>Component class içerisinde tanımlanan bir field/property’nin template(html sayfası) yazdırılmasıdır. Bir örnekle açıklayalım.</li><li><strong><em>ng g c FirstProject </em></strong>komutuyla bir component oluşturduk.</li></ul><pre>import { Component } from &#39;@angular/core&#39;;<br><br>@Component({<br>  selector: &#39;app-root&#39;,<br>  templateUrl: &#39;./app.component.html&#39;,<br>  styleUrls: [&#39;./app.component.css&#39;]<br>})<br>export class AppComponent {<br>  title = &#39;First Project&#39;;<br>}</pre><ul><li>Daha sonra AppComponent içinde bulunan <strong><em>title </em></strong>field’ını template.html sayfasında görüntüleyeceğiz. Bunun için ‘<strong>{{ }}’ </strong>çift süslü parantezler içerisine field yazarak görüntülemeyi sağlıyoruz.</li><li>Çıktı ise şöyle olacaktır: <strong>First Project app is running!</strong></li></ul><pre>&lt;span&gt;{{ title }} app is running!&lt;/span&gt;</pre><h4>2- Property Binding</h4><ul><li>‘[ ]’ köşeli parantezler içinde kullanılır. Bir Html elementinin bir özelliğini componentte bulunan veri modelindeki değere bağlamaya yarar.</li><li>Projeye app.component dışında home adında başka bir component oluşturuyorum.</li><li>Home componentte bir Input nesnesi oluşturuyorum.</li></ul><pre>import { Component, Input } from &#39;@angular/core&#39;;<br><br>@Component({<br>  selector: &#39;app-home&#39;,<br>  templateUrl: &#39;./home.component.html&#39;,<br>  styleUrls: [&#39;./home.component.css&#39;]<br>})<br>export class HomeComponent {<br>  @Input() pageName: string;<br>}</pre><ul><li>Ve home componentin selector tag’ini app.component.html template’inde kullanıyorum.</li><li>app-home tagine artık pageName adından bir property bind edebiliriz.</li><li>Property’e ise app.componentte bulunan title nesnesini vererek property bind işlemini tamamlamış oluruz.</li></ul><pre>  &lt;span&gt;{{ title }} app is running!&lt;/span&gt;<br><br>  &lt;app-home [pageName] = &quot;title&quot;&gt;&lt;/app-home&gt;</pre><ul><li>Şöyle bir çıktı almış oluruz.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/502/1*jcP1t2Xoh2kWy0iVV_mxfg.png" /></figure><h4>3- Event Binding</h4><ul><li>Template içerisindeki bir DOM nesnesinin component classı içinde tanımlı bir nesneye event bağlanmasıdır.</li><li>app.component.html sayfama bit button ekliyorum.</li></ul><pre>&lt;button (click)=&quot;btnClickFunc()&quot;&gt;Click&lt;/button&gt;</pre><ul><li>Eventleri çağırırken ( ) parantez içine yazılmalıdır.</li><li>Butona ise click eventini ekliyoruz ve bir fonksiyona bağlıyoruz. Bu fonksiyonu ise app.component.ts dosyamızda yazıyoruz.</li></ul><pre>import { Component } from &#39;@angular/core&#39;;<br><br>@Component({<br>  selector: &#39;app-root&#39;,<br>  templateUrl: &#39;./app.component.html&#39;,<br>  styleUrls: [&#39;./app.component.css&#39;]<br>})<br>export class AppComponent {<br>  title = &#39;FirstProject&#39;;<br><br>  btnClickFunc(){<br>    console.log(&quot;Button clicked&quot;);<br>  }<br>}</pre><p>NOT: Bir butona birden fazla event tanımlayabiliriz. Buna ise <strong>Multiple Event Handlers</strong> denir.</p><h4><strong>4- Two-Way Data Binding</strong></h4><ul><li>Bir Html nesnesi değiştiğinde, o nesneye bind edilmiş ve ilgili component classında bulunan field/property de anlık olarak değişmesidir.</li><li>Tam tersi de gerçekleşir ve bu <strong>Two-Way Data Binding</strong> olarak adlandırılır.</li><li><strong>Change Detection Algoritması</strong>nı kullanır.</li><li>Two-Way Data Binding işleminin syntax yapısı şu şekildir. =&gt; ‘ <strong>[( )] ’</strong></li><li>Two-Way Data Binding işlemi <strong>[(ngModel)]</strong> directive ile sağlanır.</li><li>ngModel directive, Property Binding ve Event Binding’in birleşimi olarak düşünülebilir.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/624/0*Gc5lUIT0nhTKfJmj.png" /></figure><ul><li>Two-Way Data Binding yapabilmek için input nesnelerine [(ngModel)] directive ekleyeceğiz.</li><li>Not: Input nesnensini html sayfamıza ekleyebilmek için input nesnesini içeren FormsModule’ü app.module classına import etmeliyiz.</li></ul><pre>import { NgModule } from &#39;@angular/core&#39;;<br>import { BrowserModule } from &#39;@angular/platform-browser&#39;;<br><br>import { FormsModule } from &#39;@angular/forms&#39;;<br><br>@NgModule({<br>  declarations: [<br>    AppComponent<br>  ],<br>  imports: [<br>    BrowserModule,<br>    FormsModule<br>  ],<br>  providers: [],<br>  bootstrap: [AppComponent]<br>})<br>export class AppModule { }</pre><ul><li>Daha sonra input nesnemizi oluşturuyorum. ngModel directive ile oluşturduğum değişkene bağlıyorum.</li><li>Ve iki tarafta değiştiğini görmek için değişkeni intepolation ile görüntülüyorum.</li></ul><pre>import { Component } from &#39;@angular/core&#39;;<br><br>@Component({<br>  selector: &#39;app-root&#39;,<br>  template:`<br>  &lt;h5&gt;Two-Way Data Binding&lt;/h5&gt;<br><br>  &lt;input [(ngModel)]=&quot;inputText&quot;&gt;<br><br>  &lt;p&gt;{{ inputText }}&lt;/p&gt;<br>  `,<br>  styleUrls: [&#39;./app.component.css&#39;]<br>})<br>export class AppComponent {<br>  inputText: string = &quot;Hello Angular!&quot;<br>}</pre><ul><li>Ve aşağıda çıktıyı görüyoruz. İnput değiştikçe değişkenimiz de değişiyor. Two-Way Data Binding mekanızmasını görmüş olduk.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/454/1*-SpD6h4h1JUDJkQG0frhOw.gif" /></figure><h4>5- Attribute Binding</h4><ul><li>Html nesnelerine attribute verebiliriz ve bu attribute değerlerini ise doğrudan component classtan verebiliriz.</li></ul><pre>import { Component } from &#39;@angular/core&#39;;<br><br>@Component({<br>  selector: &#39;app-root&#39;,<br>  template:`<br><br>  &lt;p [attr.aria-label]=&quot;actionName&quot;&gt;{{actionName}} Attribute Bindig &lt;/p&gt;<br>  `,<br>  styleUrls: [&#39;./app.component.css&#39;]<br>})<br>export class AppComponent {<br>  actionName:string = &quot;Action Name&quot;;<br>}</pre><h4>5- Style ve Class Binding</h4><ul><li>Html nesnesine style ve class özellikleri verebilmeye yarar.</li></ul><pre>import { Component } from &#39;@angular/core&#39;;<br><br>@Component({<br>  selector: &#39;app-root&#39;,<br>  template:`<br>  &lt;p [style.border]=&quot;border&quot;&gt;Attribute Bindig &lt;/p&gt;<br>  `,<br>  styleUrls: [&#39;./app.component.css&#39;]<br>})<br>export class AppComponent {<br>  border:string = &quot;1px solid green&quot;;<br>}</pre><p>Son olarak Change Detection Algoritmasından bahsedelim.</p><blockquote><strong>Change Detection Algoritması (Değişiklik Algılama):</strong> Componentlerin veri modelindeki değişiklikleri algılayarak ve HTML arayüzünü bu değişikliklere göre güncelleyerek çalışan bir algoritmadır. Angular, uygulamanızdaki bileşenlerin veri modelini izler ve veri modelindeki değişikliklerin htmlde yansıtılmasını otomatik olarak sağlar.</blockquote><h3>Kaynaklar</h3><ul><li><a href="https://www.youtube.com/playlist?list=PLQVXoXFVVtp1DcC4z0euk71_ICphrOEFV">Gençay Yıldız Youtube Angular Eğitim Serisi</a></li><li><a href="https://angular.io/">Angular.io</a></li></ul><p>Beni <a href="https://www.linkedin.com/in/nuraykilic/"><em>LinkedIn</em></a><em> </em>hesabımdan takip edebilir veya bağlantı kurabilirsiniz. Zamanınızı ayırdığınız için teşekkürler. Bir sonraki yazımızda görüşmek üzere kendinize iyi bakınn…</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=32ab4189bfcf" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Angular Öğreniyorum 2# Angular Temel Yapı Taşları]]></title>
            <link>https://medium.com/@nuraykilic/angular-%C3%B6%C4%9Freniyorum-2-eb9439b36e?source=rss-11942fb66f01------2</link>
            <guid isPermaLink="false">https://medium.com/p/eb9439b36e</guid>
            <category><![CDATA[angular]]></category>
            <category><![CDATA[angular-15]]></category>
            <dc:creator><![CDATA[Nuray Kılıç]]></dc:creator>
            <pubDate>Fri, 09 Jun 2023 12:04:09 GMT</pubDate>
            <atom:updated>2023-07-17T13:56:30.816Z</atom:updated>
            <content:encoded><![CDATA[<p>Merhabalar, nasılsınız umarım iyisinizdir.</p><p>Bir önceki yazımda Angular’a giriş yapmıştık şimdi ise <strong>Angular’ın Temel Yapı Taşlarını</strong> detaylı ve örneklerle anlatacağım.</p><p>Umarım okumaktan keyif alırsınız. Let’s get started!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/745/0*xqiEn7WStgKEqSkT.png" /></figure><p>Başlamadan önce yukarıdaki angular mimari yapısını biraz inceleyin ve incelemeniz sonundaki bilgileri cebimize koyarak ilerleyelim.</p><p>Ek olarak Angular’ın MVC(Model-View-Controller) patterini temel aldığını ve çift yönlü veri akışı olduğunu bilerek ilerleyelim.</p><h4><strong>Angular’ın Temel Yapı Taşları</strong></h4><ul><li>Components</li><li>Modules</li><li>Dependecny Injection</li><li>Directives</li><li>Services</li><li>Decorators</li><li>Templates</li><li>Metadatas</li><li>Data Binding</li><li>Guards</li><li>Pipes</li></ul><p>madde olarak sıralayabiliriz. Kısaca hepsinden teorik olarak bahsedeceğim. Diğer yazılarda örneklerle güçlendiririz.</p><h3>1. Components (Bileşenler)</h3><ul><li>Uygulamanın UI katmanını ifade eder.</li><li>Yapısal olarak her component, HTML şablonu, CSS style ve iş mantığını içeren TypeScript dosyasından oluşur.</li><li>Veri modeliyle etkileşim kurup kullanıcıya sunar.</li><li>Veri modeliyle etkileşim için <em>Data Binding</em> kullanırlar.</li><li>Componentler birbiriyle ilişkilendirilebilir</li><li>Karmaşık uygulamaları daha küçük, yeniden kullanılabilir parçalara bölmek için Component yapısı kullanılır.</li><li>Basit bir component örneği şöyledir:</li></ul><pre>import { Component } from &#39;@angular/core&#39;;<br><br>@Component({<br>  selector: &#39;app-about&#39;,<br>  templateUrl: &#39;./about.component.html&#39;,<br>  styleUrls: [&#39;./about.component.css&#39;]<br>})<br><br>export class AboutComponent {<br><br>}</pre><ul><li>Componenti kullanmak için selector adını tag şeklinde yazarak kullanırız. Tag arasına html de yazabiliriz.</li></ul><pre>&lt;app-about&gt;&lt;/app-about&gt;<br><br>// Html ile kullanım<br>&lt;app-about&gt;<br>    &lt;h2&gt;Hello World&lt;/h2&gt;<br>    &lt;p&gt;This is my first about component!&lt;/p&gt;<br>&lt;/app-about&gt;</pre><h3>2. Modules (Modüller)</h3><ul><li>Angular, uygulamaları modules halinde organize eder.</li><li>Modules, uygulamanın parçalarını (component, service vs.) bir araya getirerek bir bütün olarak kullanmayı sağlar.</li><li>Her uygulamada en az bir modul yer alır ve genellikle uygulama modulü(app.module.ts) olarak isimlendirilen ana modul vardır.</li><li>Bir modul başka bir modulde kullanılacaksa import edilmelidir.</li><li>Moduller DI(Dependency Injection) kullanarak uygulamadaki ögeler arasında bağımlılıkları yönetmektedir. Bu durum test ve bakım aşamasında kolaylık sağlmaktadır.</li><li>Temel bir modul örneği ise şöyledir:</li></ul><pre>import { NgModule } from &#39;@angular/core&#39;;<br>import { BrowserModule } from &#39;@angular/platform-browser&#39;;<br><br>import { AppComponent } from &#39;./app.component&#39;;<br>import { HomeComponent } from &#39;./home/home.component&#39;;<br>import { AboutComponent } from &#39;./about/about.component&#39;;<br><br>@NgModule({<br>  declarations: [<br>    AppComponent,<br>    HomeComponent,<br>    AboutComponent<br>  ],<br>  imports: [<br>    BrowserModule<br>  ],<br>  providers: [],<br>  bootstrap: [AppComponent]<br>})<br>export class AppModule { }</pre><h3>3. Dependency Injection</h3><ul><li>Var olan ögeler arasındaki bağımlılıkları yönetmek için DI pattern kullanılır.</li><li>Bir logger class’ımız olsun ve onu başka bir componentte kullanalım. Örneği ise şöyle:</li></ul><pre>import { Injectable } from &#39;@angular/core&#39;;<br><br>@Injectable({providedIn: &#39;root&#39;})<br>export class Logger {<br>  writeCount(count: number) {<br>    console.warn(count);<br>  }<br>}</pre><ul><li>UserService adında da bir componentimiz olsun. Logger classını burada contructor da inject edip kullanacağız.</li></ul><pre>import { Component } from &#39;@angular/core&#39;;<br>import { Logger } from &#39;../logger.service&#39;;<br><br>@Component({<br>  selector: &#39;app-user&#39;,<br>  templateUrl: &#39;./user.component.html&#39;<br>})<br>export class UserService{<br>  count = 0;<br><br>  constructor(private logger: Logger) { }<br><br>  onLogMe() {<br>    this.logger.writeCount(this.count);<br>    this.count++;<br>  }<br>}</pre><ul><li>onLogMe() fonksiyonunda this.logger ile Logger classındaki propertylere ve methodlara erişebilliriz.</li><li>Son olarak classlarımızı appModule ekleyelim.</li></ul><pre>import { NgModule } from &#39;@angular/core&#39;;<br>import { BrowserModule } from &#39;@angular/platform-browser&#39;;<br><br>import { AppComponent } from &#39;./app.component&#39;;<br>import { Logger} from &#39;./logger.service&#39;;<br>import { UserService } from &#39;./user.service&#39;;<br><br>@NgModule({<br>  declarations: [AppComponent],<br>  imports: [BrowserModule],<br>  providers: [LoggerService, UserService], // Bağımlılıkları sağlayan servisleri burada tanımlıyoruz<br>  bootstrap: [AppComponent],<br>})<br>export class AppModule {}</pre><h3>4. Directives (Direktifler-Yönerge)</h3><ul><li>Html nesnelerinin davranışlarını değiştirmek ve uygulamaya özel özellikler eklemek için kullanılır.</li><li>Angular’ın default tanımlı directives bulunur (ngIf, ngFor vb.).</li><li>Uygulamanın dinamik ve etkileşimli olmasını directives sağlar.</li><li>Ayrıca özelleştirilmiş directives de oluşturabilirsiniz.</li></ul><h3>5. Services (Servisler)</h3><ul><li>Genelde dış servislerle (API vb.) iletişim kurmak, karmaşık iş operasyonlarını yürütmek veya componentler arası iletişimi sağlayabilmek için kullanılan yapılardır.</li><li>Genellikle DI kullanılarak componentlere inject edilir.</li></ul><h3>6. Decorators</h3><ul><li>Typescript dilinin bir özelliğidir ve Angular tarafından kullanılır.</li><li>Decorators, classları, componentleri, servisleri ve diğer yapıları işaretlemek ve davranışlarını veya özelliklerini değiştirmek için kullanılan özel işaretleyicilerdir.</li><li>Decorators, `@` sembolü ile başlar ve classlara, class üyelerine uygulanır.</li><li>Angular’da sık kullanılar decorators ise şöyledir:</li></ul><ol><li><strong><em>@Component</em></strong><em>: Componentleri işaretlemek için kullanılır. Bir componentin görünümünü, şablonunu, stillerini ve diğer özelliklerini tanımlamak için </em><strong><em>@Component</em></strong><em> decorator kullanılır.</em></li><li><strong><em>@Directive</em></strong><em>: Özel directives oluşturmak için kullanılır. Bir directive, HTML elementinin davranışını değiştirmek veya uygulamaya özel özellikler eklemek için kullanılır.</em></li><li><strong><em>@Injectable</em></strong><em>: Servisleri işaretlemek için kullanılır. Servislerin dependency injection ile kullanılabilmesi için </em><strong><em>@Injectable</em></strong><em> decorator eklenir.</em></li><li><strong><em>@NgModule</em></strong><em>: Modülleri işaretlemek için kullanılır. Bir modül, birlikte çalışan componentleri, directive’leri, servisleri ve diğer özellikleri gruplandırır. </em><strong><em>@NgModule</em></strong><em> decoratorü, modülün özelliklerini belirlemek için kullanılır.</em></li><li><strong><em>@Input</em></strong><em>: Componente giriş verileri sağlamak için kullanılır. Böylece bir component, bir üst componentten gelen veriyi alabilir.</em></li><li><strong><em>@Output</em></strong><em>: Componentten çıkış verileri yayınlamak için kullanılır. Böylece bir component, bir üst componente veri iletebilir.</em></li></ol><h3>7. Templates (Şablonlar)</h3><ul><li>Componentlerin Html kısımlarıdır.</li><li>Data Binding özelliğini desteklemektedirler.</li></ul><h3>8. Data Binding (Veri Bağlama)</h3><ul><li>Veri modeli ile template’ler arasında dinamik veri akışı sağlar.</li><li>Anlık değişimler otomatik olarak sayfalara yansıtılır.</li><li>Two-way data binding özelliği ile çalışmaktadır.</li><li>Detaylı olarak daha sonra inceleyeceğiz.</li></ul><h3>9. Guards (Koruyucular)</h3><ul><li>Route erişimlerini Guard yapılanması üzerinden gerçekleştirilmektedir.</li><li>Sayfalar arası geçişlerde kullanıcı erişimine izin verilip verilmeyeceğine karar verir.</li><li>Güvenlik ve gizlilik Guard tarafından sağlanır.</li><li>Angular’da dört tür guard vardır:</li></ul><ol><li><strong>Route Guards (Rota Koruyucuları):</strong> Route guards, gezinme işlemi sırasında route erişimin izin verilip verilmeyeceğini kontrol etmek için kullanılır. Bu, kullanıcının belirli bir route’a erişim hakkı olup olmadığını denetlemek veya bazı koşulların sağlanması için kullanılabilir. Angular’da beş tür route guard bulunur:</li></ol><ul><li><strong>CanActivate</strong>: Bir route’a erişim izni verilip verilmeyeceğini kontrol eder.</li><li><strong>CanActivateChild</strong>: Bir route’un alt route’larına erişim izni verilip verilmeyeceğini kontrol eder.</li><li><strong>CanDeactivate</strong>: Bir route’tan ayrılmadan önce izin verilip verilmeyeceğini kontrol eder.</li><li><strong>CanLoad</strong>: Bir modülün yüklenip yüklenemeyeceğini kontrol eder.</li><li><strong>Resolve</strong>: Bir route‘’un yüklenmeden önce belirli verilerin alınmasını sağlar.</li></ul><ol><li><strong>Router Event Guards (Yönlendirici Olay Koruyucuları):</strong> Router event guards , gezinme işlemleri sırasında belirli olaylara yanıt olarak çalışan guard’lardır. Bu guard’lar , <strong>NavigationStart</strong>, <strong>NavigationEnd</strong>, <strong>NavigationCancel </strong>gibi olaylara yanıt vererek gezinme işlemlerini kontrol etmeye yarar.</li><li><strong>CanActivateChild Guards (CanActivateChild Koruyucuları):</strong> Bu guard’lar, routen alt route’larına erişim izninin verilip verilmeyeceğini kontrol etmek için kullanılır. Bu, bir route’ın alt route’larında belirli koşulların sağlanması gerektiği durumlarda kullanışlıdır.</li><li><strong>CanDeactivate Guards (CanDeactivate Koruyucuları):</strong> Bu guard’lar, bir route’dan ayrılmadan önce izin verilip verilmeyeceğini kontrol etmek için kullanılır. Örneğin, bir formun doldurulduğunda veya değiştirildiğinde kullanıcının çıkış yapmadan önce onay vermesi gerekebilir.</li></ol><p>Guards, @<strong>Injectable </strong>dekoratörü ile işaretlenen servisler olarak uygulanır ve ilgili arayüz veya soyut sınıfı implemente ederek kullanılır. Guarda, <strong>canActivate</strong>, <strong>canActivateChild</strong>, <strong>canDeactivate</strong>, <strong>canLoad </strong>gibi özel metodları içermelidir ve bu metodlar true (izin verildi) veya false (izin verilmedi) döndürmelidir.</p><h3>10. Pipes</h3><ul><li>Verilerin görüntülenme süreçlerinde, verilen işlenmesine, biçimlendirilmesine olanak sağlayan özel fonksiyonlardır.</li><li>Sık kullanılan bazı pipes türleri şunlardır:</li><li><strong>{{ }} Interpolation Pipe: </strong>Şablonda {{ }} ifadeleri arasında bir değeri görüntülemek için kullanılır. Angular, bu ifadeyi otomatik olarak {{ value | interpolationPipe }} şekline dönüştürür ve value değişkenini belirtilen borudan geçirir.</li></ul><pre>&lt;p&gt;{{ currentDate | date: &#39;dd/MM/yyyy&#39; }}&lt;/p&gt;</pre><ul><li><strong>Date Pipe:</strong> Tarih ve saat değerlerini biçimlendirmek için kullanılır. Tarihleri farklı formatlarda görüntülemek veya saat dilimini ayarlamak için kullanılabilir.</li></ul><pre>&lt;p&gt;{{ currentDate | date: &#39;dd/MM/yyyy&#39; }}&lt;/p&gt;</pre><ul><li><strong>Number Pipe:</strong> Sayıları biçimlendirmek ve ondalık haneleri, gruplama ayraçlarını veya minimum/maximum basamak sayısını belirlemek için kullanılır.</li></ul><pre>&lt;p&gt;{{ price | number: &#39;1.2-2&#39; }}&lt;/p&gt;</pre><ul><li><strong>Currency Pipe:</strong> Para birimi değerlerini biçimlendirmek için kullanılır. Para birimi simgesi, gruplama ayraçları ve ondalık haneleri belirlemek için kullanılabilir.</li></ul><pre>&lt;p&gt;{{ totalAmount | currency: &#39;EUR&#39; }}&lt;/p&gt;</pre><ul><li><strong>UpperCase Pipe: </strong>Metinleri büyük harfe dönüştürmek için kullanılır.</li></ul><pre>&lt;p&gt;{{ name | uppercase }}&lt;/p&gt;</pre><ul><li><strong>LowerCase Pipe: </strong>Metinleri küçük harfe dönüştürmek için kullanılır.</li></ul><pre>&lt;p&gt;{{ name | lowercase }}&lt;/p&gt;</pre><p>Bu sadece bazı örneklerdir ve Angular’da kullanılabilen birçok farklı pipes türü vardır.</p><p>Pipes, şablonlarda kullanılarak verilerin biçimlendirilmesi, dönüştürülmesi ve görüntülenme biçiminin kontrol edilmesi için güçlü bir araç sağlar. Kendi özel pipes’larınızı da oluşturabilir ve özelleştirebilirsiniz.</p><h3>Kaynaklar</h3><ul><li><a href="https://www.youtube.com/playlist?list=PLQVXoXFVVtp1DcC4z0euk71_ICphrOEFV">Gençay Yıldız Youtube Angular Eğitim Serisi</a></li><li><a href="https://angular.io/">Angular.io</a></li></ul><p>Beni <a href="https://www.linkedin.com/in/nuraykilic/"><em>LinkedIn</em></a><em> </em>hesabımdan takip edebilir veya bağlantı kurabilirsiniz. Zamanınızı ayırdığınız için teşekkürler. Bir sonraki yazımızda görüşmek üzere kendinize iyi bakınn…</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=eb9439b36e" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Angular Öğreniyorum 1#]]></title>
            <link>https://medium.com/@nuraykilic/angular-%C3%B6%C4%9Freniyorum-1-e817d95576?source=rss-11942fb66f01------2</link>
            <guid isPermaLink="false">https://medium.com/p/e817d95576</guid>
            <category><![CDATA[mvc]]></category>
            <category><![CDATA[angular-cli]]></category>
            <category><![CDATA[angular]]></category>
            <dc:creator><![CDATA[Nuray Kılıç]]></dc:creator>
            <pubDate>Wed, 26 Apr 2023 10:19:08 GMT</pubDate>
            <atom:updated>2023-07-17T13:23:49.749Z</atom:updated>
            <content:encoded><![CDATA[<h3>Angular Öğreniyorum 1# Angular Nedir?</h3><p>Merhaba arkadaşlar, nasılsınızzz umarım hepiniz çok iyisinizdir.</p><p>Öncelikle kısa bir açıklamayla başlayacağım. Çok fazla kaynak zehirlenmesi yaşamamak adına yeni bir teknolojiyi öğrenirken tek bir eğitmenden ve tek bir dokümantasyondan ilerleme kararı alalı uzun bir süre oldu. Bu karar bana temiz bir şekilde öğrenmeyi sağladı. Dolayısıyla da <a href="https://www.youtube.com/@GencayYildiz"><strong>Gençay Hoca</strong></a>’nın kanalı benim her zaman ilk baktığım kaynak oldu.</p><p>Şimdi ise onun serilerinden biri olan, benim ise uzun süredir çalışmadığım ve unuttuğum Angular’a tekrar başlıyorum. Bu süreçte ise öğrendiklerimi her şekilde pekiştirmek için buraya bir makale serisi yazacağım.(Planım o yönde, aksatırsam birazcık dürtebilirsiniz.) “Not paylaşma” tabiri de birazcık uygun olabilir. :D</p><p>O zaman başlayalım. Umarım okumaktan keyif aldığınız bir seri olur.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/788/1*nq9lgpAVM0J2HncJc1e7NQ.png" /></figure><h3><strong>Angular Nedir?</strong></h3><p>Angular, Google tarafından geliştirilen açık kaynaklı bir JavaScript framework’üdür. Angular, öncelikle <strong>Single Page Applications (SPA)</strong> oluşturmak için tasarlanmıştır. SPA’ler, web uygulamalarında sayfaların yeniden yüklenmesi gerekliliğini ortadan kaldırarak, daha iyi bir kullanıcı deneyimi sunarlar.</p><p>Angular, <strong>MVC (Model-View-Controller)</strong> ve <strong>MVVM (Model-View-ViewModel)</strong> gibi tasarım kalıplarını temel alarak geliştirilmiştir. Angular, HTML, CSS ve JavaScript ile birlikte kullanılabilecek şekilde tasarlanmıştır ve Angular CLI (Command Line Interface) aracılığıyla kolayca kurulup kullanılabilir.</p><p><strong>Typescript</strong>, Javascript üzerine inşa edilen bir programlama dilidir. Angular ise Typescript programlama dilini kullanır.</p><h4>Gerekli Kurulumlar</h4><ul><li>Öncelikle Node.js kurulumu yapmalıyız. <a href="https://nodejs.org/en/download">Nodejs’i sitesi</a>nden indiriyoruz ve kuruyoruz. Kurulum kontrolünü cmd’de yapalım:</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/285/1*5wA_R24U47eWACZUTceFBw.png" /></figure><ul><li><strong>npm install -g @angular/cli </strong>komutu ile Angular CLI kuruyoruz.</li><li><strong>ng version </strong>komutu ile kurulum kontrolünü yapıyoruz. Angular 15 ile çalışacağız.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/543/1*FaEafAqHO21IWhYLF6gyEA.png" /></figure><h4>Komutlar ve Angular Dosya Yapısı</h4><p>Bilmemiz gereken başlangıç komutlarına da şöyle kısaca bir bakalım:</p><ul><li><strong>ng version: </strong>Yukarıda kullandığımız gibi versiyonunu öğrenmek için kullandığımız komuttur.</li><li><strong>ng new -appName</strong>: Sade bir template ile bir Angular uygulaması oluşturmak için kullanılan komuttur.</li><li><strong>ng generate: </strong>Angular’ın yapılarını(component, module vb.) oluşturmak için kullanılan komuttur.</li><li><strong>ng build: </strong>Uygulamamızı build etmeye yarayan komuttur.</li><li><strong>ng serve — open:</strong> Angular uygulamamızı ayağı kaldırmaya ve varsayılan tarayıcıda varsayılan portta açmayı sağlayan komuttur.</li></ul><p>Şimdi <strong>ng new</strong> komutu bir uygulama oluşturalım ve dosya yapısına bir göz atalım. Oluştururken <strong>routing </strong>yapılanması isteyip istemediğinizi sorar ve style dosya tipinizin ne olmasını istediğinizi sorar.</p><p>FirstProject adında bir uygulama oluşturdum ve dosya yapısı şu şekildedir:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/356/1*HPZ7roEoKgbdgBOFo-eehw.png" /></figure><ul><li><strong>node-modules</strong> dosyası npm package’lerin yer aldığı dosyadır. Yeni bir package ihtiyacımızda buraya indirmiş olacağız.</li><li><strong>src dosyası</strong>, genel olarak uygulamamızın kaynak dosyalarının yer aldığı kök dizindir. En çok vakit geçireceğimiz yerdir :)</li><li><strong>app dosyası</strong> uygulamanın tüm componentlerini ve modullerinin bulunduğu dizindir.</li><li><strong>assets</strong> dosyası, static dosyalarımızı barındıran dosyadır.</li><li><strong>index.html,</strong> uygulama ilk açıldığında ki görülen kök sayfadır.</li><li><strong>main.ts</strong> uygulamanın ana başlangıç dosyasıdır. Uygulama ilk ayağı kalktığında main.ts çalışır.</li><li><strong>style.css</strong>, global style dosyasıdır.</li><li><strong>package.json</strong> dosyasında uygulamanızda var olan package’ler ve versiyonları yer alır. Burada yer alan scripts taginde ise uygulamayı start ve build ederken kullanmanız gereken komutları da kişiselleştirebilirsiniz.</li></ul><h4>Angular Çalışma Mantığı Nasıldır?</h4><ul><li>Angular, MVC patterini temel alarak çalışır. MVC pattern Model, View ve Controller olmak üzere üç yapıtaşından oluşur.</li><li>Özetlemek gerekirse, controller’a bir request gelir ve bu request sonucunda model’e çift yönlü data alışverişi sonucunda View’e result döner ve response kullanıcıya gösterilir.</li></ul><blockquote>Controller =&gt; app.component.ts</blockquote><blockquote>View =&gt; app.component.html</blockquote><blockquote>Model =&gt; person.ts olarak düşünülebilir.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/503/1*YpuTCyHceZZcbysBRmZ2yw.png" /></figure><h3>Kaynaklar</h3><ul><li><a href="https://www.youtube.com/playlist?list=PLQVXoXFVVtp1DcC4z0euk71_ICphrOEFV">Gençay Yıldız Youtube Angular Eğitim Serisi</a></li><li><a href="https://angular.io/">Angular.io</a></li></ul><p>Beni <a href="https://www.linkedin.com/in/nuraykilic/"><em>LinkedIn</em></a><em> </em>hesabımdan takip edebilir veya bağlantı kurabilirsiniz. Zamanınızı ayırdığınız için teşekkürler. Bir sonraki yazımızda görüşmek üzere kendinize iyi bakınn…</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e817d95576" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Serilog ile .Net 6'da  Loglama İşlemleri]]></title>
            <link>https://medium.com/@nuraykilic/serilog-ile-net-6da-loglama-i%CC%87%C5%9Flemleri-89b04ef32303?source=rss-11942fb66f01------2</link>
            <guid isPermaLink="false">https://medium.com/p/89b04ef32303</guid>
            <category><![CDATA[serilog]]></category>
            <category><![CDATA[logging]]></category>
            <category><![CDATA[net6]]></category>
            <dc:creator><![CDATA[Nuray Kılıç]]></dc:creator>
            <pubDate>Tue, 28 Feb 2023 12:44:19 GMT</pubDate>
            <atom:updated>2023-03-10T09:34:23.300Z</atom:updated>
            <content:encoded><![CDATA[<h3>Serilog ile .Net 6&#39;da Loglama İşlemleri</h3><p><em>Herkese selamlar. Loglama kütüphanelerinden biri olan Serilog kütüphanesini örneği ile sizlere aktaracağım. Umarım okumaktan keyif alırsınız…</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/0*b5BjY1oBjYvp7U_p" /></figure><p>Yazılım uygulamalarında genellikle işleyişin adım adım raporuna ihtiyaç duyarız. Loglama işlemleri de tam olarak bu ihtiyacımıza karşılık vermektedir. .Net için en çok kullanılan Serilog ve NLog kütüphanelerini örnek olarak verebiliriz.</p><h3>Serilog Nedir?</h3><ul><li>Open source .Net loglama kütüphanesidir.</li><li>Zengin loglama deneyimi sunar.</li><li>.Net Framework ve .Net son sürümüne kadar desteklemektedir.</li><li>Structed event data(Yapılandırılmış olay veriler) yapısını destekler.</li><li>Konfigürasyonu, implementi hızlı ve anlaşılır.</li></ul><p>Serilog çıktılarını <strong>Serilog.Sinks </strong>namespace altında bulunan kütüphanelerden istenilene yazdırılabilir. Bu kütüphaneler çok fazla platformu desteklediğinden bizlere zengin bir içerik sunar. Örneğin bu kütüphanelerin bazıları şöyledir: <strong>Serilog.Sinks.Console, Serilog.Sinks.File, Serilog.Sinks.Elasticsearch</strong>.</p><p>Basic bir örneğini adım adım .Net 6&#39;da yazmaya gelelim.</p><h3>Serilog .Net 6 Entegrasyonu</h3><p><strong>Step 1: </strong>Öncelikle bir dotnet webapi projesi oluşturuyoruz.</p><p><strong>Step 2: </strong>Serilog kütüphanelerini ekliyoruz. Bu örnekte loglama işlemini dosyaya yazdıracağız.</p><pre>NuGet\Install-Package Serilog.AspNetCore -Version 6.1.0</pre><pre>NuGet\Install-Package Serilog.Sinks.File -Version 5.0.1</pre><p><strong>Step 3: </strong>Program.cs dosyamıza Serilog kütüphanesi için configuration yapalım ve Serilog kütüphanesini ekleyelim.</p><pre><br>// Log configuration<br>var logger = new LoggerConfiguration()<br>    .ReadFrom.Configuration(builder.Configuration)<br>    .Enrich.FromLogContext()<br>    .CreateLogger();<br><br>builder.Logging.ClearProviders();<br>// Add Serilog Library<br>builder.Logging.AddSerilog(logger);</pre><ul><li>Burada ReadFrom ile configuration değerlerininin nereden okunacağını belirtiyoruz.</li><li>Enrich ile atılacak log detayına ekstra özellik ekleyebiliyoruz.</li></ul><p><strong>Step 4:</strong> appsetting.json dosyamıza ise log için istediğimiz ayarları ekleyelim.</p><pre>&quot;Serilog&quot;: {<br>    &quot;Using&quot;: [ &quot;Serilog.Sinks.File&quot; ],<br>    &quot;MinimumLevel&quot;: {<br>      &quot;Default&quot;: &quot;Information&quot;<br>    },<br>    &quot;WriteTo&quot;: [<br>      {<br>        &quot;Name&quot;: &quot;File&quot;,<br>        &quot;Args&quot;: {<br>          &quot;path&quot;: &quot;Logs/WebApi-.log&quot;,<br>          &quot;rollingInterval&quot;: &quot;Day&quot;,<br>          &quot;outputTemplate&quot;: &quot;[{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} {CorrelationId} {Level:u3} ] {Username} {Message:lj} {Exception}{NewLine}&quot;<br>        }<br>      }<br>    ]<br>  }</pre><ul><li>Burada using scope içinde logları atacağımız platformu belirtiyoruz.</li><li>WriteTo özelliği ile logları atacağımız platformun özelliklerini, pathini, dosya adını ve birçok alan için düzenleme yapabiliriz.</li></ul><p>Daha birçok özellik ekleyebilirsiniz. Detaylı incelemek isterseniz Gençay Yıldız hocanın <a href="https://www.gencayyildiz.com/blog/asp-net-core-serilog-ile-veri-loglama-ve-seq-ile-gorsellestirme/">makalesine</a> göz atabilirsiniz.</p><p><strong>Step 5 :</strong> Default olarak gelen WeatherForecastController classımıza log implementasyonu yapıyoruz.</p><pre>[HttpGet(Name = &quot;GetWeatherForecast&quot;)]<br>public IEnumerable&lt;WeatherForecast&gt; Get()<br>{<br>    try<br>    {<br>        // Microsoft extension logger<br>        _logger.LogInformation(&quot;Get method executing...&quot;);<br><br>        // Serilog log message<br>        Log.Information(&quot;Get method executing...&quot;);<br>        Log.Warning(&quot;Warning message...&quot;);<br><br>        return Enumerable.Range(1, 5).Select(index =&gt; new WeatherForecast<br>        {<br>            Date = DateTime.Now.AddDays(index),<br>            TemperatureC = Random.Shared.Next(-20, 55),<br>            Summary = Summaries[Random.Shared.Next(Summaries.Length)]<br>        })<br>    .ToArray();<br>    }<br>    catch (Exception ex)<br>    {<br>        Log.Error($&quot;{ex.Message}&quot;);<br>        throw new Exception();<br>    }<br>}</pre><ul><li>Dependency inject ile aldığımız _logger instance’i Microsoft.Extensions.Logging kütüphanesinden default olarak gelmektedir.</li><li>Log.Information, Log.Error, Log.Warning örnekleri ise Serilog kütüphanesinden gelmektedir.</li><li>Son olarak Logs dosyamıza bakalım.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/673/1*s61fDLYNQOb33WZMpjESDg.png" /><figcaption>Logs file</figcaption></figure><ul><li>WebApi-20230228.log adında bir dosya oluştuğunu görüyoruz. Dosya içeriğinde ise appsettings.json dosyamızda belirttiğimiz gibi template uygun eklenmiş.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*EZ0kAtmIWexU2UBLbOw-ew.png" /><figcaption>log day</figcaption></figure><ul><li><a href="https://github.com/nurayklc/MediumStories/tree/main/SerilogDemo">Github</a></li></ul><h3>Kaynaklar</h3><ul><li>Örnek için kullandığım kaynak : <a href="https://www.youtube.com/watch?v=MYKTwvowMUI&amp;ab_channel=ClaudioBernasconi">How to Use Serilog in ASP.NET Core Web API | .NET 6</a></li><li><a href="https://www.youtube.com/watch?v=nVAkSBpsuTk&amp;ab_channel=MilanJovanovi%C4%87">Milan Jovanović</a></li><li><a href="https://www.gencayyildiz.com/blog/">Gençay Yıldız Blog</a> — <a href="https://www.gencayyildiz.com/blog/asp-net-core-serilog-ile-veri-loglama-ve-seq-ile-gorsellestirme/">Asp.NET Core — Serilog İle Veri Loglama ve Seq İle Görselleştirme</a></li><li><a href="https://github.com/serilog/serilog/wiki/Getting-Started">Serilog Documentation</a></li></ul><p>Beni <a href="https://www.linkedin.com/in/nuraykilic/"><em>LinkedIn</em></a><em> </em>hesabımdan takip edebilir veya bağlantı kurabilirsiniz. Zamanınızı ayırdığınız için teşekkürler. Kendinize iyi bakınn…</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=89b04ef32303" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Code First Yaklaşımı ile Entity Framework]]></title>
            <link>https://medium.com/@nuraykilic/code-first-yaklasimi-ile-entity-framework-a63706772278?source=rss-11942fb66f01------2</link>
            <guid isPermaLink="false">https://medium.com/p/a63706772278</guid>
            <category><![CDATA[net6]]></category>
            <category><![CDATA[code-first]]></category>
            <category><![CDATA[entity-framework]]></category>
            <dc:creator><![CDATA[Nuray Kılıç]]></dc:creator>
            <pubDate>Fri, 30 Dec 2022 13:10:42 GMT</pubDate>
            <atom:updated>2023-06-02T08:02:49.187Z</atom:updated>
            <content:encoded><![CDATA[<p><em>Herkese selamlar. Nasılsınız umarım iyisinizdir…</em></p><p><a href="https://medium.com/kodluyoruz/orm-nedir-orm-ara%C3%A7lar%C4%B1-ve-yakla%C5%9F%C4%B1mlar%C4%B1-nelerdir-37af94ee873c"><em>ORM araçlarından</em></a><em> bahsettiğim yazımda </em><strong><em>Code First</em></strong><em> yaklaşımından da bahsetmiştik. Şimdi ise Code First yaklaşımını </em><strong><em>Entity Framework</em></strong><em> ile adım adım uygulayacağım.</em></p><p><em>Umarım okumaktan keyif alırsınız…</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/480/0*Pgl7NvGiAbzSWYLT.jpg" /></figure><h3>Step 1 :</h3><ul><li>Asp.Net Core Web API projesi oluşturuyoruz. .Net 6.0 sürümü ile yapacağım.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/920/1*AZ3CNWvu2TT8wuwibx2cfA.png" /></figure><h3>Step 2 :</h3><ul><li>Gerekli packageleri NuGet Package Manager’dan, dotnet CLI veya Package Manager Console’dan yükleyebilirsiniz.</li><li>Package’ler için nuget.org’dan faydalanacağım. Package Manager Console kullanacağım ve yükleyeceğimiz package’lerimiz de şöyle:</li></ul><pre>NuGet\\Install-Package Microsoft.EntityFrameworkCore -Version 6.0.1</pre><pre>NuGet\\Install-Package Microsoft.EntityFrameworkCore.Design -Version 6.0.1</pre><pre>NuGet\\Install-Package Microsoft.EntityFrameworkCore.Tools -Version 6.0.1</pre><pre>NuGet\\Install-Package Microsoft.EntityFrameworkCore.SqlServer -Version 6.0.1</pre><ul><li>Database için Sql Server kullanacağım, farklı bir database kullanacaksanız ilgili database’in package yükleyebilirsiniz.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/565/1*n9FPFp0JU9eEF94MiyElnw.png" /></figure><h3>Step 3 :</h3><ul><li>Entitylerimizin olduğu bir klasör oluşturup, entitiylerimizi oluşturacağız.</li><li>Entitylerimizi oluştururken table’ların birbirleriyle olan ilişkilerini de property olarak yazıyoruz.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/326/0*EXH2w1WDsFU5aVLI" /></figure><blockquote>Student Class :</blockquote><pre>public class Student<br>{<br>  public int Id { get; set; }<br>  public string FirstName { get; set; }<br>  public string LastName { get; set; }<br>  public DateTime EnrolmentDate { get; set; }<br><br>  public ICollection&lt;Enrollment&gt; Enrollments { get; set; }<br>}</pre><blockquote>Enrollment Class için bir de enum oluşturduk.</blockquote><pre>public class Enrollment<br>{<br>  public int EnrollmentId { get; set; }<br>  public int CourseId { get; set; }<br>  public int StudentId { get; set; }<br>  public Grade? Grade { get; set; }<br>  public Course Course { get; set; }<br>  public Student Student { get; set; }<br>}<br><br>public enum Grade<br>{<br>  A,<br>  B,<br>  C,<br>  D, <br>  F<br>}</pre><blockquote>Course Class için Data Annotations kullandık.</blockquote><ul><li>Data Annotations, oluşturduğumuz propertye özellik eklemek ve validation yapmak için kullanıyoruz.</li><li>Bir çok kullanımı bulunmakla birlikte aşağıdaki DatabaseGenerated alanını <em>None</em> olarak belirtmemiz CourseId property’sinin database tarafından oluşturulmak yerine kullanıcı tarafından oluşturulmasını sağlıyor.</li><li>Daha fazla incelemek isterseniz: <a href="https://learn.microsoft.com/en-us/aspnet/mvc/overview/older-versions-1/models-data/validation-with-the-data-annotation-validators-cs">Microsoft Data Annotations</a></li></ul><pre>    public class Course<br>    {<br>        [DatabaseGenerated(DatabaseGeneratedOption.None)]<br>        public int CourseId { get; set; }<br>        public string CourseName { get; set; }<br>        public int Credits { get; set; }<br>        public ICollection&lt;Enrollment&gt; Enrollments { get; set; }<br>    }</pre><h3>Step 4 :</h3><ul><li>Database işlemlerimiz için yeni bir folder oluşturup, Context classımızı oluşturuyoruz.</li><li>Context classımız DbContext’ten kalıtım almalıdır. Daha Sonra constructor’ımızı oluşturup base’den den kalıtım alıyoruz.</li><li>Databasede oluşturmak istediğimiz table’leri DbSet ile ekliyoruz.</li></ul><pre>public class SchoolContext : DbContext<br>{<br>    public SchoolContext(DbContextOptions&lt;SchoolContext&gt; options) : base(options) { }<br><br>    public DbSet&lt;Student&gt; Students { get; set; }<br>    public DbSet&lt;Course&gt; Courses { get; set; }<br>    public DbSet&lt;Enrollment&gt; Enrollments { get; set; }<br>}</pre><ul><li>Tablelarımızı, override edebileceğimiz OnModelCreating methodu ile configure edebiliriz.</li></ul><h3>Step 5 :</h3><ul><li>Appsettings.json dosyamıza ConnectionString ekliyoruz.</li></ul><pre>{<br>  &quot;Logging&quot;: {<br>    &quot;LogLevel&quot;: {<br>      &quot;Default&quot;: &quot;Information&quot;,<br>      &quot;Microsoft.AspNetCore&quot;: &quot;Warning&quot;<br>    }<br>  },<br>  &quot;AllowedHosts&quot;: &quot;*&quot;,<br>  &quot;ConnectionStrings&quot;: {<br>    &quot;DbConnectionString&quot; : &quot;Server=(localdb)\\mssqllocaldb;Database=SchoolDB;Trusted_Connection=True;&quot;<br>  }<br>}</pre><ul><li>Program.cs dosyasımızdaki Services ile uygulama başlama sırasında dependency injection yöntemiyle uygulamaya register ediyoruz.</li></ul><pre><br>builder.Services.AddDbContext&lt;SchoolContext&gt;(options =&gt; <br>            options.UseSqlServer(builder.Configuration.GetConnectionString(&quot;DbConnectionString&quot;)));</pre><h3>Step 6 :</h3><ul><li>Son olarak migration işlemlerini gerçekleştirerek database’imizi oluşturacağız.</li><li>Migration işlemini Package manager console’dan yapacağız ve yaparken eğer katmanlı mimari kullanıyorsanız Default Project alanında context classınınız bulunduğu katmanı seçmelisiniz.</li></ul><blockquote>Migration işlemleri için sık kullanacağımız iki komuttan bahsetmek istiyorum.</blockquote><blockquote>- <strong>add-migration commandName</strong> : Bu komut ile bir Migrations dosyası oluşturulur, dosyadaki classta Up ve Down olmak üzere iki method oluşur. Methodlarda entitylerimizin özelliklerinin database’e nasıl yansıtıldığı yer alır.</blockquote><blockquote>- <strong>update-database</strong> : Database’in fiziksel olarak oluşturulmasını sağlar.</blockquote><ul><li>Eğer daha sonra entitylerimizde herhangi bir değişiklik yaparsak add-migration ve update-database ile database’i güncelleyebiliriz.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1014/0*zEfx0LeXQe0OZQFC" /></figure><p>Done.</p><p>Son olarak database’imiz bu şekildedir:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/519/0*wprkUTSF1BiyfMgR" /></figure><h3>Kaynaklar</h3><ul><li><a href="http://www.entityframeworkschool.com/">Entity Framework School</a></li><li><a href="https://learn.microsoft.com/en-us/aspnet/core/data/ef-mvc/intro?view=aspnetcore-6.0">Learn Microsoft</a></li></ul><p>Örneği <a href="https://github.com/nurayklc/MediumStories/tree/main/CodeFirstWithEfCore">github hesabımda</a> bulabilirsiniz.</p><p><em>Beni </em><a href="https://www.linkedin.com/in/nuraykilic/"><em>LinkedIn</em></a><em> hesabımdan takip edebilir veya bağlantı kurabilirsiniz. Zamanınızı ayırdığınız için teşekkürler. Kendinize iyi bakınn :)</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a63706772278" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[ViewBag, ViewData ve TempData]]></title>
            <link>https://medium.com/@nuraykilic/viewbag-viewdata-ve-tempdata-d1a297080fc2?source=rss-11942fb66f01------2</link>
            <guid isPermaLink="false">https://medium.com/p/d1a297080fc2</guid>
            <category><![CDATA[aspnet-mvc]]></category>
            <dc:creator><![CDATA[Nuray Kılıç]]></dc:creator>
            <pubDate>Thu, 20 Oct 2022 20:04:26 GMT</pubDate>
            <atom:updated>2022-12-30T13:35:38.044Z</atom:updated>
            <content:encoded><![CDATA[<p><em>Selamm herkese. Nasılsınız umarım hepiniz iyisinizdir…</em></p><p><em>Başlıktan da anlaşılacağı üzere yeni yazımda Asp.Net MVC’de yer alan data taşıma yöntemlerinden birkaçı olan ViewBag, ViewData ve TempData hakkında yazacağım. Keyifli okumalarrr.</em></p><figure><img alt="https://www.c-sharpcorner.com/article/using-tempdata-viewdata-and-viewbag-in-Asp-Net-mvc-5-0-par/" src="https://cdn-images-1.medium.com/max/960/0*CJ-8UFNnLHiSuIY0.png" /><figcaption>ViewData — ViewBag — TempData</figcaption></figure><p><strong>V</strong>eri taşımak için kullanılan bu nesneler aşağıdaki resimde görüldüğü üzere ControllerBase classının propertyleridir.</p><p>Detaylı incelemek isterseniz <a href="https://learn.microsoft.com/en-us/dotnet/api/system.web.mvc.controllerbase.tempdata?view=aspnet-mvc-5.2">Microsoft dokümanından</a> inceleyebilirsiniz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/602/0*FmGa81H5GFVM0rXj" /></figure><h3>ViewBag</h3><p>ViewBag runtime anında oluşan dinamik bir yapıdır. Proje compile edilirken oluşturulmaz, runtime anında oluşturulur ve Controller’dan View’e veri taşımak için kullanılır.</p><ul><li>Kodlarda görüldüğü üzere Controller’da oluşturulan ViewBag nesnesini View’de görüntülemek için <strong>@ViewBag.example</strong> yapısı kullanılır.</li></ul><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/9ae9ec65e9fda2a76c1aeaf5723fd4d2/href">https://medium.com/media/9ae9ec65e9fda2a76c1aeaf5723fd4d2/href</a></iframe><h3>ViewData</h3><p>ViewData, ViewDataDictionary classı ile çalışır. Compile time da “Key/Value” değerleri ile tutulur. Tutulan değerin type’ı ne olursa olsun (list, string vb.) View katmanında mutlaka string’e tür dönüşümü gerekmektedir.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/a8c56396476ff9e7b74f23ae9f2918e6/href">https://medium.com/media/a8c56396476ff9e7b74f23ae9f2918e6/href</a></iframe><h3>TempData</h3><p>TempData, Controller’da oluşturulan veriyi tek View katmanına taşımayı sağlar. ViewData gibi “Key/Value” mantığı ile çalışır.</p><ul><li>ViewBag ve ViewData controller’da yer alan actionlar arası veriyi taşıyamazken TempData actionlar arası veriyi taşır.</li></ul><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/0e2cef8cdfcbc3252c843ca96216a16e/href">https://medium.com/media/0e2cef8cdfcbc3252c843ca96216a16e/href</a></iframe><ul><li>Değindiğim bu üç nesne daha çok küçük nesneleri taşımak için kullanılıyor. Büyük nesneleri View katmanına taşımak istiyorsak ViewModels yapılanmasını kullanmakta fayda var.</li></ul><h3>Kaynaklar</h3><ul><li><a href="https://www.gencayyildiz.com/blog/">Gençay Yıldız Blog</a></li><li><a href="https://app.patika.dev/courses/net-core/2-orm-ve-ef-core">.Net Patikası</a></li></ul><p><em>Zaman ayırıp okuduğunuz için teşekkür ederim.</em></p><p><em>Hayatın tüm güzellikleri sizlerle olsunn…</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d1a297080fc2" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[ORM Nedir? ORM Araçları ve Yaklaşımları Nelerdir?]]></title>
            <link>https://medium.com/kodluyoruz/orm-nedir-orm-ara%C3%A7lar%C4%B1-ve-yakla%C5%9F%C4%B1mlar%C4%B1-nelerdir-37af94ee873c?source=rss-11942fb66f01------2</link>
            <guid isPermaLink="false">https://medium.com/p/37af94ee873c</guid>
            <category><![CDATA[entity-framework]]></category>
            <category><![CDATA[database-first]]></category>
            <category><![CDATA[orm]]></category>
            <category><![CDATA[code-first]]></category>
            <dc:creator><![CDATA[Nuray Kılıç]]></dc:creator>
            <pubDate>Thu, 21 Jul 2022 12:23:37 GMT</pubDate>
            <atom:updated>2023-09-19T12:52:44.156Z</atom:updated>
            <content:encoded><![CDATA[<p><em>Selamm arkadaşlar. Nasılsınız umarım hepiniz iyisinizdir…</em></p><p><em>Yeni yazımda sizlere ORM nedir, avantajları dezavantajları nelerdir, ORM araçları ve yaklaşımları nelerdir sorularını öğrendiklerim kadarıyla sizlere aktaracağım. Umarım okumaktan keyif alırsınız.</em></p><h3><strong>ORM Nedir?</strong></h3><p>ORM , ( Object to Relational Mapping ) Nesne ile İlişkisel Eşleme olarak açabiliriz. <strong>ORM</strong> ilişkisel veri tabanı ile uygulamamız arasında bir köprü görevi gören, ilişkileri ve nesneleri yönetmek için kullanılan bir tekniktir.</p><figure><img alt="ORM" src="https://cdn-images-1.medium.com/max/536/0*4ijjbom_tCTaoaoB.png" /><figcaption>ORM</figcaption></figure><p>ORM tekniği çoğu nesne yönelimli programlama dillerinde kullanılabilir.</p><h4>Dillere göre ORM Araçları</h4><ul><li><strong>C#</strong> : Entity Framework, Dapper</li><li><strong>Java</strong> : Hibernate, JPA, MyBatis</li><li><strong>Phyton </strong>: Django, Storm</li><li><strong>PHP</strong> : PdoMap, CakePHP</li><li><strong>Nodejs</strong> : Sequelize, Mongoose</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/469/0*1cW6qMeckWwGP6yV.png" /><figcaption>ORM Tools</figcaption></figure><h3><strong>ORM Kullanmanın Avantajları</strong></h3><ul><li>Nesneye yönelik bir programlamayı imkanı sağlar.</li><li>Veri tabanında daha az zaman harcamayı sağlar. Örneğin kullanılan ORM yaklaşımlarına göre değişkenlik gösterse de entity classlarını veri tabanında tablolara dönüştürür.</li><li>Daha az SQL sorgusu yazmayı sağlar.</li><li>ORM araçlarının birçoğu açık kaynak kodludur.</li><li>Veri tabanınız Oracle, SQL Server vb. olabilir. Veri tabanının ne olduğu ile ilgilenmez. Özetle veri tabanına bağımlılığı yoktur.</li></ul><h3>ORM Kullanmanın Dezavantajları</h3><ul><li>Performans sorunları oluşturabilir.</li><li>İlk kez kullanacakların öğrenmesi zaman alabilir.</li><li>Oluşturulan SQL sorgularına direkt müdahale edemeyiz. Bazen SQL sorguları farklı olabilir.</li></ul><h3>ORM Modelleme Tekniğinin Yaklaşımları</h3><p>ORM modelleme yaklaşımları 3&#39; e ayrılır.</p><ul><li>Database First Yaklaşımı</li><li>Model First Yaklaşımı</li><li>Code First Yaklaşımı</li></ul><p>Bu yazımın çok fazla uzun olmaması adına yaklaşımları kısaca açıklayacağım.<a href="https://medium.com/@nuraykilic/code-first-yaklasimi-ile-entity-framework-a63706772278"> Başka bir yazımda code first yaklaşımını örneklerle inceleyeceğim.</a></p><ol><li><strong>Database First Yaklaşımı</strong></li></ol><p>Database First yaklaşımda var olan bir veri tabanından modeli .EDMX uzantılı dosya olarak oluşturur.</p><p>Bu yaklaşımda veri tabanında değişiklikler yapmak istendiğinde, SQL server da manuel olarak değişiklikler yapıldıktan sonra modele aktarılır.</p><blockquote><strong>Scaffolding </strong>yöntemi ile de yapılabilir. Database’de var olan table’ları entity class olarak projeye dahil edilir.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/411/0*3p4RXwy9BNFckPft.jpg" /></figure><p><strong>2. Model First Yaklaşımı</strong></p><p>Model First yaklaşımında önce yeni bir model oluşturmaya daha sonra o modelden bir veri tabanı şeması oluşturmaya izin verir.</p><p>Model bir .EDMX dosyasında saklanır. Bu yaklaşımda entity’leri, ilişkileri vb. EDMX design da oluşturmalı ve daha sonra modelden veri tabanı oluşturulmalıdır.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/600/0*KPpjhKAE8BS2g0on.jpg" /><figcaption>Model First Yaklaşımı</figcaption></figure><p>Son olarak bu yöntemde kodlamadan daha çok design ile çalışılır.</p><p><strong>3. Code First Yaklaşımı</strong></p><p>Code First, kod ile veri tabanı ve entity modeli oluşturma yaklaşımıdır. Öncelikle entity classları oluşturulur, classlar arası ilişkiler belirlenir. Daha sonra classlar tablo olarak, classlardaki propertyler ise kolon olarak veri tabanına aktarılır.</p><p>Code First yaklaşımında EDMX desing yapılmaz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/0*GE8zWeTvQvzVRoif.jpg" /></figure><h3>Kaynaklar</h3><ul><li><a href="http://www.entityframeworkschool.com/">Entity Framework School</a></li><li><a href="https://app.patika.dev/courses/net-core/2-orm-ve-ef-core">.Net Patikası</a></li></ul><p>Değerli bilgileri ve kadın bir yazılımcı, eğitmen olarak bizlere yön verdiği için <a href="https://medium.com/u/c76a51db4073">Zikriye Ürkmez Cengiz</a> hocama teşekkür ederim.</p><p>Beni <a href="https://www.linkedin.com/in/nuraykilic/"><em>LinkedIn</em></a><em> </em>hesabımdan takip edebilir veya bağlantı kurabilirsiniz. Zamanınızı ayırdığınız için teşekkürler. Kendinize iyi bakınn :)</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=37af94ee873c" width="1" height="1" alt=""><hr><p><a href="https://medium.com/kodluyoruz/orm-nedir-orm-ara%C3%A7lar%C4%B1-ve-yakla%C5%9F%C4%B1mlar%C4%B1-nelerdir-37af94ee873c">ORM Nedir? ORM Araçları ve Yaklaşımları Nelerdir?</a> was originally published in <a href="https://medium.com/kodluyoruz">Kodluyoruz</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Genel Linux Komutları]]></title>
            <link>https://medium.com/@nuraykilic/genel-linux-komutlar%C4%B1-6c67348d903b?source=rss-11942fb66f01------2</link>
            <guid isPermaLink="false">https://medium.com/p/6c67348d903b</guid>
            <category><![CDATA[linux]]></category>
            <category><![CDATA[command-prompt]]></category>
            <category><![CDATA[commands]]></category>
            <dc:creator><![CDATA[Nuray Kılıç]]></dc:creator>
            <pubDate>Fri, 24 Jun 2022 10:40:20 GMT</pubDate>
            <atom:updated>2022-06-24T10:40:20.173Z</atom:updated>
            <content:encoded><![CDATA[<p>Merhabalar, nasılsınız umarım iyisinizdir…</p><p>Yeni yazımda sizlere her yerde karşımıza çıkan ve kullandığımız Linux komutlarını açıklamaları ile anlatacağım. Umarım okumaktan keyif alırsınız.</p><h3>Dosya Yönetim Komutları</h3><p>Linux mevcut ve ana dizinler için belli kurallar kullanır. Bu komutlar yeni başlayanlar için biraz kafa karıştırıcı olabilir, çalıştıkça ve aşina oldukça komutlara alışacaksınız.</p><p>Linux’ta ne zaman bir terminalde olursanız <strong>mevcut çalışma dizini</strong> denilen yerde olacaksınız. Komut penceresi genellikle ya tam çalışma dizini gösterir ya da bu dizinin son bölümünü gösterir.</p><p>Komut pencereniz aşağıdakiler gibi görünebilir:</p><pre><strong>user@host ~/somedir <br>user@host somedir <br>user@host /home/user/somedir</strong> </pre><p>Bu komut satırı mevcut çalışma dizinizin “ <strong>/home/user/somedir</strong> ”olduğunu gösteriyor.</p><blockquote>Linux’ta <strong>ana dizini “..” </strong>ile ifade edilir ve <strong>mevcut dizin ise “ . ”</strong> ifade edilir.</blockquote><h4>Dizin (Directory) İçerisinde Gezinme</h4><p><strong>pwd :</strong> Mevcut bulunulan dizinin tam yolunu verir.</p><p><strong>cd - :</strong> Çalıştığınız son dizine gider.</p><p><strong>cd ~ :</strong> Sadece mevcut kullanıcının ana dizinine gider.</p><p><strong>cd .. :</strong> Mevcut dizinin bir üst dizinine gider (<strong>cd </strong>ve <strong>..</strong> arasında boşluk olmalıdır).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/310/1*RG_YtjMXMvRwR3uNoQUzTA.png" /><figcaption><strong>pwd ve cd</strong> komut çıktısı</figcaption></figure><h4>Dizindeki Dosyaları Listeleme</h4><p><strong>ls -l :</strong>Mevcut dizindeki dosyaları ve dizinleri uzun ve tablo şeklinde listeler (Çıktının daha iyi okunması için <strong>ls</strong> komutunu <strong>-l </strong>ile kullanabilirsiniz).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/636/1*oFPhOsqWi9Utd6fC6p9YBg.png" /><figcaption>ls -l komut çıktısı</figcaption></figure><p><strong>ls -ld dirname :</strong> İsmi yazılan belirli dizini tablo şeklinde listeler.(<strong>“</strong><em>Dirname</em><strong>”</strong> yerine dizin veya dosya adınızı giriniz).</p><p><strong>ls -a :</strong> Mevcut dizindeki gizli dosyalar ve dizinler dahil tüm dosyaları listeler (Linux’ta gizli dosyalar <strong>“ . ” </strong>ile başlar).</p><p><strong>ls -F :</strong> Tipini belirtmek için dosya adının sonuna bir sembol ekleyerek mevcut dizindekileri listeler.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/575/1*4xUv_qPIGIsKeoHcy1iNUA.png" /><figcaption>ls -F komut çıktısı</figcaption></figure><p>(Sonuna eklenen semboller: * yürütülebilir anlamına gelir,<strong> /</strong> ifadesi dizin anlamına gelir,<strong> @ </strong>işareti<strong> </strong>sembolik bağlantı anlamına gelir).</p><p><strong>ls -lt :</strong> En son değişiklik yapılan dosyalar en üstte olacak şekilde son değiştirilme zamanına göre dosyalar listelenir.</p><p><strong>ls -lh :</strong> Dosya boyutlarını okunabilir olarak listeler.</p><p><strong>ls -lR :</strong> Tüm alt dizinleri tekrarlı olarak listeler.</p><p><strong>tree :</strong> Mevcut dizinden başlayarak dosya sistemini bir ağaç yapısı şeklinde oluşturur.</p><h4>Dosya/Dizin Oluşturma, Kopyalama, Silme</h4><p><strong>cp -p kaynak hedef:</strong> Dosyayı belirtilen kaynaktan belirtilen hedefe kopyalar. -p ifadesi ise koruma anlamına gelir. Dosya sahibi, oluşturulma zamanı, gruplar ve izinler gibi dosyanın orijinalinde bulunan bilgileri korur.</p><p>Örnek Kullanım: <strong>cp -p Desktop/Test Belgeler/:</strong></p><p><strong>cp kaynak_dir hedef_dir :</strong> Kaynak dizini hedef dizine kopyalar.</p><p><strong>mv file1 file2 :</strong> File1&#39;i File2&#39;ye taşır veya yeniden adlandırır. File1 ise siler.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/222/1*xEOYZNS_VWHvhdNAhXbsqA.png" /><figcaption>mv komut kullanımı</figcaption></figure><p><strong>rm -i filename :</strong> Belirtilen dosyayı silmek için önce size sorar, daha sonra dosyayı siler. Birden çok dosya belirtebilirsiniz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/285/1*5YVloNp-WolCFtaCeUvJzQ.png" /><figcaption>rm -i komut çıktısı</figcaption></figure><p><strong>rm dir-name :</strong> Belirtilen dizini siler.</p><p><strong>rmdir dir-name :</strong> Eğer dizin boş ise dizin silinir. Bu komut sadece boş dizinler siler.</p><p><strong>mkdir dir-name :</strong>Belirtilen dizin adında yeni bir dizin oluşturur.</p><p><strong>mkdir -p dir-name/dir-name :</strong> Bir dizin hiyerarşik bir şekilde oluşturur. Birden çok dizin belirtebilirsiniz.</p><p><strong>touch filename :</strong> Belirtilen dosya adında bir dosya yoksa dosyayı oluşturur eğer dosya var ise dosyanın içeriğini değiştirmeden dosyanın oluşturulma tarihini değiştirir.</p><p><strong>chmod &lt;specification&gt; filename :</strong> Dosya izinlerini değiştirir. Özellikler(Specifications):</p><ul><li><strong>u</strong> (user) kullanıcı, <strong>g</strong> (group) grup, <strong>o</strong> (other) diğerleri - kullanıcı ve grup haricindekiler</li><li><strong>+ </strong>(add) izin ekle,<strong> - </strong>izinleri kaldır, <strong>=</strong> izin belirle</li><li><strong>r</strong> (read) okuma izni, <strong>w</strong> (write) yazma izni, <strong>x</strong> (execute) çalıştırma izni.</li><li>Örnek Kullanım: <strong>chmod +rw test.txt</strong></li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/206/1*zX9X-iFscOE6sPxgH4V2Uw.png" /><figcaption>chmod komut kullanımı</figcaption></figure><p><strong>chmod go=+r myfile :</strong> Belirtilen dosyanın grup ve diğer kullanıcılar için okuma izni ekler.</p><p><strong>chmod a +rwx myfile :</strong> Tüm kullanıcılar için belirtilen dosyaya okuma, yazma ve çalıştırma izni ekler.</p><p><strong>chmod go -r myfile :</strong> Grup ve diğer kullanıcılar için belirtilen dosyanın okuma iznini kaldırır.</p><p><strong>chown owner1 filename :</strong> Belirtilen dosyanın sahibi değiştirilir.</p><p><strong>chgrp grp_owner filename :</strong> Belirtilen dosyanın grubunu değiştirir.</p><p><strong>chgrp -R grp_owner dir-name :</strong> Dizinin grubunu değiştirir. Bir dizinin grubunu ve dizindeki her şeyi değiştirmek için bu komut kullanılır.</p><h4>Kullanıcı Kimliği ve Linux’ta Kim Kimdir?</h4><p><strong>hostname</strong> Sistemin ana bilgisayar adını gösterir.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/227/1*KD9ntuofYIpUDXjoamhgjA.png" /><figcaption>hostname komut çıktısı</figcaption></figure><p><strong>hostname -f :</strong> Sistemin tam nitelikli adını (Fully Qualified Domain Name -FQDN) görüntüler.</p><p><strong>passwd :</strong> Mevcut kullanıcının şifresini değiştirmek için kullanılır.</p><p><strong>whoami :</strong> Oturumu açık olan, mevcut kullanıcının adını görüntüler.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/281/1*VaUmyfd-mZRlu_nXGgsOKA.png" /><figcaption>whoami komut çıktısı</figcaption></figure><p><strong>who </strong>: Şu anda kullanıcı olarak oturum açmış kullanıcıların listesini görüntüler.</p><p><strong>w :</strong> Mevcut sistem durumunu, zamanını, süreyi, sistemde oturum açmış olan kullanıcıların listesini ve diğer kullanıcı bilgilerini görüntüler.</p><p><strong>last :</strong> Sistemi en son kullanan kullanıcıyı gösterir.</p><p><strong>last root </strong>: Root kullanıcı olarak en son hangi kullanıcının oturum açtığını gösterir.</p><p><strong>lastb :</strong> Sisteme yapılan tüm hatalı giriş denemelerini listeler.</p><p><strong>chmod :</strong> Dizin veya dosya izinlerini (read, write, execute) değiştirmek için kullanılır.</p><p><strong>top :</strong> Mevcut sistemin kaynağı kullanımlarına göre sıralanmış tüm processleri listeler. Processlerin sürekli güncellenen bir görüntüsünü ekrana gelir(Güncelleme süresi varsayılan olarak 3 saniye). Ekrandan çıkmak için q tuşuna basın.</p><p><strong>ps :</strong> Şu anda mevcut shell(kabuk ) oturumunda çalışan processleri listeler.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/572/1*ue7VmZWvprBSlJN87WFhnw.png" /><figcaption>ps komut çıktısı</figcaption></figure><p><strong>ps -u root :</strong> Root kullacısının çalışan tüm pocesslerini ve komutlarını listeler.</p><p><strong>ps aux :</strong> Mevcut sistemdeki tüm kullanıcıların tüm işlemlerini listeler.</p><h3>Kaynaklar</h3><ul><li><a href="https://www.computer-pdf.com/operating-system/linux/837-tutorial-linux-notes-for-professionals-book.html">Linux Notes For Professionals Kitabı</a></li></ul><p>Beni <a href="https://www.linkedin.com/in/nuraykilic/"><em>LinkedIn</em></a><em> </em>hesabımdan takip edebilir veya bağlantı kurabilirsiniz. Zamanınızı ayırdığınız için teşekkürler. Kendinize iyi bakın :)</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6c67348d903b" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Monolitik Mimari vs SOA vs Mikro Servis Mimarisi]]></title>
            <link>https://medium.com/@nuraykilic/monolitik-mimari-vs-soa-vs-mikro-servis-mimarisi-c450ae9284e?source=rss-11942fb66f01------2</link>
            <guid isPermaLink="false">https://medium.com/p/c450ae9284e</guid>
            <dc:creator><![CDATA[Nuray Kılıç]]></dc:creator>
            <pubDate>Thu, 14 Apr 2022 12:17:44 GMT</pubDate>
            <atom:updated>2022-04-14T12:31:01.109Z</atom:updated>
            <content:encoded><![CDATA[<blockquote>Merhaba arkadaşlar, nasılsınız umarım iyisinizdir…</blockquote><blockquote>Bu yazımda sizlere Monolotik Mimari, SOA, Mikro Servis Mimarilerini ve bu mimarilerin avantajlarını dezavantajlarını anlattım. Umarım okumaktan keyif alırsınız.</blockquote><h3>Monolithic Architecture (Monolitik Mimari)</h3><p>Monolitik bir uygulama, birden fazla modül içeren tek bir kod tabanına sahiptir. Modüller, fonksiyonel veya teknik özelliklerine göre ayrılmıştır. Tüm uygulamayı build eden tek bir derleme sistemine sahiptir. Ayrıca tek bir çalıştırılabilir veya deploy edilebilir dosyaya sahiptir.</p><p>Sunucu Katmanları ana hatları ile şu şekilde olacaktır:</p><ul><li><strong>Presentation Layer (Sunum Katmanı):</strong> HTTP hizmetlerini yerine getirmekten ve mesaj formatı HTML, JSON ya da XML gibi notasyonlar ile sağlanan mesajlaşmadan sorumludur.</li><li><strong>Business Layer (İş Katmanı):</strong> Uygulamanın iskeletidir. Akış ve koordinasyondan sorumludur.</li><li><strong>Database Access Layer (Veri Tabanı Katmanı):</strong> Uygulamanın veri tabanına bağlandığı ve veri tabanı işlemlerinin yapıldığı katmandır.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/0*kqCEUf_VNFvwQEtg.png" /></figure><h3>Monolotik Mimaride Ölçeklendirme</h3><p>Sunucu kaynakları yetersiz gelmeye başladığında veya veri tabanı, sorgulara isteklere yetişememeye başladığında monolotik mimaride ölçeklendirmeye gidilir. Ölçeklendirme yatay olarak gerçekleşmek ile birlikte, <strong>Loadbalancer</strong> kullanarak sunuculardaki trafik paylaştırılır.</p><h3>Avantajları</h3><ul><li>Geliştirmesi kolaydır.</li><li>Test edilebilirliği kolaydır.</li><li>Deployment oldukça kolaydır.</li><li>Ölçeklendirme kolaydır.</li></ul><h3>Dezavantajları</h3><ul><li>Proje büyüdükçe bakımı zorlaşır.</li><li>Uygulamanın boyutu başlama süresini yavaşlatır.</li><li>Uygulana güncelleneceği zaman tüm uygulamayı tekrardan deploy etmek gerekir.</li><li>Monolitik uygulamalar ölçekleneceği zaman bazen sorun çıkartabilir.</li><li>Ölçeklendirme tüm proje genelinde yapılır.</li><li>Güvenirlik/Sağlamlık/Dayanıklılık</li></ul><h3>SOA(Service Oriented Architecture)</h3><ul><li>Servislerin ayrı yarı tasarlanıp, bir yapı oluşturmasını sağlar.</li><li><strong>Loose coupling</strong>: Yapılar birbirinden bağımsız olarak çalışabilirler.</li><li>Birden çok sistemin yer aldığı yapılarda kullanılır.</li><li>Birden çok birleşeni vardır: Policies, Contracts, Services, etc.</li><li>Dağıtık yazılım sistemleri kalitesini arttırmayı hedefler:</li><li><em>- Tekrar Kullanılabilirlik (Reusability)</em></li><li><em>- Uyumluluk(Adaptability)</em></li><li><em>- Bakım (Maintainability)</em></li><li>SOA’nın kendi içerisinde kurduğu veya dış bağlantılar için kurduğu iletişimde web servisler (SOAP,WDSL) kullanır.</li><li>Enterprise Bus Service(EBS) client tarafından gelen isteği kontrol ederek SOA ile iletişim kuran katmandır.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/640/0*IutSg9krE6jFFvfg.png" /></figure><h3>Avantajları</h3><ul><li>Servisler tekrar kullanılabilir.</li><li>Servislerin bakım ve onarımı kolaydır.</li><li>Güvenilirlik/Dayanıklılık</li><li>Up Time oranları yüksektir.</li><li>Ulaşılabilirlik yüksektir.</li><li>Yatak ve dikey ölceklendirme mümkündür.</li><li>Platform bağımsızdır.</li><li>Üretkenlik artar.</li></ul><h3>Dezavantajları</h3><ul><li>Overload / Aşırı Yüklenme</li><li>Yüksek maliyet</li><li>Yüksek bant genişliği</li></ul><h3>Microservice Architecture (Mikro Servis Mimarisi)</h3><ul><li>SOA’nın farklı bir bakış açısı ile yorumlanmış halidir.</li><li>Büyük servisleri küçük servisler olarak sunmayı hedefler.</li><li>Servisler kendine ait server stackleri(sunucu) vardır.</li><li>Her servisin kendine ait Database’i vardır.</li><li>Microservice’lerin hedefi sadece bir küçük işi çok iyi yapmaktır.</li><li>Microservice’ler kendi aralarında API Gateway üzerinden iç ve dış dünya ile iletişim kurarlar.</li><li>Herhangi bir teknoloji ve dile ait bir kısıtlama yoktur.</li><li>Stateless yapılardır.</li><li>Kolay ölçeklendirilme yapılır. (Yatay olarak ölçeklendirilir.)</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/750/0*TxCENmujMhKTuYlL.png" /></figure><h3>Avantajları</h3><ul><li>Çok dilli mimaridir.</li><li>Kolay ölçeklendirme yapılır.</li><li>Daha iyi bir takım yönetimi gerçekleşir.</li><li>Yenilik yapmak daha kolaydır.</li><li>Microservislerin kendine ait veritabanları vardır.</li><li>Daha odaklı yapısı vardır.</li><li>Implement edilirken diğer servisler etkilenmez.</li></ul><h3>Dezavantajları</h3><ul><li>Implement kolay değildir. (Network calls, Service discovery)</li><li>Debug kolay değildir.</li><li>Hata yönetimi kolay değildir.</li></ul><h3>Kaynaklar</h3><ul><li><a href="https://www.youtube.com/watch?v=IGUJKGskaOE">Kablosuz Kedi Youtube Kanalı — Mikro Servis Mimarisi Nedir?</a></li></ul><p><em>Kablosuz Kedi kanalına bizlere faydası olan bu güzel anlatımı için teşekkür ederim.</em></p><p>Beni <a href="https://www.linkedin.com/in/nuraykilic/"><em>LinkedIn</em></a><em> </em>hesabımdan takip edebilir veya bağlantı kurabilirsiniz. Zamanınızı ayırdığınız için teşekkürler.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c450ae9284e" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Apache Kafka Nedir, Nasıl Çalışır?]]></title>
            <link>https://medium.com/@nuraykilic/apache-kafka-nedir-nas%C4%B1l-%C3%A7al%C4%B1%C5%9F%C4%B1r-e2e0248950be?source=rss-11942fb66f01------2</link>
            <guid isPermaLink="false">https://medium.com/p/e2e0248950be</guid>
            <category><![CDATA[apache-zookeeper]]></category>
            <category><![CDATA[apache-kafka]]></category>
            <dc:creator><![CDATA[Nuray Kılıç]]></dc:creator>
            <pubDate>Mon, 28 Mar 2022 10:56:14 GMT</pubDate>
            <atom:updated>2023-01-19T09:05:31.072Z</atom:updated>
            <content:encoded><![CDATA[<blockquote>Merhaba arkadaşlar, nasılsınız umarım iyisinizdir… Patika.dev platformu tarafından düzenlenen Inavitas Node.js Bootcamp’ine katılarak oradan mezun oldum. Bootcamp eğitim süreci boyunca Apache Kafka ile ilgili edinmiş olduğum bilgilerimi ve notlarımı buraya aktarmak istedim.</blockquote><blockquote>Umarım okumaktan keyif alırsınız.</blockquote><h3>Apache Kafka Nedir?</h3><ul><li>Bir <strong>message broker</strong> sistemidir. Mesaj alınır bir alanda depolanır ve mesaj buradan okunup ilgili alanlara dağıtılır. Kuyruk (Queue) sistemi ve daha fazlasıdır.</li><li>Scala ve Java ile yazılmıştır.</li><li>Mesajlar index yapısına göre yazılır ve okunur.</li><li>Index yapısından dolayı oldukça hızlı bir sistemdir.</li></ul><h3>Nerelerde Kullanılır?</h3><ul><li>Web sayfası etkinlik izlemelerinde</li><li>İzleme sistemlerindeki metriklerde (CPU, Disk Takibi vb.)</li><li>Log toplama sistemlerinde</li><li>Stream Processing işlemlerde (Dağıtma gereken sistemlerinde örneğin: Youtube vb.)</li></ul><h3>Avantajları</h3><blockquote>Yüksek trafikte düşük gecikme sağlar.</blockquote><ul><li>High throughtput and low latency</li></ul><blockquote>Ölçeklenebilir (Scalable)</blockquote><ul><li>Node ve Partition ile yatak ölçeklendirme yapılır.</li></ul><blockquote>Güvenilir (Reliable)</blockquote><ul><li>Ölçeklendirilmiş ve hata tolere edilebilir.</li></ul><blockquote>Sağlam (Durable)</blockquote><ul><li>Veri kaybı yok, mesajlar disk üzerine immutable log ile yazılır.</li></ul><blockquote>Apache Projeleri açık kaynaktır.</blockquote><h3>Kullanan Şirketler</h3><ul><li>Uber, Netflix, Activision, Spotify, Slack, Pinterest, Linkedin…</li></ul><h3>Apache Kafka’nın Bileşenleri</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/809/0*82zfSQBhU1mpH71n.png" /></figure><ul><li><strong>Producer</strong>: Kafka’nın toplayacağı dataları Topic’lere gönderen kısımdır.</li><li><strong>Partiton</strong>: Topic’ler partition’lara ayrılırlar. Partition’lar 0&#39;dan başlayarak artan sayıda devam eder. Topic yaratırken verilen partition sayısı sonradan değiştirilebilir.</li><li><strong>Topic</strong>: Producer’dan gönderilen dataları depolayan birimlerdir. İstenildiği kadar topic oluşturulabilir.</li><li><strong>Kafka Broker</strong>: partitionlar bir araya gelerek Broker’i oluşturur. Broker’lar bir araya gelince Kafka Cluster’i oluştururlar.</li><li><strong>Consumer</strong>: Topiclere bağlanan ve topicleri tamamen tüketene kadar okuyan birimdir. Birçok consumer bir araya gelerek belirli bir düzen içinde okuma yapınca bu duruma <strong>Consumer Group</strong> denir.</li></ul><h3>Kafka Nasıl Çalışır?</h3><ol><li>Kafka Cluster’ı kurarken ilk başta Topic üretilir.</li><li>Producer, okunan dataları Topic’e push eder.</li><li>Consumer, Topic’i Queue(kuyruk) yapısına göre Topic’te data kalmayacak şekilde okur.</li></ol><blockquote><em>Kafka, içerisinde Message Queue ve Publish-Subscribe olmak üzere iki model barındırır.</em></blockquote><p><strong>Queue:</strong> Mesaj bir kere publish edilir ve bir kere consumer tarafından consume edilir. Sonra Queue üzerinde mesaj silinir.</p><p><strong>Pub/Sub(Publisher-Subscriber):</strong> Mesaj publish edildiğinde birden fazla kez consume edilir.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/604/0*8fO-_8-z9-fOpzE9.png" /></figure><h3>Consumer Group Nedir?</h3><ul><li>Partition’ların paralel olarak işlenmesi için kullanılır.</li><li>Bir consumer bir partition okumaktan sorumludur ve olması gereken böyledir. Böyle uygulanması performans açısından da daha uygundur.</li><li>Fakat bu durum <strong>Consumer Group</strong> ile değiştirilebilir.</li><li>Consumer Group ile Queue ve Pub/Sub metodlarını aynı anda kullanımına imkan sağlar.</li><li>Birden fazla consumer olduğunda consumer’lar arası balancing işlemini Consumer Group sağlar.</li></ul><blockquote><em>Customer Group Queue gibi davranması isteniyorsa;</em></blockquote><ul><li>Tüm Consumer’ları bir grup içerisinde tutmalıdır. (Aşağıdaki örnekte olduğu gibi)</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/880/0*ZGya4EyTaheGvxdU.jpg" /></figure><blockquote><em>Customer Group Pub/Sub gibi davranması isteniyorsa;</em></blockquote><ul><li>Her bir Consumer’ı kendine ait başka bir Consumer Group içine aktarılmalıdır. (Aşağıdaki örnekte olduğu gibi)</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/532/0*G63sIRkPgkFpgap7.png" /></figure><h3>Apache Zookeeper Nedir?</h3><p>Kafka’ya bağlanıp Kafka ile beraber bilgilerin stabil bir şekilde tutulmasını sağlar.</p><ul><li>Sürekli Kafka Broker’a bağlı çalışan bir model olarak düşünülebilir.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*42IG8UmRzWEPidGO.png" /></figure><h3>Kaynaklar</h3><ul><li><a href="https://www.youtube.com/watch?v=ZphPT3r6fnU&amp;t=1060s&amp;ab_channel=kablosuzkedi">Kablosuz Kedi Youtube Kanalı-Apache Kafka Nedir?</a></li></ul><p><em>Kablosuz Kedi kanalına bizlere faydası olan bu güzel anlatımı için teşekkür ederim.</em></p><p><a href="https://github.com/nurayklc/kafka-node">Apache Kafka için Node.js</a> ile yapmış olduğum örneği inceleyebilirsiniz.</p><p>Beni <a href="https://www.linkedin.com/in/nuraykilic/"><strong><em>LinkedIn</em></strong></a><strong><em> </em></strong>hesabımdan takip edebilir veya bağlantı kurabilirsiniz. Zamanınızı ayırdığınız için teşekkürler.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e2e0248950be" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>