Turkish

Expo ile React Native Web, IOS ve Android Projesi Oluşturmak 1024 635 mezo

Expo ile React Native Web, IOS ve Android Projesi Oluşturmak

Selamlar sevgili programcı padavanlar

Başlıktan da anladığınız gibi bu makalemde sizlere nasıl React Native ile hem web hem android hem de IOS projesi oluşturabiliriz sorusunun cevabını anlatacağım. İlk olarak Expo CLI paketini yükleyerek başlıyoruz.

Expo CLI paketi ile oluşturduğumuz projemiz için XCode yada Android Studio gibi ek IDE yazılımlarına ihtiyaç kalmadan tek seferde 3 platform için yazılım geliştirebilmemizi sağlıyor.

Expo ile proje geliştirebilmek için öncelikle NodeJS e ihtiyacımız var. Eğer bilgisayarınız da NodeJS yoksa şuradan https://nodejs.org/en/ indirebilirsiniz.

NodeJS i kurduk şimdi sıra Expo CLI paketinde.

Expo Kurulumu ve Proje Oluşturma

ExpoCLI kurmak için Node.js command promptu bulup çalıştırın ve aşağıdaki komut satırını çalıştırın.

npm install -g expo-cli

Projeyi Oluşturmak için ise :

expo init ProjeAdı

Template Seçimi

Komut satırı çalışır çalışmaz aşağıdaki template seçim ekranı bizi karşılıyor. Buradan projenize uygun olan şablonu seçebilirsiniz ben TABS template ini seçiyorum. TABS ile gelen proje içerisinde çalışan bir sekme örneği var React Native i çok iyi anlayabileceğiniz güzel bir örnek olduğunu düşünüyorum.

Sonrasında yine Node.js command prompt üzerinden oluşturduğumuz klasörün içine giderek projemizi çalıştırıyoruz.

expo start

Proje çalışırken hem command prompt üzerinde hemde açılan localhost web sitesi üzerinde bir kare barcod çıkıyor bu barcod ne işe yarıyor birazdan anlatacağım…

Nodejs Command Prompt

Web Expo Proje Sayfası 

Projemizi Cihazlarda Çalıştırmak

Ardından elinizdeki cihaz üzerinde Google Play yada Apple App Store üzerinden Expo uygulamasını indirerek bir hesap oluşturun ardından projenizi eklemek için bir barkod isteyecek işte şimdi yukarda çıkan barkodların bir anlamı oldu. Cihazınızın kamerası ile barkodu okutun ve oluşturduğunuz uygulamanız telefonunuzda çalışmaya başlasın.

Başlangıç olarak projenizi Visual Studio Code üzerinde açıp Screens klasörü içindeki TabOneScreen.tsx , TabTwoScreen.tsx dosyalarını biraz değiştirerek uygulamanızı biraz değiştirebilirsiniz.

Şimdilik bu kadar bir sonraki yazıda sizlere React Native üzerinde component yapısını anlatacağım.

Okuduğunuz için teşekkürler

Bilgiyle Kalın…

Javascript Algoritmaları – Bubble Sort 230 300 mezo

Javascript Algoritmaları – Bubble Sort

Bubble Sort okullarda öğretilen ilk algoritmadır diyebiliriz. Bu algoritma verim olarak en verimsiz sıralama algoritmasıdır ancak yapısal olarak anlaşılması en kolayıdır. Buradaki temel fikir sıralanacak dizi içindeki elemanların karşılaştırılmasıdır. Her seferinde 2 eleman karşılaştırılır ve sonrasında yerleri değişmeden önce doğru sıradalarmı diye emin olur. Basit olarak : 
*Ilk eleman ile ikinciyi karşılaştırır
*Eğer ilk eleman ikinci elemandan sonra gelmeliyse yerlerini değiştirir
*Sonra üçüncü eleman ile ikiyi karşılaştırır 
*Eğer  ikinci eleman , üçüncü elemandan sonra gelecekse yerlerini değiştirir ve bu işlem dizinin son elemanına kadar devam eder. 
Aşağıdaki resim anlattığım şu mantığı anlamanıza yardımcı olacaktır. 

Flowchart:

Örnek Kod:

See the Pen Bubble Sort by mzekiosmancik (@mzekiosmancik) on CodePen.

Javascript Algoritmaları – Selection Sort 300 363 mezo

Javascript Algoritmaları – Selection Sort

Selection Sort Bubble Sort’un biraz geliştirilmiş halidir ve elemanlar arasında döngü ile dönerken her eleman geçişinde sadece bir seçim yapar ve o seçimin sıralamasını değiştirir.
Bu sıralama : 
*Ilk elemanın en küçük olduğunu varsayar 
*Sonra bu elemanı ikinci sıradaki değer ile karşılaştırır.
*Eğer ikinci sıradaki eleman ilkinden küçükse bu sefer ikinci değeri en küçük olarak atar. 
*Bu işlem dizinin son elemanına dek devam eder.
*Eğer minimum deger başladığınız değer değilse yerlerini değiştirir.
Aşağıdaki resim biraz daha yardımcı olacaktır.

Selection Sort Çalışması:

Örnek Kod:

See the Pen Selection Sort by mzekiosmancik (@mzekiosmancik) on CodePen.

Javascript Algoritmaları – Insertion Sort 300 180 mezo

Javascript Algoritmaları – Insertion Sort

Insertion Sort sonuç olarak beklediğimiz sıralanmış listeyi her eleman için sıralayan çok basit bir sıralama algoritmasıdır. Bu yüzden de Heap Sort yada Quick Sort kadar verimli bir sıralama algoritması değildir. Insertion sıralamasını elimizdeki bir dizi iskambil kağıtlarını sıralamak gibi düşünebilirsiniz. Aşağıdaki animasyonu incelediğinizde göreceksiniz elinizdeki kağıtları sıramak için bir kartı aradan çekip yerine yerleştirdiğimiz gibi çalışan ve her seferinde sıralanmış bir dizi elde eden bir sıralama yöntemi. 

Animasyon:

FlowChart:

Örnek Kod:

See the Pen Insertion Sort by mzekiosmancik (@mzekiosmancik) on CodePen.

Javascript Algoritmaları – Binary Search 386 878 mezo

Javascript Algoritmaları – Binary Search

Binary search sıralı bir dizi içinde aradığımız değeri bulabilmek için çok verimli bir algoritmadır.  Verilen sıralı diziyi tekrar tekrar 2 ye bölerek aramaya devam eder sonunda aradığı değerin index numarasını bulana kadar. Binary search kullanımı için bir örnek verecek olursak , diyelim ki Google Maps ile çalışıyorsunuz ve kullanıcıdan aldığınız bir mekan ismini DB den gelen sıralı listenizden bulup o mekanın koordinatlarını alıp haritada gostermek istiyorsunuz bunun için en verimli arama algoritması Binary Search olacaktır. Nedenini açıklayacak olursak linear arama da algoritma tüm listeyi bastan sona gezer ve bulmaya çalışırdı bu da binlerce mekan bilgisi içinden bir isim bulabilmek için tek tek bastan sona hepsini incelemesi gerektiği anlamına geliyor hem uzun hemde yorucu bir işlem ancak binary search ile bu binlerce mekanı tek tek kontrol etmek zorunda değiliz.

İnsanlara bir algoritmayı anlatırken bazı küçük detayları söylemeye gerek yoktur örneğin bir kek yapılmasını istediğimizde buzdolabını nasıl açması gerektiğini yada yumurtaları dolaptan çıkarıp nasıl kırmaları gerektiğini söylememize gerek kalmaz insan bu gibi küçük detayları kendisi tamamlayarak kek yapma işlemini tamamlayabilirler ancak bilgisayarda bu gibi küçük detaylar  bilgisayar tarafından tamamlanamaz tüm detayların bilgisayara tanımlanması gerekir.

Programlama boyutunda algoritmaları uygulayabilmek için algoritmanın tüm detaylarını bilmek gerekiyor. Problem için girdiler nedir ? Çıktısı nedir ? Hangi değişkenler tanımlanmalı ? Bu değişkenler ne türde olmalı? Bir döngü olmalı mı ne gibi koşullarda olmalı gibi detaylar.

Hadi bu kadar boş yaptıktan sonra şu binary search e dikkatlide göz atalım. Buradaki ana fikir belirttiğimiz sayıyı bulabilmek için belirli aralıkları takip etmek. Diyelim ki bir tahmin oyunu oynuyoruz ve bu tahmin oyununda aklımızdan 1 ile 100 arasında bir sayı tutuyoruz. Ardından siz de bana tahminimizi söylüyorsunuz ve 25 diyorsunuz ve ben size Yukarı diyorum. Ardından siz 81 diyorsunuz bende size Aşağı diyorum. Şimdi biliyorsunuz ki sayı artık kırmızı ile işaretlediğimiz 26 ile 80 aralığında yani 25 ten küçük ve 81 den büyük sayıların hepsini elemiş olduk.

Her seferinde tahmininiz eğer doğru değilse kalan aralıktaki sayıları belli tahmin edilebilir bir aralığa bölerek devam ediyor. Üçüncü tahmininde53 diyorsunuz ve bende Aşağı diyorum yine ne yapmış olduk 26-80 aralığındaki sayıyı tekrar bölmüş olduk 

Doğru sayıyı bulana kadar böyle sürüp giden ama sonunda sayıyı bulduğumuz bir oyun gibi çalışır Binary Search.

İşlem sırası yazacak olursak

1-Min = 1 ve Max = n

2-Max ve Min sayı aralığında bir integer bir değer tut

3-Eğer sayıyı bulduysan çık. Doğru tahmin

4-Eğer tutulan sayıdan düşük ise Min değişkenine tahmin edilen sayıya 1 ekleyip atama işlemini gerçekleştir.

5-Eğer tahmin edilen sayı tutulandan büyük ise o zaman Max değerini tahmin edilenden 1 çıkarıp atama işlemini gerçekleştir.

6-2 numaralı işleme geri dön.

See the Pen Binary Search by mzekiosmancik (@mzekiosmancik) on CodePen.

Javascript Algoritmalari – Heap Sort 709 790 mezo

Javascript Algoritmalari – Heap Sort

Sıradaki sıralama algoritmamız Heap Sort yani Türkçe meali ile yığın sıralaması.

Bilgisayar bilimine göre heap Sort yani yığın sıralaması algoritması karşılaştırma bazlı bir sıralama algoritmasıdır. Heap sort geliştirilmiş seçimli sıralama olarak da düşünülebilir : yani diziyi sıralanmış ve sıralanmamış olarak bölümlere ayırır ve interaktif bir biçimde sıralanmamış olan bölümü daraltır son olarak bir bütün sıralanmış bir output ortaya çıkarır. Heap sort iyi dizayn edilmiş QuickSort dan daha yavaş çalışsa da , O(n log n) çalışma zamanında olumlu bır  avantajı vardır.  Heap sort yerinde ve kullanılabilir bir algoritma olmasına rağmen stabil çalışan bir sıralama algoritması değildir. 

Heap sort çalışması sırasında bir diziyi rastgele sırası değişen değerlerle sıralar.  Algoritmanın ilk çalışma aşamasında elemanlar heap yapısına uygun olacak sekilde tekrar sıralanır ve heap ağacı yapısı aşağıdaki animasyonda gösterildiği gibi sonucu sunar. 

Animasyon:

FlowChart:

Örnek Kod:

See the Pen Heap Sort by mzekiosmancik (@mzekiosmancik) on CodePen.

Javascript Algoritmaları – Merge Sort 625 598 mezo

Javascript Algoritmaları – Merge Sort

Bır baska sıralama tekniği ile birlikteyiz inkilizcesi Merge Sort türkçesi birleştirme kaynaştırma sıralaması olan bu algoritma 2 diziyi alıp küçükten büyüğe sıralamak üzerine kurulmuştur.

Aşağıdaki animasyondan da anlayacağınız üzere 2 dizi alınıyor daha sonra bunları n kadar alt dizilere bölerek bu alt listeleri karşılaştırılarak results dizisine ekleme yaparak sıralıyor.
Animasyon :

Flowchart :

Örnek Kod :

See the Pen Merge Sort by mzekiosmancik (@mzekiosmancik) on CodePen.

Javascript Algoritmalari – Quick Sort 453 593 mezo

Javascript Algoritmalari – Quick Sort

Merhaba arkadaşlar bazı aldığım notları sizlerle paylasmak istiyorum bunlar javascript  ile temel algoritma soruları ve yöntemleri olarak nitelendireceğimiz küçük yazılar olacak.
Hızlı sıralama
Hızlı sıralama bir dizi içindeki elemanları herhangi bir ilişki kuralı koymadan dümdüz küçükten büyüğe sıralamamıza yarayan bir algoritma hadi bakalım nasıl bir şeymiş…

Bu sıralama önce diziden bir ilk elemanı pivot olarak belirler ve onun etrafında sıralama yapmaya başlar. Küçükse left dizisine büyükse right dizisine. Yani pivot eleman her zaman ortada kalıcak şekilde ,ondan büyük ve kücükleri sıralar. Dikkat edecek olursanız fonksiyonun sonunda sıralanmış olan diziyi döndürürken left ve right dizileri içinde aynı metodu cağırarak yani onları da bir daha sıralamaya koyarak geri döndürüyoruz.
Sıralama Animasyonu :
Sorting quicksort animation

FlowChart :

Örnek Kod :

See the Pen Quick Sort by mzekiosmancik (@mzekiosmancik) on CodePen.

Artificial Intelligence with Phyton 302 373 mezo

Artificial Intelligence with Phyton

Click for Download PDF…

Bölüm 3 – Swift Playground Alistirmalari 1024 729 mezo

Bölüm 3 – Swift Playground Alistirmalari

Merhaba arkadaşlar

Şimdi geldi sıra biraz Swift alıştırması yapmaya  Xcode IDE’mizi kurup açtıktan sonra örnek bir Playground  dosyası açarak devam ediyoruz ve biraz Swift alıştırmaları yapıyoruz. Bunun nasıl yapılacağını bilmiyorsanız muhtemelen bir önceki yazıyı okumadınız anlamına geliyor hemen vakit kaybetmeden buradan okuyabilirsiniz.

35+23
62-14
50/ 3
423 * 514

Playground sayfasını açtıktan sonra başlayalım Swiftin basit kodlarını tanımaya.

İlk Örnek olarak Operatorleri tanıyalım yani Swift hangi işaretlerle matematiksel işlemleri yapabilir ve kod olarak sunları yazalım ve işlemlerimizin sonucunu anında sağ taraftakı alanda görelim.
Bu işlemleri yaptıktan hemen sonra sol taraftaki alanda sonuclarının çıktığını göreceğiz.
Peki Swift programlama dilinde tipler neler ve nasıl tanımlanıyor hemen bir örnekle devam edelim burada spesifik olarak bir tip tanımlayarak yolumuza devam etmek istediğimiz takdirde bu tip tanımlamalarını yapabiliriz. Tiplerin diğer dillerden pek bir farkı yok yalnızca tanımlama aşamasında biraz değişik gelebilir.
Playground alanımıza şu kodları yazalım:

//Tipler
var yas : Int  = 32 :
var para : Double = 11.5
var isim : String = “Mezo”
var dogruYanlis : Bool = true

Peki bu bir kural mı yani bu şekilde yazmadan bir değişken tanımlamak mümkün mü sorusuna evet olarak cevap verip Javascript te nasıl bir tip tanımlama zorunluluğumuz yoksa burada da bir tip belirtmeden bir değişken tanımı yapabiliriz. Aşağıdaki örnekleri Playground a yazarak çıktılarını inceleyelim :

//Tip tanimi yapilmadan tanimlanan degiskenler
var yasim = 31
var ismim = “Mezo”
var param = 13.5
var bilgilerDogrumu = false
// Degiskenlere deger atanmasi
ismim  = “Mehmet Zeki”

Değişkenlerden bahsederken sabitlerden bahsetmemek olmaz tabi ki. Bir değişenin yalnızca okunabilir olmasını istiyorsanız daha sonradan üzerine veri yazılmasını değiştirilmesini istemiyorsanız sabit değişken tanımlarsınız buda Swift te şu şekilde oluyor :

// Sabit Degiskenler
let BilgisayarMarkasi = “Apple”
//BilgisayarMarkasi = “Microsoft” // Bunu yazamazsiniz cunku degiskenin basina let yazildiginda constant (sabit) olur degistirilemez.
Basit alıştırmamıza karşılaştırma operatörleri ile devam ediyoruz sayın okuyucu o mu büyük bu mu? bunlar eşit mi yoksa değil mi ? Gibi sorularınızın cevabı işte asağıdaki kodlarda önce sabit değişkenlerimizi tanımlıyoruz ardından da karşılaştırıyoruz
//Karsilastirma Operatorleri
let benimYasim = 31
let babaminYasi  = 50
let arkadasiminYasi = 29
let kacSenedirDunyadayim = 31

benimYasim > babaminYasi
benimYasim == kacSenedirDunyadayim
benimYasim < babaminYasi
benimYasim <= kacSenedirDunyadayim benimYasim >= kacSenedirDunyadayim
benimYasim != babaminYasi

Playground projesi açarak bu alıştırmaları yazdığımızda anlık sonuçlarınıda görmüş olacaksınız aşağıdaki resimdeki gibi

Umarım Yararlı olmuştur
Bilgiyle Kalın
M.Zeki OSMANCIK

Bölüm 2 – Swift Playground ile Oynayalım 1024 306 mezo

Bölüm 2 – Swift Playground ile Oynayalım

Merhabalar arkadaşlar

Xcode kurulumunu tamamladıktan sonra artık Swift öğrenmeye başlayabiliriz. 2014 yılında Uluslararası Yazılım Geliştiricilerı Konferansında (Worldwide Developer Conference) Apple tüm IOS geliştiricilerini şaşırtarak ‘Swift’ adında yeni bir programlama dilini kullanmaya başlayacaklarını duyurdu. Bu dil öğrenmesi kolay ve bir çok yeniliklerle geliştiricilerin daha verimli üretken olmalarını sağlayabilecekti.

Bu dilden önce IOS uygulamaları geliştirmek için Objective C dili kullanılıyordu. Bu dil yaklaşık 20 yıldır Apple tarafından öncelikli programlama dili olarak MacOS IOS uygulamaları için kullanılıyordu. Objective C öğrenmesi zor ve syntax’ı karışık hataya müsait ve yeni başlayan insanları korkutan ,akılda kolay kalmayan bir programlama diliydi.

Swift programlama dilinin çıkarılması Apple’ın bu tarz yorumlara en güzel cevabı oldu. Syntax temiz ve okuması daha kolay bir programlama dili. Ben Swift’i kullanmaya yeni başladım daha önce Objective C ile uygulamalar geliştirdim anca söyleyebilirim ki o zaman kesinlikle işkence çekmişim Swift kesinlikle daha kullanışlı ve kolay 🙂 Swift’i öğrendikten sonra Objective C o kadar zor geldi ki geri dönüp baktığımda tekrar Objective C ile uygulama geliştirir miyim ? Hiç Sanmıyorum 🙂

Swift bir çok yazılımcıyı IOS yazılımı geliştirmesi için tahrik edecek gibi duruyor. Eğer bir Web Developer sanız ve daha Javascript AngularJS gibi dillerle uğraşıyorsanız müjdeler olsun Swift öğrenmeniz ve uygulamanıza başlamanız sadece bir kaç gününüzü alacaktır. Eğer programlama deneyimi olmayan yeni başlayan bir aday iseniz çok endişelenmeyin sizinde yanlızca bu yazı dizisini bitirmeniz ve bol bol pratik yapmanız sonrasinda siz de uygulamanızı geliştirebilecek hale gelebilirsiniz.

Haziran 2015 de Apple Swift 2 yi duyurdu ve bu programlama dili açık kaynak (open source) haline geldi. Bu herşeyini gizli tutan Apple için çok büyük bir adım oldu. Dili açık kaynak haline getirerek geliştiricilerin bu programlama dili için ilginç ve yaratıcı projeler eklemesi anlamına geliyordu. Swift yanlızca IOS uygulaması geliştirilen bir dil olmaktan çıktı mesela IBM giib firmalar web framework (kütüphane) yaratıp Swift ile web uygulamarının da geliştirilebilmesini sağladılar. Belki bir gün Android uygulamarınıda Swift ile yazarız kim bilir 🙂

Bu yılın ilk aylarında Swift 3 ü duyuran Apple Eylül 2016 da yeni versiyonunu çıkardığı Xcode 8 i tamamen Swift 3 ile entegre hale getirdi ve geliştiricilerin huzuruna sundu. Bu versiyon Swift in doğduğu tarihten itibaren çıkarılan en büyük en iddialı versiyonuydu.

Swift 3 te çok fazla bir değişiklik yok gibi görünse de API isimleri değiştirildi ve eklenmiş daha fazla özellik tanıtıldı. Bütün bu değişiklikler işleri zorlaştırmaktan çok geliştiricilerin daha kolay uygulama geliştirmeleri için yapılan değişiklikler ve özellikler. Şu değişti bu değişti şeklinde açıklama yapmayacağım çünkü öğrenmeye yeni başladık değil mi ? Kafa karıştırmaya gerek yok eski versiyonları bilmediğinize göre direkt yenisini öğreneceğimiz için sorun yok.

Şimdi isterseniz Objective C ve Swift kodlarına bakalım…

Objective C

const int count = 10;
double price = 23.55;

NSString *firstMessage = @”Bu Swift bir harika dostum “;
NSString *secondMessage = @”Öyle değil mi ?”;
NSString *message = [NSString stringWithFormat:@”%@%@”, firstMessage, secondMessage];

NSLog(@”%@”, message);

 

Swift

let count = 10
var price = 23.55

let firstMessage = “Bu Swift bir harika dostum”
let secondMessage = “Öyle değil mi ?”
var message = firstMessage + secondMessage

print(message)
Kodlara baktığımızda ilk kısımda Objective C kodlarını görüyoruz ikinci olarak Swift kodlarını görüyoruz. Hangi dili tercih edersiniz ? Sanırım cevaplar aynı herkes Swift’in daha okunur kolay göründüğünü düşünüyordur. Objective C nin syntax’ı daha karışık biraz daha zor gibi.

Contant(sabit) ve Variable (değişken) tüm programlama dillerinde yer alan basit yapılardır. Objective C de kullanacağınız değişken ve sabitlerin hangi türden olacağı içersine hangi değerlerin tutulacağını biz belirlemek zorundayız.Örneğin bu string (yazı) türünden değişkeni tanımlamak için NSString yada NSMutableString değerlerini kullanmak gerekiyor bunların arasındaki farkları anlatmayacağım uzun uzun ancak bu yapılardan hangisini kullanmamız gerektiğine bizler karar vermek zorundayız ancak Swift te böyle bir zorunluluk yok yalnızca değeri ismiyle tanımlamanız yeterli.

Kodlamayı öğrenmek için alıştırma yapmak kadar etkili bir yöntem yoktur arkadaşlar unutmayın ne kadar çok alıştırma yaparsanız o kadar çok mantığı öğrenip kodlarınızı kendiniz yazmaya başlayacaksınız işin sırrı yazmak yazmak yazmak 🙂

Evet şimdi sıra geldi Swift ile programlama alıştırması yapmaya :

Resim 2-1 Xcode Başlangıç Penceresi

Playground özel bir Xcode dosyasıdır basitce Başlangıç Penceresinden seçip isimlendirip kullanmaya başlayabilirsiniz.

Resim 2-2 Playground Dosyası Oluşturmak

İstediğini ismi verebilirsiniz, Next butonuna bastığınızda dosyanın nereye kaydedileceğine dair bir pencere ile bir yer seçmelisiniz ve sonrasında işte karşımızda Playground 🙂

Resim 2-3 Playground Interface’i.

Şimdi bu ekranı tanıyalım : Sol tarafta bir editör bulunuyor bu editör kodlarımızı yazdığımız editördür, sağ tarafta görülen panel ise sol taraftaki editöre yazdığımız kodların çıktılarını anında gördüğümüz bir alan bulunmakta. Ekranı ilk açtığımızda default olarak 2 satır kod görüyoruz Import ile başlayan kod satırı bir kütüphanenin kullanılacağını belirtir. Farklı kütüphaneleri kullanacağımız zaman mutlaka dosyamız üzerine import etmemiz gerekmekte.

Haydi artık kodlarımızı yazmaya başlayalım.

Önce değişken tanımlayarak başlayalım.

var isim = “MEZO”

Bu satırları yazar yazmaz hemen sağ tarafta çıktılarını göreceksiniz şu şekilde.

Resim 2-4 Sonuçların Sağ Panelde Gösterilmesi

Sonrasında aşağıdaki kodla devam edelim

isim.lowercased()
Xcode editörü otomatik tamamlama (IntelliSense) özelliğine sahiptir yani siz bir değişken yada bir obje tanımladıktan sonra tekrar cağırmak yada kullanmak isterseniz Xcode editörü size seçenekleri sunuyor yanlış yazma olasılığınız ortadan kalkıyor. Yukarda ‘isim’ adında bir değişken tanımladık , editöre ‘is’ yazdığınız anda size aşağıdaki resimde göreceğiniz gibi bir öneri penceresi çıkarmakta ve size ‘is’ ile başlayan objeleri ve tanımladığınız değişkenleri göstermekte bu özelliği kullanmak için tek yapmanız gereken çıkan isteden ‘isim’ i seçip Enter tuşuna basmak.

Resim 2-5 Intellisense

Swift yapılarında (.) nokta işareti kütüphanelerde bulunan metotları çağırmak için kullanılırlar. Tek yapmanız gereken değişken yada objenin isminden sonra (.) noktaya basmak ve Intellisense listesi yine karşımızda bu sefer metot listesi geliyor buradan da ‘U’ harfine basarak uppercased metodunu listeden seçip Enter tuşuna basmanız yeterli olacaktır.

Resim 2-6 Intellisense üzerindeki metot önerileri listesi

Şimdi kodlamaya aşağıdaki kodla devam edelim

isim.lowercased() + ” Blog”
Swift (+) artı operatörü ile bu string tipindeki nesneleri birleştirme imkanı sunuyor. Yazdığımız kod ile message2 içersindeki yazıyı küçük harflerle yazıp sonunada eklediğimiz yazıyı ekleyerek bizlere gösterecektir. İlginç ve eğlenceli olan bir küçük nokta belirteyim kodlarınızın arasına emojiler de ekleyebiliyorsunuz 🙂 Nasıl mı ? Tek yapmanız gereken Control + Command + Space tuşlarına basmak ve emoji seçme ekranı karşınıza geliyor.

Başka bir kodla devam edelim

if isim == “MEZO BLOG” {
print(“isim ayni”)
} else {
print(“isim ayni degil”)
}
Koşul mantığı programlamada çok yaygın kullanılır. Hayatta olduğu gibi programlarımızda da bazı seçimler yapmak zorunda kalabiliriz bu karar aşamasında bazı koşulları belirterek farklı işlemler yaptırmak mümkün. Bunun için yazmamız gereken kod ‘if-else’ koşul kodlarımızdır. Yukardaki yazdığımız kodun Türkçe meali şudur : Eğer isim “MEZO BLOG” ile aynı ise o halde “isim ayni” yaz. Eğer değilse o halde “isim ayni degil” yaz dedik.

Haydi birazda ön yüz(UI – User Interface). elemanları ile çalışıp çalışmamızı biraz şenlendirelim. 🙂

let messageLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 300, height: 50))
messageLabel.text = message1
messageLabel
Aslında bu tür elemanları gerçek bir IOS projesi açtığımızda mouse ile ekleyebileceğiz ancak burada kodlarımız ile bir önyüz elemanı yaratıp nasıl görünüyor onu test edeceğiz. Yukardaki kodda genişliği 300 yüksekliği 50 pixel olan bir Label (etiket) türünden bir UI elemanı ürettik ve içersinde göstermesi içinde message1 değişkenini verdik. Bu kodu yazdıktan sonra sağ panelde herşeyin sonucunu görüyorduk ya bu kez orada birşey göremeyebiliriz yani görücez ama sonucu değil. Aşağıdaki resimde gördüğünüz üzere bu kodun sonucunun tam karşısındaki sonucun yanında 2 tane nokta belirecek biri Quick Look (Gözat) diğeri ise Show Result (Sonucu Göster) eğer Quick Look butonuna tıklarsanız Label nesnesinin neye benzediğini ve içersindeki mesajı görebilirsiniz.

 

Resim 2-7 Oluşturduğumuz Label Nesnesinin Görünümü

Bu sadece basit bir Label(etiket) nesnesi içinde bir yazı var ancak bu nesnenin özelliklerinide değiştirebiliyoruz mesela rengini değiştirelim , yazıyı ortalayalım ,kenarlarını yuvarlak yapalım.

messageLabel.backgroundColor = UIColor.orange
messageLabel.textAlignment = NSTextAlignment.center
messageLabel.layer.cornerRadius = 10.0
messageLabel.clipsToBounds = true
messageLabel
Ve karşınızda özellikleri değiştirilmiş bir Label nesnesi 🙂

 

Resim 2-8 Label Nesnesinin Değişmiş Özellikleri

Bu IOS SDK nın gücü arkada hazır derlenmiş olarak bulunan binlerce kütüphaneden geliyor ve bize kolayca nesne yaratmak özelliklerini değiştirmek gibi işlemleri kolayca yapmamızı sağlıyor.

Evet Swiftin tadına az da olsa baktınız 🙂 Umarım sevmişsinizdir ve yapıyı öğrenmek sizler için kolay oluyordur. Bu yazıda yaptığımız örneğin playground dosyasını buradan indirebilirsiniz.

Sorularınızı yorum olarak yada email ile ulaştırabilirsiniz.

Sonraki Yazıda Ne Var ?

Bu yazının sonuna geldiniz şimdi sıra biraz alıştırma yapmakta sonraki bölüm bol bol alıştırma yapabileceğiniz bir bol örnekli bir yazı olacak değişkenleri operatörleri vb basit başlangıç nesnelerini tanıyacaksınız. Size tavsiyem hiç vakit kaybetmeden bir sonraki bölüme geçip alıştırma yapmanız.

Bilgiyle Kalın

M.Zeki OSMANCIK

 

< – Bölüm 1 – Xcode8 ile Uygulama Geliştirmeye Giriş

Bölüm 1 – Xcode8 ile Uygulama Geliştirmeye Giriş 1024 640 mezo

Bölüm 1 – Xcode8 ile Uygulama Geliştirmeye Giriş

Merhaba arkadaşlar

Tek tek makale yazmak yerine,  makalelerimi seri olarak yayınlayıp sizlere komple bir eğitim seti sunmak istedim ve bunun için hobi olarak başladığım IOS programlamayla alakalı yazılar hazırladım.
Günümüzde her şeyin akıllı cep telefonlarıyla yapılabildiği aşikar ve hemen hemen herkesin farklı konularda değişik fikirleri var.  Neden kendiniz bir uygulama gelistirip bunu AppStore üzerinden insanlarla paylaşmayasınız ki? Bu ilk yazımda sizlere hemen kod yazımı vb. şeyler yazmayacağım. Bu yazı bir ısınma yazısı; nelere ihtiyacımız var, nasıl öğreniriz? Bunun gibi giriş bilgilerinden bahsedeceğim.<

1. Bir  Mac edinin 
Evet yanlış okumadınız bunu yapabilmek için bir Mac bilgisayara ihtiyacımız var maalesef. Aranızda “Mac Türkiye’de kaç para haberin var mı? Mac bilgisayar edinmeden de IOS yazılımı yapılır hocam” diyen muhalif arkadaşlar çıkacaktır elbet, onlara cevabım : Evet Mac olmadan da IOS yazılım geliştirilebilir ama yazı serisi NATIVE IOS PROGRAMMING konularını içermekte olduğundan, bu yazı serisini takip edip IOS programlama öğrenebilmeniz için Mac bilgisayar edinmeniz şart.

2. Bir Apple Hesabı Açın 
Mac bilgisayarınızı edindikten sonra AppStore üzerinden veya internet sitesinden XCode programını indirip yükleyebilmek için Apple hesabına ihtiyacınız olacak. En önemlisi de bu hesap ile XCode üzerinden geliştirmeye devam ettiğinizde Iphone ya da Ipad üzerine deploy edip test etmenize müsade edecek.  Eğer Apple hesabınız yoksa buradan: (https://appleid.apple.com/account) kolayca edinebilirsiniz

3. XCode Yükleyin
IOS programlamaya başlamak, native kod ile IOS uygulamaları geliştirebilmek için Xcode adı verilen IDE (Integrated Development Environment)’yi AppStore ya da internet sitesinden indirip Mac bilgisayarımız üzerine kurmanız gerekmekte. XCode dışında bir program ya da bir eklenti kurmanız gerekmiyor çünkü IOS SDK (Software Development Kit) XCode ile birlikte bilgisayarınıza kuruluyor.
Daha öncede söylediğim gibi XCode programını bilgisayarınıza indirmeniz için 2 yöntem var :
XCode u AppStore üzerinden indirmek
Xcode u indirebilmek için Mac bilgisayarınız üzerinde bulunan AppStore programını açıp arama kısmına XCode yazarak bulup ücretsiz olarak indirebilirsiniz. Bu arada eğer AppStore üzerinde MACOS ile ilgili bir update varsa mutlaka bu updateleri tamamladıktan sonra XCode programını kurmanızı tavsiye ederim.

Resim 1-1. Simge Barında ki AppStore İkonu

XCode un AppStore sayfası böyle bir şey :

Resim 1-2. AppStore’daki XCode Download Sayfası

İndirdikten ve kurulum tamamlandıktan sonra Launch Pad de böyle bir simge göreceksiniz Tebrikler XCode u mac bilgisayarınıza kurdunuz 😀

Resim 1-3. LaunchPad üzerindeki Xcode simgesi

Bu yazı dizisi özellikle Xcode8 üzerine devam edeceğinden eğer daha önce bilgisayarınızda Xcode varsa mutlaka update etmenizi tavsiye ediyorum yapacağımız örnekleri daha kolay yapmanızı sağlayacaktır.
Xcode u Internet Sitesinden İndirmek
Normalde AppStore üzerinden bu programı edinmek çok daha kolaydır ama tercih eden olursa ”Ben cinsim AppStore dan indirmeyeceğim.” diyen olursa internet sitesi olan http://developer.apple.com/
register/
üzerinden de Apple hesabınızla giriş yapıp indirebilirsiniz. Bu işlemde daha sonra indirdiğiniz dosyaya çift tıklayıp kurmanız da gerekiyor 🙂

4. Apple Developer Programına Üye Olmak (Opsyonel)
Kafa karıştırıcı bir durum bu aslında. IOS programlama yapmak için ”İlla bu programa katılıp para vermeli miyiz?” soruları çok dolanıyor. Xcode8 sürümü için zorunlu değilsiniz, para ödemeseniz de olur. Xcode7 den önceki sürümlerde eğer iPhone ya da iPad üzerinde deploy ve test etmek isterseniz mutlaka bu programa paşa paşa  yıllık parasını verip üye olmanız gerekiyordu ancak Xcode7 de Apple insafa geldi ve bu zorunluluğu kaldırdı. Xcode7 ve 8 sürümlerinde sadece Apple hesabınızla Xcode programını çalıştırıp proje oluşturmanız yeterli. İPhone ve iPad e deploy edebiliyorsunuz.   Bu yazıyı okuduğunuza göre yeni öğreniyorsunuz yani uzun bir süre bu programa para vermenize gerek olmayacak demektir.
Her şey bitti, IOS programlamayı öğrendiniz ve bir uygulama geliştirdiniz diyelim. ”Hadi bunu AppStore da yayınlayayım da herkes indirsin kullansın  hatta bu uygulamaya bir fiyat biçeyim satın alma işlemi de olsun ya da ICloudKit ile ICloud üzerine yedek alan bir uygulama yapayım” dediğiniz zaman bu Apple Developer Programına  (https://developer.apple.com/programs/) üye olmanız ve yıllık $99 bayılmanız gerekmekte, aksi takdirde uygulamanızı yanlızca kendi telefonunuzda kullanmaya devam edersiniz. 🙂
Özet olarak şimdilik para falan vermenize gerek yok sadece fikriniz olsun diye ekledim 🙂
5. Ne Öğrenmeniz Gerekiyor 
IOS uygulaması yapabilmek için ortamı hazırladık IDE kurduk Apple hesabı hazır şimdi sıra geldi  uygulamayı hangi dil ile geliştireceğiz sorusunun cevabına:
* Swift Öğrenmeliyiz : Apple ın geliştirdiği yeni nesil programlama dili Swift her otorite tarafından tavsiye edilmekte. Objective C biraz eski moda ve zor kaldı artık.
* Xcode öğrenmeliyiz : Alt tarafı program deyip geçmeyin gavur yapmış 🙂 Xcode üzerindeki her şeyi öğrenmelisiniz ki etkili ve güzel uygulamalar geliştirebilesiniz.
* IOS Development Kit Öğrenmeliyiz : IOS Development Kit içersinde bulunan yapı UI kontrollerini API leri öğrenmeliyiz ki istediğimiz her işlemi kolayca uygulamamıza entegre edebilelim.

Öğrenmek gereken çok şey var ama merak etmeyin bu yazı dizisi ile çoğu konuyu en iyi şekilde öğrenmiş olacaksınız tek yapmanız gereken biraz vakit ayırmak.
Evet ilk yazımın sonuna geldik. Sorularınız olursa yorum olarak yazın, cevaplamaktan keyif duyarım.
Bilgiyle Kalın

Bölüm 2 – Swift Playground ile Oynayalım -> 

C# – DataTable İçindeki Verilerin Sıralarını Ters Çevirmek 150 150 mezo

C# – DataTable İçindeki Verilerin Sıralarını Ters Çevirmek

Merhaba arkadaşlar
Her yazılımcının korkulu rüyası olan test uzmanı arkadaşlarımdan biri olan Bill bir hata kaydı açmış ve demiş ki şu şu sayfada ki listelenen verilerin sıralamaları yanlış ters olması lazım demiş. Bende ufak bir araştırma sonucu bir metod oluşturarak bu problemi çözdüm ve pratik bir bilgi olması açısından sizlerle paylaşmak istedim.
İşte o kodlar 🙂

[codebox 1]

Bilgiyle Kalın
M.Zeki OSMANCIK

AngularJS – Services 333 302 mezo

AngularJS – Services

Merhaba arkadaşlar
AngularJS de servisler hem kodların kolay okunması hemde test edilmesini kolaylaştıran javascrıpt dosyalarıdır. Servisler genelde kod içersinde kullanacığımız bazı methodlar için yazabiliriz. Örneğin bir hesaplama yapması gereken bir methodu servis olarak oluşturup Controller üzerinde birden fazla yerde kolayca kullanıkmasını mümkün kılabiliriz. AngularJS servis ve factory yi kullanarak Separation of Concerns konseptini desteklemektedir.
Peki Separation Concerns nedir ? Bir yazılımı oluşturan kodların katmanlara ayrılmasıdır. Web sitemizin veritabanından bir veri alıp bize sunması için gerekli olan her bir işlemi ayrı ayrı konumlandırmak da diyebiliriz ; veri tabanına bağlanan kod ayrı , onu alıp işleyen kod ayrı , son olarak web sayfası üzerinde gösteren kod ayrı yerlerde katmanlar halinde yazılır ki bu katmanları okuması hata tespiti yada test kodlarımızın çalışması kolaylaşsın. Bu konsepte en uygun örnek MVC Design Pattern dir.
Konumuza geri dönecek olursak AngularJS ile oluşturulan bir projede servis iç işlevlerin birden fazla controller üzerinden çağırılabilmesi için oluşturacağımız klasik javascript metotlarıdır.
Hemen kısa bir örnekle merakımızı dindirip. Örneği inceledikten sonra hemen Factory yazısınıda okursanız sizlere çok katkısı olacağını umuyorum.

Umarım Yararlı Olur.
Bilgiyle Kalın.
M.Zeki OSMANCIK

Raspberry Pi 3 Nedir ? 1024 647 mezo

Raspberry Pi 3 Nedir ?

Merhaba arkadaşlar

pi_3Raspberry Pi ARM işlemcili kredi tartı büyüklüğünde bir bilgisayar olarak karşımıza 4 sene once çıkmıştı. Önceki sürümlerinde bluetooth ve wireless bağlantılar için USB donglelar kullanmak zorunda kalsakda 4. senesinde çıkardıkları Raspberry Pi 3’de bu özellikleride kart üzerine entegre ederek bizlere daha fazla USB portu bırakmış 🙂
RaspberryPı bir düşük özellikli bir masaüstü bilgisayardır yani klavye mouse ve ekranınızı bağlayarak temel sözcük işleme işlemleri HD videolar düşük özellik gerektilren oyunlar oynanabilir. Aynı zamanda GPIO pinleri sayesinde kapsamli bir kontrol kapasitesine sahip oluyorsunuz.

GPIO ile kucuk motorlar ledler kameralar çeşitli sensörler vb bir çok cevre birimini kullanabilir kontrol edebilirsiniz. Yapılabilecekler hayal gücünüzle sınırlı 🙂

 

Peki Yeni Raspberry Pi 3 uzerinde neler var ?

Asagidaki resimde de gorebileceginiz uzere

4 Port USB 2 , Ethernet LAN girişi , ses cıkışı (HDMI üzerinden de ses alabilirsiniz ) , CSI Kamera portu , HDMI Portu , Harddisk gibi kullandığımız Micro SD kart girişi , daha önce daha az sayıda olan suan sayısı 40 Pine çıkarılmış GPIO paneli , entegre Bluetooth ve Wireless LAN , 1 GB Ram , 1.2 GHz işlemci mevcut.  Ilk bilgisayarimi hatırlıyorumda Raspberry ondan çok çok çok daha hızlı 😀

Pi3+Breakout+Feb+29+2016

 

İlk etapta aklınıza sadece basit bir bilgisayar resmi canlandırdığı icin kapasitesini bilemeyebilip “Peki bu cihazla ne yapabiliriz?” diyebilirsiniz bu sorunuzun cevabi icinde sürekli takip ettiğim bir Youtube kanalı olan Geek Life in tatlı hatunu Luria Petrucci ‘nin en Cool 10 projeyi tanıttığı videoyuda paylaşıyorum.

Umarım yararlı olur.

Bilgiyle Kalın.

M.Zeki OSMANCIK

AngularJS – Dinamik Değişken 980 400 mezo

AngularJS – Dinamik Değişken

Merhaba arkadaşlar
Bildiğiniz gibi AngularJS de html ile js dosyası arasındaki bağı scope ile sağlıyorduk. Yani controller üzerinde tanımladığımız bır scope nesnesini html üzerinde {{}} veya ng-bind ile çağırabiliyoruz. Bahsettiğimiz değişkenler sabit tanımlanıp görüntülenenler. Bir de JS tarafında tanımlayabildiğimiz değişkenler var ki bu yazımızın konusuda budur zaten 🙂

Hemen HTML kodlarımızı yerlestirelim
[codebox 1]

ve Controller kodlarımız
[codebox 2]

Burada tanımladığımız $scope.dynamicVariable = {}; objemiz içersine istenilen miktarda değişken tanımlanabilir ve HTML tarafından da {{dynamicVariable[company.CompanyID]}} şeklinde kullanabiliyoruz.

ve AngularJS ile dinamik değişkenimiz hayırlı olsun 🙂 Bu da ornegimiz.

Umarım Yararlı Olur
Bilgiyle Kalın
M.Zeki OSMANCIK

AngularJS – Basit Search Filter 1024 789 mezo

AngularJS – Basit Search Filter

Merhaba arkadaşlar
Bu kez de AngularJS ile çooooooook ama çok basit şekilde listelediğimiz nesneler üzerinde bir Text input ile nasıl arama yapabiliriz sorusunun cevabını 2 satırda bir fiddle’da paylaşmak istiyorum.

Bu datayı AngularJS ile Controller içersinde oluşturalım ve bir $scope değiskeni içersine şu şekli tanımlamamız gerekiyor .
[codebox 2]

ve her zaman olduğu gibi HTML kodlarımızı bir oluşturalım ve listeme işlemini gerçekleştirelim.
[codebox 1]

Bu asamadan sonra JSON nesnemizin içersindeki elemanların ekranımıza listelendiğini görebileceksiniz.

İş arama kısmına geldiğinde ise HTML de de şu şekli bir değişiklik yapmamız gerekmekte.

[codebox 3]

Burada kullandığımız FILTER bizim listelediğimiz JSON nesnesi ya da array içersinde input üzerine tanımladığımız ng-model yardımı ile filtreleme yapıp $scope.companyList adında ki objeye atama yapar böylelikle siz de listeye abc yazdığınızda listedeki abc yi bularak $scope.companyList nesnesine atamasını yaparak bizlere gösterir 🙂

Benim yorumlamam bu kadar 🙂
Iste bu kadar basıt 🙂
Örnek kodu Fiddle’dan inceleyebilirsiniz.

Umarım Yararlı Olur
Bilgiyle Kalın.
M.Zeki OSMANCIK

Angular JS – Model 1024 576 mezo

Angular JS – Model

model

Biliyorum Model denilince aklınıza yukarıdaki ablalar geliyor ama hayaller Viktoriya Sikrıt  hayatlar Angular JS ne yapalım  !! Konuyla alakası bile yok tamamen ilgi çekmek için kullandım bu fotoğrafı. Bu model öyle bir model ki bu ablalar kadar güzel olmasa da angularjs ile hayatı kolaylaştıran güzel bir yapıdır şöyle ki :

Bob_at_EaselModel aslinda bir boyadir !!

“Ne diyon lan sen değişik? AngularJS anlatıyordun ne alaka boya badana!” diyebilirsiniz ama Model bir boyadır. Şimdi alakaya çay demleyelim.

MVC yi anlatabileceğim en iyi metafor belki de budur ve bundan sonraki kısımda modeli daha iyi anlayabileceğinizi düşünüyorum.

MVC deki

Model = Boya , Controller = Ressam , View = Tual olarak düşünürsek :

Yani son kullanıcıya bir görüntü, bilgi vb. şeyleri bir web sitesi üzerinde göstermek için öncelikle bu bilgileri ve görüntüleri bir yerden sağlamamız gerekiyor. İste bu verileri DB veya servislerden sağlayan ve View üzerinde Controller yardımı ile gösterilmesini sağlayan yapıya MODEL diyoruz…

Aynı yandaki Bob amcamızın boyayı alıp tuval üzerine küçük yalnız ağaçlar, mutlu bulutlar yapıp resmini tamamlayıp göstermesi gibi bir şey işte 🙂

Şimdi bakalım model denen şey AngularJS içersinde ne gibi bir role sahip bakalım View i nasıl boyayacak ?

Yine bir HTML dosyamız var ve bunun üzerine AngularJS kütüphanesini ve js dosyamızı ekledik ve ng-model nesnesini bu HTML dosyamız içersinde kullandık.

[codebox 1]

 

Burada kullandığım mydata benim modelim olmuş oluyor ve sayfa üzerinde bir veriyi alıp başka bir yere sayfayı yenilemeden, durulamadan, kurulamadan aşağıdaki resimde görüleceği üzere yazabiliyor. Controller içersinde bir tanımlama yapmadan bu şekilde kullanmak mümkün. Bu demektir ki biz controller üzerinde bir servisten ya da bir işlemden elde ettiğimiz değeri mydata adlı modele eşitlersek bu bizim HTML sayfamız üzerinde gösterilecek anlamına geliyor yani tuval üzerine boyamız dökülecek ve resim ortaya çıkacak.

model2

Controller üzerine çok basit bir işlem yaparak bu mydata değerini sayfa üzerinde güncellemeye çalışırsak.

[codebox 2]

Ve bunu HTML üzerinden tetiklemek istersek

[codebox 3]

Sonuç olarak çıktımız şu şekilde olacaktır

 model3

Burada olan olay şu: controller üzerine bir metot yazarak ng-model tarafından kullanılan nesneyi değiştirdim ve butona tıkladığımda anında View üzerinde görüntülemeye başladım. Bu string yerine servisten gelen bir veri olabilirdi ya da bir işlem sonucu elde edilen bir veri olabilirdi.

Umarım Yararlı Olur

Bilgiyle Kalın

M.Zeki OSMANCIK

Angular JS – View 478 326 mezo

Angular JS – View

Merhabalar

Angular JS nin V’si olan “View for Vendeta” ile devam ediyoruz. View denilen yapı aslında HTML dosyalarından baska bir şey değildir.Bildiğiniz gibi AngularJS için şöyle böyle demiştik ,sonra kendisinden Single Page Application olarak bahsetmiştik. Buradaki mantık sabit bir index.html sayfası ve içerisinde sayfalarımızın içeriği ile değişen küçük, leziz, gerçek html parçacıkları ile donatılmış, harika bir tat.

Şimdi isterseniz bu View olayı nasıl çalışıyor sayfa üzerinde nasıl gösteriliyor bir göz atalım…

Öncelikle gerekli olan malzemeleri sayıyorum

1 adet Angularjs kütüphanesi buradan temin ediyorsunuz

1 adet Angularjs Route kütüphanesi onuda buradan temin ediyorsunuz

1 adet Notepad++ o sizde var zaten olmayanı dövüyoruz 🙂

Evet tarife geçelim artık…

Index.HTML dosyanızı oluşturarak içersine şu kodları ekliyorsunuz.

[codebox 1]

Daha önceki Controller makalesindeki indexten tek farkı bir fazla kütüphane ve bir de ng-view denen bir dalga motor eklemişiz.

Ng-view  bizim sayfa göstericimiz  yani ASP.Net de ContentPlaceHolder vardı aynı ondan işte 🙂  ng-view üzerinde gösterilecek olan küçük html parçaları yani sayfa içerikleri ,ngroute kütüphanesini kullanarak oluşturacağımız config nesnesi üzerindeki yönergeleri takip ederek ng-view üzerinde değişirler.

O zaman bir config nesnesi oluşturalımda neymiş bu olay görelim.

[codebox 2]

Görüldüğü üzere module tanımlarken içerisine mutlaka ngRoute tanımlıyoruz ki config oluşturduğumuzda “bu ne lan?”  demesin.

Daha sonra config içersinde $routeProvider.when() metodunu kullanıp sayfa url si sonundaki parametreleri yazarak hangi view gösterilecek bu view in controller i ne olacak belirtebiliyoruz.

Sonrasinda buda Controller im bunu zaten biliyorsunuz bilmiyorsanız “o ne la?” diyorsanız buraya bakınız.

[codebox 3]

Bu arada yukarıda yazmış olduğum config ve controller tek bir JS dosyası içersine yazılıyor yani en azından ben şuanlık öyle yaptım sonra dosya yapısı ve klasörleme yöntemlerinide anlatacağım.

Son olarak eklemiş olduğum iki View  içersine aynı şeyleri yazdım oda şöyle ki :

[codebox 4]

Ve çalıştırdığım zaman aldığım çıktıda burada 🙂

view2 view1

Sonuç olarak 2 değişik sayfayı bir index.html içersinde gösterdik ve sayfa değişimlerini sağladık.

Umarım Yararlı Olur

Bilgiyle Kalın

M.Zeki OSMANCIK

Angular JS – Controller 657 486 mezo

Angular JS – Controller

Selam Arkadaslar

Yazmaya uzuuun bir ara verdikten sonar yine sizlerleyim 🙂 Angular JS konusuna devam edeceğiz. İlk yazımda AngularJS nedir mantığı nedir kısaca bahsettik. Bu yazıda ise MVC nin C sinden bahsedeceğim.

Controller

Controller MVC nin View’i yani son kullanıcının gördüğü ile model yani business logic katmanlarının iletişime geçtiği katmandır.  Yani kod yardimi ve model katmanı ile elde ettigimiz bir veriyi HTML kodlarına gönderme işini üstlenir. Aşağıdaki diagram bize Controller’ın görevini anlamakta biraz daha yardımcı olacaktır.

angularJs_mvc_framwork

Şimdi gelin isterseniz küçük bir örnek ile Controller ne işe yarıyor görelim. Öncelikle JS dosyaları ile çalışacağımızı belirtmek isterim herhangi bir editöre ihtiyacınız olmayacaktır Notepad++ işinizi görecektir. Tabi AngularJS kütüphanesinide buradan indirip eklemeyi unutmayın lütfen.

HTML dosyamizi asagidaki gibi oluşturuyoruz.

[codebox 1]

Ardından birde buradaki ng controller karşısında yer alan Controller1 adlı dosyamızı ekleyip içersine şu kodları eklemeliyiz.

[codebox 2]

Eklemiş olduğumuz ng-controller tagı ile html üzerinde çalışacak olan AngularJS kodlarının nereyi hedef alarak metotları araması ve çalıştırması gerektiğini belirtmiş olduk.

Bu yöntem ile bir angularjs uygulamasının içersine bir controller tanımlayarak bu controller içersine yazdığımız her kodu ve aldığımız her değeri html elemanlari üzerine aktarmamızın ne kadar kolay olduğunu görmüş olduk . Son olarak bu işlemin çıktısı aşağıdaki gibi olacaktır. Butona tıklandığında controller içersindeki metot çalışacaktır.

angularController2

Umarım yararlı olur

Bilgiyle Kalın

M.Zeki OSMANCIK

Angular JS Nedir? 980 400 mezo

Angular JS Nedir?

Merhaba arkadaşlar
AngularJS ile ilgili yazı dizisine başlamış bulunmaktayız 🙂 Haydi hayırlı olsun 🙂
AngularJS google tarafından desteklenen bir Javascript MVC(Modal View Controller) kütüphanesidir.
Modal : Verinin tutulduğu nesnelerdir ve ilişkili olduğu View nesnesini etkiler.
View : Template in yani görünümün tutulduğu nesnelerdir.
Controller : Modal ve View nesnelerini bağlayan nesnedir. İşlemler kontroller Controller üzerinde yapılır

AngularJS kendi kütüphanesinden başka kütüphanelere bağımlı değildir. Bunun için sadece AngularJS kütüphanelerini ekleyerek
tek sayfa uygulamaları geliştirmeye imkan sağlar. AngularJS’in en önemli özelliği çift yönlü olmalarıdır.
Yani modal’da olan değişiklik view’a , view’da olan değişiklik modal’a yansır. Directive’ler ile
yeni html tag’larının geliştirilmesine de olanak sağlar. Kodlar kısalır karmaşa ortadan kalkar.
AngularJS kütüphanesi yaklaşık 100kb boyuttadır. https://angularjs.org
AngularJS çeşitli bileşenleri içeren modüller şeklinde oluşturulmuştur. Bu modüller; Directive’ler Service’ler
Provider’ lar Type’lardır.

AngularJS Kütüphaneleri
ng  : AngularJS in temel modüllerini içeren kütüphanedir. Varsayılan olarak yüklenir.
ngRoute : AngularJS uygulamaları içersinde URL yönetimi yapmak için kullanılır. (angular-route.js)
ngAnimate : AngularJS uygulamalarında animasyon özelliklerini sayfalarımıza eklemek için kullanılır. (angular-animate.js)
ng-Cookie : Cookie yönetimi için kullanılır. (angular-cookies.js)
ng-Touch : Mobil tarayıcılar için geliştirilen sayfalarda kullanılabilir. (angular-touch.js)
ng-Mock : Testlerde mock işlemi yapmak için kullanılır.

Şimdi gelin size basit bir örnek yapalım 🙂

HTML Sayfamız
[codebox 1]

JavaScript Dosyamız
[codebox 2]

Örneğe buradan ulaşabilirsiniz 🙂

Bilgiyle Kalın
M.Zeki Osmancık

Windows 10 Start Menü Problemi Çözümü 1024 535 mezo

Windows 10 Start Menü Problemi Çözümü

Merhaba arkadaşlar

Windows 10 kullanırken başıma gelen ve çözümünü bulduğum bir problemi sizlerle paylaşmak istiyorum. Windows10 işletim sisteminin 9926 Built ‘ini kullanıyordum bir gün bir baktım ki Start menüsü çalışmıyor ne yapsam ne etsemde olmadı. Update yaptım yeniden başlattım vs vs gibi yöntemlerle çözüme ulaşamadım ve başladım araştırmaya. Araştırmalarım sonucunda Powershell ile birlikte bazı kodların çalıştırılarak windows içindeki bazı paketlerin yeniden yüklenerek bu işlemin gerçekleşeceğini öğrendim. Öncelikle Powershell.exe yi bularak Administrator olarak çalıştırıyoruz ve ardından kodumuzu yapıştırıp enter a basıyoruz.

Kod şu şekilde:

[codebox 1]

Bu kodu çalıştırdıktan sonra aşağıdaki gibi bir işlem gerçekleşiyor.

powershell

 

Voila 😀

Artık Start Menümüz sağlıklı şekilde çalışıyor .

Umarım yararlı olur

Bilgiyle Kalın 😉

M.Zeki Osmancık

 

Unity – Kurulum ve IDE 1024 457 mezo

Unity – Kurulum ve IDE

Merhaba arkadaşlar

Unity ile oyun yazmaya merak sardım bu aralar hobi olsun diye işin ustası Tolga Kaçar ve biz öğrencileri Ahmet Kayar ve ben birlikte öğle aralarımızı Unity öğrenerek değerlendirmeye başladık. 🙂  İlk iş olarak nasıl kurulum yaparsınız diye anlatmak istedim hemen arkasından da IDE üzerindeki pencerelerden bahsedeceğim.

Unity ‘de “merhaba dünya” falan yapmayacagim bu yazımda sadece Unity nedir ,ne yapar, nerden kuracagiz actigimizda gelen ekranlar nedir kisaca ve basitce bunlardan bahsedecegim oncelikle Unity biz developerlara sunulmus 3d veya 2d oyun programlama sağlayan çok eyi ,çok da güzel eyi bir IDE. 🙂 Oyun programlama ile ilgili hiç bir fikriniz yoksa şu soru kafalarda belirebilir ben 3 boyutlu çizim bilmiyorum nasil olacak ? Dert etmeyin hazır, beleş veya ücretli yada ücretli ama beleş assetler yani 3 boyutlu yada 2 boyutlu cizimler nesneler internette mevcut 😉 Çizim olayini hallettik peki ya kod olayi derseniz onuda C# ile hallediyoruz 🙂
Evet cok geyik yapmadan kuruluma gecelim artik 😉 Ilk olarak unity3d  sitesine giriyoruz ve GET UNITY butonuna tıklayarak installer dosyasını PC ye indiriyoruz ve kuruluma geçiyoruz 🙂

Unity-setup1

Download bittiyse sıra ile kurulum islerine gecebiiriz. Kurulumda dikkat edilecek isaretlenecek onemli bir configurasyon yok o yuzden resimleri arka arkaya koyuyorum

Unity-setup2

Unity-setup3

Unity-setup4

Unity-setup5

Unity-setup6

Kurulumu yaptik programimizi actik heyecanliyiz 😉 gelelim Unity yi açıp ilk etapda cikan ekranda neler var gordugumuz seyler neler onlara bakalım:

Unity-setup7

Unity-setup9

unity5

 

Hieracrhy : Bu listede oyun nesnelerimiz yer alir karakter yerler gokler gorup gorebilecegimiz hersey burada yer alir ilk etapda zaten bir kamera nesnesinin eklenmiz oldugunu gorebiliyoruz.

Inspector : adiindanda anlasilacagi gibi oyun nesnelerimizin pzelliklerini gorebildigimiz ve editleyebilgimiz penceredir kendisi 😉 u ity i actiginizda sol tarafta hicbirsey gorunmuyorsa kamera nesnesine tikladigimizda bu kameranin ozelliklerini gorebiliriz.

Scene : orta kisimda bulunan bu yer bizim sahnemiz oyunumuzu bu sahne uzerinde goruntuleyip nesneleri burada yerlestiriyor olacagiz. Ilk bakildiginda kamerani. Sahne uzerine yerlesmis oldugunu gorebiliriz

Asagidaki pencere . Bu pencerede projemiz icersinde bulunan resimler spritelar materialler , script dosyalari kisaca proje icerigi yer alir.

Evet bu yazida bu kadar unity i kurduk ve pencereleri tanidk bir sonraki yazida 2 boyutlu bir oyuna baslayacagiz birlikte tabi cok hizli ilerlemeden 🙂 tek makalede bi mario beklemeyin 😉 ayrica projemizide yine size duyuruyor olacagiz 😉

Şimdilik bu kadar 🙂

Umarım Yararlı Olur

Bilgiyle Kalın

M.Zeki Osmancık

XRebel Nedir ? 1024 755 mezo

XRebel Nedir ?

Merhaba arkadaşlar

İlginç bir konu ile karşınızdayım 🙂

Web Sayfaları yapıyorsunuz java kullanıyorsunuz ve sizin ve takım arkadaşlarınızın yaptığı sayfaların performansı ile ilgili şüpheleriniz var. Sayfaların performansını ölçen bir tool mevcut adı XRebel.

XRebel sayfa içersindeki sorguları session verilerini vb  performansı etkileyen kısımları ölçerek ayrıntılı bir rapor çıkartabilen bir tool. Dilerseniz 15 günlük Trial i mevcut.

Şimdi sizlere nasıl XRebel tool unu sayfamız üzerine entegre ederiz resimlerle bahsetmek isterim 😉

Çoooook basit şekilde kurulumu anlatmak gerekirse

Öncelikle http://zeroturnaround.com/software/xrebel/ adresinden Trial versionunu indiriyorsunuz ve dosyaları zipten çıkarıyorsunuz. Ardından C:/ altına yerleştirdikten sonra Eclipse üzerinde bir Dynamic Web App oluşturuyor ve içersine kodlarınızı yazıyorsunuz benim kodlarım” asdasdasdasdasdasdasd” oldu  😀 Şu şekilde

xrebel2

Sonra Run Configuration kısmını açıp C:/ içersine yerleştirdiğim xrebel.jar dosyasını VM Arguments üzerine ekliyoruz.

 

xrebel1

 

Projeyi çalıştırdığımda kenarda küçük bir bar gelmişse aşağıdaki gibi bu iş tamam demektir. Artık tüm web sitemiz ile ilgili ölçümler başarılı şekilde yapılmaya başlanacak ve ayrıntıları ile bizlere listelenecek. Eğer lisansım gelirse sizlere daha ayrıntılı bir sunum yapacağım 😀

xrebel3

Demo videosunuda buradan izleyebilirsiniz 🙂 

Bilgiyle Kalın

M.Zeki Osmancık

Windows 10 Klavye Kısayolları 1024 576 mezo

Windows 10 Klavye Kısayolları

Merhaba arkadaşlar

Untitled

Windows 10 Pro Technical Preview son halini aldı artık dün akşam gelen sağlam bir update ile sürekli şekil değiştiren Windows 10 stabil halini aldı artık diye umuyoruz 🙂 Herneyse ben kısayollardan bahsetmek istiyorum hemen kısaca 🙂 Windows 10 da Linux ve MacOs ta bulunan multiDesktop özelliği falan gelmiş 🙂 Bunlar içinde kısayol tuşlarını sizlerle paylaşmak istedim 🙂

Pencereleri sağa sola yapıştırmak için  : Windows key + Sağ yada Sol Yukarı tuşu pencereyi full screen yapar Aşağı tuşuda full screnden normal pencere boyutu tekrar basarsanızda simge boyutunda küçültür.

Penceler arası geçiş için : Alt + Tab – Bu bildiğimiz Alt Tab

Task view: Windows + Tab – Bu tuşla hem pencereler arası geçiş hemde desktoplar arası geçiş yapmak için bir ekran açılıyor.

Yeni bir Desktop oluşturmak için  : Windows key + Ctrl + D

Açık olan Desktop u kapamak için : Windows key + Ctrl + F4

Bu Desktoplar arası geçiş yapabilmek için  : Windows key + Ctrl + Sağ yada Sol

 

Umarım yararlı olur

Bilgiyle Kalın

M.Zeki OSMANCIK

 

 

Visual Studio Online da Proje Silme İşlemi 600 274 mezo

Visual Studio Online da Proje Silme İşlemi

Merhaba arkadaşlar

Biraz önce Visual Studio Online da bulunan bir projemi silmek istedim ve uzun süre aradıktan sonra projenin nasıl silineceğini buldum 😀 sizlerlede paylaşmak istedim 😀 Visual Studio  Online ı açtığımızda solda üstte Ayarlar simgesi var ahanda şöyle  🙂  Ona basıyorsunuz sonra karşınıza çıkan ekranda projeler listelenecek hangi projeyi silecekseniz sağ click ve Delete o işlemde ahanda şöyle 🙂

IC686855

Umarım yararlı olur 🙂

Bilgiyle Kalın

M.Zeki OSMANCIK

Whatsapp PC ye Geldi :) 880 695 mezo

Whatsapp PC ye Geldi :)

Merhaba arkadaşlar

Artık PC başındayken telefondan Whatsapp tan yazışma derdine son !!!!! WhatsApp web versiyonunu açıkladı kullanıma açtı bile 😀 Bende denedikten sonra hemen yazayım dedim 🙂  Kulanmak için ne yapmak gerek 🙂 Android işletim sistemli telefonunuzdan WhatsApp taki menüyü açıyorsunuz ve karşınıza bir WhatsApp Web seçeneği geliyor açtığınızda bir kamera çıkıyor kod mod bişi diyor ne olaki la bu derken hemen web.whatsapp.com adresine giriyorsunuz ve karşınıza sayfa çıkınca kafada şimşekler çakıyor 😀 neden kod istediğini anlıyoruz telefonumuzla kodu okutur okutmaz TA DAAAAAAAAA 😀 WhatsApp artık webde 😀 klavyeden yaz yazabildiğin kadar 😀

10947710_10153678930762366_181967451_n,whatsappweb

Web WhatsApp üzerinden resim çekebiliyor yada mevcut resimleri gönderebiliyorsunuz ve ses kaydı yollayabiliyorsunuz 😉

Biz resim yollamanın denemesini yaptık bile işte oda aşağıda gözlerimizden ne kadar sevindiğimiz belli oluyordur heralde 😛 😀

Untitled picture

Haydi Hepimize Hayırlı Olsun 😀

 

Bilgiyle Kalın

M.Zeki Osmancık

Proje Geliştirme Süreçleri – V Model 1024 704 mezo

Proje Geliştirme Süreçleri – V Model

Merhaba arkadaşlar

Yeni bir gün yeni bir Proje Geliştirme Süreci olan V Model ile karşınızdayım 🙂

Daha önce ki yazılarda Waterfall ve Agile yöntemlerinden bahsetmiştik. V model biraz Waterfall metoduna benzer. Yani Waterfallda olduğu gibi tüm analiz ve dökümantasyonun en başta yapılması ve bitirilmesi ihtiyaçların kesinleştirilmesi gerekiyor. Verification and Validation olarak bilinen ve V Model olarak kısaltılan bu metotda Waterfall dan farklı olarak analiz ve ihtiyaçlar kesinleştikten sonra yazılım geliştirmeye başlamadan önce bir test planı oluşturulmalıdır. Bu modelin yazılım ve test döngüleri çizildiğinde V harfi ortaya çıkar 😀  Walla çıkar 😀 aşağıdaki resmi inceleyebiliriz 😀

V-Model

 

Resimde görüldüğü gibi V harfi çıkıyormuş 🙂 resim üzerinden bahsetmek gerekirse burada process sırası olarak sol taraftan sağ tarafa gidiliyor. Öncelikle Analizlerimiz çıkıyor sonra Fonksiyonel özellikler belirleniyor sonra Dizayn aşamasından geçiyor bu analizler ve Programcıların anlayabileceği şekle getiriliyor en ortada kocaman yazdığı gibi programı kodluyoruz sonra unit testi unutmuyoruz onlarsız olmaz 😀 unit testten sonra entegrasyon testi sonra sistem testi sonra kullanıcı kabulu ve kapanış 😀

Burada V harfininde bir özelliği var aslında şimdi her maddenin hemen karşılığında bir madde mevcut soldan sağa doğru giderken kodlama aşamasından sonra sağ tarafta bulunan aşamalardan birinde bir sakatlık bir eksik efendime söyleyeyim bir istek arzu gelirse bu hemen karşısındaki aşamaya atlar yine resimde görüldüğü gibi.

Yani User Acceptence aşamasına gelmiş bir yazılımda kullanıcı bu ürünü kabul etmezseeee 😀 en başa dönüyoruz 😀 tekrar analiz tekrar falan falan falan 😀 Sil baştan olmasada istenilen yeni özellik ile alakalı tüm processler için tekrar bir döngü tekrar bir iş tekrar bir çalışma gerekiyor 🙂

V model çokda zor değil değilmi 🙂 resim zaten açıklıyor…

Umarım yararlı olur

Bilgiyle Kalın

M.Zeki OSMANCIK

 

Kanban Ne Ola ki ? 508 212 mezo

Kanban Ne Ola ki ?

Merhaba arkadaşlar

Proje geliştirme süreçleri ve bu süreçlerde kullanılan metotlar vs ile ilgili küçük bilgiler vermeye tam gaz devam ediyorum 😀 Sırada Kanban var

Kanban, tam zamanında Üretim ortamında malzeme hareketlerinin kontrolü amacıyla kullanılan bir çizelgeleme yaklaşımıdır. Toyota’nın üretim verimliliğini artırmak amacıyla Taiichi Ohno tarafından geliştirilmiştir. Yöntem 1953’ten bu yana kullanılmaktadır. Aslında japoncada görsel işaret veya kart anlamına gelir. Üretimin tam zamanında gerçekleşmesi konusunda başarılı bir metotdur. Tüm olayları görselleştirir ve üretim sürecini büyük resimde görme imkanı sağlar.

Toyotada kullanılmaya başladığına göre küçük bir tahminle biraz hayalgücü ile bu sistemin aslında nasıl çalıştığını hayal etmek çok da zor değil. Bir üretim hattı mevcut ve bu üretim hattı üzerinde ürün bazı işlemlere tabi tutuluyor ve en son olarak bir ürün yani araba ortaya çıkıyor. Örneklemek gerekirse bir band üzerinde önce arabanın iskeletine parçalar sıra ile takılıyor kapılar , çeşitli aksamlar , motoru ,camları, iç aksesuarları gibi bu sıra ile giden işlemlerde bir aksilik olmaması önemli bunun içinde süre ve malzeme kontrolü önemli 😉 Kanban tüm bu işlemleri görselleştirip takibi kolaylaştırıyor 😉

Sen ne anlatıyorsun değişik 😀 Toyota kullanıyorda bizdemi araba üreteceğiz ?  diyebilirsiniz 😀 demeyin çünkü Kanban olayının yazılımada uyarlanması çok da zor değil. Adamlar yapmış 2004 yılında bu Kanban felsefesini yani görselleştirme işini yazılımada uyarlayıp bir metodoloji haline getirmişler.

Özet olarak bahsetmek gerekirse Kanban metodu mevcut sürecinizde hemen bir değişikliğe gitmenizi zorunlu kılmaması önemli avantajlarından bir tanesi. Zamanla yazılımın veya sürecin evrimleşeceğini öngörür.

Yani Kanban Yazılım Geliştirme Süreci veya Proje Yönetimi diye bir şey yoktur. Kanban bir süreç değildir, sürekli akışı teşvik eden, hafif siklet bir metodtur.

Kanban, temelde 4 temel prensibi kullanır:

  • Ne biliyorsan onunla başla,
  • Artırımsal ve evrimsel değişimi takip etmeyi kabul et,
  • Mevcut sürece, rollere, sorumluluklara ve ünvanlara saygı göster.
  • Tüm seviyelerde liderliği teşvik et

Bu prensipler akabinde Kanban’ın 5 ana özelliğide şöyle özetlenebilir :

  • İş akışını görselleştirir
  • Aynı anda yapılan işleri sınırlandırır
  • Akışı yönetmeyi ve ölçmeyi kolaylaştırır
  • Süreç ilkelerini belirgin kılar
  • İşbirliği yaparak iyileştirmeyi sağlar

Bu süreçte belli adımlarda yapılan iş diğer adımlarda yapılan işlerden daha çabuk sonuçlanabilir. Bir adımın çıktısı diğer bir adımın girdisidir. Zamanında tüketilemeyen görevler o adımda bir birikime neden olacaktır. Kanbanda her bir adımda eş zamanlı yapılacak işlerin sayısına bir sınır getirilmesi sürecin darboğazlarının azalmasına imkan tanır. Bir üretkenlik yaratılıp arkadan gelmekte olan işler için bir yer açar. Sınırlama getirilmemesi durumunda bir sürecin belli bir adımında çok iş yapılıyor olmasına rağmen biten bir iş olmayacaktır. Sonuç olarak takım ne kadar çok çalışırsa çalışsın o zamana kadar bir değer üretememiş olacaktır.

Örnek olarak bir Web sayfası yapıyorsanız bu aşamada tasarım için 1 kişi , programlama için 2 kişi olduğunu varsayarsak kodlamada gerçekleşecek bir gecikme tasarımdan çıkan işler bitip ,development aşamasına gelen işleri çoğaltacak ve bu aşamada developer arkadaşlar zorlanacak belki de yeni bir developer ihtiyacı doğacak . Ama bu işler sınırlandırılırsa bu dar boğaz yada işlerin belli aşamalarda artması durumu desek daha doğru olur biraz daha aza indirgenmiş olur. Ayrıca Kanban ile büyük resim görüldüğünden , resimde bu problemin yöneticiler tarafından görüntülenmesi  çalışanlar açısından da önemli ve rahatlatıcı bir özellik.

Kanban’da görselleştirme Değer Akış diyagramları ile ve kanban tahtası ile sağlanabilir. Değer akış diyagramları mevcut durumun, gelecekteki sistemin anlaşılması ve israfın önlenmesi için kullanılır.
Kanban Tahtası ahanda aşağıdaki gibi birşeydir.

kanban-movement

Resimde görüldüğü gibi işler belli başlıklarla ayrılır her iş bittiğinde bir sonraki aşamaya geçer ve bitirilirler.

Kanban ile kendi kişisel işlerinizi bile takip etmek kolay 😉 bunun için internet ortamında kullanılan bazı uygulamalarda mevcut. 😉

Umarım Yararlı Olur

Bilgiyle Kalın

M. Zeki OSMANCIK

Proje Geliştirme Süreçleri – Agile Scrum 1024 841 mezo

Proje Geliştirme Süreçleri – Agile Scrum

Merhaba arkadaşlar

Proje geliştirme süreçleri ile alakalı bilgi almaya  devam ediyoruz. Bildiğiniz gibi bir önce ki yazımda Waterfall metodunu türkçem yettikçe anlatmaya çalıştım. Bu yazımda ise farklı bir tür yeni bir trend herkesin öğrenmeye uygulamaya çalıştığı bir metot olan Agile Scrum metodundan yine türkçem yettiğince bahsetmeye çalışacağım 🙂

Agile türkçe meali Çevik olan bu metot aşamalı olarak projeleri geliştirmemizi sağlıyor ve bu sayede biraz esnek davranabilmemizi sağlıyor. Waterfall metodunda analiz kısmı bittikten sonra müşteriyle uzun süre görüşemediğimiz çok özlediğimiz doğrudur işte Agile yöntemi bu özleme son veriyor ve müşteri ile sürekli iletişim içinde bulunmamızı sağlıyor 😀 Yani kısacası Agile adı gibi projemize çeviklik kazandırıyor ve gerek hız gerek üretilen değerler açısından bize güzel faydalar sağlıyor. 🙂

Agile denen yöntemin içersinde de farklı frameworkler mevcut bunlardan biri Scrum diğeri XP dir. Windows XP değil ama 😀  meali Extreme Programming. 🙂

Bu metotlardan şimdilik Scrum dan bahsedeceğim XP için sonraki yazılardan birinde bahsedebilirim…

Scrum denilen şey itiş kakış anlamına gelen ama anlamı kadar karmaşa içinde yürümeyen bir yöntem. Bu yöntem içersinde bulunan bazı terimleri sizlere konu ile birlikte açıklamak isterim 🙂

Product Owner : İşi yaptırmak isteyen tarafta bulunan ve yazılımın tüm detayına hakim olan bize anlatabilecek arkadaştır.

Product Backlog : Yazılım için yapılmış analiz diyebiliriz. yazılımımız şöyle güzel olsun, böyle iyi olsun , hatta şöyle de güzel olsun içinden atlar kuşlar böcekler çıksın şeklinde olabilen ve ürünü yaptıracak olan Product Owner tarafından yazılmış belli formata sahip User Story‘ ler  bütünüdür.

Herneyse bu PO (Petrol Ofisi değil Product Owner 😀 ) arkadaş bizlere fantazi dünyasının sınırlarını zorlayarak bütün bir product backlogu oluşturduktan sonra bu işleri en çok önemliden en az önemliye sıralar ve teslim eder. Product Backlog yaşayan bir liste olabilir yani sürekli madde eklenebilir silinebilir vs vs. Bu PO nun zevkine kalmış artık 🙂

User Story’ler INVEST diye kısa bir isimle adlandırılan kurallar dizisini içerirler.Invest şöyle sıralanır :

  • Indipendent(Bağımsızlık):User Story kendi başına bir içeriğe sahip olmalıdır. Diğer user story’lere bağlı olmamalıdır.
  • Negotiable(Tartışılabilir): User Story’ler, bir sprint içeriğine girene kadar her an değiştirilebilir.
  • Valuable(Değer): bir user story son kullanıcı için bir değer ifade etmelidir.
  • Estimable(Tahmin yürütülebilir): Bir user story’nin süresi tahmin edilebilmelidir.
  • Sized appropriately(Makul boyut): User Story’ler plan, görev ve öncelik bakımından derecelendirilmesi ele alınabilmesi için çok kompleks yapıda olmamalıdır.
  • Testable(Test edilebilirlik): User Story’ler test edilebilirliği mümkün kılmalıdır.

Sonrasında Scrum takımı bu product backloglar içersinde (burası önemli) her seferinde bir değer üretebilecek şekilde 2 veya 4 haftalık bir süre olan proje bitimine kadar tekrar eden  ve Sprint adı verilen dönem içinde gerçekleştirilmek üzere görevleri alır sıralar kendi içinde dağıtır ve geliştirmeye başlar. Tüm bu işleri yöneten arkadaşa Scrum Master denir. Çok karizmatik bir ünvanı bulunan bu arkadaş takımın tüm yükünü omuzlarında taşır ,ihtiyaçları sağlar , engelleri kaldırır, gaz verir vs vs.

Bu takım Scrum kuralları gereği bazı seremoniler yapmak zorundadır. Mesela her sabah maksimum 15 dk süren “Ne yaptım?” “Ne yapacağım?” “Önümde engel varmı varsa neler?” sorularının kısaca cevaplandığı bir toplantı. Sonra Sprint başlamadan önce acaba hangi taskları alsakta yapsak müşteriye nasıl bir değer üretsek sorusunun tartışıldığı Sprint Review. Bir de takımın kendi içinde birbirini tebrik ,tahrik edebildiği yanlış varsa “ben nerde yanlış yaptım” şarkısının söylendiği güzel bir durum varsa ortamın şenlendiği garip bir o kadar ilk seferde adını söylemesi zor bir toplantı vardır ki oda Retrospective toplantısıdır. 🙂

Sprint başlar mutlu yazılımcılar kodlarını yazmaya başlarlar her gün birbirlerine mutluluk içinde neler yaptıklarını anlatırlar ve 2 veya 4 hafta dediğimiz sprint süresi sonunda müşteriye bir demo gösterirler bu elle tutulur gözle görülür müşterinin test etmesine olanak veren hatta ve hatta müşterinin  “İyi olmuş hadi bunu Deploy edelim böylece” lafını söyletebilecek bir yazılım olmalıdır ki Scrum dediğimiz metot amacına ulaşabilsin 🙂

Scrum ı açıklayan çok güzel bir resim aşağıdaki gibidir 🙂

Scrum-Plan-Do-Check-Act-Diagram

 

Peki bitti mi tabiki de bitmedi 🙂 birde son olarak bahsetmek istediğim küçük bir konu da Burn Down Chart.

Born-down chart İş sonu grafiği anlamına gelir ve Sprint sırasında takım üyeleri görevlerini yerine getirildikçe kalan iş ve yapılan iş arasındaki korelasyonu belirten bir grafik ortaya çıkar.İşte bu grafik takım üyelerine veya yöneticilerine fikir verir. Aynı zamanda takımın iş için istediği sürelerin yeterli olup olmadığı ve işin zamanında tamamlanıp tamamlanamadığı konusunda da fikir veren bir grafiktir. Adının burn down olması sanırım takımın işlerini zamanla eş değer şekilde bitirmeleri yakmaları eritmeleri vs. olabilir 🙂 Bu chart örneğinide yine aşağıdaki gibi görebilirsiniz.

BurnDownChart

Kısaca fikriniz olması açısından Agile ve Scrum ı açıkladım.

Umarım Yararlı Olur

Bilgiyle Kalın

M.Zeki OSMANCIK

Proje Geliştirme Süreçleri – Waterfall 512 320 mezo

Proje Geliştirme Süreçleri – Waterfall

Merhaba arkadaşlar
Yazılım geliştirmede çok sayıda farklı model ve süreçler mecvuttur. Bu yazımda sizlere yazılım dünyasında diğer modellere de örnek olan “Waterfall Model”inden bahsetmek istiyorum .Bu model bir yazılımın geliştirme sürecini Plan, Design, Built, Test ve Deploy aşamaları olarak ele alır. Bu aşamaların her biri birbirini bekleyen ve etkileyen  süreçlerdir.
Plan (Analiz)
Bir problem çözümü olarak nitelendirilen yazılımın ne yapacağını ve nasıl yapacağını belirlediğimiz yani problemi tanımladığımız aşama analiz aşamasıdır. Yazılan kod isteneni doğru bir şekilde yerine getirebiliyorsa başarılı bir yazılım olarak nitelendirilebilir bu sebeptendir ki  öncelikle yazılımdan ne istendiğinin doğru bir biçimde anlatılması ve yorumlanması gerekir. Analiz aşaması personel, donanım ve sistem gereksinimlerinin belirlenmesi, sistemin fizibilite çalışmasının yapılması, kullanıcıların gereksinimlerinin analizi, sistemin ne yapıp ne yapmayacağının kısıtlamalar göz önüne alınarak belirlenmesi, bu bilginin kullanıcılar tarafından doğrulanması ve proje planı oluşturulması adımlarından oluşur.

Design (Tasarım)
Yazılımın analizini yaptık ihtiyaçlarını belirledik artık bilgi sahibiyiz ne nasıl olur az çok biliyoruz bundan sonra ki aşamada neler yapacağiz peki ? Analizin sonucunda belirlenen ihtiyaçlara yanıt verecek yazılımın temel yapısının oluşturulduğu aşamadır. Yazılım tasarımı, bir bileşen veya sistemin nasıl gerçekleştirileceğini belirlemek için kullanılan teknikler, stratejiler, gösterimler ve desenlerle ilgilidir. Bu aşama yazılım bileşenleri arasındaki ara yüzler, mimari tasarım, veri tasarımı, kullanıcı ara yüzü tasarımı, tasarım araçları ve tasarımın değerlendirilmesi alt süreçlerini de kapsamaktadır. Tasarım aşaması, yazılımın hem kullanıcı ara yüzünü hem de programın omurgasını ortaya koymaktadır. Yapılacak tasarım, yazılımın işlevsel gereksinimlere uygun olmasının yanı sıra kaynaklar, performans ve güvenlik gibi kavramları da göz önüne alınarak gerçekleştirilmelidir. Kısaca tasarım kısmında yazılım içersinde karşılaşılabilecek tüm herşey göz önüne alınarak kodlama için start verilmeye uygun ortam hazırlanır.
Build (Kodlama)
Şimdiki kısım bizim en sevdiğimiz kısım Kodlama 😀 Bu aşama, tasarım sürecinde ortaya konan veriler doğrultusunda yazılımın gerçekleştirilmesi yani kodların yazılması aşamasıdır. Bu süreç programlama çalışmalarının yanı sıra yazılımın geliştirilmesi ve kullanıcıya ulaştırılması sürecindeki bütün çalışmaları kapsar. Tasarım sonucu üretilen süreç ve veri tabanının fiziksel yapısını içeren fiziksel modelin bilgisayar ortamında çalışan yazılım biçimine dönüştürülmesi çalışması olarak da nitelendirilebilir. Yazılım geliştirme ortamı, programlama dili, veri tabanı yönetim sistemi, yazılım geliştirme araçları seçimi kodlama aşamasında gerçekleştirilir.
Test
Yazılımı yazdık bitirdik yada sadece bitirdiğimizi sanıyoruz 😀 şimdi sıra geldi Test aşamasına, yazılım kodlanması sürecinin ardından gerçekleştirilen sınama ve doğrulama aşamasıdır. Elde edilen uygulama yazılımının hem belirlenen gereksinimleri sağlayıp sağlamadığı hem de gerçekleştirimin beklentilere uygun olup olmadığını kontrol etmek için statik ve dinamik sınama tekniklerinden yararlanır. Statik teknikler, yazılımın tüm yaşam döngüsü boyunca elde edilen gösterimlerin analizi ve kontrolüyle ilgilenirken, dinamik teknikler sadece gerçekleştirilmiş sistemi içerir. Yazılım üretiminde ilk testler genelde geliştirme sürecinde programcı tarafından yapılır. Bununla birlikte, asıl hata ayıklama ve geribildirim hizmeti test ekipleri tarafından yapılır. Testler ve geribildirim müşteri yazılımı kullandığı sürece devam eder. Test sürecinde en faydalı geribildirimler son kullanıcı test gruplarından gelir.
Deploy
Yazılımımız yapılan analiz doğrultusunda beklendiği gibi çalışıyor ve testlerinden de başarılı şekilde geçti sıra geldi artık müşterimizin kullanımına açmaya. Bu aşama tüm gereksinimler tamamlanmış ve müşterimiz memnun şekilde projesini teslim etme aşamasıdır. Bu aşamadan sonra belki bakım aşamasıda bu sürece dahil edilebilir.

Aşağıdaki resimde waterfall yönteminin işleyişini görebiliriz.

waterfall

Umarım Yararlı Olur
Bilgiyle Kalın
M.Zeki Osmancık

C# ile Powerpoint Sunumu Hazırlamak 554 382 mezo

C# ile Powerpoint Sunumu Hazırlamak

Merhaba arkadaşlar
Uzun süreden beri bir makale yazmaya vakit bulamıyorum ama yavaş yavaş geri dönüyorum. Bu yazıda sizlere zevkli küçük bir örnek göstermek istiyorum. 😀 C# üzerinden program yardımı ile PowerPoint sunumu hazırlamanın nasıl olduğu ile ilgili başlangıçta çok işinize yarayacak bir kod parçası
Bunun için öncelikle bir windows Forms projesi açalım ve 1 tane Buton ekleyelim 🙂 Projemiz içersine Referans olarak 2 önemli kütüphane eklememiz gerekiyor. Sağa tıklayıp “Add Reference” dedikten sonra “COM” sekmesi içersinde bulunan microsoft graph 15.0 object library ve microsoft PowerPoint 15.0 object library kütüphanelerini seçip ekleyelim.
Artık gerisi çok kolay 🙂 işte bundan sonra işi yapacak olan kod parçası

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.Office.Interop.PowerPoint;
using Microsoft.Office.Core;

namespace testToCreatePttFileFromImages
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
string pictureFileName = “C:\\picToVideo\\2.jpg”;

Microsoft.Office.Interop.PowerPoint.Application pptApplication = new Microsoft.Office.Interop.PowerPoint.Application();

Microsoft.Office.Interop.PowerPoint.Slides slides;
Microsoft.Office.Interop.PowerPoint._Slide slide;
Microsoft.Office.Interop.PowerPoint.TextRange objText;

// Create the Presentation File
Presentation pptPresentation = pptApplication.Presentations.Add(MsoTriState.msoTrue);

Microsoft.Office.Interop.PowerPoint.CustomLayout customLayout = pptPresentation.SlideMaster.CustomLayouts[Microsoft.Office.Interop.PowerPoint.PpSlideLayout.ppLayoutText];

// Create new Slide
slides = pptPresentation.Slides;
slide = slides.AddSlide(1, customLayout);

// Add title
objText = slide.Shapes[1].TextFrame.TextRange;
objText.Text = “The Header Of The Presentation”;
objText.Font.Name = “Arial”;
objText.Font.Size = 32;

//objText = slide.Shapes[2].TextFrame.TextRange;
//objText.Text = “this text come after the heading with bullet”;

Microsoft.Office.Interop.PowerPoint.Shape shape = slide.Shapes[2];
slide.Shapes.AddPicture(pictureFileName, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoTrue, shape.Left, shape.Top, shape.Width, shape.Height);

//slide.NotesPage.Shapes[2].TextFrame.TextRange.Text = “the text is for the notes to specific page”;

pptPresentation.SaveAs(@”c:\picToVideo\fppt.pptx”, Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsDefault, MsoTriState.msoTrue);
pptPresentation.Close();
pptApplication.Quit();

}
}
}

Java – AES Algoritması ile Encryption ve Decryption 691 618 mezo

Java – AES Algoritması ile Encryption ve Decryption

Merhaba arkadaşlar

Bu yazımda sizlere AES algoritması kullarak nasıl Encryption işlemi yapabilirsiniz en basit haliyle anlatmak istiyorum. Eclipse i açtık yeni bir Java projesi olusturduk sonrasında 2 adet class’ı projemiz içersine ekledik isimleri TEST.java  ve ENCRYPT.java.

Amaç aslında Encrypt.java class ını başka projelerde de kullanılacak şekilde dizayn etmek 😉

Encrypt class ı içersine aşağıdaki kodları ekleyeceksiniz. 🙂

import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.*;
public class encrypt {

	private static final String ALGO = "AES";
	private static final byte[] keyValue =  new byte[] 
        { 'M', 'e', 'Z', 'O', 'b', 'l', 'o','g', 's', 'B', 'e','s', 't', 'K', 'e', 'y' };

	public static String encrypt(String Data) throws Exception {
		Key key = generateKey();
		Cipher c = Cipher.getInstance(ALGO);
		c.init(Cipher.ENCRYPT_MODE, key);
		byte[] encVal = c.doFinal(Data.getBytes());
		String encryptedValue = new BASE64Encoder().encode(encVal);
		return encryptedValue;
	}
	public static String decrypt(String encryptedData) throws Exception {
		Key key = generateKey();
		Cipher c = Cipher.getInstance(ALGO);
		c.init(Cipher.DECRYPT_MODE, key);
		byte[] decordedValue = new BASE64Decoder().decodeBuffer(encryptedData);
		byte[] decValue = c.doFinal(decordedValue);
		String decryptedValue = new String(decValue);
		return decryptedValue;
	}
	private static Key generateKey() throws Exception {
		Key key = new SecretKeySpec(keyValue, ALGO);
		return key;
	}
}

Ardından test.java yani çalıştırılacak olan class ımız içersinde main metodu bulunduran class içersinede aşağıdaki kodları ekliyorsunuz. Encrypt classı içersinde oluşturduğumuz metotları çağırıyoruz.

public class test {
	public static void main(String[] args) {
		String password = "Hello Word İt's MEZO Blog";
		String passwordEnc;
		String passwordDec;
		try {
			passwordEnc = encrypt.encrypt(password);
			passwordDec = encrypt.decrypt(encrypt.encrypt(password));

			System.out.println("Plain Text : " + password);
			System.out.println("Encrypted Text : " + passwordEnc);
			System.out.println("Decrypted Text : " + passwordDec);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

Ve işlemimiz bitti işte bu kadardı 🙂  artık Run As Java Application diyerek çalıştırıyor aşağıdaki çıktımızı alıyoruz.

 

Programımızın Çıktısı
Encrypt edilecek Text : Hello World It’s MEZO Blog
Encrypt edilmiş Text : 2loMo4Zhrtsbqg/4NOk1MpYp1uVbXkDwUNZKnons30o=
Decrypt edilmiş Text : Hello World It’s MEZO Blog

 

Umarım Yararlı Olmuştur

Bilgiyle Kalın

M.Zeki OSMANCIK

İlk Bilgisayar… 436 308 mezo

İlk Bilgisayar…

 

Merhaba arkadaşlar

Internette dolanırken ilk bilgisayar resimleri denk geldi sizlerlede paylaşmak istedim 🙂  😛 ortalama 120 m2 bir alan içersinde aşağıdaki ablaların kabloları soketlere sokup çıkarmasıyla işlem yapıyormuş.:D hatta bu DEBUG olayıda bu bilgisayarın soketlerinden birinin içersindeki bir böceğin bulunması ile çözülen sorun ardından çıkmış… 😀

ilk-bilgisayarlari-gorunce-sasiracaksiniz_bda2

 

ilk-bilgisayarlari-gorunce-sasiracaksiniz_f412

ilk-bilgisayarlari-gorunce-sasiracaksiniz_1b3f

ilk-bilgisayarlari-gorunce-sasiracaksiniz_3291

ilk-bilgisayarlari-gorunce-sasiracaksiniz_4109

ilk-bilgisayarlari-gorunce-sasiracaksiniz_3268

 

JSP MasterPage Sayfası Nasıl Yapılır? 299 299 mezo

JSP MasterPage Sayfası Nasıl Yapılır?

Merhaba arkadaşlar

JSP ile uğraşmaya devam ederken ASP.Net in kıymetini biraz daha iyi anlamaya başlıyorum ve sizlerede anlatmaya devam ediyorum.

Başlıktanda anlaşılacağı gibi JSP web sayfalarında ASP.Net de bulunan masterpage gibi bir şablon oluşturup o şablon üzerinde nasıl işlem yaparız biraz bahsedelim 🙂

Arkadaşlar JSP sayfalarına ekleyebileceğiniz bir Masterpage yapısı YOK !!! Maalesef ki yok…

Peki napıyoruz o kadar başlık açtık bari bir yol yordam gösterelim değilmi 😛  Diyelim ki aşağıdaki giib bir yapımız var ve bunun bütün sayfalar için şablon olmasını istiyoruz.

layout

Hemen kendimize Header.jsp adında bir dosya oluşturup bu dosya içersine istediğiniz header da bulunması gereken kodları yerleştiriyorsunuz örneğin  aşağıdaki kodlar gibi 🙂
[codebox 1]
Sonra hemen devam ediyoruz Footer.jsp adında bir dosya daha ekleyip içersine istenilen HTML kodlarını yazıyorsunuz. Gerekiyorsa LeftMenu.jsp adında bir jsp dosyası daha ekleyip sonra index.jsp yani anasayfamıza geliyoruz şimdi bunları index.jsp içine tek tek ekleyip dosya üzerinden kullanılmasını sağlayacağız. PHP gibi yani. 🙂  Aşağıdaki gibi sayfaların içersine tek tek <jsp:include page=”header.jsp”/> tagını kullanarak istediğimiz alanların farklı sayfalar üzerinden tek bir sayfada gösterilmesi işlemini gerçekleştirebiliyoruz.

[codebox 2]

İşte böyle 🙂 Masterpage kadar güzel olmasada bu da bir yöntem 🙂

Umarım Yararlı Olur. 😀

Bilgiyle Kalın

M.Zeki Osmancık

 

Java JSP Projesi Oluşturmak 452 302 mezo

Java JSP Projesi Oluşturmak

Merhaba arkadaşlar

İşim gereği biraz Java ile uğraşmam gerektiğinden Java ile alakalı yazılarda paylaşmaya başlayacağım sizlerle. Bu yazıda sizlere JSP projesi nasıl oluşturulur çalıştırılır resimlerle anlatmak istiyorum.

Önce Eclipse lazım bize hemen Eclipse i indirebileceğimiz linke  gidiyoruz ve download ediyoruz 🙂

01

Zip dosyasının içindeki eclipse klasörünü çıkarın.

02

Exe sinden Eclipse i çalıştırın

04

Bir workspace belirleyin ki Eclipse projelerinizin hepsini oraya kaydetsin 😉

005

Eclipse açıldığına göre şimdi proje açıp işimize bakabiliriz 🙂  Şimdi File menüsünden “New” o sekmeden de “Other” seçeneğini seçiyoruz (yada Ctrl+N kısayoluda işimizi görür)

06

Yeni Proje penceresinde Dynamic Web Project  seçmemiz gerekiyor eğer bu projeyi göremiyorsanız kötü haber yanlış Eclipse versiyonunu indirmişsiniz demektir 🙂 hemen JAVA EE versiyonunu indirmeniz gerekiyor 🙂

07

İlk JSP projesi olduğu için Eclipse TomCat ile ilgili birşey kurmuyor yada oluşturmuyor o yüzden Target  RunTime boş geliyor. Aktif etmemiz gerekiyor. 😉

08

New Runtime butonuna tıkladığınızda dikkat etmemiz gereken küçük bir tik var. Create a new local server i işaretlemeyin 

09

Tomcat i indirip kurmuş olduğunuzu farzederek devam ediyorum 🙂 kurmadıysanız hemen kurun hemen 🙂

TomCat i nereye kurmuşsanız bir önceki pencereden seçtiğiniz versiyonun nerede kurulu olduğunu göstermeniz gerekiyor 😉

10

Bu işlemden sonra artık  New Dynamic Web Project kısmında görüntülenmeyen Target Runtime da TomCat bir seçenek olarak görüntülenecek.

11

Artık Finish butonu ile birlikte projemizi görüntüleyebiliriz 😉

12

 

Projemiz bomboş bizi karşılıyor ve bundan sonrasında sayfalarımızı eklememiz gerekiyor hemen WebContent  klasörü üzerine sağ tık New ile bir JSP dosyası eklememiz gerekiyor 🙂

13

14

 

Ana sayfa olmasını istiyoruz o halde index ismini kullanmalıyız 😉 Bu pencerede nereye ekleneceğini seçip ardından ismini belirledikten sonra Finish  butonuna basmıyorsunuz. Next ile devam ediyoruz.

15

New JSP File(html) seçiyoruz  ve Finish ile JSP dosyamızı oluşturmuş oluyoruz 😉  index.jsp vatana millete hayırlı olsun 😉

16

Sayfam açıldığına göre nasıl çalıştığı ile ilgili bir bilgi olacağından çok basit şekilde nasıl çalıştığını göstereyim.

17Tamamdır çok basit bir toplama işlemi ile nasıl kod yazacağımızı görmüş olduk 😀  Şimdi çalıştırma vakti geldi bakalım nasıl görünüyor 🙂

18

Çalıştır butonuna bastıktan sonra Run As penceresi üzerinden “Run on Server” seçilerek OK butonu ile devam ediyoruz.

19

Localde kendi makinamız üzerinde yeni bir TomCat server oluşturuyoruz.

20

Projemiz oluşturduğumuz TomCat server üzerinde build edilmeye başlayacak ve index.jsp dosyamız bilgisayarımızdaki Eclipse üzerinde görüntülenmeye başlayacak. Yazdığımız koda göre ekranda 4 görüyorsak dinamik bir web sayfasına ilk adımı attık demektir. 🙂

21

Şimdi browser üzerindede görüntüleyelim ve toplama işlemimizin sonucunu görelim 😉

22

Browserdaki kaynak kodlara bakarsak buradada sadece 4 olduğunu yazdığımız kodların görüntülenmediğini görüyoruz 😉

24

Son olarak server i durdurarak işlemimize son veriyoruz 🙂

25

Hayırlı ve uğurlu olsun ilk JSP uygulamamızı yapmış olduk 🙂

Umarım yararlı olur

Bilgiyle Kalın

M.Zeki Osmancık

 

 

Kolon Adını Tablolarda Aramak 150 150 mezo

Kolon Adını Tablolarda Aramak

Merhaba arkadaşlar
Uzun zamandır bir konu anlatmıyorum ancak hatalar ve düzeltilmeleri ile ilgili yazılar paylaşıyorum en kısa zamanda bir kaç güzel konu ile karşınızda olacağım 🙂
Sizlere bahsetmek istediğim kısa konum SQL de Kolon Adını Tablolarda Aramak: Diyelim ki database içersinde sadece kolon adını biliyorsunuz veya kolon adının içinden bir kelime hatırlıyorsunuz hangi tabloda merak ediyorsunuz işte size güzel bir sorgu 🙂 Bu sorgu ile kolon adına göre tablo araması yapabilirsiniz. İşte o sorgu 🙂

select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME
from INFORMATION_SCHEMA.COLUMNS
where COLUMN_NAME like '%aranacak_kelime%'
and TABLE_CATALOG='Database_Adi'

Umarım yararlı olur
Bilgiyle Kalın
M.Zeki OSMANCIK

Cannot use the special principal ‘sa’. Microsoft SQL Server, Error: 15405 Hatası 622 197 mezo

Cannot use the special principal ‘sa’. Microsoft SQL Server, Error: 15405 Hatası

Merhaba gençler 🙂

Hemen size sıcak sıcak bilgi paylaşayım.

MS SQL server mı kullanıyorsunuz ?  Veritabanlarınızı başka bir yerden restore veya attach mi yaptınız ?  Login kullanıcı SA nin db yetkilerini vermek mi istiyorsunuz ama başaramıyormusunuz ? İşte doğru adrestesiniz 😀

Konumuz Cannot use the special principal ‘sa’. Microsoft SQL Server, Error: 15405 Hatası 🙂  5 dk önce beni deli eden ama çözümü basit bir problemden bahsedeceğim şimdi.

Veritabanlarını restore ettikten sonra SA kullanıcısına dbowner yetkisi vermek istediğimde karşıma böyle bir hata çıktı

Hatamızın görüntüsü şöyle güzel bir hata :

Untitled picture

Bu hatayı alıyorsanız hiç uğraşmayın arkadaşlar hemen New Query hangi DB ile işlem yapacaksanız seçin ve şu kodu çalıştırın olsun bitsin 🙂

 

exec sp_changedbowner 'sa','true'

 

Umarım Yararlı Olur

Bilgiyle Kalın 🙂

M.Zeki Osmancık

 

The type initializer Hatası… 611 193 mezo

The type initializer Hatası…

Merhaba arkadaşlar
Sql Server 2008 i kaldırıp tekrar kurmak zorunda kaldım. ancak bunu yaptığımda karşıma bir hata çıktı. Sizlerle paylaşmak istedim hata şöyle

vVkwW
Error >

TITLE: Microsoft SQL Server Management Studio
——————————

The type initializer for ‘Microsoft.SqlServer.Management.Dmf.PolicyStore’ threw an exception. (Microsoft.SqlServer.Dmf)

——————————
ADDITIONAL INFORMATION:

Could not load file or assembly ‘Microsoft.SqlServer.Diagnostics.STrace, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91′ or one of its dependencies. The system cannot find the file specified. (Microsoft.SqlServer.Dmf)

——————————
Internette araştırınca gerekli gereksiz herkes bir şeyler söylemiş yok onu yükle yok Visual Studio yu kaldır kur yok onu ekle kaldır gibi gibi. Bunlardan bazılarını deneyip vakit kaybettikten sonra bir şey denemek geldi içimden bir ses dediki REPAIR et yeğen dedi.
Çalıştırdım SQL Server Setup ı ve Repair ettim ve sorun çözüldü 🙂

Umarım faydalı olur
Bilgiyle Kalın
M.Zeki Osmancık

String Char Dizisidir! 920 300 mezo

String Char Dizisidir!

Merhaba arkadaşlar
Çalıştığım şirkette bulunmuş olduğum proje için Senior yani 2 3 yıl deneyimi olan developer arkadaşlar arıyoruz ve bunun ile ilgili müdürüm mülakat görüşmelerine benimde girmemi rica etti bende seve seve kabul ettim. Mülakatta gelen arkadaşlara neler yaptığını sorduğumuzda herkes güzel güzel anlatıyor yaptıklarını iş görüşmesinde göze girmek için hepimizin yaptığı gibi herşeyi anlatıyor anlatmaya gayret ediyor. Ancak

Dikkatimi çeken bir konu var ki işte oda bu yazıyı sizlerle paylaşmak isteyişimin asıl sebebi : Senior olarak alınacak ve daha önce bir çok projede görev almış olan arkadaşlar çok çok çok basit bir sorudan elendiklerinin veya olumsuz bir not aldıklarının farkında değiller. String bir değişken içindeki karakterlerin sayılması ve işlem yapılması ile ilgili bir sorumuz var ve burada herkese hiçbir string metot vs kullanmayın diye de uyarıyoruz tahmin ettiğiniz gibi basit küçük bir algoritma sorusu.
Ne var bunda diyebilirsiniz işte konu bu zaten 🙂 arkadaşların hiç biri string bir char dizisidir deyip bu şekilde foreach ile veya for ile kodunu kağıda dökmeye başlamadı. Herkes bir ipucu verilmesini bekliyor yada farklı yollarla bir array e çevirme işine giriyor.Halbuki ismini yazarken bile aslında bir karakter dizisi kullandığının farkında bile değil.
Küçük ayrıntılar veya bilgiler hayat kurtarır yada iyi yerlere getirebilir.

Unutmayın  String bir Char dizisidir.

Umarım Yararlı Olur ve bunu okuyan arkadaşlar mülakatlarda başvurdukları güzel iş yerlerine sevdikleri işleri yapmak üzere girebilirler.

Bilgiyle kalın

M.Zeki Osmancık

Galaxy Note II için Android 4.3 test ROM- N7100XXUEMI6 1024 658 mezo

Galaxy Note II için Android 4.3 test ROM- N7100XXUEMI6

Selamlar

Biraz önce aldığım bir habere göre Samsung Galaxy Note 2 için Android 4.3 versiyonunun test firmware i internete sızmış. Birkaç sitede bunun ile ilgili bilgiler var ancak Note 3 teki özelliklerin hangileri Note 2 de kullanılabilir orasını bilemeyiz XDA developers yine yapmış yapacağını 🙂 Ben acele etmedim kurmak için acele eden heyecanlanan arkadaşlar için paylaşmak istedim. Çünkü Samsung , Galaxy Note 2 için  4.3 ün testlerine yeni başlamış. Bu ROM u yüklerken şuna dikkat edin tüm uygulama fotoğraf vs bilgileriniz sıfırlanıyor yedek almadan kesinlikle bu işe bulaşmayın derim ben.

Grafik olarak S4 ve Note 3 teki grafikleri kullanılmış Tablı Ayarlar vb. bunun yanında S4 ve Note 3 e gelen Samsung Knox , Samsung Walled gibi uygulamalarda 4.3 de bizleri bekliyor 😀

Ben paylaşıyorum ama Samsung hala bununla uğraşıyor testler ve geliştirmeler devam ediyor. Release versionu çıktığında önce kendi Note 2 me kurup sonra sizlerle paylaşacağımdan şüpheniz olmasın 😀

İşte isteyen meraklı arkadaşlar için linkler ve nasıl kuracağınız ile alakalı basit bilgiler 😀

Ama başta yine hatırlatmak isterim

Telefonunuzun şarjı full olmalıdır. Bu yükleme işlemi herhangi bir şekilde yarım kalırsa telefonunuz tekrardan açılmayabilir. Herhangi bir sorunda  www.mzekiosmancik.com sorumlu değildir. Sorumluluğun tamamen kendinize ait olduğunu bilerek kuruluma başlamalısınız.

Ayrıca belirtmek isterim ki bu kurulum telefonunuzu garanti dışı bırakmaz 😀  Başkaları tarafından yazılan Custom Rom lardan da değildir. Samsung ‘un üzerinde çalıştığı ancak henüz bitirmediği test ROM udur.  yani tamamen legal 😀

Eveeet gelelim kuruluma

Öncelikle buradan ODIN i indiriyoruz bizim biricik yardımcımız 🙂

ROM u buradan veya buradan veya torrent indirim kardeşim ben diyorsanız buradan indirin 🙂

Dosyanın şifresi : wagnervaz

– Şimdi zipten çıkarıp Odini açıyoruz

– Telefonumuzu download moduna alıyoruz.

DSC00031

 

 

NOT: Bunun için telefon kapalıyken Güç + Ses Kısma + Menu tuşlarına aynı anda basmalısınız. Bu tuşlara bastıktan sonra karşınıza bir menu gelecektir Ses Açma tuşuna basarsanız bir android resmi sizi karşılar ve telefonunuzun yüklemelere hazır olduğunu gösterir. Yandaki resimde Download Mode da telefonunuzun ekranının nasıl görüneceğini görebilirsiniz.

 

 

– Odin de telefonun bağlandığını  görüyorsunuz

– Sonra çıkarttığınız AP_N7100XXUEM16_CP_N7100XXEM16_CSC_N7100XAEM16_BY_WVAZ_DINK.tar adlı dosyayı PDA butonuna basarak Odin e ekliyorsunuz.

– Re-partition seçeneğinin İŞARETLENMEMİŞ olduğundan emin oluyorsunuz.

– Sonra kurulum bittikten sonra Wipe Data ve Wipe Cache yapıp Reboot ettiğinizde artık Note 2 niz 4.3 versiyonunun test aşamasındaki işletim sistemine kavuşmuş oluyoooor 😀

Aşağıda screenshot lar var. Ayrıca bu anlatıma güvenmeyen arkadaşlar olabilirler öncelikle SAMMOBILE haberidir  . ve XDA Developers tarafından da yayınlanmıştır.

evt5lntn 00sh dk2is9e5

oc44b51ep8b5926q o5k

 

Bilgiyle Kalın 😀

M.Zeki Osmancık

SOLID OOP Prensipleri 511 409 mezo

SOLID OOP Prensipleri

Merhaba arkadaşlar
Bu yazımda sizlerle OOP yazarken dikkat etmemiz gereken OOP yi gerçek anlamıyla programlarımıza veya web sitelerimize uygulama aşamasında nelere dikkat etmeliyiz bu konyu işleyen SOLID OOP Prensipleri ile ilgili küçük bir bilgilendirme yapacağım
OOP yi herkes bilir az çok anlatır veya basit yöntemlerle uygular yada uyguladığını sanar. Halbuki OOP programlama yaparken bir takım prensipler uygulanmalıdır. Bu prensiplerin baş harflerinden oluşan bir keyword var elimizde. SOLID
Solid 5 ayrı prensibin birleşmiş halidir ve OOP yaparken uygulamamız gereken kurallardan bahsederler. Hadi bakalım bu akrostiş şiir tadındaki prensipler neymiş görelim:
1- Single Responsibility Principle
2- Open/Closed Principle
3- Liskov’s Substitution Principle
4- Interface Sergregation Principle
5- Dependency Inversion Principle
İlk madde ile başlayalım küçük açıklamalar yapmaya.
1. Single Responsibility Principle : Bu prensibe göre bir metot, sınıf,nesne vb. yapıların yanlızca bir tane görevi olur. Bir metot, sınıf,nesne vb. değiştirmek için yanlızca bir sebebimiz olmalıdır. Birden fazla nedenimiz varsa bir yanlışlık var ve bu prensibe uymuyoruz anlamına gelir. Amaç her metot, sınıf,nesne vb. yapıya tek bir görev tek bir sorumluluk yüklemektir.
2. Open/Closed Principle : Yazmış olduğunuz metot, sınıf,nesne vb. yapılar geliştirmeye açık ancak değiştirmeye kapalı olmalıdır. Bu ne demektir peki: yazmış olduğunuz kod asla değiştirilmemelidir yanlızca üzerine eklemeler yapılmalıdır. Kodlarımızı yazarken bu şekilde dizayn etmeliyiz.
3. Liskov’s Substutions Principle : Bu prensibe göre alt sınıflardan elde ettiğiniz bir nesne ile üst sınıftan elde edilen nesne yer değiştirirse bu değişim kesinlikle ve kesinlikle aynı davranışa sahip olmalıdır. Yani örnekleyecek olursak OOP anlatırken hep bahsettiğimiz bir örnek olan CANLI sınıfımız olsun ve bu CANLI adındaki sınıfımız INSAN ve HAVYAN adlı iki sınıfa kalıtım vermiş olsun. Bu prensipte anlatılmaya çalışılan şey eğer ben bir işlemde CANLI sınıfını kullanıyorsam ve işlemlerim başarılı oluyorsa INSAN veya HAYVAN sınıfından aldığım örnekler ilede aynı işlemleri başarılı olarak gerçekleştirebilmeliyim içersinde bunu engelleyecek başka metot, sınıf,nesne vb. yapılar bulunmamalı demek istiyor.
4. Interface Sergregation Principle : Prensip olarak aynı özelliklere sahip olan sınıfları tek bir interface de toplamak sonradan o sınıfların hepsinde kesin olarak kullanılmayacak olan başka metot, sınıf,nesne vb. yapıları bu interface içersine eklemek doğru değildir. Ilk başta belki bir çözüm olabilir ama prensip olarak yanlıştır. Çözüm ise interface ‘leri parçalamaktır. Kesin olarak kullanılacak olan ortak metot, sınıf,nesne vb. yapıları ayrı ayrı interface ler içersinde toplayarak sınıflara implement etmektir.
5. Dependency Inversion Principle : Somut sınıflara olan bağımlılığı soyut sınıflar veya interface ler ile ortadan kaldırmaktır. Yani bir servis sınıfımız var ve bu servis sınıfı DB işlemleri ile ilgili işlemler gerçekleştiriyor. Başka bir A sınıfı üzerinden bu Servis sınıfına bağ kurup işlemlerimizi gerçekleştirirken ürettiğimiz A sınıfımız içersinde servis sınıfının bir çok örneği alınacak ve bir çok yerde kullanılabilecek ve kodlarımızı değiştirirken bağlı olan kısımlarda değişecek yada servis sınıfında yapılan bir değişiklik bizim servisi kullanan A sınıfımızdada değişikliklere sebep olacak . Amaç bu bağımlılığı ortadan kaldırmak ve daha güzel bir kod ortamı sağlamak.
Bu prensiplerde kod yazmak zorunlu olarak yapmanız gereken bir şey değil ama bu şekilde yazmanın tek bir amacı var daha az hata daha güzel kodlar 😀
Bilgiyle Kalın
M.Zeki Osmancık

Ejderha Mızrağı – Efsaneler üçlemesi 270 385 mezo

Ejderha Mızrağı – Efsaneler üçlemesi

Merhaba arkadaşlar

Bir arkadaşımın uzun ısrarlarına dayanamayarak Ejderha Mızrağı serisine başlıyorum. Ufak bir araştırma yaptım sizlerle paylaşmak isterim 🙂

Ejderha Mızrağı Destanı Margaret Weis ve Tracy Hickman tarafından yazılmış kitap serisidir. Seri aslında arabayla iş görüşmelerine giderken Laura ve Tracy Hickman tarafından yaratılmıştır. Serinin orijinal dili olan İngilizcede basılmış 190’dan fazla kitabı vardır. Ejderha Mızrağı dünyasının asıl yaratıcıları Margaret Weis ve Tracy Hickman olsa da birçok yazar yaratılan dünyaya ve kurallarına sadık kalıp onları kullanarak Ejderha Mızrağı dünyasıyla ilgili pek çok kitap yazmıştır. Öyle ki serinin kitaplarının büyük bir kısmının yazarları farklıdır. Aslen üç kitap olup, sonradan karakter derinleştirmeleri, yan hikâyeler, geçmiş ve gelecek eklemeleriyle büyümüş ve büyümeye devam etmektedir. Kitapların çoğu Krynn adlı dünyanın Ansalon adlı kıtasında geçer. Ansalon’un kuzey-doğusunda yer alan Taladas kıtası az olsa bile hikâyelerde kullanılmıştır. Adlatum kıtasında geçen bir hikâye henüz yazılmamıştır.
Türkçeye ilk olarak Ankira daha sonra Arkabahçe Yayıncılık ve son olarak da Laika Yayıncılık tarafından çevrilmiştir.
İlk yazılan Ejderha Mızrağı kitapları, birinci nesil karakterlerin çıktığı yolculuk ve maceralarını içeren, Güz Alaca Karanlığının Ejderhaları, Kış Gecesi Ejderhaları ve İlkbahar Şafağı Ejderhaları adlı üç kitaplık seridir. Kurgu ilk olarak Margaret Weis ve Tracy Hickman’ın da içinde bulunduğu masaüstü rol yapma oyunundan yaratılmıştır. Margeret Weis’in oyundaki karakteri Raistlin Majere’dir.

Tüm kitapları bulamadım ancak bulursam bu yazıyı güncelleyerek PDF formatında bu kitapları sizlerle paylaşacağım. Şimdilik elimde Efsaneler üçlemesi serisi bulunuyor. İyi okumalar diliyorum

ikizlerin-savaşı

İkizlerin Savaşı indirmek için tıklayın 

ikizlerin zamanı

İkizlerin Zamanı indirmek için tıklayın

ikizlerinsınavı

İkizlerin Sınavı  indirmek için tıklayın

Umarım Yararlı Olur

Bilgiyle Kalın

M.Zeki Osmancık

 

Design Patterns (Tasarım Deseni) Nedir ? 1024 777 mezo

Design Patterns (Tasarım Deseni) Nedir ?

Merhaba arkadaşlar
Konumuz Design Pattern 🙂 Biliyorum bir çok kişi bu konu hakkında birşeyler yazmıştır ancak birde ben yazayım dedim. Benim blogumda neden design pattern yok ben neden yazmıyorum dedim 🙂 ve işte Design Pattern…
Design Pattern genel olarak yazılım tasarımı sürecinde sürekli karşılaşılan problemlere çözümler üreten hazır kalıplardır. İstenilen herhangi bir yere yerleştirildiğinde çalışan hazır tasarımlar değildirler. İşin aslı problemler için bulunan çözümlere yapılan açıklamalardır
OOP(Object Oriented Programming) prensipleri doğrultusunda oluşturulan sınıfların başka sınıflara bağımlılığının en aza indirgenmesi beklenir. Bu durum esnek bir yapıyı beraberinde getirir ve yazılımın kalitesi artar. İleride gerekecek geliştirmelere daha müsait bir yapı sağlamış olur. Bu yapı, yazılımcıya ve o yazılımcıdan sonra gelecek yazılımcıya zamandan ve iş gücünden ciddi manada tasarruf sağlar.
Tasarım şablonları aşağıda yer alan ortak özelliklere sahiptir:

  • Edinilen tecrübeler sonunda ortaya çıkmışlardır.
  • Amerikanın tekrar tekrar keşfedilmesini engeller 😀 .
  • Tekrar kullanılabilir kalıplardır.
  • Ortak kullanılarak daha büyük problemlerin çözülmesine katkı sağlarlar.
  • Devamlı geliştirilerek, genel bir çözüm olmaları için çaba sarfedilir.

Tasarım şablonları değişik kategorilere ayrılır. Bunlar:

  • Oluşturucu tasarım şablonları (creational patterns)
  • Yapısal tasarım şablonları (structual patterns)
  • Davranışsal tasarım şablonlar (behavioral patterns)

Oluşturucular

  • Abstract Factory
  • Builder
  • Factory Method
  • Prototype
  • Singleton

Yapısal

  • Adapter
  • Bridge
  • Facade
  • Decorator
  • Composite
  • Flyweight
  • Proxy

Davranışsal

  • Command
  • Memento
  • Strategy
  • Iterator
  • State
  • Chain Of Responsibility
  • Mediator
  • Observer
  • Template Method
  • Visitor

Bu desenlerin yanlızca çok çok basit açıklaması. Yukarda saydığım desenleri tek tek açıklamayı planlıyorum 🙂 Zaman buldukça yazıyor olacağım. Sizlerde beni bekliyor olun 😀
Bilgiyle Kalın 😉
M.Zeki Osmancık

Android 4.4 KitKat Geliyor 699 427 mezo

Android 4.4 KitKat Geliyor

Selam Gençler 🙂

Android Jelly Bean versiyonundan sonra şimdi Android 4.4 KitKat versiyonu için hazırlıklara başlandı 🙂 Ayrıntılı bilgi için  http://www.android.com/kitkat/ adresinden mail adresinizi bırakarak haberdar olabilirsiniz.

kitkat

İyi Günler 🙂

Samsung Galaxy Note 2 Root İşlemi 455 466 mezo

Samsung Galaxy Note 2 Root İşlemi

Merhaba arkadaşlar

Samsung Galaxy Note 2 telefon aldım ve alışkanlık olarak kullandığım bazı uygulamaların ROOT işlemi yapılmadan kullanılamadığı için yerimde duramadım Galaxy Note 2 yi root işlemine tabi tuttum. Sizlerlede paylaşayım dedim 🙂

Öncelikle  söylemek isterim ki telefonunuzun şarjı full olmalıdır. Bu yükleme işlemi herhangi bir şekilde yarım kalırsa telefonunuz tekrardan açılmayabilir. Herhangi bir sorunda  www.mzekiosmancik.com sorumlu değildir. Sorumluluğun tamamen kendinize ait olduğunu bilerek kuruluma başlamalısınız.

İlk olarak ODIN programını buradan indiriyorsunuz. Ardından Root dosyasını buradan indiriyorsunuz.

Bu iki dosyayı indirdikten sonra Galaxy Note 2 telefonumuzu Download Mode ‘ da açıyorsunuz.

DSC00031

 

 
NOT: Bunun için telefon kapalıyken Güç + Ses Kısma + Menu tuşlarına aynı anda basmalısınız. Bu tuşlara bastıktan sonra karşınıza bir menu gelecektir Ses Açma tuşuna basarsanız bir android resmi sizi karşılar ve telefonunuzun yüklemelere hazır olduğunu gösterir. Yandaki resimde Download Mode da telefonunuzun ekranının nasıl görüneceğini görebilirsiniz.
 

 

 

Telefonumuzu Download Mode da açtıktan sonra sıra geldi ODIN programını çalıştırmaya 🙂 ODIN i çalıştırıp telefonumuzu kablomuzla bilgisayara bağladığımızda şöyle bir ekran karşımızda olmalı.

odin1

 

Added yazısını gördüysek sıra geldi ROOT dosyasını eklemeye. İndirmiş olduğunuz root dosyasını PDA butonuna basarak seçin sonra karşınıza şöyle bir ekran gelecek.

odin2

 

Artık hazırsınız 🙂 Şimdi START butonuna tıklayarak işlemi başlatın. Kurulum sürdükten sonra SUCCES yazısını gördüğünüzde telefonunuz yeniden başlayacak ve belki bir soru sorabilir size recovery ile alakalı bu soruyada ses açma kapama tuşlarıyla yönlendirme yapıp YES seçtikten sonra…

Veeee Galaxy Note 2 telefonunuz artık ROOT işlemi tamamlanmış ve yeni özelliklerinin sizin tarafından keşfedilmesini bekliyor olacak 🙂

Umarım yararlı olur

Bilgiyle Kalın

M.Zeki OSMANCIK

LDF Olmadan Database Oluşturmak 512 512 mezo

LDF Olmadan Database Oluşturmak

Merhaba arkadaşlar
Sabahın köründe karşıma çıkan ilginç bir konuyu sizlerle paylaşmak istiyorum. LDF dosyası olmadan database oluşturabilir miyiz ? Cevabımız evet
Neden böyle birşey isteyelim ki demeyin isteyen istiyor 😀
İşte gerekli scrip 😀

Umarım Yararlı Olur
Bilgiyle Kalın
M.Zeki OSMANCIK

C# Dynamic Nesnesi 350 106 mezo

C# Dynamic Nesnesi

Merhaba arkadaşlar
Bu yazımda C# daki yeni bir keyword’ den bahsetmek istiyorum DYNAMIC.
Dynamic keyword u C# 4.0 ile birlikte 2010 da gelen bir keyword. Bu keyword Dynamic Language Runtime (DLR) yi yönetir DLR dediğimiz olay tıpkı CLR (Common Language Runtime) gibi çalışan bir yapıdır. Dynamic bir nesne Dynamic tipindeki classların yönetiminin nasıl yönetileceğini belirler. Tıpkı CLR de olduğu gibi tamamen runtime da derlenir ve çalışırlar.

Diyelim ki iki farklı class oluşturmak istiyoruz ancak içersinde aynı isimden 2 metot olacak daha sonra söz konusu Dynamic sınıfdan bir instance alıyorsunuz. Dynamic nesne ile aynı isimdeki ancak farklı classlar içersindeki metotları çağırabiliyorsunuz.

Bir de örneğe göz atalım 😀

Örnek

Çıktı da Şöyle oluyor şekil örnek 1 A 😀

output

Database’de bulunan tablo sayısı bulma 750 374 mezo

Database’de bulunan tablo sayısı bulma

Merhaba gençler 🙂
Veritabanındaki tablo sayısı nı öğrenmek için aşağıdaki sorguyu çalıştırabilirsiniz 😉


Umarım yararlı olur
Bilgiyle Kalın
M.Zeki Osmancık

DataTable ‘dan List e Dönüştürme 342 204 mezo

DataTable ‘dan List e Dönüştürme

Merhaba arkadaşlar

Bu yazıda sizlere DataTable ile gelen veriyi List<T> olarak geri döndürmek istersek bu dönüştürmeyi LambdaExpressions /LINQ ile nasıl yapabiliriz ondan bahsetmek istiyorum.

Umarım Yararlı Olur
Bilgiyle Kalın
M.Zeki Osmancık

Command Prompt Telnet Hatası 672 315 mezo

Command Prompt Telnet Hatası

Merhaba arkadaşlar

Bazı durumlarda  telnet kullanmak isteyebilirsiniz ancak Command Prompt ta telnet komutu yazdığınızda şöyle bir hata ile karşılaşabilirsiniz ‘telnet’ is not recognized as an internal or external command,operable program or batch file.  Eğer böyle bir hata ile karşılaşırsanız İlk yapmanız gereken Telnet Client yüklü mü ona bakmanız gerekiyor yüklü değilse yapmanız gereken şey şu  Denetim Masası -> Program Ekle Kaldır -> Windows Özellikleri Ekle  sayfasını açıp Telnet Client özelliğini yüklemeniz yeterli olacaktır. Yüklü ama aynı hatayı alıyorsanız o zaman başka bir çözüm olarak  Command  Prompt ta “Windows dizinine girerek yada Windows / System32 dizinine girerek bu dizin içersinde telnet i çalıştırmayı deneyebilirsiniz.

Untitled picture

Umarım Yararlı Olur

Bilgiyle Kalın

M.Zeki Osmancık

 

 

Windows 8 Güvenli Mod da Nasıl Açılır? 500 277 mezo

Windows 8 Güvenli Mod da Nasıl Açılır?

Merhaba arkadaşlar

Bilgisayarımızı bazen güvenli modda açmak isteyebilirsiniz belki bir virüs belki bir programı kaldırmak için olabilir.  Normalde Windows 7 ve daha öncesinde bilgisayar açılırken F8 tuşuna basarak aşağıdaki resimdeki ekran ile bu işlemi gerçekleştirebilirdik.

SafeModeF8

 

Windows 8 Güvenli Mod e geçince bu iş biraz daha farklı olmuş 🙂 Biraz araştırma ile bulabildim. Windows 8 de Bilgisayarınızı güvenli modda açabilmek için “Gelişmiş Başlatma Seçenekleri” ni Ayarlar bölümünde aşağıdaki resimdeki gibi aramanız ve bulmanız gerekiyor.

guvenli-mod

 

Gelişmiş Başlatma Seçeneklerini açtıktan sonra “Genel” sekmesi altında en altta bulunan gelişmiş başlangıç seçeneğini seçmelisiniz.

guvenli-mod-2

Şimdi yeniden başlat buton bastığınızda bilgisayarınız yeniden başlayacak size bir menü çıkaracak burada sayı veya F tuşlarıyla birini seçmenizi isteyecektir.

4 tuşuyla Güvenli Mod’u,
5 tuşuyla Ağ desteği ile Güvenli Mod’u,
6 tuşuyla ilse Komut İstemi ile Güvenli Mod’u başlatıyoruz

Umarım Yararlı Olur

Bilgiyle Kalın

M.Zeki Osmancık

 

 

 

Service ‘IISADMIN’ (IISADMIN)failed to start Hatasının Giderilmesi 671 389 mezo

Service ‘IISADMIN’ (IISADMIN)failed to start Hatasının Giderilmesi

Merhaba arkadaşlar
Bu yazımda başıma gelen 3 gün beni uğraştıran bir hata ile karşınızdayım 🙂 3 gün uğraşılmayacak bir hata aslında ama yanlış tarafa focus olunca mecburen bu yönde araştıma yapıp sonuca ulaşamadım ancak sonunda buldum 🙂
Herkesin sık kullandığı bir alışveriş sitesinin projesi için görevlendirildim ve bilgisayarıma önce Commerce Server 2007 kurup daha sonra Commerce Server 2009 a yükseltmem gerekiyordu. Commerce Server 2007 kurarken bir uyarı veriyor bu uyarı şöyle : “Service ‘IISADMIN’ (IISADMIN)failed to start”. Verify that you have sufficient privileges to start system services”. Bu hatayı Ignore seçeneği ile geçebiliyoruz. Geçmeyin sakın !!!😀
Eğer bu hatayı Ignore ile geçerseniz Commerce Server 2009 kurulurken Fatal Error hatası alıp bu hata genel bir hata çözüm aradığınızda bir çok alakasız kaynak çıkıyor. İşte bu Fatal Error e odaklandığım için 3 gün uğraştım 🙂
Ancak asıl sorun ISSADMIN hatası bunu çözmemiz gerekiyormus aslında 🙂 Şimdi nasıl çözdüğümü anlatayım.

Commerce Server için IIS kurulması şart bunu Program Ekle Kaldır dan Windows Özelliklerinden ekleyebilirsiniz. Sadece Internet Information Service i işaretleyip devam ederseniz (benim gibi) ISSADMIN hatasını alırsınız 😀 Bu hatayı almamak için IIS kurarken altındaki seçeneklerde yer alan IIS 6 Management Compatibility Pack da işaretli olmalı böylelikle Commerce Server kurulurken çıkan IISADMIN hatasını ve dolayısı ile Commerce Server 2009 da ki Fatal Error u de engellemiş oluyorsunuz 🙂
Umarım Yararlı Olur
Bilgiyle Kalın
M.Zeki OSMANCIK

HttpCookie Nedir ? 279 180 mezo

HttpCookie Nedir ?

Merhaba arkadaşlar
HttpCookie yapısından önce çok temel bilgi olarak Cookie nedir ondan bahsedelim 🙂
Cookie Nedir?
Bir web sayfası sunucusunun sizin bilgisayarınızın hard diskine yerleştirdiği ufak bir text dosyasıdır. Yani, o web sitesinin bir sonraki ziyarette sizi tanıması için geçerli bir bilgidir. Bu text dosyası bir komut dosyası olmadığı gibi, virüs de değildir. Size özel bir tanımlamadır ve sadece bu kodu tanımlayan web sunucusu tarafından okunabilir.Cookie’nin amacı; sizin o siteyi yeniden ziyaret ettiğinizi web sunucuya bildirmekten ibarettir.

HttpCookie Nedir?
Asp.Net ile yaptığımız sitelerimizde Cookie oluşturmak için kullandığımız bir class tır. Cookie nin yönetimini HttpRequest ve HttpResponse class ile gerçekleştirilir.
HttpCookie yi oluşturmak için

HttpCookie MyCookie = new HttpCookie("Cerezim");

Instance alındıktan sonra içersindeki property leride şu şekilde kısaca açıklayabiliriz.
Domain: Cookie nin etki alanını ayarlamak için kullanılır.
Expires: Cookie nin geçerlilik süresini ayarlamak için kullanılır DateTime tipinde değer alır.
HasKeys: Cookie içersinde alt anahtarlar olup olmadığını kontrol etmek için kullanılır.
HttpOnly: Cookie ye client tarafından javascript kodları tarafından ulaşılabilir olmasını sağlayan bir property dir.
Item: HttpCookie.Values özelliği için bir kısayoldur. Bu özellik Active Server Pages (ASP) nin önceki sürümleriyle uyumluluk sağlamak için kullanılır.
Name: Cookie ye bir isim verir veya cookie ismini okuyabilidiğimiz property.
Path: Cookie nin sanal adresini atayıp okuyabildiğimiz property
Secure:SSL uzerinden kullanilacak olan cookie ler ile ilgili guvenlik degerlerinin atandigi property dir.HTTPS uzerinden kullanilabilir
Value:Cookie içersine yerleştirilecek olan değeri atamak için kullanılır.
Values: Cookie içersine birden fazla değer atayabilmek için kullanılır.

Cookie tanımlayabilmek için HttpCookie sınıfından bir örnek alıp şu şekilde kullanabiliriz.

HttpCookie MyCookie = new HttpCookie("Cerezim");
MyCookie = Request.Cookies.Get("Cerezim");
if(MyCookie!=null)
{
Response.Write(MyCookie.Value);
}

Simdilik bu kadar daha sonraki yazilarda ayrintili sekilde nasil cookie tanimlayip kullanabiliriz ornek proje ile destekleyip gosterecegim.
Umarim yararli olur
Bilgiyle Kalin
M.Zeki OSMANCIK

Kararlı Olmak ! 1024 680 mezo

Kararlı Olmak !

Bir işi başarabilmenin en önemli kuralıdır o işi yapabileceğine inanmak, kararlı ve istekli olmak. Zor durumda kaldığında farklı alternatifler üretebilmek, başarısızlık karşısında yılmadan mücadele etmek, hedefe yönelik Success-Kiden gerekli adımlardandır. Bir şeye karar verdiğinizde üretirsiniz.Karar vermek dibi görünmeyen zifiri karanlık kararsızlık çukurundan kurtuluştur.Bir kördüğüm haline gelmiş sarmaldan aniden özgür olmaktır. Ancak öncelikle bir karar verebilmek için özgür irade gücü ve cesaret gereklidir. Karar vermek kişiyi yeni bir yola koyar ve bu yol yeni yükler getirir. Bu kararın arkasında durabilecek güce sahipseniz yola koyulabilirsiniz. Aksi halde arkasında duramayacağınız kararlar yolda size yetişip ezip geçecektir.
İlk önce neye ulaşmak istediğimize, sonra da bu isteğimize nasıl ulaşacağımıza karar vermek zorundayızdır. Bu noktada karar vermenin gücü çok büyüktür. Uygulanırsa etkisi ile yaşamı baştanbaşa değiştirir. Karar verdiği an insan, hayata karşı kendini güçlü ve yenilenmiş hisseder.

Karar vermek çoğunlukla bir çıkmazdan çıkış yolu bulabilmek içindir. Karar alan aldığı kararı yaşamına yansıtırken “Keşke şöyle yapsaydım, şunu da düşünseydim, şuna da ayıp oldu, vs… ” gibi kuşkuya düşme, pişmanlık, duraksama ve kayboluşlardan kendini uzak tutabilme yetisine de sahip olmalıdır.

Karar almak, uygulamaya göre nispeten daha kolaydır. Zira insanoğlu alışkanlıklarından kolay kolay kopmak istemez.

Uygulamaya geçen bir kararda dönüş yoktur. Yol tek şerittir. Kendine saygısını tümden yitirmemesi için bu yola koyulmuştur artık. Denildiği gibi: “Karar vermek, bir şeyleri kaybetmeden gerçekleşemeyen eylemdir.”

“Karar almak”, çoğunlukla bireyin hayatına belli prensip ve kurallar perspektifinden yeni bir bakış açısı ile bakması anlamında kullanılır. “Karar vermek” ise kişinin hayatında çok önemli bir seçim yapmak ve hayatının gidişini değiştirmek zorunda kalması anlamındadır.
Hayat öyle basite alınacak bir oyun değildi. Oyunun kurallarını bilmen ve ona göre oynaman gerekiyordu. Ama çoğu zaman oyunun kurallarını bilmek yetmiyordu. Çok daha önemli olan başka bir şey vardı. Kendini bilmek… Ne istediğini ama gerçekten en çok ne istediğini, neyin seni mutlu edeceğini ve kim olduğunu, neler yapabileceğini bilmek zorundaydın. Seçmek, karar vermek zorundaydın. Ancak o zaman doğru kararlar veriyor ve mutlu bir hayata sahip oluyordun. Ve kararlar birer kibritti. Ya kendini yakıyordun ya da ısıtıyordun…”

Denilir ki: “Yaşam haritalarını izlerken, hedeflerinize ulaşmaya çalışırken, aklımız dümen, duygularımız yakıttır. Akıl ve mantık önderliğinde, vicdanlarını da kullananlar hedeflerine ulaşırlar.” Amaç duyguları köreltmek değil, onları yönetmektir.

Bir sorun, o durumu düzeltmeye hazır oluncaya kadar karşımızda durur. Neyin yanında, neyin karşısında olduğu bilinen gerçek insanlar, karar vermenin gücünü de bilmektedirler. Onlar, en zor durumda yalpalasalar bile yollarına devam ederler. Karar vermenin bu büyük gücünü kullanırlar, asla arada kalmaz ve sorunun bir parçası olmamak için gerektiğinde en acı verici kararları dahi almaktan bir an bile çekinmezler.

Birçok insanın, hayatlarında başarısızlığa uğramaları, akla uygun davranabilme özgürlüğünün ellerinde bulunduğunu görememelerinden, seçmenin gerekliliğinin farkına vardıkları zaman da artık karar vermek için zamanın geçmiş olmasındandır.

Karar vermek zordur,ama bir o kadar da canlandırıcıdır.

Ya yaşamınıza renk katın,

Ya da ömrünüzü keşkelerle geçirip, arada kalın…

Seçim yapmak, omuzlarınıza yüklenen bir yüktür başta…

Sonra sırtınıza yüklediğiniz yerden derinizi yırtıp açan ve sizi uçuran kanatlardır…

Yeniliğe açılan kapıdır…

Yaşadığının farkına varmaktır…

Düşününüz ve…

Karar verecekseniz şimdi verin…

Seçim yapacaksanız şimdi yapın…

Yola koyulacaksanız, dönmemek üzere ilk adımınızı atın…

Karar Vermek İle İlgili Güzel Sözler

“Cesaret insanı zafere, kararsızlık ve korkaklık ise ölüme götürür.” YAVUZ SULTAN SELİM

Akıllı kişiler kararlarını aceleyle değil, düşünüp taşınarak verirler. JEREMY TAYLOR

Başlamadan önce iyi düşün; ama bir kere başlayınca hemen bitirmeye bak. SALLUST

Bilgi insanı kuşkudan, iyilik acı çekmekten, kararlı olmak da korkudan kurtarır. KONFÜÇYÜS

Bir girişimde bulunacaksanız, kararsızlık kapılarını kapatın. NIETZSCHE

Bir insan hakkında verdiği cevaplardan çok, sorduğu sorularla daha iyi karara varırsın.VOLTAIRE

Bir konu hakkında karar vermeden önce başkalarının da öğütlerine kulak vermek gerekir.DALE CARNEGIE

Çok boyutlu olaylarda ani kararlar vermek aptallıktan başka bir şey değildir. MONTAIGNE

Felaket içinde karar verebilmek yarı kurtuluştur. PESTALOZZI

Güneşi sağ elime, ay’ı sol elime verseniz dahi, davamdan vazgeçmem. HZ MUHAMMED (sav)

Güzelliği anlamak için bir kere bakmak yeter ama, bir karara varmak için çok düşünmek gerekir. EMILE ZOLA

Karar verebilen acıyı yener. GOETHE

Kararlar çoğunlukla saatlerimize benzerler, hiç birimizinki birbirine uymaz, ama gene de kendimizinkine güveniriz. POPE

Kararlılık keskin bir bıçağa benzer, keskin ve düzgün keser. Kararsızlık ise kör bir bıçak gibidir, kestiği her şeyi parçalar ve yırtar. JAN ME KEITHEN

Kararsızlık en büyük hastalıktır. GOETHE

Kararsızlık ve gecikme başarısızlığın iki önemli sebebidir. GALILEO

Kararsızlık, esef ve pişmanlıklarımızın biricik sebebidir. DESCARTES

Kendi kendine karar veremeyenin ahlaki sorumluluğu da olmaz. ARISTO

Kızgın olduğum zamanlarda karar vermem. WINSTON CHURCHILL

Kuşku ve kararsızlık, insanın gelişmesini engeller. IGNAZIO SILONE

Küçük hataları fazla dikkate alma, yoksa önemli kararları almakta güçlük çekersin. WILHELM JORDAN

Olaylar sonuçlanmadan kesin bir karara varmak doğru olmaz. DALE CARNEGIE

Uzun düşünmek insana, çok kez fırsat kaçırtır. PUBLILILUS CYRUS

Vaktinden önce alınan kararların sonu yoktur. OSCAR WILDE

Ya başlamamalı, ya bitirmeli… OVIDIUS

Yapmak istediğin şey için düşünerek karar ver, verdiğin kararı da mutlaka yap. BENJAMIN FRANKLIN

C# ve PHP 3DESCrypto 691 618 mezo

C# ve PHP 3DESCrypto

Merhaba arkadaşlar
Bu kez sizlere şifreleme yöntemi olan 3DES(Triple Data Encryption Algorithm diye geçer ancak DES kısaltması Data Encryption Standard dan gelmektedir.) şifreleme yönteminin kodlarını vermek istiyorum belki bu yazıya daha sonra ayrıntılı şekilde bunun ne olduğu ile ilgilide birşeyler ekleyebilirim. 🙂 PHP ve C# için kodları aşağıda sizlerle paylaşıyorum
PHP

function encrypt($string) {
//Key
$key = "xxxxxxxx";

//Encryption
$cipher_alg = MCRYPT_TRIPLEDES;

$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher_alg,MCRYPT_MODE_ECB), MCRYPT_RAND);

$encrypted_string = mcrypt_encrypt($cipher_alg, $key, $string, MCRYPT_MODE_ECB, $iv);
return base64_encode($encrypted_string);
return $encrypted_string;
}

function decrypt($string) {
$string = base64_decode($string);

//key
$key = "xxxxxxxx";

$cipher_alg = MCRYPT_TRIPLEDES;

$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher_alg,MCRYPT_MODE_ECB), MCRYPT_RAND);

$decrypted_string = mcrypt_decrypt($cipher_alg, $key, $string, MCRYPT_MODE_ECB, $iv);
return trim($decrypted_string);
}

C# encryption:

using System;
using System.Security.Cryptography;
using System.Text;

public class Crypto3DES
{
public Crypto3DES()
{

}

private System.Text.Encoding encoding;

public string Key
{
get
{
return "xxxxxxxx";
}
}

public System.Text.Encoding Encoding
{
get
{
if( encoding == null )
{
encoding = System.Text.Encoding.UTF8;
}
return encoding;
}

set
{
encoding = value;
}
}

public string Encrypt3DES( string strString )
{
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();

DES.Key = Encoding.GetBytes( this.Key );
DES.Mode = CipherMode.ECB;
DES.Padding = PaddingMode.Zeros;

ICryptoTransform DESEncrypt = DES.CreateEncryptor();

byte[] Buffer = encoding.GetBytes(strString);

return Convert.ToBase64String(DESEncrypt.TransformFinalBlock(Buffer, 0, Buffer.Length));
}

public string Decrypt3DES( string strString )
{
DESCryptoServiceProvider DES = new DESCryptoServiceProvider ();

DES.Key = Encoding.UTF8.GetBytes( this.Key );
DES.Mode = CipherMode.ECB;
DES.Padding = PaddingMode.Zeros;
ICryptoTransform DESDecrypt = DES.CreateDecryptor();

byte[] Buffer = Convert.FromBase64String(strString);
return UTF8Encoding.UTF8.GetString( DESDecrypt.TransformFinalBlock(Buffer, 0, Buffer.Length) );
}
}

Umarım Yararlı Olur
Bilgiyle Kalın
M.Zeki Osmancık

PHP MyAdmin Import Dosya Boyutu Hatası 320 220 mezo

PHP MyAdmin Import Dosya Boyutu Hatası

Merhaba arkadaşlar
Sizlere biraz önce karşılaştığım bir sorunun çözümünü paylaşmak istiyorum. kendi bilgisayarıma Wamp server kurdum ve var olan bir veritabanının script dosyasını yüklemeye çalıştım ancak bir hata ile karşılaştım.

Aldığım hata :No data was received to import. Either no file name was submitted, or the file size exceeded the maximum size permitted by your PHP configuration. See FAQ 1.16.

Yüklenen dosyanın boyutunun büyük olduğu ile alakalı bir hata. Çözümü ise çok basit php.ini dosyanızı açıyorsunuz ve içersinde upload_max_filesize = 2M yazar 2 yerine 128 yazın ve kaydedip kapattıktan sonra php servislerini yeniden başlatın tekrar denediğiniz de boyutu büyük olan script dosyası başarıyla import edilecektir. 🙂

Umarım faydalı olur.

Bilgiyle Kalın

M.Zeki Osmancık

ASP.Net Türkçe Karakter Sorunu 962 192 mezo

ASP.Net Türkçe Karakter Sorunu

Merhaba arkadaşlar

ASP.Net türkçe karakter sorunu ile ilgili küçük bir bilgi vermek isterim 🙂 Eğer asp.net sayfanızda türkçe karakter sorunu yaşıyorsanız Aşağıdaki kodu “webconfig” sayfanızdaki “<system.web>” tagı altına yapıştırmanız yeterli olacaktır… 😉


 

Bilgiyle Kalın 😉

M.Zeki Osmancık

Türkiye İl, İlçe, Semt, Mahalle, Köy, Posta Kodu Güncel Veritabanı 760 349 mezo

Türkiye İl, İlçe, Semt, Mahalle, Köy, Posta Kodu Güncel Veritabanı

Merhaba Arkadaşlar

Kısa bir süre önce bir projede kullanmak üzere il ilçe semt bilgileri gerekti ve bu bilgileri bulmuşken sizlerlede paylaşayım istedim 🙂

Mysql veritabanın da kullanacaksınız bu linkten ulaşabilirsiniz. Ama biz MSSQL kullanıyoruz ne yapacağız demeyin üzülmeyin gençler. Kendimde MSSql kullandığımdan oturdum uğraştım ve verileri import ettim 😛

Eğer MSSql Server 2008 R2 kullanıyorsanız buradan , MSSql Server 2012 kullanıyorsanız buradan scriptlere ulaşabilirsiniz.

Haydi Kolay Gele

Umarım Yararlı Olur.

Bilgiyle Kalın

M.Zeki Osmancık

.Net için Facebook SDK 400 400 mezo

.Net için Facebook SDK

Facebook için bir masaüstü, mobil, web veya windows 8 projesi geliştirmek isteyenler toplaşın bakalım buraya 🙂
Facebook için .Net SDK si yayınlandı. Nasıl bir uygulamayı facebook ile entegre ederim bu SDK yi nasıl kullanırım diyenler için paylaşıyoruz 🙂
Kolay gelsin…

Facebook SDK yı indirin öğrenin 🙂

http://facebooksdk.net/

Regex ifadelerinizi online olarak test edin 800 533 mezo

Regex ifadelerinizi online olarak test edin

Yazdığın regex ifadeleriniz online olarak test etmek için http://www.regextester.com/ adresini kullanabilirsiniz. “Test on text” bölümüne yazdığınız string eğer “type regex” ile eşleşmiyorsa “result” bölümünde “No match” eşleşiyorsa “macthes (x)” sonucu olacaktır.

Şifre alanları için regex ifadesi 150 150 mezo

Şifre alanları için regex ifadesi

// c# kodu olduğu için \ karakteri \ olarak yazılmıştır, başka programlama dillerinde "\" ifadesini "\" ile değiştirin
^(?=.*[^a-zA-Z])(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[-!$%^&*()_+|~=`{}\[\]:\";'<>?,.\/])\S{8,30}$
// şifrenin en az 8 karakter olmasını 1 küçük, 1 büyük harf, 1 rakam ve 1 sembolden oluşmasını zorunlu tutar.
^(?=.*[^a-zA-Z])(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])\S{8,30}$
//bu ifadede ise sembol zorunluğu yok.
MS SQL içerisindeki büyük miktarda veriler arasında sayfalamayı hızlı bir şekilde yapmak 150 150 mezo

MS SQL içerisindeki büyük miktarda veriler arasında sayfalamayı hızlı bir şekilde yapmak

CREATE PROCEDURE dbo.GetProductsPaged
(
    @startRowIndex int,
    @maximumRows int
)
AS
    SELECT     ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit,
               UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued,
               CategoryName, SupplierName
FROM
   (
       SELECT ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit,
              UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued,
              (SELECT CategoryName
               FROM Categories
               WHERE Categories.CategoryID = Products.CategoryID) AS CategoryName,
              (SELECT CompanyName
               FROM Suppliers
               WHERE Suppliers.SupplierID = Products.SupplierID) AS SupplierName,
              ROW_NUMBER() OVER (ORDER BY ProductName) AS RowRank
        FROM Products
    ) AS ProductsWithRowNumbers
WHERE RowRank > @startRowIndex AND RowRank <= (@startRowIndex + @maximumRows)

MS SQL’de satır numarasını alma 150 150 mezo

MS SQL’de satır numarasını alma

SELECT * FROM (
  SELECT
    ROW_NUMBER() OVER (ORDER BY id ASC) AS rownumber,
    id, ilceAdi
  FROM Ilce
) AS foo
WHERE rownumber = 5

JavaScript Sayaç

JavaScript Sayaç Div içerisinde açılan bir iletişim formunun 2 saniye sonra kaybolması için hazırlanmıştır. jQuery'nin slideUp kapanma efekti kullanılmıştır.

function closeForm(){
  setTimeout('$("#contactForm").slideUp("slow")', 2000);
}

JavaScript Sayaç 150 150 mezo
iPhone MKMap ile Haritada yerimizi buluyoruz :) 365 718 mezo

iPhone MKMap ile Haritada yerimizi buluyoruz :)

Merhaba arkadaşlar

Uzun bir aradan sonra tekrar bir makale yazma fırsatı buldum sonunda. Bu yazımda iPhone programlamada harita kontrolünün kullanımından bahsetmek istiyorum. Çok çok basit manada iphone uygulaması üzerine nasıl harita ekleriz bu haritada nasıl yerimizi işaretleriz konusunu açıklayalım 🙂

İlk önce XCode üzerinde bir proje açıyoruz ve boş formumuzun üzerine MKMapView kontrolü yerleştiriyoruz.

Screen Shot 2013-05-01 at 4.10.05 PM

 

MapView kontrolünün çalışabilmesi için framework eklememiz gerekmekte bu ekleme işleminide şu şekilde yapabiliriz : proje dosyaları üzerinde bulunan Frameworks klasörü altındaki herhangi bir nesnenin üzerine sağ click ile Finder üzerinde gösterdikten sonra açılan pencere üzerinde bulunan klasörlerin içinde MapKit.framework klasörünü bulup olduğu gibi sürükleyip projemiz içersinde bulunan Frameworks klasörü üzerine bırakıyoruz.

Screen Shot 2013-05-01 at 4.13.18 PM

 

ve MapKit.framework projemiz üzerine ekleninde aşağıdaki gibi Frameworks klasörü içersinde bize göz kırpıyorsa tamamdır artık devam edebiliriz.

 

 

Screen Shot 2013-05-01 at 4.13.46 PM

Kod olarak çok fazla birşey yazmayacağız sadece basit tanımlamalar ve basit bir property ataması o kadar.  Tanımlama yapabilmek için .h dosyası içersine aşağıdaki gibi bir tanımlama ve property tanımlaması yapıyoruz ve .m dosyasına geçiyoruz.

Screen Shot 2013-05-01 at 4.33.50 PM

.m dosyası içersindede @syntesize komutu ile bu .m dosyası içinde .h dosyasında tanımladığımız mapview property sini kullanacağımızı söylüyoruz. Uygulama çalıştıktan sonra hemen işlemin gerçekleşeceği alan ViewDidLoad event idir. bu event içersinede showsUserLocation=YES komutu yazdıktan sonra işlemimiz tamamlanıyor.

Screen Shot 2013-05-01 at 4.15.04 PM

 

Artık proje çalıştığında nerde olduğunuzu görebilirsiniz. XCode üzerinde derleme yaptığınızda tam olarak yerinizi göstermeyebilir yada alakasız bir yer gösterebilir ancak cihaz üzerinde çalıştırdığınızda sorun kalmıyor.

Peki bu cihaz üzerinde çalışmıyor nasıl yapacaz derseniz oda başka bir yazıda anlatacağım ayrı bir dert  🙂

Screen Shot 2013-05-01 at 4.29.28 PM

 

Şimdilik bu kadar

Umarım yararlı olur

Bilgiyle Kalın 😉

M.Zeki Osmancık

Samsung Galaxy S4 ’e Özel Oyun Konsolu 400 266 mezo

Samsung Galaxy S4 ’e Özel Oyun Konsolu

Geçtiğimiz günlerde tanıtılan Samsung Galaxy S4 ’e özel oyun kolu ile birlikte geliyor. Firma bu oyun kolu ile mobil oyunculukta bir devrim yaratacak gibi görünüyor
Engadget’ın haberine göre Samsung, Galaxy serisi için bir Gamepadprototipi hazır. Samsung cihazlarına özel olarak tasarlanan bu oyun kolu, ilk bakışta Xbox 360 kontrolünü andırıyor. Üzerinde 2 Analog ve D-Pad bulunuyor. Bluetooth üzerinden Samsung cihazlarla bağlantı kurabilen bu Gamepad iki AAA pil ile çalışıyor.

sammm

Mobil oyunculuğun yaygınlaştığı bu dönemde, Samsung firması Gamepad ile rakiplerinin önüne geçecek gibi gözüküyor.

Microsoft CRM Online Dil Desteklerinin Ayarlanması 703 405 mezo

Microsoft CRM Online Dil Desteklerinin Ayarlanması

CRM de Dil Desteklerinin Ayarlanması

CRM üzerinde kullanılacak olan dillerin ayarlanabilmesi için . CRM de bulunan Ayarlar kısmında ki Yönetim seçeneği üzerindeki Diller linkine tıklandıktan sonra çıkan listede kullanıcıların kullanabilecekleri dillerin işaretlenip kapatılması gerekmektedir. böylelikle birden fazla dil desteği CRM üzerine eklenmiş olur
52bc47048c6014599257494618c492ae

 

Umarım Yararlı Olur

Bilgiyle Kalın

M.Zeki Osmancık

 

Mac OS Print Screen 500 360 mezo

Mac OS Print Screen

Mac de print screen tuşu bulunmuyor bunun yerine bir kaç tuşa aynı anda basıp ekran görüntüsü almanız mümkün. 🙂 İşte o tuşlar :

1.Basit olarak tüm ekranın görüntüsünü alabilmek için :

Apple ⌘ + Shift + 3 tuşlarına aynı anda basıyorsunuz ve masaüstünde resim dosyanızı görüyorsunuz 🙂 Masaüstüne ya resim dosyasını atar yada Picture_ adında bir klasör açıp içersine bu resmi kaydeder.

2. Seçtiğiniz bir alanın görüntüsünü kaydetmek için :

Apple ⌘ + Shift + 4 tuşlarına aynı anda basıyorsunuz mouse ekran görüntüsü almaya hazır olduğunu gösteriyor seçimi yaptıktan sonra masaüstüne seçtiğiniz alanın görüntüsünü kaydediyor

3 . Seçilen pencerenin görüntüsünü kaydedebilmek için :

Apple ⌘ + Shift + 4 tuşlarına aynı anda basıyorsunuz ve mouse işareti  + şeklinde değişiyor.  sonra space tuşuna bsıyorsunuz mouse kamera şeklinde değişiyor istediğiniz pencerenin üzerine bir kez tıklıyorsunuz ve o pencerenin resmini yine masaüstüne kaydediyor.

 

Nasıl çok basit değilmi 🙂

Umarım yararlı olur

Bilgiyle kalın

M.Zeki Osmancık

PHP’ de WCF Servis Çalıştırmak 800 421 mezo

PHP’ de WCF Servis Çalıştırmak

Merhaba arkadaşlar

WCF Servisi yazdık yayınladık. C# tarafında nasıl kullanmamız gerektiği zaten basit olarak servisin üzerindeki örnek kısmında yazıyor. Bu yazıda .Net de yazdığımız bir metodun farklı bir platform olan PHP tarafında nasıl kullanacağımızı kısaca göstermek istiyorum.  Öncelikle kodlara geçmeden önce belirtmeliyim ki server üzerinde SOAPCLIENT kurulu olmalı eğer kurulu olmazsa WCF servisi kullanamazsınız.

WCF Servis tarafında aşağıdaki gibi bir metot yazdım

    public string AddAccount(string yetkiliAd,string yetkiliSoyad,string firmaAdi,string firmaAdresi){

return string.Format(“You entered: {0}”, yetkiliAd+yetkiliSoyad+firmaAdi+firmaAdresi);

}

Şimdi gelelim PHP kodlarına basit olarak kodlar şöyle:

// SOAP client WCF servis e bağlanmamızı sağlayan bir class ve WCF servis üzerindeki metotların çalıştırılmasını sağlar.
$wsdl = ‘http://servisadresi/ServisKlasoru/Service.svc?wsdl’;
$soapClient = new SoapClient($wsdl, array(‘cache_wsdl’ => 0));// Yazılan WCF servis üzerinde AddAccount adında bir metot var ve onun içersine parametreleri gönderiyoruz.
$AccountParameter = new stdClass();
$AccountParameter->yetkiliAd = addslashes($this->ucwords_tr($_POST[Ad]));
$AccountParameter->yetkiliSoyad = addslashes($this->ucwords_tr($_POST[Soyad]));
$AccountParameter->firmaAdi = addslashes($this->ucwords_tr($_POST[FirmaUnvan]));
$AccountParameter->firmaAdres = addslashes($this->ucwords_tr($_POST[FirmaAdres]));
try
{
// ve WCF servis üzerindeki AddAccount metodunu çalıştırım sonucu bir değişkene aktarıyor.
$result = $soapClient->AddAccount($AccountParameter);
}
catch (SoapFault $fault)
{
//echo “Fault code: {$fault->faultcode}” . NEWLINE;
//echo “Fault string: {$fault->faultstring}” . NEWLINE;
if ($soapClient != null)
{
$soapClient = null;
}
exit();
}
$soapClient = null;

//echo ”

\n”;

//print_r($result);

//echo ”

\n”;

//echo “Return value: {$result->AddAccountResult}” . NEWLINE;

Umarım yararlı olmuştur 😉

Bilgiyle Kalın

M.Zeki Osmancık

WCF Service IIS Ayarları 1024 575 mezo

WCF Service IIS Ayarları

Merhaba arkadaşlar

Bir önceki yazıda WCF servisin ne olduğu ile alakalı bilgi vermiştim şimdi ise yazdığımız bir servisin IIS üzerinde nasıl yayınlanacağı üzerinde duralım. Öncelikle yayın yapacağımız server üzerinde IIS yüklü olması gerekmekte. IIS üzerinden bazı ayarlar yapacağız ve dosyalarımızı yerleştirip yayına başlayacağız.

Dosyalar demişken WCF Service projesini yazıp tamamladıktan sonra projeyi Publish etmemiz gerekiyor. Publish işlemi servisi yayına hazırlamak anlamına geliyor ve yapmasıda çok basit sadece projeniz üzerinde sağ click sonra publish seçmeniz yeterli.

Şimdi server üzerinde IIS Yöneticisini açıyoruz.

1

 

Daha sonra kullanacağımız Framework versiyonunda bir Application Pool ekliyoruz

2

 

Bizim servisimiz .Net Framework 4.0 kullandığı için uygulama havuzumuz Framework 4.0 seçip oluşturuyoruz.

3

Bu uygulama havuzu içersinede bir web sitesi ekliyoruz ki yayınlayacağımız servisimizi içersine yerleştirebilelim 🙂
4

 

Bu websitesinin yayınlanacağı fiziksel adresi seçmemiz gerekiyor.

5

6

 

 

7

 

Web sitesini ekledikten sonra ve fiziksel yolunu belirttikten sonra eklediğimiz web sitesine bir Application (uygulama) ekliyoruz.

8

 

Uygulamamız içinde aynı şekilde bir fiziksel yol seçtikten sonra yayına hazırız.

9

 

Artık servisimiz yayına hazır tek yapmamız gereken server in adresini yazmak ve belirttiğimiz servisin klasör adı ve dosya adını yazıp servisimizi görüntülemek 😉

http://serveradres veya ip adresi/ServisKlasoru/Service.svc

Untitled picture

 

Umarım yararlı olur

Bilgiyle Kalın

M.Zeki Osmancık

WCF Service Nedir? 448 274 mezo

WCF Service Nedir?

Merhaba arkadaşlar

WCF Service nedir konusu üzerinde bir kaç basit açıklama yapmak istiyorum. Bilindiği gibi microsoft bugüne kadar dağıtık uygulamalarının (Distrubuted Applications) geliştirilebilmesi için  .Net Remoting, XML Web Servisleri, MSMQ,COM+ gibi sistemleri geliştirmiştir.  WCF Service de temel olarak bu sistemlerin hepsinin yeteneklerine sahip ve tam SOA (Service Oriented Architecture – Servis Yönelimli Mimari) desteü, sağlayan güçlü bir Framework API si olarak açıklanabilir.

WCF iki önemli özellik ile birlikte karşımıza çıkmakta: bunlardan birincisi Microsoft tarafındaki servislerin farklı platformlar tarafından ele alınabilmesidir (Interoperability) . Böylece karmaşık .Net tiplerini özel olarak Java ,Com gibi modelleri destekleyen platformlara dağıtabiliriz. Bu yüzdende Linuz ,Unix gibi sistemler servislerimizin birer tüketicisi olabilirler.

İkinci özellik ise Windows kısmında yapılan dağıtık modeller arasında var olacak olan entegrasyonlarının tek bir çatı altında toplanabilmesidir. Bu özellik dışında WCF Service  , CLR tiplerini birer servis olarak sunabilmemizi ve servisleri birer CLR tipi olarak kullanabilmemizi sağlayan bir mimari sunmaktadır.

WCF Service ‘e aynı makine içinde aynı process te yer alan farklı bir Application Domain üzerinden ,aynı makinede yer alan farklı bir process içindeki farklı Application Domain üzerinden , farklı bir makinedeki process içinde yer alan Application Domain üzerinden ulaşabiliriz. Client’ lar hangi Application Domain üzerinde olursa olsunlar servis ile olan iletişimlerini proxy nesnesi üzerinden sağlamak zorundadırlar.

İngilizce kaynaklarda WCF Service ‘in ABC sinden sıkça bahsedilmektedir. Bu ABC nedir alfabemi diye sorarsanız değil 😀 ABC Addresses Bindings Contracts anlamına gelen ve WCF in çekirdeğinde yer alan önemli kavramlardır.

Addresses : Bulunan her servis benzersiz bir adrese sahip olmalıdır Özellikle bir servis adresi servisin teri taşıma protokolü bilgilerinden oluşmalıdır. Servis yeri derken kastetmeye çalıştığım şeyler aslında : Bilgisayar adı, site adı i network , iletişim portu, pipe queue, URI adları ve kesin bir path adresi   olarak sıralanabilir. Burada kullanılan taşıma protokolleri ise HTTP , TCP, P2P , IPC , MSMQ olarak soralanabilir.

Contracts : Bir servisin ne iş yaptığını bilmek önemlidir. Özellikle client’ ların ihtiyaç duyduğu proxy sınıflarının yazılmasında önemli bir konudur. Bu sebeple WCF Service üzerinde tüm servisler dış ortama bir Contract sunmaktadır. Genel manada 4 tane contract tipi vardır. bunlar

Service Contract : Serviste hangi operasyonların var olduğu ile alakalı sözleşmedir.

Data Contract :Servislerden client ‘lara giden ve client ‘ lardan servise gelen veri tiplerini tanımlayan sözleşmedir. Int String gibi bilinen tipler için bu sözleşmeler Implicit yani bilinçsiz olarak hazırlanır. Ancak karmaşık tiplerde ve kendi oluşturduğumuz tiplerde Explicit olarak tanımlanmaları gerekir. Bu sayede Java vb platformlara kendi tanımladığımız sınıfı o platformların anlayacağı şekilde sunmuş oluyoruz.

 Fault Contract : Servis tarafından hangi hataların fırlatılabileceğini ve bu servisi kullanan client a bu hataların nasıl aktarılacağını tanımlayan sözleşmedir.

Message Contract : Servislerin mesajları ile iletişimini sağlayan sözleşmedir.

Bindings :Bindings temek olarak servisleri ile nasıl iletişim kurulacağını tanımlamak için kullanılırlar. Bir bindings tip  transport type , protocok ve data encoding bilgilerini bildirir. Bu bilgiler aslında servis yönelimli mimari modelde kullanılabilecek olan senaryolar düşünülerek oluşturulurlar bu yüzdende WCF bu önceden bilinen senaryoları kullanabilmek için gerekli bağlayıcı tipleri önceden bildirmiştir bunlar :

 

Binding Tipi KonfigurasyonElementi Taşıma Çeşidi(Transport Type) Veri Çözümlemesi(Data Encoding) PlatformDesteği

(Interoperability)

BasicHttpBinding <basicHttpBinding> HTTP / HTTPS Text Var
NetTcpBinding <netTcpBinding> TCP Binary Yok
NetPeerTcpBinding <netPeerTcpBinding> P2P Binary Yok
NetNamedPipeBinding <netNamedPipeBinding> IPC Binary Yok
WSHttpBinding <wsHttpBinding> HTTP/HTTPS Text/MTOM Var
WSFederationBinding <wsFederationHttpBinding> HTTP/HTTPS Text/MTOM Var
NetMsmqBinding <netMsmqBinding> MSMQ Binary Yok
MsmqIntegrationBinding <msmqIntegrationBinding> MSMQ Binary Var
WSDualHttpBinding <wsDualHttpBinding> HTTP Text/MTOM Var

Buradaki tiplerden hangisini seçeceğimiz, geliştireceğimiz SOA (Service Oriented Architecture) modelindeki ihtiyaçlarımız doğrultusunda belirlenebilirler.

Şimdi isterseniz bir WCF Service projesi açarak inceleyelim.

WCF Service projesi açtığımızda bizi karşılayan önemli 3 dosya vardır bunlar IService.cs ,Service.cs ,web.config dosyalarıdır bu dosyalarda neler var bir bakalım.

IService.cs

Bu interface servis içersinde kullanılacak olan metotları property leri ve bunların contractlarının belirtildiği dosyadır 😉

using System;using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.ServiceModel.Web;

using System.Text;

namespace WcfService1

{

// NOTE: You can use the “Rename” command on the “Refactor” menu to change the interface name “IService1” in both code and config file together.

[ServiceContract]

public interface IService1

{

[OperationContract]

string GetData(int value);

[OperationContract]

CompositeType GetDataUsingDataContract(CompositeType composite);

// TODO: Add your service operations here

}

// Use a data contract as illustrated in the sample below to add composite types to service operations.

[DataContract]

public class CompositeType

{

bool boolValue = true;

string stringValue = “Hello “;

[DataMember]

public bool BoolValue

{

get { return boolValue; }

set { boolValue = value; }

}

[DataMember]

public string StringValue

{

get { return stringValue; }

set { stringValue = value; }

}

}

}

 

 

Service.cs

Service.cs ise işlemlerimizin IService.cs dosyasındaki gibi tanımlanmış olan metotlar içersine yazacağımız dosyamızdır.

using System;using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.ServiceModel.Web;

using System.Text;

namespace WcfService1

{

// NOTE: You can use the “Rename” command on the “Refactor” menu to change the class name “Service1” in code, svc and config file together.

// NOTE: In order to launch WCF Test Client for testing this service, please select Service1.svc or Service1.svc.cs at the Solution Explorer and start debugging.

public class Service1 : IService1

{

public string GetData(int value)

{

return string.Format(“You entered: {0}”, value);

}

public CompositeType GetDataUsingDataContract(CompositeType composite)

{

if (composite == null)

{

throw new ArgumentNullException(“composite”);

}

if (composite.BoolValue)

{

composite.StringValue += “Suffix”;

}

return composite;

}

}

}

 

Web.config

<?xml version=”1.0″?><configuration>

<system.web>

<compilation debug=”true” targetFramework=”4.0″ />

</system.web>

<system.serviceModel>

<behaviors>

<serviceBehaviors>

<behavior>

<!– To avoid disclosing metadata information, set the value below to false before deployment –>

<serviceMetadata httpGetEnabled=”true”/>

<!– To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information –>

<serviceDebug includeExceptionDetailInFaults=”false”/>

</behavior>

</serviceBehaviors>

</behaviors>

<serviceHostingEnvironment multipleSiteBindingsEnabled=”true” />

</system.serviceModel>

<system.webServer>

<modules runAllManagedModulesForAllRequests=”true”/>

<!–

To browse web app root directory during debugging, set the value below to true.

Set to false before deployment to avoid disclosing web app folder information.

–>

<directoryBrowse enabled=”true”/>

</system.webServer>

</configuration>

 

Umarım yararlı olur.

Bilgiyle Kalın

M.Zeki Osmancık

 

Samsung Galaxy S2 Android 4.1.2 Jelly Bean Kurulumu 500 343 mezo

Samsung Galaxy S2 Android 4.1.2 Jelly Bean Kurulumu

Merhaba arkadaşlar

Samsung Galaxy S2 cihazınıza Android 4.1.2 Jelly Bean işletim sistemini nasıl kurarsınız bunu adım adım anlatmak istiyorum.

Öncelikle en baştan söylemek isterim ki bu yükleme işlemi yarım kalırsa telefonunuz tekrardan açılmayabilir. Herhangi bir sorunda ben ve www.mzekiosmancik.com sorumlu değildir. tamamen kendi iradenizle kuruluma başlamalısınız.
Özellikle orjinal yazılım olduğu için telefonunuzu garantiden çıkarmaz onu söylemekte fayda var.Yükleme işlemini yapmanız için herhangi bir root veya kernel yüklemesine ihtiyacınız yok.

Şimdi adım adım kurulumu yapalım.

1) Odin dosyasını buradan indirip dosyayı zipten çıkarın.

2) I9100XXLSJ_I9100OXXLS1_OXX dosyasını buradan indirip dosyayı zipten çıkarın.
3) Odin’i çalıştırın
4) Samsung Galaxy S2 cihazınızı “Download Modu”na getirmeniz gerekiyor bunun için Açma Kapama + Home (Menü) + Ses kısma tuşlarına aynı anda uzunca basın
5) Galaxy S2 cihazınızı USB kablosu ile bilgisayarınıza bağlayın
6) Odin cihazınızı tanımlayana kadar bekleyin. Odin ekranındaki değişikliği göreceksiniz.
7) Sıra geliyor Odin’ e girilecek olan içeriği siteme tanıtmaya. Sırasıyla PDA, PHONE ve CSC başlıklarına ilgili dosyaları seçiyorsunuz.

PDA =  CODE_I9100XXLSJ.tar
PHONE =  MODEM_I9100XXLS6.tar
CSC =  CSC_HOME_OXX_I9100OXXLS1.tar

Resimde görülen ekranı elde ettiyseniz yüklemeye hazırsınız demektir 😀 hadi başlayalım….
galaxys2

9) Start tuşuna basın
10) Odin ekranı üzerinde PASS yazısını gördüğümüzde artık jelly bean kullanıma hazır demektir.
11) Tüm işlemler tamamlandıktan sonra Samsung Galaxy S2’nin yükleme işlemlerini tamamlamasını beklememiz gerekiyor biraz sabırlı olmalıyız çünkü bu işlem yaklaşık 5 dakika sürebilir.

Daha sonra Samsung Galaxy S2 telefonunuzda Jelly Bean kolaylığını yaşayabilirsiniz.

Kolay Gelsin 🙂

Bilgiyle Kalın

M.Zeki Osmancık

 

Iphone Programming – AlertView (MessageBox) 385 717 mezo

Iphone Programming – AlertView (MessageBox)

Iphone Programming – AlertView

Merhaba arkadaşlar

IOS programlama konusundada bazı küçük bilgiler vermek isterim sizlere. Basit örnek ile başlamak en doğrusu dye düşündüm ve sizlere genel adıyla MessageBox olarak geçen yapı olan AlertView ile Merhaba dünya yazdırarak IOS programlama dünyasına giriş yapmanızı sağlamak isterim 🙂

Öncelikle Xcode üzerinde yeni bir proje oluşturuyoruz.

6e794d81fe89343045753f0b44e06317

 

4666c6d2cf74864798b9eda0eb2604fd

 

Projemizi açtıktan sonra verdiğimiz isimde .xib  .h .m dosyaları bizleri karşılayacak. Bu dosyalar ne anlama geliyor peki ? xib bizim uygulamamızın tasarımının bulunduğu gösterildiği dosyadır,  .h dosyası temel değişken control event ve metotların tanımlanması gereken dosyadır.  .m dosyasıda asıl iş yapan dosyadır m dosyasında h dosyası içersine yaptığıız tanımlamaları yapabilir event leri kullanabiliriz.

iphone programming alertview 3

Önce tasarım dosyası olan xib dosyası üzerine bir button kontrolü atıp daha sonra h dosyasına tanımlamamızı yaptıktan sonra artık kod yazmaya hazırız.  m dosyasını açıp AlertView kodlarımızı yazmaya başlayabiliriz.

iphone programming alertview 1

Artık IOS dünyasına merhaba deme zamanı geldi 😀 projemizi çalıştırıp Iphone Simulator ü çalıştırıp bakıyoruz ne yapmışız acaba diye 😀

iphone programming alertview 1

 

Umarım yararlı olur

Bilgi sizlerle olsun 😉

M.Zeki Osmancık

Galaxy Note N7000 Android 4.1.2 Jelly Bean Kurulumu 600 390 mezo

Galaxy Note N7000 Android 4.1.2 Jelly Bean Kurulumu

Android 4.1.2 Jelly Bean

Merhaba arkadaşlar
Kendimde bir Galaxy Note kullanıcısı olduğumdan yaptığım değişiklikleri veya güncellemeleri sizlerle paylaşmak istedim. Bilindiği gibi Android 4.1.2 Jelly Bean piyasaya çıkan bazı telefonlarla birlikte gelmeye başladı. Galaxy Note 2 bunlardan bir tanesi. Galaxy Note kullanıcısı olarak Note 2 deki işletim sistemi ile kullanılabilirliği arttıracağımızdan şüphem yok.
Şimdi sizlere kendi telefonuma yükleyip çok çok memnun kaldığım Jelly Bean işletim sistemini nasıl telefonunuza kurarsınız bunu adım adım anlatmak istiyorum.
Öncelikle en baştan söylemek isterim ki bu yükleme işlemi yarım kalırsa telefonunuz tekrardan açılmayabilir. Herhangi bir sorunda ben ve www.mzekiosmancik.com sorumlu değildir. tamamen kendi iradenizle kuruluma başlamalısınız.
Özellikle orjinal yazılım olduğu için telefonunuzu garantiden çıkarmaz onu söylemekte fayda var.Yükleme işlemini yapmanız için herhangi bir root veya kernel yüklemesine ihtiyacınız yok.

O zaman hadi başlayalım ve Note N7000 telefonumuza JellyBean kuralım 🙂

1- İlk işlemimiz 1076 MB’lık N7000XXLSA ROM’u buradan indiriyorsunuz.
2- Birinci adımdaki zip dosyasının içindeki 3 dosyayı herhangi bir klasöre çıkartıyoruz.
3- Buradan  ODIN adlı programı indirmeniz gerekiyor.ODIN bizim telefona ROM yüklemek için kullanacağımız programımız.
4- Telefonunuzu kapatın.
5- Telefonu USB kablosuyla bilgisayara bağlayın.
6- Telefonunuzu Dowloadn moduna almanız gerekiyor bunun için Home + Güç Butonu + Ses Kısma Tuşuna basılı tutarak telefonu açın
7- Telefon Download modunu açacak ve size iki seçenek çıkacak. Continue deyip devam edin.
8- Bilgisayardan indirdiğniz ODIN programını zip ten herhangi bir klasöre çıkartıp, çalıştırın.
9- Telefon bağlı olduğu için yukarıda 1. slot üzerinde bulundu işareti çıkacak ve aşağıdaki log penceresinde ADDED mesajını verecek. Daha sonra ODIN programında indirdiğimiz dosyaları tek tek seçmeniz gerek.
10- PDA butonuna basıp CODE_N7000XXLSA_549786_REV02_user_low_ship.tar.md5 adlı dosyayı seçiyoruz.
11- Phone butonuna basıp MODEM_N7000XXLSA_REV_05_CL1222228.tar.md5 adlı dosyayı seçiyoruz.
12- CSC adlı butona basıp CSC_OXA_N7000OXALSA_549786_REV02_user_low_ship.tar.md5 adlı dosyayı seçiyoruz.
13- Start Butonuna basarak işlemi başlatacaksınız.
Eğer program yanıt vermiyor hatası verirse hiç bir müdahale yapmayın kendi kendine düzelecektir.

NOT: Bu yüklemeden sonra SDKart  hariç tüm dosyalarınız silinecektir! Tekrar belirtiyorum telefonunuza bu yüklemeden dolayı gelebilecek bir sorundan ben sorumlu değilim…

Umarım Yararlı olur
Bilgiyle Kalın
M.Zeki OSMANCIK

E-Book Gallery for Microsoft Technologies 100 100 mezo

E-Book Gallery for Microsoft Technologies

If you want to learn about Microsoft technologies you can use  E-Book Gallery for Microsoft Technologies 🙂

Click Here…

I hope that is helpful

May the knowledge be with you

M.Zeki Osmancık

Linq To SQL _ Insert Update Delete 570 571 mezo

Linq To SQL _ Insert Update Delete

Merhaba arkadaşlar

Bir önce ki makalede sizlere LinqToSql ile nasıl Select sorguları çalıştırabileceğiniz ile ilgili bazı bilgiler vermiştim. Bu sefer ise Insert Update ve Delete işlemleri ile ilgili bazı bilgiler vermek istiyorum. Projemiz içersine dbml dosyasını eklediğimizi varsayarak devam etmek istiyorum. Daha önceki örnekteki form tasarımına ek olarak sadece 3 Button 2 Textbox ve Label nesnelerini ekleyip bu tasarım üzerinden devam edeceğim.

Insert

Insert işlemini gerçekleştirebilmek için Kaydet butonumuzun Click olayı içersine sadece şu kodları yazmamız yeterli olacaktır.

NorthwindDataContext db = new NorthwindDataContext();
Category eklenecek = new Category();
eklenecek.CategoryName = TextBox1.Text;
eklenecek.Description = TextBox2.Text;
db.Categories.InsertOnSubmit(eklenecek);
db.SubmitChanges();
Doldur();

Bu işlemde bir dataContext örneği oluşturduktan sonra Northwind üzerine insert işlemi için gerekli olan alanları belirttiğimiz Category tipindeki nesneyi doldurup bu nesneyi tüm bilgileri ile birlikte kaydetmesini söylüyoruz.

Güncelleme ve silme işlemlerinden önce ufak bir noktaya değinmek sanırım yerinde olacaktır. SQL sorgularında yaptığımız gibi bizim burada mutlaka bir ID vermemiz gerekiyor yani güncellemek istediğimiz verinin kesin adresini yolunu belirtmeliyiz. Biliyorsunuz ki SQL kodları ile Update veya Delete komutları yazdığınızda “Where” ile ID sini belirtmezseniz tüm kayıtlar için güncelleme veya silme işlemini gerçekleştirir. Bu yüzden önce nasıl ID belirtiriz ona bakalım.  ID yazan yere 3 5 yazmayacağız tabi ki. DataGridView üzerinden bir veri seçip onu yerleştirdiğimiz Textbox ve Label lar üzerine yazdırdıktan sonra işlemlerimize devam edeceğiz.

Kayıt Seçme İşlemi

Bunun için DataGridView üzerine listelediğimiz kayıtlardan herhangi bir tanesine çift tıkladığımızda işin gerçekleşmesi için CellContentDoubleClick olayı işimizi görebilir ve içersine yazmamız gereken kodlar ise şunlar:

Bu adımdan sonra artık listelenen kayıtlar arasından birine çift tıkladığımızda tüm bilgileri text ve label nesnelerine yazılacak bizde güncelleme veya silme yaparken bu bilgilerden yararlanabiliriz.

NorthwindDataContext db = new NorthwindDataContext();
Category secilecek = db.Categories.FirstOrDefault(x => x.CategoryID == 
Convert.ToInt32(dataGridView1.CurrentRow.Cells[0].Value.ToString()));
lblID.Text = secilecek.CategoryID;
txtName.Text = secilecek.CategoryName;
txtDesc.Text = secilecek.Description;

Update

Güncelle butonumuzun Click olayına ise şu kodları eklememiz yeterli :

NorthwindDataContext db = new NorthwindDataContext();
Category guncellenen = db.Categories.FirstOrDefault(x=>x.CategoryID ==Convert.ToInt32(lblID.Text));
guncellenen.CategoryName = txtName.Text;
guncellenen.Description = txtDesc.Text;
db.SubmitChanges();
Doldur();

Burada daha önce seçip bir label üzerine yazdırdığımız ID yi kullanarak TextBox lar üzerindeki güncel verileri alıp update işlemini gerçekleştiriyoruz.

Aynı şekilde delete işlemi içinde yazmamız gereken kodlar çok basit şöyle ki :

NorthwindDataContext db = new NorthwindDataContext();
Category silinen = db.Categories.FirstOrDefault(x => x.CategoryID == int.Parse(lblID.Text));
db.Categories.DeleteOnSubmit(silinen);
db.SubmitChanges();
Doldur();

Birde burada her işlemden sonra kullandığımız datagridview içersine bilgileri dolduran Doldur metodu var onuda sizlerle paylaşayım.

db = new NorthwindDataContext();
var sonuc = from x in db.Categories
select new
{
x.CategoryID,
x.CategoryName,
x.Description
};
dataGridView1.DataSource = sonuc;

Bu kodları butonlarımızın Click olaylarına yazdıktan sonra herhangi bir hataya karşı önlem almadığımız için işlem sıramız şöyle olmalı öncelikle form açılacak ve kayıtlarımız sıralanacak , ardından bir kayıt eklemek için textboxlar doldurularak Kaydet butonuna basılacak ve Doldur metodu ile kayıtlar yeniden datagridview üzerinde görüntülenecek ardından bir kayda çift tıklayarak bilgilerini text ve label üzerine yazdıracağız ve Güncelle butonu ile güncelleme ve Sil butonu ile seçilen kaydın silinme işlemlerini gerçekleştireceğiz.

Umarım yararlı olur

Bilgiyle Kalın

M.Zeki Osmancık

 

LinqToSQL _ Select 992 608 mezo

LinqToSQL _ Select

Merhaba arkadaşlar bu yazımızda sizlere LinqToSQL nesnesini en basit şekilde nasıl kullanırız bunu göstermek istiyorum. Öncelikle LinqToSQL nesnesini kullanabilmek için ilk yapmamız gereken şey projemiz içersine bu nesneyi eklemektir.

Bu nesneyi eklediğimizde ve Server Explorer üzerinde ekliyeceğimiz bir veritabanı varsa buradan tabloları sürükleyip bıraktığımızda kendisi otomatik olarak bu tablolar ile alakalı bazı class ları oluşturur bize sadece kullanmak kalır 😉

Bu işlemi tamamladıktan sonra geldi sıra kod yazma işlemine acaba bu LinqToSQL den nasıl veri çekip form üzerindeki nesnelerde gösterebiliriz.

Select sorgusu nasıl yapılır ?

Select işlemini farklı şekillerde yapabilirsiniz bunun bir kaç farklı yolu mevcut. Hepsinde aynı sonucu alırız yani “SELECT * FROM CATEGORIES ” sorgusunun sonucunu alırız 😉

NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.Categoriesselect x;dataGridView1.DataSource = sonuc;

 

NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.GetTable<Category>()select x;dataGridView1.DataSource = sonuc;

 

NorthwindDataContext db = new NorthwindDataContext();dataGridView1.DataSource =  db.GetTable<Category>();

Select sorgusuna Where kriteri ekleme işlemi ?

Select sorgusune Where kriterini eklemek için yani “SELECT * FROM CATEGORIES WHERE CATEGORYID = 1” sorgusunun LinqToSQL de yazılması işlemide şu şekillerde olabilir.

NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.Categorieswhere x.CategoryID ==1select x;dataGridView1.DataSource = sonuc;

 

NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.GetTable<Category>()where x.CategoryName.StartsWith(“B”)select x;dataGridView1.DataSource = sonuc;

Gelen sorguyu listeleme işlemi yani Order By anahtar kelimesinin yaptığı işi nasıl yapacağız şimdi kısa bir kodla bunu görelim 😉

       NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.GetTable<Category>()where x.CategoryName.StartsWith(“B”)orderby x.CategoryID ascendingselect x;dataGridView1.DataSource = sonuc;

 

       NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.Categorieswhere x.CategoryName.StartsWith(“B”)orderby x.CategoryID descendingselect x;dataGridView1.DataSource = sonuc;

 

Bu kodlar sadece select için kullanabileceğimiz basit kodlar. Bir sonraki yazıda Inner Join, Left, Right Join gibi yapıların nasıl kullanılabileceğine bakacağız.

Umarım Yararlı Olur

Bilgiyle Kalın.

M.Zeki Osmancık

Windows 8 Metro App _ ListView 955 577 mezo

Windows 8 Metro App _ ListView

Merhaba arkadaşlar

Metro uygulamalardaki data nesnelerinden biri olan ListView nesnesini kısa ve basitçe tanıtmak istiyorum. ListView basit bir listbox gibi çalışır. İçersine List veya DataTable tipinde nesneler verebilmek mümkün. Çok çok basit bir örnek ile bu nesnenin nasıl çalıştığına dair bir örnek yaparak bakalım… Öncelikle formumunuzun üzerine bir ListView nesnesi atarak özelliklerini belirliyoruz. Formun üzerindeki görünümü.


 XAML kodunda ListView görünümü.

 Formumuz üzerine bir listview ekledikten sonra içersindeki elemanların nasıl görüneceği ile alakalı bir  işlem yapabiliriz dümdüz bırakıp içersinde default olarak bir nesne görüntülenmesini sağlayabiliriz. Şimdi çok basit olarak string tipinde bir liste doldurup listview in ItemSource özeliği ile bu listview i nasıl doldurabileceğimizi görelim.

Öncelikle bir liste dolduralım.

List<string> liste = new List<string>();liste.Add(“Deneme 1 “);liste.Add(“Deneme 2 “);liste.Add(“Deneme 3 “);liste.Add(“Deneme 4 “);

Ardından sadece tek bir satır kod ile yanı ListView in ItemsSource özelliğine atama yaparak nasıl bir görüntü elde ediyoruz görelim .

lstListe.ItemsSource = liste;

Bu atamayı yaptıktan sonra sıra geldi projeyi çalıştırmaya bakalım nasıl bir görüntü elde ediyoruz.


En basit manada ListView nesnesinin kullanımı  bu şekilde oluyor.

Umarım yararlı olur….

Bilgiyle Kalın… 😉

M.Zeki Osmancık

Merhaba Windows 8 Metro Style Apps 1024 652 mezo

Merhaba Windows 8 Metro Style Apps

Merhaba arkadaşlar

Bu yazımda sizlere beklenen işletim sistemi Windows 8 ile birlikte gelen ve kullanması çok keyifli olan Metro Application ile alakalı bir başlangıç yazısı sunacağım.

Bilindiği gibi  Windows  8 daha çok tablet pc ler için ideal bir işletim sistemi olarak  tasarlandığından  dokunmatik ekrana uygun olan ve tam ekranı kaplaya uygulamalar yani Metro Style uygulamalar geliştirilmeye başlandı.

.Net 4.5 ile birlikte gelen Metro Style uygulamalar gerçektende kullanımı kolay görseli başarılı uygulamalar olduğundan ileride Windows tabletlerde ve mobil cihazlarda yaygınlaştığında kullanım kolaylığı nedeniyle tercihleri kendi üzerine çekebilir.

Metro Style Uygulamalar tam ekran çalışan , çalışılan cihaza ve dokunmatik ihtiyaçlarına göre ayarlanabilen uygulamalar olarak tanımlanabilir.

Metro Style Uygulamalar sadece anlattıklarımız kadarmı peki derseniz cevabımız hayır olacaktır,çünkü metro style uygulamalar arka tarafta suspend modunda çalışırlar ve böylelikle pil ve performansı etkilememiş olurlar aynı zamanda 3 şekilde çalışabilme imkanlarıda mevcut Full Screen ,Snap Up ve Filled ‘ dır…

Şimdi sizlere Visual Studio 2012 de .Net Framework ile birlikte Metro Style bir uygulamaya nasıl merhaba deriz bir bakalım.

Öncelikle proje açarken karşımıza Windows Metro Style  adında bir proje grubu geliyor ve bu grup içersinde Metro Style bir uygulama geliştirebilmek için gerekli olan nesneler mevcut.

Dilerseniz boş bir sayfa dilerseniz hazır referans olarak kullanılabilecek küçük hazır projelerde eklenmiş açıp kullanmaya başlayabileceğimiz projeler içersine .

Blank App projesi açıldığında karşımıza gelecek olan boş siyah zeminli bir sayfa ve alt kısımda XAML kodları olacaktır. Bu sayfa tıpkı Windows Forms uygulamalarındaki Form gibi tek farklı XAML kodları ile dizayn edilmesi.

Yeni bir proje açtım ve üzerine Windows Forms uygulamalarında aşina olduğumuz Label kontrolünün XAML versiyonu olan TextBlock kontrolünü sayfanın ortasına bıraktım. Properties penceresinden text ve font özelliklerini ayarlayarak ilk uygulamamın nasıl görüneceği ile ilgili bir fikir sahibi olabileceğim artık. Eğer Windows 8 kullanmaya başlamışsanız bu projeyi kendi makinanız üzerinde rahatça çalıştırabilirsiniz. “Ya Windows 7 kullanıyorsak?” diye sormayın denemedim 😀 Ondada muhtemelen simulatoru kullanıyorsunuz…

Uygulamayı çalıştıracak olan Run butonuna geldiğimizde burada Local Machine, Simulator adında seçenekler var bunlardan biri tıpkı Windows Phone 7 uygulamalarında olduğu gibi bir tablet simulator u açar ve uygulamalarımızı orada çalıştırır. Bu simulator aşağıdaki resim gibi bir şey 🙂

Ardından simulator çalıştığına göre benim uygulamamıda gösterecektir birde ona bakalım nasıl bir şey olmuş benim sayfanın göbeğine yerleştirdiğim TextBlock.

Windows 8 Metro App uygulamasına ilk adımı atmış bulunuyoruz hayırlı olsun.

Bu konuyla alakalı daha pek çok makale çok yakında….

Bilgiyle Kalın…

M.Zeki Osmancık

 

 

Sınırsız Ağaç Yapısı ve Treeview Kullanımı 563 595 mezo

Sınırsız Ağaç Yapısı ve Treeview Kullanımı

Merhaba arkadaşlar

Bu yazımda çokça bahsedilen çokça kullanılacak olan bir kontrol yapısı ve bunun database den gelen verilerle nasıl çalıştığını göstermek isterim sizlere…

Bahsettiğimiz kontrolümüz Treeview denilen bir nesne bu nesne bizlere ağaç yapısı bulunan bilgileri rahatlıkla ve tek ekranda görmemizde bizlere kolaylık sağlayan bir kontrol peki ama nasıl bu kontrole birşeyler ekler kullanılabilir hale getirebiliriz…

Öncelikle bir DB ye ve tabloya ihtiyacım var sırası gelmişken birde SQL tablosunda sınırsız ağaç yapısından bahsetmeden olmaz heralde.  Şekildeki gibi bir veritabanı oluşturdum…

 

Buradaki mantık aslında basit eğer bir kayıt root kayıtsa yani kök kayıtsa o zaman AltKategoriID si NULL olmalıdır. Eğer girdiğimiz kategori başka bir kategori altında duruyorsa o halde hangi kategori üst ise AltKategoriID sine o kaydın ID değerini girmeliyiz. Zaten resimdeki birbirine bağlı yapıda bunu temsil eder. Birde girdiğimiz verileri inceleyin bakalım nasıl birşey varmış 😀

Burada Elektronik root yani ana kategori Bilgisayar onun altında bulunduğu için Bilgisayar kaydının AltKategoriID si Elektronik kaydının ID sine eşit Bilgisayarın altında olanlarda Bilgisayar kaydının ID sine sahip olacaktır böylelikle alt alta uzayıp giden sınırsız bir ağaç yapısına sahip olabiliriz.

Peki tablomuz tamam verilerimizide girdik e hani Treeview  derseniz onuda şöyle özetleyelim

Yeni bir Windows formuma Treeview ve button nesnemi yerleştirdim

Ardından button nesnesinin Click olayına gelerek dedim ki  :

DataRelation baglanti;private void btnListele_Click(object sender, EventArgs e){SqlConnection cnn = new SqlConnection(“Data Source = .; Initial Catalog = Deneme; User = sa; Password = 1234567?;”);SqlDataAdapter adp = new SqlDataAdapter(“Select * From Kategoriler”,cnn);DataSet ds = new DataSet();

adp.Fill(ds,”Kategoriler”);

 

baglanti = new DataRelation(“baglan”,ds.Tables[“Kategoriler”].Columns[“KategoriID”],

ds.Tables[“Kategoriler”].Columns[“AltKategoriID”]);

 

ds.Relations.Add(baglanti);

 

foreach (DataRow dr in ds.Tables[“Kategoriler”].Rows)

{

if (dr[“AltKategoriID”] == DBNull.Value)

{

TreeNode root = new TreeNode(dr[“KategoriAdi”].ToString());

root.Tag = dr[“KategoriID”];

tvAgac.Nodes.Add(root);

AltKategorileriGetir(dr,root);

}

}

tvAgac.ExpandAll();

}

 


Kodlara bakacak olursak klasik bir ADO.net ile verilerimi alıp bir DATASET e eklemişim biliyorsunuzki DATASET nesnesi içine birden

fazla DATATABLE nesnesi barındırabilen bir nesne yani sanal veritabanı gibide düşünebiliriz aslında. Peki database de bağlantılar olurda bunda olmazmı ? Olmamı tabikide olur bu bağlantıyıda DATARELATION nesnesi sağlar işte tam burada bende verilerimi çektikten sonra içindeki hangi veri ile hangi verinin eşleşeceği yani hangisinin ana ID hangisinin ona bağlı olan Altkategori olduğunu belirtip bağlantımı tamamladım. Ardından bir foreach ile Dataset içersine attığım Datatable içindeki satırları tek tek almaya başladım ve bu foreach içersinde sadece AltKategorisi NULL olanları aldım yani Root olan kök olan kayıtları aldım ve Treeview nesneme ekledim.

Peki bunun altında bişi yokmu ? Altındakini hatta onun altındaki kayıtları nasıl alacağız derseniz ondada bir metotun yardımını isteyip o metodu kendi içersinde çağırarak işimizi çözeceğiz…

 

private void AltKategorileriGetir(DataRow dr,TreeNode pNode){foreach(DataRow row in dr.GetChildRows(baglanti)){TreeNode childNode = new TreeNode(row[“KategoriAdi”].ToString());childNode.Tag = row[“KategoriID”];pNode.Nodes.Add(childNode);

AltKategorileriGetir(row,childNode);

}

}

 

Bu metodu çalıştırırkende biraz once kontrol ettiğimiz root kaydı ve oluşturulan TreeNode nesnesini parametre olarak yolladıktan sonra oluşturduğumuz bağlantı nesnesi ile Altkategorideki değerleri kontrol ediyoruz ve varsa yine TreeNode oluşturup mevcut Node altına ekliyoruz. Vee sonra kategori ve altındaki elemanları tek tek karşıma geliyor

Umarım yararlı olur

Görüşmek Üzere

M.Zeki Osmancık

 

Eclipse Android SDK Kurulumu 963 886 mezo

Eclipse Android SDK Kurulumu

Merhaba arkadaşlar

Bu yazımda sizlere Android programları geliştirebilmek için kullanılan bir IDE olan Eclipse ve Android SDK nin nasıl kurulduğu ve nasıl Android projeleri açtığımızı HelloWord uygulaması ile birlikte anlatmak istiyorum. Önce kurulum

Kurulum için öncelikle bilgisayarımızda Java JDK kurulu olması lazım eğer kurulu değilse buradan indirebilirsiniz.

Java JDK http://www.oracle.com/technetwork/java/javase/downloads/java-se-jdk-7-download-432154.html

Ardından IDE ye sıra geliyor zira eclips programını JDK olmadan kurarsanız hata ile karşılaşıyorsunuz.

Eclipse – http://www.eclipse.org/downloads/

Eclips programınıda indirip kurduktan sonra sıra geldi Android için gerekli tool ve classların bulunduğu Android SDK ya. Onuda indirip bilgisayarımıza kurduktan sonra

Android SDK – http://developer.android.com/sdk/index.html

Şimdi Eclipsi kullanarak normal Java uygulamaları geliştirebiliriz ama biz Android istiyoruz o kadar kurulum yaptık nerde bunlar derseniz Eclips üzerinde Android projeleri yapabilmek için biraz daha tırmalamak lazım bu kadar yeterli değil.

Şimdi Eclipse üzerine kurduğumuz Android SDK yi entegre edebilmek için Help menüsünden Install New Software seçeneğini seçiyoruz.

Daha sonra karşımıza çıkacak olan pencerede ADD butonuna bastığımızda bizi Add Repository adında küçük şirin bir pencere karşılıyor.

Buraya ne yazacaz peki dediğinizi duyar gibiyim 😀 burada yazmamız gereken şey bu linkte gizli 😀 http://developer.android.com/sdk/eclipse-adt.html bu linkte bulunan hatta aşağıdaki resimde görülen Downloading the ADT Plugin başlıklı yazının altında bulunan linki kopyalayıp küçük şirin penceremiz üzerindeki Location kısmına yapıştıyoruz…

Bu işlemi tamamlayıp ilgili OK – Finish butonlarına tıkladıktan sonra işlemimiz yine bitmiyor…

Window menüsünden Preferences seçeneğini açıyoruz ve ardından Android yazan soldaki seçeneği seçiyoruz. Android ile alakalı ayarların geldiği pencerede indirip kurduğumuz Android SDK nin klasörünü belirlememiz gerekiyor.

Bu işlemde tamamlandıktan sonra Apply butonu ile işlemimizi kabul edip ardından mutluluk içinde bu pencereyide kapatıyoruz. Ama işimiz bittimi hayır bitmedi. 😀

Yine Window menüsünden Android SDK and AVD Manager seçeneğini seçiyoruz.  sanal Android cihazımızı oluşturup ilgili Android versiyonunu seçebileceğimiz bir pencere…

İlk yapmamız gereken Available Packages seçeneğini seçip Install Selected ile gerekli olan dosyaların internetten bilgisayarımıza inmesini beklemek.  Bunlar indikten sonrada artık sıra sanal Androidimize geliyor…

Bunun için  ise Virtual Devices seçeneğini seçip New ile yeni bir makine oluşturma isteğimizi belirtmek…

Hangi Android versiyonunu seçmek istiyorsak onu seçmemiz yeterli olacaktır. Bende bana uygun olan cihazı seçtim ve Create AVD ile sanal makinemi oluşturmuş oldum… Evet sonunda yapmamız gerekenler bitti ve sıra geldi Android projesi açmaya ve Hello Word uygulamasına !!

Yeni Proje Ve Hello World Uygulaması

File -> New -> Other seçeneğini seçiyoruz.

Karşımıza çıkan bu pencereden Android Project seçiyoruz.

Daha sonra projenin ayrıntılarını belirleyebileceğimiz New Android Project adındaki pencere geliyor. Burada seçmemiz gereken bikaç alan var mutlaka hangi versiyondaki Android için uygulama geliştirmek istiyoruz onu seçmemiz lazım. Ve mutlaka belirtmemiz gereken Bir proje ismi , Application Name, PackageName ve Activity kısmı. Bu arada Package Name yazarken bir kaç kelimeyi aralarında nokta ile ayırıp yazmamız gerekiyor. Ve sonra projemiz bizleri bekler…

Projemiz açıldığında Package Explorer penceresinde projemizin dosyalarını tek tek görebiliyoruz. Kısaca değinmek gerekirse src altındaki java uzantılı dosyalar java kodlarımızı yazdığımız dosya res klasörü projem için gerekli olan kaynakların tutulduğu  aynı zamanda tasarımın bulunduğu dosyaları barındıran klasörler…  Eğer Android cihaz için bir form tasarlamak istiyorsak o zaman res ->  layout içindeki main.xml dosyasını açtığımızda tasarım ekranımız karşımıza gelecek.

İşte bu ekranda yinePalette adındaki Toolbox alanında bulunan kontrolleri kullanarak projemizi şekillendirebiliriz.

Bende HelloWord uygulaması yaptığım için form üzerine bir adet TextView atıyorum ve src klasörü altındaki .java uzantılı dosyayı açıp içersine aşağıdaki kodları yazıyorum…

Veeeeee sıra geldi çalıştırmaya bakalım nasıl olacak 😀  Run butonu ile çalıştırdığımda karşıma gelen RunAs penceresinden Android Application seçip yola devam ediyorum ve beni daha önce oluşturduğumuz sanal makine karşılıyor. 😉

Sanal makine başlarken ilk başta biraz yavaş çalışıyor fakat biraz sabırla herşey yolunda gidiyor emulator yavaş yavaş açılıyor tıpkı bir telefon veya tablet kullanıyor gibi müdahale edebileceğimiz bu sanal cihazda uygulamamız çalışmaya başlıyor.

 

Şimdilik bu kadar umarım yararlı olur 😉

M.Zeki OSMANCIK

GDI 2 _ Grafik Çizimi 426 487 mezo

GDI 2 _ Grafik Çizimi

Merhaba arkadaşlar

GDI ile ilgili önceki yazımızda neyin nasıl kullanılacağını görmüştük bu sefer bu GDI metotlarını kullanarak nasıl hesaplamalar yaparız. Seçim sonuçlarında hep görürüz bir pasta dilimi üzerinde partilerin oyları görünür ve yüzde olarak pasta grafikde bir dilim kaplarlar . Bakalım bizim partilerden hangisi ne kadar oyla pastanın neresinde duracak ???

Öncelikle WindowsForm uygulamamız üzerine 2 TextBox 1 Button ve 1 PictureBox atıyoruz.

Bu görüntüyü elde ettikten sonra yapmamız gerek pek de birşey kalmadı aslında sadece kod bloğunu açıp yazmak kalıyor 😀

string[] partiler = new string[10];int[] oylar = new int[10];int siraNo, toplamOy;

Öncelikle yukardaki gibi değerlerimi tutacağım dizilerimi  ve hesaplama yapabilmek içinse değişkenlerimi GLOBAL olarak tanımladım.

Daha sonra buton içersinde değerlerimi alıp bunları grafiksel olarak picturebox içersine çizdireceğim.

Öncelikle 10 elemanlı bir dizi oluşturduğum için dizinin boyutundan çok eleman girilmesin diye bir kontrol yapıyorum. Ardından oylar içersine değer eklerken int değerlerin girildiğinden emin oluyorum…

            if (siraNo == 10){MessageBox.Show(“10 partiden fazla olamaz???”);return;}try

{

oylar[siraNo] = int.Parse(textBox2.Text);

}

catch (Exception)

{

MessageBox.Show(“Oylarda Hata Var”);

return;

}

 

Hem partiler hemde oylar aynı indeks numaralarına yazdırılacak .

            partiler[siraNo] = textBox1.Text;toplamOy += oylar[siraNo];siraNo++;Graphics grp = this.pictureBox1.CreateGraphics();grp.Clear(pictureBox1.BackColor);

Random rnd = new Random();

int i, basAci=0,yayAci ,boy=0;

Color renk;

HatchBrush firca;

Toplam oy sayısını hesaplıyoruz.  Ardından nesnelerimizi tanımlıyoruz.  Picturebox üzerine çizim yapabilmek için Graphics nesnesi oluşturuyoruz. Picturebox da ne varsa siliyoruz. Color değişkeni ve desenli çizim için HatchBrush nesnesi oluşturuyoruz.

Index numarasına göre tüm dizi içersindeki elemanları alıp grafiksel olarak çizebilmek için bir for döngüsü oluşturuyoruz.

            for (i = 0; i <= siraNo-1; i++){yayAci = 360 * oylar[i] / toplamOy;renk = Color.FromArgb(rnd.Next(255), rnd.Next(255), rnd.Next(255));firca = new HatchBrush((HatchStyle)rnd.Next(50), renk);grp.FillPie(firca,0,80,200,200,basAci,yayAci);

 

grp.DrawString(“% ” + boy.ToString(), new Font(“Tahoma”, 8, FontStyle.Bold), Brushes.Black, 5, 80 + i * 20);

grp.FillRectangle(firca, 260, 80 + i * 20, 18, 18);

 

grp.DrawString(partiler[i] + ” = ” + oylar[i].ToString(), new Font(“Tahoma”, 8, FontStyle.Bold), Brushes.Black, 290, 80 + i * 20);

basAci += yayAci;

}

 

Çizdireceğimiz FillPie nesnesinin kaç derecelik bir açı ile çizileceğini hesaplamak için yay _aci değişkenini kullanacağız.  Random renk elde edebilmek için Color.FromArgb metodunu kullanarak rastgele renk değerlerini veriyoruz. HatchBrush üzerindede random olarak desen gelebilmesi için gerekli tanımlamayı yapıyoruz. Ardından küçük bir kare rengin hangi partiye ait olduğunu göstermek için hemen yanınada partinin adı ve oy sayısı  yazdırdıktan sonra en son tanımladığım başlangıç açısı bas_Aci değişkenini çizdiğim şeklin yay_Aci değeri kadar arttırıp yeni çizilecek olan pie için başlangıç konumunu belirliyoruz.

Ve son olarak karşımıza çıkan görüntü :

Böylelikle Graphics nesnesindeki değerlerin nasıl işimize yarayacağı biraz daha kafamızda oturmuş olur umarım…

Görüşmek Üzere.

M.Zeki OSMANCIK

VMWare Windows 8 Kurulumu 1024 641 mezo

VMWare Windows 8 Kurulumu

Merhaba arkadaşlar
Windows 8 Developer Preview çıktı biliyorsunuz. Merak edip kurdum ve kurarken bazı sorunlarla karşılaştım. Genel manada pek beğendim denilemez ama incelemek isteyen arkadaşlar için kurulum ile alakalı birkaç not aktarmak isterim…
Öncelikle buradan indiriyorsunuz http://msdn.microsoft.com/en-us/windows/apps/br229516

Daha sonra VMWare programımızı çalıştırıyorsunuz henüz windows 8 uyumu yok ama Windows 7 seçerek sağlıklı şekilde kurulabilir

VMWare ile standart kurulum yapmaya çalıştığımızda kurulum başladıktan sonra dil ekranını beklerken böyle bir hata ile karşılaşıyoruz. ilk girişte key de girsek ne yapsak kar etmiyor.

Bunun sebebi standart kurulum yaparken oluşturulan sanal makinede Disket sürücüsününde bulunması ilk kurulum yaparken bu disketten key bilgisini okumaya çalışıyor hiç birşey bulamadığı içinde key ile ilgili hata veriyor.  Çözümü sanal makinenin ayarlarını açıp disket sürücüsünü silmek. bundan sonra hiç sorun kalmıyor…

Bundan sonrası klasik windows kurulumu.

Kurulum tamamlandıktan sonra bizden windows hesap bilgilerimizi istiyor ve internete bağlanarak bilgilerimizi alarak bizim için bir oturum oluşturuyor.

Veee Microsoft un en son Windows Mobile 7 de kullandığı çokda kullanışlı olmayan menüsü bizi karşılıyor.

İçersinde Internet Explorer 10  Visual Studio 11 ve Expression 5 yüklü olarak geliyor. Bunları inceledikçe notlarımı yine sizlerle paylaşacağım.

Şimdilik bu kadar sonraki yazılarda görüşmek üzere….

M.Zeki Osmancık

GDI 401 376 mezo

GDI

Merhaba arkadaşlar

GDI  = Graphical Design Interface  ile ilgili ufak bir bilgi vermek istiyorum sizlere. GDI, Windows uygulamaları üzerinde çizim işlemleri gerçekleştirmemize olanak tanıyan sınıflardır.

Bu sınıflar ile Windows formlar üzerine veya print nesneleri ile kağıt üzerine bazı çizimler yapabilmemiz mümkün.

Öncelikle bir çizim yapabilmek için de ilk gereken bir kağıt yada çizim yapılacak alandır öncelikle bunu belirtmemiz gerekiyor

Form üzerine çizim yapabilmek için:Graphics grp = this.CreateGraphics();

 

PictureBox üzerine çizim yapabilmek için:

Graphics grp = pictureBox1.CreateGraphics();

 

Çizim alanımızı oluşturduktan sonra ile form veya picturebox üzerine ne çizdireceğimizi seçmemiz gerekiyor ama bunu seçmeden öncede çizmek için gerekli olan kalem veya içi dolu bir şekil çizeceksek fırça gerekiyor. Bunu da şu şekilde tanımlayabiliriz;

Pen kalem = new Pen(Color.Blue);kalem.Width = 5;

 

Brush firca = new SolidBrush(Color.Red) ;

 

Bu şekilde tanımladığımızda kalem ve fircanin özelliklerini değiştirebilir durumda oluyoruz. Kalemin kalınlığı vs gibi özelliklerini ayarlayabiliyoruz. Ya bunlara ihtiyacımız yoksa bunlarla uğraşmadan nasıl yaparız derseniz onun çözümüde şu şekilde…

Pens.Blue 

Brushes.Red

 

Hemen belirteyim bu şekilde kullanım tek başına mümkün olmuyor ancak gerekli kodlar içersinde bu şekilde kullanabilirsiniz biraz aşağıda bunun örneklerini göreceksiniz zaten 😉

Çizim alanı tamam kalem tamam firça tamam eee ne kaldı geriye ??? Sadece çizmek kaldı 😉

Çizim yapabilmek içinde ilk başta örneğini (instance) aldığımız Graphics nesnesini kullanacağız. Ve içersindeki çizim metotları ile form üzerine şekiller çizeceğiz….

grp.DrawLine(Pen nesnesi, X1, Y1, X2, Y2);grp.DrawLine(kalem, 50, 50, 150, 50);

Formun üzerine Line çizerken verilen koordinatlar 2 tane x ve y noktalarıdır bu iki noktayı belirtiriz ve DrawLine metodu bizim yerimize bu iki noktayı birleştirir ve şekildeki gibi bir görüntü ortaya çıkar.

Birde Dikdörtgen Yuvarlak bişiler çizelim.

grp.DrawEllipse(Pen nesnesi, X, Y, Genişlik, Yükseklik);grp.DrawEllipse(kalem, 100, 100, 100, 100);

 

grp.DrawRectangle(Pen nesnesi, X, Y, Genişlik, Yükseklik);

grp.DrawRectangle(Pens.Blue, 200, 100, 100, 100);

 

Bu şekilleri çizerkende gerekli olan veriler önce bir kalem sonra X ve Y noktası ardından çizilecek olan şeklin yükseklik ve genişlik bilgileridir.

Son olarak Pie yani kekden bahsetmek istiyorum 😀 evet sizi keklemiyorum pasta grafik olarak adlandırdımız şekli nasıl çizeriz ona bakalım…

grp.DrawPie(Pen nesnesi, X, Y, Genişlik,Yükseklik , Başlangıç Açısı, Yay Açısı); 

grp.DrawPie(kalem, 50, 200, 100, 100, 0, 270);

Şimdi birde bunların içi dolu olanları nasıl yazılıyor aralarında ne fark var görelim 😉

grp.FillEllipse(firca, 100, 100, 100, 100);grp.FillRectangle(firca, 200, 100, 100, 100);

grp.FillPie(Brushes.Purple, 50, 200, 100, 100, 0, 270);

 

 

 

GDI nesnesi sadece bu işemi yarar diyebilirsiniz 😀 Bu sadece başlangıç bir sonraki yazıda GDI nin asıl nasıl kullanılabildiğini göreceğiz 😉

Görüşmek Üzere…

 

 

JavaScript XmlHttpRequest 657 588 mezo

JavaScript XmlHttpRequest

Merhaba arkadaşlar bu yazımda sizlere Javascript ile yapılabilen çok yararlı bir o kadar performanslı hep görüp acaba nasıl dediğimiz bir yapıyı anlatmaya çalışacağım…
XML HTTP REQUEST Javascript ile herhangi bir server’a http request yapmanıza olanak veren guzel bir objedir. Gelen cevabı parse edip sayfadaki bazi öğeleri değistirebilir ve sayfa refresh olmadan bir cok şey yapilabilir. Yani işin kısası Postback olmadan bilgileri çekebilme işlemini gerçekleştirmemize yardımcı oluyor. Örnek olarak Google da yazdığımız bir harf tamamlanarak öneriler halinde geliyor. Sayfanın yenilendiğini görmüyoruz sadece önerilerin belirdiği gözlemleniyor ama bu verilerde bir veritabanından geliyor o derece hızlı 😉


Bu teknolojiyi Internet Explorer, Mozilla Firefox,Opera ve Safari destekliyor.Xml Http Request İnternet Explorer ‘da ActiveX Control , Firefox ‘ta ise DOM (Document Object Model)’ in bizzat parçasidir. Internet Explorer 7’ den itibaren native olarak desteklenmektedir. Bu sayede de artik ActiveX ‘i kapatilmis browserlarda dahi calisabilmektedir.
Bu yapının avantajlarını şöyle sıralayabilirim :
• En önemli artısı, sayfa yenilenmediği için değişken olmayan diğer kısımların sunucuda yeniden işlenip sunucuyu yorması engellenir;
• Kullanıcıda tekrar yüklenmediğinden bant genişliği boşa harcanmaz, aynı zamanda kullanıcı tarafında sayfalarda daha hızlı işlem yapılır.
• Sayfayı yenilenmeden içeriğimizi alıyor olmamız, web uygulamamıza bir masaüstü uygulama görünümü katar.
• Web uygulamalarının tek sıkıntısı, hızlı ve pratik çalışamıyor olmanızdır. Web yazılımları masaüstündeki yazılımlar gibi pratik kullanılan şeyler olmalıdır
• XMLHttpRequest aslında javascript ile sunulmuş bir kolaylıktır. Web sitesinin eş zamanlı olarak arka planda çalışan olaylarını takip eder. XML CSS ve javascript ile sonucun anında görülmesini sağlar.
• XMLHttpRequest istemci tarafında (Client Side) çalışır. Birden fazla asenkron web sayfasına postback ve yenileme yapmadan istekte bulunabilir ve gelen cevapları istekte bulunanlara iletir.

ONREADYSTATECHANGE
Sunucuya bir istek gönderilmesinden sonra, sunucudan dönen veriyi alabilecek bir işleve ihtiyacımız var. onreadystatechange özelliği sunucunun yanıtını işleyecek olan fonksiyonu tutar.
Aşağıdaki kod hem boş bir fonksiyon tanımlar hemde onreadystatechange özelliğini ayarlar

xmlHttp.onreadystatechange=function(){ // Buraya kod yazacağız}

 

READYSTATE ÖZELLİĞİ
Sunucu yanıtının durumunu tutar. readyState her değiştiğinde onreadystatechange fonksiyonu çalıştırılır. Sunucudan gelen yanıtın tamamlandığını (veriyi alabileceğimiz durumu) kontrol etmek için onreadystatechange işlevimize bir If ifadesi ekleyeceğiz:

xmlHttp.onreadystatechange=function(){ if(xmlHttp.readyState==4)

{ // Veriyi sunucu yanıtından al }
}

 

RESPONSETEXT ÖZELLİĞİ
Sunucudan gelen veri responseText özelliği ile alınabilir.
Kodumuzda “time” form değişkenimizin değerini responseText değerine eşitleyeceğiz:

xmlHttp.onreadystatechange=function(){

if(xmlHttp.readyState==4)

{

document.myForm.time.value=xmlHttp.responseText;

}
}

XMLHttpRequest nesnesini etkin şekilde kullanmanın 2 yolu mevcut:

Send the Request
Bu yöntem bir XMLHttpRequest nesnesi yaratıp olayları dinlemesi için atamaktır.
Basit olarak bir xhr nesnesi yaratıyoruz:

var xhr = new XMLHttpRequest();

Daha sonra oluşturduğumuz nesneyi onreadystatechange ile olayları dinlemesi için görevlendirmek:

xhr.onreadystatechange = myCallback;

Ardından open() metodunu çağırıyoruz.

xhr.open(‘GET’, ‘somefile.txt’, true);

ilk parametre HTTPRequest tipini belirler (GET,POST,HEAD,……) Get ve Post en sık kullanılanlardır. Get deyimini istekle birlikte çok fazla data göndermemiz gerekmiyorsa kullanırız. Bunun aksi durumlarda POST kullanırız.
İkinci parametre bizim istekte bulunduğumuz URL dir. Örnekte belirtilen bir text dosyasıdır sayfamızla aynı adres içerisinde bulunur.
Son parametremizde isteğin boolean değerdir isteğin eş zamanlı olmaması durumunu true veya false değer ile belirler.
Son adım olarak isteği göndermektir.

xhr.send(”);

Send() metodu istekle birlikte herhangi bir datayıda içerebilir. Get ile gönderilen isteklerde bu boş bir stringdir çünkü data URL olarak belirttiğimiz dosya yada adrestedir. POST ile gönderilen isteklerde bir query string mevcuttur key=value&key2=value2.
Bu noktada istek gönderilir ve kodlar diğer bir göreve atanabilir. Callback fonksiyonu isteğimizim serverdan geri gelmesi ile çağırılır.

Process the Response
Olay dinleyici cevap geldiğinde uyarır ve kodlarımız gelen cevap ile yararlı işler yapar her gelen cevabı boşa kontrol ve ya işleme sokmak zorunda kalmayız.
Readystatechange olayı ile bir dinleyici yerleştirdik XHR nesnesinin readystate özelliğini çağırdık. Readystatechange olayı çalıştığında her zaman değişen bir özelliktir .
Readystate özelliği şu değerleri takip eder
0—uninitialized
1—loading
2—loaded
3—interactive
4—complete = istek geri geldi ve işlendi.
Readystate özelliğini 4 olarak ayarladığımızda bunun anlamı istek geri geldi ve işleme girdi demektir. 4 özelliği sadece bununlada kalmayarak HTTP istek durum kodlarınıda inceler. Olmayan bir URL gönderildiğinde alınadan HTTP istek kodu 404 (Dosya bulunamadı) hatasıdır.
Eğer dönen durum kodu 200 (ok ) ise bu geçerli bir adres bulunduğunu XHR nesnesinin çalışabileceğini belirtir.

function myCallback() {if (xhr.readyState < 4) {

return; // not ready yet

}

if (xhr.status !== 200) {

alert(‘Error!’); // the HTTP status code is not OK

return;

}

// all is fine, do the work

alert(xhr.responseText);

}

Önce istekte bulunduğumuz sayfayı yeni içerik olarak almış olacağız ve bunu ister sayfada görüntüleyebilir istersekte bir takım hesaplamalarda kullanabiliriz.

Hadi bununla ilgili bir uygulama yapalım kafalarda nasıl çalışır bu sorusu olmasın 😉
XMLHTTP REQUEST yöntemiyle databasede bulunan kategorilere ait ürünleri hızlı bir biçimde ekranda görüntüleyeceğiz.
Öncelikle XmlHttpRequest nesnemizi yaratmak için bir function yazıyoruz.

 

Daha sonra oluşturduğumuz bu nesneye get ile parametre yollayabileceğimiz ve geri dönüş sağlayabileceğimiz başka bir function daha yazıyoruz.

Daha sonra Handler ile istekte bulunduğumuz ürün grubunun kategori id sini birlikte yollayabileceğimiz başka bir function daha yazıyoruz.

Sayfamızın CodeBehind kısmındada Repeater nesnesi ile databasedeki “Categories” tablosundaki kategori isimlerini buton nesneleri ile birlikte oluşturuyoruz.

Son olarak sayfamızı görüntülediğimizde hem butonlarla bir seçim yapabiliyoruz hemde Dropdown menü ile istediğimiz Kategoriye ait ürünleri görüntüleyebiliyoruz.
Hiç beklemeden sanki masaüstü uygulamasıymışcasına hızlı ve pratik

Umarım Yararlı olur 😉

M.Zeki Osmancık

SQL _ Trigger 713 381 mezo

SQL _ Trigger

Merhaba arkadaşlar

Fazla zamanım olmadığı için blogla fazla ilgilenemiyorum  işte o nadir bulduğum zamanlardan birtanesinde daha  yararlı olacağını umduğum bir konu ile sizlerleyim. (TV programı gibi oldu ama idare edin artık :D) .

Bugün sizlere parmaklarımın yazabildiği kadar trigger anlatmak istiyorum.

Trigger Nedir?  Önce bu soruya çok basit bir bakış açısı ile bakalım yani trigger in türkçe meali ile.  Ne dersiniz ? Evet dediğinizi duyar gibiyim adeta 😀  Trigger tetik demektir. Nasıl yani tetik bildiğimiz silahlardaki tetikten işte 😉  Tetik çekildiğinde nasıl silah bir takım işlemler gerçekleşiyor ve kurşun atıyor . Sql dede bazı işlemlerden sonra otomatik olarak başka işlemlerin yapılmasını yani tetiklenmesini isteyebiliriz böyle bir yapıyı Trigger dediğimiz kod parçaları gerçekleştirirler…

Peki Trigger dediğimiz olay nasıl yazılır yada yapılır???

 

Triggerlar, Query ekranında T-SQL kodu ile veya Management Studio ile oluşturulup yönetilebilirler ve  View  ve tablolar üzerinde tanımlanabilir.  CREATE TRIGGER komutunu  kullanabilmek için sysadmin, db_owner veya db_ddladmin  rolüne sahip olmak gerekir.  Bir trigger başka bir tabloya erişecekse bu tablo için de trigger oluşturan kullanıcının erişim izni veya güncelleme izni olması gerekir.

 

Peki trigger ‘ ları ne zaman kullanırız ?

*  Değişiklikleri takip etmek için,

* Birincil anahtar üretmek için,

* Karmaşık iş kurallarını gerçekleştirmek için,

* E-posta atmak gibi olayları otomatik olarak yapmak için,

* Standart hata mesajlarının dışında bir hata mesajı elde etmek için,

* Veritabanı erişimlerini takip edebilmek için,

* Nesnede meydana gelebilecek değişiklikleri takip ve engellemek için kullanabiliriz.

 

Trigger dediğimiz yapı kendi içinde 2 ye tekrar o  bölünenlerden biride  ikiye ayrılır 😀 çokmu karışık oldu ? 😀 yani özetle şöyle :

DDL Trigger’lar: Create, Alter ve Drop işlemleri gerçekleştiğinde çalışan trigger’lardır.

DML Trigger’lar: Insert, Update ve Delete işlemleri gerçekleştiğinde çalışan trigger’lardır.

CREATE TRIGGER tetikleyici_adiON tablo_adiFOR veya AFTER veya INSTEAD OF (INSERT veya UPDATE veya DELETE)AS Sql ifadeleri

 

After (For) Trigger’ı: After triggerları, kendiyle ilişkili işlem gerçekleştikten hemen sonra ateşlenir.

Veritabanındaki temel işlemler için (ekleme, silme ve güncelleme) After triggerları tanımlanabilir.

Create Trigger Tg_SilinenKayıtlar

On Employees

After Delete

As

Begin

Declare @Ad nvarchar(50)

Declare @CalisanID İnt

Select @Ad=FirstName,@CalisanID=Employees From Deleted

Select CalisanID,Ad+’-Silinmiştir’,GetDate()From Deleted

Insert Into CalisanKayitRapor Values(@CalisanID,@Ad+’- Silindi’,GetDate())

End

Instead Of Trigger’ı: Instead of triggerları, belirlenen işlem gerçekleşirken devreye girer ve kendi içinde tanımlanan komutları icra etmeye başlar. Yani, belirlenen işlemin yerine geçer. Instead of triggerlari işlemlerin arasına girebildiğinden kontrol amaçlı kullanılabilirler. Tıpkı After triggerları gibi temel veritabanı işlemleri için Instead Of triggerları  tanımlanabilir.

Alter Trigger Tg_CalisanKayitRaporOn EmployeesAfter InsertASBegin

Declare @Ad Nvarchar(50)

Declare @CalisanID int

Select @Ad = FirstName,@CalisanID = EmployeeID From Inserted

 

Insert Into CalisanKayitRapor Values(@CalisanID,@Ad,GetDate())

End

 

INSERT – UPDATE – DELETE

Trigger devreye girdikten sonra Inserted veya Deleted tablolarında yeni eklenen veya silinen kayıtların bir kopyası tutulur.

Trigger Update (ALTER)

CREATE ile oluşturulmuş bir tetikleyiciyi daha sonra üzerinde değişiklikler

yapmak üzere tekrar açmak isteyebilirsiniz. Bunun için, tablonuzda oluşturulmuş bir tetikleyici üzerindeyken sağ tıklayarak açılan menüden Modify komutunu vermeniz gerekir.

 

Trigger Silmek (DROP)

Oluşturulan bir tetikleyiciyi DROP komutuyla ya da tetikleyici üzerinde sağ tıklayarak açılan menüden Delete komutunu vererek silebilirsiniz.

Delete Trigger Tg_CalisanKayitRapor

Trigger Enable ya da Disable

Oluşturulan bir tetikleyici, her zaman aktif durumdadır. Tetikleyiciyle ilgili bir durum oluştuğunda otomatik olarak devreye girer. İstenildiğinde oluşturulan bu tetikleyiciler pasif

hâle getirilebilir. Tetikleyici üzerinde sağ tıklayarak açılan menüde Disable komutunu verdiğinizde tetikleyici pasif hâle gelir.

ALTER TABLE tablo_adiDISABLE TRIGGER Musteri_SilmeveyaENABLED TRIGGER Musteri_Silme

 

Umarım yararlı olur…

 

M.Zeki Osmancık.

 

Wamp Server Çalıştırmak 243 181 mezo

Wamp Server Çalıştırmak

Merhaba arkadaşlar bu yazımda başıma gelen ve çözümünü biraz zaman harcayarak bulabildiğim bir bilgiyi sizlerinde vakit kaybetmemeniz için paylaşmak istiyorum.

Öncelikle Wamp server neden SQL server ve visual studio olan bir bilgisayarsa çalışmaz bunu cevaplayalım. Sebebi hepsinin aynı portu dinlemeleridir.  SQL server Integration service ve IIS bu portu dinlediği için wamp server hizmet veremez.

Bu sorunu aşabilmek için olaya en başından bir bakalım.

Öncelikle kurulum nasıl oluyor ona bakalımn çoğu yerde var ama ben yinede fazla bilgi göz çıkartmaz diyerek başlıyoruz kurmaya…

Kurulurken bizden default bir web browser exe sini belirtmemiz gerekiyor. Eğer Firefox varsa size bu tarayıcıyı varsayılan olarka ayarlamak isteyip istemediğinizi soracak karar sizin artık…

Kurulum biterken localhost ve domain ismi sorar bunlar orada yazdığı gibi kalabilir. Tabi buda size kalmış bir durum isterseniz değiştirebilirsinizde.

Ve kurulum tamamlandığında sağ altta bu programın çalıştığını fakat turuncu bir renkte yani offline durumda olduğunu görüyoruz. Bunun sebebi Sql server içersindeki bazı servislerin ve IIS servislerinin dinledikleri portlarla aynı portları kullanmaya çalıştığından online olamıyor. Peki ne yapmak lazım 😀

Bunun için wamp klasörü  içersinde  yani tam olarak  C:\wamp\bin\apache\Apache2.2.17\conf adresinde httpd.conf dosyasını notepad ile açıyoruz .

Ardından bu dosya içersinde “Listen 80” yazan satırı bularak 80 rakamını herhangi bir rakam yapabilirsiniz. Mesela ben 88 yaptım.

Bu işlemden sonra notepad i kaydedip kapatıyoruz ve ayarların geçerli olabilmesi için wamp server üzerinde Restart All Services  seçeneğini seçerek yeniden başlamasını sağlıyoruz.

Sonunda WAMP Server kullanıma hazır .

Tek bir ayrıntı var çalıştırma işlemi içersinde sadece port numarasını belirtmemiz gerekiyor Örneğin:

http://localhost:88/

http://localhost:88/phpmyadmin/

Umarım yararlı olur.

M.Zeki Osmancık…

SQL _ Stored Procedure 600 545 mezo

SQL _ Stored Procedure

Merhaba arkadaşlar bu yazımızda Sql içersinde bulunan ve hayat kurtaran Stored Procedure konusuna değineceğiz.

Bir amaca ulaşmak için takip edilen yol ve yöntem tanımından yola çıkılarak, bir prosedür herhangi bir işlevi yerine getirebilmek için yazılan kodların bir paket içersinde tutulmuş halidir diyebiliriz.

Stored procedure kullanmanın bize sağladığı yararlardan kısaca bahsetmek gerekirse :
• Çalışırken bazı planlamaların doğru olarak yapılmasını sağlar ve tekrar tekrar kullanılabilir bir yapıdır.
• İçersine yazılan sorgulara parametrelendirme özelliği katar.
• Uygulamalar  arasında kullanılabilir.
• Güvenli data giriş çıkış ve düzenlemesi sağlar.
• Daha az network bandwidth kaynak kullanımı sağlar.
• Job olarak tanımlanabilir ve schedule edilebilir.
• Database objelerine daha güvenli erişim olanağı tanır.
Stored procedure bileşenleri parçalara ayırır yani parsing işlemi gerçekleştirir.
Yani ilk olarak ; Veritabanı içersinde view table vb. nesnelere gönderme yapan referanslar varsa geçerli olup olmadıklarını (nesnenin ve iznin olup olmadığı) kontrol eder.Kontrollerden geçen SP nin adı sysobject tablosuna kodları ise syscomments tablosuna kaydedilir.
Bu işlemlerle birlikte derleme işlemi yapılır. Normalizasyon işlemleri olarak da anılan bu işlemler sonucunda, ağaç şeması elde edilir. Bu şema da sysprocedures tablosunda saklanır.
Stored Procedure herhangi bir anda çağrıldığında, ilk kez çalışıyorsa bu işlemler gerçekleştirilir. İlk defa çağrılmıyorsa, kontrol, sorgulama ağacı oluşturma işlemleri yapılmaz ve oldukça hızlı bir şekilde Stored Procedure’ün derlenmiş haliçalışır. Bundan dolayı Stored Procedure’ler derlenen nesnelerden biri olarak bilinir.

Stored Procedure Oluşturmak

CREATE PROC [ EDURE ] prosedür_adıAST-SQL ifadeleri

Değişiklik Yapmak

ALTER PROC [EDURE] prosedür_adıAST-SQL ifadeleri

Bir Stored Procedure’de değişiklik yapabilmek için önce kaynak kodunun alınması ve bir Query ekranına kopyalanıp düzenlenmesi gerekir.

Stored Procedure’ü Silmek

DROP PROC  sahip.prosedür_adı

Var olan bir Stored Procedure’ü silmek için DROP komutunu kullanmak gereklidir.

DROP komutundan sonra Stored Procedure’ün sahibinin adı ve Stored Procedure’ün adı yazılmalıdır.

Değer Alan Stored Procedure’ler

Stored Procedure’lerin daha etkin kullanılabilmesi ve işlevsel bir hale gelebilmesi için dışarıdan değer almalarına ihtiyaç duyulur. Bu nedenle girdi parametreleri (Input Parameter) kullanılır.

Değer Alıp-Veren Stored Procedure’ler

Değer alıp-veren stored procedure ler, query’den gönderilen değerleri alıp istenilen işleme tabi tuttuktan sonra elde edilen sonucu tekrar Query’e gönderen prosedürlerdir. Buişlem için OUTPUT parametresi kullanılır.

RETURN Deyimi

Prosedürden tek bir tamsayı değer döndürmek için bir başka seçenek olarak RETURN ifadesi kullanılabilir. Bu şekilde OUTPUT parametresini hem prosedür içinde hem de prosedürün çağrıldığı yerde tanımlamak zorunda kalınmadan doğrudan değer döndürülebilir.

Store Procedureler  kısaca bu kadar…

Umarım yararlı olur.

Tekrar görüşmek üzere…

M.Zeki Osmancık

XML ile Telefon Defteri Yapalım 3!! 618 381 mezo

XML ile Telefon Defteri Yapalım 3!!

Projemize kaldığımız yerden devam ediyoruz 😀
Kaydet işleminden farklı olarak mevcut olan kaydı düzenlemek için düzenleme butonumuzun Click olayına ilgili kodları yazıyoruz.

protected void Button2_Click(object sender, EventArgs e){

xmlDoc = new XmlDocument();

xmlDoc.Load(dosya);

XmlNode secilen = xmlDoc.SelectSingleNode(“Kisiler/Kisi[Ad='” + ListBox1.Text + “‘]”);

secilen[“Ad”].InnerText = TextBox1.Text;

secilen[“Soyad”].InnerText = TextBox2.Text;

secilen[“Telefon”].InnerText = TextBox3.Text;

xmlDoc.Save(dosya);

TextBox1.Text = “”;

TextBox2.Text = “”;

TextBox3.Text = “”;

TelefonlariYukle();

}

Farklı bir işlem yapmadık aslında. XmlNode iledüğümü belirledik ve InnerText ile o düğüm içersinde var olan veriyi almış olduk. Yeni değerleride yine InnerText ile yerine yazmış olduk. Bütün işlemleri element içersindeki düğümlerdeki bilgiler ile yaptık yeni kayıt için yeni düğümler ekledik mevcut düğümler ekledik. Silme işlemi içinde tabiki düğüm silmemiz gerekecek bunun içinde Sil butonuna…

protected void Button3_Click(object sender, EventArgs e){

xmlDoc = new XmlDocument();

xmlDoc.Load(dosya);

XmlNode secilen = xmlDoc.SelectSingleNode(“Kisiler/Kisi[Ad='” + ListBox1.Text + “‘]”);

xmlDoc.DocumentElement.RemoveChild(secilen);

xmlDoc.Save(dosya);

TextBox1.Text = “”;

TextBox2.Text = “”;

TextBox3.Text = “”;

TelefonlariYukle();

}

RemoveChild ile ChildNode dediğimiz seçilen düğümü silme işlemini gerçekleştirebiliyoruz.

Peki 3 temel işlemimiz bitti birde bu Xml sayfası içersinde arama yapmak istersek ?

Bunun içinde en alt kısma yerleştirdiğimiz Textbox ve Button ile bu işi çözebiliriz . Bu işlem içinde …

protected void Button4_Click(object sender, EventArgs e){

ListBox1.Items.Clear();

XPathDocument xp = new XPathDocument(dosya);

XPathNavigator xn = xp.CreateNavigator();

string sorgu = “Kisiler/Kisi[Ad='”+TextBox4.Text+”‘]/Ad”;

XPathNodeIterator ni = xn.Select(sorgu);

while (ni.MoveNext())

{

ListBox1.Items.Add(ni.Current.ToString());

}

}

İşte Xml i veritabanı olarak kullanarak yaptığımız çok basit bir telefon defteri 😉

Güle Güle kullanın 😀

Projeyi İndirebilmek için Tıklayın!!

Bilgiyle Kalın …

M.Zeki Osmancık

XML ile Telefon Defteri Yapalım 2!! 675 378 mezo

XML ile Telefon Defteri Yapalım 2!!

Bir önceki yazının devamı olarak bu yazımızdada projemizi geliştirmeye devam ediyoruz.

Listbox a kayıtlarımızı ekledikten sonra listbox üzerinde bir kaydı seçtiğimizde bilgilerin ilgili textbox lara yazılmasını istiyoruz bunun içinde Listbox kontrolünün SelectedIndexChanged olayına ilgili kodları yazıyoruz.

protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e){xmlDoc = new XmlDocument();

xmlDoc.Load(dosya);

XmlNode secilen = xmlDoc.SelectSingleNode(“Kisiler/Kisi[Ad='” + ListBox1.Text + “‘]”);

TextBox1.Text = secilen[“Ad”].InnerText;

TextBox2.Text = secilen[“Soyad”].InnerText;

TextBox3.Text = secilen[“Telefon”].InnerText;

}

Bu işlemden sonra projemizde bir adım daha atmış oluyoruz ve her kaydı seçtiğimizde o kayıtla ilgili tüm bilgiler ilgili textboxlara yazılıyor. Bu bize Update işleminde çok büyük kolaylık sağlayacak.

İlk olarak Kaydet butonunu işlevine kavuşturalım. Ve buton1 in Click olayına ilgili kodları yazalım.

protected void Button1_Click(object sender, EventArgs e){xmlDoc = new XmlDocument();

xmlDoc.Load(dosya);

XmlElement xe = xmlDoc.CreateElement(“Kisi”);

XmlNode ad = xmlDoc.CreateNode(XmlNodeType.Element,”Ad”,””);

XmlNode sAd = xmlDoc.CreateNode(XmlNodeType.Element, “Soyad”, “”);

XmlNode tel = xmlDoc.CreateNode(XmlNodeType.Element, “Telefon”, “”);

XmlAttribute xa = xmlDoc.CreateAttribute(“Tur”);

xa.Value = “Cep”;

tel.Attributes.Append(xa);

ad.InnerText = TextBox1.Text;

sAd.InnerText = TextBox2.Text;

tel.InnerText = TextBox3.Text;

xe.AppendChild(ad);

xe.AppendChild(sAd);

xe.AppendChild(tel);

xmlDoc.DocumentElement.AppendChild(xe);

xmlDoc.Save(dosya);

TextBox1.Text = “”;

TextBox2.Text = “”;

TextBox3.Text = “”;

TelefonlariYukle();

}

XmlElement: Xml dosyası içersinde bulunan bir elemanı temsil eder.

XmlNode: Eleman içersindeki her bir düğümü temsil eder.

XmlAttribute : Düğümlerin sahip olduğu özellikleri temsil eder.

Görüldüğü üzere Xml dosyamızı bir database gibi kullanarak kayıtları görüntüleyip yeni kayıtları Xml üzerine yazabiliyoruz.

Bilgiyle Kalın…

M.Zeki Osmancık

XML ile Telefon Defteri Yapalım !! 410 256 mezo

XML ile Telefon Defteri Yapalım !!

Merhaba arkadaşlar bir önceki yazımızda XML nedir nasıl kullanılır ile alakalı bilgi vermiştik.Bu yazımızda sizlerle C# ile Xml ortak yapımı bir proje yapacağız. Bu web projemizde Xml dosyasını bir database gibi kullanarak kayıt yapacağız, kayıt okuyup, sileceğiz.

Öncelikle resimdeki gibi  4 TextBox , 4 buton, 1 Listbox dan oluşan formu tasarlıyoruz.

Bu formu tasarladıktan sonra projemizle birlikte kullanacağımız Xml dosyamızı yaratarak içersindeki düğümleri oluşturmamız gerekiyor.

Bu xml dosyası bizim veritabanımız olacak.

Genel hazırlıkları tamamladıktan sonra kodlama kısmına geçelim. İlk olarak bilmemiz gereken bir nesnemiz var  XMLDocument  nesnesi bu nesne xml dosyasını  önbellek üzerinde çalışılabilir hale getirerek işimizi kolaylaştırır.Önce bu nesneyi global seviyede tanımlayarak başlayalım.

XmlDocument xmlDoc;

Bu nesneden sonra yine tüm proje içersinde kullanabilecek bir değişken olan xml dosya yolunu tutacağımız bir string değişken tanımlayarak sayfanın yüklenmesi sırasında bu yolu değişkene atamalıyız.

dosya = Server.MapPath(“Telefon.xml”);

Dosya değişkenine yolu atadıktan sonra XML dosyamız üzerindeki kayıtları okuyarak Listbox nesnemiz üzerine yazdıracak bir metot yazalım.

void TelefonlariYukle(){ListBox1.Items.Clear();

XPathDocument xp = new XPathDocument(dosya);

XPathNavigator xn = xp.CreateNavigator();

string sorgu = “Kisiler/Kisi/Ad”;

XPathNodeIterator ni = xn.Select(sorgu);

while (ni.MoveNext())

{

ListBox1.Items.Add(ni.Current.ToString());

}

}

XPathDocument : Xpath data modeli kullanılan okuma yöntemlerinde Xml dosyalarından daha hızlı okuma sağlar.

XPathNavigator : Verilerin üzerinde bir izleme oluşturur ve XML belgesi içinde bu izlenecek olanları görüntüler.

XPathNoteIterator:Seçilen düğümler üzerinde bir yineleme sağlar.

Bu işlemi yaptıktan sonra listbox nesnesi üzerine Xml dosyası üzerindeki Ad düğümüne yazılmış kayıtlar tek tek gelecektir.

Bu kadar değil devam edecek 😉

Bilgiyle Kalın…

M.Zeki Osmancık

XML Nedir? 288 116 mezo

XML Nedir?

Merhaba arkadaşlar bu yazımızda XML yapısını açıklamaya çalışacağım.

Öncelikle XML in ne olduğundan başlayalım. Her ne kadar bilgisayar kullanan herkes bir şekilde XML dosyaları ile çalışıyor olsada nasıl bir yapı olduğunu ve nasıl kullanılabileceğini kestiremeyebilir zaten çoğu kimse kullandığı hazır programlar sayesinde XML ile çalışıyor.En basiti bir otel her gece emniyete otelde konaklayanların listesini emniyetin ona vermiş olduğu program ile göndermek zorunda. Göndermek zorunda olduğu dosya XML dosyasıdır bunun gibi bir çok örnekte göreceğimiz gibi XML yaygın bir iletişim dosyası.

XML (Extensible Markup Language) bir programlama dili değildir. Sadece markup yani işaretleme dilidir. Markup dillerine örnek olrak HTML,WML vs.. verilebilir. Bu dillerde veriler bazı işaretlerle (etiket) işaretlenirler. Örneğin bir HTML kodunda bir başlık yazısı <h1> etiketi ile işaretlenir. Sonuç olarak bir belgedeki verileri işaretlemeye yarayan dillere markup dilleri denir.

W3C ( World Wide Web Consortium) organizasyonu tarafından tasarlanan ve herhangi bir kurumun tekelinde bulunmayan XML kişilerin kendi sistemlerini oluşturabilecekleri kendi etiketlerini tanımlayarak çok etkin ve rahat kullanabilecekleri ve bu belirlenen etiketleri kendi yapıları içersinde standardize edebilecekleri esnek , genişleyebilir ve kolay uygulanabilir bir meta dilidir.

Farklı tipteki verileri orjinal formatlarında tek bir havuzda tutabilen XML veriye hızlı kolay ve ortamdan bağımsız olarak erişebilme imkanı sunar.

Öncelikle veri transferinin kolaylaşmasını ve verinin içerik bilgisiyle saklanabilmesini hedefleyen XML, içerik ve sunum bilgilerini birbirinden ayırır. Bu özelliği ile de HTML’den farklılaşır.

  • XML bir document’in(belgenin) yapısını ve görünümünü tanımlamak için kullanılan uluslararası bir standartdır.
  • XML (Extensible Markup Language – Genişletilebilir İşaretleme Dili) yapılandırılmış belge ve verilerin evrensel formatıdır
  • XML text tabanlı markup dilidir ve data alış verişinde kullanılan bir standard’ır
  • XML bilginin yapısını tanımlamak için kullanılan bir teknolojidir.
  • XML bilgiyi tanımlayan ve web’te bilgi alış verişi için kullanılan standard bir biçimdir.
  • XML markup dillerini tanımlayan bir metadilidir.
  • XML verinin yapılandırılması ve tanımlanması için kullanılan bir teknolojidir.
  • XML herhangi bir verinin biçimlenmesi,tanımlanması için kullanılan bir teknolojidir.

Yukarıdaki tanımlar birbirine benzemektedir. Bazı kelimeler veri, tanımlama,standart vs.. gibi çok fazla kullanılmış. Tanımlardaki bir farklılık XML’in hem bir teknoloji hem de bir dil olmasından doğmaktadır. Bazı tanımlar sadece XML teknolojisini tanımlarken bazıları dil olarak XML’i tanımlamışlar.

Bütün bu tanımlardan şu sonuçlar çıkarılabilir

  • XML hem bir teknolojidir hem de bir dildir
  • XML dil olarak markup dil’leri yaratmaya yarar.
  • XML verileri tanımlamak için kullanılan bir teknolojidir.
  • XML verileri tanımlamak için bir standart oluşturmak için yaratılmıştır.
  • XML verileri standart bir şekilde tanımladığından web’te veya herhagi iki program arasında veri alış verişi kolaylaştırmaktadır.

Şimdi kendi arkadaşlarımızın ad soyad ve telefon bilgilerini tutabildiğimiz bir XML dosyası oluşturalım.

Kendi kurallarımıza göre oluşturacağımız bu XML dosyasında etiketlerimiz Ad , Soyad ve Telefon olsun ayrıca Telefon etiketinin özelliklerini belirlemek için Tur adında bir Attribute tanımlayalım. Öncelikle XML dosyamızda o belgenin XML olduğunu ve versiyonunu dil desteğini belirten bir satır bulunmak zorunda.  Ve mutlaka bir root (Ana ,Kök) node olmak zorunda.

Kök node u tanımladıktan sonra her bir kişi için ayrı node’larımız olmak zorunda.

Her kayıt için bir node için içersinde tutacağımız bilgilerin etiketlerini tek tek tanımlamalıyız.

Bu şekilde Xml dosyamız içersine bir kişinin kaydını girmiş oluyorum. Eğer eklemiş olduğum etiketlerin bir özelliğini tanımlamak istersem o zamanda bir Attribute (Öznitelik) tanımlamam yeterli olacak.

Umarım yararlı olur bir sonraki yazımda görüşmek üzere.

Bilgi ile Kalın!!!

M.Zeki Osmancık

MSSQL Database Terminolojisi 150 150 mezo

MSSQL Database Terminolojisi

Merhaba arkadaşlar bu yazımızda veritabanı ile alakalı bazı terimleri sizlere açıklamaya çalışacağım.

VeriTabanı (Database):Verilerin fiziksel hafızada saklandığı  datafiles ve bu verilerin olaylarının loglandığı log dosyalarından oluşan en az 2 dosyadan oluşan yapıları SQL Server VeriTabanı (Database) olarak değerlendirir.

Schema (Şema):Bir veritabanı içersinde yaratılan farklı  schemalar içersinde aynı isimde tablolar ,store procedureler gibi farklı nesneler yaratabilmek mümkün oluyor böylelikle database içersindeki nesneleri gruplara ayırarak çalışmayı kolaylaştırabiliyoruz.

Table (Tablo) :Günlük hayatta kullandığımız liste mantığı ile oluşturduğumuz nesnelerdir.Yani bir sınıf listesinden tutun alışveriş listesine kadar tüm listeleri tablo olarak tanımlayabiliriz. Teknik olarak bakarsakta satır ve sütunlardan oluşan veri saklayabilen veritabanının en temel nesnesi diyebiliriz.

ResultSet (Sonuç Kümesi): Bir seçme ve listeleme  işlemi gerçekleştiğinde bazen bir bazen birden fazla tablo kullanılarak hazırlanan ve veritabanı üzerinde mevcut olmayan tabloların hepsi birer sonuç kümesidir.

Row (Satır): Tablo üzerinde mevcut olan her bir kayıt bir satıra denk gelir.

Column(Sütun): Tablolarda dikey sütunların yanyana gelmesi ile meydana gelmiştir. Bir ürün tablosunu ele alacak olursan her ürün bir satır bu ürünün her bir bilgiside sütundur.

Field (Alan): Yapılandırılmış  bilginin her bir kısmını saklamak üzere yapılan tanımlamadır. Bu alanın uzunluğu ne kadar olacak harf ise ne kadar harf alabilir, rakam ise kaç basamaklı olacak bu türden soruları yanıtlamak için bir alan tanımlamak ve bu alanada bir veri tipi belirtmemiz gerekir.

Data Type (Veri Tipi): Bilgisayar kayırları yapısal olarak tutarken onların yapıları hakkında fikir sahibi olabilmek için bazı özellikleri önceden tanımlanması gerekir. İşte bu özellikleri belirten tipler veri tipleridir.

Record (Kayıt) : Yapılandırılmış verilerden her birine bir kayıt denir.  Yani alan bilgileri ile birlikte her bir satır kayıttır.

Constrait (Kısıtlayıcı) : Herhangi bir alan içersine girilebilecek bilgileri zorlayıcı kurallara denir. Birincil Anahtar Kısıtlayıcı , Tekill Kısıtlayıcı , Default Kısıtlayıcı, Yabancı Anahtar Kısıtlayıcı, Kontrol Kısıtlayıcı olmak üzere 5 tür kısıtlayıcı vardır.

Default  : Tabloda bir alana değer girilmediğinde bu alan için standart olarak önceden bizim belirttiğimiz bir veri veya verinin ilk giriş işlemi esnasında otomatik olarak  bu sütuna atanması.

Rule (Kural):Bir alana girilebilecek verilerin bir kurala bağlı olmak üzere girilmeye zorlanması için yapılan tanımlamalara denir.

Indexes (İndeksler) : Bir kaç yüz kayıttan oluşan bir tablo üstüne kayıt arama işlemi veritabanı yönetim sistemi için oldukça basit bir işlemdir ancak bu sayı milyonlara çıktığında çeşitli kriterlere bağlı olarak organize edip sıralayacak bu sayede hızlı erişimi sağlayacak yapılar vardır. Veriler fiziksel olarak düzenleniyorsa CLUSTERED INDEX (Kümelenmiş), fiziksel olarak düzenlenmiyorsa UNCLUSTERED  INDEX(Kümelenmemiş) adını alır.

View : Bazen hazırlanan sorguların veya elde edilen sonuç kümelerinin bir tablo gibi davranması istendiğinde View kullanılarak bu sanal tablo oluşturulur.

Synonim : View den farklı olarak tablolar dışındaki store procedureler gibi nesnelerede takma adlar verebilmemizi sağlar.

Stored Procedure (Kaydedilmiş Yordamlar) : SQL kodları çalıştırılmadan önce veritabanı yönetim sistemi tarafından yorumlanır ve derlenir  ardından çalıştırılmak istenen kod çalışır ve sonuç kümesi elde edilir. Bu işlem sırasındaki yorumlama ve derleme kısmı veritabanı yönetim sistemine ek bir yük getirir. Bunu hızlandırabilmek için derlenmiş ve yorumlanmış ifadeleri kullanabiliriz. Bu derlenmiş ifadeler Stored Procedurelerdir. Genellikle veri erişim katmanı olarak kodlanırlar.

Cursor (İmleç) : Veritabanında bulunan kayıtlara satır satır erişmek istediğimizde bu işi bizim yerimize imleçler halleder. İmleçler genellikle veritabanı üzerindeki verilere baım yapılırken kullanılırlar.

Trigger (Tetikleyici) : Triggerler veritabanı üzerindeki veriler ile ilgili ekleme, silme , düzenleme gibi işlemler yerine veya bu işlemlerden sonra otomatik olarak yapılacak olan işlemlerin belirtildiği yapılardır.  Veri bütünlüğünü sağlamak amacıyla kullanılırlar.

UDF User Defined Functions (Kullanıcı Tanımlı Fonksiyonlar) : UDF ler genellikle karmaşık işlemlerin  tek bir sefer fonksiyon olarak kaydedilip daha sonra sadece isimleri ile çağrılabilen bir yapıdır. Stored Procedure lerden tek farkı select sorguları içersinde onların bir parçası gibi kullanılabilmeleridir.

User Defined Types  (Kullanıcı Tanımlı Tipler): SQL server 2005 den itibaren 8K yi aşmamak için kendi gereksinimlerimizi  giderebilmek için oluşturduğumuz kendine özgü metotlarıda içersinde bulundurabilen tiplerdir.

Umarım yararlı olur

Sonraki yazılarda görüşmek üzere …

M.Zeki Osmancık

TSQL _ Select 387 260 mezo

TSQL _ Select

Merhaba Arkadaşlar . Bu yazımızda TSQL den bahsetmek istiyorum.  Veritabanı programları ile uğraşanların yada biz programcıların sürekli kullandığı hatta bazen baş belası olabilen bu SQL neymiş ona bakalım.

SQL (Structured Query Language) yani Yapılandırılmış  Sorgulama Dili anlamına gelen veritabanı sorgulama dilidir. SQL, düzeltilmesi veya değiştirilmesi istenen bilgileri açıkça belirtmeye izin veren ve yerine getirilebilecek başlıca işlemleri tanımlamamızı sağlayan bir komut takımıdır

Sql deki kodları :

Veri İşleme Dili – DML (Data Manipulation Language )

Veri Tanımlama Dili – DDL (Data Definition Language)

Veri Kontrol Dili  – DCL(Data Control Language)

Olarak gruplayabiliriz.

Bu gruplar içersinde hangi kodlar var peki?

Veri İşleme Dili – DML (Data Manipulation Language )

SQL Veri İşleme Dili veri girmek, değiştirmek, silmek ve verileri almak için kullanılan DML komutlarının tümüdür.

SELECT : Veri seçmek

DELETE : Veri silmek

UPDATE : Veri güncellemek

INSERT : Veri girmek

Veri Tanımlama Dili – DDL (Data Definition Language)

SQL Veri Tanımlama Dili verilerin tutulduğu nesneler olan tabloların yaratılmasını, silinmesini ve bazı temel özelliklerinin düzenlenmesini sağlar.

CREATE TABLE : Yeni bir tablo yaratmak

ALTER TABLE : Tabloda değişiklik yapmak

DROP TABLE : Tabloyu silemek

CREATE INDEX : Tabloda dizin oluşturmak

Veri Kontrol Dili  – DCL(Data Control Language)

SQL Veri Kontrol Dili bir veritabanı kullanıcısı veya rolü ile ilgili izinlerin düzenlenmesini sağlar.

GRANT :Kullanıcıya yetki vermek

DENY:Kullanıcı, grup veya rolü herhangi bir eylem için engeller.

REVOKE:Daha atanmış olan yetki veya engeli kaldırır.

Veritabanında Arama İşlemleri

Bir veritabanı içersindeki bilgilerimiz arasında belli kriterlere uygun yada bir rapor şeklinde bir arama gerçekleştirmek istiyorsak  kullanmamız gereken kod  Select olmalıdır.

Select ifadesi bir tablodan verileri seçmek için kullanılır. Elde edilen veriler sonuç kümesi olarak adlandırılır ve yine bir tablo görüntüsü şeklinde görüntülenir.

Söz dizimi:

Tüm alanları görüntülemek istemediğimiz zamanlarda kolon adı belirterek istenilen bilgiler çekilebilir.

SELECT <görüntülenmek istenen kolonlar> FROM <tablo adı>

Tüm alanları göstermek istediğimiz durumlarda kolon adı yerine * kullanılır.

SELECT * FROM <tablo adı>

Şimdi birlikte bir örnek yapalım. Northwind veritabanı içersinde bulunan herhangi bir tablonun bilgilerini önce tablo ismi ile sonra * ile çağıralım.

Verilerimizi tablo ismi ile yada * simgesiyle hepsini getiriyoruz. Süper ama bir sorun var  yada sorundan çok bir eksik demeliyiz belkide belli kriterlere uyan bilgileri getirmek istediğimde ne yapmam gerekir ?

Böyle bir durumdada yardımımıza WHERE yantümcesi koşuyor. WHERE yantümcesi görüntülemek istediğimiz verileri belirli bir kritere göre seçebilmemizi sağlar.

Yazımı

SELECT <sütun adı> FROM <tablo adı> WHERE <koşul(lar)>

Yani WHERE yantümcesi diyor ki bana istediğin kriteri söyle NERDE eşleşen varsa alayını getireyim sana diyor. Ama bu kriterleri hangi operatörlerle sağlarız birde onu belirtelimki sadece eşittir işaretinden ibaret olduğu anlaşılmasın.

İşte WHERE yantümcesi ile kullanabileceğimiz operatörler

Bizde teşekür edip bir örnek yaparak Where yantümcesi istediğini veriyoruz.

Bu kez müşteriler tablosundayız ve Madrid deki müşterilerimizi görmek istiyoruz.

Nasıl Where yantümcesi işini iyi yapıyor değilmi 😀

WHERE yantümcesinin  operatörlerinden bahsetmiştik orada herşey güzel anlaşılır matematiksel şeyler var ama 2 operatör varki kafa karıştırabilir.  LIKE ve BETWEEN  bunlarında nasıl kullanıldığına kısaca deyinelim

LIKE

LIKE kelimesi sütundaki değerlerin, joker karakterler kullanılarak oluşturduğumuz bir arama koşulu ile karşılaştırılmasını sağlar.

SELECT <kolon adı> FROM <tablo adı>

WHERE <aranacak sütun> LIKE <kriter>

Örnek arama koşulları:

LIKE ‘BR%’                          İlk iki harfi BR olan tüm kayıtlar

LIKE ‘Br%’                           İlk iki harfi Br olan tüm kayıtlar

LIKE ‘%een’                       Son üç harfi een olan tüm kayıtlar

LIKE ‘%en%’                      İçerisinde en ifadesi geçen tüm kayıtlar

LIKE ‘_en’                           Son iki harfi en olan üç harften oluşan tüm kayıtlar

LIKE ‘[CK]%’                       C veya K harfleriyle başlayan tüm kayıtlar

LIKE ‘[S-V]ing                    ing ile biten ve ilk harfi S ile V harfleri arasında olan dört harfli herhangi kelime

LIKE ‘M[^c]%’                   M ile başlayan ikinci harfi c olmayan tüm kayıtlar

BETWEEN..AND

BETWEEN … AND operatörü 2 değer ile belirtilen aralığı sınar. Bu değerler sayı, metin veya tarih olabilir.

SELECT <kolon adı> FROM <tablo adı>

WHERE <sütun adı> BETWEEN <değer 1> AND <değer 2>

Umarım faydalı olmuştur bir başka yazıda görüşmek dileği ile ….

M.Zeki Osmancık

SQL _ Views II 253 219 mezo

SQL _ Views II

Bir önceki yazımızda View nasıl yazılır ne işe yarar bunu öğrenmiştik . Bu yazımızda ise View içersinde yapabileceğimiz bir takım işlemleri öğreneceğiz.
Oluşturduğumuz View yapısı üzerinde değişiklik yapabilmek için Alter View; Silebilmek için Drop View cümlelerini kullanıyoruz.

Encryption:

Encryption cümlesi şifreleme anlamına gelir. Türkçe anlamınında belirttiği gibi view in kod içeriğini  yani view i oluşturduğumuz kodları görüntülenemez şekilde şifrelememizi sağlar. Bu işlemi geri almak istersek maalesef ki başarısız oluyoruz çünkü Decryption gibi bir çözüm yok. Encryption kullanılması gerekiyorsa mutlaka View in kaynak kodlarının başka bir kaynağa yedeklenmesi şiddetle tavsiye edilir.

With Encryption Yapısı

Create View viewAdiWith EncryptionAS

Select Sorgusu

Örnek olarak yukardaki gibi bir View oluşturduğumuzda veritabanındaki Views klasörü içersinden bu yarattığımız View i bulduğumuzda üzerinde bir kilit simgesinin olduğunu göreceğiz ve sağ tık ile düzenlemeye çalıştığımızda başarısız olacağız. Encryption ile kodlarımızı emniyet almış olduk. Daha öncede belirttiğim gibi bunu tekrar geri döndürecek kilidi çözecek bir kod yok.

Oluşturulan view ların içeriklerini görüntülemek için kullandığımız bir stored procedure var. Sp_helptext . bu SP bize belirttiğimiz View içeriğini gösterir. Öncelikle nasıl kullanıldığına bakalım sonra Encrypt ettiğimiz View i görüntüleyebilirmiyiz ona bakalım.

Görüldüğü gibi normal bir view içeriğini görüntüledik. Şimdide Encrypt edilmiş view a bakalım 😉

Schemabinding

Encryption kadar olmasada Schemabinding kelimesinin tercümesi zaten bu kodu hangi amaçlar için kullanabileceğimizi anlamaya yeterli oluyor. Eğer oluşturulacak View içersinde Schemabinding kullanılıyorsa View içersinde kullandığımız tabloların sütunlarını kilitlemiş oluruz. View içersinde Schemabinding kullanırken hatırlamamız gereken bazı kurallar var.

Öncelikli kural Schemabinding kullanacağımız View içersindeki sorgularımızda * işaretini kullanmamak bunun yerine tüm görüntülemek istediğimiz sütunları tek tek yazmamız gerekiyor.  Yazmazsak aşağıdaki gibi bir hata ile karşılaşacağız.

Ayrıca belirteceğimiz tablo isimlerini tabloismi.sütunismi olarak belirtmemiz gerekiyor. Son olarakda tablo ismi ile alakalı olan kuralımız var , tablo isminde ise dbo.tabloismi yazmamız gerekiyor ki tam olarak tabloyu ve sütunlarının yerini garantilemiş olalım.

Yukarıdaki örnekte View’de görüntüleyeceğimiz verilerin bulunduğu tablo ya da tablolardaki sütunların yapısında yapılacak herhangi bir değişikliği bu View’i silmedikçe ya da Schemabinding özelliğini View’imizden kaldırmadıkça yapamayacağız. Oldu da böyle bir işlemi Schemabinding özelliği varken yapmaya kalkıştık, SQL bize bu işlemin yapılamayacağını belirten bir hata mesajı verecektir. UrunleriListele isimli View için kullandığımız dbo.Products tablosundan ProductName sütununu kaldırmaya çalışalım.

WithCheckOption

Son olarakda sizlere View lerin WithcheckOption özelliğinden bahsetmek istiyorum.  Biliyorsunuz ki View ler içersinde tek bir tablo ile işlem yaptığımızda Insert,Update, Delete gibi işlemleri yapabiliyoruz. İşte bu işlemleri yapabildiğimiz view ler içersinde bazı kısıtlama yapabilmek için WithCheckOption özelliğini kullanırız. Yeni bir view ile bu özelliği inceleyelim.

Bu şekilde tek tablo üzerinde ve Where kelimesi ile kriter belirtilerek oluşturduğumuz View üzerine insert işlemi yapmaya kalktığımızda hata ile karşılaşıyoruz.

Umarım yararlı olmuştur sonraki yazılarda görüşmek üzere.

SQL _ Views 150 150 mezo

SQL _ Views

Merhaba arkadaşlar bu yazımızda MSSQL de bulunan View yapısından bahsetmek istiyorum. Bu yazının sonunda View yapısını nasıl yazıldığını ne işe yaradığını öğrenmiş olacaksınız.

View yapılarını bilinenin aksine sadece ihtiyacımız olduğunda kullanmamız işimizi kolaylaştıracağı gibi bizi gereksiz yüktende kurtaracaktır. Yerinde kullanıldığında veritabanında çok daha verimli çalışmalar yapmamızı sağlarlar.

Peki nedir bu view ? View’ler  bir veya birden fazla tablonun istenilen verilerinin bir arada sunulmasını sağlayan tanımlanmış sorgulardır. View leri sanal tablolar olarakda nitelendirebiliriz. Aynı oluşturduğumuz tablolar gibi satır ve sütunlara sahiptir. Birden fazla sütunun birleşerek tek bir komut altında topladığımızı düşünebiliriz. Hatta sadece tek bir tablo ile ilgili bir view oluşturduğumuzda İnsert Update Delete gibi işlemlerinide gerçekleştirebiliriz. View ler için sanal kelimesini kullanıyoruz çünkü üzerinde veri tutmazlar , sadece istenen veriye ulaşılması için bir araçtır aslında. Bir view yazdığımızda ne oluyor acaba ? Bize neler kazandırıyor bir göz atalım.

*İlk olarak birden fazla tablo ile çalışırken gereksiz karmaşadan kurtuluyoruz. Yani ne demek bu ? Biz uzun bir SQL sorgusu yazdığımızda her seferinde bu uzun ve karmaşık kodla uğraşmak yerine bir view işimizi görüyor.

*Bir diğer artısı ise veri ulaşım performansını arttırmak.

*Veri erişimini sınırlamak ve kontrol altında tutmak

View oluştururken dikkat etmemiz gereken hususlar:
Oluşturulan View de;
-Compute ya da Compute By cümleciği,
-Into anahtar sözcüğü,
-Option cümleciği
kullanılamaz.
-View’ler temporary tablo dediğimiz geçici olarak oluşturulan tablolara referans verilemez. Bu tablolardan veri istenemez.
-Order By cümleciği sadece TOP operatörü ile birlikte kullanıldığında kullanılabilir.
-Bir View farklı tablolardan gelen aynı isimlere sahip farklı sütunları içerebilir.
-View’lerdeki sütunlar aritmetik ifadelere sahip olabilir

-Bir view oluşturabilmek için database üzerinde sysadmin (system administrator),  db_owner (database owner), db_ddladmin (data definition language administrator) yetkilerine sahip olmalıyız.

Northwind veritabanını kullanarak örneklerimizi verelim ve bir view nasıl yazılıyor nasıl kullanılıyor görelim 😉

Syntax  olarak

CREATE VIEW [View_Ismi]ASSQL Kodları.

Haydi  sizle önce çok basit bir Select sorgusu sonra karışık bir select sorgusu ile örnek verelim.

Birde karmaşık olana bakalım.

Bu kadar uzun bir kodla ( hatta bundan daha uzunda olabilirdi belki ) her seferinde uğraşmak insanı yorabilir karışıklığa ve hatalara olanak sağlar işte bu karışıklık ve hatalara meydan vermemek için View kullanmalıyız diyoruz.

Kodlarla çok güzel yazdık bu View i peki hiç bilgimiz yoksa kod bilmiyorsak olamazmı ?  O zaman ne yapacağız bu View denen zıkkımı yaratmak için çok basit :

Öncelikle Object explorer penceresinde database imiz içersinde bulunan klasörlerden Views klasörüne sağ tık yapıyoruz ve New View diyoruz.

Ardından bizden hangi tablolarla alakalı çalışma yapmak istediğimizi soruyor bizde istediğimiz tabloları seçiyoruz.

Seçtikten sonra zaten biraz önce uzun uzun yazdığımız kodları bizlere otomatik olarak yazılmış halinin canlı halini getiriyor ekrana tek yapmamız gereken kaydetmek 😀

Basit olarak bir view oluşturma işlemi bu kadar arkadaşlar bir başka makalemizdede bu View in içindekine  , dibindekine , altında yatan koca ayzberge (iceberg) bakacağız

Görüşmek üzere…

Veritabanı (Database) Nedir ? 150 150 mezo

Veritabanı (Database) Nedir ?



Merhaba arkadaşlar

Biliyorsunuzki insanoğlu sürekli bir saklama derdindedir. Değerli olanı saklamak tüm canlıların doğasında vardır. Ne saklarız mesela ?  Para, önemli evrak ,ziynet eşyası vb. Hatta yaşam için önemli ve değerli olan yiyeceklerimizi bile buzdolaplarında belli bir düzenle saklarız değil mi ? Değerlimissss dediğimiz herşeyi gelebilecek tehlikelerden korumak için saklarız.

Teknoloji geliştikçe değerli şeylerde teknolojik olmaya başladı haliyle artık küçük bir veri ,bir hisse senedinden değerli olabiliyor günümüzde, o yüzden verilerimizide güvenli bir yerde muhafaza etmek isteriz. Bu arada veri ne diyecek olursakda: bilgisayarda  işlenmemiş ham bilgilere veya bilgisayarın alabildiği işleyebildiği sonuç üretip saklayabildiği herşeydir.Dağınık bilgi kümesidir ve anlamlı bir şekilde düzenlendiğinde yararlı bilgi olur. Peki veriler bizim için para ziynet eşyası vs  kadar önemliyse bu verileride güvenli bir yerde tutmalıyız. Bu yerin adıda VeriTabanı.

Peki veritabanı nedir ?

Veritabanı birbiri ile ilişkili veriler topluluğu, aynı zamanda veriyi yönetebilmek ve sunmak için kullanılan tablolar sorgular raporlardan oluşan nesneler topluluğudur. Sadece veriler yığını değildir ilişkileride inceleyip yorumlayabilirler.  Bir başka deyişle bilgisayarda sistematik şekilde saklanmış programlarca işlenebilecek veri yığınıdır.

Ne avantajı var veritabanının dersek ilk olarak veri tekrarından kurtulucaz sonra bellek tasarufu sağladığı için bilgisayarımız çok yorulmayacak , standart bir sorgu dili vardır onunla tüm işlemlerimizi yapabiliyor olacağız ve en önemliside veri bütünlüğümüz bozulmayacak.

Dezavantajı yokmu tabiki var  ilk olarak profesyonel bir kurulum gerektiriyor eğer doğru düzgün bir kurulum tasarım yapılmazsa sonradan işler bozulabilir tüm veriler kaybolabilir. Diğer dejavantaj ise  klasik dosya biçimlerine göre birazcık maaliyetli .

Verileri sistematik olarak depolayan yazılımlara ise  “Veri Tabanı Yönetim Sistemi” deniyor. Birçok yazılım bilgi depolayabilir ama aradaki fark, veri tabanın bu bilgiyi verimli bir şekilde düzenleyebilmesi ve ona hızla ulaşabilmesidir. Bilgiye gerekli olduğu zaman ulaşabilmek esastır. Bilgilerin bütünlük içerisinde tutulabildiği ilişkilerin incelenerek bir çok kriterle işlem gerçekleştirilen ve birden fazla kullanıcıya aynı anda bilgiye erişim imkânının sağlandığı programlardır.

Örneğin : MS-SQL Server, Oracle , Sybase, Acces,Postgre SQL

Veritabanı yazılımları yapı bakımından 2 ye ayrılırlar .

1-      Düz Dosya Veritabanı oluşturan programlar.

Tüm verileri tek bir tabloya sığdıran ve kayıtta ortak olan herhangi bir bilginin her kayıtta tekrarlandığı veritabanı uygulamalarıdır.

Bu tür programlara en iyi örnek Notepad , MS Word , MS Excel

2-      İlişkisel Veritabanı oluşturan programlar

Düz dosya veritabanı mantığının tam tersine bir çok farklı tablo kullanılan tablolar arasında ilişkiler bulunan bu ilişkileri düzenleyen yöneten sistemlerdir. Birden fazla tablo arasındaki geçişleride ilişkiler sayesinde daha hızlı erişim daha tasarruflu disk kullanımı sağlar ve güncelleme işlemi çok daha basit olur.

Veritabanı bileşenleri

Tablolar: Bir veritabanında verilerin saklandığı birimlerdir  ve birden fazla olabilirler aralarındaki bağ ile tek bir tablonun yükü diğer tablolara dağıtılmış olur ve peformans sağlar.

Raporlar: Raporlama Servisleri çeşitli amaçlar için veritabanındaki bilgileri düzenli kurallı ve isteğe uygun olarak raporlayan ve uygulamalarımızda bir dizi işlevsellik sağlayan servislerdir.

Sorgular: Veritabanı sistemi içersinde yer alan tablolardaki verilerin ilgili kodlar yardımı ile isteğe uygun olarak seçilerek belirli bir düzen içersinde sunulması olayıdır .

Umarım veritabanları ile ilgili fikir sahibi olmuşsunuzdur.

Görüşmek üzere.


C# _ Methods 329 374 mezo

C# _ Methods


Merhaba arkadaşlar programları yazarken çoğu kez bir işlemi birden fazla yerde yapmamız gerekebilir.  Bu da her seferinde aynı kodu yazmak anlamına geliyor ve buda bize hem zaman kaybı  hemde kod karışıklığına neden olacaktır. Peki buna çözüm olarak yapacağımız işlemle alakalı koda bir isim versek ve kullanmak istediğimiz yerde o kadar kodu tekrar tekrar yazmayıp sadece ismiyle çağırsak nasıl olur ? Bence süper olur 😀

Metotlar işte bu işlemi yaparlar bir isimle çağırılarak içersindeki işlemleri tek satırda çağırabilmemizi sağlar. Metotları bir işci olarak düşünebiliriz biz ona ne iş yapması gerektiğini söyleriz ve ismini söylediğimizde o iş yapılır.

Örnek olarak bir öğrenci takip programı yaptığımızı düşünelim. Bu program için ilk önce düşünülmesi gereken form Öğrenci Kayıt formudur ve bu form basit olarak aşağıdaki gibi bi görüntüye sahip olacaktır.

En basit işlemi düşünecek olursak doldurulmuş olan textBox ların temizlenmesini istiyorum ve bunun için form içersine bir Temizle butonu yerleştiriyorum ve bu butonda bütün butonları temizliyorum.

private void btnTemizle_Click(object sender, EventArgs e){

txtAd.Clear();

txtSoyad.Clear();

txtTcNo.Clear();

txtDogumYeri.Clear();

txtVeliAd.Clear();

txtVeliSoyad.Clear();

txtTelefon.Clear();

}

Çalıştırdığımda kodlarımın çalıştığını görüyorum tüm alanlar temizleniyor ;).  Buraya kadar bir sorunumuz yok. Peki Kaydet butonuma bastığımda kaydetme işlemleri tamamlandıktan sonra kullanıcının yeni kayıt ekleyebileceğinide hesaba katıp kaydetme işleminden sonrada textBoxları temizlememiz gerekiyor. Aynı kodları tekrar yazarsak sorun kalmaz ama sadece bu kadarla kalmasak ve bu formda 2 den fazla yerde textBoxları temizlemek istesek her seferinde bu kodları tekrar tekrarmı yazıcaz ? Diyelimki yazdık program çalışıyor. Daha sonra okul yönetimi bizden 2 textbox daha koymamızı istedi. Biz yazdığımız Clear kodlarına 2 satır daha eklememiz gerekicek ama bir çok yerde kullandığımız için bir tanesini bile unutsak sıkıntı çıkacaktır. Bu kodları merkezi bir yerde toplasak ve ihtiyacımız olduğunda sadece ismi ile çağırsak nasıl olur ? 😉

Metotda değişiklik yaptığımızda tüm farklı yerlerde kullandığımız kodlarda değişecektir. Gelin nasıl yapıyoruz bu işlemi görelim . Bir Metot tanımlayarak aynı işlemi birden fazla yerde yapalım 😉

Void MetotAdi()

{

Yapılacak işlem

}

private void btnTemizle_Click(object sender, EventArgs e){

Temizle();

}

private void btnKaydet_Click(object sender, EventArgs e)

{

Temizle();

}

private void Temizle()

{

txtAd.Clear();

txtSoyad.Clear();

txtTcNo.Clear();

txtDogumYeri.Clear();

txtVeliAd.Clear();

txtVeliSoyad.Clear();

txtTelefon.Clear();

}

Görüldüğü gibi tek bir metodu yani işçimi sadece adını çağırarak işimi yaptırabiliyorum. 😉

Void metotlar örnekteki gibi sadece içersinde tanımlanan işi yapar. Geriye bir değer döndürmezler.

Metot içersinde yapılan işlem sonucu geriye bir değer döndürmek istiyorsak geriye dönen değer tipinde bir metot oluşturmamız gerekir. Yani işçimize işini yap ama bana yaptığına dair bilgi getir diyoruz. J

Örnek olarak iki sayıyı toplayarak sonucu geri deger olarak döndüren bir metot yazalım.

private void btnTopla_Click(object sender, EventArgs e){

MessageBox.Show(Topla().ToString());

}

int Topla()

{

int sayi1 = 5;

int sayi2 = 6;

int sonuc = sayi1 + sayi2;

return sonuc;

}

Gördüğümüz gibi içeride yapılan işlemin sonucu metodun tipinde olmak zorunda.

Birde içeriye değer gönderebildiğimiz metot tipleri varki buda metot – işçi metaforunu tamamlayan unsurlardan biz işçimizin eline malzemeleri veriyoruz ona sadece o malzemelerle ona söylenmiş olan işi yapmak kalıyor. Ve yine bize bu malzemelerle yaptığı işin sonucunu dönmek zorunda.

private void btnTopla_Click(object sender, EventArgs e){

MessageBox.Show(Topla(5,6).ToString());

}

int Topla(int sayi1 , int sayi2)

{

int sonuc = sayi1 + sayi2;

return sonuc;

}

Ne kadar kolay değilmi ? 😉

Bir sonraki yazımızda görüşmek üzere.


C# _ Diziler _ Foreach Döngüsü 595 199 mezo

C# _ Diziler _ Foreach Döngüsü


Merhaba arkadaşlar bu yazımızda da dizileri anlamaya çalışacağız.  Bu yazı sonunda dzi nedir , nasıl tanımlanır dizilerdeki boyut dizilerin metotları ve foreach döngüsü ile alakalı bilgi sahibi olacaksınız.

Daha önce değişkenler ile ilgili bir yazımız vardı. Hatırlarsak değişkenler program içersinde bize geçiçi süre gerekli olan değerleri tutabildiğimiz yapılardı örneğin int sayi = 5; diyerek 5 sayısını sayi değişkeninde tutabiliyordum. Peki bu sayi değişkeninde birden fazla değer tutmam gerekirse bunu gerçekleştirebilirmiyim ? Cevap değişkenlerle hayır ama Dizilerle evet.

Sizinde anlayacağınız gibi dizi değişkenleri, aynı tipte birçok veriyi bir arada tutmayı sağlar. Benzer işlemlerde kullanılan değişkenler bir dizi altında listelenebilir. Yani ben sayi değişkenimi dizi olarak tanımlarsam o zaman birden fazla değeri içersinde tutabilirim.

Dizilerin tanımını yaptıktan sonra gelin bu dizi nasıl birşeymiş nasıl yazılırmış ona bir göz atalım.  Dizi tanımları veritiplerinin yanında [] simgeleri ile yapılır.

<veri tipi> [] dizi ismi = new <veri tipi> [dizi eleman sayısı]
String[] isimler;İnt[] sayilar;

Float[] paralar;

Byte[] yaslar;

Dizilerin kaç eleman içereceği, dizi tanımlanırken ya da daha sonra belirtilebilir. Şu şekilde tanımlanabilirler:

int[] sayilar = {3, 8, 2, 6};

int[] sayilar = new int[6]{4, 2, 5, 6, 7, 0};

int[] sayilar = new int[5];

Dizilerin indis numaraları 0 dan başlar ve devam eder. Orneğin isimleri tutacağımız bir dizi tanımladık:

string[] isimler = new string[4];

değerlerini atarken yapacağımız işlem şu olacaktır.

İsimler[0]=”Zeki”;

İsimler[1]=” Yudum”;

İsimler[2]=”Ali”;

İsimler[3]=” Orhan”;

Küçük bir dizi uygulaması yapalım. Bir dizi ve elemanlarını tanımlayarak ListBox içersinde bu değeri gösterelim.

İşte bu kadar kolay bir değişken tanımlar gibi fakat içersinde birden fazla değer taşıyabilen bir değişken gibi düşünebiliriz.

Peki birden fazla boyuta sahip diziler tanımlamak mümkünmü ?  Yani tanımladığımız dizinin 1 elemanıda birkaç değere sahip olsa …

Diziler tek boyutlu olduğu gibi, birkaç boyutlu diziler de tanımlanabilir.  Örneğin :

int [,] matris = new int[5,6];

Bu diziyi tanımladığımızda önce 5 elemanlı bir dizi ardından bu dizinin her elemanı içinde 6 elemanlık bir dizi tanımlamış oluruz.  Yani 2 boyut oluşturmuş oluruz.

Bu dizide bir boyut daha olsaydı, o boyutun her elemanı için diğer boyutlardaki 30 eleman bulunacaktı. Çok boyutlu dizilerin eleman sayıları boyutlarındaki eleman sayılarını çarparak hesaplanabilir.

int [,,,,] dizi = new int[boyut1,boyut2,boyut3,… ,boyutn];

Dizilerin boyutlarınada göz attıktan sonra gelin isterseniz bir kaç metodunada bakalım.

Dizilerin Metotları

Array.Resize();

Resize metodu mevcut dizimizin eleman sayısını istediğimiz kadar arttırır. Bir örnekle bakalım bu olaya bir form üzerinde listbox textbox ve butonumuz olsun ve textbox a yazdığımız değer string bir diziye ve listbox a eklensin istiyorum. İlk etapta ne kadar değer girileceğini bilemiyeceğimizden önce 1 elemanlı bir dizi tanımlıyorum ve her eleman eklendiğinde dizi boyutunu arttırıyorum.

Array.Clear();

Dizimiz içersindeki değerleri temizlemek isteyebiliriz işte bu gibi durumlarda Array.Clear kullanıyoruz. Biraz önce yaptığımız proje üzerinde ufak değişikliklerle Clear metodunu inceleyelim.

Foreach Döngüsü

Daha önceki yazımızda bahsettiğimiz döngüler arasında bir tane daha vardı ama ona bu konunun sonunda değinmek daha mantıklı sanki.

Foreach döngümüz bir dizi veya kolaksiyonun her elemanı için yapısındaki kodları çalıştıran bir döngüdür.

foreach (<tip değişkeni > in <koleksiyon> ){

Yapılacak işlemler

}

Bilgiyle Kalın…
M.Zeki Osmancık

C# | OOP Terminolojisi 150 150 mezo

C# | OOP Terminolojisi



Access Modifier : Bir tipe veya tipin üyelerine erişimi sınırlayan private, protected, internal, public gibi kelimelerdir.

Accessible Member : Verilen tip tarafından ulaşılabilen üyedir. Bir tip ile erişilebilen bir üye başka bir üye tarafından erişilebilir olmayabilir.

Accessor : Bir özellik (Property) ile ilişkilendirilmiş Özel (private) veri alanı (data field) üyenin değerini alan veya ayarlayan metodlardır. Okunur-Yazılır özellikler get ve set erişimcilerine sahipken salt okunur özellikler sadece get erişimcisine sahiptirler.

Anonymous Method : Bir delegeye parametre olarak geçilirilen bir kod bloğudur.

Base Class : Türetilmiş sınıf (Derived Class) tarafından miras alınan sınıftır (Inherited Class).

Call Stack : Çalıştırma zamanında (runtime) programın başından başlayarak çalıştırılacak ifadeye kadar olan yapılan metod çağrılarının dizisidir.

Class : Nesneyi tanımlayan, nesneye şablon oluşturan veri tipidir. Sınıflar veri ve veriyi etkileyen metodlardan her ikisini de içerebilirler.

Constructor: Bir sınıf veya yapı üzerinde bulunan ve o tipteki nesneleri oluşturan özel metodlardır.

Delegate : Bir metodu referans eden bir tiptir. Bir delege metoda atandığında tam olarak o metod gibi davranır.

Derived Class : Başka bir taban sınıfın davranışına ve verisine erişmek, geliştirmek veya değiştirmek için miras yöntemini kullanan sınıftır.

Destructor : Örneğin sistem tarafından sonlandırılmasını hazırlayan, sınıf veya yapı üzerindeki özel bir metodtur.

Event : Bir değişikliğin bilgilendirmelerini gönderen sınıf veya yapı üyesidir.

Field: Sınıfın ya da yapının doğrudan erişilen veri üyesidir.

Generics : Jenerikler, bir sınıf ya da metodun bir tip parametresi ile tanımlanabilmesine olanak sağlarlar. İstemci kodu tipin örneğini yaratırken parametre olarak tanımlanan tipi belirli bir tipte değişken olarak tanımlar. Böyle parametrenin hangi tipte olduğu tanımlandığından sınıf ya da metodta o tip olarak kullanılabilir.

IDE (Integrated Development Environment) : Derleyici, debug edici, kod düzenleyici ve tasarım araçları gibi çeşitli geliştirme araçları için birleştirilmiş bir arayüz sağlayan uygulamalardır.

Immutable Type : Örnek yaratıldıktan sonra, örneğinin veri, alan ve özellikleri değişmeyen tiplerdir. Değer tiplerinin çoğu böyle tiplerdir.

Inaccessible Member : Belirtilen bir tip tarafından erişilemeyen bir üyedir. Bir tipe Erişilmez bir üyenin başka bir tipe de erişilmez olması gerektiğine dair bir zorunluluk yoktur.

Inheritance : C#, Miras almayı destekler. Yani bir sınıf (class) taban sınıf (base class) olarak adlandırılan sınıftan türetilir ve aynı metod ve özellikleri miras alır. Bunu sınıfa Türetilmiş Sınıf (Derived Class) denir.

Interface : Sadece public metod, olay ve delegelere ait imzaları içeren bir tiptir. Arayüzü miras alan bir nesne arayüzde imzaları tanımlanan tüm metod, olayları geliştirmek zorundadır. Sınıflar veya Yapılar (Structs) herhangi bir sayıda arayüzden miras alabilirler…

Iterator : Öteleyici, bir sınıfın içerdiği bir koleksiyon veya diziyi (array) sınıf kullanıcılarının foreach ile kullanabilmesine olanak sağlar.

Member : Bir sınıf (class) ya da yapı (struct) üzerinde tanımlana alan (field), özellik (property), metod (method) veya olaylara (events) o sınıfın üyeleri (class members) denir.

Method: Bir sınıf (class) ya da yapı (struct) için davranışı sağlayan isimlendirilmiş kod bloğudur.

Mutable Type : Örnek yaratıldıktan sonra, örneğinin veri, alan ve özellikleri değiştirilebilen tiplerdir. Referans tiplerinin çoğu böyle tiplerdir.

Nested Type : Diğer bir tipi tanımının içinde tanımlanmış tiptir.

Object : Sınıf örneğidir (instance). Bir nesne bellekte bulunur ve verisi ve bu veriler üzerinde etkisi olan metodları vardır.

Property : Özellikler, erişimcileri aracılığı ile bir veri üyesine ulaştırırlar.

Refactoring :
Bilgisayar terminolojisinde bilgisayar yazılımının çıktılarını ve işlevlerini değiştirmeden iç yapısının yeniden düzenlenerek uygulamanın geliştirilmesi, iyileştirilmesi demektir. Kısaca önceden girilmiş kodun tekrar kullanılması diyebiliriz. Visual Studio C# düzenleyicisi akıllıca kodunuzu tekrar biçimlendirebilir. Mesela işaretlediğiniz bir kod bloğunu bir hamleyle bir metoda dönüştürebilirsiniz.

Reference Type : Bir veri tipidir. Referans tipi olarak tanımlanan bir değişken verinin depolandığı konumu işaret eder.

Static : Statik olarak tanımlanan bir sınıf ya da metod “new” anahtar kelimesi ile ilklendirilmeden varolabilir.
Örneğin Main() statik bir metoddur.

Struct : Tipik olarak bazı mantıksal ilişkileri olan değişkenler içermesi için kullanılan birleşik veri tipidir. Yapılar aynı zamanda metodlar ve olaylar içerebilirler. Miras almayı desteklemezken arayüz kullanımını desteklerler. Sınıflar referans tipiyken, yapılar değer tipidir.

Value Type : Öbek (Heap) üzerine yerleştirilen referans tiplerine karşın yığın (stack) üzerine yerleştirilen veri tipidir. Yapı ve null değer alabilen (Nullable) tiplerin de olduğu gibi Nümerik tipleri de içeren Yerleşik (built-in) tiplerin hepsi değer tipleridir. Sınıf tipi ve string tipi referans tipleridir.

kaynak: http://msdn2.microsoft.com/en-us/library/ms173231.aspx

Bilgiyle Kalın…
M.Zeki Osmancık

C# _ Döngüler _ For & While 490 448 mezo

C# _ Döngüler _ For & While


Merhaba arkadaşlar bu yazımızda C# programlama içersinde bulunan döngüleri sizlere anlatmaya çalışacağım. Bu yazının sonunda ardarda işlemleri nasıl kısa yolla yapabilirsiniz, for döngüsü ve while döngüsü ile ilgili bilgi sahibi olacaksınız. Haydi başlayalım… 😀
Döngüler programlarımızda ardarda yada sıralı şekilde yaptıracağımız işlemleri için kullanılır. Fazla kod ,zaman kaybı ve performans açısından yarar sağlarlar. Diyelim ki öğrenci kaydı yapabileceğimiz bir windows form tasarlıyoruz ve bu windows formu üzerinde combobox nesnemiz yer almakta yıl kısmının yanlış yazılmasını engellemek için biz girerek kişinin sadece seçme işlevini yerine getirmek istiyoruz. İlk aklımıza gelen ComboBox nesnemizin items özelliği üzerinden tüm bilgileri girmek oldu değilmi ?

İster items özelliğinden dolduralım istersek kod ile dolduralım yinede bu işlem bize inanılmaz vakit kaybına neden olacaktır. Peki bir kolay yolu yokmu bu işi yapmanın tabi ki var. Döngüler bu konuda bizlere yardımcı oluyorlar.   Yukarıda bahsettiğimiz işlem için sadece döngü kullanmamız yetecektir.

For Döngüsü

for (başlangıç; koşul;artım){

Yapılacak işler;

}

Belirtilen başlangıç değerinden itibaren koşul sağlanana kadar içine yazılan kod parçasını çalıştırır ve bize sıralı işlemlerimizi hızlıca yapmamızı sağlar. Buna göre yukardaki işlemimiz nasıl oluyor görelim.

Ne kadar kolay değilmi ? 😀

Peki bu for döngüsü içersinde bir erken geçiş sağlamak istersek o zaman ne yapmalıyız?

for (int i = 1950; i < 2010; i++){

if (i == 1965)

{

continue;

}

comboBox1.Items.Add(i.ToString());

}

Biraz önce ki doldurma işlemi sırasında bir koşul sağlanıyorsa o koşulun sağlandığı değeri atlayarak döngü devam eder. Yani burada i 1965 olduğunda o satırdaki işlemi atlayacak ve 1966 dan devam edecek

Continue ile oluşan işlemi anladıysak birde koşul sağlandığında döngü işlemine son veren bir kodumuz daha var :

Break

for (int i = 1950; i < 2010; i++){

if (i == 1965)

{

break;

}

comboBox1.Items.Add(i.ToString());

}

MessageBox.Show(“Döngü Sonlandırıldı.”);

Yine aynı işlem için break işlemi yapıldığı zaman koşul sağlanıyorsa döngüden çıkarak sadece 1965 e kadar olan sayıları ComboBox nesnesi üzerine ekler.

Return

Bir döngünün sonundaki erken geçişi sağlar koşul sağlanmıyorsa hiç bir işlem yapmadan çıkar.

for (int i = 1950; i < 2010; i++){

if (i == 1965)

{

return;

}

comboBox1.Items.Add(i.ToString());

}

MessageBox.Show(“Döngü Sonlandırıldı.”);

While Döngüsü

Bir başka döngü türü olan while bir koşul sağlanıyorken dönmeye devam eden döngü çeşididir. Koşul false ise döngü sona erer.

while(koşul){

Yapılacak işler;

}

Aynı örneğimizi While ile yaptığımızda bu kez biraz syntax değişiyor ama yaptığımız işlem aynı.

Koşulumuz sağlandığı sürece yani i 2010 dan küçük olduğu sürece işlemimizi sürdürdü ve yine aynı örneğimizdeki Combobox itemlerini ekledik.

While i en güzel anlatan örnek belkide Eşşek Sudan Gelinceye Kadar Dayak Yemek deyimi.

Hadi gelin bu örneği yapalım 😀

Do While Döngüsü

Diğer döngülerden farkı koşul sonda kontrol edilir. Buda döngünün en az 1 kere çalışacağı anlamına gelir.

Do{

Yapılacak işler;

} while (koşul);

Bilgiyle Kalın…
M.Zeki Osmancık

ASP.Net _ Data Cache 1024 608 mezo

ASP.Net _ Data Cache


Merhaba arkadaşlar bir önceki yazımızda sayfamızı bir bütün olarak nasıl  cache leyebileceğimizi gördük . Bu yazımızda ise senaryomuz farklı . Bir e-ticaret sitemizin olduğunu varsayalım ve bu sayfa üzerinde birden fazla alan bulunmakta kategoriler, markalar, yeni ürünler , indirimli ürünler gibi ayrı ayrı ama hepsi veritabanından gelen veriler bulunmakta. Bu sayfamızı bütün olarak cache e koyduğumuzda ürünlerde indirimli ürünler gibi sürekli değişebilirliği bulunan alanlarda aynı cache içersinde bulunacağından değişiklikler kullanıcılara yansımayacaktır. Peki nasıl olacak bu iş ?
Biz sayfamız içersinde değişmeyecek alanlarımızın olduğunu biliyoruz örneğin kategoriler markalar gibi alanlar bunlar kolay kolay değişmez yada güncellenmez. Sayfayı komple cache işlemine almaktansa sadece bu alanların doldurulduğu DataTable nesnesini cache işlemine alsak yani sadece sayfada istediğimiz alanları cache işlemine dahil etsek  süper olmaz mı ? Tıpkı aşağıdaki resimdeki alanlar gibi.

İşte bu işlemide data cache ile yapabiliriz kullanımı OutputCache den biraz farklı ama eminimki seveceksiniz.  Bu işlem için DataTable döndüren bir property  e ihtiyacım olacak bu property içersinde bilgileri alıp cache işlemine dahil edeceğiz.

Property ‘miz hazır artık içersine bir Datable gönderdiğimizde içersinde cache işlemini yaparak tekrar cache lenmiş datatable döndürecek.  Bu property i hazırladıktan sonra işimiz çok kolay sadece en basit olarak datalarımızı veritabanından çekmek kalıyor.

Datamızı çekerken bir noktaya dikkatinizi çekmek istiyorum öncelikle MyData boşmu diye kontrol ettikten sonra bağlantımızı kurup sorgumuzu yollayıp verilerimizi alıyoruz ve Datatable ile karşıladığımız verilerimizi MyData ya atıyoruz. Ardından Repeater nesnemizin DataSource ‘ una MyData yı verdiğimizde cachelenmiş veri nesnemizin veri kaynağı olarak belirleniyor ve belirtilen süre içerisinde  bu veriler diğer alanları etkilemeyecek şekilde cache işlemine dahil edilmiş oluyor. Fakat bu işlemi uyguladığımızda  eğer veritabanında değişiklik olursa ve belirttiğimiz cache süresi bitmeden sayfaya istekte bulunursak görünürde bilgiler hiç güncellenmiyormuş gibi görünecek çünkü MyData içersinde veriyi cache işlemine dahil ederken kullandığımız Cache.NoAbsoluteExpriration deyimi cache süresinde kayma yapar.

Yani cache süremizi 30 dakika olarak düşünürsek ilk sayfa için istekte bulunulduğunda datamız cache lenecek daha sonra 30 dakika hiç istek olmazsa veritabanından yeni verileri çekerek yeni bir cache oluşturacak. Peki ya bu 30 dakika dolmadan 15. Ci dakikada bir istekte bulunulursa o zaman ne oluyor ? o zamanda “sliding” yani kaydirma işlemi yapılarak istekte bulunulduğu dakikaya bir 30 dakika daha ekleyerek cache süresini uzatıyor.  Yani 12:00 da istekte bulunulan sayfada cache yenileme süresi 12:30 oalcaktır fakat 12:15 de  tekrar bir istekte bulunulduğunda cache in yenilenme süresi 12:45 olarak değişecektir.

Bu yöntemden başka yöntemlerde var.  Biz MyData içersine datatable gönderdiğimizde içerdeki işlemler sırasında eğer NoAbsoulateExpiration değilde NoSlidingExpiration kullanırsak bu kez bizim sayfa isteklerimizi dikkate  almadan sadece belirttiğimiz cache süresinin bitmesini bekleyecek ve süre bitiminde cache işlemini yeniler.

Böylelikle sayfamız içersinde belirttiğimiz üzere birden  fazla database ile ilgili bölüm olsada biz sadece Kategoriler bölümünü yada sadece markalar bölümünü Cache işlemine dahil etmiş olacağız bu bilgi için tekrar tekrar DB ye bağlanmak zorunda kalmayacağız.

Umarım yararlı olur. Görüşmek üzere.

Bilgiyle Kalın…
M. Zeki Osmancık

ASP.Net _ Output Cache 469 492 mezo

ASP.Net _ Output Cache


Merhaba Arkadaşlar
Bu yazımda sizlere ASP.Net ile dinamik web siteleri yaparken performansı etkileyecek bir yapıdan bahsetmek istiyorum. Genellikle bu tip web sayfalarında veriler veritabanından çekilir. Bir sayfada, her seferinde veritabanına bağlanmak ve özellikle farklı tablolardan veri çekiyorsak, performansı önemli derecede etkiler .Herseferinde veritabanına gidip farklı tabloları bulup verileri web sayfası üzerine çekmek sayfayı yavaşlatır kullanıcıyı usandırır. Yavaş bir web kullanıcı üzerinde negatif bir etki yaratır. Bunun için ne yapmak gerekiyor peki ?
Sayfalarımızda bulunan verinin güncellenme sıklığına göre belirli bir süre tüm verileri Cache işlemine tabi tutsak ve kullanıcı sayfayı çağırdığında her seferinde veritabanına bağlanmaktansa cache te var olan veriyi göstersek çok daha performanslı olmazmı ? Belirtilen süre bittiğinde ise 1 sefer gidip veritabanından bilgileri alıp tekrar cache içersine doldurduğumuzda tadından yenmez . 😀
Peki sayfamızı Cache dediğimiz yapı içersine almak için ne yapmak gerekiyor ?

Yapmamız gereken sadece aspx sayfamızın ilk satırlarına yukardaki yapı gibi
<%@ OutputCache Duration=”30″ VaryByParam=”none” %> kodunu eklemek olacak böylelikle sayfamız outputcache ile komple cache işlemine tabi olacak ve Duration kısmında belirttiğimiz saniye cinsinden süre kadar cache de kalacak. Sizde bir sayfa üzerine basitçe veritabanından veri çekerek bu işlemi uygulayın ve veritabanını güncelledikten sonra sayfanızıda güncelleyin verdiğiniz Duration süresi boyunca sürekli güncellemeden önceki bilgiler gelecek.Duration süresi bittikten sonra tekrar veritabanına bağlanarak tekrar bir cache yapacaktır. Bunu sizin de yapmanızı istedim çünkü etkisini mutlaka görmelisiniz.

Senaryomuz şu olsun : Diyelimki biraz önce belirttiğim sayfanız üzerine çektiğiniz bilgi ürün kategorileri olsun. Bu kategoriler hangi sıklıkla güncellenir? Ancak yeni bir ürün grubu geldiğinde değilmi ? Buna göre sayfa üzerinde  sürekli veritabanına bağlanıp güncel kategori bilgileri ile dönmesinin bir anlamı olmaz. Bu sayfayı 1  günlük cache işlemine aldığımızda ilk kullanıcı sayfayı açtığında veriler cache atılacak daha sonra tüm gün veritabanına bağlanmayacak SqlServer için ne kadar rahatlatıcı değilmi ?J

Kategorilerin olduğu sayfayı cache e attık çok güzel!  Birde bu kategorilere tıkladığımzda o kategoriye ait olan ürünleri gösteren bir  Ürünler sayfamız olsa ve QueryString ile gelen kategoriID si ne göre ürünleri gösterse ve bu ürünler sayfasınıda Cache atmak istesek aynı işlemi uygulasak ????

Belirttiğimiz süre içersinde hangi kategoriye tıklarsak tıklayalım hep aynı kategoriye ait ürünler görülecektir.

Bu sorunuda <%@ OutputCache Duration=”30″ VaryByParam=”CatID” %>  kodu içersinde belirttiğimiz VarybyParam değeri ile düzenleyebiliyoruz. Bu değer bize cache işleminin hangi parametrelere göre yapılacağını belirttiğimiz bir değer. Buna göre VaryByParam değerine querystring deki kategoriID sini taşıyan parametreyi verirsem kategoriler sayfasında kategorilerden hangisine tıklarsam tıklayayım diğer sayfadaki cache işlemi o kategoriID sine göre düzenlenerek bize farklı kategorilerdeki ürünlerinde görüntülenmesini sağlayacaktır.

Her zaman kategori bilgisini farklı sayfadan göndermeyebiliriz. Bir sayfa içersinde bir dropdownlist içersine listelenmiş kategori bilgileri ilede aynı sayfa üzerinde ilgili ürünleri listelediğimizi varsayarsak. Aynı  yöntemle yapmaya kalkarsak yine sorun çıkacaktır çünkü burada parametre olarak querystring kullanmıyoruz bir kontrol kullanıyoruz. Bu kez ise VaryByParam yerine VaryByControl kullanıyoruz.  <%@ OutputCache Duration=”30″ VaryByControl=”DropDownList1″ %>

Parametrenin hangi değere göre cache işlemine gireceğini değeri nereden alacağını belirtmiş oluyoruz. Böylece aynı sayfa içersinde bulunan controllerin durumuna görede cache işlemini şekillendirmiş oluyoruz.

Gelin biraz işin içine , işin dibine , işin altında yatan koca ayzberge (iceberg)  bakalım 😀

OutputCacheModule ASP.Net içersinde bir HTTP Modul olarak implement olmuştur ve  System.Web.Caching namespace i içersinde yer alır. Bu modül sayfa içersindeki isteklerin yaşam alanı içersinde  gerçekleşecek olan olayları dinler ve ilgili bir olay(event) çalışırsa harekete geçer.HTTPModule  OutputCacheModule’ e ,  ResolveRequestCache ve UpdateRequestCache olayları ile katkıda bulunur.  ResolveRequestCache olayı tetiklendiğinde, modul gelen isteğin sonucunda dönecek olan sayfanın outputcache dahilinde olup olmadığına karar verir. Eğer cache işlemi varsa cache version bilgisi döner,cache bilgisi yoksa sayfa normal render edilir.  Geriye dönen cache bilgisine göre UpdateCacheModule çalışır. Bu modül çalıştığı zaman ise render edilen sayfa cache işlemine alınır.

Aşağıdaki diagram outputcachemodülünün çalışmasıyla ilgili bir fikir verecektir.

Başka yazılarda tekrar görüşmek üzere

Bilgiyle Kalın…
M.Zeki Osmancık

 

C# _ Karar Yapıları _ If-Else & Switch 522 236 mezo

C# _ Karar Yapıları _ If-Else & Switch


Gerçek hayatta bizlerin bazı kararlar almak zorunda kaldığımız gibi programımızada karar alma yeteneğini kazandırabiliriz çıkabilecek tüm sonuçları değerlendirerek ilgili işlemi yapabilecek duruma gelebilir. Kısacası programımıza düşünme yeteneği kazandırabiliriz.

If – Else Karar Yapısı

If..Else deyimi bir Boolean ifadeyi degerlendirerek program denetimi belirtilen deyim gruplarına geçirir. Basit bir örnek olarak tatile çıkmak istiyorsunuz ve mevcut paranız 500 lira. Afirmasında  1 haftalık tatil 900 lira   ,Bfirmasında 850 lira ,Cfirmasında 450 lira ,Dfirmasındada 300 lira bu 4 firma arasında seçim yapmak gerekirse ilk iki firmayı eledik bile. C ve D firmaları arasındaki seçimimizede orada yapacağımız harcamaları göz önünde bulundurarak değerlendirecek olursak en uygun D firması olacağına karar veririz. İf yapılarıda bu şekilde çalışır. İf karar blogları aşağıda belirtilen formatta yazılır.

Bir çok program ve web sitesinde gördüğümüz kullanıcı adı ve şifrenin doğru olduğuna karar verdiğimiz basit bir program yazalım.

Swicth – Case

Mantık olarak “if else” koşul yapısına benzer. Kendisine gönderilen parametreyi değerlendirir ve ona göre ayrılan kod bloğunu çalıştırır. Yani eleme yaparak parametrenin sahip olduğu değeri ile eşitlenen kod bloğunu çalıştırır.

switch(değişken)

{

case kosul1:

//kodlar bu panele gelecek

break;

case kosul2:

//kodlar bu panele gelecek

break;

case kosuln:

//kodlar bu panele gelecek

break;

default:

//eğer hiç bir koşul desteklenmiyorsa bu koşul gerçekleşecek

break;

}

Bilgisayarımızın saatini kontrol ederek günün çeşitli zamanlarında bize karşılama mesajı çıkartan bir uygulama yazalım

Bilgiyle Kalın…
M.Zeki Osmancık

Algoritma 503 345 mezo

Algoritma


Algoritma Nedir?

Algoritmalar bir işin nasıl yapıldığını adım adım hangi etaplardan geçerek gerçekleşeceğini gösteren bir çalışma planıdır aslında. Algoritmalar  programlama dili değildir  sadece programlama dillerine klavuz görevi gören bir yöntem dizisidir.Algoritmalar yazılı şekilde olabileceği gibi semboller dizilimi ilede  karşımıza çıkabilirler.

Algoritmalardaki yöntemler sırası

  • Veri Girişi
  • İşlem
  • Kararlar

Veri Girişi : Yapılan uygulamaların runtime kısmında kullanıcı tarafından girilecek olan verilerdir.

Kararlar: Karar ve kontrol yapıları algoritmanın akışını yönlendiren önemli kavramlardır. Girilen veya işlem sonucu elde edilen veriler kontrol edilerek algoritma istenilen yere yönlendirilir.

İşlem: Algoritmada belirtilen kararlar ve girilen veriler ile hangi işlemlerin gerçekleşeceğini belirtiğimiz yöntemlerdir.

Özellikleri

  • Girdi: Sıfır veya daha fazla değer dışarıdan verilmeli.
  • Çıktı: En azından bir değer üretilmeli.
  • Açıklık: Her işlem (komut) açık olmalı ve farklı anlamlar içermemeli.
  • Sonluluk: Her türlü olasılık için algoritma sonlu adımda bitmeli.
  • Etkinlik: Her komut kişinin kalem ve kağıt ile yürütebileceği kadar basit olmalıdır.

Akış Diagramları

Bu diagramlar daha anlaşılır bir  yapıya sahip olmaları için bazı semboller ile belirtilen algoritma yöntemidir.Akış diagramları farklı semboller yardımı ile hazırlanırlarşekilleri itibari ile anlaşılması kolay problem çözümünde

yardımcı bir yöntemdir. Şimdi bazı diagram şekillerini tanıyalım ve bir işlemin algoritmasını çizelim.

Çay Demleme İşleminin Algoritması

•      Kullanıcıdan su verilmesi beklenir.

•      Suyu ısıtma işlemi yapılır

•      Suyun kaynadığı kontrol edilir. Kaynamamışsa ısıtmaya devam eder

•      Demliğe çay konulur.

•      Kullanıcıdan alınan demleme bilgisi ile şimdiki zaman toplanır ve süre bulunur .

•      Şimdiki zaman küçükse çay demlenmeye devam eder.

•      Çayın demlendiği mesajla bildirilir.

Çay Demleme İşlemi Algoritma Diagramı

Bilgiyle Kalın…
M.Zeki Osmancık

C# _ Hatalar ve Giderilmeleri _ Try-Catch 353 238 mezo

C# _ Hatalar ve Giderilmeleri _ Try-Catch


Hata Nedir ?

Programcılar veya programı kullanacak olan  son kullanıcılar kimi zaman bazı kullanım yada mantıksal hatalar yapabilirler. Bu hatalar gözden kaçabilen mantıksal hatalar olabilir son kullanıcının programı kullanması sırasında veya test aşamasında karşımıza çıkabilir. İşte bu hataların giderilmesi hata çıktığı anda işlem kod bloğunu terk etmesi için işlemlerimizi try bloğu içersinde yazıyoruz bu blog içersinde bir hata meydana geldiğinde catch bloğu ile hata durumunda ne gibi bir işlem yapacağımızı belirtiyoruz.

Hatanın Yakalama

Örnek olarak iş yerimizde çalışan sarışın bir sekreterimiz için 2 sayıyı toplaması için çok basit bir hesap makinesi yazmış olalım. Sekreterimiz bu hesap makinesini kullanırken sayısal değerler kullanmak zorunda. Peki sayısal olmayan bir değer girdiğinde programın tepkisi ne olacaktır ?

Bu sorunu program içersinde hata kontrolü yaparak çözebiliriz. Eğer işlem bloğumuzda hata oluşursa hata yakalanacak işlemden çıkacak ve hata durumunda ne yapmasını istemişsek onu yapacak.

Finally

Birde programlarımızda hata olsun yada olmasın çalışmasını istediğimiz bazı kodlar yapılmasını istediğimiz işlemler olacaktır. Bunlar hata çıkması durumunda bile çalışacak olan kod bloklarıdır. Finally blogu içersinde yer alan kodlar her ne hata olursa olsun çalışacaktır.

Bilgiyle Kalın…
M.Zeki Osmancık

C# _ Değişkenler ve Veri Tipleri 507 316 mezo

C# _ Değişkenler ve Veri Tipleri


Merhaba arkadaşlar bu yazımda sizlere değişkenler denilen yapıları anlatmaya çalışacağım. Haydi başlayalım 😉

Değişken nedir nasıl tanımlanır?
Bir program çalıştırırken tüm veriler geçici olarak hafızada tutulur. Değişkenler bu verilerin isimlendirilmesi işlemidir. Değişken mantığı günlük yaşamdada çok kullanılan bir mantıktır aslında. Aklımızdan iki sayı tutmamız istendiğinde ve bu sayılarla alakalı işlem yapmamız istendiğinde aslında isimlendirecek olursak sayi1 ve sayi2 olarak o sayıları aklımızda tutuyoruz. İşte bu sayi1 ve sayi2 sadece o an geçiçi bir süre içinde işlem yapmamız için kafamızda ürettiğimiz değişkenlerdir. Programlamadada geçiçi olarak veri tutmak istediğimizde değişkenleri kullanırız.
<veri tipi> <değişken adı>; şeklinde tanımlanırlar.
string isim;
int rakam;
Tanımlama Kuralları
•Tanımlanan değişkenlerin tipleri değişken isminden önce belirtilir.
•Değişken isimlerini belirlerken bazı noktalara dikkat etmek gerekir. Boşluk, nokta, soru işareti, noktalı virgül, çift tırnak, tek tırnak, aritmetik  operatörler, karşılaştırma ve atama operatörleri, parantezler kullanılamaz.
• Sayı ile başlayamaz.
•Visual C#.NET dilinde tanımlı anahtar kelimeler kullanılamaz.
•Değişken isimlerinde Türkçe karakter kullanılırsa, farklı dil seçenekli işletim sistemlerinde çalışma anında hata üretecektir.

Veri Tipleri

Değişkenler program içinde, tuttukları verilere ulaşmak için kullanılır. Ancak değişkenlere ulaşmak, tanımlandıkları yerde veya alt  bloklarda mümkündür. Bu kavrama değişkenlerin kapsam alanı (Scope) denir.
Kapsam alanı dışındaki bir yerden değişkene ulaşılamaz.

Veri tipi, değişkenlerin tuttukları değerlerin türünü ve bellekte tutulacak boyutunu tanımlar. Değişkenleri veri tipleri ile tanımlarken verinin  boyutuna göre bir veri tipi seçilmelidir. İki tip veri tipi mevcuttur Değer Tipleri (Value Type)  ve Referans Tipleri (Reference Type)

Değer Tipleri (Value Type)

Değer tipleri veriyi direk olarak bellek bölgesinden alırlar

Referans Tipleri (Reference Type)


Visual Studio 2008 Genel Bir Bakış 500 339 mezo

Visual Studio 2008 Genel Bir Bakış


Merhaba Arkadaşlar.

Yazıya başlamadan önce sizleri bir terim ile alakalı bilgilendirmek istiyorum bu terim ; IDE  sakın harddisklerdeki bağlantı türü ile karıştırmayın 😉 IDE = Integrated Development Environment yani Entegrasyonlu Geliştirme Platformu programların gelişme aşamalarının gerçekleştiği platformlardır. Farklı diller için farklı IDE ler geliştirilmiştir.

Biz bu IDE ler içersinde en gelişmiş olanını kullanacağımız için bende bu gelişmiş IDE yi sizlere basitçe tanıtmak istedim. Kullanacağımız IDE :

Visual Studio

Teknolojisini basit cümlelerle anlatmak zor elbette ama özetlemek gerekirse çok gelimiş özelliklere ve yardımcı araçlara sahip bir IDE dir. Sadece tek bir dil için geliştirilmemiştir bir önceki yazımızda bahsettiğimiz  .Net uyumlu tüm programlama dillerinin desteklendiği ve aynı projelerde dahi çalıştırılabildiği bir ortamdır.  Program geliştirenlere kullanışlı ve kolay bir ortam sağlayarak uygulamaların daha işlevsel olması konusunda bizlere destek sağlar.

Peki ne var bu Visual Studio nun içersinde.

Visual Studio’yu genel görünüm olarak 4 bölümde inceleyebiliriz;

*Çalışma Sayfaları

*Araç Çubukları

*Menüler

*Pencereler

Visual Studio programımızı ilk açtığımızda bizi Başlangıç sayfası karşılıyor ve bizlere (eğer internete bağlıysak) MSDN den çeşitli gelişme ve haberleri sunuyor. Visual studio içersinde web sayfalarıda açabiliyorsunuz bu arada. Start Page başlangıç sayfamızın bulunduğu kısma daha sonra projelerimizi yazacağımız sayfalarda geliyor işte bu alana Çalışma Sayfaları diyoruz. Sekmeler halinde pencerelerle çalışabileceğimiz bu çalışma alanı hem form veya web sayfaları tasarımlarında hemde kod yazarken çokça kullanacağımız bir alan olacaktır.

İkinci olarak çoğu programda gelenek haline gelmiş olan Araç Çubuklarımız var. Bu araç çubukları menü komutları için görsel kısayollar sunarak işimizi kolaylaştırırlar. Benzer işlemler aynı araç çubuğu üzerinde gruplanarak kullanım dahada işlevsel hale gelir. Yada istersek biz bu araç çubukları üzerindeki görsel kısayolları değiştirerek kişiselleştirebiliriz de.

Üçüncü olarak hemen hemen her programda  görmeye ve kullanmaya aşina olduğumuz Menüler aslında tüm programlarda benzer niteliklerdedir. Çeşitli komut ve yardımcı pencerelere ulaşmamızda bize kolaylık  sağlarlar.

Menülerde bulunan temel başlıkları kısaca tanıyalım :

File: Adındanda anlaşılacağı gibi dosya işlemlerinin yapıldığı menüdür yeni proje yada varolan projelerin açılması gibi işlemleri bu menü seçeneği içersinde bulunan seçeneklerden yönetebiliriz.

Edit : Tüm yazı ile ilgili düzenleme işlemlerinin yer aldığı menüdür. Kopyala Kes Yapıştır Bul Değiştir gibi seçenekleri mevcuttur.

Project: Üzerinde çalıştığımız projenin özelliklerinin yönetilebileceği referans ve dosya ekleme çıkarma gibi işlemlerin var olduğu menüdür.

Built: Geliştirdiğimiz projelerin çalıştırılmak üzere içersinde bulunan komutların derlenmesi için gereken komutlara ulaşabildiğimiz menüdür.

Debug : Adındanda anlaşılacağı gibi Hata bulma ve ayıklama ile ilgili tüm seçeneklerin bulunduğu menüdür.

Tools : Visual Studio ile birlikte yüklenen yardımcı araçların bulunduğu menüdür. Ayrıca Visual Studio ile alakalı ayarların yapılabildiği Options seçeneğide bu menü  altında yer alır.

Ve Help menüsü sanırım bunun açıklamasına gerek yoktur. =)

Visual Studio içersindeki yolculuğumuza devam edelim çalışma sayfaları araç çubukları menüler derken son olarak belirttiğimiz Pencereler  seçeneğine geldik

Dördüncü ve son olarak bahsedeceğimiz Pencerelerden kasıt ise Visual studio içersinde uygulama geliştirme aşamasında sık sık kullanılabilecek olan birçok elemanı bir araya getiren yada durum belirten pencerelerdir.

Bu pencerelerden çok kullanılan bir kaçını tanımlamak gerekirse:

Properties: Projedeki tüm öğelerin özelliklerinin yer aldığı bir penceredir. İstenen değişiklikleri yine bu pencere üzerinden gerçekleştirmekde mümkündür.

ToolBox :Projelerde kullanılan çeşitli kontrollerin listelendiği penceredir. Buradaki öğeler sekmeler içersinde gruplanmıştır.

Solution Explorer : Projeler bir solution (çözüm) içersinde yer açılır. Bir çözüm içersine farklı dilde ve tipte projeler dahil edilebilir.Bu pencere solution yapısını gösterir ve ilgili işlemlerin yapılmasına olanak sağlar.

Uygulama geliştirirken en çok kullanacağımız pencereler olacaktır.

Visual Studio yu basitçe olsa tanımış olduk geliştirme ortamını etkin bir şekilde kullanmak önemlidir. Bu yüzden bu yazının klavuzluğunda  sizde biraz merak ile Visual Studio içersinde ne var ne yok karıştırarakda bulabilirsiniz.

Görüşmek Dileğiyle.

Microsoft .Net ‘ e Giriş 547 203 mezo

Microsoft .Net ‘ e Giriş

Merhaba arkadaşlar programlama ile alakalı ilk makaleme tabiki işin en başından başlamam gerekiyor.  Elimden geldiğince size yararlı bilgiler sunmaya çalışacağım.Programlama dilleri ile ilgileniyorsak bu kelimeyi cok duymussunuzdur.
.NET
Peki nedir bu .Net denilen şey ?Tek başına tanımlanamayacak bir sistemler bütünüdür aslında; Microsoft tarafından geliştirilen  farklı teknoloji , araç ve programlama dillerinin bir arada, tek bir iskelet üzerinde çalışmasına olanak veren uygulama geliştirme platformudur.
Uygulama derken neyi kastettim peki , aslında o kadar geniş bir kavram ki .Net platformunda uygulama diyorsak eğer  aklınıza gelebilecek her türlü uygulamayı bu kelime içersine sığdırabiliriz. Web ,Windows,Mobile vb bir çok uygulamayı geliştirmemize olanak tanır .
.Net güzel bir şeymiş tanımını duyunca heyecanlandık . Nasıl çalışır peki ? Nasıl bu kadar geniş bir çerçevede programcılara özgürlük sunabilir. Gelin .Net içersinde kısa bir yolculuk yapalım:
Öncelikle .Net ile uygulama geliştirebilmemiz için onun kaynağını bilgisayarımıza yüklemiş olmamız gerekiyor.   BCL (Base Class Library ) Temel Sınıf Kütüphanesi  adı verilen bu kütüphane uygulama geliştirmek için gerekli olan arayüz ,sınıf ,fonksiyonları barındırır bizlerde bu arayüz sınıf ve fonksiyonları kullanalarak uygulamalarımızı kolayca geliştirebiliriz.
.Net çok güzel  ve kütüphane olmak zorunda bunları öğrendik   peki asıl soru geliyor hangi programlama dilini kullanmak gerekiyor?
Microsoft bu soruya bizim için çok radikal bir biçimde karar vermiş bile .Net platformunu destekleyen herhangi bir programlama dili cevabı sanırım bizim için yeterli . Her .Net uyumlu dilin kendine özgü bir derleyicisi vardır. Herhangi bir dilde yazılmış uygulama derlendiğinde o dilin derleyicisi kodları ortak bir dile çevirir.
Oluşan bu ortak dilin adı ise MSIL (Microsoft Intermediate Language) yani Microsoft un Ortak Dili . .Net platformu destekli programlama dillerinden herhangi biri veya birden fazlası ile bir uygulama geliştirdiğimizde o dilin derleyicileri  kodları alıp MSIL e çevirerek hepsinin aynı anda makine diline çevrilmesini sağlar.
Buraya kadar geldik yolculuğumuz sürüyor uygulamamızı yazdık derledik  MSIL e çevirdik daha sonra bu kodların işletim sistemine ulaşması gerekiyor yani makine kodlarına çevrilmesi gerekiyor bu işide
CLR devralıyor ve MSIL kodlarımızı alıp makine koduna çeviriyor ve işletim sistemine iletiyor.
Bu işlemi yaparken JIT (Just In Time) derleme yöntemini kullanarak görevini tamamlıyor.
Böylelikle  .Net platformunda geliştirdiğimiz bir uygulamamızın hangi devrelerden geçerek karşımıza geldiğini ve azda olsa .Net platformunun mantığını umarım anlayabilmişsinizdir.
Sonraki Yazılarda Görüşmek Üzere…

Japonlar ve KöpekBalığı 300 225 mezo

Japonlar ve KöpekBalığı

Japonlar taze balığı hep çok sevmişlerdir. Fakat japonya sahillerinde bol balık bulmak mümkün olmamaktadır. Balıkçılar, Japon nüfusu doyurabilmek için daha büyük tekneler yaptırıp daha uzaklara açılabilmişlerdir. Balık için uzaklara gidildikçe, geri dönmesi de daha çok vakit alır olmuştur.Dönüş bir- iki günden daha uzarsa, tutulan balıkların da tazeliği kaybolmaktadır. Japonlar tazeliği kaybolmuş balığın lezzetini sevmemişlerdir. Bu problemi çözebilmek için balıkçılar teknelerine soğuk hava depoları kurdurmuşlardır. Böylece istedikleri kadar uzağa gidip, tuttuklarını da soğuk hava deposunda dondurulmuş olarak saklayabileceklerdi. Ancak Japon halkı taze ile donmuş balık lezzet farkını hissedebiliyor ve donmuş olanlara fazla para ödemek istemiyorlardı. Balıkçılar bu defa teknelerine balık akvaryumları yaptırdılar. Balıklar içeride biraz fazla sıkışacaklardı, hatta, birbirlerine çarpa çarpa birazda aptallaşacaklardı, ama yine de canlı kalabileceklerdi. Japon halkı canlı olmasına rağmen bu balıkların da lezzet farkını anlayabiliyorlardı. Hareketsiz, uyuşmuş vaziyette günlerce yol gelen balığın, canlı, diri hareketli taze balığa göre lezzeti yine de etkilenmişti. Balıkçılar nasıl olacakta Japonyaya taze lezzetli balığı getirebileceklerdi ?

Siz olsaydınız ne yapardınız ?

Japonların Taze balık probleminde olduğu gibi çözüm aslında basittir. 1950lerde L.Ron Hubbartın gözlemlediği üzere “İnsanoğlu ancak hırs iddiası içinde bulunursa anormal çabalar sarfeder.” Ne kadar akıllı, uzman, inatçı iseniz iyi bir problemle uğraşmaktan o kadar zevk alırsınız. Problem sizi ne kadar zorluyorsa ve siz onu adım adım &ccedi l;özebiliyorsanız bundan da o derece mutluluk duyarsınız, heyecan duyarsınız ve enerji dolu, canlı, ayakta kalırsınız. Japonlarda balıkları yine teknelerindeki akvaryumlarda tuttular, ancak içine küçük bir de köpekbalığı attılar. Bir miktar balık köpekbalığı tarafından yutulmuştu, ama geride kalanlar son derece hareketli ve taze kalabilmişlerdi. Buradan da görüleceği üzere problemlerden, uzaklaşmaktansa içine

atlamak, boğuşmak ve onları yenmek gerekir. Problemimiz çok ve çeşitli olabilir. Ümitsiz olmayın. Onları tanıyın, organize edin, kararlı olun, daha çok bilgi ve yardım desteği ile onlarla savaşın.

Beyninize bir köpekbalığı atın ve nelere ulaşabileceğinizi o zaman görün.

    Join our Newsletter

    We'll send you newsletters with news, tips & tricks. No spams here.