tag:blogger.com,1999:blog-45118699991907079212024-03-05T08:13:10.042-08:00Nil Buşra Özer Kişisel BlogNil Buşra Koçerhttp://www.blogger.com/profile/07084098285875162702noreply@blogger.comBlogger21125tag:blogger.com,1999:blog-4511869999190707921.post-52561183161957724472020-03-26T17:24:00.001-07:002020-03-26T17:24:47.393-07:00Oracle Sql Developer Windows 10 Donma Problemi<br />
Merhaba Arkadaşlar,<br />
<br />
<div style="text-align: justify;">
Windows10 işletim sistemine sahip bilgisayarıma doğru adımlarla uyumlu JDK ve SDK versiyonları ile kurmama rağmen arayüz eksik bileşenli ve donmuş şekildeydi. Sorunun çözümünü bulmak biraz sıkıntılı olsa da Türkçe kaynak olmadığından benzer sorunu yaşayan arkadaşlarla bu çözümü paylaşmak istedim.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ekran donmuş ve parçalı halde karşınıza çıksa da siz sabırlı bir şekilde arayüzde mouseunuzu gezdirmeye devam ederek en üstteki Tools-> Preferences kısmından default olarak Oracle olarak seçili olan kısmı Windows olarak değiştirin. Muhtemelen aşağıdaki Tamam butonunu göremeyeceksiniz. </div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkALMEKjp7ji3YoHikGmAxlNdmjgivotKFMAOENT-xhLzzHjPjXzutp6DOQ486FPHXKtEsPixaxSz32e_txbn4B2iRYVYiqv1r7toc74sDJS-sFPkXuQDTlEeB1R6KhxVfsM7CiSpjULAM/s1600/capture_20200327031610.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="507" data-original-width="572" height="283" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkALMEKjp7ji3YoHikGmAxlNdmjgivotKFMAOENT-xhLzzHjPjXzutp6DOQ486FPHXKtEsPixaxSz32e_txbn4B2iRYVYiqv1r7toc74sDJS-sFPkXuQDTlEeB1R6KhxVfsM7CiSpjULAM/s320/capture_20200327031610.png" width="320" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC1sn_3bPfJBz3fTSQWAzI07SAhyBc5A8ahWhuUIYRtMhvM7GEuS8lgxtTdpSatiuemfEL_ZOCAK60vdHjp0cKcOd6G6uGEFJy8uoJRTdFxKHYmlcA6WpkCxPJ4Z7eVHCXCwsncJlRUSCC/s1600/capture_20200327031830.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="501" data-original-width="730" height="219" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC1sn_3bPfJBz3fTSQWAzI07SAhyBc5A8ahWhuUIYRtMhvM7GEuS8lgxtTdpSatiuemfEL_ZOCAK60vdHjp0cKcOd6G6uGEFJy8uoJRTdFxKHYmlcA6WpkCxPJ4Z7eVHCXCwsncJlRUSCC/s320/capture_20200327031830.png" width="320" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Yukarıda yerini paylaştığım yerdeki Tamam butonuna sanki gözüküyormuş gibi tıklayıp deneyin olana kadar. Tamam butonuna tıklayabilmişseniz eğer</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiO43WayjTHCHu9VGTHwCDLSDsxtn64pduDuNc5BBP2a5INLC5vEof_9aM6ALbOOfCpMa7KgFSX68xwFFRMjRoeddoEvSY4R0WA4WTnLUnsPejRiOq0K8jUg3_NM74edX-plU336tyMcA0h/s1600/capture_20200327032044.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="215" data-original-width="513" height="134" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiO43WayjTHCHu9VGTHwCDLSDsxtn64pduDuNc5BBP2a5INLC5vEof_9aM6ALbOOfCpMa7KgFSX68xwFFRMjRoeddoEvSY4R0WA4WTnLUnsPejRiOq0K8jUg3_NM74edX-plU336tyMcA0h/s320/capture_20200327032044.png" width="320" /></a></div>
yukarıdaki şekilde bir kutucuk karşınıza çıkacaktır. Burada da Yes yerini görünmese dahi denk getirmeye çalışın. Tıklayabilmişseniz eğer restart edecek ve Oracle Sql Developer'ınız tekrar başlayarak doğru şekilde çalışmaya başlayacaktır.<br />
<br />
Umarım işinize yarar :)<br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
Nil Buşra Koçerhttp://www.blogger.com/profile/07084098285875162702noreply@blogger.com0tag:blogger.com,1999:blog-4511869999190707921.post-43431317939186092762015-05-15T16:59:00.000-07:002015-05-15T16:59:56.384-07:00Kalıtımsal Eşleme<br />
<div style="text-align: justify;">
Herkese merhabalar.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Bugün sizlere kalıtımsal eşleme ve nasıl gerçekleştireceğimizden bahsedeceğim. Kalıtım denilince benim aklıma gelen ilk şey ata bir sınıf ve bu ata sınıftan türeyen bir alt sınıftır. Gelin kalıtım konusunu bir detaylandıralım. C# nesne tabanlı bir programlama dilidir, ve bu özellik C#'ın en önemli özelliklerinden biridir. C# yüzde yüz nesne tabanlı dil olması nedeniyle programcılara birçok yönden kolaylıklar sağlamaktadır. Peki bu kalıtım nedir ne işe yarar program geliştiricilere ne gibi kolaylıklar sağlar [1].</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Kalıtım, nesne yönelimli programlamanın en önemli özelliklerinden biridir. Miras alma yolu ile sınıflar birbirinden türetilebilir. Yani mevcut sınıflardan yeni bir sınıf üretme şekli olarak tanımlanabilmektedir. Bu işlemde, türeyen sınıflar <b><span style="color: #e06666;">türemiş sınıf</span></b>, kendisinden yeni sınıfların oluşturulduğu sınıflara ise <b><span style="color: #e06666;">temel sınıf</span></b> adı verilir [2].</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Türeyen sınıflar, türedikleri sınıfların özelliklerini devralırlar, bununla birlikte kendilerine de özel olarak özellikleri mevcuttur. .NET ortamında bir sınıf sadece bir sınıftan türeyebilir; fakat bir temel sınıf bir çok sınıf türetebilir. Miras almanın temel amacı sınıflar arasında ilişki kurmaktır [2]. Gelin hep birlikte kalıtımın Fluent NHibernate'deki kullanımına bir bakalım.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Kalıtımın Fluent NHibernate'deki kullanımı aşağıdaki üç şekilde gerçekleşmektedir.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
</div>
<ul>
<li>Table Per Hierarchy (TPH);</li>
<li>Table Per Type (TPT);</li>
<li>Table Per Concrete Class (TPC).</li>
</ul>
<h4>
<span style="color: #e06666;"><br /></span></h4>
<h3>
<span style="color: #e06666;">Table Per Hierarchy (TPH):</span></h3>
<div>
<span style="color: #e06666;"><br /></span></div>
<div style="text-align: justify;">
TPH kalıtım yönteminde kalıtım, veritabanının <b><span style="color: #e06666;">discriminator</span></b> kısmı gibi herhangi bir koşul ile tanımlanan koşullu eşleştirmeye bağımlıdır. Ayrıca, kalıtım ağacı sadece bir tablodan üretilmiştir [3].</div>
<br />
<h3>
<span style="color: #e06666;">Table Per Type (TPT):</span></h3>
<br />
TPT, veritabanının ayrı tablolarında açıklanan kalıtımdır. Her tablo ilave olarak detay bulundurur. Bu detaylar, tablonun atasına bağlı olan yeni tipleri açıklamaktadır [3].<br />
<br />
<h3>
<span style="color: #e06666;">Table Per Concrete Class (TPC)</span></h3>
<div>
<div style="text-align: justify;">
<span style="color: #e06666;"><br /></span></div>
</div>
<div>
<div style="text-align: justify;">
Bu tip kalıtımda, her sınıf kendi tablosunu içerdiği bir kalıtım hiyerarşisi içerisindedir. Genel özellikler, ayrı bir tabloya konmaktansa her bir tablo içerisine tekrar tekrar yazılır [3].</div>
<br />
Kalıtım tiplerini inceledikten sonra gelin hep birlikte bir örnek üzerinden kalıtımı daha iyi anlayalım.<br />
<br /></div>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> public class Iletisim
{
public virtual Guid Id { get; set; }
public virtual string Baslik{ get; set; }
public virtual string İcerik { get; set; }
}
public class SMS : Iletisim
{
}
public class Mail : Iletisim
{
}
</code></pre>
<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> public class IletisimMap : ClassMap<Iletisim>
{
public IletisimMap()
{
Table("Iletisim");
Id(x => x.Id).GeneratedBy.GuidComb();
DiscriminateSubClassesOnColumn("IletisimTip");
Map(x => x.Baslik);
Map(x => x.Icerik);
}
}
</code></pre>
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> public class SMSMap : SubclassMap<SMS>
{
public SMSMap()
{
DiscriminatorValue(1);
}
}
public class MailMap : SubclassMap<Mail>
{
public MailMap()
{
DiscriminatorValue(2);
}
}
</code></pre>
<br />
<div style="text-align: justify;">
Yukarıda oluşturulan yapıda Iletisim isimli bir ana sınıf ve bu sınıftan türeyen iki alt sınıf olan SMS ve Mail sınıfları bulunmaktadır. Kullanılan <b><span style="color: #e06666;">DescriminateSubClassesOnColumn</span></b> metodu ile hangi alt sınıfın yaratılacağı belirlenir. Ayrıca belirlenmiş olan Discriminator değerleri ile iletişim tipi belirlenerek hangi alt sınıfın yaratılacağının Fluent NHibernate tarafından anlaşılması sağlanmış olur [4].</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Yukarıda kurmuş olduğumuz yapı ile kalıtım sağlanmış olur ve discriminator kullanımının ne işe yaradığını da görmüş oluyoruz. Bu haftalık anlatacaklarım bu kadar, umarım faydalı bir yaz olmuştur hoşçakalın..</div>
<div style="text-align: justify;">
<br /></div>
<h3>
<span style="color: #e06666;">Kaynaklar </span></h3>
<br />
<div style="text-align: justify;">
[1]C# İle Kalıtım(inheritance)- Override ve Virtual Metodlar, http://www.ramazancelikkaya.com/makaleOku/CSharp/131/C, Mayıs 7, 2015.</div>
<br />
[2]Inheritence – Miras Alma (Kalıtım), http://www.ismailgursoy.com.tr/inheritence-miras-alma-kalitim/, Mayıs 8, 2015.<br />
<br />
<div style="text-align: justify;">
[3]Inheritance mapping strategies in Fluent Nhibernate, http://www.codeproject.com/Articles/232034/Inheritance-mapping-strategies-in-Fluent-Nhibernat, Mayıs 8, 2015.<br />
<br />
[4]Fluent NHibernate - Table Inheritance - Discriminators, http://www.philliphaydon.com/2011/08/fluent-nhibernate-table-inheritance-discriminators/, Mayıs 9, 2015.</div>
Nil Buşra Koçerhttp://www.blogger.com/profile/07084098285875162702noreply@blogger.com0tag:blogger.com,1999:blog-4511869999190707921.post-89659678275176987932015-05-01T20:04:00.000-07:002015-05-01T20:11:16.452-07:00Convention Sınıflarının Yeniden Yazılması<br />
<div style="text-align: justify;">
Herkese merhabalar.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Bugün sizlere, önceki yazılarda bahsetmiş olduğum convention sınıflarını nasıl kendimize göre değiştirebileceğimizden bahsedeceğim. Öncelikle convention sınıflarının ne olduğunu bir hatırlayalım. Convention sınıfları, tablo ve kolon isimlendirmelerini yaparken bize yardımcı olan default sınıflardır. İsimlendirme sınıflarından bazılarını hatırlayalım. Önceki haftalarda detaylı bir şekilde anlattığım için sadece bazı isimlerini hatırlatacağım [1].</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
</div>
<ul>
<li>ColumnNullabilityConvention</li>
<li>PrimaryKeyNameConvention</li>
<li>StringColumnLengthConvention</li>
<li>IClassConvention</li>
<li>IIdConvention</li>
<li>IHasManyConvention</li>
<li>IReferenceConvention </li>
</ul>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br />
İsimlendirme sınıflarını neden değiştirelim ki dediğinizi duyar gibiyim. Örneğin; <span style="color: #e06666;"><b>StringColumnLengthConvention</b></span>'ın default sınıfında, string tipindeki kolonun uzunluk sınırı belirtilmediyse bu sınıf sayesinde otomatik olarak uzunluk 100 olarak atanır [1]. Eğer bu uzunluğun 100 değil de 50 olmasını istiyorsanız, default olan isimlendirme sınıfını kendinize göre uyarlayıp bu yapıyı kullanabilmeniz gerekiyor.<br />
<br />
İsimlendirme sınıfları(conventions), birçok interface ve ana sınıflar kullanılarak oluşmuş olan sınıflardır [2]. Bu sınıfların her birinde <b><span style="color: #e06666;">Apply</span></b> metodu tanımlanmıştır. Bu metot, isimlendirme sınıfının çeşidine göre parametreler almaktadır [3]. Bu metot, eşleştirmelerinize yapmış olduğunuz değişimin yapıldığı yerdir [2]. Eşleştirme sınıfınızın yapısını oluşturduktan sonra default olan isimlendirme sınıfları uygulanır. Aşağıdaki örnek ile isimlendirme sınıflarının mantığını daha iyi anlayacaksınız.<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> public class KisiMap : ClassMap<Kisi>
{
public KisiMap()
{
Id(x => x.Id);
Map(x => x.Ad)
.Column("TumAd")
.Length(100);
Map(x => x.Yas);
}
}
</code></pre>
<br />
Yukarıda belirlemiş olduğumuz mapping sınıfımıza göre, isimlendirmemizin akış şeklini açıklayacağım; kullanmış olduğunuz high-level metodlara bakarak, convention sınıfı mapping sınıfınızın Kisi sınıfı olduğunu, Ad ve Yas olarak iki özelliğinizin olduğuna karar verir. Daha sonra, convention sınıfları, kolon isimleri, uzunluğu gibi değerlere uygulanır [2]. Convention(isimlendirme) sınıflarımızın çalışma yapısını anladıktan sonra, gelin kendi örneğimize bir bakalım.<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> public class LowercaseTableNameConvention : IClassConvention
{
public void Apply(IClassInstance instance)
{
// değiştirme yapılacak yer..
}
}
</code></pre>
<br />
Yukarıdaki kod ile tablo ismimizi belirleyebilmemiz mümkün; ancak <span style="color: #e06666;"><b>Apply</b></span> metodunun içerisine tablo isimlerimizin ne yapıda olacağını yazmalıyız.<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> public void Apply(IClassInstance instance)
{
instance.Table("tbl_" + instance.EntityType.Ad);
}
</code></pre>
<span style="font-weight: normal;"><br /></span>
<span style="font-weight: normal;">Yukarıda gördüğünüz üzere, </span><b><span style="color: #e06666;">IClassInstance</span></b><span style="font-weight: normal;"> interface'i sayesinde </span><b><span style="color: #e06666;">Table</span></b><span style="font-weight: normal;"> metodunu kullanarak convention sınıfımızın tablo ismini kendimize göre yazmak bu kadar kolay [2]. Dilediğiniz convention sınıfını Apply metodu sayesinde yukarıdaki şekilde kendinize göre uyarlayabilirsiniz.</span><br />
<span style="font-weight: normal;"><br /></span>
<span style="font-weight: normal;">Bu haftalık anlatacaklarım bu kadar. Bir sonraki yazıda buluşmak üzere, hoşçakalın..</span><br />
<span style="font-weight: normal;"><br /></span>
<br />
<h3>
<span style="color: #e06666;">Kaynaklar</span></h3>
<br />
[1] Fluent NHibernate conventions-examples, http://marcinobel.com/index.php/fluent-nhibernate-conventions-examples/, Nisan 27, 2015.<br />
<br />
[2] Conventions, https://github.com/jagregory/fluent-nhibernate/wiki/Conventions, Nisan 27, 2015.<br />
<br />
[3] Changing The FluentNHibernate Id Conventions, http://candland.net/2009/09/14/changing-the-fluentnhibernate-id-conventions/, Nisan 27, 2015.<br />
<br />
<br /></div>
<br />
<div style="text-align: justify;">
<br /></div>
Nil Buşra Koçerhttp://www.blogger.com/profile/07084098285875162702noreply@blogger.com0tag:blogger.com,1999:blog-4511869999190707921.post-9681399342402374762015-04-26T04:10:00.000-07:002015-04-26T04:26:09.322-07:00Fluent NHibernate Automapping(Otomatik Eşleme)<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Herkese merhabalar.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Bugün sizlere Fluent NHibernate'in sağlamış olduğu kolaylıklardan bir tanesi olan otomatik eşlemeden bahsedeceğim. Büyük uygulamalarda modellerinizin eşleştirmelerini yapmak size oldukça sıkıcı gelebilir. Bu durumdan sizi kurtarmak üzere otomatik eşleştirme yardımınıza koşacak. Automapping kavramı; isimlendirme grupları kullanılarak gerçekleştirilen ve objelerinizi otomatik bir şekilde sınıflandıran mekanizmadır [1]. Otomatik eşleştirmede isimlendirme gruplarına(conventions) neden ihtiyaç duyuyoruz dediğinizi duyar gibiyim. Otomatik eşleştirme yaparken eğer convention sınıflarınızı default olarak kullanıyorsanız, otomatik eşleştirici eşleştirme yaparken örneğin; Id isimli integer tipindeki değişkeninizin otomatik olarak artış gösteren bir öncül anahtar(primary key) olduğunu anlaması gerekmektedir [2]. Aşağıdaki örnek ile otomatik eşleştirmenin yapılmasını sağlayan bazı kavramları öğreneceğiz.</div>
<div style="text-align: justify;">
<br /></div>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> public class Yiyecek
{
public int Id { get; set; }
public virtual string Ad { get; set; }
public virtual decimal Fiyat { get; set; }
}
public class Buzdolabı
{
public virtual int Id { get; set; }
public virtual IList<Yiyecek> Yiyecekler { get; set; }
}
</code></pre>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Yukarıdaki kod ile one-to-many ilişkisi kurulmuştur. Bir buzdolabında birden fazla yiyecek bulunabilir. Otomatik eşleştirmemizi yapabilmemiz için <span style="color: #e06666;"><b>Automap</b></span> sınıfını, fluent konfigürasyon API kombinasyonu ile kullanmalıyız.<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> AutoMap.AssemblyOf<T>
</code></pre>
<br /></div>
<div style="text-align: justify;">
Yukarıdaki kod parçası generic bir tip alan statik bir metottur. Otomatik eşleştirmenizi yapmak istediğiniz sınıfınızı T değişkeninin yerine yazmalısınız. İşte otomatik eşleştirme yapmak bu kadar kolay. <span style="background-color: #f0f0f0; font-family: arial; font-size: 12px; line-height: 20px; text-align: left;">AutoMap.AssemblyOf<Yiyecek> </span> kodunu çağırdığınız zaman; Yiyecek sınıfının tanımlandığı assembly'ye bağlanan <span style="color: #e06666;"><b>AutoPersisteneceModel</b></span> objesi üretilir [3]. Kullanacağımız SessionFactory'i yaratmak için aşağıdaki kod parçasını kullanmalıyız.<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> var sessionFactory = Fluently.Configure()
.Database(/* database config */)
.Mappings(m =>
m.AutoMappings
.Add(AutoMap.AssemblyOf<Yiyecek>()))
.BuildSessionFactory();
</code></pre>
<br />
Automapper, hangi sınıfın objeniz veya servisiniz olduğunu ayırt edemez. Bu yüzden ihtiyacımız olan final bir metot olan <b><span style="color: #e06666;">Where(Func)</span></b>'i kullanmalıyız. Bu metot ile genellikle namespace sınırlaması konulur; ancak siz <span style="color: #e06666;"><b>Type </b></span>objesi ile istediğiniz sınırlamayı koyabilirsiniz [1]. Bu örnekte ben de namespace sınırlamasına ihtiyaç duyuyorum.<br />
<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> var autoMappings = AutoPersistenceModel
.MapEntitiesFromAssemblyOf<Yiyecek>()
.Where(t => t.Namespace == "Mutfak.Entities");
var sessionFactory = new Configuration()
.AddProperty(ConnectionString, ApplicationConnectionString)
.AddAutoMappings(autoMappings)
.BuildSessionFactory();
</code></pre>
<br /></div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
Yukarıdaki şekilde namespace sınırlamamızı koyduktan sonra otomatik eşleştirmemizi tamamlamış olduk. Gördüğünüz gibi yukarıdaki yapıyı kullanarak otomatik eşleştirme yapmak bu kadar basit. Bu haftalık anlatacaklarım bu kadar. Bir sonraki hafta; isimlendirme sınıflarımızı kendimize göre nasıl uyarlayabileceğimizden bahseceğiz, hoşçakalın..</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<h3>
<span style="color: #e06666;">Kaynaklar</span></h3>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
[1] Fluent NHibernate: Auto Mapping Introduction, http://www.jagregory.com/writings/fluent-nhibernate-auto-mapping-introduction/, Nisan 22, 2015.<br />
<br />
[2]GETTING STARTED WITH FLUENT NHIBERNATE AND AUTO MAPPING IN C#, http://blog.json.codes/web-development/getting-started-with-fluent-nhibernate-and-auto-mapping-in-c/, Nisan 22, 2015.<br />
<br />
[3] Auto mapping, https://github.com/jagregory/fluent-nhibernate/wiki/Auto-mapping, Nisan 23, 2015.</div>
Nil Buşra Koçerhttp://www.blogger.com/profile/07084098285875162702noreply@blogger.com0tag:blogger.com,1999:blog-4511869999190707921.post-42790907240496589572015-04-19T06:32:00.001-07:002015-04-19T06:33:33.689-07:00Fluent NHibernate ile Kullanıcı Tanımlı Tipler Kullanmak<br />
<br />
<span style="font-family: Times, Times New Roman, serif;"> Herkese merhabalar.</span><br />
<span style="font-family: Times, Times New Roman, serif;"><br />
</span><br />
<div style="text-align: justify;">
<span style="font-family: Times, Times New Roman, serif;"> Bugün sizlere, Fluent NHibernate kullanırken kullanıcı tanımlı tiplerin nasıl kullanıldığından bahsedeceğim. Kullanıcı tanımlı tip derken ne demek istediğimi enum(enumeration) kavramını açıklayarak ifade etmek istiyorum. Program içerisinde kullanılan sabitlerin anlamlandırılması ile sabitlere isim vererek bir grup altında toplayabiliriz. İşte bu gruplara enum(enumaretion) denmektedir. Enum içerisindeki elemanlar, dizilerdeki gibi 0 sıra numarasından başlamak üzere sıralanır [1]. Enum kullanımını daha iyi anlamamız açısından, enum denilince akla gelen klasik örneği sizlerle paylaşmak istiyorum.</span></div>
<div style="text-align: justify;">
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Times, Times New Roman, serif;"> Örneğin; programımızda haftanın günlerini kullanmak isteyelim. Bu günler ile karmaşık işlemler yapmak isteyelim. Bunun için her güne sayısal değer vermemiz bizim işimizi görecektir. Pazartesi, Salı, Çarşamba, Perşembe, Cuma, Cumartesi, ve Pazar’a 0,1,2,3,4,5 ve 6 tam sayı değerlerini tanımlamamız yeterli olacak ve bu tam sayılar üzerinden işlemlerimizi gerçekleştireceğiz. Öte yandan, sıfırı (0) kullandıktan ve bir süre sonra koda baktığımızda sıfırın Pazartesi gününü ifade ettiğini hatırlayamayabiliriz. Bu durumda, C# bizlere güzel bir çözüm sunar. Bu çözümde; değerlerin grup sembolik bir ad ile bildirilebileceği "enum" anahtar sözcüğü kullanılır [2]. Enumeration türünü aşağıdaki şekilde tanımlayabiliriz.</span><br />
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> Enum HaftaGunler
{
Pazartesi,
Sali,
Carsamba,
Persembe,
Cuma,
Cumartesi,
Pazar
}
</code></pre>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: Times, 'Times New Roman', serif;">Enumeration türünü yukarıdaki şekilde tanımladıktan sonra aşağıdaki şekilde erişebiliriz.</span><br />
<span style="font-family: Times, 'Times New Roman', serif;"><br /></span>
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> HaftaGunler gun = HaftaGunler.Pazar;
MessageBox.Show(gun.ToString());
</code></pre>
<span style="font-family: Times, 'Times New Roman', serif;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Times, Times New Roman, serif;">Böylelikle, mesaj kutumuzda "6" yazacaktır. Haftanın günlerinin hepsini birden almak istersek <b><span style="color: #e06666;">.GetNames()</span></b> metodunu kullanırız. Bu metot yardımıyla enum içerisinde kullandığımız değerleri string formatında bir dizide aşağıdaki şekilde kullanabiliriz [2].</span><br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> string[] gunler = Enum.GetNames(typeof(HaftaGunler));
</code></pre>
<br /></div>
<div style="text-align: justify;">
<span style="font-family: Times, Times New Roman, serif;"> Şimdi de enumların Fluent NHibernate'teki kullanımına bakalım. Fluent NHibernate ile özel bir kullanıcı tipi tanımlanmak istendiğinde, <b><span style="color: #e06666;">IUserType</span></b> arayüzünden kalıtılmış bir sınıf ile ilgili tipi tanımlayabiliriz [3]. Aşağıdaki kod örneğinde, lisans ve yüksek lisans öğrenci tipini içeren enum kullanılmıştır [4].</span><br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> public enum Ogrencitipi
{
Lisans,
Yukseklisans
}
</code></pre>
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> using System;
using System.Data;
using NHibernate.SqlTypes;
using NHibernate.UserTypes;
namespace YourNamespace.Persistence.Mappings.CustomTypes
{
public class OgrencitipiMap : IUserType
{
new public bool Equals(object x, object y)
{
return object.Equals(x, y);
}
public int GetHashCode(object x)
{
return x.GetHashCode();
}
public object NullSafeGet(IDataReader rs, string[] names, object owner)
{
object r = rs[names[0]];
var value = (string)r;
if (string.IsNullOrEmpty(value))
throw new Exception("Geçersiz!");
switch (value)
{
case "L":
return Ogrencitipi.Lisans;
case "Y":
return Ogrencitipi.Yukseklisans;
default:
throw new Exception("Geçersiz öğrenci tipi!");
}
}
public void NullSafeSet(IDbCommand cmd, object value, int index)
{
object paramVal = 0;
switch ((Ogrencitipi)value)
{
case Ogrencitipi.Lisans: paramVal =
"L"; break;
case Ogrencitipi.Yukseklisans: paramVal =
"Y"; break;
default:
throw new Exception("Geçersiz öğrenci tipi!");
}
var parameter = (IDataParameter)cmd.Parameters[index];
parameter.Value = paramVal;
}
public object DeepCopy(object value)
{
return value;
}
public object Replace(object original, object target, object owner)
{
return original;
}
public object Assemble(object cached, object owner)
{
return cached;
}
public object Disassemble(object value)
{
return value;
}
public SqlType[] SqlTypes
{
get { return new SqlType[] { new StringSqlType() }; }
}
public Type ReturnedType
{
get { return typeof(Ogrencitipi); }
}
public bool IsMutable
{
get { return false; }
}
}
}
</code></pre>
<br />
<span style="font-family: Times, Times New Roman, serif;">Mapping sınıfınızda aşağıdaki şekilde eşleştirmenizi yapabilirsiniz.</span><br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> //NHibernate 2.X
Map(x=>x.Ogrencitipi).CustomType<OgrencitipiMap>();
//NHibernate 3.X
Map(x=>x.Ogrencitipi).CustomTypeIs<OgrencitipiMap>();
</code></pre>
<br /></div>
<div style="text-align: justify;">
<span style="font-family: Times, Times New Roman, serif;">Yukarıdaki örnekte gördüğünüz gibi enum yapısını kullanarak istediğiniz verileri Fluent NHibernate projenizde kullanabilirsiniz. Enum kullanımının faydaları; kod okunabilirliğini arttırması, muhtemel değer kümesinin daraltılması ve tip güvenliğini sağlaması dolayısıyla hata payını en aza indirmesidir [5]. Böylelikle yeri geldiğinde projemizde enum kullanımının nasıl gerçekleşeceğini görmüş olduk.</span><br />
<span style="font-family: Times, Times New Roman, serif;"><br /></span>
<span style="font-family: Times, Times New Roman, serif;"> Umarım faydalı bir yazı olmuştur, hoşçakalın.</span>.</div>
<div style="text-align: justify;">
<br /></div>
<h4 style="text-align: justify;">
<span style="color: #e06666;">Kaynaklar</span></h4>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: Times, Times New Roman, serif;">[1]C# ile Enum Kullanımı, http://sanalkurs.net/c-ile-enum-kullanimi-8423.html, Nisan 15, 2015.</span></div>
<div style="text-align: justify;">
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Times, Times New Roman, serif;">[2]C# ve Enumeration (Enum) Kullanımı, http://emraheroglu.blogspot.com.tr/2010/01/c-ve-enumeration-enum-kullanm.html, Nisan 16, 2015.</span><br />
<span style="font-family: Times, Times New Roman, serif;"><br /></span>
<span style="font-family: Times, Times New Roman, serif;">[3]Fluent NHibernate ile kullanıcı tanımlı tipler kullanmak, http://b.zor.lu/fluent-nhibernate-ile-kullanici-tanimli-tipler-kullanmak/, Nisan 16, 2015.</span><br />
<span style="font-family: Times, Times New Roman, serif;"><br /></span>
<span style="font-family: Times, Times New Roman, serif;">[4]USING AN ENUM ON A FLUENTNHIBERNATE MAPPING [C#], http://crodrigues.com/using-a-enum-on-a-fluentnhibernate-mapping-c/, Nisan 17, 2015.</span><br />
<span style="font-family: Times, Times New Roman, serif;"><br /></span>
<span style="font-family: Times, Times New Roman, serif;">[5]Daha Okunabilir Kod ve Yaşanabilir Dünya İçin Enum’lar, http://kodcu.com/2014/08/okunabilir-kod-ve-enum/, Nisan 17, 2015.</span></div>
Nil Buşra Koçerhttp://www.blogger.com/profile/07084098285875162702noreply@blogger.com0tag:blogger.com,1999:blog-4511869999190707921.post-64860712604809794312015-04-11T18:12:00.000-07:002015-04-11T18:25:16.913-07:00HQL (Hibernate Query Language)Herkese merhabalar.<br />
<br />
<div style="text-align: justify;">
Doğrudan SQL sorgularını kullanarak veritabanı üzerinde işlemler gerçekleştirmek istemiyorsanız; nesneler üzerinde işlem yaparak da veritabanı işlemlerinizi gerçekleştirebileceğiniz bir sorgu dili mevcut. Bugün sizlere Hibernate'in sorgu dilinden bahsetmek istiyorum. Hibernate sorgu dili, SQL'e benzer özellikleri olan nesne tabanlı bir sorgu dilidir. HQL'in SQL'den en önemli bilinmesi gereken farkı; SQL kolonlar ve tablolar üzerinde işlem yaparken, HQL objeler ve diğer özellikler üzerinde işlemlerini gerçekleştirir. HQL, Hibernate tarafından, veritabanı üzerinde doğrudan işlem gerçekleştirebilen SQL'e dönüştürülür. Şu unutulmamalıdır ki veritabanı ile en yakın olan katman her zaman SQL'dir [1]. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
HQL yazarken büyük-küçük harf duyarlılığına dikkat edilmelidir. WHERE, SELECT, FROM gibi kelimeler de büyük-küçük harf duyarlılığı aranmazken; tablo ve kolon isimleri gibi özellikler yazılırken büyük-küçük harf duyarlılığı mevcuttur. Şunu da eklemek istiyorum; HQL'in güzel özelliklerinden birisi de veritabanından bağımsız yazılan bir sorgu dili olmasıdır [1]. Gelin hep birlikte HQL'de en çok kullanılan kalıplara bakalım.</div>
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: justify;">
<span style="color: #e06666;">from ve as </span></h3>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> from obje [as nil_obje]*
obje_adi
</code></pre>
<div style="text-align: justify;">
<span style="font-family: Times, Times New Roman, serif;"> </span><br />
<span style="font-family: Times, Times New Roman, serif;"> Genellikle <b>select</b> ile kullanılır. Sorguda istenilen cevabın hangi tablodan çekileceğini belirtir. "as" ifadesi ile uzun ve kullanımı zor olan tablo veya alan adlarına geçici olarak kısa isimler vererek bunları kodlamamızda kullanabiliriz [2]. Böylece mevcut tablo yapımız bozulmadan dinamik olarak belirlediğimiz isimleri kullanabilmekteyiz.</span><br />
<br /></div>
<h3>
<span style="color: #e06666;">select</span></h3>
<div>
<span style="color: #e06666;"><br /></span></div>
Sorgunun sonuç kümesinde ne olacağını belirten sözcüktür [2].<br />
<div>
<br /></div>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> select ogrenciisim from bilgisayarMuhendisligi as bilgisayarogrencisi
</code></pre>
<br />
<br />
<h3>
<span style="color: #e06666;">where</span></h3>
<div>
<span style="color: #e06666;"><br /></span></div>
<div>
<span style="color: #e06666;"> <span style="font-family: Times, Times New Roman, serif;"> </span></span><span style="font-family: Times, Times New Roman, serif;"> Sorgu kümesinde dönmesi istenen durumların istenen koşullar doğrultusunda dönmesini sağlayan sözcüktür. =, >, AND, NOT gibi operatörler kullanılır [2].</span></div>
<div>
<span style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18.2000007629395px;"><br /></span></div>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> select ogrenciisim from bilgisayarMuhendisligi as bilgisayarogrencisi where ogrenci_no > 10
</code></pre>
<h4>
</h4>
<h3>
<span style="color: #e06666;">Birleşik Değerli Fonksiyonlar</span></h3>
<div>
<span style="color: #e06666;"><br /></span></div>
<div style="text-align: justify;">
<span style="color: #e06666;"> </span>Birleşik değerli fonskiyonlar kullanılarak, yapılan sorgulama alanı daraltılarak çalışma süresi optimize edilebilir [2,3].</div>
<div style="text-align: justify;">
<br />
<ul>
<li><span style="color: #e06666; font-family: Times, 'Times New Roman', serif; font-size: 15px; line-height: 21.4285717010498px;">avg():</span><span style="font-family: Times, 'Times New Roman', serif; font-size: 15px; line-height: 21.4285717010498px;"> Ortalama değeri döndürür.</span></li>
<li><span style="color: #e06666; font-family: Times, 'Times New Roman', serif; font-size: 15px; line-height: 21.4285717010498px;">count()</span><span style="font-family: Times, 'Times New Roman', serif; font-size: 15px; line-height: 21.4285717010498px;">: İstenilen değere bağlı kayıt sayısını döndürür. Boş değer içeren kaydı saymaz.</span></li>
<li style="text-align: left;"><span style="color: #e06666;"><span style="font-size: 13px; line-height: 18.2000007629395px;"><span style="font-family: Times, Times New Roman, serif;">count(*)<b>:</b></span><span style="font-family: Arial, Helvetica, sans-serif; font-weight: bold;"> </span></span></span><span style="font-family: Times, Times New Roman, serif;"><span style="font-size: 15px; line-height: 21.4285717010498px;">İstenilen değere bağlı kayıt sayısını döndürür. </span></span><span style="font-family: Times, 'Times New Roman', serif; font-size: 15px; line-height: 21.4285717010498px;">Boş değer içeren kaydı sayar.</span></li>
<li><span style="color: #e06666; font-family: Times, 'Times New Roman', serif; font-size: 15px; line-height: 21.4285717010498px;">first()</span><span style="font-family: Times, 'Times New Roman', serif; font-size: 15px; line-height: 21.4285717010498px;">: İlk değeri döndürür.</span></li>
<li><span style="font-family: Times, Times New Roman, serif;"><span style="font-size: 15px; line-height: 21.4285717010498px;"><span style="color: #e06666;">last()</span>: Son</span></span><span style="font-family: Times, 'Times New Roman', serif; font-size: 15px; line-height: 21.4285717010498px;"> değeri döndürür.</span></li>
<li><span style="font-family: Times, Times New Roman, serif;"><span style="font-size: 15px; line-height: 21.4285717010498px;"><span style="color: #e06666;">max():</span> En büyük </span></span><span style="font-family: Times, 'Times New Roman', serif; font-size: 15px; line-height: 21.4285717010498px;">değeri döndürür.</span></li>
<li><span style="font-family: Times, Times New Roman, serif;"><span style="font-size: 15px; line-height: 21.4285717010498px;"><span style="color: #e06666;">min():</span> </span></span><span style="font-family: Times, Times New Roman, serif;"><span style="font-size: 15px; line-height: 21.4285717010498px;">En küçük </span></span><span style="font-family: Times, 'Times New Roman', serif; font-size: 15px; line-height: 21.4285717010498px;">değeri döndürür.</span></li>
<li><span style="color: #e06666; font-family: Times, 'Times New Roman', serif; font-size: 15px; line-height: 21.4285717010498px;">sum():</span><span style="font-family: Times, 'Times New Roman', serif; font-size: 15px; line-height: 21.4285717010498px;"> Toplam değeri döndürür.</span></li>
</ul>
</div>
<span style="font-family: Times, Times New Roman, serif;"></span><br />
<span style="font-family: Times, Times New Roman, serif;">
</span>
<br />
<h3 style="font-family: 'Times New Roman';">
<span style="font-family: Times, Times New Roman, serif;">
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> select count(Meslek) from tblKomsular </code></pre>
<span style="color: #e06666;"><h3 style="font-family: 'Times New Roman';">
<span style="font-family: Times, Times New Roman, serif;"><span style="color: #e06666;"><br /></span></span></h3>
Insert Kullanımının SQL'den Farkı</span></span></h3>
<div>
<span style="font-family: Times, Times New Roman, serif;"><span style="color: #e06666;"><br /></span></span></div>
<span style="font-family: Times, Times New Roman, serif;">
</span>
<br />
<div>
Bilinmesi gereken önemli noktalardan birisi; HQL'de doğrudan tabloya ekleme yapamazsınız; ancak bir tablodan diğer tabloya ekleme yapabilirsiniz [1].<br />
<br />
<h3>
<span style="color: #e06666;">Alt Sorguların Kullanımı</span></h3>
<div>
<span style="color: #e06666;"><br /></span></div>
<div>
<span style="color: #e06666;"> </span>Alt sorgular, sorgusu oldukları ana sorgudan önce çalıştırılırlar. Parantez içine yazılılırlar ve "where" sözcüğüyle birlikte kullanılarak istenilen sorgu yanıtının aralığını daraltmaya yardımcı olurlar [1,4].<br />
<br /></div>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> select bolumad from bolumler as bolum where bolumgelir> (bolumgelir avg() from bolum)
</code></pre>
<div>
<br /></div>
<div>
<h3>
<span style="color: #e06666;">Örnek HQL Sorgusu</span></h3>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> var bloglar = s.CreateQuery("from Blog b where b.Baslik = :baslik and b.Altbaslik = :altbaslik")
.SetParameter("baslik","Nil Busra Ozer Kisisel Blog")
.SetParameter("altbaslik", "Hibernate Query Language")
.List<Blog>();
</code></pre>
</div>
<div>
<span style="color: #e06666;"><br /></span></div>
<br />
Bugünlük anlatacaklarım bu kadar. HQL çok derin bir konu olduğu için özellikle temel kullanımlarına değinmek istedim. Bir sonraki yazımda görüşmek üzere, hoşçakalın..<br />
<br /></div>
<h3>
<span style="color: #e06666;">Kaynaklar</span></h3>
<div>
<span style="color: #e06666;"><br /></span></div>
<div style="text-align: justify;">
[1]HibernateQueryLanguage,http://www.tutorialspoint.com/hibernate/hibernate_query_language.htm, Nisan 8, 2015.</div>
<div style="text-align: justify;">
<br />
[2]Introducing HQL: The Object-Oriented Query Language from Hibernate, http://www.developer.com/open/article.php/3322131/Introducing-HQL-The-Object-Oriented-Query-Language-from-Hibernate.htm, Nisan 8, 2015.<br />
<br />
[3]Using HQL (Hibernate Query Langıage), http://docs.castleproject.org/Active%20Record.Using%20HQL%20(Hibernate%20Query%20language).ashx, Nisan 9, 2015.<br />
<br />
[4]NHibernate Queries-Examples, http://ayende.com/blog/4023/nhibernate-queries-examples, Nisan 9, 2015.<br />
<br />
<br /></div>
<div style="text-align: justify;">
<br /></div>
Nil Buşra Koçerhttp://www.blogger.com/profile/07084098285875162702noreply@blogger.com0tag:blogger.com,1999:blog-4511869999190707921.post-17207203746894620912015-04-05T10:56:00.003-07:002015-04-05T10:56:36.330-07:00Fluent NHibernate CRUD İşlemleri<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Herkese merhabalar.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Bugün sizlere Fluent NHibernate'in temel konusu olan CRUD işlemlerinden bahsedeceğim. Bu işlemleri gerçekleştirmeyi öğrendiğinizde Fluent NHibernate'i daha iyi kavramaya başlayacağınızı fark edeceksiniz. Gelin hep birlikte aşağıdaki örneğimiz ile bu işlemleri anlayalım.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Örneğimizde <b>teknoloji </b>isimli bir veritabanımız olacak. Bu veritabanımızda, Marka, Telefon ve Televizyon tablolarını oluşturup bunlar üzerinde okuma, kayıt ekleme, kayıt silme ve kayıt güncelleme işlemlerini gerçekleştireceğiz.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Önceki yazımda bahsettiğim şekilde gerekli dll dosyalarımızı projemize ekleyelim.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWX0R0vcyt73ltZcM2JfGb3jFRHpjLE2P3P_DjGqSgGvVprE2L1FTR6pHPWIQIM3dZJhhtx6YFSniTU6mj7MpnD4yw-L-kx_D86F1X8nr5d07lDorC16xvdtbsXHRfNN55DVJ4tRjP29JA/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWX0R0vcyt73ltZcM2JfGb3jFRHpjLE2P3P_DjGqSgGvVprE2L1FTR6pHPWIQIM3dZJhhtx6YFSniTU6mj7MpnD4yw-L-kx_D86F1X8nr5d07lDorC16xvdtbsXHRfNN55DVJ4tRjP29JA/s1600/Untitled.png" height="176" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Solution explorer'ımıza aşağıdaki şekilde uygun klasörlerin altında sınıflarımızı oluşturalım.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizbWv-xyrkdBH93PZ8kaqGxjldOQkhWnkwJq8sfcAV1EWP8AWiLEj4EaVOu1GqzaIxAvQCMSm3Ug0volk8D8rBliNu5Od-szZRIXaBak4CAVslE-2IurzK2O4uMO43zz4bJNmPmhSh2LFJ/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizbWv-xyrkdBH93PZ8kaqGxjldOQkhWnkwJq8sfcAV1EWP8AWiLEj4EaVOu1GqzaIxAvQCMSm3Ug0volk8D8rBliNu5Od-szZRIXaBak4CAVslE-2IurzK2O4uMO43zz4bJNmPmhSh2LFJ/s1600/Untitled.png" height="400" width="241" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
Örneğimizde; iki teknolojik cihaz ve bunların markaları üzerinden gideceğiz. Telefonun marka ile ve Televizyonun marka ile many-to-one ilişkisi vardır. Şöyle ki; bir telefonun bir markası var iken bir marka birden fazla telefona hatta farklı televizyon gibi telefondan farklı cihazların markası olabilmektedir.</div>
<h3 style="clear: both; text-align: justify;">
<span style="color: #e06666;"><b><br /></b><b>Marka.cs</b></span></h3>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TelefonFluentHibernate.Entites
{
class Marka
{
public virtual int MarkaId { get; set; }
public virtual string MarkaAd { get; set; }
}
}
</code></pre>
<br />
<h3>
<span style="color: #e06666;">Telefon.cs</span></h3>
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TelefonFluentHibernate.Entites
{
class Telefon
{
public virtual int telefonId{get; set;}
public virtual string telefonAd { get; set;}
public virtual string telefonRenk { get; set; }
public virtual int telefonFiyat { get; set; }
public virtual Marka telefonMarka { get; set; }
}
}
</code></pre>
<br />
<h3>
<span style="color: #e06666;">Televizyon.cs</span></h3>
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TelefonFluentHibernate.Entites
{
class Televizyon
{
public virtual int televizyonId { get; set; }
public virtual string televizyonAd { get; set; }
public virtual string televizyonRenk { get; set; }
public virtual int televizyonFiyat { get; set; }
public virtual Marka televizyonMarka { get; set; }
}
}
</code></pre>
<br />
<h3>
<span style="color: #e06666;">MarkaMap.cs</span></h3>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> using FluentNHibernate.Mapping;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TelefonFluentHibernate.Entites;
namespace TelefonFluentHibernate.Mapping
{
class MarkaMap : ClassMap <Marka>
{
public MarkaMap()
{
Id(x => x.MarkaId);
Map(x => x.MarkaAd);
Table("Marka");
}
}
}
</code></pre>
<h3>
<span style="color: #e06666;">TelefonMap.cs</span></h3>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> using FluentNHibernate.Mapping;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TelefonFluentHibernate.Entites;
namespace TelefonFluentHibernate.Mapping
{
class TelefonMap : ClassMap <Telefon>
{
public TelefonMap()
{
Id(x => x.telefonId);
Map(x => x.telefonAd);
Map(x => x.telefonFiyat);
Map(x => x.telefonRenk);
References(x => x.telefonMarka).Column("MarkaId");
Table("Telefon");
}
}
}
</code></pre>
<h3>
<span style="color: #e06666;">TelevizyonMap.cs</span></h3>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"><code style="color: black; word-wrap: normal;"> using FluentNHibernate.Mapping;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TelefonFluentHibernate.Entites;
namespace TelefonFluentHibernate.Mapping
{
class TelevizyonMap : ClassMap <Televizyon>
{
public TelevizyonMap()
{
Id(x => x.televizyonId);
Map(x => x.televizyonAd);
Map(x => x.televizyonFiyat);
Map(x => x.televizyonRenk);
References(x => x.televizyonMarka).Column("MarkaId");
Table("Televizyon");
}
}
} </code><code style="word-wrap: normal;"><span style="color: #e06666;">
</span></code></code></pre>
<h3>
<span style="color: #e06666;">NHibernateHelper.cs</span></h3>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"><code style="color: black; word-wrap: normal;"> using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate;
using NHibernate.Tool.hbm2ddl;
using TelefonFluentHibernate.Entites;
namespace TelefonFluentHibernate
{
public class NHibernateHelper
{
private static ISessionFactory _sessionFactory;
private static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
InitializeSessionFactory();
return _sessionFactory;
}
}
private static void InitializeSessionFactory()
{
_sessionFactory = Fluently.Configure()
.Database(MySQLConfiguration.Standard
.ConnectionString(
@"Server=localhost; Port=3306;Database=teknoloji; Uid=root; Pwd=;")
.ShowSql()
)
.Mappings(m =>
m.FluentMappings
.AddFromAssemblyOf<Program>())
.ExposeConfiguration(cfg => new SchemaExport(cfg)
.Create(true, true))
.BuildSessionFactory();
}
public static ISession OpenSession()
{
return SessionFactory.OpenSession();
}
}
} </code><code style="word-wrap: normal;"><span style="color: #e06666;">
</span></code></code></pre>
<h3>
<span style="color: #e06666;">Program.cs</span></h3>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"><code style="color: black; word-wrap: normal;"> using NHibernate;
using NHibernate.Criterion;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TelefonFluentHibernate.Entites;
namespace TelefonFluentHibernate
{
class Program
{
static void Main(string[] args)
{
var telefonNNote4 = new Telefon
{
telefonAd = "note 4",
telefonFiyat = 500,
telefonRenk = "beyaz"
};
var televizyon = new Televizyon
{
televizyonAd = "tv1",
televizyonRenk = "siyah",
televizyonFiyat = 1000
};
var televizyon2 = new Televizyon
{
televizyonAd = "tv2",
televizyonRenk = "beyaz",
televizyonFiyat = 1430
};
var markaSamsung = new Marka
{
MarkaAd = "samsung"
};
var markaApple = new Marka
{
MarkaAd = "apple"
};
//Create kısmı. Telefon Ekle
Ekle<Telefon>(telefonNNote4);
//Televizyon ekle
Ekle<Televizyon>(televizyon);
Ekle<Televizyon>(televizyon2);
//Marka ekle
Ekle<Marka>(markaSamsung);
Ekle<Marka>(markaApple);
//Update kısmı. Telefonu güncelle
telefonNNote4.telefonMarka = markaSamsung;
Guncelle<Telefon>(telefonNNote4);
//Televizyonu güncelle
televizyon.televizyonMarka = markaApple;
televizyon.televizyonRenk = "pembe";
Guncelle<Televizyon>(televizyon);
televizyon2.televizyonMarka = markaApple;
Guncelle<Televizyon>(televizyon2);
//Read kısmı
Marka marka = Oku("apple");
Console.WriteLine("Okunan satir: "+marka.MarkaId+" - "+marka.MarkaAd);
//Delete kısmı. Televizyon sil
Sil<Televizyon>(televizyon);
}
private static void Ekle<T>(T yeniKayit)
{
using (var session = NHibernateHelper.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
session.Save(yeniKayit);
transaction.Commit();
Console.WriteLine("Yeni kayıt eklendi.");
}
}
}
private static void Guncelle<T>(T guncelKayit)
{
using (var session = NHibernateHelper.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
session.SaveOrUpdate(guncelKayit);
transaction.Commit();
Console.WriteLine("Kayit güncellendi. ");
}
}
}
private static void Sil<T>(T silKayit)
{
using (var session = NHibernateHelper.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
session.Delete(silKayit);
transaction.Commit();
Console.WriteLine("Kayit silindi. ");
}
}
}
private static Marka Oku(string markaAdi)
{
using (var session = NHibernateHelper.OpenSession())
{
Marka markaQuery = (from markaNesnesi in session.QueryOver<Marka>()
where markaNesnesi.MarkaAd == markaAdi
select markaNesnesi).SingleOrDefault();
/*IQuery q2 = session.CreateQuery("from Marka WHERE markaAd='" + markaAdi + "';");
var markaListesi = q2.List<Marka>();*/
Console.WriteLine("Uygun satır bulundu: " + markaQuery.MarkaAd);
return markaQuery;
}
}
}
} </code><code style="word-wrap: normal;"><span style="color: #e06666;">
</span></code></code></pre>
<h3>
<span style="color: #e06666;">Konsol Çıktısı</span></h3>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> alter table telefon drop foreign key FKA4173F7AC8A29C0D
alter table Televizyon drop foreign key FK7ADB542AC8A29C0D
drop table if exists Marka
drop table if exists telefon
drop table if exists Televizyon
create table Marka (
MarkaId INTEGER NOT NULL AUTO_INCREMENT,
MarkaAd VARCHAR(255),
primary key (MarkaId)
)
create table telefon (
telefonId INTEGER NOT NULL AUTO_INCREMENT,
telefonAd VARCHAR(255),
telefonFiyat INTEGER,
telefonRenk VARCHAR(255),
MarkaId INTEGER,
primary key (telefonId)
)
create table Televizyon (
televizyonId INTEGER NOT NULL AUTO_INCREMENT,
televizyonAd VARCHAR(255),
televizyonFiyat INTEGER,
televizyonRenk VARCHAR(255),
MarkaId INTEGER,
primary key (televizyonId)
)
alter table telefon
add index (MarkaId),
add constraint FKA4173F7AC8A29C0D
foreign key (MarkaId)
references Marka (MarkaId)
alter table Televizyon
add index (MarkaId),
add constraint FK7ADB542AC8A29C0D
foreign key (MarkaId)
references Marka (MarkaId)
NHibernate: INSERT INTO telefon (telefonAd, telefonFiyat, telefonRenk, MarkaId)
VALUES (?p0, ?p1, ?p2, ?p3);?p0 = 'note 4' [Type: String (6)], ?p1 = 500 [Type:
Int32 (0)], ?p2 = 'beyaz' [Type: String (5)], ?p3 = NULL [Type: Int32 (0)]
NHibernate: SELECT LAST_INSERT_ID()
Yeni kayıt eklendi.
NHibernate: INSERT INTO Televizyon (televizyonAd, televizyonFiyat, televizyonRen
k, MarkaId) VALUES (?p0, ?p1, ?p2, ?p3);?p0 = 'tv1' [Type: String (3)], ?p1 = 10
00 [Type: Int32 (0)], ?p2 = 'siyah' [Type: String (5)], ?p3 = NULL [Type: Int32
(0)]
NHibernate: SELECT LAST_INSERT_ID()
Yeni kayıt eklendi.
NHibernate: INSERT INTO Televizyon (televizyonAd, televizyonFiyat, televizyonRen
k, MarkaId) VALUES (?p0, ?p1, ?p2, ?p3);?p0 = 'tv2' [Type: String (3)], ?p1 = 14
30 [Type: Int32 (0)], ?p2 = 'beyaz' [Type: String (5)], ?p3 = NULL [Type: Int32
(0)]
NHibernate: SELECT LAST_INSERT_ID()
Yeni kayıt eklendi.
NHibernate: INSERT INTO Marka (MarkaAd) VALUES (?p0);?p0 = 'samsung' [Type: Stri
ng (7)]
NHibernate: SELECT LAST_INSERT_ID()
Yeni kayıt eklendi.
NHibernate: INSERT INTO Marka (MarkaAd) VALUES (?p0);?p0 = 'apple' [Type: String
(5)]
NHibernate: SELECT LAST_INSERT_ID()
Yeni kayıt eklendi.
NHibernate: UPDATE telefon SET telefonAd = ?p0, telefonFiyat = ?p1, telefonRenk
= ?p2, MarkaId = ?p3 WHERE telefonId = ?p4;?p0 = 'note 4' [Type: String (6)], ?p
1 = 500 [Type: Int32 (0)], ?p2 = 'beyaz' [Type: String (5)], ?p3 = 1 [Type: Int3
2 (0)], ?p4 = 1 [Type: Int32 (0)]
Kayit güncellendi.
NHibernate: UPDATE Televizyon SET televizyonAd = ?p0, televizyonFiyat = ?p1, tel
evizyonRenk = ?p2, MarkaId = ?p3 WHERE televizyonId = ?p4;?p0 = 'tv1' [Type: Str
ing (3)], ?p1 = 1000 [Type: Int32 (0)], ?p2 = 'pembe' [Type: String (5)], ?p3 =
2 [Type: Int32 (0)], ?p4 = 1 [Type: Int32 (0)]
Kayit güncellendi.
NHibernate: UPDATE Televizyon SET televizyonAd = ?p0, televizyonFiyat = ?p1, tel
evizyonRenk = ?p2, MarkaId = ?p3 WHERE televizyonId = ?p4;?p0 = 'tv2' [Type: Str
ing (3)], ?p1 = 1430 [Type: Int32 (0)], ?p2 = 'beyaz' [Type: String (5)], ?p3 =
2 [Type: Int32 (0)], ?p4 = 2 [Type: Int32 (0)]
Kayit güncellendi.
NHibernate: SELECT this_.MarkaId as MarkaId0_0_, this_.MarkaAd as MarkaAd0_0_ FR
OM Marka this_ WHERE this_.MarkaAd = ?p0;?p0 = 'apple' [Type: String (5)]
Uygun satır bulundu: apple
Okunan satir: 2 - apple
NHibernate: DELETE FROM Televizyon WHERE televizyonId = ?p0;?p0 = 1 [Type: Int32
(0)]
Kayit silindi.
</code></pre>
<br />
Yukarıdaki örnekte kodu yorumları ile birlikte çok rahat anlayacaksınız. Sadece üç tane entity ve üç tane mapping sınıfımız var ve bunlar üzerinde; ekleme, okuma, güncelleme ve silme işlemlerini gerçekleştiriyoruz. Dikkat etmeniz gereken özellikle önemli gördüğüm noktalara değinmek istiyorum. Marka ile Telefon veya Marka ile Televizyon arasındaki ilişki many-to-one olduğundan dolayı; referans olarak many olan tarafta yani Telefonda ve Televizyonda Marka'yı belirtmek zorundayız. "References" kullanımını many olan kısımda yazdığımızı üzerine basa basa söylemek istiyorum aksi taktirde durduk yere hatalar ile karşılaşırsınız. İkinci olarak söylemek istediğim; Marka tipindeki Oku metodu ile markayı okuduğumuz zaman karşımıza çıkan ilk kaydı döndürmek istersek, aşağıdaki şekilde SingleOrDefault yapısını kullanmalıyız.<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> Marka markaQuery = (from markaNesnesi in session.QueryOver<Marka>()
where markaNesnesi.MarkaAd == markaAdi
select markaNesnesi).SingleOrDefault();
</code></pre>
<br />
Eğer aradığımız marka adına sahip tüm nesneleri döndürmek istiyorsak, aşağıdaki kod parçasının yardımı ile okuma yapmalıyız.<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> IQuery q2 = session.CreateQuery("from Marka WHERE markaAd='" + markaAdi + "';");
var markaListesi = q2.List<Marka>();
</code></pre>
<br />
Bugünlük anlatacaklarım bu kadar. Herkese bol kodlu günler.<br />
<br />
<h3>
<span style="color: #e06666;">Referanslar</span></h3>
[1] Create, read, update and delete, http://en.wikipedia.org/wiki/Create,_read,_update_and_delete, Nisan 2, 2015.<br />
<br />
[2]Simplify Database Operations with Generic Fluent NHibernate, http://www.codeproject.com/Articles/380022/Simplify-Database-Operations-with-Generic-Fluent-N, Nisan 3, 2015.<br />
<br />
[3]Tutorial on NHibernate and FluentNhibernate, https://thehelios.wordpress.com/2011/07/11/tutorial-on-nhibernate-and-fluentnhibernate/, Nisan 4, 2015. <br />
<h1 class="firstHeading" id="firstHeading" lang="en" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; font-family: 'Linux Libertine', Georgia, Times, serif; font-size: 1.8em; font-weight: normal; line-height: 1.3; margin: 0px 0px 0.25em; overflow: visible; padding: 0px; text-align: start;">
<br /></h1>
</div>
Nil Buşra Koçerhttp://www.blogger.com/profile/07084098285875162702noreply@blogger.com0tag:blogger.com,1999:blog-4511869999190707921.post-20617576165688640912015-03-20T08:44:00.006-07:002015-03-20T10:55:02.287-07:00Fluent NHibernate Eşleştirme İlişki Çeşitleri<br />
<div style="text-align: justify;">
Herkese merhabalar.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Bugün sizlere eşleştirme çeşitlerinden bahsetmek istiyorum. One-to-many, many-to-one, many-to-many, one-to-one olmak üzere 4 çeşit eşleştirme tipinden bahsedeceğiz. Bu eşleştirme çeşitlerini öğrenirken, geçen hafta anlatmış olduğum terimlerin kullanımını daha iyi anlayacaksınız.</div>
<div style="text-align: justify;">
<br /></div>
<h4 style="text-align: justify;">
<span style="color: #e06666;">1. One-to-One İlişkisi</span></h4>
<div>
<span style="color: #e06666;"><br /></span></div>
<div style="text-align: justify;">
Bu eşleştirme tipinde Türkçe karşılığı ile bire bir ilişkisi vardır. Çok yaygın kurulan bir ilişki çeşidi değildir. Örnek verecek olursak; bir arabanın bir direksiyonu vardır ve o direksiyon da ancak bir arabaya ait olabilir. One-to-one ilişkisini aşağıdaki örnek ile daha iyi anlayacaksınız. Aşağıdaki örnekte; one-to-one ilişkisini sağlamak için iki sınıf da birbirinin özelliğini içermelidir. Tek çocuklu bir aileyi düşünün. Bir annenin sadece bir tane çocuğu vardır; aynı şekilde çocuğun da bir tane annesi vardır.<br />
<br /></div>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> public class Anne
{
public virtual int Id {get;set;}
public virtual string isim {get;set;}
public virtual string soyisim {get;set;}
public virtual Cocuk cocukisim { get; set; }
}
public class Cocuk
{
public virtual int Id {get;set;}
public virtual string isim {get;set;}
public virtual string soyisim {get;set;}
public virtual Anne anneisim;
}
</code></pre>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> public AnneMap()
{
HasOne(x =&gt; x.cocukisim)
.Cascade.All();
}
public CocukMap()
{
References(x =&gt; x.anneisim)
.Unique();
}
</code></pre>
<br />
<div style="text-align: justify;">
Yukarıda one-to-one mapping ilişkisinin genel yapısını görmüş olduk. Mapping sınıflarının içindeki HasOne ve References'ın kullanımına dikkat edin. <span style="color: #e06666;">References</span> terimini kullanıyorsanız; bu ilişkinin karşılıklı birebir ilişkisi olduğunu belirtmek için <span style="color: #e06666;">Unique</span> terimini kullanmayı unutmamalıs<span style="font-family: Times, Times New Roman, serif;">ınız [1].</span></div>
<br />
<h4>
<span style="color: #e06666;">2. Many-to-One İlişkisi</span></h4>
<div>
<span style="color: #e06666;"><br /></span></div>
<div style="text-align: justify;">
Bu ilişki tipinden örneği ile birlikte ikinci hafta bahsetmiştik. <a href="http://nilbusraozer.blogspot.com.tr/2015_03_01_archive.html" target="_blank"><span style="color: #e06666;">Lütfen inceleyiniz.</span></a> Bu ilişki çeşidini hatırlamak adına örnek verecek olursak; bir sınıf düşünün, bu sınıfın birden fazla öğretmeni olabilir; ama bir öğretmen sadece bir sınıfa ders veriyor şeklinde bir ilişki ayarlamak istediğiniz zaman many-to-one ilişkisi kurulmuş olacak. <span style="color: #e06666;">References </span>teriminin many olan kısımda kullanıldığına dikkat ediniz.</div>
<div>
<span style="color: #e06666;"><br /></span></div>
<div>
<span style="color: #e06666;"><br /></span></div>
<h4>
<span style="color: #e06666;">3. One-to-Many İlişkisi</span></h4>
<div>
<span style="color: #e06666;"><br /></span></div>
<span style="color: #e06666;"> </span>Many-to-one ilişkisinin tersi şeklinde düşünebiliriz. Aşağıdaki örnek ile daha iyi anlayacaksınız [2].<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> public class Sinif
{
public virtual int Id { get; set; }
public virtual string Ad { get; set; }
public virtual Ogretmen Ogretmen { get; set; }
}
public class SinifMap : ClassMap<Sinif>
{
public Sinif Map()
{
Id(u => u.Id).GeneratedBy.Identity();
Map(u => u.Ad).Nullable();
References(x => x.Ogretmen)
.Column("OgretmenId")
.Not.Nullable();
}
}
</code></pre>
<h4>
</h4>
<h4>
</h4>
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> public class Ogretmen
{
public virtual int Id { get; set; }
public virtual string Ad { get; set; }
public virtual IList&lt;Sinif&gt; Siniflar { get; set; }
public Ogretmen()
{
Siniflar = new List&lt;Sinif&gt;();
}
}
public class OgretmenMap : ClassMap<Ogretmen>
{
public OgretmenMap()
{
Id(u =&gt; u.Id).GeneratedBy.Identity();
Map(u =&gt; u.Ad).Nullable();
HasMany(u =&gt; u.Siniflar)
.KeyColumn("OgretmenId")
.Inverse()
.Cascade.All();
}
}
</code></pre>
<br />
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
Yukarıdaki örnekte bir öğretmen birden fazla sınıfın dersine girmektedir; ancak her sınıfa bir tane öğretmen girmektedir. Bu yüzden References terimi many olan "SinifMap" sınıfının içinde ve HasMany terimi ise one olan tarafta yazılmıştır [3].</div>
<div style="text-align: justify;">
<br /></div>
<h4>
<span style="color: #e06666;">4. Many-to-Many İlişkisi</span></h4>
<div>
<span style="color: #e06666;"><br /></span></div>
<div style="text-align: justify;">
<span style="color: #e06666;"> </span>Yukarıdaki örnekten devam edecek olursak; bu ilişki tipinde, bir sınıfın dersine birden fazla öğretmen girebiliyorsa, bir öğretmen de birden fazla sınıfın dersine girebilecektir. Aşağıdaki örnekte ise bir elbiseyi birden fazla kişi sipariş edebilir ve sipariş eden kişi birden fazla elbise sipariş edebilir. Böylelikle many-to-many ilişkisi sağlanmış olur [4].<br />
<br /></div>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> class Siparis
{
public virtual IList<Giysi> Giysiler { get; protected set; }
}
class Giysi
{
public virtual IList<Siparis> Siparisler { get; protected set; }
}
</code></pre>
<span style="color: #e06666;"><br /></span>
<br />
<h4>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> public class SiparisMap : ClassMap<Siparis>
{
public SiparisMap()
{
HasManyToMany(x => x.Giysiler)
.Cascade.All()
.Table("SiparisGiysi");
}
}
public class GiysiMap : ClassMap<Giysi>
{
public GiysiMap()
{
HasManyToMany(x => x.Siparisler)
.Cascade.All()
.Inverse()
.Table("SiparisGiysi");
}
}
</code></pre>
</h4>
<h4 style="color: #e06666;">
<span style="color: #e06666;"><br /></span></h4>
<div style="text-align: justify;">
<span style="color: #e06666;"> <span style="font-weight: normal;"> </span></span><span style="font-weight: normal;">Bugünlük anlatacaklarım bu kadar, bir sonraki yazımda CRUD işlemlerinden bahsedeceğim, hoşçakalın..</span></div>
<br />
<span style="color: #e06666;">Kaynaklar</span><br />
<div>
<br /></div>
<div style="text-align: justify;">
[1] Fluent NHibernate One-to-One mapping, http://stackoverflow.com/questions/15724562/fluent-nhibernate-one-to-one-mapping, Mart 18, 2015.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
[2]NHIBERBATE 2: MAPPING RELATIONSHIPS AND FLUENT MAPPING, https://www.packtpub.com/books/content/nhibernate-2-mapping-relationships-and-fluent-mapping, Mart 18, 2015.</div>
<br />
[3] Fluent NHibernate Has Many Mapping, http://frankdecaire.blogspot.com.tr/2014/04/fluent-nhibernate-hasmany-mapping.html, Mart 19, 2015.<br />
<br />
<div style="text-align: justify;">
[4]Many to Many Mapping in Fluent NHibernate, http://www.duncanmcdougall.co.uk/articles/manytomany-fluentnhibernate.html, Mart 19, 2015.</div>
Nil Buşra Koçerhttp://www.blogger.com/profile/07084098285875162702noreply@blogger.com0tag:blogger.com,1999:blog-4511869999190707921.post-13632526637691756212015-03-15T05:49:00.001-07:002015-03-15T05:49:10.369-07:00Fluent NHibernate ile İlişkisel Nesneler Tasarlamak, Lazy Loading ve Eager Loading<br />
Herkese merhabalar.<br />
<br />
<div style="text-align: justify;">
Bugün sizlere ilişkisel nesneler tasarlarken bilmeniz gereken bazı kavramlardan ve Fluent NHibernate'de bilmeniz gereken önemli noktalardan ikisi olan Lazy Loading ve Eager Loading'ten bahsetmek istiyorum. </div>
<br />
<span style="color: #e06666;"><b>Id</b></span><br />
<div>
<span style="color: #e06666;"><br /></span></div>
<div>
Id metodu kullanılarak Id eşleştirilmesi yapılır [1].<br />
<span style="color: #e06666;"><br /></span></div>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> Id(x => x.Id);
</code></pre>
<br />
Map edilecek olan Id'nin ismi Id olarak istenmiyorsa Column metodu kullanılarak aşağıdaki şekilde değiştirilebilir [1].<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> Id(x => x.Id)
.Column("ogrenciId")
.GeneratedBy.Assigned();
</code></pre>
<br />
<span style="color: #e06666;"><b>Map</b></span><br />
<div>
<span style="color: #e06666;"><br /></span></div>
Map metodu ile veritabanı ve class'ların eşleşitirlmesi yapılır [1].<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> Map(x => x.FirstName);
</code></pre>
<br />
<span style="color: #e06666;"><b>References</b></span><br />
<div>
<span style="color: #e06666;"><br /></span></div>
<div style="text-align: justify;">
Many to one ilişkilendirilmesinde kullanılır. Many tarafında yazılır. Bunun bir örneğini geçen haftaki yazımda incelemiştik. Many olan tarafta yazılır. <span style="color: #e06666;">HasMany/one-to-many</span>, References ilişkilendirilmesinin bir başka türüdür <span style="color: #e06666;">one</span> tarafında yazılırlar [1].</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: #e06666;"><b>HasManyToMany/many-to-many</b></span></div>
<div style="text-align: justify;">
<span style="color: #e06666;"><br /></span></div>
<div style="text-align: justify;">
Many to many ilişkilendirilmesinde kullanılır [2].</div>
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> HasManyToMany(x => x.Kitaplar); </code></pre>
<span style="color: #e06666; font-family: Times, Times New Roman, serif;"><br /></span>
<span style="color: #e06666; font-family: Times, Times New Roman, serif;"><b>HasOne/one-to-one</b></span><br />
<span style="text-align: justify;"><br /></span>
<span style="text-align: justify;"> One to one ilişkilendirilmesinde kullanılır. Bu ilişkilendirilmede HasOne metodunu kullanıyorken foreign key'inizi belirtmek isterseniz; <span style="color: #e06666;">PropertyRef() </span>metodunu kullanabilirsiniz. Eğer References metodunu kullanıyorsanız; çift taraflı eşleştirmenin one-to-one olduğunu göstermek için <span style="color: #e06666;">.Unique() </span>belirtecini kullanmalısınız [1].</span><br />
<span style="text-align: justify;"><br /></span>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> public class ArabaMap : ArabaMap<Araba>
{
public ArabaMap()
{
Table( "Araclar.dbo.Araba" );
Id( x => x.ArabaId );
Map( x => x.Ad );
Map( x => x.yil );
HasOne( x => x.Direksiyon ).PropertyRef( x => x.Araba);
}
}
public class DireksiyonMap : ClassMap<Direksiyonl>
{
public DireksiyonMap()
{
Table( "Araclar.dbo.Direksiyon" );
Id( x => x.DireksiyonId );
Map( x => x.Cap );
Map( x => x.Renk );
References( x => x.Araba, "ArabaId" ).Unique();
}
}
</code></pre>
<span style="color: #e06666; font-family: Times, Times New Roman, serif;"><br /></span>
<span style="font-family: Times, Times New Roman, serif;">Yukarıdaki örnekte araba ile direksiyon eşleştirilmesi one-to-one olmuştur ve bu ilişki eşleştirme sınıflarında yukarıdaki şekilde belirtilmelidir. Her arabanın bir tane direksiyonu olur ve o direksiyon ancak bir tane arabaya ait olabilir</span><span style="color: #e06666; font-family: Times, Times New Roman, serif;">.</span><br />
<span style="color: #e06666; font-family: Times, Times New Roman, serif;"><br /></span>
<span style="color: #e06666; font-family: Times, Times New Roman, serif;"><b>Lazy Loading</b></span><br />
<div>
<span style="color: #e06666; font-family: Times, Times New Roman, serif;"><br /></span></div>
<div style="text-align: justify;">
<span style="text-align: start;">Lazy Loading veya Eager Loading'in etkin olması durumu programın performansını önemli derecede etkilemektedir. </span>Lazy loading, nesneyi oluşturduğuz zaman o nesneye bağlı olan diğer nesneler de çağırdığınızda onunla birlikte gelmemesi durumudur [3]. Çağırılan nesne ile ilgili diğer nesenelerinde beraberinde glmesini istiyorsanız, Lazy Loading etkinken bu durumu belirtmeniz gerekmektedir. Çağrılan ilgili veri <span style="color: #e06666;">persistent</span>, ona bağlı olan veri ise <span style="color: #e06666;">transient</span> olarak geçmektedir. Lazy Loading, olabildiğince minimum veri ile çalışmayı sağlayarak programın performansını arttırmak için kullanılır. Fluent NHibernate'de default olarak Lazy Loading etkindir [4].<br />
<br />
Lazy Loading'in default olarak gelmesini istemiyorsanız aşağıdaki kod parçası ile bu özelliği devre dışı bırakabilirsiniz [3].<br />
<br /></div>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> Not.LazyLoad();
</code></pre>
<div style="text-align: justify;">
<br />
Geçen hafta bahsettiğimiz convention sınıflarında aşağıdaki kod parçası ile Lazy Loading'i devre dışı bırakabilirsiniz.</div>
<div style="text-align: justify;">
<div>
<span style="color: #e06666; font-family: Times, Times New Roman, serif;"><br /></span></div>
</div>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> var conventions = new Conventions();
conventions.DefaultLazyLoad = false;
</code></pre>
<div style="text-align: justify;">
<br />
Eşleştirme sınıfınızın içinde aşağıdaki şekilde Lazy Loading'i devre dışı bırakabilirsiniz.<br />
<br />
<pre style="background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); height: auto; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="word-wrap: normal;"><span style="font-family: arial;"><span style="font-size: 12px; line-height: 20px;"> </span></span><span style="background-color: transparent; font-size: 12px; line-height: 20px; text-align: justify;">using System;
<div style="text-align: left;">
<span style="background-color: transparent;">using System.Collections.Generic;</span></div>
using System.Linq;
using System.Text;
<div style="text-align: left;">
<span style="background-color: transparent;">using IlkFluentNHibernateProjem.Entites;</span></div>
using FluentNHibernate.Mapping;
<div style="text-align: left;">
<span style="background-color: transparent;"> public class OgrenciMap : ClassMap<Ogrenci></span></div>
namespace IlkFluentNHibernateProjem.Mapping
{
{
//Constructor
<div style="text-align: left;">
<span style="background-color: transparent;"> </span></div>
public OgrenciMap()
{
Id(x => x.Id);
Map(x => x.Ad);
<div style="text-align: left;">
<span style="background-color: transparent;"> References(x => x.OgrenciBolum).Column("BolumId").Not.LazyLoad();</span></div>
Map(x => x.Soyad);
Map(x => x.Donem);
Table("Ogrenci");
}
}
<div style="text-align: left;">
<span style="background-color: transparent;">}</span></div>
</span></code></pre>
<div style="text-align: left;">
<code style="color: black; word-wrap: normal;"><span style="background-color: transparent; text-align: justify;"><br /></span></code></div>
<span style="color: #e06666; font-family: Times, Times New Roman, serif;"><b>Eager Loading</b></span><br />
<br />
Eager loading, nesneyi oluşturduğuz zaman o nesneye bağlı olan diğer nesnelerin de çağırmadığınız halde otomatik olarak onunla birlikte gelmesi durumudur [5]. Gereksiz verilerin de ilgili veri ile gelmesi, programın performansını Lazy Loading kullanımına kıyasla yadsınamayacak kadar düşürecektir [5].<br />
<br /></div>
<div style="text-align: justify;">
<span style="font-weight: normal;"> Bugünlük anlatacaklarım bu kadar, bir sonraki yazımda eşleştirme çeşitlerine yönelik örnekler yapacağız, şimdilik hoşçakalın..</span></div>
<div style="text-align: justify;">
<span style="font-weight: normal;"><br /></span></div>
<div style="text-align: justify;">
<span style="color: #e06666;"><b>Kaynaklar</b></span></div>
<div style="text-align: justify;">
<span style="color: #e06666;"><br /></span></div>
<div style="text-align: justify;">
[1] Fluent Mapping, https://github.com/jagregory/fluent-nhibernate/wiki/Fluent-mapping, Mart 11, 2015.<br />
<br />
<div style="text-align: left;">
[2] Fluent-nhibernate-create-many-to-many-relationship-table, https://d4dilip.wordpress.com/2011/01/15/fluent-nhibernate-create-many-to-many-relationship-table/, Mart 11, 2015.</div>
<br /></div>
<div style="text-align: justify;">
[3] Difference between Lazy Loading and Eager Loading, http://www.dotnet-tricks.com/Tutorial/entityframework/RIWW210913-Difference-between-Lazy-Loading-and-Eager-Loading.html, Mart 12, 2015.<br />
<br />
[4] Lazy Loading in Fluent NHibernate, http://tempvalue.blogspot.com.tr/2012/05/lazyloading-in-fluent-nhibernate.html, Mart 12, 2015.<br />
<br />
<div style="border: 0px; clear: both; margin: 0px; outline: 0px; padding: 0px; text-align: start; vertical-align: baseline;">
<span style="color: #222222; text-align: justify;"><span style="font-family: Times, Times New Roman, serif;">[5]</span> </span><span style="font-family: Times, Times New Roman, serif;"><span style="font-weight: normal;"><span style="font-size: small;">Not.LazyLoad - Eager Loading with NHibernate 3.0, </span></span><span style="text-align: justify;">http://www.philliphaydon.com/2011/01/not-lazyload-eager-loading-with-nhibernate-3-0/ Mart 13, 2015.</span></span></div>
</div>
<div>
</div>
Nil Buşra Koçerhttp://www.blogger.com/profile/07084098285875162702noreply@blogger.com2tag:blogger.com,1999:blog-4511869999190707921.post-6493315981870117982015-03-08T05:12:00.000-07:002015-03-08T05:12:23.338-07:00Fluent NHibernate Kullanımı ve Convention Sınıfları<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: #666666; font-family: Times, Times New Roman, serif;"><span style="line-height: 16.7999992370605px;">Herkese merhabalar.</span></span></div>
<div style="text-align: justify;">
<span style="color: #666666; font-family: Times, Times New Roman, serif;"><span style="line-height: 16.7999992370605px;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="color: #666666; font-family: Times, Times New Roman, serif;"><span style="line-height: 16.7999992370605px;"> Bugün sizlere Fluent NHibernate'in projeye eklenmesi ve nasıl kullanıldığına dair bir örnek göstererek Fluent NHibernate kodlamasına giriş yapacağız. Ayrıca, Fluent NHibernate'te kullanılan Conventionlar üzerinde konuşacağız. Eminim ki bu yazımla Fluent NHibernate'i daha iyi tanımaya başlayacaksınız.</span></span></div>
<div style="text-align: justify;">
<span style="color: #e06666; font-family: Times, Times New Roman, serif;"><span style="line-height: 16.7999992370605px;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="color: #e06666; font-family: Times, Times New Roman, serif;"><span style="line-height: 16.7999992370605px;"><b> 1. NHibernate Conventionlar'ı</b></span></span></div>
<div style="text-align: justify;">
<span style="color: #666666; font-family: Times, Times New Roman, serif;"><span style="line-height: 16.7999992370605px;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="color: #666666; font-family: Times, Times New Roman, serif;"><span style="line-height: 16.7999992370605px;"> NHibernate'in desteklediği Convention'lar aşağıda belirttiğim 2 durum için kullanılmaktadır [1].</span></span></div>
<div style="text-align: justify;">
<span style="color: #666666; font-family: Times, Times New Roman, serif;"><span style="line-height: 16.7999992370605px;"><br /></span></span></div>
<div style="text-align: justify;">
</div>
<ul>
<li><span style="color: #666666; font-family: Times, 'Times New Roman', serif; line-height: 16.7999992370605px;">Tablo ve kolon isimleri, eşleştirmede özel olarak belirtilmediği zamanlar</span></li>
<li><span style="color: #666666; font-family: Times, 'Times New Roman', serif; line-height: 16.7999992370605px;">Full domain eşleştrimesi</span></li>
</ul>
<div style="text-align: justify;">
<span style="color: #666666; font-family: Times, Times New Roman, serif;"><span style="line-height: 16.7999992370605px;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="color: #e06666; font-family: Times, Times New Roman, serif;"><span style="line-height: 16.7999992370605px;"><b>1.1. Tablo ve Kolon İsimlerinin Adlandırılması</b></span></span></div>
<div style="text-align: justify;">
<span style="color: #666666; font-family: Times, Times New Roman, serif;"><span style="line-height: 16.7999992370605px;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="color: #666666; font-family: Times, Times New Roman, serif;"><span style="line-height: 16.7999992370605px;"> NHibernate'te tablo ve kolon isimlerini özel olarak belirtmediğiniz durumlarda NHibernate'in isimlendirme stratejisi devreye girerek "sınıf" ve "property"isimleri tablo ve kolon isimlerine verilir, benzer şekilde tersi de gerçekleşmektedir. NHibernate'in iki tane isimlerindirme stratejisi vardır [1].</span></span></div>
<div style="text-align: justify;">
<span style="color: #666666; font-family: Times, Times New Roman, serif;"><span style="line-height: 16.7999992370605px;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Times, Times New Roman, serif;"><span style="line-height: 16.7999992370605px;"><span style="color: #e06666;"><b>Default Naming stratejisi</b></span><span style="color: #666666;"><b>:</b> Configuration kısmında isimlendirme stratejisi ile ilgili ekstra bir şey belirtmediğiniz sürece bu strateji devreye girerek isimlendirmeleri birebir gerçekleştirir. Örneğin; kodunuzdaki sınıfınızın ismi "Öğrenci" ise veritabanınızda oluşan tablonun adı da doğrudan doğruya "Öğrenci"olacaktır; çünkü siz configuration kısmında bir şey belirtmediniz ve bu yüzden otomatik olarak "Default Naming" devreye girmiş oldu [1].</span></span></span></div>
<div style="text-align: justify;">
<span style="color: #666666; font-family: Times, Times New Roman, serif;"><span style="line-height: 16.7999992370605px;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="color: #666666; font-family: Times, Times New Roman, serif;"><span style="line-height: 16.7999992370605px;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Times, Times New Roman, serif;"><span style="line-height: 16.7999992370605px;"><span style="color: #e06666;"><b>Improved Naming stratejisi</b>: </span>Eşleştirme yapılırken sınıf isminizi tablo isminize eşleştiriken alt tire kullanılır. Örneğin; "BenimEvim" adlı sınıfınız, "benim_evim" adlı bir tabloya eşleştirilir. Bu isimlendirme stratejisini kullanabilmek için configuration'da aşağıdaki şekilde değişiklik yapmalısınız [1].</span></span><br />
<span style="font-family: Times, Times New Roman, serif;"><span style="line-height: 16.7999992370605px;"><br /></span></span>
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> 1: cfg.SetNamingStrategy(ImprovedNamingStrategy.Instance);
</code></pre>
<br />
<span style="font-family: Times, 'Times New Roman', serif; line-height: 16.7999992370605px; text-align: start;"><span style="color: #e06666; text-decoration: underline;"><b>Full Domain Eşleştrimesi</b>: </span>Eşleştirmeyi kod ile yapmanın avantajlarından birisi de Conventionlar sayesinde eşleştirmelerinizin otomatik olarak yapılabilmesidir. Bu nasıl olacak ki dediğinizi duyar gibiyim. Şöyle oluyor; sizin sınıflarınızın veritabanı nesneleri ile nasıl ilişkilendirilip eşleştirilmenin yapılacağına karar veren sınıflar var [2]. Şimdilik size bu sınıfları tanıtacağım; ancak ileriki yazılarımda sadece bunları nasıl kullanacağınızı bilmekten öte bu sınıfları kendinize göre uyarlayabilecek hale geleceksiniz ve kendi Convention sınıflarınızı yazabilir hale geleceksiniz. Aşağıda bu Convention sınıf örneklerinin bazılarını tanıtacağım. Daha detaylı bilgi için <span style="color: #e06666;"><a href="http://marcinobel.com/index.php/fluent-nhibernate-conventions-examples/" target="_blank"><span style="color: #e06666;">bu siteyi</span></a> </span>takip edebilirsiniz.</span></div>
<div style="text-align: justify;">
<span style="font-family: Times, 'Times New Roman', serif; line-height: 16.7999992370605px; text-align: start;"><br /></span></div>
<div style="text-align: justify;">
<b style="color: #e06666; font-family: 'lucida grande', 'liberation sans', verdana, arial, helvetica, sans-serif;"><span style="font-size: 12px;">ColumnNullabilityConvention:</span> </b><span style="font-family: Times, Times New Roman, serif;"><span style="font-weight: normal;"><span style="font-size: small;">Bu sınıf, eğer kolonun boş bırakılabilirliği belirtilmediyse otomatik olarak boş bırakılamama durumunu seçmektedir [2].</span></span></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> public class ColumnNullabilityConvention
: IPropertyConvention, IPropertyConventionAcceptance
{
public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria)
{
criteria.Expect(x => x.Nullable, Is.Not.Set);
}
public void Apply(IPropertyInstance instance)
{
instance.Not.Nullable();
}
}
</code></pre>
<br />
<div style="text-align: left;">
<span style="font-family: lucida grande, liberation sans, verdana, arial, helvetica, sans-serif;"><span style="font-size: 12px;"><b style="color: #e06666;">PrimaryKeyNameConvention: </b>Bu sınıf, primary key olan her kolonun entity adının sonuna Id son ekini alarak isimlendirilmesini sağlar [2].</span></span> <br />
<span style="font-family: lucida grande, liberation sans, verdana, arial, helvetica, sans-serif;"><span style="font-size: 12px;"><br /></span></span>
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> public class PrimaryKeyNameConvention : IIdConvention
{
public void Apply(IIdentityInstance instance)
{
instance.Column(instance.EntityType.Name + "Id");
}
}
</code></pre>
<br />
<b style="color: #e06666;">StringColumnLengthConvention: </b>String tipindeki kolonun uzunluk sınırı belirtilmediyse bu sınıf sayesinde otomatik olarak uzunluk 100 olarak atanır [2].<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> public class StringColumnLengthConvention
: IPropertyConvention, IPropertyConventionAcceptance
{
public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria)
{
criteria.Expect(x => x.Type == typeof(string))
.Expect(x => x.Length == 0);
}
public void Apply(IPropertyInstance instance)
{
instance.Length(100);
}
}
</code></pre>
<br />
<b style="color: #e06666; font-family: Times, 'Times New Roman', serif; line-height: 16.7999992370605px; text-align: justify;"> 2. Fluent NHibernate Projeye Eklenmesi ve İlk Örneğimiz</b><br />
<b style="color: #e06666; font-family: Times, 'Times New Roman', serif; line-height: 16.7999992370605px; text-align: justify;"><br /></b>
<br />
<div style="text-align: left;">
<span style="font-family: Times, 'Times New Roman', serif; line-height: 16.7999992370605px; text-align: justify;"> Örneğe geçmeden önce Fluent NHibernate ile ilgili dll dosyalarını referans olarak göstermemiz gerekiyor. <a href="https://www.nuget.org/packages/FluentNHibernate/1.3.0.717" target="_blank"><span style="color: #e06666;">Bu siteden</span></a> gidişatı takip ettiğinizde eklenmesinin çok kolay olduğunu göreceksiniz [3].</span><br />
<span style="font-family: Times, 'Times New Roman', serif; line-height: 16.7999992370605px; text-align: justify;"><br /></span></div>
<div style="text-align: left;">
<span style="font-family: Times, 'Times New Roman', serif; line-height: 16.7999992370605px; text-align: justify;"> Aşağıda gördüğünüz gibi projeye başlamadan önce gerekli dll dosyalarını <span style="color: #e06666;">References </span>kısmına ekledik. Unutmadan şunu da belirtmeliyim ki ben MySql veritabanı kullandığım için <span style="color: #e06666;">MySql.Data.dll </span>dosyasını referans kısmına eklemek zorunda kaldım. Eğer </span><span style="font-family: Times, 'Times New Roman', serif; line-height: 16.7999992370605px; text-align: justify;">MySql veritabanı kullanıyorsanız bu detayı gözden kaçırmamalısınız.</span></div>
<div style="text-align: left;">
<span style="font-family: Times, 'Times New Roman', serif; line-height: 16.7999992370605px; text-align: justify;"><br /></span></div>
<div style="text-align: left;">
<span style="font-family: Times, 'Times New Roman', serif; line-height: 16.7999992370605px; text-align: justify;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFIgc3oxSYkEGRMWNw2vPW73zq9CT-UXj_bFSAGsZbuXh5Dm7MeU_4pT-Y8orBTgC5JNVWUSoieNyASLEYfcMp-4LW9IWk0TJd988Nsn0nqwzJr_FpRIEX5BkRZMaPqFyqpKOpr0MdFaSF/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFIgc3oxSYkEGRMWNw2vPW73zq9CT-UXj_bFSAGsZbuXh5Dm7MeU_4pT-Y8orBTgC5JNVWUSoieNyASLEYfcMp-4LW9IWk0TJd988Nsn0nqwzJr_FpRIEX5BkRZMaPqFyqpKOpr0MdFaSF/s1600/1.png" /></a></div>
<span style="font-family: Times, 'Times New Roman', serif; line-height: 16.7999992370605px; text-align: justify;"><br /></span>
<br />
<div style="text-align: justify;">
<span style="font-weight: normal;"> Aşağıdaki örnekte, okul isimli veritabanında öğrenci ve bölümü olmak üzere eşleştirme ilişkisi "many to one" olan iki tablo oluşturdum. Şöyle ki bir öğrenci sadece bir bölüme kayıtlı olabiliyorken bir bölüm birden fazla öğrenciye ait olabiliyor. Eşleştirme ilişkilerini önümüzdeki haftalarda çeşitleri ile birlikte detaylı bir şekilde anlatacağım. Bu örnek için many to one'ın ne anlama geldiğini bilmeniz yeterli olacaktır. Solution Explorer'ımızın görünümü aşağıdaki gibidir [4].</span></div>
<div style="text-align: justify;">
<br />
<span style="font-weight: normal;"></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyqfS_a0E_VJns0IWShQvTQPhClsflHiWOLnpuoAMw5OsPu8_QONpmJkBF689MesKpK3OE_oM-Y5Hn1ml8X5a9lt7xH5JHI89rRMLA0nbiQga-On-XcDI01Qr2tl2ppf740rM6lsoqGMgK/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyqfS_a0E_VJns0IWShQvTQPhClsflHiWOLnpuoAMw5OsPu8_QONpmJkBF689MesKpK3OE_oM-Y5Hn1ml8X5a9lt7xH5JHI89rRMLA0nbiQga-On-XcDI01Qr2tl2ppf740rM6lsoqGMgK/s1600/2.png" height="320" width="289" /></a></div>
<br />
<h3>
<b><span style="color: #e06666;">Bolum.cs:</span></b></h3>
<h3>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace IlkFluentNHibernateProjem.Entites
{
public class Bolum
{
public virtual int Id { get; set; }
public virtual string BolumAd { get; set; }
public virtual string BolumKodu { get; set; }
}
}
</code></pre>
<b><span style="color: #e06666;"><br /></span></b></h3>
<div>
<h3>
<b><span style="color: #e06666;">Ogrenci.cs:</span></b></h3>
</div>
<h3>
<b><pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace IlkFluentNHibernateProjem.Entites
{
public class Ogrenci
{
public virtual int Id {get; set;}
public virtual string Ad { get; set; }
public virtual string Soyad { get; set; }
public virtual string Donem { get; set; }
public virtual Bolum OgrenciBolum { get; set; }
}
}
</code></pre>
</b></h3>
<div style="text-align: justify;">
Bu sınıfta Bolum tipinde "OgrenciBolum" oluşturulmasının sebebi; "OgrenciMap" sayfasında "OgrenciBolum" kısmına Bolum tablosundaki BolumId'yi referans olarak gösterebilme amacı ile yazılmıştır. Böylelikle bir öğrenci eklediğiniz zaman OgrenciBolum kısmına BolumId'yi ekleyecektir.</div>
<h3>
<b><span style="color: #e06666;">BolumMap.cs:</span></b></h3>
<h3>
</h3>
<h3>
<b><pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FluentNHibernate.Mapping;
using IlkFluentNHibernateProjem.Entites;
namespace IlkFluentNHibernateProjem.Mapping
{
public class BolumMap : ClassMap<Bolum>
{
//Constructor
public BolumMap()
{
Id(x => x.Id);
Map(x => x.BolumAd);
Map(x => x.BolumKodu);
Table("Bolum");
}
}
}
</code></pre>
</b></h3>
<h3>
<b><span style="color: #e06666;">OgrenciMap.cs:</span></b></h3>
<h3>
</h3>
<h3>
<b><pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FluentNHibernate.Mapping;
using IlkFluentNHibernateProjem.Entites;
namespace IlkFluentNHibernateProjem.Mapping
{
public class OgrenciMap : ClassMap<Ogrenci>
{
//Constructor
public OgrenciMap()
{
Id(x => x.Id);
Map(x => x.Ad);
Map(x => x.Soyad);
Map(x => x.Donem);
References(x => x.OgrenciBolum).Column("BolumId");
Table("Ogrenci");
}
}
}
</code></pre>
</b></h3>
<h3>
<b><span style="color: #e06666;">NHibernateHelper.cs:</span></b></h3>
<h3>
</h3>
<h3>
<pre style="background-attachment: initial; background-clip: initial; background-color: #f0f0f0; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; font-weight: bold; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate;
using NHibernate.Tool.hbm2ddl;
using IlkFluentNHibernateProjem.Entites;
namespace IlkFluentNHibernateProjem
{
public class NHibernateHelper
{
private static ISessionFactory _sessionFactory;
private static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
InitializeSessionFactory();
return _sessionFactory;
}
}
private static void InitializeSessionFactory()
{
_sessionFactory = Fluently.Configure()
.Database(MySQLConfiguration.Standard
.ConnectionString(
@"Server=localhost; Port=3306;Database=okul; Uid=root; Pwd=;")
.ShowSql()
)
.Mappings(m =>
m.FluentMappings
.AddFromAssemblyOf<Program>())
.ExposeConfiguration(cfg => new SchemaExport(cfg)
.Create(true, true))
.BuildSessionFactory();
}
public static ISession OpenSession()
{
return SessionFactory.OpenSession();
}
}
} </code></pre>
<div style="text-align: justify;">
<span style="font-weight: normal;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-weight: normal;"> Gerekli konfigürasyonları gerçekleştiren sınıftır. Veritabanı çeşidini değiştirdiğinizde tek yapmanız gereken bu dosyadaki ConnectionString kısmında değişiklik yapmak. İşte Fluent NHibernate'in güzelliklerinden birisi, farklı veritabanları ile çalışmak Fluent NHibernate ile bu kadar basit.</span></div>
<div style="text-align: justify;">
<span style="font-weight: normal;"><br /></span></div>
<b style="color: #e06666; font-weight: bold;"><span style="color: #e06666;">Program.cs:</span></b></h3>
<h3>
<br />
<pre style="background-attachment: initial; background-clip: initial; background-color: #f0f0f0; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; font-weight: bold; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using IlkFluentNHibernateProjem.Entites;
namespace IlkFluentNHibernateProjem
{
class Program
{
static void Main(string[] args)
{
Bolum bolum;
using (var session = NHibernateHelper.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
bolum = new Bolum {BolumAd = "Bilgisayar Mühendisliği", BolumKodu = "BIM" };
session.Save(bolum);
transaction.Commit();
Console.WriteLine("Bolum eklendi: " + bolum.BolumAd);
session.Close();
}
}
using (var session = NHibernateHelper.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
var ogrenci = new Ogrenci { Ad = "Nil Buşra", Soyad = "Özer", Donem = "8", OgrenciBolum = bolum };
session.Save(ogrenci);
transaction.Commit();
Console.WriteLine("Ogrenci kaydedildi: " + ogrenci.Ad + " " + ogrenci.Soyad);
session.Close();
}
}
}
}
}
</code></pre>
<span style="font-weight: normal;"><br /></span>
<span style="font-weight: normal;"> Şunu söylemeliyim ki her işlem için sessionları açıp kapamanız gerekmektedir. Aksi taktirde hatalar ile karşılaşacaksınız.</span><br />
<b><span style="color: #e06666;"><b><span style="color: #e06666;">Arka Planda Çalışan Sorgular:</span></b></span></b></h3>
<h3>
<br /><b style="color: #e06666; font-weight: bold;"><span style="color: #e06666;"><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-R9jy8lfGJGODh8Mppi1FB6yNroX7omBSma_SDUtE7Bk9rvneeNCSDUyK_tLB8GXJZs8BGIVzTpaWkxZvo9KzgCekhR0zlh_hgjWBzKS7giXbp3qbDEnSGZ13IqdjvR8TVamsuoATOTaO/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-R9jy8lfGJGODh8Mppi1FB6yNroX7omBSma_SDUtE7Bk9rvneeNCSDUyK_tLB8GXJZs8BGIVzTpaWkxZvo9KzgCekhR0zlh_hgjWBzKS7giXbp3qbDEnSGZ13IqdjvR8TVamsuoATOTaO/s1600/4.png" /></a></div>
</span></b><br />
</h3>
<h3 style="color: #e06666; font-weight: bold;">
<b><span style="color: #e06666;"><div class="separator" style="clear: both; text-align: center;">
</div>
</span></b></h3>
<div style="color: #e06666; font-weight: bold;">
Program Çalıştıktan Sonra Veritabanı:</div>
<div style="color: #e06666; font-weight: bold;">
<br /></div>
<div class="separator" style="clear: both; color: #e06666; font-weight: bold; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEib3iWaoAVXWoEj9D_aFvYdXa6Qoju8FkWXCGzRLQJwQmtsvaw2_ymx5Tr8gUPv96obVZfuZYO2JMsCS7NQDpQZhf7IVnUWE0GiNFt-5BoyBSlCXNFwnSpi3h4Ukwn3iQFFeogYi1daqWqm/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEib3iWaoAVXWoEj9D_aFvYdXa6Qoju8FkWXCGzRLQJwQmtsvaw2_ymx5Tr8gUPv96obVZfuZYO2JMsCS7NQDpQZhf7IVnUWE0GiNFt-5BoyBSlCXNFwnSpi3h4Ukwn3iQFFeogYi1daqWqm/s1600/3.png" height="265" width="640" /></a></div>
<div style="color: #e06666; font-weight: bold;">
<br /></div>
<span style="font-weight: normal;"> Bu haftalık anlatacaklarım bu kadar, umarım faydalı bir yazı olmuştur. Bir sonraki yazımda; Fluent NHibernate ile ilişkisel nesneler tasarlamak, Lazy Loading ve Eager Loading konularından bahsedeceğim. Şimdilik görüşmek üzere, hoşçakalın..</span><br />
<h3 style="color: #e06666; font-weight: bold;">
<b><span style="color: #e06666;"><br /></span></b></h3>
<span style="color: #e06666;">
Kaynaklar</span><br />
<div>
<b><span style="color: #e06666;"><br /></span></b></div>
</div>
</div>
<div>
[1] NHibernate Conventions, http://weblogs.asp.net/ricardoperes/nhibernate-conventions, Mart 1, 2015.</div>
<div>
<br /></div>
<div>
[2] Fluent NHibernate conventions-examples, http://marcinobel.com/index.php/fluent-nhibernate-conventions-examples/, Mart 2, 2015.</div>
<div>
<br /></div>
<div>
[3] nuget, https://www.nuget.org/packages/FluentNHibernate/1.3.0.717, Mart 2, 2015.<br />
<br />
[4] Start Fluent NHibernate, http://www.codeproject.com/Articles/305493/Start-Fluent-NHibernate, Mart 2, 2015.</div>
Nil Buşra Koçerhttp://www.blogger.com/profile/07084098285875162702noreply@blogger.com1tag:blogger.com,1999:blog-4511869999190707921.post-28830640452302856562015-02-28T18:07:00.001-08:002015-02-28T18:07:18.683-08:00ORM, NHibernate ve Fluent NHibernate Giriş<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: "Times New Roman","serif"; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: TR;">Herkese merhabalar.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
</div>
<div class="MsoNormal" style="line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0cm; text-align: justify;">
<span style="font-family: "Times New Roman","serif"; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: TR;">
Uzun bir aradan sonra yeniden birlikteyiz. Bugünlerde merak sardığım
NHibernate ve Fluent NHibernate konularını gelin hep birlikte örnekleri ile
beraber anlayalım. Bu hafta konuyu daha iyi anlamanız açısından direkt kodlara
girmek istemeyerek tanım odaklı anlatacağım; ancak önümüzdeki haftalarda bol
bol örnekler ile konuları detaylı bir şekilde inceleyeceğiz. NHibernate’e
geçmeden önce neyi neden yapacağımızı daha iyi anlamanız açısından, ORM
kavramından bahsetmek istiyorum.<o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0cm; text-align: justify;">
<span style="font-family: "Times New Roman","serif"; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: TR;"><br /></span></div>
<h3 style="line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0cm; text-align: justify;">
<span style="font-family: "Times New Roman","serif"; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: TR;"><span style="color: #e06666;">1. ORM </span></span></h3>
<div>
<span style="font-family: "Times New Roman","serif"; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: TR;"><span style="color: #e06666;"><br /></span></span></div>
<div style="text-align: left;">
<span style="color: #e06666;"><span style="font-family: Times New Roman, serif;"> </span><span style="font-family: Times, Times New Roman, serif;"> </span></span><span style="font-family: Times, Times New Roman, serif;">ORM (Object-Relational Mapping), nesneye yönelik bir programlama metodu sunan, ilişkisel</span></div>
<div style="text-align: justify;">
<span style="font-family: Times, 'Times New Roman', serif;">veritabanları ile nesne tabanlı uygulamaların arasındaki veri uyumunu sağlayan, nesnelerimizi ilişkisel veritabanındaki tablomuza bağlayan ve veri alış-verişini bizim için yapan bir tekniktir[1]. Neden biz bu tekniği kullanalım dediğinizi duyar gibiyim. Nedenlerini sıralayacak olursak; yazılan kodun veritabanından bağımsızlığını sunuyor. Bu sayede, veritabanınızı değiştirmek zorunda kaldığınızda, kodlamanızda sadece bağlantı ayarlarında değişiklik yapmanız gerekecek, böylelikle büyük bir külfetten kurtulmuş olacaksınız. ORM araçlarının çoğu açık kaynak kodludur, programlama dilinden bağımsızdır[2]. Ayrıca ORM, polymorphism, caching, transaction gibi karşılaşılan birçok soruna çözüm sunarak yazılımcıların işini kolaylaştırıyor[2].</span></div>
<div style="text-align: justify;">
<span style="font-family: Times, 'Times New Roman', serif;"><br /></span></div>
<div style="text-align: justify;">
<h3>
<span style="color: #e06666; font-family: Times, Times New Roman, serif;">2. NHibernate</span></h3>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"> NHibernate’in ne olduğunu anlamak için öncelikle Hibernate’in tanımını bilmeliyiz. Hibernate, Java platformunda yazılmış, yukarıda bahsetmiş olduğum ORM’in araçlarından biridir[3]. NHibernate ise Hibernate’in .NET çatısı için yeniden yazılmış bir türevidir[3]. NHibernate, SQL sorgu cümleleri yazarak projelerimizdeki veritabanıyla iletişime geçme zahmetinden bizi kurtarır, ilgili veriler üzerinde ekleme, silme, güncelleme, veri çekme ve birçok işlemi kolaylıkla yapmamıza olanak sağlar[4]. Veri yapılarınızı bildirirken iki farklı yol izleyebilirsiniz. Birincisi xml kodları ile veri yapınızı bildirmek diğeri ise ilgili sınıfları yazıp NHibernate’e sınıfa göre tabloları vb. oluşturmasını istediğinizi bildirmek ki ben bu yöntemi tercih edeceğim, bu yöntem Fluent NHibernate kullanımına girmektedir; ama yinede örneklerinizde tercih sizindir[4]. Hangi yöntem kolayınıza geliyorsa o yöntemi tercih etmelisiniz. Her ne kadar adı ürkünç gelse de konunun içine girdiğiniz zaman, özellikle büyük veritabanları olan kurumsal şirketlerden birinde yazılımcıysanız sizi ne büyük zahmetlerden kurtardığını gördükçe NHibernate vazgeçilmeziniz olacak. NHibernate ile ilgili bazı terimleri uygulama geliştirmeden önce bilmeniz, neyi ne için kullandığınızı daha rahat anlamanızı sağlayacaktır.</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><span style="color: #e06666;">Session:</span> Veritabanına bağlantı, veri çekimi ve basit bir “Unit of Work” implementasyonudur.</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><span style="color: #e06666;">ICreteria API:</span> Tekrar kullanılabilir, hızlı sorgular üretmek için geliştirililmiş bir yöntemdir.</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><span style="color: #e06666;">HQL:</span> String bazlı nesneler üzerine de uygulanabilen bir sorgu dilidir.</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><span style="color: #e06666;">Schema Mapping:</span> Veritabanında hangi tabloların hangi nesnelerle; hangi kolonların, hangi property’ler ile eşleşeceğini, ilişkilerin neler olduğunu belirttiğimiz hbm.xml uzantılı dosyalardır.</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><span style="color: #e06666;">Dialect:</span> NHibernate’in hangi veritabanı dilini kullanması gerektiğini belirttiğimiz veritabanına özel dildir[5]. </span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="color: #e06666; font-family: Times, Times New Roman, serif;">NHibernate Avantajları:</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Daha yüksek üretkenlik.</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"> o<span class="Apple-tab-span" style="white-space: pre;"> </span>Sizin adınıza veritabanı işlerini organize ederek sizi karmaşalardan kurtararak veriminizin artmasını sağlar[6].</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Daha kolay bakım.</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"> o<span class="Apple-tab-span" style="white-space: pre;"> </span>Daha az satır kod[6].</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Veritabanı çeşidinden bağımsızlık.</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"> o<span class="Apple-tab-span" style="white-space: pre;"> </span>ORM aracılığıyla yazılan veritabanı erişim kodları sayesinde kolaylıkla farklı veritabanlarında çalıştırılabilir[6].</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="color: #e06666; font-family: Times, Times New Roman, serif;">NHibernate Dezavantajları:</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Performans[6].</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Çoğu zaman Stored Procedure ve View’lardan yavaş çalışır[6].</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>XML mapping karışıklığı[6].</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Öğrenilmesi biraz zaman alabilir[6].</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<h3>
<span style="color: #e06666; font-family: Times, Times New Roman, serif;">3. Fluent NHibernate</span></h3>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"> Fluent NHibernate’in NHibernate’in özelliklerinden farklı olan tarafı, veri yapılarının XML dosyası ile değil de kodlardaki sınıf yapıları ile eşleştirilmesidir[7]. Bu yöntem bazı kullanıcılara daha kolay gelmektedir; ancak her iki yöntemin de kendine has avantaj ve dezavantajları mevcuttur.</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="color: #e06666; font-family: Times, Times New Roman, serif;">Fluent NHibernate Avantajları:</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Daha az kod tekrarı.</span></div>
<div style="text-align: justify;">
<span style="font-family: Times, 'Times New Roman', serif; text-align: center;"> o</span><span class="Apple-tab-span" style="font-family: Times, 'Times New Roman', serif; text-align: center; white-space: pre;"> </span><span style="font-family: Times, 'Times New Roman', serif; text-align: center;">Defalarca XML kodlarını tekrarlamanıza gerek kalmaz[8].</span></div>
<div style="text-align: justify;">
<span style="font-family: Times, 'Times New Roman', serif; text-align: center;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>XML’e kıyasla daha anlaşılır kodlar[8].</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>XML kodları compiler tarafından derlenmediği için programı çalıştırmadığınız sürece hatalarınızı göremezsiniz[9].</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Test edilebilirlik[8].</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Veritabanı çeşidinden bağımsızlık[8].</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, 'Times New Roman', serif;">•</span><span class="Apple-tab-span" style="font-family: Times, 'Times New Roman', serif; white-space: pre;"> </span><span style="font-family: Times, 'Times New Roman', serif;">Automapping özelliği mevcuttur[9].</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>XML’e kıyasla daha az kod satırı ile eşlemenizi daha kolay şekilde gerçekleştirebilirsiniz[9].</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="color: #e06666; font-family: Times, Times New Roman, serif;">Fluent NHibernate Dezavantajları:</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Performans kaybı daha çoktur[6].</span></div>
<div>
<br /></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>NHibernate’e göre daha yeni gelişen bir teknoloji olduğundan ortaya çıkabilecek hata payı NHibernate’e kıyasla daha fazladır[6].</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Çok fazla sınıf yapısı içermesi gereken programlarda duruma göre XML mapping kullanmak daha uygun olabilmektedir[6].</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">ORM, NHibernate ve Fluent NHibernate kavramlarını gördükten sonra bundan sonra hangi konuları anlatmayı planladığıma bakalım.</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">1.<span class="Apple-tab-span" style="white-space: pre;"> </span>Fluent NHibernate kullanımı ve Convention sınıfları.</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">2.<span class="Apple-tab-span" style="white-space: pre;"> </span>Fluent NHibernate ile ilişkisel nesneler tasarlamak, Lazy Loading, Eager Loading.</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">3.<span class="Apple-tab-span" style="white-space: pre;"> </span>Fluent NHibernate eşleme çeşitleri(mappings).</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">4.<span class="Apple-tab-span" style="white-space: pre;"> </span>Fluent NHibernate CRUD işlemleri.</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">5.<span class="Apple-tab-span" style="white-space: pre;"> </span>HQL(Hibernate Query Language).</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">6.<span class="Apple-tab-span" style="white-space: pre;"> </span>Fluent NHibernate ile kullanıcı tanımlı tipler kullanmak.</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">7.<span class="Apple-tab-span" style="white-space: pre;"> </span>Fluent NHibernate Automapping.</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">8.<span class="Apple-tab-span" style="white-space: pre;"> </span>Convention sınıflarının yeniden yazılması.</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">9.<span class="Apple-tab-span" style="white-space: pre;"> </span>Kalıtımsal eşleme.</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">Bu haftalık anlatacaklarım bu kadar, bir sonraki yazımda sizlere Fluent NHibernate kullanımı ve Convention sınıflarından bahsedeceğim. Şimdilik görüşmek üzere, hoşçakalın..</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<h3>
<span style="color: #e06666; font-family: Times, Times New Roman, serif;">Kaynaklar</span></h3>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">[1] ORM Nedir, http://www.cagataybulut.com/2013/07/orm-nedir.html, Şubat 21, 2015.</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">[2] ORM nedir ve ne zaman kullanma(ma)lıyız, http://www.barisdere.com/2010/12/orm-nedir-ve-ne-zaman-kullanmamaliyiz-2/, Şubat 21, 2015.</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">[3] Hibernate, NHibernate Nedir, http://tanertemelce.blogspot.com.tr/2013/01/hibernate-nhibernate-nedir.html, Şubat 23, 2015.</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">[4] Yeni yazı disizi: NHibernate, http://b.zor.lu/yeni-yazi-disizi-nhibernate/, Şubat 23, 2015.</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">[5] NHibernate’e Başlama Klavuzu, http://www.tahircakmak.com/2008/05/nhibernatee-baslama-klavuzu_20.html, Şubat 22, 2015.</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">[6] NHibernate mappings using xml, attributes, and Fluent NHibernate, http://www.davesquared.net/2008/09/nhibernate-mappings-using-xml.html, Şubat 24, 2015.</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">[7]FluentNHibernate NhibernateGiriş-1,</span><span style="font-family: Times, 'Times New Roman', serif;">http://bilgehanyildiz.com/2011/11/10/fluentnhibernatenhibernategiris1/, Şubat 24, 2015.</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">[8] Fluent NHibernate introduction and quick start guide</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">, http://marekblotny.blogspot.com.tr/2008/12/fluent-nhibernate-introduction-and.html, Şubat 22, 2015.</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">[9] NHibernate for Entity Framework Developers: Part 1 – Fluent NHibernate, http://weblogs.asp.net/manavi/nhibernate-for-entity-framework-developers-part-1-fluent-nhibernate, Şubat 26, 2015.</span></div>
<div style="font-family: Times, 'Times New Roman', serif;">
<br /></div>
</div>
Nil Buşra Koçerhttp://www.blogger.com/profile/07084098285875162702noreply@blogger.com0tag:blogger.com,1999:blog-4511869999190707921.post-1686622701025520132014-01-04T14:47:00.000-08:002014-01-04T14:47:21.833-08:00<span style="color: #0b5394; font-size: x-large;">Typeface.js Kütüphanesi</span><br />
<span style="color: black;"> </span><br />
<div style="text-align: justify;">
<span style="color: black;"> </span><span style="color: #444444;"> </span>Herkese Merhabalar.</div>
<div style="text-align: justify;">
<span style="color: black;"></span><br /></div>
<div style="text-align: justify;">
Bir <span style="font-family: Times;">hafta aradan sonra sizlerle tekrardan beraberiz. Bu hafta sizlere <b>typeface.js</b> isimli JavaScript kütüphanesinden bahsetmek istiyorum</span>. Kullanımı oldukça basit olan ve kompleks bir yapıda olmayan bu kütüphanenin yardımımıza koşması ile web sitenizde yazılarınıza istediğiniz fontu eklemek için artık flash kullanmanıza, resimler oluşturmanıza gerek kalmadı. Bu kütüphane sayesinde sitenize dilediğiniz fontu ve rengi kolay bir şekilde ekleyebilirsiniz. Cümlenin harfleri arasındaki boşluk, harflerin üst ve alttaki boşlukları da tercihinize uygun bir şekilde ayarlanabilmektedir. Kütüphaneyi <a href="http://css-tricks.com/typefacejs-a-sifr-alternative/">bu siteden</a> indirip projenize ekleyebilirsiniz. Web sitenize font eklemek için<b> typeface.js</b> kütüphanesini kullanacağınız zaman, bu kütüphanenin okuyabileceği fontları indirip eklemeniz gerekir. Bu 3 fontu <a href="http://typeface.neocracy.org/fonts.html">bu siteden</a> indirip projenize ekleyebilirsiniz. Bu fontların neler olduğuna hep beraber bir göz atalım.<br />
<br />
<h4>
<span style="color: #cc0000; font-size: large;">Font Ailesi: Helvetiker</span></h4>
<span style="color: #3d85c6;"> 1. Regular (Sıradan)</span><span style="color: #cc0000;"> </span><span style="color: #cc0000; font-size: large;"> </span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhuH9FlJ72kjSY5LHAN3dfQg2vF8n7EYr05vxTayhZrIvCc8tDskUv_A00XpaygW0965BNAquQCbzwCUa2pREydRj_4ZSxIgomoxvEjRo3wJhsMcyIgXcmZejiZncGg679eUQ79EQIGkvV/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="204" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhuH9FlJ72kjSY5LHAN3dfQg2vF8n7EYr05vxTayhZrIvCc8tDskUv_A00XpaygW0965BNAquQCbzwCUa2pREydRj_4ZSxIgomoxvEjRo3wJhsMcyIgXcmZejiZncGg679eUQ79EQIGkvV/s320/Untitled.png" width="320" /></a></div>
<span style="color: #cc0000; font-size: large;"><br /></span></div>
<div>
<span style="font-size: large; text-align: justify;"><span style="color: #0b5394;"><br /></span></span>
<span style="text-align: justify;"><span style="color: #0b5394;">2. Bold (Kalın)</span></span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9whARhKOTptIUOBFYmpNMb9m4lxM_PVjcVnYzkjKr8oWDnA77W2Z-WbH-6JO58_QaaCR4R9i4FClpQxmasLfe4N3zpkWdWcK8EjOD0Q3C70lnBhQGk-W63I2ypC3u4jL2WPEtRpYYXOTw/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9whARhKOTptIUOBFYmpNMb9m4lxM_PVjcVnYzkjKr8oWDnA77W2Z-WbH-6JO58_QaaCR4R9i4FClpQxmasLfe4N3zpkWdWcK8EjOD0Q3C70lnBhQGk-W63I2ypC3u4jL2WPEtRpYYXOTw/s320/Untitled.png" width="320" /></a></div>
<span style="color: #cc0000; font-size: large; text-align: justify;"><br /></span>
<span style="color: #0b5394; font-size: large; text-align: justify;"><br /></span>
<span style="color: #0b5394; text-align: justify;">3. </span><span style="color: #0b5394; text-align: justify;">Italic (Eğik)</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrZkj6HFfBndwakOrYeohcnOyDIUKcgwhLnbNxfzRzRu4JxE87W3FJI6Vq9KjZ_yfeDH0i-BKXkTWfpPeFkyehKV-k3Rh_YAXvEQfn4-TW1wG29NlEmnNq4sp3fH2pAYBEQWOSGPYGkuRq/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="203" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrZkj6HFfBndwakOrYeohcnOyDIUKcgwhLnbNxfzRzRu4JxE87W3FJI6Vq9KjZ_yfeDH0i-BKXkTWfpPeFkyehKV-k3Rh_YAXvEQfn4-TW1wG29NlEmnNq4sp3fH2pAYBEQWOSGPYGkuRq/s320/Untitled.png" width="320" /></a></div>
<br />
<div style="text-align: justify;">
<span style="color: #0b5394; font-size: large;"><br /></span></div>
<span style="color: #0b5394; text-align: justify;">4. Bold_</span><span style="color: #0b5394; text-align: justify;">Italic (Kalın ve Eğik)</span><br />
<span style="color: #0b5394; font-size: large; text-align: justify;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIQHRul_QuBlhxgaoQHvkko09iHPeL6Jq-hfjBzhjCWYs92JhbsEOFBRJqFpMsfYsbUy7sPiHTxqYr7q1TfBD18jH69SwXS-RigAzKv4nM53w_OXw6cCpslJ1t0JFN-_nmVDyNaHIOdWe4/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIQHRul_QuBlhxgaoQHvkko09iHPeL6Jq-hfjBzhjCWYs92JhbsEOFBRJqFpMsfYsbUy7sPiHTxqYr7q1TfBD18jH69SwXS-RigAzKv4nM53w_OXw6cCpslJ1t0JFN-_nmVDyNaHIOdWe4/s320/Untitled.png" width="320" /></a></div>
<h4 style="text-align: justify;">
<span style="color: #cc0000; font-size: large;">Font Ailesi: Optimer ve Gentilis </span></h4>
</div>
<div>
<span style="color: #cc0000; font-size: large;"><br /></span></div>
<div>
<span style="text-align: justify;"> Bu diğer iki fontun tiplerine de <a href="http://typeface.neocracy.org/fonts.html">bu siteden</a> bakabilirsiniz.</span></div>
<div>
<span style="text-align: justify;"><br /></span></div>
<div>
<span style="text-align: justify;"> Bu fontların sayfamıza nasıl ekleneceğini aşağıdaki kod parçacığında gösterdim.</span><br />
<span style="text-align: justify;"><br /></span></div>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> <script src="/js/typeface/typeface-0.14.js" type="text/javascript"/>
<script src="/js/typeface/fonts/helvetiker_bold.typeface.js" type="text/javascript"/>
<script src="/js/typeface/fonts/optimer_bold.typeface.js" type="text/javascript"/>
</code></pre>
<diev><br /></diev>
<diev> Aşağıda sizler için ASP.NET ortamında yapmış olduğum örneğe bir göz atalım. Öncelikle Solution Explorer'a gereken dosyalarımızı </diev> aşağıdaki gibi ekliyoruz.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJDjNoo8OC4AxOKbI_QnH4mgp4Xl3qKW_F097IWhfIN_JCp3o1LpXV9UKXNgGqpTCZy3E1KkYw0MCgv7ZPNYMUlkA6Y-FNeYTrCSpVbni5JXoP5tBhqbbDGryOVQQe1dhYs3XzkD2YBfOX/s1600/t2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJDjNoo8OC4AxOKbI_QnH4mgp4Xl3qKW_F097IWhfIN_JCp3o1LpXV9UKXNgGqpTCZy3E1KkYw0MCgv7ZPNYMUlkA6Y-FNeYTrCSpVbni5JXoP5tBhqbbDGryOVQQe1dhYs3XzkD2YBfOX/s1600/t2.png" /></a></div>
<br />
<div style="text-align: justify;">
Aşağıdaki kodlarda<b> typeface.js</b> kütüphanesinin fontlarını kullanarak değişik font ailelerinden farklı renklerde örnekler gösterdim. Umarım anlaşılır ve faydalı bir örnek olmuştur. Örneğin, projede bulunan aşağıdaki kod parçasında, <b>typeface.js</b> kütüphanesinin içerdiği <b>Elephant</b> isimli font ailesi örneğini kullanarak yazımın bu fontta ve yeşil renkte olmasını sağladım.</div>
<div style="text-align: justify;">
<br /></div>
<div>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> <div class="typeface-js" style="font-family:Elephant;color:green">
<center>Font family: Elephant!</center>
</div>
</code></pre>
</div>
<br />
<b><span style="color: #cc0000;">Proje Kodları:</span></b><br />
<b><span style="color: #cc0000;"><br /></span></b>
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Typeface JavaScript Kütüphanesi Örnek</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="style.css" />
<script type="text/javascript" src="js/typeface-0.10.js"></script>
<script type="text/javascript" src="js/optimer_regular.typeface.js"></script>
<script type="text/javascript" src="js/qlassik_medium_regular.typeface.js"></script>
</head>
<body>
<div id="page-wrap">
<div class="headline typeface-js">
Nil'in Typeface Denemesi :)
</div>
<p style="color:yellow">
TYPEFACE JAVASCRIPT KÜTÜHANESİ ÖRNEĞİ
</p>
<table style="border:dotted; border-color:aqua;height:220px;width:320px"><tr><td>
<div class="typeface-js" style="font-family: 'Angsana New';color:hotpink">
<center>Font family: Angsana New!</center>
</div>
<div class="typeface-js" style="font-family: 'Agency FB';">
<center>Font family: Agency FB!</center>
</div>
<div class="typeface-js" style="font-family: 'Aharoni';color:red">
<center>Font family: Aharoni!</center>
</div>
<div class="typeface-js" style="font-family: 'Cordia New';color:chocolate">
<center>Font family: Cordia New!</center>
</div>
<div class="typeface-js" style="font-family: 'Aparajita';color:aqua";>
<center>Font family: Aparajita!</center>
</div>
<div class="typeface-js" style="font-family:'Castellar';color:pink">
<center>Font family: Castellar!</center>
</div>
<div class="typeface-js" style="font-family: 'Bookman Old Style';color:orange">
<center>Font family: Bookman Old Style!</center>
</div>
<div class="typeface-js" style="font-family:Elephant;color:green">
<center>Font family: Elephant!</center>
</div></td></tr>
</table>
</div>
</body>
</html>
</code></pre>
<div>
<br />
<b><span style="color: #cc0000;">Ekran Görüntüsü:</span></b><br />
<b><span style="color: #cc0000;"><br /></span></b>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXNEPNdc-I50pA55xVKZ9TXl7EAWl1-YCq2pNfqewASd_DiFVoDgITR_7DX9BimBplO6l7LH97dUovptIBiRiIj8DifC8wV1ZuIxAR1C_3DtF3BCofn_sgXwL0GhJLHIho67D7HaNkkKBC/s1600/t1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="188" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXNEPNdc-I50pA55xVKZ9TXl7EAWl1-YCq2pNfqewASd_DiFVoDgITR_7DX9BimBplO6l7LH97dUovptIBiRiIj8DifC8wV1ZuIxAR1C_3DtF3BCofn_sgXwL0GhJLHIho67D7HaNkkKBC/s640/t1.png" width="640" /></a></div>
<b><span style="color: #cc0000;"><br /></span></b>
<span style="text-align: justify;">Bu haftalık anlatacaklarım bu kadar, bir sonraki yazımda buluşmak üzere</span><span style="text-align: justify;"> şimdilik hoşçakalın...</span><br />
<b><span style="color: #cc0000;"><br /></span></b>
<b><span style="color: #0b5394;">Kaynaklar</span></b><br />
<b><span style="color: #0b5394;"><br /></span></b>
<span style="color: #0b5394;">1<b>. </b></span><a href="http://css-tricks.com/typefacejs-a-sifr-alternative/">http://css-tricks.com/typefacejs-a-sifr-alternative/</a><br />
<br />
<span style="color: #0b5394;">2.</span> <a href="http://www.smashingmagazine.com/2007/08/08/80-beautiful-fonts-typefaces-for-professional-design/">http://www.smashingmagazine.com/2007/08/08/80-beautiful-fonts-typefaces-for-professional-design/</a><br />
<br />
<span style="color: #0b5394;">3.</span> <a href="http://typeface.neocracy.org/fonts.html">http://typeface.neocracy.org/fonts.html</a><br />
<br />
<span style="color: #0b5394;">4.</span> <a href="http://www.bravo-kernel.com/2010/10/introduction-to-typeface-js-based-headings/">http://www.bravo-kernel.com/2010/10/introduction-to-typeface-js-based-headings/</a></div>
Nil Buşra Koçerhttp://www.blogger.com/profile/07084098285875162702noreply@blogger.com0tag:blogger.com,1999:blog-4511869999190707921.post-61323570453508913722013-12-29T10:11:00.000-08:002013-12-29T10:11:07.499-08:00<span style="color: #0b5394; font-size: x-large;">Knockout.js Kütüphanesi</span><br />
<span style="color: black;"> </span><br />
<div style="text-align: justify;">
<span style="color: black;"> Herkese Merhabalar.</span></div>
<div style="text-align: justify;">
<span style="color: black;"></span><br /></div>
<div style="text-align: justify;">
<span style="color: black;"> Bir <span style="font-family: Times;">hafta aradan sonra sizlerle tekrardan beraberiz. Bu hafta sizlere <b>knockout.js</b> isimli JavaScript kütüphanesinden bahsetmek istiyorum</span>. <strong>Bind </strong>mekanizması sayesinde otomatik güncelleme yapmamızı sağlayan bu kütüphane, özellikle büyük ve kompleks olan projelerde JavaScript ve HTML kodlarının iç içe geçmesi ile programcının yaşadığı zorluklardan dolayı meydana gelen zaman kaybını önlemekte bize oldukça yardımcı olan bir kütüphanedir. Modelleme mantığıyla tasarım iç içe kullanılmış olduğu için programcının her ikisine de iyi derecede hakim olması zor olabilir. Böyle karışıklıkların yaşanacağı durumlarda <b>knockout.js </b>yardımımıza koşacak. Nasıl olacak dediğinizi duyar gibiyim. Şöyle ki; <b>knockout.js </b>kütüphanesi zengin ve etkileşimli kullanıcı arayüzleri oluşturma imkanı sağlar. Dinamik olarak değişen arayüz elemanları var ise kullanım ve geliştirme kolaylığı ile öne çıkmaktadır. </span><a href="http://en.wikipedia.org/wiki/MVVM"><span style="color: #0b5394;"><strong>MVVM (Model View ViewModel)</strong></span></a><span style="color: black;"> dizayn modelini kullanarak geliştirme yapılır. Modeldeki değerler, kullanıcı hareketlerine göre güncellenir. Bu kütüphanenin en etkileyici özelliği veri bağlama yapısıdır. Kütüphaneyi kullanmadan önce, </span><a href="http://knockoutjs.com/downloads/index.html"><span style="color: #0b5394;"><strong>bu siteden</strong></span></a><span style="color: black;"> indirebilirsiniz.</span></div>
<div style="text-align: justify;">
</div>
<div>
<span style="color: black;">Bu kütüphane 3 temel özellik üzerine kurulmuştur;</span></div>
<div>
<span style="color: black;"></span><br /></div>
<ul>
<li><span style="color: black;">Şablon kullanımı</span></li>
<li><span style="color: black;">Veri bağlama</span></li>
<li><span style="color: black;">Observable(gözlenebilirlik) ve bağımlılık izlemesi</span></li>
</ul>
<br />
<strong><span style="color: teal; font-family: "comic sans ms", sans-serif;"><span style="color: red; font-family: Times, "Times New Roman", serif;">MVVM(Model View ViewModel):</span></span></strong><br />
<strong><span style="color: teal; font-family: "comic sans ms", sans-serif; font-size: x-small;"><span style="color: black;"></span></span></strong><br />
<div style="text-align: justify;">
<span style="font-family: "comic sans ms", sans-serif;"><span style="font-family: Times, "Times New Roman", serif;"><span style="color: black;"><span style="color: black;"><span style="color: teal; font-family: "comic sans ms", sans-serif;"><span style="font-family: Times, "Times New Roman", serif;"><span style="color: black;">Bu kütüphanede <strong>MVVM</strong> dizayn modelini kullanarak geliştirme yapacaksak bu modelin ne olduğunu anlamamız gerekir, haydi neymiş bu</span> </span></span>MVVM bir bakalım... <span style="color: teal;"><span style="color: #0b5394; font-family: Times, "Times New Roman", serif;"><strong>Model, View ve ViewModel</strong></span></span> adında 3</span> yapıdan oluşmaktadır. Amaçları arasında arayüz yapan kişinin arka tarafta nasıl bir iş geliştirildiğini bilmeden işini yapabiliyor olması, daha çabuk genişlemeye müsait bir yapının ortaya çıkarılması sayılabilir. <strong><span style="color: #0b5394;">Model</span></strong>, verileri temsil etmektedir.<strong> <span style="color: #0b5394;">View</span></strong><span style="color: #0b5394;"> </span>kullanıcıya sunulan görüntü,<span style="color: #0b5394;"> <strong>ViewModel </strong></span>ise asıl işin geliştirildiği yapıdır. View'ın Model'i bilmesine gerek yoktur. ViewModel aracılık yapmaktadır.</span></span></span></div>
<br />
<div style="text-align: justify;">
<span style="font-family: Times, 'Times New Roman', serif;"><br /></span></div>
<span style="font-family: "comic sans ms", sans-serif;"><span style="font-family: Times, "Times New Roman", serif;"><span style="color: black;">Aşağıda sizler için ASP.NET ortamında yapmış olduğum örneği bir inceleyelim. Öncelikle kütüphanemizi Solution Explorer'a ekliyoruz.</span></span></span><br />
<span style="font-family: "comic sans ms", sans-serif;"><span style="font-family: Times, "Times New Roman", serif;"><span style="color: black;"><br /></span></span></span>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6xily2YORkW_xYlBn1boQulDuXkRvIeP3RYVwsvirA0HrjfnpxbHwWygEOe0J1E_LlUaU7wOoMAiSUwsQKD_unT-Z-OHSEhc93KCr7ibbqzcVm_8gWqm__hW7wHmZqbP5qv-vdeV1eLNT/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6xily2YORkW_xYlBn1boQulDuXkRvIeP3RYVwsvirA0HrjfnpxbHwWygEOe0J1E_LlUaU7wOoMAiSUwsQKD_unT-Z-OHSEhc93KCr7ibbqzcVm_8gWqm__hW7wHmZqbP5qv-vdeV1eLNT/s1600/Untitled.png" /></a><br />
<br />
<div style="text-align: justify;">
Aşağıdaki kod parçacığında "viewModel1" isimli <span style="color: #0b5394;"><b>View Modelimizi</b> </span>oluşturduk. Modeldeki fonksiyon ve diğer ögelerin observable(gözlenebilir) olarak oluşturulmasının nedeni dinamik olarak değiştirilebilme özelliğinin eklenebilmesidir. Ayrıca, modelde belirlemiş olduğumuz fonksiyon, listeye hayvan isimlerini eklememizi sağlayan fonksiyondur.</div>
<span style="font-family: "comic sans ms", sans-serif;"><span style="font-family: Times, "Times New Roman", serif;"><span style="color: black;"><br /></span></span></span>
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> var viewModel1 = {
kedi: ko.observable(),
array: ko.observableArray(),
hayvanEkle: function () {
this.array.push(this.kedi());
}
}; </code></pre>
<span style="color: red; font-family: Times, Times New Roman, serif;"><br /></span><span style="color: red; font-family: Times, Times New Roman, serif;"></span>
<span style="font-family: Times, Times New Roman, serif;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Times, Times New Roman, serif;">Aşağıdaki kod parçacığı Knockout'u aktifleştirmemizi sağlar. Peki Knockout modeldeki fonksiyonu nasıl algılıyor? O da elbette Knockout'un <b>applyBindings</b> metoduna <b>viewModel1'i</b> göndermemiz ile gerçekleşiyor.</span></div>
<br />
<span style="color: red; font-family: Times, Times New Roman, serif;"><br /></span>
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> ko.applyBindings(viewModel1);
</code></pre>
<br />
Aşağıdaki kod parçacığı, kullanıcı arayüzünde görülen<span style="color: #0b5394;"> View</span>'umuzdur. Textbox'a girilen değerlerin listeye eklendiği kısımdır.<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> <ul data-bind="foreach:array">
<li data-bind="text: $data"></li>
</ul>
</code></pre>
<br />
Aşağıdaki kod parçacığında, textbox içerisine yazılan değerlerin ViewModel içerisinde tanımlanmış kedi ögesinin yerini alması ile güncellenme sağlanır.<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> <h1 data-bind="text:kedi">Kedi</h1>
<input type="text" data-bind="value:kedi,valueUpdate:'afterkeydown'" />
</code></pre>
<span style="color: red; font-family: Times, Times New Roman, serif;"><br /></span>
<span style="color: red; font-family: Times, Times New Roman, serif;"><br /></span>
<span style="color: red; font-family: Times, Times New Roman, serif;">Proje Kodları:</span><br />
<span style="color: red; font-family: Times, Times New Roman, serif;"><br /></span>
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>KNOCKOUTJS ÖRNEK</title>
</head>
<body>
<h1 style="background-color:azure">KNOCKOUT JAVASCRIPT KÜTÜPHANESİ ÖRNEĞİ :)</h1>
<table>
<tr>
<td style="border: dashed">
<h1 data-bind="text:kedi">Kedi</h1>
<input type="text" data-bind="value:kedi,valueUpdate:'afterkeydown'" />
<input type="submit" data-bind="click: hayvanEkle" />
<ul data-bind="foreach:array">
<li data-bind="text: $data"></li>
</ul>
</td>
</tr>
</table>
<script src="knockout-3.0.0.js"></script>
<script>var viewModel1 = {
kedi: ko.observable(),
array: ko.observableArray(),
hayvanEkle: function () {
this.array.push(this.kedi());
}
};
viewModel1.array.push("kedi");
viewModel1.array.push("köpek");
viewModel1.array.push("tavşan");
ko.applyBindings(viewModel1);
</script>
</body>
</html>
</code></pre>
<span style="color: red; font-family: Times, Times New Roman, serif;"><br /></span>
<span style="color: red; font-family: Times, Times New Roman, serif;"><br /></span>
<span style="color: red; font-family: Times, Times New Roman, serif;"><br /></span>
<span style="color: red; font-family: Times, Times New Roman, serif;">Yazıyı Yazarken Dinamik Olarak Alt Başlık Kısmında Görünürkenki Ekran Görüntüsü:</span><br />
<span style="color: red; font-family: Times, Times New Roman, serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXLia3LZ-siTzURF3KZU7XVMrk5VpVRqcYeYiqnNLAF4kyFpCGK73ZQBd6D7vxKhZWbz2QAmEnbB-ccCUoHK_62VPmH_tP60RcSKIUFVqvL9aomIbc2FEdpEmlW65_q6j8ge1LtPR1Dqb9/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="166" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXLia3LZ-siTzURF3KZU7XVMrk5VpVRqcYeYiqnNLAF4kyFpCGK73ZQBd6D7vxKhZWbz2QAmEnbB-ccCUoHK_62VPmH_tP60RcSKIUFVqvL9aomIbc2FEdpEmlW65_q6j8ge1LtPR1Dqb9/s640/Untitled.png" width="640" /></a></div>
<br />
<span style="color: red; font-family: Times, Times New Roman, serif;">Gönder Butonuna Bastıktan Sonraki Ekran Görüntüsü:</span><br />
<span style="color: red; font-family: Times, Times New Roman, serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIdPLAxcZjsCingliptZ94OS_dLFVnO5hJMpfH8LnzUVEpJbTNq6IJ8XeSKgf4tUaxcUFNYyXzukZHjrbb6v8mc4XH-5Itjzkj8SVpO1iuucUru4nQwet_YSOI9DG2YaAbTM2ZswNx27EL/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="158" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIdPLAxcZjsCingliptZ94OS_dLFVnO5hJMpfH8LnzUVEpJbTNq6IJ8XeSKgf4tUaxcUFNYyXzukZHjrbb6v8mc4XH-5Itjzkj8SVpO1iuucUru4nQwet_YSOI9DG2YaAbTM2ZswNx27EL/s640/Untitled.png" width="640" /></a></div>
<div style="text-align: left;">
<span style="text-align: justify;"><br /></span></div>
<div style="text-align: left;">
<span style="text-align: justify;"> </span></div>
<div style="text-align: left;">
<span style="text-align: justify;">Umarım anlaşılır ve yararlı bir örnek olmuştur. Bu haftalık anlatacaklarım bu kadar, bir sonraki hafta<b> typeface</b></span><b style="text-align: justify;">.js</b><span style="text-align: justify;"> kütüphanesinden bahsedeceğim. Şimdilik görüşmek üzere, hoşçakalın...</span></div>
<span style="color: red; font-family: Times, Times New Roman, serif;"><br /></span>
<span style="color: #0b5394; font-family: Times, Times New Roman, serif;">KAYNAKLAR</span><br />
<span style="color: #0b5394; font-family: Times, Times New Roman, serif;"><br /></span>
<span style="font-family: Times, Times New Roman, serif;">1.</span><span style="color: #0b5394; font-family: Times, Times New Roman, serif;"> </span><a href="http://knockoutjs.com/documentation/observables.html">http://knockoutjs.com/documentation/observables.html</a><br />
<br />
2. <a href="http://www.youtube.com/watch?v=JGwRIbWWqjE&desktop_uri=%2Fwatch%3Fv%3DJGwRIbWWqjE&app=desktop">http://www.youtube.com/watch?v=JGwRIbWWqjE&desktop_uri=%2Fwatch%3Fv%3DJGwRIbWWqjE&app=desktop</a><br />
<br />
3. <a href="http://www.ercanaydogan.com/post/2012/02/16/Knockoutjs-JavaScript-MVVM-I.aspx">http://www.ercanaydogan.com/post/2012/02/16/Knockoutjs-JavaScript-MVVM-I.aspx</a><br />
<br />
4. <a href="http://www.nodejstr.com/2012/08/knockout-js-ve-nodejs-ile-kullanm.html">http://www.nodejstr.com/2012/08/knockout-js-ve-nodejs-ile-kullanm.html</a>Nil Buşra Koçerhttp://www.blogger.com/profile/07084098285875162702noreply@blogger.com0tag:blogger.com,1999:blog-4511869999190707921.post-40557308629468611212013-12-22T03:57:00.000-08:002013-12-22T03:57:01.093-08:00<span style="font-size: x-large;"><span style="color: #0b5394;">Bootbox.js</span> <span style="color: #0b5394;">Kütüphanesi</span></span><br />
<span style="color: #0b5394; font-size: x-large;"></span><br />
<span style="font-family: Times;"> Herkese merhabalar.</span><br />
<br />
<div style="text-align: justify;">
<span style="font-family: Times;">İki hafta aradan sonra sizlerle tekrardan beraberiz. Bu hafta sizlere <b>bootbox.js</b> isimli JavaScript kütüphanesinden bahsetmek istiyorum. Uygulaması oldukça kolay olan</span> bu kütüphane sayesinde web<span style="color: #444444;"> </span>sayfanızda <a href="http://getbootstrap.com/">Twitter Bootstrap </a>modelini kullanarak ileti kutuları oluşturabilmeniz mümkün. Alarm, teyit ettirme gibi durumlarda ileti kutularımızdaki butonlar ve yazılar ile bize seçenekler sunulur. Kütüphaneyi <a href="http://bootboxjs.com/index.html#download">bu siteden</a> indirerek işe koyulmaya başlayabiliriz. Aşağıda sizlere bu kütüphanenin önemli metotlarından bahsetmek istiyorum.<br />
<br />
<span style="color: red;">Alarm Durumu</span></div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
<br />
<span style="color: #073763;">bootbox.alert(message,callback):</span> Kullanıcıyı uyarma durumunda kullanılan metottur.<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> bootbox.alert("Merhaba Arkadaşlar :)!", function() {
Example.show("Merhaba Arkadaşlar :)! geri bildirimi");
});
</code></pre>
<br />
<span style="color: red;">Onaylama</span><br />
<span style="color: red;"><br /></span>
<span style="color: #073763;">bootbox.confirm(message,callback):</span> Kullanıcıyı onaylatma durumunda kullanılan metottur.<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> bootbox.confirm("Emin misiniz?", function(result) {
Example.show("Sonucu doğrula: "+result);
});
</code></pre>
<br />
<span style="color: red;"> Harekete Geçirmek (Prompt)</span><br />
<span style="color: red;"><br /></span>
<span style="color: #073763;">bootbox.prompt(message,callback): </span>Kullanıcıya herhangi bir sorunun cevabı sorulduğu durumda kullanılan metottur.<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> bootbox.prompt("İsminiz nedir?", function(result) {
if (result === null) {
Example.show("Prompt'a cevap verilmedi");
} else {
Example.show("Merhaba <b>"+result+"</b>");
}
});
</code></pre>
<br />
<span style="color: red;">Diyalog (Custom Dialog) Kullanımı</span><br />
<br />
Aşağıdaki örnekte<b>, "title" </b>kısmına belirlediğiniz konuşma konusunu yazabilirsiniz. Bootstrap modeline ait olan yeşil, kırmızı ve mavi renkteki üç buton bulunmaktadır. Bu butonlara tıkladığınızda <b>Example.show </b>ile ileti kutusu içerisinde dilediğiniz yazıyı kullanıcıya gösterebilirsiniz.<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> bootbox.dialog({
message: "Ben bir custom dialog'um",
title: "Custom title",
buttons: {
success: {
label: "Başarılı!",
className: "btn-success",
callback: function() {
Example.show("btn-success butonu!");
}
},
danger: {
label: "Danger!",
className: "btn-danger",
callback: function() {
Example.show("btn-danger butonu!");
}
},
main: {
label: "Tıklayınız!",
className: "btn-primary",
callback: function() {
Example.show("btn-primary butonu!");
}
}
}
});
</code></pre>
<br />
Şimdi ise sizler için ASP.NET ortamında yapmış olduğum örneğe bir bakalım. Solution Explorer' a kütüphanemizi ve bootstrap dosyalarımızı ekliyoruz.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1bNZm0GOMpgRFC0mtBIFaqExWwjiwPQ-iuSSjDF4rmgGRy-NaQSU_IrW8jmJ_kHqqCwekUqy12pizm-2dZNVB_ANKPAk_LYWT4x86RweU7j7Os-TtIq_WGCoQ0-XiG2rv2CVXFbm746Ow/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1bNZm0GOMpgRFC0mtBIFaqExWwjiwPQ-iuSSjDF4rmgGRy-NaQSU_IrW8jmJ_kHqqCwekUqy12pizm-2dZNVB_ANKPAk_LYWT4x86RweU7j7Os-TtIq_WGCoQ0-XiG2rv2CVXFbm746Ow/s1600/Untitled.png" /></a></div>
<br />
<span style="color: red;">Proje Kodları:</span><br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta charset="UTF-8">
<title>BootBox -ÖRNEK</title>
<link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="row">
<div class="span12">
<h2>Bootbox.Js - ÖRNEK</h2>
<button class="btn1 btn btn-danger">Alert Box!</button>
<button class=" btn2 btn btn-success">Prompt Box!</button>
<button class=" btn3 btn btn-primary">Confirm Box!</button>
</div>
</div>
</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
<script src="bootbox.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$('.btn2').on('click', function () {
bootbox.prompt("İsminiz nedir?", function (res) {
if (res == null) {
alert("Kullanıcı tarafından prompt reddedildi");
} else {
alert("Merhaba: " + res);
}
});
});
});
$(document).ready(function () {
$('.btn1').on('click', function () {
bootbox.alert("LÜTFEN İSMİNİZİ DİKKATLİ GİRİNİZ!!", function (res) {
});
});
});
$(document).ready(function () {
$('.btn3').on('click', function () {
bootbox.confirm("Emin misiniz?", function (res) {
});
});
});
</script>
</body>
</html>
</code></pre>
<br />
<span style="color: red;">Ekran Görüntüsü:</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEic9pEkwwS0itF12h5Lo1Y-aQAQz4oNL7RahAbYxT6lMXW7f_qSPa4d7sLgPV10HssGnBzHsvnMMFilHpsdzevVozryNDz1UWdcs-_cunKTczxa5rubmQ6RJs-rLyhh3btDCT7oE4rzxcZA/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="98" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEic9pEkwwS0itF12h5Lo1Y-aQAQz4oNL7RahAbYxT6lMXW7f_qSPa4d7sLgPV10HssGnBzHsvnMMFilHpsdzevVozryNDz1UWdcs-_cunKTczxa5rubmQ6RJs-rLyhh3btDCT7oE4rzxcZA/s640/Untitled.png" width="640" /></a></div>
<span style="color: red;">Alert Box'a tıkladığınızdaki ekran görüntüsü:</span><br />
<span style="color: red;"><br /></span>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDblaZgVa_g3Ai5Gnmv-LdEhOykViLgHq7sWyxk9HsXYbKhpuTRHlYKplm4FuAUrgWki9jEwK9xf5Wu5C0Q0j4Trs22YlHI3cLnlfMKv7tjwFGXbn3TGENwBcxofy30V_JpTH2tg7XC5Sj/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="120" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDblaZgVa_g3Ai5Gnmv-LdEhOykViLgHq7sWyxk9HsXYbKhpuTRHlYKplm4FuAUrgWki9jEwK9xf5Wu5C0Q0j4Trs22YlHI3cLnlfMKv7tjwFGXbn3TGENwBcxofy30V_JpTH2tg7XC5Sj/s640/Untitled.png" width="640" /></a></div>
<span style="color: red;"><br /></span>
<span style="color: red;">Prompt Box'a tıkladığınızdaki ekran görüntüsü:</span><br />
<span style="color: red;"><br /></span>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLZ31AAU-oc0FSIkwNI9gFXSxrzCF7HaE7UsPgqrNYQBDBYxC4a_ju0H-o3IkrbQgJ4zL3oMkpPrrKGgJmccy8tpJggUkZNqwzCNNvANIAeb37yqa46h4xNqyubpzN5jJ95IdjDj0TdaBd/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLZ31AAU-oc0FSIkwNI9gFXSxrzCF7HaE7UsPgqrNYQBDBYxC4a_ju0H-o3IkrbQgJ4zL3oMkpPrrKGgJmccy8tpJggUkZNqwzCNNvANIAeb37yqa46h4xNqyubpzN5jJ95IdjDj0TdaBd/s640/Untitled.png" width="640" /></a></div>
<span style="color: red;"><br /></span>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUoeHmPlkHXu-WuPZnnjyaw8hfm2qFO8eRRUnHIJ_NvUYlgru4nBUZeDAncLkhW0pC7Ct5Uq7M1JsonYEEkglG4ujbx74lShW9LUs-WATKaS7pOj7Dpf1pyw6hdd92Jqj5Ohvlx11CaiYM/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="178" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUoeHmPlkHXu-WuPZnnjyaw8hfm2qFO8eRRUnHIJ_NvUYlgru4nBUZeDAncLkhW0pC7Ct5Uq7M1JsonYEEkglG4ujbx74lShW9LUs-WATKaS7pOj7Dpf1pyw6hdd92Jqj5Ohvlx11CaiYM/s640/Untitled.png" width="640" /></a></div>
<span style="color: red;"><br /></span>
<span style="color: red;">Confirm Box'a tıkladığınızdaki ekran görüntüsü:</span><br />
<span style="color: red;"><br /></span>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUea53iFIkO3vXaZEDZstSoZoAjmgiH1FjwugFizh7Fdc8-2FiHNat7mHxj5Rh3K22PmKtZg0crFFPUFjZPzNut80Z4vs5XrSLApHTCa799ocfik8b6wiU_4fAkV5dcnjp56eEd6-w50b8/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="138" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUea53iFIkO3vXaZEDZstSoZoAjmgiH1FjwugFizh7Fdc8-2FiHNat7mHxj5Rh3K22PmKtZg0crFFPUFjZPzNut80Z4vs5XrSLApHTCa799ocfik8b6wiU_4fAkV5dcnjp56eEd6-w50b8/s640/Untitled.png" width="640" /></a></div>
<span style="color: red;"><br /></span>
Yukarıda üç temel metodu kullanarak <span style="color: #0b5394;">bootbox.js </span>kütüphanesinin nasıl basit bir şekilde kullanıldığını gördük. Umarım anlaşılır ve yararlı bir örnek olmuştur. Bu haftalık anlatacaklarım bu kadar, bir sonraki hafta <b>knockout.js</b> kütüphanesinden bahsedeceğim. Şimdilik görüşmek üzere, hoşçakalın...<br />
<br />
<b><span style="color: #0b5394;">KAYNAKLAR</span></b><br />
<br />
<b>1</b>. <a href="http://the-phpjs-ldc.rgou.net/twitter-bootstrap-plugins/bootbox/3.0/">http://the-phpjs-ldc.rgou.net/twitter-bootstrap-plugins/bootbox/3.0/</a><br />
<br />
2. <a href="http://creativitytuts.org/twitter-bootstrap-tutorial-15-bootbox-js-alert-dialogs/">http://creativitytuts.org/twitter-bootstrap-tutorial-15-bootbox-js-alert-dialogs/</a><br />
<br />
<b>3.</b> <a href="http://bootboxjs.com/">http://bootboxjs.com/</a></div>
Nil Buşra Koçerhttp://www.blogger.com/profile/07084098285875162702noreply@blogger.com0tag:blogger.com,1999:blog-4511869999190707921.post-47196135335258984792013-12-06T01:09:00.001-08:002013-12-08T03:00:31.467-08:00<span style="font-size: x-large;"><span style="color: #0b5394;">Reflection.js</span> <span style="color: #0b5394;">Kütüphanesi</span></span><br />
<span style="color: #0b5394; font-size: x-large;"></span><br />
<span style="font-family: Times;"> <span style="color: #444444;">Herkese merhabalar.</span></span><br />
<br />
<div style="text-align: justify;">
<span style="color: #444444;"> <span style="font-family: Times;">Bir hafta aradan sonra sizlerle tekrardan beraberiz. Bu hafta sizlere oldukça küçük ve kullanımı basit olan <b>reflection.js</b> isimli JavaScript kütüphanesinden bahsetmek istiyorum. Uygulaması oldukça kolay olan</span> bu kütüphane sayesinde web sayfanızda seçtiğiniz resimlerinize kütüphanenin isminden de anlaşıldığı üzere, yansıma ekleyebilirsiniz. Yansımaların boyutunu ve saydamlığını tercihinize göre değiştirebilmeniz mümkün. Diyelim ki; yansımanızın tüm resmin yarısı kadar olmasını ve yarı saydam bir şekilde olmasını istiyorsunuz, elbette ki <b>reflection.js</b> sayesinde bu mümkün. Yansıma ekleyebilmeniz için seçtiğiniz resmin "image" elementi olması gerekir. Default olarak, yansıma arka plan rengindedir. İsterseniz rengini de değiştirebilirsiniz. Şimdi ise bu kütüphanenin nasıl kullanıldığına bir bakalım.</span></div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
<span style="color: red;"><strong>KURULUMU</strong></span></div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
<span style="color: #444444;">Kütüphaneyi</span><span style="color: black;"> </span><a href="http://kenstechtips.com/reflection/" target="_blank">bu siteden </a><span style="color: #444444;">indirebilirsiniz ama tercih elbette ki de size ait. İndirme işlemi bittikten sonra kodumuza kütüphanemizi aşağıdaki gibi ekliyoruz</span><span style="color: black;">.</span><br />
<br />
<div>
<pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: 'Andale Mono', 'Lucida Console', Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code><script type="text/javascript" src="reflection.js"></script>
</code></pre>
</div>
<br />
<div style="text-align: justify;">
<span style="color: red;"><strong>KULLANIMI</strong></span></div>
<span style="color: black;"> Resminize yansıma ekleyebilmeniz için "image" elementinize <strong>class="reflect"</strong> şeklinde ekleme yapmalısınız.</span><br />
<br />
<strong><span style="color: red;">YANSIMALARIN UYARLANMASI</span></strong><br />
<strong><span style="color: red;"></span></strong><br />
<strong><span style="color: #0b5394;"> 1.</span></strong> <span style="color: #0b5394;"><strong>Yansıma Yüksekliğinin</strong> <strong>Değiştirilmesi</strong></span><br />
<strong><span style="color: black;"></span></strong><br />
<span style="color: black;"> </span><span style="color: #444444;">CSS sınıfı listesine yüzde şeklinde olmak üzere, istediğiniz oranda yükseklik ayarlamasını </span><strong>rheight'</strong><span style="color: #444444;"> in </span><span style="color: #444444;">yanına yazarak </span><span style="color: #444444;">yapabilirsiniz. </span><br />
<br />
<span style="color: #444444;">Örneğin </span> <span style="color: #0b5394; font-family: Courier New;"><strong>class="reflect rheight66</strong>"</span><strong style="color: #0b5394;"> </strong><span style="color: black;"> </span><span style="color: #444444;">şeklinde kullanabilirsiniz<strong>.</strong></span><br />
<strong><span style="color: #444444;"></span></strong><br />
<strong><span style="color: #0b5394;">2. </span></strong> <span style="color: #0b5394;"><strong>Yansıma </strong><strong>Opaklığının</strong> <strong>Değiştirilmesi</strong></span><br />
<strong><span style="color: #0b5394;"></span></strong><br />
<strong> </strong><span style="color: #444444;">CSS sınıfı listesine yüzde şeklinde olmak üzere, istediğiniz oranda opaklık ayarlamasını <strong>ropacity'</strong> nin yanına yazarak yapabilirsiniz.</span><br />
<br />
<span style="color: #444444;">Örneğin resminize %50 opaklık eklemek istiyorsanız;</span> <br />
<br />
<span style="color: #0b5394;"> <strong><span style="color: #0b5394; font-family: Courier New;">class="reflect ropacity50"</span> </strong></span><span style="color: black;"> </span><span style="color: black;">şeklinde kullanabilirsiniz<strong>.</strong></span><br />
<br />
<strong><span style="color: #0b5394;">3. </span></strong> <span style="color: #0b5394;"><strong>Yansıma </strong></span><strong style="color: #0b5394;">Yüksekliğinin ve</strong><strong style="color: #0b5394;"> </strong><strong style="color: #0b5394;">Opaklığının</strong><span style="color: #0b5394;"> <b> Aynı Kod İçerisinde</b> </span><strong style="color: #0b5394;">Değiştirilmesi</strong><br />
<br />
<span style="color: #444444;">Ayrı ayrı yazmak yerine aşağıdaki gibi yansımanın yüksekliğini ve opaklığını birlikte değiştirebilirsiniz.</span><br />
<strong style="color: #0b5394; font-family: 'Courier New';"><br /></strong>
<strong style="color: #0b5394; font-family: 'Courier New';"> class="reflect rheight66 ropacity40</strong><span style="color: #0b5394; font-family: 'Courier New';">"</span><br />
<span style="color: #0b5394; font-family: 'Courier New';"><br /></span>
<strong><span style="color: red;">YANSIMA İÇİN KOMUTLAR</span></strong><br />
<ul>
<li><b>Reflection.remove(image):</b> Resimden yansımayı kaldıran fonksiyondur.</li>
<li><b>Reflection.add(image, options): </b>Resime yansıma ekler. Yansıma eklerken aşağıdaki gibi seçeneklerinizi belirtebilirsiniz.</li>
<li><b>Reflection.add(document.getElementId("img"),{ height: 2/4, opacity: 1/3}): </b>Resime yansıma bu şekilde seçeneklerinizi belirtebilirsiniz. Bu seçeneklerin 0 ile 1 arasında olmasına dikkat ediniz.</li>
<li><b>Reflection.defaultHeight = height: </b>Şeklinde default(varsayılan) yansıma yüksekliğini belirleyebiliriz.</li>
<li><b>Reflection.defaultOpacity= opacity: </b>Şeklinde default(varsayılan) yansıma opaklığını belirleyebiliriz.</li>
</ul>
<div>
Şimdi ise ASP.NET ortamında sizler için yapmış olduğum örnekleri inceleyelim. Öncelikle Solution Explorer'a önceden indirmiş olduğumuz kütüphanemizi ekleyelim.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPYCxErDg45N-hNcuHnR6Hc4xI2BTvbIBqM52t7PKuszO_Pe-0ljWJdfN4qFvbne-NBcDEMzJLZciu9Y9-adCwtdb58KW2YiQeiBqC5IsahMxWq2t18uk9Gdt52OQGDiWD8vYTpzr2uExp/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPYCxErDg45N-hNcuHnR6Hc4xI2BTvbIBqM52t7PKuszO_Pe-0ljWJdfN4qFvbne-NBcDEMzJLZciu9Y9-adCwtdb58KW2YiQeiBqC5IsahMxWq2t18uk9Gdt52OQGDiWD8vYTpzr2uExp/s1600/Untitled.png" /></a></div>
<div>
<br /></div>
<div>
<span style="color: red;">YANSIMA ARKA PLANININ RENKLENDİRİLMESİ</span></div>
<div>
<span style="color: red;"><br /></span></div>
<div>
Proje Kodları:</div>
<div>
<br /></div>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<script type="text/javascript" src="reflection.js"></script>
<title>Reflection.js Örnek Kullanımı</title>
<style type="text/css">
body {
background-color: #E6E6E6;
font-family: Georgia;
line-height: 1.5;
}
h2 {
line-height: 1;
font-family: Arial, Helvetica, sans-serif;
}
img {
border: 0;
}
</style>
</head>
<body>
<h2>YANSIMA ARKA PLANININ RENKLENDİRİLMESİ</h2>
<div style="float: left; background-color: purple; padding: 10px;">
<img src="example.jpg" class="reflect" alt="" /></div>
<div style="float: left; background-color: orange; padding: 10px;">
<img src="example.jpg" class="reflect" alt="" /></div>
<div style="float: left; background-color: blue; padding: 10px;">
<img src="example.jpg" class="reflect" alt="" /></div>
<div style="float: left; background-color: pink; padding: 10px;">
<img src="example.jpg" class="reflect" alt="" /></div>
</body>
</html>
</code></pre>
<br />
Ekran Görüntüsü:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwzEx8jiDqqoHwHcnHivnGndCf1HDEwFYi7EqKTFdz6nkP34TpYGvt8nOOj3QIk4tG3aViEJFSl_f1yqLhln9VdfT9aBwclJJWM58DpxDtxHjsXQVuRsCJxdVToVyxZhUQjdRIOGNjwJLG/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="141" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwzEx8jiDqqoHwHcnHivnGndCf1HDEwFYi7EqKTFdz6nkP34TpYGvt8nOOj3QIk4tG3aViEJFSl_f1yqLhln9VdfT9aBwclJJWM58DpxDtxHjsXQVuRsCJxdVToVyxZhUQjdRIOGNjwJLG/s640/Untitled.png" width="640" /></a></div>
<br />
<span style="color: red;">YANSIMA YÜKSEKLİKLERİNİN DEĞİŞTİRİLMESİ</span><br />
<span style="color: red;"><br /></span>
Proje Kodları:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<script type="text/javascript" src="reflection.js"></script>
<title>Reflection.js ÖRNEK</title>
<style type="text/css">
body {
background-color: #E6E6E6;
font-family: Georgia;
line-height: 1.5;
}
h2 {
line-height: 1;
font-family: Arial, Helvetica, sans-serif;
}
img {
border: 0;
}
</style>
</head>
<body>
<h2>YANSIMA YÜKSEKLİKLERİNİN DEĞİŞTİRİLMESİ</h2>
<div style="float: left; padding: 15px;">
<img src="example.jpg" class="reflect rheight20" alt="" />
</div>
<div style="float: left; padding: 15px;">
<img src="example.jpg" class="reflect rheight50" alt="" />
</div>
<div style="float: left; padding: 15px;">
<img src="example.jpg" class="reflect rheight70" alt="" />
</div>
<div style="float: left; padding: 15px;">
<img src="example.jpg" class="reflect rheight95" alt="" />
</div>
<p style="clear: left;"></p>
</body>
</html>
</code></pre>
<br />
Ekran Görüntüsü:
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmx9O0pwb7AmQkMDdlGvlJCiWRBGGIlQUSW1Yx915Z87IMeplK66697Zk2EZ294Idt1-qdrYQIxX0C6_nLy2CcNchnF9M7LERIIft6W-uJLNjyUHrwr5Wqucw5m4pbekGUzeU0ycmgBEfB/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="171" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmx9O0pwb7AmQkMDdlGvlJCiWRBGGIlQUSW1Yx915Z87IMeplK66697Zk2EZ294Idt1-qdrYQIxX0C6_nLy2CcNchnF9M7LERIIft6W-uJLNjyUHrwr5Wqucw5m4pbekGUzeU0ycmgBEfB/s640/Untitled.png" width="640" /></a></div>
<br />
<br />
<span style="color: red;">YANSIMA OPAKLIĞININ DEĞİŞTİRİLMESİ</span><br />
<span style="color: red;"><br /></span>
Proje Kodları:<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<span style="color: red;"><br /></span>
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<script type="text/javascript" src="reflection.js"></script>
<title>Reflection.js ÖRNEK</title>
<style type="text/css">
body {
background-color: #E6E6E6;
font-family: Georgia;
line-height: 1.5;
}
h2 {
line-height: 1;
font-family: Arial, Helvetica, sans-serif;
}
img {
border: 0;
}
</style>
</head>
<body>
<h2>YANSIMA OPAKLIĞININ DEĞİŞTİRİLMESİ</h2>
<p>Opaklık 20%'den başlayarak 80%'e kadar arttırıldı.</p>
<div style="float: left; padding: 10px;">
<img src="example.jpg" class="reflect ropacity20" alt="" /></div>
<div style="float: left; padding: 10px;">
<img src="example.jpg" class="reflect ropacity40" alt="" /></div>
<div style="float: left; padding: 10px;">
<img src="example.jpg" class="reflect ropacity60" alt="" /></div>
<div style="float: left; padding: 10px;">
<img src="example.jpg" class="reflect ropacity80" alt="" /></div>
<p style="clear: left;"></p>
</body>
</html>
</code></pre>
<br />
<br />
Ekran Görüntüsü:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3NL-fpX5cK9HAmlJT29eoF6EY4IDQcL4Ko4AHTfLhQrpjhLSYAggqqXSwfq73hGkhNCMEoYS47AcmaFL1zgY550LxPvXVhwwq9Bq2aoHwmh8GXa-3B9v-J_J0ZNNgz9Ubglv-IC8W3txl/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="148" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3NL-fpX5cK9HAmlJT29eoF6EY4IDQcL4Ko4AHTfLhQrpjhLSYAggqqXSwfq73hGkhNCMEoYS47AcmaFL1zgY550LxPvXVhwwq9Bq2aoHwmh8GXa-3B9v-J_J0ZNNgz9Ubglv-IC8W3txl/s640/Untitled.png" width="640" /></a></div>
<br />
<div>
Bu haftalık anlatacaklarım bu kadar, bir sonraki yazımda sizlere <b>Bootbox.js</b> kütüphanesinden bahsedeceğim. Şimdilik görüşmek üzere, hoşçakalın...</div>
<div>
<br /></div>
<div>
<b>KAYNAKLAR</b></div>
<div>
<br /></div>
<div>
1. <a href="http://kenstechtips.com/reflection/">http://kenstechtips.com/reflection/</a></div>
<div>
2. <a href="http://www.huge.se/reflection/readme.html">http://www.huge.se/reflection/readme.html</a></div>
<div>
<br /></div>
<div>
</div>
</div>
Nil Buşra Koçerhttp://www.blogger.com/profile/07084098285875162702noreply@blogger.com0tag:blogger.com,1999:blog-4511869999190707921.post-75214444065450865592013-11-30T14:44:00.000-08:002013-11-30T14:44:29.147-08:00<span style="color: #0b5394; font-size: x-large; text-align: justify;">Sylvester.js</span><span style="font-size: x-large; text-align: justify;"> </span><span style="color: #0b5394; font-size: x-large; text-align: justify;">Kütüphanesi</span><br />
<span style="color: #0b5394; font-size: x-large; text-align: justify;"><br /></span>
<br />
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: Times, Times New Roman, serif;"> <span style="text-align: start;">Herkese merhabalar.</span></span></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: Times, Times New Roman, serif;"> Bir hafta aradan sonra sizlerle tekrardan beraberiz. Bu hafta sizlere<span style="color: #3d85c6;"> </span><b><span style="color: #0b5394;">sylvester.js</span></b> isimli JavaScript kütüphanesinden bahsetmek istiyorum. </span></span>Sylvester kütüphanesi; vektör, matris ve geometri kütüphanesidir. İstediğimiz boyutta matris ve vektör modelleyebilmemizi sağlayan sınıfları içeriyor. Örneğin; iki vektörü çarpacaksınız ve bunun için bir sürü döngü yazmanız gerekecek, sizi bu zahmetten kurtaracak olan çözüm<b> sylvester.js </b><span style="font-family: Times, 'Times New Roman', serif;">JavaScript</span><span style="font-family: Times, 'Times New Roman', serif;"> kütüphanesi</span> olacaktır. Kütüphaneyi kullanmadan önce <a href="http://sylvester.jcoglan.com/" target="_blank">bu siteden</a> indirebilirsiniz. Şimdi ise sizlere bu kütüphanedeki sınıfların metotlarından bahsetmek istiyorum. Çok fazla metot olduğundan dolayı sıkılacağınızı düşündüğüm için tüm metotları açıklamayacağım. Detaylı bilgiye <a href="http://sylvester.jcoglan.com/api/vector.html" target="_blank">bu siteden</a> ulaşabilirsiniz.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: red; font-size: large;">Class(Sınıf): Vector</span></div>
<div style="text-align: justify;">
<span style="color: red; font-size: large;"><br /></span></div>
<div style="text-align: justify;">
<span style="color: #0b5394; font-size: large;">1) Vector.create(elements)</span></div>
<div style="text-align: justify;">
<span style="color: #0b5394; font-size: large;"> </span>Array elementlerinden vektör yaratır ve bu vektörü geriye döndüren bir metottur. Örnek kullanımı:<br />
<br /></div>
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code>var v = Vector.create([5,2,8]);</code>
</pre>
<div style="text-align: justify;">
<br />
<span style="color: #0b5394; font-size: large;">2) add(vector)</span><br />
<span style="color: #0b5394; font-size: large;"><br /></span>
Eğer alıcı ile vektör aynı sayıda elementi içeriyorsa, bunlar toplanır ve bu metot tarafından geriye döndürülür. Eğer alıcı ile vektör aynı sayıda elementi içermiyorsa <b>null</b> geriye döndürülür.<br />
<span style="color: #0b5394; font-size: large;"><br /></span></div>
<div style="text-align: justify;">
<span style="color: #0b5394; font-size: large;">3) distanceFrom(vector)</span><br />
<span style="color: #0b5394; font-size: large;"><br /></span>
Alıcıdan vektöre olan mesafeyi pozitif değerde geriye döndürür.</div>
<div style="text-align: justify;">
<br /></div>
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code>a.distanceFrom(b) // |a-b| demektir..</code>
</pre>
<div>
<br />
<span style="color: #0b5394; font-size: large; text-align: justify;">4) isPerpendicular(vector)</span><br />
<span style="color: #0b5394; font-size: large; text-align: justify;"> </span><span style="text-align: justify;">Eğer iki vektör arasındaki açı doksan derece ise yani bu iki vektör birbirine dik ise, metot geriye "true" değerini döndürür.</span><br />
<span style="text-align: justify;"><br /></span>
<span style="color: red; font-size: large; text-align: justify;">Class(Sınıf): Matrix(Matris)</span><br />
<span style="color: red; font-size: large; text-align: justify;"><br /></span>
<br />
<div style="text-align: justify;">
<span style="color: #0b5394; font-size: large;">1) Matrix.create(elements)</span></div>
<div style="text-align: justify;">
<span style="color: #0b5394; font-size: large;"> </span>Array elementlerinden matris yaratır ve bu matrisi geriye döndüren bir metottur. Elementler nested (iç içe) array olmalıdır.<br />
<br /></div>
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code>var M = $M([
[6,1,9],
[2,4,8],
[4,5,3]
]);</code>
</pre>
<span style="color: #0b5394; font-size: large; text-align: justify;"><br /></span>
<span style="color: #0b5394; font-size: large; text-align: justify;">2) Matrix.Diagonal(elements)</span><br />
<span style="color: #0b5394; font-size: large; text-align: justify;"> </span><span style="text-align: justify;">Array elementlerindeki diyagonal elementleri içeren kare matrisi geriye döndüren metottur.</span><br />
<span style="color: #0b5394; font-size: large; text-align: justify;"> </span><br />
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code>var M = Matrix.Diagonal([7,1,2,5]);
// M MATRİSİ
// 7 0 0 0
// 0 1 0 0
// 0 0 2 0
// 0 0 0 5</code>
</pre>
<br />
<span style="color: #0b5394; font-size: large; text-align: justify;">3) Matrix.Zero(n, m)</span><br />
<br />
Bu metot, <b>n</b> tane satır <b>m</b> tane sütun içeren tüm elementleri sıfır olan bir matrisi geriye döndürür.<br />
<br />
<span style="color: #0b5394; font-size: large; text-align: justify;">4) Matrix.I(n)</span><br />
<span style="color: #0b5394; font-size: large; text-align: justify;"> </span> Geriye <b>nxn</b><span style="color: #0b5394; font-size: large; text-align: justify;"> </span><span style="text-align: justify;">özdeş matrisini döndürür.</span><span style="color: #0b5394; font-size: large; text-align: justify;"> </span><br />
<span style="color: #0b5394; font-size: large; text-align: justify;"><br /></span>
<span style="color: red; font-size: large; text-align: justify;">Class(Sınıf): Line</span><br />
<span style="color: red; font-size: large; text-align: justify;"><br /></span>
<span style="color: #0b5394; font-size: large; text-align: justify;">1) intersectionWith(obj)</span><br />
<span style="text-align: justify;"> "obj" ile birlikte receiver'ın (alıcının) kesişim noktasını gösteren vektörü geriye döndüren metottur. Eğer kesişim noktası yok ise geriye "null" değeri döndürülür.</span><br />
<span style="text-align: justify;"><br /></span>
<span style="color: #0b5394; font-size: large; text-align: justify;">2) liesIn(plane)</span><br />
<span style="color: #0b5394; font-size: large; text-align: justify;"> </span><span style="text-align: justify;"> Eğer line(çizgi) parametrede verilen düzlemin içerisinde ise metot, "true" değerini geriye döndürür.</span><br />
<span style="text-align: justify;"><br /></span>
<span style="color: #0b5394; font-size: large; text-align: justify;">3) contains(point)</span><br />
<span style="color: #0b5394; font-size: large; text-align: justify;"> </span><span style="text-align: justify;"> Vektör noktası receiver(alıcı) üzerindeki noktanın konumunda ise metot "true" değerini döndürür.</span><br />
<span style="text-align: justify;"><br /></span>
<span style="color: #0b5394; font-size: large; text-align: justify;">4) rotate(angle, axis)</span><br />
<span style="color: #0b5394; font-size: large; text-align: justify;"> </span><span style="text-align: justify;">Line(çizgi) ya da vektör olabilen<span style="color: #0b5394; font-size: large;"> </span></span><span style="text-align: justify;">alıcının(receiver), verilen eksene ve radyan cinsinden açıya göre döndürülmüş olan sonucu geriye döndüren metottur.</span><br />
<span style="color: #0b5394; font-size: large; text-align: justify;"><br /></span>
<br />
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code>var L = Line.X.rotate(Math.PI/2, $V([5,0]));
var test = L.eql(Line.create([5,0], [0,1]));
// true değerini döndürür- 90 derecelik döndürülme ile y eksenine pararlel olan Line.X parallel </code>
</pre>
<br />
<span style="color: red; font-size: large; text-align: justify;">Class(Sınıf): Plane(Düzlem)</span><br />
<span style="color: red; font-size: large; text-align: justify;"><br /></span>
<span style="color: #0b5394; font-size: large; text-align: justify;">1) pointClosestTo(point)</span><br />
<span style="color: red; font-size: large; text-align: justify;"> </span><span style="text-align: justify;">Verilen noktaya en yakın olan vektörü geriye döndüren metottur.</span><span style="text-align: justify;"> </span><br />
<span style="text-align: justify;"><br /></span>
<span style="color: #0b5394; font-size: large; text-align: justify;">2) distanceFrom(obj)</span><br />
<span style="color: #0b5394; font-size: large; text-align: justify;"> </span><span style="text-align: justify;">Düzlem, vektör veya çizgi olabilen <b>obj </b></span><span style="text-align: justify;">ile</span><span style="text-align: justify;"> receiver(alıcı) arasındaki en kısa mesafeyi geriye döndüren metottur.</span><br />
<span style="text-align: justify;"><br /></span>
<span style="color: #0b5394; font-size: large; text-align: justify;">3) eql(plane)</span><br />
<span style="text-align: justify;"> Bu metot, verilen plane(düzlem) ile receiver(alanı) aynı bölgedeki alanı gösteriyorsa "true" değerini döndürür.</span><br />
<span style="text-align: justify;"><br /></span>
<span style="text-align: justify;">Şimdi ise sizin için <b>ASP.NET</b> ortamında yapmış olduğum örneği inceleyelim. Öncelikle kütüphanemizi <b>Solution Explorer'</b> a ekliyoruz.</span><br />
<span style="text-align: justify;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipmRcWwx2Wm6gkuP00sUVtBhV8trijtJ6fsohfixDnlcVbVTCU6nAcUTDG9WuoiLLVSMDzs8gh5vmS6qgKWjeIP8_I-CVVqgcSWspD_F5dI6R_WPPsJM6ulf7s0ot1tCQkcqXYpq53paAW/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipmRcWwx2Wm6gkuP00sUVtBhV8trijtJ6fsohfixDnlcVbVTCU6nAcUTDG9WuoiLLVSMDzs8gh5vmS6qgKWjeIP8_I-CVVqgcSWspD_F5dI6R_WPPsJM6ulf7s0ot1tCQkcqXYpq53paAW/s1600/Untitled.png" /></a></div>
<span style="text-align: justify;"><br /></span>
<span style="text-align: justify;">Aşağıda göstermiş olduğum <b>gif </b>uzantılı resme, bu kütüphane sayesinde istediğim nokta ve düzlemlere göre döndürme hızını da ayarlayarak molekül hareketlerine benzeyen hareketler yaptırıyorum ve bu şekilden dilediğim sayı kadar ekleyebiliyorum.</span><br />
<span style="text-align: justify;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJIcmXwDNH6e2s9XYc5Cm9sb7vlqjjTsPoIDrstK5dp2sGRYt2ilg4-LwUPy8fta-YTtzW56mkKSyc6qXLxPVpk4YtTYpRY5GdZ1aVO1FsDQQTRT_a08c-mxiqcEpnLFc2i_q0PoqqDoFf/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="286" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJIcmXwDNH6e2s9XYc5Cm9sb7vlqjjTsPoIDrstK5dp2sGRYt2ilg4-LwUPy8fta-YTtzW56mkKSyc6qXLxPVpk4YtTYpRY5GdZ1aVO1FsDQQTRT_a08c-mxiqcEpnLFc2i_q0PoqqDoFf/s320/Untitled.png" width="320" /></a></div>
<span style="text-align: justify;"><br /></span>
<br />
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code> for (var i = 0; i < 25; i++) {
dots[i] = Vector.create([h * (Math.random() - 0.5), h * (Math.random() - 0.5), h * (Math.random() - 0.5)]);
image = document.createElement('img');
image.id = 'img_' + i;
image.src = dataImage;
document.body.appendChild(image);
images[i] = image;
}
</code>
</pre>
<br />
Yukarıdaki kod parçacığında, 25 tane yukarıdaki resimden kullandığım için döngümüz 25 defa çalışıyor. <b>Random(</b>rastgele<b>)</b> olarak vektör noktaları ürettim ve bu noktalara göre her resme bir id atadım.<br />
<br />
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code> setInterval(function () {
for (var i = 0; i < dots.length; i++) {
f = (dots[i].e(3) + h) / (2 * h) + 0.1;
images[i].style.opacity = f - 0.1;
images[i].style.width = (50 * f) + 'px';
images[i].style.height = (50 * f) + 'px';
images[i].style.position = 'absolute';
images[i].style.top = (150 - dots[i].e(2) * f) + 'px';
images[i].style.left = (300 + dots[i].e(1) * f) + 'px';
dots[i] = rot.x(dots[i]);
}
}, 22);</code>
</pre>
<br />
Yukarıdaki kod parçacığında ise, bir önceki kod parçacığında rastgele üretmiş olduğum vektörlerin noktalarını tutan<b> dots</b> arrayindeki noktaların genişliğini, yüksekliğini, opaklığını, pozisyonunu, tepeden ve soldan uzaklıktaki mesafesini ve şekillerin dönüş hızını ayarladım.<br />
<br />
<span style="color: red;">Ekran görüntüsü:</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinGQJhBGmOiwKL0yWVNh2CNKcKDcm5L7PuKk_rEPDWojoNhHH9carKnH5KOO_Fxt9S4T3ufUjM0KO3x028yg5HyElyLcSK1_V4g_9bSo3pX_jVMcIRuLChjQ2UGUHlDOjcGYfQsgDo07em/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="227" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinGQJhBGmOiwKL0yWVNh2CNKcKDcm5L7PuKk_rEPDWojoNhHH9carKnH5KOO_Fxt9S4T3ufUjM0KO3x028yg5HyElyLcSK1_V4g_9bSo3pX_jVMcIRuLChjQ2UGUHlDOjcGYfQsgDo07em/s640/Untitled.png" width="640" /></a></div>
<span style="color: red;"><br /></span>
<span style="color: red;">Proje kodları:</span><br />
<span style="color: red;"><br /></span>
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>sylvester Örnek</title>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/sylvester/0.1.3/sylvester.js"></script>
</head>
<body style="background: #000;">
<script type="text/javascript">
var dataImage = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxQTEhQUEhQWFRUXGBwbGBcWGSEbGhUgGyAXHh8aGyAfHSggGBonGxwdIT0jJSkrLjAvHCQzODMsNygtMCsBCgoKDg0OGxAQGy8lICYsLDI3LSwwLDQ3LDcsLCwsLCwsLywvNy8sLDQsNCw0LCwsLCwvNC8vNCwsLC8sLCwsLP/AABEIAOEA4QMBIgACEQEDEQH/xAAbAAEAAwEBAQEAAAAAAAAAAAAAAgMEAQUGB//EADIQAAIBBAEEAQMEAQQCAwEAAAECEQADEiExBBMiQVEFMmEjQnGBFDNSkaFisUPR8YL/xAAWAQEBAQAAAAAAAAAAAAAAAAAAAQL/xAAoEQEAAgIBBAIABgMAAAAAAAAAAREhMUESUWHwAnGRscHR4fEiQqH/2gAMAwEAAhEDEQA/APw2lKUClKUClKUClKUClKUClKUClKUClKUClKUClKUClKUClKUClKUClKUClKUClKUClKUClKUClKUClKUClKUClKUClKUClKUClKUClKUClKUClKUClKUClKUClKUClKUClKUClK12OiJKyR5EQFZcjkWA1OjI9xEg8EUjOBkrRb6NywWApPGZCDmOXIH/AHWy2EPhaXIlvtcDOAqlofgbDQIkCuXerVmyuFmRmJNsNL2wC2Kh3U/PqZ908jOOhMGWAdRJRjicYmQWgMTIhRJM6Bq4W7IbKHay3jJ+62SNEwArMPuxB2Pj1FLbiCSqMii6pacrgOGIHIMDYBjU/gVWbohlLOwYBgBodzWyNggAsJEGqnCb2QLbqyY3LbCSSASDIIILSSGiMRwTPqtFxwLlw42ouWiQAyFUyUHUAhXB/aII41VdrpjcKC10580KiSTmyjzdToT7jYFRshiUIt2t23AmIYAOCxltOJJB1tVintL+Ttu2rr06AICWbJi6rMsB5EqO2AByxI3Ot1F7qkXbhtrLGEAIAtyZJCqRuNAwV2dTELSOO0cLbDBmAJByUFwS8NMggwDB0NQRPbdlotg2MgFa4xXLJ0mCWMkKq4kSAPczTzwc5dvdKgIWHXt/6zMpkN7SBIEEFQTEnZx9RPRo0lGiWi1bPlcf8EL9pmBuJnUwar6d1hUZ7iB2HdI2uErBCyMiPIwT8cVOyWYiMXd/BRsMsYYsIgA+gd+6bTi1F3o3UgEbM+IILCNmQCSpHwY4PwapZSCQRBHIPqtgvj9jNb8ZYsZLOAwOJVQVUhog/Oya09RdUhjcXDLzTWbvkyhvMmR9rETPJHuivJpW670MkYEDSmLjqp8gzAgkgRiB/ZA5NYaTFBSlKgUpSgUpSgUpSgUpSgUpSgVo6bpGeSICrGTMYC5GAT75+Aal03Tj7rmQSCRA28QIWRHJE/An3AOnrri+QVvAYm0DajL0TtiUHJiSCf8AqjqFUUgKd3ArOtxSSogsqrG/ISHGvW5qtrvHd8gLrFk+26SQslmwJgwNEmCDoSSeO5LEhVa7cIZDa8e2SSYCqAAfwONRUW6mCXyL3WKuLoZg1tpJMk/c87n+5pknk7hKWxcb9MZ4hcSyk72NGC0c+piguMR4KtvG1DEHE3AWgk5N5MSQIX0vGiakt4I3cuAXbuQYq/kjhhJLkNkWkjX8zvVR7JKBrtyBge1Plli0YAA+A2x3A1+aa4LqXL4tIxCHugMCrEFVYRsFfu5193zVhe6F0BbCk3ViFbzKrKE+bDQ1JiCfk13pupcMT06lCmbhgf1FUrDAsIlcZ9ez81A9NaX77uRDQVtifErOQY6nLUR80qv3Xly906K2LXgwVwJtgsMTy65Yz/Biagoswsm4TL5QABEDDHezMzPHqa6txSrBbMnAeRZiVIIJcAQIK+MMCADPNbbdu+tyB06hsycWtcFlnEhx9uPkAeOae/aXywoLMbNwHtngAjOdDnSY++Z9VxFWGxuEGFABBGWX3AwTAB/5Hr1Wh+nvBRNoQ1tYOAnFm8WEfuLArPMap1NwZlrvThAXYwuSDWiizIAVvwT6oaGtXcmRGF6SbQK+eQQgjAMMwugQYGtfIrPevI5JwFucQAk4rAgkgyxJieeSfwBM27RxwdlbFZziCxMNBH2oBB3vmres7qqvc80Km3bc7GKPJ7Z9DInf/kfml6mTlx2cKmxdsq9wW1J9wuTYBslBBUzwSI3BrnREgMbThT2n7ncxAIJIKpkfIlY48pmOJrioPvsMVabhwmGtoAsHPQYkFhA34/mooUuCCMLkIqYgBG3Ba4zN4mPfH8VKwZw4jiGxhP0wCH8i5lZw8fE+/Wgd/Orqr2ZYuLjQELG44DhjgHIkS0kQOYGzNZ7ZDtjdYKxYTecswVQCIhQxYcbAPA9ULNdb9Rj3HIPduueI9zM8DdX/AGNWj1nQlJYFWSQJVgYJE4n5Mexr81kr07PV+LEMM3cZW1srGIBMqRGI2QUWARzVV/pQ0tZlhLSoUyAsnONwmJHJJG59EzvJww0pSgUpSgUpSgUpSgVq6LpSxUsCELRlBgmJwBCt5HgaPPxVFq2WYKoJYmABsk1vvOtvwVzChbltkgtmyoQGIbxgSDBJBH/CBJHJxLLcCIoTqBbVbfjl9shYyMDbgnL5iqunvtbxuy4dYNklQy+JM7bUD8AifiudT0rl1ttbcX2IJyO3NyGUwRqQwOyZma44R7sKLlu0PX+q1sfuPCA736qxk9w5Yu9oB1MXDBR0chrWJMyBwTUum6g2YdDF07V1YeAOasrLHJH50P511bpvXHu3dgDJ8MLZ9KMREcxoD5/mp2eoZrj9TdObB8pYK4e4TkBcVjtDBnRpUzxwV4Vqq2gc1m4w0ple1ODLcBB8iQSIP/1S9Z0bl5jm8nDYc5AMtwyuJQz6M06ZVRTdf7v/AI1EfcCDkylSHtwGWBG/4g8ayLYDOAzMDCf7R5qcwCCrg4sB7EE65cl9llxmuKC5Fu1LOqCcZJtq/bWYygLyRpedVFQNi1bLjyAdxs4nMMFBxVsBsSwiavdTcuMbs3eodxomFBLMrC4dQZxIKmN7PodtqWIS4zuoZZt2iFWQrJtiMVuQg3i2Qnfyzx+BVQjfdzLPfRZZ5VDxmocwLYwCMYWBwdQAKzY2f3PcJleEHBU5bL/cGgAcESZHFbunslcSotgePkE72+2xIOQKTGyp2DEDVaOksXgyYNekNaHhgrBhbcwoDkyoJ38E5YkxV9/hc+8+9nkIlmB53A3j+wEcnP8AfMAQRre+KuQsVheo0FPgxZfvfEqP27ADnYEe5Feh01u5Ftka6I7Db7bR5MFIUsMlDaAPzuJFUW+nIwyRHAwzFxDbxi46lS68LIguSDuBxU9995TTP1DNjNy0pku3cTxmfAbXwwDrMACTO91AWYDNZcsDIZdq+KhGJcAlcCxgeRJx4FX2LLJjDtZzCMS5ytOJZgXxBgZKIUq25mIqi5bWPIdtxjBG0aFZiTEnMk2wANCTMUj3+1jA6pdjtqVusTKD7WLMAq2gBIgH9x9aqT3O+cXB78ny2zXmJRVQgmFiDv8AMH1XeqUuxW4Al5S2RJ/1DNx2LksRnwoCgA697Mbqm4DIAuWwFKwFLBQqgBVWS4glieeTuaM4cVswbdz71hUZmxW2q5llIx8iSdbEH5nULI7ilSQGUFg7vACorHtgHknUD5ge6l1H6lsXAoGAVGxVVWIAQ627HFiTHP8ANd665ljeGRY/ezsrFrgMkhQAQmJXkHc79BmlriD/ACHuQwZzcRQq4KBjbRTsld6H44mTV/RvgFuAXeysiSqundKHUMMCCQJB3iPcVmv6ZbhzK3Nsce2GP71QiQQJiY98UewO4QLTw+7SZSwz+ySF8+R6E/ilXiNG88Kuo6eACA2lBcEHwJMb8RE6I55G5rPXpdO0sLbk5uwS53IAQApByJlSCDPAAArH1doK7ATjJxLRJHo6JGx8Ej8mk7LvKmlKVApSlApSlB6P01Aqtd+4qQDbEyUYMHYkDxXhZmfKoBAe0is10N5NbQEFWJIKiQZbAA5AEb/FS65AoKP43LcIAsMtwTcZnLZR7WIBBBmdbFwL57p7cAgmwFMEKQIhgCCwEmfZOzV4VDpOnzN0rbLIiMxBYAoulDE6yILLoDfxFc6VYtXXxuftUOrhVXImQ4xJcFVPBEEe+Kh01qUuntloUHKY7fkNke54/upW7M2XbFfF1BYuAwyD6CTLDUkgGIHE7fZkDgWCPGWuA7TyAUHh/wDaS21/ANWXrZIs2guyMv8ATAYm4RAlZa6sAETwWIA+edQP0LRi591wElwUnwPgsShjmSZ18Voslf8AIQhbcBFMKLuJItgyYbuZZCSQYmSPHVK8JhxijO7/APxWQAoEsrEaHi9wOEd5YxJXI6qdkOplm/UdZa4WyNu2y4k6c5EoxBUjIRrdR6GyrJbUmRk9y4PuAVFEAhVzSfIFpIhgYGJrdevdoMbwLMzZMA5Ba4A3nKsQr28xEiGDN7inte+/R/39PfYUJ0gVctW0gSrOAXEWSSft7yMQT21MoeY0TVd+rIBittWgQC8wAJ4UQCPJ/uBYZcyJrzOo6hnPkf4AACj+AAAP6FVUkbLn1O6ZGZAMghdSGABUxysACDqABWW5cLEliSTskmZqNKg6rEcGK0p9Quji43vkz9xBJE8GQDPMistKWPVtfWBJL21kmZt+JHM62pmSJZTAOuBG21YV5Fko6mFw4kntglFcs1pjgSbp8dxrivnanaulTKmP/R/BHBH4NWzm3rrYZhaTL/xsNIBVgcmtmXUIM7n3n41qqTdaF6kEzkUuENiWLAzvMu2a5ZGANx7rX0t5L6sHlW0bhAkEDIdwKCqqEBRVtgGZPqAK+oszmWYAvbLNkY/UttDDJlPcLQWhDEuBPjSYx/C59pVasFLxthSwupC/pZEhwGU21uQRJgBuYJIrJ0kG3dBIBgMvhkzEEDEN/wDGIYsT7xArQwh+mZgCCqEh1uYsFYrDbyZYWP04EaGxUOhtljfKhoW2xPbbEAZKN5SWSSPHk6phOFXk1n95W2wE5eCZzoLGiSsyD64pf6c9m3c7eKksueU5lYPH7YDAfn/mljHs3ZRWMpDl4ZPukBZ85jZgxHqaibJ7IfAwXI7k6MBThHyJmfzTJ9tDOAzKhuWLV1BIc5ZAQwnFVyU3Fka1r4mo3RlZDHwwhUG4fnOD/uBKmJ9mqjdE2ipLMAJFwDEEEwokmUiOY91tssLN25mA11WZBaUBrbZi4jEMrEeJKxAYH+trj4xUe+/2XeIeRSp3rRVip5BIMGeKhUClKUCr+ithnUMGK/ux5gbJGjwN8VRW76RZZmYrBwtszA+1AhgNaJB51QOtnEjJbiC4wF2PK5AUfuGYXGCAQOfmupdUXybJNhCSFNw5FFYEeRC7OJ5C+6qvdrFiA63O5pIGCpB1JORadcce671N45rcZxeYhWaZP/8ADTEwABrX5q+exXg+m2wzFe091mVgi2zBDRpoCkuBzjqfkVHpNi4sW9rOTkgrjuE3GR4gg1L6iGFwuVVO5+oFtkYqH2AACcRB+07A5qTjtul1bbdstlbF5cluBTsHQVxIgga9VIxkipRsoGtPu2pUgjLLN58cVjxIH3GY/vitVm+uXTuwkDwfuXSZgncJFy1bCMogT9pieBna8bdzNHXyEnBdLmPJIYASASNa+DVi2QshxdWzdDNaY2hlcxyCESRC56YqxjfMVeMkTMvT+k9KLnbt/vBZJknZuWo0yjt6Y7UMflea8r6115vXS37VGKD4UTA4/k/3Xv8A0e8ovKt0FHDBHGVxnVx4lyCCnnkFjf2QCkg18petlWKsIKkgj4I1VnX7lxKFKUrIUpSgUpSgUpSgu6PqWtOtxfuUyPf/ALr6H6l2/J0hAbbsBMadLAVQVXJts3iwCwPvY5V8xX1n1VwluyGAGFtA6/qJkVCthIXHI5q2yYNsmRkBWoKeUl3C6pJb9G3+y6bbBgD9pcSpW421Uemj5rCgAtMfAksBBnNY3kP24njc1r6tXM2/1HvMzPeDoCwZczIaS7DA5GY3PMTVV+93Gt2u5FpPFGuKFwDEsS2AJPkSfZpknFyhet42bf8ApHMs0qZuJj44uJhQeRqT81HqlUJbHbdHgszMdXAftKriMQBO5M/iu4NdfwTKBsWl/ag20Aa0JJI/Jrtvpu9eFuwD5NjbFx1B3wCxhR/0KzNcyYOtvswtKbncCJCgT4AliU2BsEn55osnvG0sKBPmQWQBlggwDlJA8R7NSst3b4OVvp5IhoYJbIGj4hmGx6B2arFxGF1rrObpgoQAQxJ8i5Jkak6ndLiNFyfUbahhiWYETmZhzJBZZAOMgjfsGstel9Vcsttgi208lRBsriQWliMmlmJ2TExoRXm0zyVWClKUCr+lxlsyR4nEj0w2P+Yx/Ez6qitn0q4weEXPIEMsDyXlgDHjocjdWNi65buZ3Lc27rXAHZwVc/b3DD+iASGj2CKotDO3glqWQs7XBkWwhRBE4hQZMxPlzVNzDFccst5zEc6x98fNWdbgtxxZd2t8BmGLMNcgExv1NTtY701nuDt27TvdkmVlpUKSRiBOoLTPApbuBkKubjMABaAMqCWlgQeARPHuoXHCO3Zdo2Fb7WIIIMgExIJETwaXgvibWelBbIAQ3uIP2zwTuryTul/SkT2b7Nat5FmIthmVgpA0Sp51EiJn1VaCBi6xmFwd8hgJ+4Roqd+j+N1JArqFAuN1DXOcgVYECBEZFy87mI9VG45BZbwZmVSigsR2yD/B0N+OuaRuyczTT0t1FJDkEJwFU49SQ6nB2DKwWNyN6HHI1fXLGcvjjcQAX1ClQp+0GWc5OfeOjE/NZXdrYtJdYXbMd0W0uyFLgAgxOD+IkROql9GYi50+INw90MEtKDelSsAE22mfS+Q1sVLipmVzM+HlUr17qreIme+5uZRLO7kyuawAsyR4z+QKo6n6RcWSuN1QAcrRzABn7gPJDrhgCP7FWpTi5efSlKgUpSgUrZ0/02465BYSQM28VE/k6rWejt2h+oQ7Nacw2SKJ1bZCBLkjzEgDgH2KtDn0TpVH694fpKcQcclNyJVXAZWCxJ1zjHzUut6sgNnPcycPZYEopKqDeBLn9QmfWsRvgCPX3CzGZQtZQsb6gs5UL/pkWxgDGvxyxmqUvBiqWf0crYS4WueNwzJYkgBVMDx3xV+ir0iVEdpEW5cykXbZckjHaAaEcmcZ1zFRHVFLbJbeVuqvcBQaKtIAJkxIBkRPFcHUqqp2wyXVLZXA/wBwMQAABjAncmZrpsLbFxbyXBdxXtwQACSpOYIJIKExBG4rNY1yvdwzaBH6lu8CQR9viRsH90mf4g1DDFDnbaXANtjKiJ2QI8wYIqfSOjXVbqTcNsnzZIZ4H+3IwTxyaoLzALHEaHuBM6E/3FW4tLlatsqmTW5VwQjmQAVKyVgwSBrc81MWXxtowVVukMrtA9lNtyFmZn4mo9ULYuFUd2shzixWGKz92MkBiPU1LGwLl0E3GtgP2mACsx32y4JIA4kAz8VOoydewIBLl7pLdxpkcgKAf3cEzP7gPW8db/qN8lLK9sW1CSvsuTpnk78ivHAjUVgpMzOz7KUpQKkhEiRInY4n/wCqjSg9b6hcuXLjtq733xVjDO2JWI0GU/aOBNZz09zL/G7YFwXGB0A+Q8Shb4BB18zUrhR0RirIVUqXABV2H2CABh4wCZJMTWXBcMsvPKMMfUDyyn5kRHqr+R26ltnqWNsWJQIbgaSqghoxkvGQWDxMe4qDM1triq43KMUMq4kcH2pIBo4tdpYL93JsgQMMYXGDM5TlMiOKjbugIylAS0QxmUiZjcb/ADU+PjCxd7WdTZT9MWWa4SgLgpGL7lVgnIAR5aneqqW4uBXAFiQQ8mQNyImN/P4rTcs3uma28m2zoLiMjicXkTKmVJE6MH8brOMMDOXcyEcY4wZn3MxT4zjEkXbRfVunuEJctuSkFrZyWLi7WSPuAMGODO6qtOv6eBKXA23LQBsYkQJWNyd1cbV/pjaubtm5bzttryRskkfE+Q3WVXXAgqc5BDToDciI3Otz6pE3G0jctd+w47tpAl4W2LtdtLlIXxLBsQ3b2DuBsVb0/XDYze1bSblq3/qA3IUQdrAYDbfgaNZL9oIqFLoYupzVQwNvZGLSADIAOpG6l1lu6h/x7gIKtOECQWA9jZkRqasZgjs2v9TfAE9l2fIKCoJsCdiGXFQdQZJULor7kbaNcuBbK42bDT+spkgQbmXiLnkZCqJiBuJrDc6tGuq7WUCDENbtllDYgA7JYgmJJ+Saz22SHyUkkeEGMTI2dbET8Uu88m9/i9C1dRF6Z2sKyguH8hN4AiZEnAgNAJEcGDBrRY6kozqj2bL2gWt3Q3kQv7Fe2sXHbXkY+3lZIryme32gArd3MkvkMSsCFC4yGBkzPviuvfTJGW2AFC5KxLByOSeIBPocU3BvbTc+omJDsO4MLttRiuClCqgyZBxB41A5qtnZUfG0BavGFZ0DEYGYRyNESAcYkc1zp+puIXVAF7y4FcQZVipAXIErsDYM/mljpJuG1duCzjnJcMQGUHxhQTJICzUnmZhcu+CtcF0m7CFbbW3gBtYk5KSyD/br+RULTtdNm0zqqg4qz6VA7bLECcQTM7iqrboEcFCXJXFsoCxMgiPKdexEVbZF2+UtrLlQQi60BLECf7NWu3LMzG54ccqguWyqu2QC3FYwMSZx9MG1siudPZXNReLIjCcgsmNwQCRIkRzVaYYNOWesYjH3ll7+Iirg12+1tCzOVXC2Gb7VEnEFjCqJJj80zhentyoa+xUIWJUEkLOgTEkD1MCr7+VovaDI4bGWSGB4YYtEj41+RUVvr2inbUuXDC7JyAAYFInEgkgzE6rnS9qLncznD9PACM5X75Olxy43MVOqS5vaVxHtCGRf1EUgkAkAkEMp/aTEfwTVp6e6uVsoFa3+oZADiAPZ2RBBxFZ7FtCtws+LKAUXGe4clBEz4QpLTviPda+hwthLwyuMoYsuIC2m4tMSchcGUMVKiYj3IvV2I6mb6k4N1yrZAsTlvy+W2AdncQOazUpSZsKUpUClKUGr6e3kVLqiuCrM65ADn0CRsDYE1b1AYukWFUpbUlVDEOAobuNs8rskQP4rBXo9EqFXIudkpaadk94kwEAEEAqYPI1vmmNyfSm3ZuP3LyJ42yGcqPG3kwC/wMiAJrjMbz3HuOoYguS2szI0IESZ/jVVlYQEOJYkFBMgCCCfRBP/AKrt0JgmJbPeYIGI344mZOuZq55JxOULDgMpZcgCCVJjIA7EjYnjVWJa7jOVxQAMwBaAAN4gnbH0PZrv+X+j2sLf3554/qcRjlzh7j53Ub3ThURs1bMGVB8kgx5a1PI/FI8mInKlTWpryXL2VwC2jNLC0ohR/wCKzH/dc6fr2S3dtrjjdxylQW8DkMWIlN8wRPuoL2+2Zz7uQjjDGDM+8pj8c0iZTETafQ9EbrMqsi4ozzcYICFBMCTtjGh7qHSC4DnaDSnkWUHwj9xI4E+65/jnt9yVjLGJ8uJmOY/NStpcVC6hxbY4FhIUnnAngmNxU1OVm4S6Pr3tlysEujI2ShtOIMSDDQfuGxVdrqMUdcVOcbKyywZ8T+2eD8ilrqWVXQGFeMh84mR/3U7PWstu5aGONwqWlQW8JiGIleTwRPunmCalX3/DDFfuyyjy4iJ/2+4+asv9a727dtscbQYLCgHyORlgJbfyTHqor1TC21vWLMGPiJkAgQYkDZ1Nc/yWw7c+GWUfmIn54qzU7Inut6oXmVbtwXCn2I7A4nADwUnWhGhxNV3umKojkqQ8wAwLCDHkOV/vkUD3Gt4y5toZjZVC0CY4UmAJ9wKn0/RF7d24GQC0FJVmAZsmC+C8vBMmOBUvn5JXZC7gCpQltAtkBGXsDZlf5rv1Dqu7ce5glvIk4W1xRZ9KPQ/FctdvB8s+544RGPvLL3xERUf8g4dvUZZcCZiOeY/FWou1u1l/oytu3cLIRcyhVYF1xMea8pPInkVHrLqs0ogtiB4gkjQAJk72ZP8Adc6azmSCyrCkyxgGBMDXJqdjq8bdy3hbbuY+TLLpiZ8D+2eD8ipmIK5RuWQERw6ksWBQTkmMQW1G51Hwan1QuXAb7gkM2JeIBaJjWpjdc6JbRLd4uBg2OABl48Q0kQs8kbp0tpWD5XAmKllBBObSowEAwxBmTrVOozVLUya7bcWV82ARMTg5ECBuTJ53yaq6qVCpkDEkgCCpOirGAWIgfI+PdXqUFpGdzc/1F7Ule0SPBwdyMjkQB+2Cd68+r1F/LkpSlQKUpQKUpQKssXmRgymCOD/+1XSg3dSim0rIqgKQrEuO4zMJJKzOAIaCBqQCZp1iNcv4rZFpmwUWlkeUKv7iTLHez7rJaulTI5gjidEEHn8Gt6WbblHd2VMlS7sPdkgy6p4krA+dHU7FJrcpVRUM/UOz3f1mgyFYkfaFheB8Af8AVQ620q3HW2/cQMQr4lcwDpsTtZG4PFLGAf8AUDMgmQPFjzHMxuKn9MsXXuqLCs1wS6hRJ8AWJH8AE/1Se8y1N75V9R1LPjkZwUKugIAkxrnk7qzruz4dnuf6a9zuADz/AHYwfsnid/NVm7k+Vwk5NLkcmTJj1NRuAFjhOJPjkRMTqTxMVZzmzM5lPqula3hlHmgcQwOjMTHB1wd1w37gti2Wftk5hJOJP25AcTAif6qX1Do2s3HtOVLIYJRgymPhlJBFRv3XIVXLQohQf2g71+DM1MTlI8u/5TdvtT4ZZxA+6ImYnj1MVxb5CFIWCwMx5CJEA8gb4qy91xa1btFUAtliGCgO2cTk3LARqeKgOoHa7eCznln+/gjGZjH3xyKsTPKa0lZ6wrbuW8LZFwqcmUF0xnSNygM7jmBUbPVuqOinxuY5CAZxMjcSN/FctXgEdcFJaIYzKQZ8d++Kt6Drja7mKo3cttbOahsQ0SVn7X1phsVNZhZiJU2neGVS0MPICdgb2ByBzXek6c3HCLEniSAP+ToV3or9xHBtMyuZUYTkctQI3uYqrHce+N6//Kt9yJznS/6cLXdT/I7nanz7UF4/8cjE/wA1HpOqa04e2YZZgkA8yODI4Nc6zpjbdkYqSpglSGH9EaNOqwyPbyw1GcZcCZjXM/1SpibMTCoitN4i1dmzczCMClzErJEGYPG/mp/Vb964wu3yzNcUQzfuCgIP6AWP6qrq2tkW+2rghB3MiDk8tJWAIWIEGTo7qXMbjJUxKd606XR3UJclWKMPvyhhxvYPr5qy1bAe4btsBVMOhOLpLQQikyWXfIMe6nbs2VdWLO1tVQ3Bq3cLEeS25ykBv3RwOBqsd/qmcKGMhAQNCdksZPLGSdmTV6j/ACcvXi0TwohfwBOtfzVVKVApSlApSlApSlApSlAroNcpQej0nWzetuzm2TIuXY7hOeQZypOzi0QOY+apXp8LhV2KaJDRMysroH9wI/5rJV3S9U9tgyMVZTII9GrecnnlP6fHcE2+6NykkZaP+3euf6qqwgZlBYKCQCx4WfZ/ittvrkW+LloXOnWT/puSyAiCFYweCRs+4ri9CUvWwyrcVnAAW4sOMojIHxniTHzUie5rLDcWCQCCAeRwfzvda/rCX1ulOpDi6gVSLk5KABiN/wDjFUdZZKXHRhiVYqVmcSCQRI5j5rvWxm0Obg/3mRl/zumeNFcuXuoyVFxUYAiQILSSfI+zuKs/yl7Pa7SZdzPu7ziI7fMYzviZ91Z9TF2LPdZWHaBt4srYpLQDj9rTOm3UWW52AcB2u4QHxEloErlyREGOKuPlkvuqsX1VLilFYsAAxmbcEGVgxsa3XOl6jBssVbREOJGwRMfIrR0Fy4Ld8IiMpQB2ZAxQZKQVJ2hmBI+a79DW6b6Cwyrc8sSzKoHi0yX8RqeaXMZnBUxmGborzpcRrRIuKwKFeQwIII/MxXOrVw7C5OeRyy+6Z3M+5qFsbEmN8/H5qfVqA7BXzGRh4Iz/APKDsTzupUbLjSzr+nW22KXFujFTkgIEkAlfIAyCY49U6wiLcW+34Dck9wy0vv5Ota8au6vpD3e2qC2QoJBuAjS5FsiY2NxP4p190ZKrO90W0wEvIEEnG2djtZEkR8z7q1MYMTm1Q6bPtLbY3Lj6wx+0liFUGfKdH+4q7q7gR0Rz3RbXHEjHFjMrIMti559x8VV9Q69rrAsTiqhEWZwRZxQH2B+ayUuSvKd66zMWYlmPJJkmoUpUClKUClKUClKUClKUClKUClKUClKUClKUF/U9U1yC5kgQDABj8wN/3V/1XrheKthi+KhzlPcKgDKIGPHArDSrcjX1L2zbt4yLgBDjGFOyQ2WZJaDH2jj3XcrX+PEfrdz7pO0x4iMdN7md1jpUnI2dILXavFz+pC9ob2chkda0s81H6e9tSxuSYU4rjkGaIAbzUqPcieOKy0q2aavpnVC1cW4VyxIKiYgggg8GYPqi/ULgum9l+oWLFiAfImSYIiZ3WWlQWX7pdmZjLMSSfknZP/NV0pQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKUpQf/9k="
var dots = [], images = [], h = 800;
var axis = Vector.create([1.7, 1, 0.7]);
var rot = Matrix.Rotation(0.1, axis);
for (var i = 0; i < 25; i++) {
dots[i] = Vector.create([h * (Math.random() - 0.5), h * (Math.random() - 0.5), h * (Math.random() - 0.5)]);
image = document.createElement('img');
image.id = 'img_' + i;
image.src = dataImage;
document.body.appendChild(image);
images[i] = image;
}
setInterval(function () {
for (var i = 0; i < dots.length; i++) {
f = (dots[i].e(3) + h) / (2 * h) + 0.1;
images[i].style.opacity = f - 0.1;
images[i].style.width = (50 * f) + 'px';
images[i].style.height = (50 * f) + 'px';
images[i].style.position = 'absolute';
images[i].style.top = (150 - dots[i].e(2) * f) + 'px';
images[i].style.left = (300 + dots[i].e(1) * f) + 'px';
dots[i] = rot.x(dots[i]);
}
}, 22);
</script>
</body>
</html>
</code></pre>
<br />
<br />
<div style="text-align: justify;">
Bu haftalık anlatacaklarım bu kadar, bir sonraki yazımda sizlere<b> Reflection.js</b> kütüphanesinden bahsedeceğim. Şimdilik görüşmek üzere, hoşçakalın...</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>KAYNAKLAR</b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
1.<a href="http://kurtmancelik.wordpress.com/2009/11/03/raphael-javascript-kutuphanesi/" target="_blank"> http://www.chrisumbel.com/article/sylvester_node_js_matrix_vector_math</a></div>
<div style="text-align: justify;">
2. <a href="http://raphaeljs.com/reference.html">http://www.javascriptoo.com/sylvester</a></div>
<div style="text-align: justify;">
3 <a href="https://github.com/DmitryBaranovskiy/raphael/" target="_blank">.http://ajaxian.com/archives/sylvester-vector-and-matrix-math-for-javascript</a></div>
<div style="text-align: justify;">
4. <a href="http://raphaeljs.com/">http://sylvester.jcoglan.com/api/vector.html</a></div>
</div>
<div>
<br /></div>
Nil Buşra Koçerhttp://www.blogger.com/profile/07084098285875162702noreply@blogger.com0tag:blogger.com,1999:blog-4511869999190707921.post-45505244432625941482013-11-24T04:39:00.000-08:002013-11-24T04:39:49.278-08:00<span style="color: #0b5394; font-size: x-large; text-align: justify;">Raphael.js</span><span style="font-size: x-large; text-align: justify;"> </span><span style="color: #0b5394; font-size: x-large; text-align: justify;">Kütüphanesi</span><br />
<span style="color: #0b5394; font-size: x-large; text-align: justify;"><br /></span>
<br />
<div style="text-align: justify;">
<span style="font-weight: normal;"> <span style="font-size: small;"><span style="font-family: Times, Times New Roman, serif;"> </span><span style="font-family: Times, Times New Roman, serif;"> <span style="text-align: start;">Herkese merhabalar.</span></span></span></span><br />
<br />
<span style="font-size: small;"><span style="font-family: Times, Times New Roman, serif;"> Bir hafta aradan sonra sizlerle tekrardan beraberiz. Bu hafta sizlere<span style="color: #3d85c6;"> </span><b><span style="color: #0b5394;">raphael.js</span></b> isimli JavaScript kütüphanesinden bahsetmek istiyorum. <span style="line-height: 25px;">Raphael.js, SVG (Scalable Vector Graphics) / VML (Vector Markup Language)'in temelinde kullanılan oldukça işlerimizi kolaylaştıran ve tasarım için yardımımıza koşan bir kütüphanedir. Bu kütüphane sayesinde sayfanıza vektörel grafikleri çizmekle kalmayıp, çizmiş olduğunuz şekli istediğiniz derecede ölçeklendirebilirsiniz. İstediğiniz derece kadar elementinizi döndürebilirsiniz, elementinize animasyon ekleyebilirsiniz ve sürükle bırak özelliğinin eklenebilmesi gibi birçok özelliği kullanabilmeniz mümkün. Aşağıda <span style="color: #0b5394;"><b>raphael.js</b></span> kütüphanesi kullanarak çizilmiş birkaç şekil örneği bulunmaktadır.</span></span></span><br />
<span style="font-size: small;"><span style="font-family: Times, Times New Roman, serif;"><span style="line-height: 25px;"><br /></span></span></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6Z_eOZxOesqE9RYONpcLT5kF3uFdm3sRR_D3FanMjoKf0PtoXH05URZUuS27nfVhQDirQIjj1XuCs8br7zSEr67z-tzKtw9O5loEIt2OeCuVqttArwMCDLcTR79kMQaf_HxJaKxET-9cm/s1600/Untitled.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="153" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6Z_eOZxOesqE9RYONpcLT5kF3uFdm3sRR_D3FanMjoKf0PtoXH05URZUuS27nfVhQDirQIjj1XuCs8br7zSEr67z-tzKtw9O5loEIt2OeCuVqttArwMCDLcTR79kMQaf_HxJaKxET-9cm/s200/Untitled.png" width="200" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNJPvFGknR2V-QkgwPVTAx6F3YUD7MsFr17CE3CH0yJsCOs8aROBVFqkpT5Y8ZeE2tO_J8zlonegUw3SzTr1Yl2wlXySngfnbDtUBuvVmKxN52SsJqoqUUQbAHEsOJqRjhGMWnJPlg1kc0/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="179" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNJPvFGknR2V-QkgwPVTAx6F3YUD7MsFr17CE3CH0yJsCOs8aROBVFqkpT5Y8ZeE2tO_J8zlonegUw3SzTr1Yl2wlXySngfnbDtUBuvVmKxN52SsJqoqUUQbAHEsOJqRjhGMWnJPlg1kc0/s200/Untitled.png" width="200" /></a></div>
<span style="font-weight: normal;"><span style="font-size: small;"><span style="font-family: Times, Times New Roman, serif;"><span style="line-height: 25px;">Şimdi ise sizlere biraz bu kütüphanede kullanılan fonksiyonlardan ve parametrelerden bahsetmek istiyorum. Bu kütüphanede kullanılan tüm fonksiyonlardan bahsedecek olursam oldukça sıkılacaksınız çünkü oldukça fazla kullanılan fonksiyon sayısı mevcut, bu yüzden detaylı bilgi için <a href="http://raphaeljs.com/reference.html" target="_blank">bu siteye </a>göz atmanızı tavsiye ediyorum. </span></span></span></span><br />
<span style="font-weight: normal;"><span style="font-size: small;"><span style="font-family: Times, Times New Roman, serif;"><span style="line-height: 25px;"><br /></span></span></span></span>
<br />
<h3>
<span style="font-size: small;"><span style="font-family: Times, Times New Roman, serif;"><span style="color: red; line-height: 25px;">ELEMENT</span></span></span></h3>
<div>
<span style="font-size: small;"><span style="font-family: Times, Times New Roman, serif;"><span style="color: #0b5394; line-height: 25px;"><b>1) Element.animate()</b></span></span></span></div>
<div>
<span style="font-size: small;"><span style="font-family: Times, Times New Roman, serif;"><span style="color: #0b5394; line-height: 25px;"> </span></span></span><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;">Element için animasyon oluşturup başlatmaktadır. Bu fonksiyon obje döndürmektedir.</span></div>
<div>
<span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"><br /></span></div>
<div>
<span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </span><span style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"><b>Parametreler:</b></span></div>
<div>
<span style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> <b>callback:</b> </span><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;">Animasyonun sonunda çağrılan bir parametredir.</span></div>
<div>
<span style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> <b>animation:</b> </span><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;">Obje tipinde bir parametre olan animasyon objesidir.</span></div>
<div>
<span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"> <b> <span style="color: #0b5394;">easing</span></b><span style="color: #3d85c6;">:</span></span><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"> String tipinde önemli bir parametredir.<a href="http://raphaeljs.com/reference.html#Raphael.easing_formulas" target="_blank"> Raphael.easing_formulas</a> veya CSS formatını kabul eder.</span><br />
<span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </span><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </span><span style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"><b>ms</b>:</span><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"> Sayı tipindeki bir parametredir. Animasyonun çalışma süresi olan milisaniyeleri belirtir. </span></div>
<div>
<span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"> <span style="color: #0b5394;"><b>params</b>:</span> Obje tipindeki parametredir. Elementin özelliklerini belirtmektedir.</span></div>
<div>
<span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"><br /></span></div>
<div>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;">2) Element.clone()</b></div>
<div>
<span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"> Obje döndürür ve isminden de anlaşıldığı gibi elementi çoğaltır.</span></div>
<div>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;">3) Element.dblclick(handler)</b></div>
<div>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </b><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;">Elemente event handler(olay işleyicisi) ve çift tıklanabilme özelliğini ekler.</span></div>
<div>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;">4) Element.hide()</b></div>
<div>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </b><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;">Elementi görünmez yapmamızı sağlar.</span><b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </b></div>
<div>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;">5) Element.isPointInside(x,y)</b></div>
<div>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </b><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;">Aldığı parametredeki koordinatların elementin içinde olup olmadığını anlamamıza yarar.</span></div>
<div>
<span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"><br /></span></div>
<div>
<h3>
<span style="font-size: small;"><span style="font-family: Times, Times New Roman, serif;"><span style="color: red; line-height: 25px;">ANIMATION</span></span></span></h3>
</div>
<div>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;">1) Animation.delay(delay)</b></div>
<div>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </b><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;">Belirlenen erteleme ile birlikte var olan animasyon objesinin bir kopyasını oluşturur. Geriye bu animasyon objesini döndürür.</span><b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </b></div>
<div>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> delay parametresi: </b><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;">Milisaniye cinsinden gecikme süresidir.</span></div>
<div>
<br /></div>
<div>
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code>var anim = Raphael.animation({cx: 25, cy: 35}, 2e3);
circle1.animate(anim); // verilen animasyonu çalıştırır..
circle2.animate(anim.delay(289)); // verilmiş olan animasyonu 289 ms sonra çalıştırır..</code>
</pre>
<br />
<div>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;">2) Animation.repeat(repeat)</b><br />
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </b><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;">Belirtilen tekrarlama sayısı kadar var olan animasyon objesinin kopyalarını oluşturur. Döndürdüğü değer, değiştirilmiş olan animasyon objesidir.</span><br />
<span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </span><b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> repeat parametresi: </b><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;">Animasyonun kaç defa tekrarlanacağının sayısını tutmaktadır.</span><br />
<span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"><br /></span>
<br />
<h3>
<span style="font-size: small;"><span style="font-family: Times, Times New Roman, serif;"><span style="color: red; line-height: 25px;">PAPER</span></span></span></h3>
<div>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;">1) Paper.add(json)</b></div>
<div>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </b><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"> Elementleri <a href="http://tr.wikipedia.org/wiki/JSON" target="_blank">JSON</a> formatındaki arraye ekler. Döndürdüğü değer, eklenmiş olan elementlerdir. Aşağıdaki kodlarda nasıl kullanıldığına bir bakalım.</span><br />
<span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"><br /></span></div>
<div>
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code>paper.add([
{
type: "rect",
x: 25,
y: 40,
width: 25,
height: 40,
fill: "#fc0"
},
{
type: "circle",
cx: 12,
cy: 12,
r: 6
fill: "#fc0"
}
]);</code>
</pre>
<span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"><br /></span></div>
<div>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;">2) Paper.circle(x,y,r)</b><br />
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </b><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;">Parametrelerdeki belirlenen koordinatlar ve yarıçapa göre çember çizmemizi sağlar.</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAMwLJfNCuqoZGkd-wj1-j0r1ZvdJhSsR7lEDWsP-tE9n19AyY2KwrnmgGCuL8Tbpy8ZFzByk4LS1luE9Lx4TtvAGnhcLRRnWIkejWRcjsURy8gWk6FZWu2opW8hgblHnX53mpzsUPunWS/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="196" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAMwLJfNCuqoZGkd-wj1-j0r1ZvdJhSsR7lEDWsP-tE9n19AyY2KwrnmgGCuL8Tbpy8ZFzByk4LS1luE9Lx4TtvAGnhcLRRnWIkejWRcjsURy8gWk6FZWu2opW8hgblHnX53mpzsUPunWS/s200/Untitled.png" width="200" /></a></div>
<span style="font-family: Times, 'Times New Roman', serif;"> Şimdi ise aşağıdaki kod parçacığında nasıl kullanıldığına bir bakalım.</span><br />
<span style="font-family: Times, 'Times New Roman', serif;"><br /></span></div>
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code>var circle1 = paper.circle(60, 70, 45);</code>
</pre>
</div>
</div>
<br />
<span style="font-weight: normal;"><b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;">3) Paper.image(src,x,y,width,height)</b></span><br />
<span style="font-weight: normal;"><b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </b></span><span style="font-family: Times, 'Times New Roman', serif;">Belirlenen alana resim eklememizi sağlar. Şimdi ise aldığı parametrelere bakalım.</span><br />
<span style="font-family: Times, 'Times New Roman', serif;"> <b style="color: #0b5394;">src: </b>Eklenen resmin url'idir.</span><br />
<span style="font-family: Times, 'Times New Roman', serif;"><br /></span>
<span style="font-family: Times, 'Times New Roman', serif;"> <b style="color: #0b5394;"> x: </b>x koordinatı pozisonu. </span><br />
<span style="font-family: Times, 'Times New Roman', serif;"><br /></span>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif;"> y: </b><span style="font-family: Times, 'Times New Roman', serif;">y</span><span style="font-family: Times, 'Times New Roman', serif;"> koordinatı pozisonu.</span><br />
<span style="font-family: Times, 'Times New Roman', serif;"><br /></span>
<span style="font-family: Times, 'Times New Roman', serif;"> <b><span style="color: #0b5394;">width:</span></b> Eklenecek olan resmin genişliğidir.</span><br />
<span style="font-family: Times, 'Times New Roman', serif;"><br /></span>
<span style="font-family: Times, 'Times New Roman', serif;"> <b><span style="color: #0b5394;">height:</span></b> </span><span style="font-family: Times, 'Times New Roman', serif;">Eklenecek olan resmin yüksekliğidir.</span><br />
<span style="font-family: Times, 'Times New Roman', serif;"><br /></span>
<span style="font-family: Times, 'Times New Roman', serif;"> Aşağıdaki kod parçacığında nasıl kullanıldığına bir bakalım.</span><br />
<span style="font-family: Times, 'Times New Roman', serif;"><br /></span>
<br />
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code>var v = paper.image("nil.png", 80, 60, 200, 300);</code>
</pre>
<span style="font-family: Times, 'Times New Roman', serif;"><br /></span><span style="font-weight: normal;"><b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;">4) Paper.setSize(width,height)</b></span><br />
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; font-weight: normal; line-height: 25px;"> </b><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"> Canvas boyutlarını değiştirmek istiyorsanız bu metodu çağırmalısınız.</span><br />
<span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"><br /></span>
<span style="font-family: Times, 'Times New Roman', serif;"> <b><span style="color: #0b5394;">width:</span></b> Canvasın yeni genişliğidir.</span><br />
<br />
<span style="font-family: Times, 'Times New Roman', serif;"> <b><span style="color: #0b5394;">height:</span></b> </span><span style="font-family: Times, 'Times New Roman', serif;">Canvasın yeni</span><span style="font-family: Times, 'Times New Roman', serif;"> yüksekliğidir.</span><br />
<span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"><br /></span>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;">5) Paper.getElementsByPoint(x,y)</b><br />
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </b><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;">Parametlerde belirtilen <b>x</b> ve <b>y</b> koordinatlarını içerisinde bulunduran tüm elementleri geriye döndüren bir metottur.</span><br />
<span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"><br /></span>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;">6) Paper.clear()</b><br />
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </b><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;">Çizilmiş olan sayfa kaldırılır ve sayfa üzerindeki tüm elementler silinir.</span><br />
<span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"><br /></span>
<br />
<h3>
<span style="font-size: small;"><span style="font-family: Times, Times New Roman, serif;"><span style="color: red; line-height: 25px;">MATRIX</span></span></span></h3>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </b><b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;">1) Matrix.add(a,b,c,d,e,f,matrix)</b><br />
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </b><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;">Parametrelerde verilen matrisin, var olan bir matrisin içerisine atılmasını sağlar.</span><br />
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;">2) Matrix.clone()</b><br />
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </b><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;">Döndürüğü değer matrisin kopyasıdır. İsminden de anlaşıldığı gibi matrisi çoğaltmaktadır</span><b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;">.</b><br />
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;">3) Matrix.rotate(a,x,y)</b><br />
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </b><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;">Matrisi verilen parametrelere göre döndürür.</span><br />
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;">4) Matrix.toTransformString()</b><br />
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </b><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;">Dizgiye dönüştürülmüş olan matrisi geriye döndürür.</span><br />
<span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"><br /></span>
<br />
<h3>
<span style="font-size: small;"><span style="font-family: Times, Times New Roman, serif;"><span style="color: red; line-height: 25px;">RAPHAEL</span></span></span></h3>
<div>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;">1) Raphael.angle(x1,y1,x2,y2,[x3],[y3])</b></div>
<div>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </b><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;">İki veya üç nokta arasındaki açıyı geri döndüren metottur.</span><br />
<span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"><br /></span>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;">2) Raphael.isPointInsideBBox(bbox,x,y)</b><br />
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </b><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"> Eğer parametrelerde verilen koordinatlar sınırlayıcı kutunun (bounding box) içerisinde ise metot, <b>true</b> değerini geriye döndürür.</span><br />
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </b></div>
<div>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;">3) Raphael.el</b></div>
<div>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </b><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;">Elementlere kendi metotlarınızı eklemeniz "</span><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;">Raphael.el" sayesinde mümkün. Aşağıda bu kullanımın nasıl olacağına dair bir örneğe bakalım.</span></div>
<div>
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code>Raphael.el.blue = function () {
this.attr({fill: "#00F"});
};
// sonrasında aşağıdaki gibi kullanın..
paper.circle(175, 180, 35).blue();</code>
</pre>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"><br /></b>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;">4) Raphael.matrix(a,b,c,d,e,f)</b><br />
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </b><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;">Verilen parametrelere göre geriye matris döndürür.</span><br />
<br /></div>
<h3>
<span style="font-size: small;"><span style="font-family: Times, Times New Roman, serif;"><span style="color: red; line-height: 25px;">SET</span></span></span></h3>
<div>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;">1) Set.clear()</b></div>
<div>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </b><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;">Kümedeki tüm elementleri siler.</span></div>
<div>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;">2) Set.exclude(element)</b></div>
<div>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </b><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"> Parametrede verilmiş olan elementi kümeden siler.</span></div>
<div>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;">3) Set.pop()</b></div>
<div>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </b><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;">Pop'un özelliğinden de bilindiği gibi, son elementi siler ve bu elementi geriye döndürür.</span></div>
<div>
<h3>
<span style="font-size: small;"><span style="font-family: Times, Times New Roman, serif;"><span style="color: red; line-height: 25px;">eve()</span></span></span></h3>
</div>
<div>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;">1) eve.on(name,f)</b></div>
<div>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </b><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;">Verilen olay dinleyicisini (event handler) verilen isme bağlayabilirsiniz. İsimler için "*" sembolünü kullanabilirsiniz. Aşağıdaki kod parçacığına bakarak kullanımını daha iyi anlayalım.</span></div>
<div>
<span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"><br /></span></div>
<div>
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code>eve.on("*.under.*", f); //under ismi ile bağladık..
eve("mouse.under.floor"); // f'i tetikler..</code>
</pre>
<span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"><br /></span>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;">2) eve.off(name,f)</b><br />
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </b><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;">Olay dinleyicisi (event handler) listesinden, verilen fonksiyonu bağlanmış olduğu isme göre siler.</span><br />
<span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"><br /></span><span style="font-family: Times, Times New Roman, serif;"><span style="line-height: 25px;"> Bazı fonksiyonları tanıdıktan sonra, sizin için ASP.NET ortamında yapmış olduğum örneğe geçmeden önce kendi çizim alanımızı nasıl oluşturduğumuza bir bakalım. Bu alanı sayfamızda <b>Raphael()</b> nesnesiyle oluşturduğumuz <b>"paper"</b> referansı ile kullanacağız. Çizim alanımızı oluşturmadan önce, çizim alanımızın genişliğini ve yüksekliğini belirlememiz gerekiyor. Ayrıca şunu da eklemek istiyorum; tercihe bağlı olarak, bu alanın bağımsız (absolute) bir pozisyona mı sahip olacağını yoksa bir elemente bakılarak mı konumlandırılacağını belirleyebiliyoruz.</span></span><br />
<span style="font-family: Times, Times New Roman, serif;"><span style="line-height: 25px;"><br /></span></span>
<span style="font-family: Times, Times New Roman, serif;"><span style="color: #0b5394; line-height: 25px;"><b>İlk yöntem:</b></span></span><br />
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code>var paper = new Raphael(x, y, width, height);
var paper = new Raphael(element, width, height);</code>
</pre>
<br />
<div style="text-align: left;">
<b style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"><span style="color: #0b5394;">Bir elementi örnek alma yöntemi:</span></b><span style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </span><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;">Aşağıdaki örneğimizde, s</span><span style="font-family: Times, Times New Roman, serif;"><span style="line-height: 25px;">ayfamızda yer alan </span></span><b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"> canvas_container </b><b style="font-family: Times, 'Times New Roman', serif; line-height: 25px;">DIV</b><b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;">'</b><b style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"> </b><span style="font-family: Times, Times New Roman, serif;"><span style="line-height: 25px;">ini kullanarak 300</span></span><span style="line-height: 21.59375px;"><span style="font-family: Times, Times New Roman, serif;"> x 400 boyutlarında bir çizim alanı oluşturuyoruz.</span></span></div>
<br />
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code>window.onload = function() {
var paper = new Raphael(document.getElementById('canvas_container'), 300, 400);
}</code>
</pre>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXdLUMeTuDNIaCi5bsqbm7ZU2VZcwwvuXKetq2EurxkDCTXPYvzNFMqB64AJ7fwkvFMKQQPmA60AS-JcE45BiCcZtgPhRuq_xYfg2Eg9xFsr14v-UzGJpa8spJLaa3x01_Kdwowuh93mmw/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXdLUMeTuDNIaCi5bsqbm7ZU2VZcwwvuXKetq2EurxkDCTXPYvzNFMqB64AJ7fwkvFMKQQPmA60AS-JcE45BiCcZtgPhRuq_xYfg2Eg9xFsr14v-UzGJpa8spJLaa3x01_Kdwowuh93mmw/s1600/Untitled.png" /></a></div>
<b style="color: #0b5394; font-family: Times, 'Times New Roman', serif; line-height: 25px;"><br /></b><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"><br /></span>
<span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;">ASP.NET ortamında sizler için hazırlamış olduğum projeye gelmeden önce, raphael.js kütüphanesini </span><a href="http://raphaeljs.com/" style="font-family: Times, 'Times New Roman', serif; line-height: 25px;" target="_blank">indirip </a><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;">Solution Explorer'a eklemeliyiz. Projemde kullandığım kodları biraz açıklamak istiyorum.</span><br />
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><span style="font-family: Times, 'Times New Roman', serif; line-height: 25px;"><code>p.circle(100, 100, 30).attr({ "stroke-width": 10, fill: "90-#f00-#000" }).animate({ cx: 300 }, 1000, "elastic");</code></span></pre>
</div>
<br />
Yukarıdaki kod parçacığında, istediğim boyuttaki circle' ı (çember) çizdim ve hareket edeceği süreyi <b>ms</b> cinsinden belirleyerek sağdan sola hareket etmesini sağladım.<br />
<br />
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code>p.circle(100, 100, 30).attr({ "stroke-width": 20, fill: "90-#f00-#000" }).animate({ cx: 300 }, 1000, "elastic");</code>
</pre>
<br />
Yukarıdaki kod parçacığında, istediğim boyuttaki circle'ı (çember) çizdim ve hareket edeceği süreyi <b>ms</b> cinsinden belirleyerek yerinde titreme hareketi yapmasını etmesini sağladım.<br />
<br />
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code> var p = Raphael(0, 0, 400, 400);
p.rect(0, 0, 400, 400);
p.rect(20, 20, 50, 50).attr({ fill: "red", stroke: "none",cursor:"pointer" }).click(function () {
this.attr({ fill: "blue" })// Kırmızı dikdörtgene tıklayınca mavi renge dönmesini sağlar..
}).hover(function () {
this.attr({ fill: "pink" });
}, function () {
this.attr({fill:"orange"});
});
</code>
</pre>
<br />
Yukarıdaki kod parçacığında, istediğim boyuttaki dikdörtgeni çizdim ve üzerine mouse ile gelindiğinde (hover) veya mouse ile tıklanıldığında (click) dikdörtgenin renginin değişmesini sağladım.<br />
<br />
<span style="color: red;">Ekran Görüntüsü:</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpi7hbv3QS4IcraqTvGX5Z-tqPJEnmvBSkSRG4Uw0jKYzRsmiWXGcyelTQUSX_DQ_XSGoHSFtOiY4tTVxVGu0kbkZhz0uMQYo5UOkrfm1CdVGaitwk2iJ6hQwiK-c0HUband5NxlNsGH8Z/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="174" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpi7hbv3QS4IcraqTvGX5Z-tqPJEnmvBSkSRG4Uw0jKYzRsmiWXGcyelTQUSX_DQ_XSGoHSFtOiY4tTVxVGu0kbkZhz0uMQYo5UOkrfm1CdVGaitwk2iJ6hQwiK-c0HUband5NxlNsGH8Z/s640/Untitled.png" width="640" /></a></div>
<span style="color: red;"><br /></span>
<br />
<br />
<span style="color: red;">Projenin kodları:</span><br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta charset="utf-8" />
<title>Raphael JavaScript Kütüphanesi Örnek</title>
<script src="raphael.js"></script>
<script>
window.onload = function () {
var p = Raphael(0, 0, 400, 400);
p.rect(0, 0, 400, 400);
p.rect(20, 20, 50, 50).attr({ fill: "red", stroke: "none", cursor: "pointer" }).click(function () {
this.attr({ fill: "blue" })// Kırmızı dikdörtgene tıklayınca mavi renge dönmesini sağlar..
}).hover(function () {
this.attr({ fill: "pink" });
}, function () {
this.attr({ fill: "orange" });
});
p.circle(100, 100, 30).attr({ "stroke-width": 20, fill: "90-#f00-#000" }).animate({ cx: 300 }, 1000, "elastic");
p.circle(100, 100, 30).attr({ "stroke-width": 10, fill: "90-#00f-#0f0" }).animate({ cx: 300 }, 1000, "ease-in-out");
};
</script>
<style></style>
</head>
<body>
</body>
</html>
</code></pre>
<div>
<br />
Bu haftalık anlatacaklarım bu kadar, bir sonraki yazımda sizlere Sylvester.js kütüphanesinden bahsedeceğim.
Şimdilik görüşmek üzere, hoşçakalın...<br />
<br />
KAYNAKLAR<br />
<br />
1.<a href="http://kurtmancelik.wordpress.com/2009/11/03/raphael-javascript-kutuphanesi/" target="_blank"> http://kurtmancelik.wordpress.com/2009/11/03/raphael-javascript-kutuphanesi/</a><br />
2. <a href="http://raphaeljs.com/reference.html">http://raphaeljs.com/reference.html</a><br />
3 <a href="https://github.com/DmitryBaranovskiy/raphael/" target="_blank">.https://github.com/DmitryBaranovskiy/raphael/</a><br />
4. <a href="http://raphaeljs.com/">http://raphaeljs.com/</a><br />
<br /></div>
</div>
Nil Buşra Koçerhttp://www.blogger.com/profile/07084098285875162702noreply@blogger.com1tag:blogger.com,1999:blog-4511869999190707921.post-63876079246617609882013-11-17T03:00:00.000-08:002013-11-17T03:00:12.174-08:00<span style="color: #0b5394; font-size: x-large; text-align: justify;"> Chronoline.js</span><span style="font-size: x-large; text-align: justify;"> </span><span style="color: #0b5394; font-size: x-large; text-align: justify;">Kütüphanesi</span><br />
<div style="text-align: justify;">
<span style="font-size: x-large;"><span style="color: #0b5394;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="text-align: start;">Herkese merhabalar.</span><br />
<div style="text-align: start;">
<br /></div>
<div>
İki hafta aradan sonra sizlerle tekrardan beraberiz. Bu hafta sizlere<b> chronoline.js</b> isimli JavaScript kütüphanesinden bahsetmek istiyorum. Bu kütüphanenin oldukça kullanışlı bir kütüphane olduğunu düşünüyorum, neden diye soracak olursanız ne işe yaradığından bir bahsedelim. Planladığınız işlerinizi tarihe göre yatay bir zaman çubuğu üzerinde sıralamak istediğinizde size gelecek olan en iyi çözüm <b>chronoline.js</b> JavaScript kütüphanesidir. Tarihlerin ve bu tarihlere göre grafiksel olarak göstermek istediğiniz olayların listelerinden yola çıkarak, belirlediğiniz programlar, göstermek istediğiniz tarihsel olaylar vb. gibi durumları göstermek istediğinizde bu kütüphaneyi kullanmak oldukça işinizi kolaylaştıracaktır. Zaman çubuğunuza istediğiniz zaman özelliğini katabilirsiniz; dilediğiniz kadar gün sayısı olarak , hafta olarak, ay olarak, yıl olarak... Bu kütüphanenin kullanılabilmesi için <b>raphael.js</b> JavaScript kütüphanesine ihtiyaç vardır, çünkü bu kütüphane vektörel grafiklerin çizimini sağlayan fonksiyonları sayesinde zaman çubuğu çizelgesini oluşturmamızı sağlar. Bu kütüphane de sizlere anlatacağım kütüphanelerden biri, raphael.js kütüphanesinden önümüzdeki hafta detaylı bir şekilde bahsecedeğim. Tercihinize bağlı olarak jQuery kullanarak daha hoş tooltipler kullanabilirsiniz.<br />
<br />
Chronoline.js kütüphanesini <a href="http://stoicloofah.github.io/chronoline.js/" target="_blank">bu adresten</a> indirip projenizde kullanabilirsiniz. Aşağıda sizlere bu kütüphaneyi kullanarak ASP.NET ortamında yaptığım, balık sezonunun aylara göre düzenlenmiş bir zaman çizelgesi örneğini açıklamak istiyorum.<br />
<br />
Solution Explorer'a aşağıda gördüğünüz gibi Chronoline.js kütüphanesinin dosyalarını ekledim.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJbQKLTOjJKEVcpzTGU8wGjxBnJZXELV_JiNU03VZ9rk2GDVgR_4NtzH6yaUvWJP5QN1Em7_8bbkrkmQyVkKtVmn5LLxaLvoZExWkzSO32gtAiUtb8QP6YXOUVKKVxRcx7v-4ULsJYMutO/s1600/sln.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJbQKLTOjJKEVcpzTGU8wGjxBnJZXELV_JiNU03VZ9rk2GDVgR_4NtzH6yaUvWJP5QN1Em7_8bbkrkmQyVkKtVmn5LLxaLvoZExWkzSO32gtAiUtb8QP6YXOUVKKVxRcx7v-4ULsJYMutO/s320/sln.png" width="279" /></a></div>
<br />
Şimdi ise sizlere projemde kullanmış olduğum kodları açıklamak istiyorum.<br />
<br />
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code> var events = [
{ dates: [new Date(2013, 12, 18)], title: "Tekir Sezonu Basliyor", section: 0 },
{ dates: [new Date(2014, 5, 29)], title: "Hamsi Sezonu Basliyor", section: 2 },
{ dates: [new Date(2014, 7, 28)], title: "Uskumru Sezonu Basliyor", section: 1, description: "Dilediginiz aciklamayi yaziniz" },
{ dates: [new Date(2014, 10, 10)], title: "Cupra Sezonu Basliyor", section: 3 }
];</code>
</pre>
<br />
<br />
Yukarıda görmüş olduğunuz kod ile events listesi içerisine section sıralamamıza göre hangi tarihte sezonlarımızı başlatacağımızı belirlemiş olduk.<br />
<br />
<b><span style="color: #3d85c6;">Section parametresi: </span></b> Id'sine göre belirlenmiş olan "event" ile ilişkilendirilen parametredir.<br />
<br />
<br />
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code> var sections = [
{ dates: [new Date(2013, 11, 15), new Date(2014, 7, 25)], title: "Tekir Sezonu", section: 0, attrs: { fill: "#99FF33" } },
{ dates: [new Date(2014, 7, 28), new Date(2014, 10, 23)], title: "Uskumru Sezonu", section: 1, attrs: { fill: "#d4e3fd" } },
{ dates: [new Date(2014, 5, 29), new Date(2014, 7, 27)], title: "Hamsi Sezonu", section: 2, attrs: { fill: "#9999CC" } },
{ dates: [new Date(2014, 10, 10), new Date(2014, 12, 10)], title: "Cupra Sezonu", section: 3, attrs: { fill: "#eaf0fa" } }
];</code>
</pre>
<div>
<br /></div>
Yukarıda tanımlamış olduğum section parametresine göre, bu kod parçasında balıkların sezon başlangıç ve bitiş tarihlerini ve grafikte gösterilecek olan sezon rengini belirlemiş olduk.<br />
<br />
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code> $('#to-today').click(function () { timeAy.goToToday(); });</code>
</pre>
<br />
Yukarıda görmüş olduğunuz kod parçası, zaman çizelgesinde bulunduğumuz günün gösterilmesini sağlar.<br />
<br />
Aşağıda, yapmış olduğum örneğin ekran görüntüsünü sizlerle paylaşmak istiyorum.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIOwLYht5nxoc5o8FPRkFF6tyuhrXLaqf4cSZ1oJTYAzt6uv2wZJCIynJGYrRI2dyx3Y7mw002YZxiUw9nqTYNo3uCpwKNF2LodLCDuR3lSnApCYlbzIFU6uEIVFZX8QK8aav21s4E4Ood/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="260" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIOwLYht5nxoc5o8FPRkFF6tyuhrXLaqf4cSZ1oJTYAzt6uv2wZJCIynJGYrRI2dyx3Y7mw002YZxiUw9nqTYNo3uCpwKNF2LodLCDuR3lSnApCYlbzIFU6uEIVFZX8QK8aav21s4E4Ood/s640/Untitled.png" width="640" /></a></div>
<br />
Projenin kodları:<br />
<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta charset='utf-8' />
<meta http-equiv="X-UA-Compatible" content="chrome=1" />
<link rel="stylesheet" type="text/css" media="screen" href="stylesheets/stylesheet.css" />
<title>Chronoline.js Kütüphanesi Örnek</title>
</head>
<body>
<div id="main_content_wrap" class="outer">
<section id="main_content" class="inner">
<p>Balık Sezonunun Aylara Göre Gösterim Örneği</p>
<h2>Aylık zaman çizelgesi </h2>
<img border="0" src="pulpit.jpg" width="304" height="175">
<div id="target1" class="timeline-tgt">
<input id="to-today" type="button" value="Bugune git" style="margin-left: 910px" />
</div>
</section>
</div>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="http://cdnjs.cloudflare.com/ajax/libs/qtip2/2.0.1/jquery.qtip.min.css" />
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/qtip2/2.0.1/jquery.qtip.min.js"></script>
<script type="text/javascript" src="chronoline/raphael-min.js"></script>
<link rel="stylesheet" type="text/css" href="chronoline/chronoline.css" />
<script type="text/javascript" src="chronoline/chronoline.js"></script>
<script type="text/javascript">
$(document).ready(function () {
var events = [
{ dates: [new Date(2013, 12, 18)], title: "Tekir Sezonu Basliyor", section: 0 },
{ dates: [new Date(2014, 5, 29)], title: "Hamsi Sezonu Basliyor", section: 2 },
{ dates: [new Date(2014, 7, 28)], title: "Uskumru Sezonu Basliyor", section: 1, description: "Dilediginiz aciklamayi yaziniz" },
{ dates: [new Date(2014, 10, 10)], title: "Cupra Sezonu Basliyor", section: 3 }
];
var sections = [
{ dates: [new Date(2013, 11, 15), new Date(2014, 7, 25)], title: "Tekir Sezonu", section: 0, attrs: { fill: "#99FF33" } },
{ dates: [new Date(2014, 7, 28), new Date(2014, 10, 23)], title: "Uskumru Sezonu", section: 1, attrs: { fill: "#d4e3fd" } },
{ dates: [new Date(2014, 5, 29), new Date(2014, 7, 27)], title: "Hamsi Sezonu", section: 2, attrs: { fill: "#9999CC" } },
{ dates: [new Date(2014, 10, 10), new Date(2014, 12, 10)], title: "Cupra Sezonu", section: 3, attrs: { fill: "#eaf0fa" } }
];
var timeAy = new Chronoline(document.getElementById("target1"), events,
{
animated: true,
tooltips: true,
defaultStartDate: new Date(2013, 11, 18),
sections: sections,
sectionLabelAttrs: { 'fill': '#000099', 'font-weight': 'italic' },
markToday: 'labelBox',
draggable: true
});
$('#to-today').click(function () { timeAy.goToToday(); });
});
</script>
</body>
</html>
</code></pre>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
Bu haftalık anlatacaklarım bu kadar, bir sonraki yazımda sizlere <b>Raphael.js</b> kütüphanesinden bahsedeceğim. Şimdilik görüşmek üzere, hoşçakalın...<br />
<br />
<div>
<div>
<br /></div>
<span style="font-size: large;">KAYNAKLAR</span><br />
<br />
<br />
<ol>
<li><a href="http://stoicloofah.github.io/chronoline.js/">http://stoicloofah.github.io/chronoline.js/</a></li>
<li><a href="http://www.365-jours.fr/regarder/episode/248">http://www.365-jours.fr/regarder/episode/248</a></li>
<li><a href="http://www.jqueryrain.com/2012/06/chronoline-js-a-javascript-library-for-displaying-timeline-of-events/">http://www.jqueryrain.com/2012/06/chronoline-js-a-javascript-library-for-displaying-timeline-of-events/</a></li>
<li><a href="https://github.com/StoicLoofah/chronoline.js/blob/master/README.md">https://github.com/StoicLoofah/chronoline.js/blob/master/README.md</a></li>
</ol>
<br />
<br />
<br />
<br /></div>
</div>
</div>
Nil Buşra Koçerhttp://www.blogger.com/profile/07084098285875162702noreply@blogger.com0tag:blogger.com,1999:blog-4511869999190707921.post-91322390493755876962013-11-03T00:54:00.000-07:002013-11-03T00:54:07.280-07:00<span style="color: #0b5394; font-size: x-large; text-align: justify;">Hammer.js</span><span style="font-size: x-large; text-align: justify;"> </span><span style="color: #0b5394; font-size: x-large; text-align: justify;">Kütüphanesi</span><br />
<div style="text-align: justify;">
<span style="font-size: x-large;"><span style="color: #0b5394;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="text-align: start;">Herkese merhabalar.</span><br />
<div style="text-align: start;">
<br /></div>
<div>
Bir hafta aradan sonra sizlerle tekrardan beraberiz. Bu hafta sizlere<b> hammer.js</b> isimli JavaScript kütüphanesinden bahsetmek istiyorum. İlk yazımda, bu kütüphanenin genel özelliklerinden ve hangi amaçla kullanıldığından sizlere bahsetmiştim. Bana göre bu kütüphane JavaScript' in kullanımı en tatlı olan kütüphanelerinden biridir. Tatlıdan kastım şöyle ki; kodlamadan sonra ekranda sürükle bırak, çoklu dokunmatiklik, yakınlaştırma, uzaklaştırma, döndürme, kaydırma gibi özellikleri test etmek oldukça zevkli oluyor. Bu özellikleri dokunmatik cihazların yanında masaüstü bilgisayarımda deneyebilmek de ayrı bir güzel. Yaptığım örnekleri ve kodlarını aşağıda sizlerle paylaşacağım. Sizin de örnekleri denerken hem eğlenip hem öğreneceğinize eminim.<br />
<br />
Örneklerimde, tasarım dilinde en çok kullanılan bir framework uygulaması olan <a href="http://getbootstrap.com/" target="_blank">Bootstrap'ı</a> kullanıyorum. Kullanımı oldukça kolay olan bu araç kitini kullanmanızı sizlere de öneririm. Örneklerimi sizlerle paylaşmadan önce bu kütüphanenin içerdiği önemli fonksiyonlara değinmek istiyorum. Ayrıca şunu da eklemek istiyorum; bu kütüphanenin ne jQuery ne de başka bir kütüphane eklentisine ihtiyacı yoktur. Ama tercih elbette size ait, araştırma yaparsanız jQuery eklentisi ile yapılmış olan birçok <b>hammer.js</b> kütüphanesi örneği ile karşılaşabilirsiniz.<br />
<br />
<br />
<b><span style="color: #0b5394; font-size: large;">Fonksiyonlar</span></b><br />
<b><span style="color: #0b5394;"><br /></span></b>
<b><span style="color: #0b5394;"> hammertime:</span></b> Üye (instance) değişkendir.<br />
<br />
<span style="color: #0b5394; font-weight: bold;">1) hammertime.on(gesture,handler):</span> Bu metot sayesinde,<b> </b>hareketi dinleyecek olan <b>event listener</b> eklenir. Bu metodun içerisine boşluk ekleyerek birden fazla hareket (gesture) koyabilirsiniz.<br />
<br />
<br />
<div>
<span style="color: #0b5394;"><b>2</b></span><span style="color: #0b5394;"><b>) hammertime.off(gesture, handler) : </b></span> Bu fonksiyon sayesinde, fonksiyonun parametresindeki hareket (gesture) için handler kaldırılır.<br />
<br />
<span style="color: #0b5394;"><b>3) </b></span><b style="color: #0b5394;">hammertime.enable(toggle)</b><span style="color: #0b5394;"><b> :</b></span> Bu fonksiyonu bir örnek vererek açıklamak istiyorum. Ekrandaki topu, sürükle bırak özelliğiyle sürükleyip bırakabilme özelliğini bu fonksiyonla topa kazandırıp yine bu fonksiyon ile topun bu özelliğini etkisiz yapabilirsiniz.<br />
<br />
<span style="font-size: large;"><b style="color: #0b5394;">Hammer.js Kullanımı</b></span><br />
<b style="color: #0b5394;"><br /></b>
<b style="color: #0b5394;"> </b>Gerekli js ve css dosyalarını<a href="http://www.javascriptoo.com/Hammer-js" target="_blank"> bu siteden</a> indirebilirsiniz. Aşağıda basit bir JavaScript kod örneğini inceleyeceğiz.<br />
<br /></div>
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code>// hammer.js kütüphanesine hangi elementin izleneceği id'ye göre söylenmiş olur..
var hammer = new Hammer(document.getElementById("elementID"));
// elemente çift dokunuş yapıldığı zaman ne yapılacağı belirlenir.
hammer.ondoubletap = function (event) {
alert('Dokundunuz!');
};</code>
</pre>
</div>
<br />
Şimdi de sizlere ASP.NET ortamında yapmış olduğum bir örneği göstermek istiyorum. Gerekli css ve js dosyalarını Solution Explorer'a ekledikten sonra bir resime; döndürme, çoklu dokunmatik hareket ile yakınlaştırma ve uzaklaştırma özellikleri ekledim. Aşağıdaki resimde Solution Explorer' a eklemiş olduğum dosyalar görünmektedir.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPaHj6gThFR2vM9vplqZePe4Rl0TUzDCuHusqJ5qBt_d3_nsklsSivYkTQSI7i5stLeMpxSYS-_BCfywTzsZ4jQ4qn9wFsfIqi-dFocqiCV8oTSooNZW9_bUbt0oFFTmK9XMG_q16WumoV/s1600/SE.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPaHj6gThFR2vM9vplqZePe4Rl0TUzDCuHusqJ5qBt_d3_nsklsSivYkTQSI7i5stLeMpxSYS-_BCfywTzsZ4jQ4qn9wFsfIqi-dFocqiCV8oTSooNZW9_bUbt0oFFTmK9XMG_q16WumoV/s400/SE.png" width="175" /></a>Aşağıda da yukarıda bahsetmiş olduğum örneğin kodları bulunmaktadır</div>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Hammer.js Pinch Zoom Ornek</title>
<link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.2.2/css/bootstrap-combined.min.css" rel="stylesheet">
<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1, maximum-scale=1">
<style>
body {
padding: 0;
overflow: hidden;
}
#pinchzoom {
-webkit-transform: translate3d(0,0,0);
overflow: hidden;
}
</style>
</head>
<body>
<div id="pinchzoom">
<div>
<img id="rect" src="assets/img/bebek.jpg" width="2950" height="4500" ondragstart="return false" alt="" />
</div>
</div>
<script src="../dist/hammer.js"></script>
<script src="../plugins/hammer.fakemultitouch.js"></script>
<script src="../plugins/hammer.showtouches.js"></script>
<script>
if (!Hammer.HAS_TOUCHEVENTS && !Hammer.HAS_POINTEREVENTS) {
Hammer.plugins.showTouches();
}
</script>
<script>
if (!Hammer.HAS_TOUCHEVENTS && !Hammer.HAS_POINTEREVENTS) {
Hammer.plugins.fakeMultitouch();
}
var hammertime = Hammer(document.getElementById('pinchzoom'), { // koymuş olduğum resmin id'sini alarak özellikleri ekler..
transform_always_block: true,
transform_min_scale: 1,
drag_block_horizontal: true,
drag_block_vertical: true,
drag_min_distance: 0
});
var rect = document.getElementById('rect');
var posX = 0, posY = 0,
scale = 1, last_scale,
rotation = 1, last_rotation;
hammertime.on('touch drag transform', function (ev) {
switch (ev.type) {
case 'touch':
last_scale = scale;
last_rotation = rotation;
break;
case 'drag':
posX = ev.gesture.deltaX;
posY = ev.gesture.deltaY;
break;
case 'transform':
rotation = last_rotation + ev.gesture.rotation;
scale = Math.max(1, Math.min(last_scale * ev.gesture.scale, 10));
break;
}
/* transform */
var transform =
"translate3d(" + posX + "px," + posY + "px, 0) " +
"scale3d(" + scale + "," + scale + ", 0) " +
"rotate(" + rotation + "deg) ";
rect.style.transform = transform;
rect.style.oTransform = transform;
rect.style.msTransform = transform;
rect.style.mozTransform = transform;
rect.style.webkitTransform = transform;
});
</script>
<script src="assets/js/ga.js"></script>
</body>
</html>
</code></pre>
Aşağıda da kodların nasıl etki ettiğine dair birkaç ekran görüntüsü bulunmaktadır. Son olarak eklemek istiyorum; <span style="color: red;">SHIFT + MOUSE </span>sayesinde kodun özelliklerini web sayfasında görebiliriz.
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihyphenhyphenUsuoha1SZv2AwpENKL4uf4OAZFfxLmqG0z4zhrhlw1dncjKHqvCNr9n15nMCjwTp7Nt99luDSEMB47oRfXo5pJOlrCuaacHYmcjwez_dKnb-AkNPXKB-1kW2klvA6czesyp01bqjcGw/s1600/b1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="198" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihyphenhyphenUsuoha1SZv2AwpENKL4uf4OAZFfxLmqG0z4zhrhlw1dncjKHqvCNr9n15nMCjwTp7Nt99luDSEMB47oRfXo5pJOlrCuaacHYmcjwez_dKnb-AkNPXKB-1kW2klvA6czesyp01bqjcGw/s400/b1.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJ16ZmkfZFcE_yrvs2e_anGw5mrSdRYGDa1l-IJe6bYLOw07byJmogwRke2MJT5A2R70sbagg9uGR8i9udy1tSeLhsjbxLGjZqugvZQexasI5LZJvpEQ_qq_uFmJe9kwv2dQomP0HH-Vy2/s1600/b2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="195" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJ16ZmkfZFcE_yrvs2e_anGw5mrSdRYGDa1l-IJe6bYLOw07byJmogwRke2MJT5A2R70sbagg9uGR8i9udy1tSeLhsjbxLGjZqugvZQexasI5LZJvpEQ_qq_uFmJe9kwv2dQomP0HH-Vy2/s400/b2.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7CBlozWr9P6R6zQVkH_b7ntRCVxiQjz75RuhOtG7E_v4NKBStJmuon0sfzAuCmzk1PxWZopkzYLQ5T-hFfoz-kR4Ojza5TIEg_ouJLdFZfErsAUdOxszX9zXbi92hRainTXnTA290ezlM/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="195" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7CBlozWr9P6R6zQVkH_b7ntRCVxiQjz75RuhOtG7E_v4NKBStJmuon0sfzAuCmzk1PxWZopkzYLQ5T-hFfoz-kR4Ojza5TIEg_ouJLdFZfErsAUdOxszX9zXbi92hRainTXnTA290ezlM/s400/Untitled.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Bu haftalık anlatacaklarım bu kadar, bir sonraki yazımda sizlere <b>Chronoline.js</b> kütüphanesinden bahsedeceğim.
Şimdilik görüşmek üzere, hoşçakalın...<br />
<br />
<br />
<b>KAYNAKLAR</b><br />
<br />
<ol>
<li><b><a href="http://www.javascriptoo.com/Hammer-js">http://www.javascriptoo.com/Hammer-js</a></b></li>
<li><a href="https://github.com/EightMedia/hammer.js/wiki/Instance-methods">https://github.com/EightMedia/hammer.js/wiki/Instance-methods</a></li>
<li><a href="http://remotesynthesis.com/post.cfm/add-gesture-support-to-your-web-application-via-hammer-js">http://remotesynthesis.com/post.cfm/add-gesture-support-to-your-web-application-via-hammer-js</a></li>
<li><a href="http://eightmedia.github.io/hammer.js/">http://eightmedia.github.io/hammer.js/</a></li>
<li><a href="http://www.appliness.com/multitouch-with-hammer-js/">http://www.appliness.com/multitouch-with-hammer-js/<div class="separator" style="clear: both; text-align: center;">
</div>
</a></li>
</ol>
<br />
<br /></div>
Nil Buşra Koçerhttp://www.blogger.com/profile/07084098285875162702noreply@blogger.com4tag:blogger.com,1999:blog-4511869999190707921.post-51838338773112699072013-10-26T16:10:00.001-07:002013-10-26T16:10:37.093-07:00Intro.js Kütüphanesi<span style="color: #0b5394; font-size: x-large; text-align: justify;"> Intro.js</span><span style="font-size: x-large; text-align: justify;"> </span><span style="color: #0b5394; font-size: x-large; text-align: justify;">Kütüphanesi</span><br />
<div style="text-align: justify;">
<span style="font-size: x-large;"><span style="color: #0b5394;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="text-align: start;">Herkese merhabalar.</span><br />
<div style="text-align: start;">
<br /></div>
<div>
İki hafta aradan sonra sizlerle tekrardan beraberiz. Bu hafta sizlere<b> intro.js</b> isimli JavaScript kütüphanesinden bahsetmek istiyorum. Önceki yazımda, bu kütüphanenin genel özelliklerinden ve hangi amaçla kullanıldığından bahsetmiştim. Örneğin, bir hastane bilişim sistemi yapmış olalım ve bu bilişim sistemi o kadar kompleks olmuş olsun ki kullanıcı olan hasta, sitenin hangi kısmından tahlil sonucuna ulaşacağını bilememiş olsun. İşte kullanıcıyı bu zorluktan kurtaracak olan <b>intro.js</b> kütüphanesidir. Bir projenin en önemli özelliklerinden biri kullanıcının projeyi rahatlıkla kullanabilmesidir. Kullanıcıya bu kütüphane sayesinde, adım adım izleyeceği bir kullanım kılavuzu oluşturarak proje tanıtımımızı yapmak mümkün. Projemize bu kütüphaneyi nasıl ekleyeceğimize ve örneğimize geçmeden önce, sizlere bu kütüphanenin içerdiği bazı fonksiyonlardan bahsetmek istiyorum.<br />
<br />
<b><span style="color: #0b5394;">Fonksiyonlar</span></b><br />
<br />
<span style="color: #0b5394; font-weight: bold;">1) introJs(targetElm)] :</span> <b> </b>IntroJs objesi üretir ve döndürdüğü değer, üretmiş olduğu objedir.<br />
<span style="color: #0b5394;"><br /></span>
<span style="color: #0b5394;">targetElm:</span> Kılavuzda adım üretilecek element için tanımlı olması gereklidir. Genellikle dizgi olarak seçilir.<br />
<br />
<div>
<span style="color: #0b5394;"><b>2</b></span><span style="color: #0b5394;"><b>) introJs.start() :</b></span> Tanımlı olan element veya elementler için <b>adım adım</b> ilerleme özelliğini başlatır. Döndürdüğü değer introJs objesidir.<br />
<br />
<span style="color: #0b5394;"><b>3) introJs.goToStep(step) :</b></span> Kılavuzdaki istenen adıma gider. Aldığı parametre olan <b>step</b>,<b> </b>istenen adımdır. Döndürdüğü değer introJs objesidir.<br />
<br />
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code>introJs().goToStep(3).start(); //adım 3'ten başlatır</code>
</pre>
<br />
<b><span style="color: #0b5394;">4</span></b><b style="color: #0b5394;">) introJs.exit() : </b>Kılavuzdan çıkılmasını sağlar. Döndürdüğü değer, introJs objesidir.<br />
<br />
<br />
<b><span style="color: #0b5394;">5</span></b><b style="color: #0b5394;">) introJs.setOption(option,value) :</b> Bu fonksiyon, intro.js objesine tek bir seçenek ekler. Döndürdüğü değer introJs objesidir. Örneğin, kılavuzda karşımıza çıkan tooltip'in sol veya sağ taraftan gelip gelmeyeceğini belirleyebiliriz. Aşağıdaki örnekte tooltip'in sol taraftan gelmesi seçeneğini belirlemiş oluyoruz.<br />
<br />
<ul>
<li><b>option:</b> Seçeneğin dizgi tipindeki anahtarıdır.</li>
<li><b>value: </b>Seçeneğin dizgi ya da sayı olarak değeridir.</li>
</ul>
<br />
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code>introJs().setOption("tooltipPosition", "left");</code>
</pre>
<br />
<span style="color: #0b5394;"><b> 6</b></span><span style="color: #0b5394;"><b>) </b></span><b style="color: #0b5394;">introJs.setOptions(options) :</b><b> </b>Bu fonksiyon, intro.js objesine birden fazla seçenek eklememizi sağlar.<br />
<br />
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code>introJs().setOptions({ skipLabel: "Exit", tooltipPosition: "left" });</code>
</pre>
<br />
Kütüphanemizin içerdiği fonksiyonları da gördükten sonra bu kütüphaneyi nasıl kullanacağımıza bakalım.<br />
<br />
<b><span style="color: #0b5394;">Intro.js Kütüphanesinin Kullanımı</span></b><br />
<b><span style="color: #0b5394; font-size: large;"><br /></span></b>
<br />
<div>
Aşağıdaki 3 adımdan sonra artık bu kütüphaneyi kullanmaya hazırsınız.</div>
<div>
<br /></div>
<div>
1) Gerekli js ve css dosyalarını <a href="https://github.com/usablica/intro.js/tags" target="_blank">bu siteden</a> indirebilirsiniz. Dosyaları indirdikten sonra, <b>intro.js</b> ve <b>introjs.css</b> dosyalarını sayfanıza ekleyin. Sağa ve sola hareket desteği için <b>introjs-rtl.min.css</b>'i kullanın.</div>
<div>
<br /></div>
<div>
2) HTML elementlerinize <b><span style="color: red;">data-step</span></b> ve <b><span style="color: red;">data- intro</span></b>' yu ekleyin.</div>
<div>
<br /></div>
<div>
3) <b>introJs().start()</b> fonksiyonunu çağırarak kılavuzun adım adım başlamasını sağlayabilirsiniz.</div>
<div>
<br /></div>
<div>
Aşağıda sizin için ASP.NET ortamında hazırlamış olduğum 4 adımdan oluşan bir kılavuz taslağı bulunmaktadır.</div>
<div>
<br /></div>
<div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZATGcytPGkOJfWv3-y0whLlxw1ObhaE8HAfpb1An9DUEl2bOx0B6Mm5paY10KkfkfQyZXszDlvV8FFLSP4YfubkZadYpPzt0_spQCRWo89QDGKtuMpdTZiid_kz4VGD_L-ZXkuLZS3bgP/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="248" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZATGcytPGkOJfWv3-y0whLlxw1ObhaE8HAfpb1An9DUEl2bOx0B6Mm5paY10KkfkfQyZXszDlvV8FFLSP4YfubkZadYpPzt0_spQCRWo89QDGKtuMpdTZiid_kz4VGD_L-ZXkuLZS3bgP/s640/1.png" width="640" /></a></div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbhB5SQDoHQK_4y1OXpvDVESKni9Eu7E6-f69RTqRDCgoQT_LXHRGUj_Fz7Sy4o7Zd0OT-V7nFU0bGz7HEVoEGqsHpug6Fu5xMXlvDnVm17dBNZqhYQnpOQ8u-mTie-SxXeLwzS6QhArAa/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="248" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbhB5SQDoHQK_4y1OXpvDVESKni9Eu7E6-f69RTqRDCgoQT_LXHRGUj_Fz7Sy4o7Zd0OT-V7nFU0bGz7HEVoEGqsHpug6Fu5xMXlvDnVm17dBNZqhYQnpOQ8u-mTie-SxXeLwzS6QhArAa/s640/2.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpquPPpAVX7EA-4rWNDbHFKQAhyPx1JOJMLh3DO7HD_3ypD5XjsSDoB4nuuKZYv8lBm-BGJ2itrqUqinm_aZuCgR84PMZquGB2h0W7lmHyjNwXhSzsyGpFbbSCJQFyGFKg1qlgGHCUYzEC/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="232" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpquPPpAVX7EA-4rWNDbHFKQAhyPx1JOJMLh3DO7HD_3ypD5XjsSDoB4nuuKZYv8lBm-BGJ2itrqUqinm_aZuCgR84PMZquGB2h0W7lmHyjNwXhSzsyGpFbbSCJQFyGFKg1qlgGHCUYzEC/s640/3.png" width="640" /></a></div>
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqWX9gUj-FStrKMFNLzpM02n8AU5Nj6qaHbO0ARdNhybiIvmle7UisK9AYnxnjTnnhifdb4EhK26uH1WcKRcvQ0CFDc-h_7satDj2YjLQXeCUy8U-aBhNxRhWSLF0C5X9RNNgMqwMyB0Uk/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="258" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqWX9gUj-FStrKMFNLzpM02n8AU5Nj6qaHbO0ARdNhybiIvmle7UisK9AYnxnjTnnhifdb4EhK26uH1WcKRcvQ0CFDc-h_7satDj2YjLQXeCUy8U-aBhNxRhWSLF0C5X9RNNgMqwMyB0Uk/s640/4.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhohO5jDlqGSC_rdwEq89Xv5ysewYHWsl1kY6fnM4jIphyphenhyphen0EY4xedHyitUz-KJN7C32qE8Sy8w-J7MRLdNlyqDXeoqDlcE_qC5kQsS6O9YRKBoOIdV9ldoIZworexTeOZfCSqyk6Jd9bKpl/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="258" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhohO5jDlqGSC_rdwEq89Xv5ysewYHWsl1kY6fnM4jIphyphenhyphen0EY4xedHyitUz-KJN7C32qE8Sy8w-J7MRLdNlyqDXeoqDlcE_qC5kQsS6O9YRKBoOIdV9ldoIZworexTeOZfCSqyk6Jd9bKpl/s640/5.png" width="640" /></a></div>
<br />
Aşağıda kütüphaneyi indirdikten sonra projemize eklenen dosyalar bulunmaktadır.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWoUe_1ThOMK6FV_hxap_IWyO0zUesbLWdAChZgPjbE_u8_OsmEjxnJpK4doMW_IrLdEUCqlteicmgZSZw3CP0EQAcr8KA4DBg_eGYimZCaGYlWghnUQAZNULM-JU6lx1nrUrrYU5q9Qf4/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWoUe_1ThOMK6FV_hxap_IWyO0zUesbLWdAChZgPjbE_u8_OsmEjxnJpK4doMW_IrLdEUCqlteicmgZSZw3CP0EQAcr8KA4DBg_eGYimZCaGYlWghnUQAZNULM-JU6lx1nrUrrYU5q9Qf4/s320/6.png" width="164" /></a></div>
<br />
Yukarıda vermiş olduğum projenin kodları:<br />
<br />
<pre style="background-color: #f0f0f0; background-image: url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_S8igBQWXCFaxRl5xcR6vxglASO-AYnvDHnyzP65tFNRMD7HhJ-0W5PAS6Xjm0idZZrJ2Lst6yMU9jTUNJuUhuiH1PsWHETYL_sqQc0iNzchQ9P-nyt5DepWQSodaChyphenhyphenQxXhDP37aSRX/s320/codebg.gif); border: 1px dashed rgb(204, 204, 204); font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 450.828125px;"><code style="word-wrap: normal;"> <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Bootstrap -->
<link href="css/bootstrap.min.css" rel="stylesheet" media="screen">
<title>Intro.js Örneği</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- styles -->
<link href="../assets/css/bootstrap.min.css" rel="stylesheet">
<link href="../assets/css/demo.css" rel="stylesheet">
<!-- Add IntroJs styles -->
<link href="../../introjs.css" rel="stylesheet">
<link href="../assets/css/bootstrap-responsive.min.css" rel="stylesheet">
</head>
<body>
<div class="container-narrow">
<div class="masthead">
<ul class="class="jumbotron" data-step="4" data-intro="Facebook girişi">
<li><a href="https://www.facebook.com/">Facebook</a></li>
</ul>
<h3 class="muted">Intro.js Kütüphanesi</h3>
</div>
<hr>
<div class="jumbotron">
<h1 data-step="1" data-intro="Bu bir tooltip!">Web Sitesinin Özelliklerini Intro.js ile Adım Adım Anlatmak</h1>
<a class="btn btn-large btn-info" href="javascript:void(0);" onclick="javascript:introJs().start();">Nasıl Yapılıyor?</a>
</div>
<hr>
<div class="row-fluid marketing">
<div class="span4" data-step="2" data-intro="İkinci adım:)" data-position='right'>
<h4>Birinci kısım</h4>
<p>Dilediğiniz açıklamayı yazın.</p>
</div>
<div class="span4" data-step="3" data-intro="Üçüncü adım:)" data-position='left'>
<h4>İkinci kısım</h4>
<p>Dilediğiniz açıklamayı yazın.</p>
<h4>Üçüncü kısım</h4>
<p>Dilediğiniz açıklamayı yazın.</p>
</div>
</div>
<hr>
</div>
<script type="text/javascript" src="../../intro.js"></script>
</body>
</html> </code></pre>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
Bu haftalık anlatacaklarım bu kadar, bir sonraki yazımda sizlere<b> Hammer.js</b> kütüphanesinden bahsedeceğim.<br />
<br />
Şimdilik görüşmek üzere, hoşçakalın...<br />
<br />
<br />
<span style="font-size: large;">KAYNAKLAR</span><br />
<br />
<br />
<ol>
<li><a href="https://github.com/usablica/intro.js" target="_blank">https://github.com/usablica/intro.js</a></li>
<li><a href="http://www.hongkiat.com/blog/introjs-step-by-step-guide-tutorial/" target="_blank">http://www.hongkiat.com/blog/introjs-step-by-step-guide-tutorial/</a></li>
<li><a href="http://thechangelog.com/intro-js-makes-implementing-step-by-step-user-guides-too-easy/" target="_blank">http://thechangelog.com/intro-js-makes-implementing-step-by-step-user-guides-too-easy/</a></li>
<li><a href="http://www.jimsider.com/enhancing-user-experience-intro-js/" target="_blank">http://www.jimsider.com/enhancing-user-experience-intro-js/</a></li>
</ol>
<br />
<br />
<br />
<br /></div>
</div>
<br /></div>
Nil Buşra Koçerhttp://www.blogger.com/profile/07084098285875162702noreply@blogger.com2tag:blogger.com,1999:blog-4511869999190707921.post-4105535000307237292013-10-13T11:05:00.000-07:002013-10-13T11:05:47.852-07:00 Herkese merhabalar.<br />
<br />
<div style="text-align: justify;">
Bugünlerde JavaScript kütüphanelerine merak sardım. Öğrenmesi ve uygulaması benim için oldukça zevkli olan bilgilerimi sizlerle paylaşmak adına bu yazı dizisine başlayacağım. Yazılarımda sizleri olabildiğince sıkmadan, öğrenmiş olduğum dokuz farklı kütüphaneden bahsedeceğim. Anlatacağım kütüphanelerin neler olduğundan bahsetmeden önce, JavaScript kütüphanesinin tam olarak ne olduğundan ve kullanımının bize kazandıracağı noktalardan bahsetmek istiyorum.</div>
<br />
<br />
<div style="text-align: justify;">
JavaScript kütüphanesi, JavaScript tabanlı web uygulamalarının gelişimini hızlandırmak adına tasarlanmış olan JavaScript kontrolleridir. İleri JavaScript programlamada karşılaşılan zorlukların ve bu zorluklardan dolayı yaşanılan zaman kaybının önlenmesindeki çözüm, JavaScript kütüphaneleridir. İhtiyacımız olanı uğraşlı bir şekilde yazmak yerine, ihtiyacımızın belki de çok daha fazlasını karşılayacak olan kütüphaneleri kullanmak, zaman kaybını ve programcı hatasını önleyecektir. Her hafta detaylı bir şekilde açıklayacağım kütüphanelerden aşağıda kısaca bahsedeceğim. Örneklerimi olabildiğince ASP.NET ortamında uygulayarak sizlerle paylaşacağım.<br />
<b><span style="font-size: large;"><span style="color: #0b5394;"><br /></span></span></b>
<span style="font-size: x-large;"><span style="color: #0b5394;">1. Intro.js</span> <span style="color: #0b5394;">Kütüphanesi</span></span><br />
<span style="font-size: x-large;"><span style="color: #0b5394;"><br /></span></span></div>
<div style="text-align: justify;">
Bu kütüphanenin temel kullanım amacı adım adım yol gösterim özelliğidir. Web sitelerinizin, tanıtımını yapmak istediğiniz herhangi bir projenizin, bu kütüphane sayesinde anlatım kılavuzunu rahatlıkla hazırlamanız mümkün. Bu durumu kafanızda canlandırmanız açısından bir örnek ile açıklamak istiyorum. Diyelim ki yemek siparişi vereceğim bir siteden yemek sipariş etmek istiyorum ; fakat sitede o kadar çok seçenek var ki hangi butona basmam gerektiğini bilmiyorum. Sitenin yardım kısmına gelerek <b>Intro.js</b> kütüphanemiz sayesinde adım adım oluşturulmuş kullanım kılavuzunu takip ederek, hangi butonlara basmam gerektiğini öğrenerek sistemi rahatlıkla kullanabilirim. Genel hatlarıyla bu kütüphanenin özelliklerini sıralayacak olursak:<br />
<br />
<ul>
<li>Kullanımı oldukça kolay; JavaScript ve CSS dosyalarımızı ekledikten sonra, kodumuza <span style="color: red;">data-step </span>ve <span style="color: red;">data-intro </span> ekliyoruz.</li>
<li>Ücretsiz ve açık kaynaklıdır.</li>
<li>Hızlıdır.</li>
<li>Boyutu küçüktür şöyle ki; 4 KB JavaScript ve 2.5 KB CSS (gzip) içermektedir.</li>
<li>Klavye ve mouse navigasyonu vardır.</li>
<li>Tarayıcı uyumluluğu mevcuttur. En çok kullanılan; Firefox, Chrome ve IE8' in son sürümlerinde çalışmaktadır.</li>
</ul>
<div>
<span style="color: #0b5394; font-size: x-large;">2. Hammer.js</span><span style="font-size: x-large;"> </span><span style="color: #0b5394; font-size: x-large;">Kütüphanesi</span><br />
<span style="color: #0b5394; font-size: x-large;"><br /></span></div>
<div>
<span style="color: #0b5394;"> </span>Hammer kütüphanesi, küçük ve kompleks olmamakla birlikte oldukça işe yarar bir kütüphanedir. Dokunmatiklik özelliğini sağlar ve çoklu dokunmatiklik (multi-touch) özelliğiyle öne çıkmış bir kütüphanedir.<br />
<br /></div>
<div>
Sağladığı hareket özelliklerine gelecek olursak:</div>
<div>
<ul>
<li>Kaydırma (geçişler)</li>
<li>Döndürme</li>
<li>Sürükleme</li>
<li>Baş parmağınız ve işaret parmağınızı birlikte kullanarak yakınlaştırmayı sağlamak (pinch) </li>
<li>Ekrana vuruş hareketi (tap), çift vuruş hareketi (double-tap)</li>
</ul>
<div>
Bu kütüphane her cihazda maalesef ki çalışmıyor. Kullanılabildiği dokunmatik cihazlara gelecek olursak:</div>
</div>
<div>
<ul>
<li>Android </li>
<li>BlackBerry</li>
<li style="text-align: left;"><span style="font-family: arial, sans-serif;"><span style="line-height: 16px;">iOS</span></span></li>
<li>Windows</li>
<li>Masaüstü tarayıcılarında ; eğer IE' ın eski sürümlerini kullanıyorsanız, jQuery eklentisinin olması gerektiğini unutmamamız gerekiyor. Masaüstü bilgisayarınızda size önerilen tarayıcı Safari' dir. Aksi takdirde çalışmama durumu ile karşılaşabilirsiniz.</li>
</ul>
<div>
Instance metotları (statik olmayan üye metot) "hammertime" instance (üye) değişkenimiz olmak üzere;</div>
</div>
<div>
<ul>
<li><b>hammertime. on (gesture, handler)</b></li>
<li><b><b>hammertime. off (gesture, handler)</b></b></li>
<li><b><b>hammertime. enable (toggle)</b></b></li>
<li><b><b>hammertime. trigger (gesture, eventData)</b></b></li>
</ul>
<div>
bu metotların ne işe yaradığını, bu konuya özel olan yazımda detaylı bir şekilde sizlere anlatacağım.</div>
</div>
<div>
Multi-touch (çoklu dokunmatiklik) özelliğinin <b>hammer.js </b>kütüphanesi sayesinde masaüstü bilgisayarımızda nasıl gerçekleştiğini, bu <a href="http://creativedroplets.com/samples/multitouch/" target="_blank">siteden</a> görebilirsiniz.<br />
<br />
<span style="font-size: x-large;"><span style="color: #0b5394;">3. Chronoline.js</span> <span style="color: #0b5394;">Kütüphanesi</span></span></div>
<div>
<br /></div>
<div>
Planladığınız işlerinizi tarihe göre yatay bir zaman çubuğu üzerinde sıralamak istediğinizde size gelecek olan en iyi çözüm <b>chronoline.js</b> JavaScript kütüphanesidir. Bu kütüphanenin kullanılabilmesi için <b>raphael.js</b> JavaScript kütüphanesine ihtiyacı vardır. Bu kütüphane de sizlere anlatacağım kütüphanelerden biri, bu konuya sonra değineceğim. İsterseniz ek olarak jQuery de kullanarak daha hoş tooltipler kullabilmek mümkün.<br />
<br />
<b>Tooltip: </b>Tooltip, bizlere daha farklı ve göze hoş gelen bilgilendirme çubukları oluşturmamızı sağlar ve kullanıcıların gözüne daha hoş gelen açıklama kısımları oluşturmamıza yardımcı olur.<br />
<br />
Zaman çubuğunuza istediğiniz zaman özelliğini katabilirsiniz; dilediğiniz kadar gün sayısı olarak , hafta olarak, ay olarak, yıl olarak...<br />
<br />
Bu kütüphane modern tarayacılarda çalışmaktadır, bu tarayıcılar:<br />
<br />
<ul>
<li>Internet Explorer 8 + (tooltip kullanılmamış ise)</li>
<li>Firefox 12 +</li>
<li>Chrome 18 +</li>
</ul>
<br />
<div style="text-align: start;">
<span style="font-family: Times, Times New Roman, serif;"><span style="font-size: 14px; line-height: 25px;">Aşağıdaki örnek, çeyrek yıla göre düzenlenmiş bir zaman çubuğu çizelgesidir. Bu kütüphanemizden detaylı bir şekilde önümüzdeki haftalarda bahsedeceğim.</span></span></div>
<span style="background-color: white; font-size: 14px; line-height: 25px; text-align: start;"><span style="font-family: Times, Times New Roman, serif;"><br /></span></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhttUzYj-ftjC3AROit4Me6FYJold5XBgfFfSvhs1SkLH44m7t1vnYeN2xpKErltdDim396BggWa3HmhrqmFBQCU5LEX8BvFzVlU0-eqnedMq5o3Gi6L-27DkgQoC9jPtiARcnpNVh1oJrB/s1600/chronoline-js-timeline-plugin.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="193" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhttUzYj-ftjC3AROit4Me6FYJold5XBgfFfSvhs1SkLH44m7t1vnYeN2xpKErltdDim396BggWa3HmhrqmFBQCU5LEX8BvFzVlU0-eqnedMq5o3Gi6L-27DkgQoC9jPtiARcnpNVh1oJrB/s640/chronoline-js-timeline-plugin.jpg" width="640" /></a></div>
<span style="background-color: white; font-size: 14px; line-height: 25px; text-align: start;"><span style="font-family: Times, Times New Roman, serif;"><br /></span></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<span style="color: #0b5394; font-size: x-large;">4. Raphael.js</span><span style="font-size: x-large;"> </span><span style="color: #0b5394; font-size: x-large;">Kütüphanesi</span><br />
<br /></div>
</div>
<div style="text-align: justify;">
<span style="font-family: Times, 'Times New Roman', serif; font-size: 14px; line-height: 25px;">Raphael.js, SVG ( Scalable Vector Graphics) / VML (Vector Markup Language)' in temelinde kullanılan kütüphanedir. Sayfamızda vektörel grafiklerin çizilmesini sağlamakla yetinmeyip, ortaya çıkan çizgi, çember, dikdörtgen, kare gibi şekillerin rengi değiştirilebilinip, bu şekillere animasyon eklenebiliyor. Öncelikle kütüphanenin birkaç özelliğinden bahsetmek istiyorum. Bu kütüphanemiz küçük boyutlu, kullanımı oldukça kolay ve MIT lisansı altındadır. Tüm web tarayıcılarında çalışmaktadır. Aşağıda genellikle kullanıldığı tarayıcıları örnek olarak gösterebilirim:</span></div>
<br />
<ul>
<li><span style="font-family: Times, Times New Roman, serif;"><span style="font-size: 14px; line-height: 25px;">Chrome 5.0 +</span></span></li>
<li><span style="font-family: Times, Times New Roman, serif;"><span style="font-size: 14px; line-height: 25px;">Firefox 3.0 +</span></span></li>
<li><span style="font-family: Times, Times New Roman, serif;"><span style="font-size: 14px; line-height: 25px;">Safari 3.0 +</span></span></li>
<li><span style="font-family: Times, Times New Roman, serif;"><span style="font-size: 14px; line-height: 25px;">Opera 9.5 +</span></span></li>
<li><span style="font-family: Times, Times New Roman, serif;"><span style="font-size: 14px; line-height: 25px;">Internet Explorer 6.0 +</span></span></li>
</ul>
<div>
<span style="font-family: Times, Times New Roman, serif;"><span style="font-size: 14px; line-height: 25px;">Raphael.js ile çizilmiş şekillere verilecek birkaç özellikten bahsedelim:.</span></span></div>
<div>
<ul>
<li><span style="font-family: Times, Times New Roman, serif;"><span style="font-size: 14px; line-height: 25px;"> İstenen dereceye göre elementin döndürülmesi sağlanır.</span></span></li>
<li><span style="font-family: Times, Times New Roman, serif;"><span style="font-size: 14px; line-height: 25px;"> Koordinatlara göre canvasın içindeki herhangi istenen bir bölgeye elementin taşınması sağlanır.</span></span></li>
<li><span style="font-family: Times, Times New Roman, serif;"><span style="font-size: 14px; line-height: 25px;"> Canvasın içerisine resim ekleyebilmemiz sağlanır.</span></span></li>
<li><span style="font-family: Times, Times New Roman, serif;"><span style="font-size: 14px; line-height: 25px;"> Elips şekli oluşturmamız sağlanır.</span></span></li>
<li><span style="font-family: Times, Times New Roman, serif;"><span style="font-size: 14px; line-height: 25px;">İstediğimiz sayı kadar istediğimiz elementi ölçeklendirebiliriz.</span></span></li>
<li><span style="font-family: Times, Times New Roman, serif;"><span style="font-size: 14px; line-height: 25px;">Elemente sürükle bırak özelliği ekleyebiliriz. Örnek görmeniz açısından bu <span style="color: #3d85c6;"><a href="http://wesleytodd.com/2013/4/drag-n-drop-in-raphael-js.html" target="_blank">siteyi</a></span> ziyaret edebilirsiniz. Bu konuyu anlatacağım hafta, detaylı bir şekilde örneklerle birlikte açıklayacağım.</span></span></li>
</ul>
<div>
<span style="font-family: Times, Times New Roman, serif;"><span style="font-size: 14px; line-height: 25px;">Raphael.js' de kullanılan birkaç fonksiyon örneği verelim:</span></span></div>
</div>
<div style="text-align: justify;">
<ul>
<li><span style="font-family: Times, Times New Roman, serif;"><span style="font-size: 14px; line-height: 25px;"><b>Element.animate() : </b>İstenen elemente animasyon ekler.</span></span></li>
<li><span style="font-family: Times, Times New Roman, serif;"><span style="font-size: 14px; line-height: 25px;"><b>Raphael(): </b>Bu kütüphanede tüm şekiller kütüphanenin paperına yazılır. Paperı oluşturabilmemiz için bu fonksiyona ihtiyacımız vardır.</span></span></li>
</ul>
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><pre class="code prettyprint" style="background-color: #f1f2ed; border-bottom-left-radius: 1px; border-bottom-right-radius: 1px; border-top-left-radius: 1px; border-top-right-radius: 1px; border: 1px solid rgb(215, 215, 215); color: #596874; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; font-size: 14px; line-height: 21px; margin: 0.8em auto 10px; max-height: 600px; overflow: auto; padding: 5px; white-space: pre-wrap; width: auto; word-wrap: break-word;"><span class="pln" style="color: #3e586a;">container </span><span class="pun" style="color: #1bb172;">=</span><span class="pln" style="color: #3e586a;"> document</span><span class="pun" style="color: #1bb172;">.</span><span class="pln" style="color: #3e586a;">getElementById</span><span class="pun" style="color: #1bb172;">(</span><span class="str" style="color: #623580;">'canvas_container'</span><span class="pun" style="color: #1bb172;">);</span><span class="pln" style="color: #3e586a;">
paper </span><span class="pun" style="color: #1bb172;">=</span><span class="pln" style="color: #3e586a;"> </span><span class="kwd" style="color: #00b1bf;">new</span><span class="pln" style="color: #3e586a;"> </span><span class="typ" style="color: #198dc4;">Raphael</span><span class="pun" style="color: #1bb172;">(</span><span class="pln" style="color: #3e586a;">container</span><span class="pun" style="color: #1bb172;">,</span><span class="pln" style="color: #3e586a;"> config</span><span class="pun" style="color: #1bb172;">.</span><span class="pln" style="color: #3e586a;">canvas</span><span class="pun" style="color: #1bb172;">.</span><span class="pln" style="color: #3e586a;">width</span><span class="pun" style="color: #1bb172;">,</span><span class="pln" style="color: #3e586a;"> config</span><span class="pun" style="color: #1bb172;">.</span><span class="pln" style="color: #3e586a;">canvas</span><span class="pun" style="color: #1bb172;">.</span><span class="pln" style="color: #3e586a;">height</span><span class="pun" style="color: #1bb172;">);</span></pre>
</pre>
<br />
<ul>
<li><b>Paper.rect()</b>: Oluşturulmuş sayfaya (yukarıdaki örnekteki page) istediğimiz yükseklik ve genişlikte dikdörtgen çizilmesini sağlar.</li>
<li><b>Paper.circle(): </b>Oluşturulmuş sayfaya (yukarıdaki örnekteki page) çember çizilmesini sağlar.</li>
</ul>
<div>
Bunun gibi bir sürü fonksiyon vardır raphael.js' de ; fakat diğerlerini detaylı bir şekilde bu konuyu anlatacağım hafta inceleyeceğiz.</div>
<div>
<span style="font-size: large;"><br /></span></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-size: x-large;"><span style="color: #0b5394;">5. Sylvester</span> <span style="color: #0b5394;">Kütüphanesi</span></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Sylvester kütüphanesi; vektör, matris ve geometri kütüphanesidir. İstediğimiz boyutta matris ve vektör modelleyebilmemizi sağlayan sınıflar içeriyor. MIT lisansı altındadır. Örneğin; iki vektörü çarpacaksınız ve bunun için bir sürü döngü yazmanız gerekecek, sizi bu zahmetten kurtaracak olan çözüm<b> sylvester</b> olacaktır.</div>
<div class="separator" style="clear: both; text-align: justify;">
Sylvester 0.1.0 versiyonundan itibaren;</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="color: #0b5394; font-size: large;">Vektör için:</span></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<b>Sınıf metotları: </b>create, i, j, k, Random, Zero.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<b> Instance (üye) metotları:</b> </div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
</div>
<ul>
<li>add</li>
<li>angleFrom</li>
<li>cross</li>
<li>dimensions</li>
<li>distanceFrom</li>
<li>dot, dup, e</li>
<li>indexOf</li>
<li>toDiagonalMatrix</li>
</ul>
<div>
bunlar gibi başka metotlar da var ; fakat detaylı bir şekilde anlatacağım zaman açıklayacağım.</div>
<br />
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both;">
<span style="color: #0b5394; font-size: large;">Matris için:</span></div>
<br />
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
<b>Sınıf metotları: </b>create, Random, Diagonal, Rotation, RotationX, RotationY, RotationZ, Zero.</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
<b> Instance (üye) metotları:</b> </div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
</div>
<ul>
<li>add</li>
<li>augment</li>
<li>canMultiplyFromLeft</li>
<li>col, cols, det</li>
<li>determinant</li>
<li>diagonal</li>
<li>round, row, rows, rank, rk</li>
<li>isSquare, isSingular</li>
<li>inv, inverse</li>
<li>tr, trace, tranpose</li>
</ul>
<div class="separator" style="clear: both;">
</div>
<br />
<br />
<div>
bunlar gibi başka metotlar da var ; fakat detaylı bir şekilde anlatacağım zaman açıklayacağım.</div>
<div>
<br /></div>
<div>
<br />
<div class="separator" style="clear: both;">
<span style="color: #0b5394; font-size: large;">Line (çizgi) için:</span></div>
<br />
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
<b>Sınıf metotları: </b>create, X, Y, Z.</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
<b> Instance (üye) metotları:</b> </div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
</div>
<ul>
<li>contains</li>
<li>distanceFrom</li>
<li>dup, eql</li>
<li>rotate, translate</li>
<li>reflectionIn</li>
<li>setVectors</li>
<li>pointClosestTo</li>
<li>isParalellTo</li>
<li>liesIn</li>
<li>intersectionWith</li>
</ul>
<div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
<span style="color: #0b5394; font-size: large;">Düzlem için:</span></div>
<br />
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
<b>Sınıf metotları: </b>create, XY, XZ, YX, YZ, ZX, ZY.</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
<b> Instance (üye) metotları:</b> </div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
</div>
<ul>
<li>contains</li>
<li>distanceFrom</li>
<li>dup, eql</li>
<li>intersects, intersectionWith</li>
<li>isParalellTo</li>
<li>isPerpendicularTo</li>
<li>pointClosestTo</li>
<li>setVectors</li>
<li>rotate, reflectionIn</li>
<li>setVectors</li>
<li>translate</li>
</ul>
<div class="separator" style="clear: both;">
</div>
<br />
<br />
<div>
detaylı bir şekilde örneklerle birlikte bu metotları, sonraki haftalarda konuyu anlatacağım zaman tekrar konuşacağız.</div>
<div>
<br /></div>
<div>
<span style="color: #0b5394; font-size: x-large;">6. Reflection.js</span><span style="font-size: x-large;"> </span><span style="color: #0b5394; font-size: x-large;">Kütüphanesi</span></div>
<div>
<br /></div>
<div>
Bu kütüphane sayesinde web sayfanızda seçtiğiniz resimlerinize yansıma ekleyebilirsiniz. Yansımaların boyutunu ve saydamlığını değiştirebilmeniz mümkün. Diyelim ki; yansımanızın tüm resmin yarısı kadar olmasını ve yarı saydam bir şekilde olmasını istiyorsunuz, elbette ki <b>reflection.js</b> sayesinde bu mümkün. Yansıma ekleyebilmeniz için seçtiğiniz resmin " image " elementi olması gerekir. Default olarak, yansıma arka plan rengindedir. İsterseniz rengini de değiştirebilirsiniz. Başlıca bütün web tarayıcılarında çalışmaktadır. Örnek verecek olursak:<br />
<br />
<ul>
<li>Internet Explorer 5.5 +</li>
<li>Mozilla Firefox 1.5 +</li>
<li>Opera 9 +</li>
<li>Safari 2 +</li>
<li>Google Chrome (tüm versiyonlar)</li>
<li>Eski tarayıcılara da indirgenebilme özelliği mevcut</li>
</ul>
<div>
Bu kütüphaneye ait birkaç fonksiyondan bahsetmek istiyorum ; fakat detaylı bir şekilde sizlere, sadece bu konuya özel olan yazımda örneklerle anlatacağım.</div>
<div>
<br />
<br />
<ul>
<li><b>Reflection.remove(image):</b> Resimden yansımayı kaldıran fonksiyondur.</li>
<li><b>Reflection.add(image, options): </b>Resime yansıma ekler.</li>
</ul>
</div>
</div>
<div>
Kullanımı oldukça kolay ve boyutu küçük bir kütüphanedir. Kullanımında yapmanız gereken tek şey image elementine <span style="color: red;">class= "reflect"</span> sınıfını ekleyin.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWkWEDccMHCS1k5j8qpvl2jmATfx1fnY7hvRLNuhKu45LfGB2vZeoD_EamKsY4hM4Fy5bJxahCwENZfPTf-ygaQzjgUsltDXfpBAcSN4f7pQa9zxsy1VoQvuXUGi0-xbDtkw66WhmmrsyQ/s1600/reff.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWkWEDccMHCS1k5j8qpvl2jmATfx1fnY7hvRLNuhKu45LfGB2vZeoD_EamKsY4hM4Fy5bJxahCwENZfPTf-ygaQzjgUsltDXfpBAcSN4f7pQa9zxsy1VoQvuXUGi0-xbDtkw66WhmmrsyQ/s320/reff.png" width="279" /></a></div>
<br />
<br />
Yukarıdaki; boyutu, yüksekliği ve saydamlığı benim isteğime göre ayarlanmış bir resimdir.<br />
<br />
<div>
<span style="color: #0b5394; font-size: x-large;">7. Bootbox.js</span><span style="font-size: x-large;"> </span><span style="color: #0b5394; font-size: x-large;">Kütüphanesi</span></div>
<div>
<br /></div>
<div>
Bootbox.js, Twitter Bootstrap modelini kullanarak ileti kutuları oluşturabilmeyi sağlar. Ücretsiz ve açık kaynaklıdır. Alarm, teyit ettirme gibi durumlarda ileti kutularımızdaki butonlar ve yazılar ile bize seçenekler sunar. Kullanımı oldukça kolaydır. En basitinden bir örnek verecek olursak;<br />
<br />
<br /></div>
</div>
</div>
</div>
<pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;">bootbox.alert(" NE YAZMAK İSTERSENİZ ");</pre>
<br />
şeklinde bir uyarı kutucuğu oluşturmak için tek satır olan bu kodu yazmamız yeterlidir. Biraz da bootbox metotlarına değinmek istiyorum. Bu metotların kullanım amaçlarını ayrı ayrı detaylı bir şekilde örneklerle bu konuya özel olan yazımda sizlerle paylaşacağım.<br />
<br />
<br />
<ul>
<li>bootbox.alert(message, callback)</li>
<li>bootbox.prompt(message, callback)</li>
<li>bootbox.confirm(message, callback)</li>
<li>bootbox.setDefaults(object options)</li>
<li>bootbox.hideAll()</li>
<li>bootbox.dialog(options)</li>
</ul>
<div>
<b>bootbox.alert</b> metodunun illaki callback parametresini almasına gerek yoktur, gerekli olan tek parametre iletide çıkacak olan mesaj kısmıdır.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqkBWHpWF64rJMUwFut4t7KzGvz1Erfyh9PeBphlCLgBjQpSY1KcGVI7DwdcRuT30H5FkcMB3tpTCTAoOXzmI7i-HA06VjvaIzjpiuDxMC1b-DidzWxFyHdWTVsjAjgkwegNMKA1AbB7TI/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqkBWHpWF64rJMUwFut4t7KzGvz1Erfyh9PeBphlCLgBjQpSY1KcGVI7DwdcRuT30H5FkcMB3tpTCTAoOXzmI7i-HA06VjvaIzjpiuDxMC1b-DidzWxFyHdWTVsjAjgkwegNMKA1AbB7TI/s1600/Untitled.png" /></a></div>
<div>
Yukarıdaki örnek alert (ikaz iletisi) örneğidir.<br />
<br />
<br />
<div>
<span style="color: #0b5394; font-size: x-large;">8. Knockout.js</span><span style="font-size: x-large;"> </span><span style="color: #0b5394; font-size: x-large;">Kütüphanesi</span></div>
<div>
<br /></div>
<div>
Özellikle büyük ve kompleks olan projelerde JavaScript ve HTML kodlarının iç içe geçmesi programcıya zorluklar çıkarıp zaman kaybına neden olur. Modelleme mantığıyla tasarım iç içe kullanılmış olduğu için programcının her ikisine de iyi derecede hakim olması zor olabilir. Böyle karışıklıkların yaşanacağı durumlarda <b>knockout.js </b>yardımımıza koşacak. Nasıl olacak dediğinizi duyar gibiyim. Şöyle ki; <b>knockout.js </b>kütüphanesi zengin ve etkileşimli kullanıcı arayüzleri oluşturma imkanı sağlar. Dinamik olarak değişen arayüz elemanları var ise kullanım ve geliştirme kolaylığı ile öne çıkmaktadır. MVVM (Model View ViewModel) dizayn modelini kullanarak geliştirme yapılır. Modeldeki değerler, kullanıcı hareketlerine göre güncellenir. <b>Bind </b>mekanizması sayesinde otomatik güncelleme yapılır. Boyutu küçük bir kütüphanedir (42 kb), ücretsizdir, başka bir kütüphaneye bağımlı değildir. Modern tarayıcılarda çalışmaktadır:<br />
<br />
<br />
<ul>
<li>Internet Explorer 6 +</li>
<li>Firefox 2 +</li>
<li>Google Chrome</li>
<li>Opera</li>
<li>Safari </li>
</ul>
<div>
Bu kütüphane 3 temel özellik üzerine kurulmuştur;</div>
<div>
<br /></div>
<div>
<ul>
<li>Şablon kullanımı</li>
<li>Veri bağlama</li>
<li>Observable ve bağımlılık izlemesi</li>
</ul>
<div>
Önümüzdeki haftalarda bu konuya özel olan yazımda örneklerle detaylı bir şekilde öğreneceğiz.</div>
<div>
<br /></div>
<div>
<div>
<span style="color: #0b5394; font-size: x-large;">9. Typeface.js</span><span style="font-size: x-large;"> </span><span style="color: #0b5394; font-size: x-large;">Kütüphanesi</span></div>
<div>
<br /></div>
<div>
Web sitenizde grafik yazınıza istediğiniz fontu eklemek için artık flash kullanmanıza, resimler oluşturmanıza gerek kalmadı. Bu kütüphane sayesinde sitenize dilediğiniz fontu ve rengi kolay bir şekilde ekleyeceksiniz. Cümlenin harfleri arasındaki boşluk, harflerin üst ve alttaki boşlukları da ayarlanabilmektedir. Detaylı bilgi için bu <span style="color: #3d85c6;"><a href="http://typeface.neocracy.org/examples.html" target="_blank">siteyi</a></span> ziyaret edebilirsiniz. Ücretsiz bir kütüphanedir. Desteklenen tarayıcıları aşağıda belirttim.<br />
<br />
<br />
<ul>
<li>Safari 2 +</li>
<li>Firefox 1.5 +</li>
<li>Internet Explorer 6 +</li>
<li>Google Chrome</li>
</ul>
</div>
</div>
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJ3lZYHb_676g5ALLqOHIM95ka1PRSmUmyS_crllOK3pjZVcm1q-XXqwXPSbrNt-_UXTeVnD5VIDZv0yj88Xu8JtMDW09RxCIctca7tzhZQ9tcKa9f-hLc9ceEIqu5kuPS25vVsw69SqwU/s1600/fnr.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJ3lZYHb_676g5ALLqOHIM95ka1PRSmUmyS_crllOK3pjZVcm1q-XXqwXPSbrNt-_UXTeVnD5VIDZv0yj88Xu8JtMDW09RxCIctca7tzhZQ9tcKa9f-hLc9ceEIqu5kuPS25vVsw69SqwU/s1600/fnr.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Bu konuyu anlatacağım yazımda örneklerle konumuzu tekrar detaylı bir şekilde inceleyeceğiz.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Bu haftalık anlatacaklarım bu kadar, bir sonraki yazımda sizlere <b>Intro.js</b> kütüphanesinden detaylı bir şekilde bahsedeceğim. Şimdilik görüşmek üzere, hoşçakalın..</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-size: large;">Kaynaklar</span></div>
<ol>
<li><a href="http://www.ercanaydogan.com/post/2012/02/16/Knockoutjs-JavaScript-MVVM-I.aspx">http://www.ercanaydogan.com/post/2012/02/16/Knockoutjs-JavaScript-MVVM-I.aspx</a></li>
<li><a href="http://typeface.neocracy.org/examples.html">http://typeface.neocracy.org/examples.html</a></li>
<li><a href="http://stoicloofah.github.io/chronoline.js/">http://stoicloofah.github.io/chronoline.js/</a></li>
<li><a href="http://erenkeskin.com/tooltip-nedir-nasil-gosterilir/">http://erenkeskin.com/tooltip-nedir-nasil-gosterilir/</a></li>
<li><a href="http://cemelma.wordpress.com/2013/07/09/knockout-js-nedir/">http://cemelma.wordpress.com/2013/07/09/knockout-js-nedir/</a></li>
<li><a href="http://bootboxjs.com/#api">http://bootboxjs.com/#api</a></li>
<li><a href="http://cow.neondragon.net/stuff/reflection/src/readme.html#changelog">http://cow.neondragon.net/stuff/reflection/src/readme.html#changelog</a></li>
<li><a href="http://finnrudolph.de/ImageFlow/Examples#Reflection_height">http://finnrudolph.de/ImageFlow/Examples#Reflection_height</a></li>
<li><a href="http://sylvester.jcoglan.com/api/vector.html">http://sylvester.jcoglan.com/api/vector.html</a></li>
<li><a href="http://varunpant.com/posts/raphael-js-tutorial-part-i">http://varunpant.com/posts/raphael-js-tutorial-part-i</a></li>
<li><a href="http://wesleytodd.com/2013/4/drag-n-drop-in-raphael-js.html">http://wesleytodd.com/2013/4/drag-n-drop-in-raphael-js.html</a></li>
<li><a href="http://creativedroplets.com/html5-and-multitouch-hammer-js/">http://creativedroplets.com/html5-and-multitouch-hammer-js/</a></li>
<li><a href="http://usablica.github.io/intro.js/example/hello-world/index.html">http://usablica.github.io/intro.js/example/hello-world/index.html</a></li>
</ol>
<br /></div>
</div>
</div>
Nil Buşra Koçerhttp://www.blogger.com/profile/07084098285875162702noreply@blogger.com1