[İpucu] Intellisense x64 sorunu

Projenin ayarlarından Platformtarget’i x64 yaptığınızda intellisense’iniz bozuldu ve aspx designer’ında kendi kontrollerinizi göremez olduysanız eğer intellisense’in çalışmaması normaldir. Bunu yarım günlük bir araştırmanın sonucunda aşağıdaki şekilde özetleyebilirim:

VisualStudio 32 bit çalıştığı ve designer’ın assembly’ler ile çalıştığını düşünecek olursak, siz projenizi 64 bit yaptığınızda bu tipleri bulamıyor olması doğal ve bulamadığı için de böyle bir kontrolü intellisense’de gösterememesi de normal. Eğer intellisense sizin için vazgeçilmez ise ve 64 bit de çalışmak istiyorsanız Projenin ayarlarından Platform target’i Any CPU olarak değiştirmeniz gerekecektir.

kaynak : https://social.msdn.microsoft.com/Forums/windowsapps/en-US/eab4fc3c-a77d-41d6-b3dd-48f636d70035/design-view-is-unavailable-for-x64-and-arm-target-platforms?forum=toolsforwinapps

[Knockout.js] Jsfiddle ile knockout kullanımı

Tüm dünyanın client bazlı frameworkleri test etmek, birbirleri ile paylaşmak veya yeni şeyler denemek için kullandığı yegane sitelerden birisidir jsfiddle.net. Bende javascript frameworklerinden biri olan knockout’u canlı olarak test edebilmeniz için jsfiddle üzerinde nasıl knockout kullanılır onu göstereceğim.

Framework & Extensions bölümü : Bu bölümde kullanmak istediğiniz bir framework’ü ister seçerek ekleyebilirsiniz, ister external resources bölümünden url vererek doğrudan kullanabilirsiniz.

Html,javascript,css,result bölümü : Bu bölüm yazmak istediğiniz uygulamanın parçasının olduğu kısımdır. Html bölümüne kullanacağınız html nesnelerini ekleyebilirsiniz. Javascript kısmında kullanmak istediğiniz framework dahil olmak üzere bütün scriptinizi yazabilirsiniz. Css kısmında ise htmlinize biraz şekil vermek için style’lar ekleyebilirisiniz.

Navigation bölümü : Navigation panelde aşağıdaki butonlar var, update butonu şimdilik işimizi görecek. Update butonu ile yazdığımız kodu çalıştırıp sonucu da result panelinde görebiliriz.

 

Şimdi gelelim knockout.js’i eklemeye ve ilk viewModel’imizi oluşturmaya.

– Framework & Extension bölümüde No-library default olarak seçili olan dropdownda çalışmak istediğiniz knockout framework verisyonunu seçmelisiniz. Biz knockout 3 versiyonunu seçeceğiz. OnLoad seçeneğini de body içine kod yazıyormuşuz gibi değiştireceğiz.

Bunları da ekledikten sonra artık kod yazmaya geçebiliriz. Aşağıdaki şekilde kodlarımızı ekleyip çalıştırdığımızda klişelerden biri olarak “merhaba knockout.js” yazdıracağız.

Benim için ekran görüntüsü aşağıdaki şekilde :

Ctrl+S ile veya update yaparak uygulamanızı çalıştırabilirsiniz. Yukarıdaki frame’de result panelinde de görebilirsiniz.

Bu makale buraya kadar, takıldığınız kısımları çekinmeden sorabilirsiniz.
İyi günler,

[Knockout.js] Gözlemciler (Observables)

KnockoutJS aşağıdaki üç özellik üzerine kurulmuştur :

– Gözlemleme ve bağımlılık izleme,
– Bildirime dayanan bağlama
– Şablon oluşturma

Bu yazıda üç özelliğe değinilecektir. Ama öncesinde MVVM tasarım desenine ve view model mantığına değinelim.

Model-View-View Model (MVVM) kullanıcı ara yüzü geliştirmek için kullanılan bir tasarım desenidir. Ne kadar karmaşık olursa olsun, bir kullanıcı arayüzünü en basite indirgemek için üç parçaya ayırır.

1- Model : Server tarafından hesaplanan verinin ajax çağrı ile JSON objesi olarak alınması, modeli oluşturur. Yani kısaca saf verinin kendisidir.
2- View Model : Model ile View arasındaki iş kurallarının gerçekleştiği kısımdır. Model’den gelen datayı işleyerek kullanıcıya önyüz’ün nasıl gösterilmesi gerektiğini hesaplar.
Not : UI’ın kendisi değildir. Bu katmanda hiçbir input alanı olmaz.
3- View : Kullanıcının gördüğü kısımdır. View Model’de oluşturulmuş bilgileri görüntüler. View model’e komutlar göndererek önyüz’ün etkileşimli olmasını sağlar.
Knockout kullanıyorsanız eğer view’iniz html’in kendisidir.

Basit bir knockout modeli oluşturmak için aşağıdaki javascript objesini kullanabilirsiniz.

	var myViewModel = {
	    isim : 'Serkan',
	    yas : 26
	};

Çok basit bir view oluşturarak model’deki bilgileri görüntüleyebilirsiniz. Örneğin aşağıdaki html “Benim adım Serkan” yazacaktır.

	Benim adım <span data-bind="text: isim "></span>

Knokcout’un aktifleştirilmesi

Data-bind özelliği Html’e ait bir özellik değildir. Bunu tanıyabilmesi için aşağıdaki scriptin yazılması gerekmektedir. Böylece KO gerekli tanımlamaları yapacaktır.

	ko.applyBindings(myViewModel);

ApplyBindings metodu 2 parametre alır :

– İlki ve zorunlu olan bu parametre viewModel’in kendisidir.
– İkinci parametre ise html’in sadece belirli bir bölümüne tanım yapılmak isteniyorsa, istenilen kısmın kendisi parametre geçilir. Örn :
• ko.applyBindings(myViewModel, document.getElementById(‘someElementId’))

Buraya kadar olan kodlar aşağıdaki gibidir :

	<html>
	        <head>
	                <script type="text/javascript" language="javascript" src="http://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
	        </head>
	        <body>
	                <div>   
	                        Benim adım <span data-bind='text: isim'> </span> 
	                </div>
	                <script>
	                var myViewModel  = function(first, last) {
	                        this.isim = 'Serkan';
	                        this.yas = '26';
	                };
	                ko.applyBindings(myViewModel);
	                </script>
	        </body>
	</html>

Aslında bu kadar basit.

Observable

Şimdiye kadar yaptıklarımız ile basit bir viewModel nasıl oluşturulur, binding nasıl yapılır görmüş olduk. Ama knockout’un en temel özelliklerinden biri de etkileşimli bir arayüz sunmasıdır. Peki bunu nasıl sağlayacağız ?

Cevap : Modelimizi observable olarak tanımlayacağız. Observable, gözlemci demektir. Modelimizdeki bir değişkeni observable olarak tanımladığımızda, o değiken değiştiğinde bağlı olduğu yerler güncellenecektir.

	var myViewModel  = function(first, last) {
	        this.isim = ko.observable('Serkan');
	        this.yas =  ko.observable(26);
	};
	

Projemizin son hali :

	<html>
	        <head>
	                <script type="text/javascript" language="javascript" src="http://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
	        </head>
	        <body>
	                <input type="text" data-bind="value: isim" />
	                <div>   
	                        Benim adım <span data-bind='text: isim'> </span> 
	                </div>
	                <script>
	                var myViewModel  = function(first, last) {
	                        this.isim = ko.observable('Serkan');
	                        this.yas =  ko.observable(26);
	                };
	                ko.applyBindings(myViewModel);
	                </script>
	        </body>
	</html>
	

Gördüğünüz gibi textbox’ın hem ilk değerini atamış olduk hem de textbox’daki değer değiştiğinde label’ı da değiştirmiş olduk.

Observable nesnelerde okuma ve yazma

Javascript’in getter, setter özelliğini tüm browserlar desteklemediği için tüm değer atama ve getirmeler metodlar halinde yapılmaktadır.

– Observable bir nesnenin şu anki değerini okumak için nesneyi parametresi bir metod gibi çağırmak yeterlidir. Örn : myViewModel.isim() ‘Serkan’ değerini, myViewModel.yas() 26 değerini dönecektir.
– Observable bir nesneye değer atamak için bir parametre geçecek şekilde metod çağrısı yapmak yeterlidir. Örn : myViewModel.isim(‘Mehmet’) ismi ‘Mehmet’ , myViewModel.yas(55) yaşı 55 yapacaktır.

Kaynak : http://knockoutjs.com/documentation/observables.html

[Knockout.js] İndirme ve Kurulum

http://knockoutjs.com/downloads/knockout-3.3.0.debug.js adresinden kopyala yapıştır ile indirebilir veya referans vererek kullanabilirsiniz. Ayrıca diğer indirme yöntemleri için : http://knockoutjs.com/downloads/index.html adresinden destek alabilirsiniz.

Aşağıdaki script tag’ını html’in header’ına eklediğinizde kullanmaya başlayabilirsiniz.

<script type="text/javascript" src="knockout-3.3.0.js"></script>

Kaynak : http://knockoutjs.com/downloads/index.html

[Knockout.js] Giriş

Knockout js bir javascript kütüphanesidir. Kullanıcı ara yüzünde zengin ve birbiri ile etkileşimli (bir girdi alanı değiştiğinde diğer alanların otomatik olarak değişen alana göre kendini hesaplayıp değiştirmesi) bir ara yüz geliştirmenize olanak verir.

Öne çıkan özellikler :

– Zarif bağımlılık izleme : Veri modeliniz her değiştiğinde kullanıcı ara yüzünün doğru kısmını güncelleyebilirsiniz.
– Bildirime dayanan bağlama : Karmaşık kullanıcı ara yüzünüzü oluşturacağınız basit ve etkili modeliniz ile kolaylıkla bağlayabilirsiniz.
– Genişleye bilirlik : Birkaç satır kod ile yazdığınız modelinizi genişletebilir, ek özellikler sağlayabilirsiniz.

Ek Özellikler :

– Saf javascript kütüphanesi olması sayesinde istediğiniz browserda istediğiniz an kullanmaya başlaya biliriniz.
– Var olan projenize köklü bir değişiklik yapmaksınız entegre edebilirsiniz.
– Gzip ile sıkıştırılmış hali 13 kb’tır. Network’ ü yormaz.
– Birçok tarayıcıyı destekler (IE 6+, Firefox 2+, Chrome, Safari, diğerleri)
– Yeni tarayıcı ve yeni platformlara adaptedir.

Kaynak : http://knockoutjs.com/documentation/introduction.html

[Oracle] Split

Bazı durumlarda gelen değeri virgüllere ayırarak string şeklinde parametre geçeriz ki içeride virgüllerinden ayırarak bir dizi elde ederiz. Bunun C# ve JavaScript’deki karşılığı Split fonksiyonudur. Peki bu olay Oracle’da nasıl ?

Bu makale ile regexp_substring fonksiyonunun kullanımını anlatacağım. ( 10g ve üzeri için geçerlidir.)

Örneğin elimizde ‘1,2,3,4,5’ şeklinde bir string olsun. Bu string’i select içinde virgüllerine ayırıp 1,2,3,4,5 değerleri için kullanma gereksinimi duyduk.

select
    regexp_substr('1,2,3,4','[^,]+', 1, level)
  from dual
    connect by
      regexp_substr('1,2,3,4', '[^,]+', 1, level) is not null;

Bu şekilde ‘1,2,3,4’ şekilde yazan yere parametre geçerek istediğiniz bir tabloda sorgu yapabilirsiniz.

[Oracle] Seed değerlerinin resetlenmesi

Oracle’da seed değerlerinin aşağıdaki scriptten faydalanabilirsiniz. İncelediğim kaynaklar da aşağısındadır.
Aşağıdaki script bir procedure oluşturur. Sequence ismini parametre geçerek ilgili sequence’ı sıfırlayabilir, böylelikle seed değerini de resetlemiş olursunuz.

create or replace
procedure reset_seq( p_seq_name in varchar2 )
is
    l_val number;
begin
    execute immediate
    'select ' || p_seq_name || '.nextval from dual' INTO l_val;

    execute immediate
    'alter sequence ' || p_seq_name || ' increment by -' || l_val || 
                                                          ' minvalue 0';

    execute immediate
    'select ' || p_seq_name || '.nextval from dual' INTO l_val;

    execute immediate
    'alter sequence ' || p_seq_name || ' increment by 1 minvalue 0';
end;

kaynak : http://stackoverflow.com/questions/51470/how-do-i-reset-a-sequence-in-oracle

kaynak : https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:951269671592

kaynak : https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1119633817597

[Oracle] İlişkili tabloları bulma

Aşağıdaki script ile birbiri ile arasında ilişki bulunan tabloları bulabilirsiniz.

Constraint type’ların karşılıkları :
C – Check constraint on a table
P – Primary key
U – Unique key
R – Referential integrity
V – With check option, on a view
O – With read only, on a view
H – Hash expression
F – Constraint that involves a REF column
S – Supplemental logging

select uc.constraint_name as TableConstraint1,
uc.r_constraint_name as TableConstraint2,
uc.table_name as Table1,
us.table_name as Table2,
ucc.column_name as TableColumn1,
uccs.column_name as TableColumn2
from user_constraints uc
inner join user_constraints us on
uc.r_constraint_name = us.constraint_name
inner join USER_CONS_COLUMNS ucc on
ucc.constraint_name = uc.constraint_name
inner join USER_CONS_COLUMNS uccs on
uccs.constraint_name = us.constraint_name
where us.constraint_type in ('P','U');

kaynak : http://stackoverflow.com/questions/183642/what-do-the-letter-codes-in-oracle-user-contraints-tables-constraint-type-colum

kaynak : http://stackoverflow.com/questions/85978/query-a-tables-foreign-key-relationships

[ASP.NET] Web Application Projesi ile Web Site Projesi arasındaki farklar

Visual Studio ile hem web application projesi hem de web site oluşturabilirsiniz.

  •  Yeni bir web application projesi oluşturmak için File -> New -> Project’i seçerek veya Ctrl+Shift+N e basarak yeni proje oluşturma sayfasını açabilirsiniz.

  • Açılan pencereden aşağıdaki şekilde olduğu gibi Asp.Net Web Application projesini seçebilir, gerekli ayarları aşağıdan yaparak projeyi oluşturabilirsiniz.

Continue reading

[C#] Uyarıların hata olarak gösterilmesi

Derleyiciler uyarıları bazı ek bilgileri ve kaynak kodunuzun kalite kontrolü hakkında bilgi verebilmektedir. Bizlere daha önce kullandığımız ancak artık kullanılmayan, eklenmiş ama kullanılmamış ya da diğer gereksiz kodlamalar hakkında uyarılar çıkarır. Bazen de uyarılar bizlere yüzeysel bugları , null referance exception veya her zaman true veya false olan koşulları da gösterir.

Bu uyarılar görmezden gelinebilir. Böylelikle uyarılar ile boğuşmak zorunda kalmazsınız veya uyarıları hata olarak gösterebilir ve kodunuzun daha kaliteli olmasını da sağlayabilirsiniz. Eğer uyarıları hata olarak göster derseniz ve kodunuzda uyarı verecek bir kod bulunuyorsa, build ettiğinizde uyarılar size hata olarak fırlatılacak ve build başarısız olacaktır. Uyarıların seviyeleri 0 ile 4 arasında değiştirilebilmektedir. 0 uyarılar kapalı, 4 ise tüm uyarılar açık anlamına gelmektedir.

Continue reading