- Posted by oozturk on July 3, 2009
Google'da bu konuyu aradığınızda birçok kişinin bu konuda bedava kodlar yazıp dağıttığını görürsünüz. Ben de yazmaya üşendim ve google'da aradım. Sanırım en başarılısı lightbox 2.
Hem tek tek resim gösteriminde hem de galeri gösteriminde gayet başarılı ve kullanması çok kolay. Yalnızca html kodunuzda birkaç saniye sürecek değişiklik yapıyorsunuz ve çalışmaya başlıyor. Tavsiye ederim.
Lightbox2'ın kendi sayfasına buradan ulaşabilrsiniz.
- Posted by oozturk on June 23, 2009
Bazı uygulamaların veritabanı ihtiyacı olduğu halde sadece çalışacağı bilgisayar üzerinde işlem yapması gerekir ama aynı veritabanına başka bilgisayarların direk bağlanmasına gerek olmaz. Live Messenger iyi bir örnek olabilir bu konuda. Arkadaş listesi, mesajlar gibi verilerin bilgisayar üzerinde tutulması gerekirken başka bilgisayarların o veritabanına erişmesine gerek yoktur. Bu gibi durumlarda sql compact gayet iş görebilir. SQL Compact zaten el bilgisayarlarında uzun zamandır kullanılıyor. Ancak compact'ın express'e göre bazı dezavantajları da var, bunlara az sonra değineceğim. SQL Express dosyası da aynı mantık ile kullanılsa da servis bazlı olduğundan ve esasen çalışmak için programın kullanılacağı bilgisayarda SQL Express kurulumuna da ihtiyacı olduğundan ötürü compact kadar pratik değildir ancak sistem büyüyecek ve birden fazla bilgisayarın aynı veritabanını kullanacağı zamanlar yakınsa SQL Express bu işler için çok uygundur diyebiliriz.
SQL Express kullanmanın pratik olarak iki yolu vardır diyebiliriz. Birincisi; veritabanını kurulu olan SQL Express üzerine iliştirilmiş (attached) olarak kullanırız, bu durumda şu server'a bağlan şu veritabanına bağlan denilebilir ve sql için geliştirilmiş birçok uygulama kullanılabilir. İkincisi; mdf dosyası olarak programın yanında bulundurulacak, aynı veritabanından birden fazla kişi kendi bilgisayarında kullanırken, dosyasını alıp başka bilgisayarda da kullanmak istenilecekse bu durumda SQL Express kurulumuna iliştirmeden kullanırız. Bu durumda ise şu SQL Express kurulumu ile şu dosyaya bağlan denilir.
SQL Compact'ın provider'ı bile farklıdır ve bazı özelliklerden mahrum bırakılmıştır. Bu arada SQL Compact dosyasının uzantısı sdf'dir. SQL Compact kullanırken LINQ TO SQL kullanımını Visual Studio desteklemiyor ancak framework destekliyor. Bununla alakalı daha fazla bilgiyi buradan bulabilirsiniz.
Bu konuda daha detaylı bilgilenmek isterseniz aşağıdaki linkleri okumanızı tavsiye ederim.
WPF ile uygulama geliştirirken SQL Mobile / Compact üzerinde LINQ TO SQL kullanımını hakkında pratik bilgi
Compare SQL Server 3.5 Compact and SQL Server Express Edition Features
System Requirements For SQL Server 3.5 Compact Edition
Microsoft SQL Mobile
Microsoft SQL Server Compact 3.5
SQL Server Compact 3.5 Features Datasheet
- Posted by oozturk on June 13, 2009
Union yalnızca tekrarlanmayan verileri alırken union all herhangi bir filtre uygulamadan bütün verileri kapsar. O kadar.
- Posted by oozturk on June 13, 2009
Dünya sürekli değişiyor. Öyle ki şu an okullarımızda, dershanelerimizde eğitimi verilen hiçbir şeyin yarın güncelliği kalmıyor. Bunun ne demek olduğunu size şöyle anlatayım; bugün eğitimini aldığınız şeyin eğitimini tamamladığınızda geçerliliği kalmamış olacak ve eğitimi alma amacınız olan iş bulmak, uygulamak imkansız olacak çünkü hiçbir yerde kullanılmıyor olacak.
Bu yüzden bazı tavsiyelerim var:
- Eğitim alınacaksa yalnızca konseptler hakkında bilgi sahibi yapan eğitimler almalı ve bu konseptlerin son bir yıl içerisinde çıkanlarının haricindekilerden uzak durmalı.
- "Önce bir ilk versiyonunu öğreneyim, adım adım ilerlemek lazım" cümlesi 1980'de geçerli olabilirdi - hatta belki 1990'da da geçerli olabilirdi - ancak artık işler öyle yürümüyor, öğrenilen şey araba kullanmak değilse direkt olarak sadece son çıkan ve hatta henüz çıkmamış olan şeylerle ilgilenmek lazım çünkü harcanacak olan zaman zarfında mutlaka öğrenilmesi gerekecek onlarca yeni teknoloji çıkmış olacak ve günler hala 24 saat.
- Yeni çıkan şeylerin ne olduklarına ve eskiden bildiğiniz hangi konu başlıklarının yerini dolduracağını iyice araştırın ki bildiğiniz bazı şeyleri geliştirmekle harcayacağınız zamanı bu yeni konuları öğrenmeye harcayın.
- Bir yerde çalışıyor / çalışacaksanız dikkat edin, geleceğinizi satmayın. Bu, şu demek oluyor; sizi, size göre eski teknolojileri kullanmaya zorluyorlarsa ve sizde boyun eğiyorsanız bilin ki geleceğinizi satıyorsunuz. Çünkü gerçekten şu an bildiklerinizle, yarın maaşınızdan ya da zavallı insan kaynakları departmanı çalışanlarının ezikliklerinden sıkıldığınızda, artık iş bulamayacaksınız demektir.
- Kendi kendinize öğrenin eğitim almayın, tabii mümkün olduğunca. Maddi açıdan değil hız ve öğrenilecek konuların doğru çeşitlenmesi açısından söylüyorum bunu.
- Peki ne öğrenmek lazım? Sır değil ki bunlar. Misal vereyim birkaç tane:
1. Ruby on rails
2. Python
3. Django
4. Microsoft Azure
5. SDS
Saymaya kalkınca bile daha yazmaya üşendiğim onlarca yeni şey var.
Ayrıca birşey daha söylemek istiyorum. Mutlaka ama mutlaka; sosyal medya, pazarlama gibi konulara odaklanın ve aklınıza gelen parlak fikirleri cilalayıp bu yeni teknolojilerle uygulayın, kendi projeniz olsun. Bunu yaparken farklı ülkelerden ya da en azından farklı çevrelerden insanlar ile beraber çalışmaya çalışın. Bu bir çok şeyi değiştirecektir.
Haddimi aşan bir yazı yazdığımı sanmıyorum. Bir dakika benimle beraber düşünün sadece; aldığım bilgisayar mühendisliği eğitimimi düşünüyorum, mezun olalı henüz birkaç yıl oldu ancak hiçbir geçerliliği kalmadı eğitimimin. Bu sanırım özellikle teknoloji ve pazarlama ile ilintili konularda eğitim alan herkesin hem fikir olacağı bir başlık oldu.
Herkese selamlar, saygılar efendim.
- Posted by oozturk on June 3, 2009
MVC'de alıştıktan sonra insan vazgeçemiyor sürekli link için action, controller, id gibi özellikler ile link yaratmaya başlıyor. Eh bu durumdan sonra resimlere de link vermek isteyince kendi html helper fonksiyonumuzu yazmak zorunda kalıyoruz. Aşağıdaki örneği aynen kullanabilirsiniz.
public static string ImageLink(this HtmlHelper helper,
string action,
string controller,
object routeValues,
string imageURL,
string alternateText,
object linkHtmlAttributes,
string style,
object imageHtmlAttributes)
{
// Create an instance of UrlHelper
UrlHelper url = new UrlHelper(helper.ViewContext.RequestContext);
//Create image tag builder
TagBuilder imageBuilder = new TagBuilder("img");
if( !string.IsNullOrEmpty( style ) )
imageBuilder.MergeAttribute( "style", style );
// Add image attributes
imageBuilder.MergeAttribute("src", imageURL);
imageBuilder.MergeAttribute("alt", alternateText);
imageBuilder.MergeAttributes(new RouteValueDictionary(imageHtmlAttributes));
//' Create link tag builder
TagBuilder linkBuilder = new TagBuilder("a");
//' Add attributes
linkBuilder.MergeAttribute("href", url.Action(action, controller, new RouteValueDictionary(routeValues)));
linkBuilder.InnerHtml = imageBuilder.ToString(TagRenderMode.SelfClosing);
linkBuilder.MergeAttributes(new RouteValueDictionary(linkHtmlAttributes));
//' Render tag
return linkBuilder.ToString( TagRenderMode.Normal );
}
Bu fonksiyonun kullanımına dair bir örnek vereyim:
<%= Html.ImageLink("Detail", "Firma", new { id = firma.Firmaadi }, "/content/images/a.jpg", firma.Firmadi, null, "margin-left:10px; border:1px solid #CCC", null) %>
Kolay gelsin!
- Posted by oozturk on April 29, 2009
Oluştuduğumuz MVC web projelerinde actionlara herkesin erişmesini engellemek isteyebiliriz. Mesela firma kaydı yaratılacaksa yalnızca belirli bir role mensubu kullanıcılarının bunu yapabilmelerini isteyebiliriz. Bu durumlarda o action'ın başına aşağıdaki gibi bir kod yazılmalıdır.
[Authorize( Roles = "Admins" )]
public ActionResult Create()
{
//...
return View();
}
Eğer birden çok role mensubu kullanıcıların erişebilmesini istiyorsak Authorize satırını o role için de tekrar etmeliyiz.
[Authorize( Roles = "Admins" )]
[Authorize( Roles = "Users" )]
public ActionResult Create()
{
//...
return View();
}
Bu kadar basit. Aynı kısıtlamayı controller class için de kullanabiliriz.
İyi günler!
- Posted by oozturk on April 29, 2009
Merhaba,
Mesela 10 kolonlu bir sorgu sonucu var ve SelectListItem oluşturmak isteniliyor ki DropDownList gibi listelerde kullanabilsin, nasıl yapmalı?
( from bs in DenemeRepository.GetDeneme()
select new SelectListItem
{
Value = bs.DenemeID.ToString(),
Text = bs.DenemeName,
Selected = false
} );
Yukarıdaki kodu duruma göre modifiye ederek elde edilebilir.
İyi günler!
- Posted by oozturk on April 29, 2009
Merhaba,
MVC'de ViewEngine neden yazılır? Çünkü standart şablon haricindeki klasörlere ya da o klasörlerde usercontrol barındırıyorsanız farklı şablonlar ile çalışmak istiyorsunuzdur. Bu yüzden ViewEngine yazılır ve kayıt edilir. Misal olarak deneme klasöründeki ViewUserControl'e erişebilmek için yazarsanız. Peki nasıl yapılır?
using System.Web.Mvc;
public class OtherViewEngine : WebFormViewEngine
{
public OtherViewEngine()
: base()
{
ViewLocationFormats = new[] {
"~/Views/{1}/{0}.aspx",
"~/Views/{1}/{0}.ascx",
"~/Views/deneme/{0}.aspx",
"~/Views/deneme/{0}.ascx",
};
MasterLocationFormats = new[] {
"~/{0}.master",
"~/Shared/{0}.master",
"~/Views/{1}/{0}.master",
"~/Views/Shared/{0}.master",
};
PartialViewLocationFormats = ViewLocationFormats;
}
}
Yukarıdaki gibi bir kodu boş bir kod dosyası içine yazın ve kaydedin. Daha sonra da Global.asax dosyasındaki RegisterRoutes fonksiyonunun içine en alta aşağıdaki satırı ekleyin.
ViewEngines.Engines.Add( new OtherViewEngine() );
Bu kadar basit. Bunun gibi birçok klasörü ekleyebilirsiniz ya da daha farklı şablonlar yazıp kullanabilirsiniz.
İyi günler!
- Posted by oozturk on April 29, 2009
Merhaba,
Web Forms kullanırken ajax ile UserControl sürekli kullanıyorduk peki ya MVC'de nasıl yapılıyor? MVC ile geliştirilen projelerde ViewUserControl ve ViewPage dosyalarına karşılık gelen nesneler olmadığı ya da tipleri olmadığı için new komutuyla çağırmak mümkün değil. Ayrıca ViewData ve ViewData.Model kullanılmak istenilebilir. Bu sebeplerle farklı bir yol izlemek gerekiyor.
1. Öncelikle bu iş için MVCContrib kütüpanesi gerekiyor. Bu kütüphanede MVC için birçok yeni kolaylık var. İndirmek için www.codeplex.com/MVCContrib adresini ziyaret edin. İndirdikten sonra projenize referans olarak MvcContrib.dll dosyasını ekleyin.
2. Aşağıda sunduğum kodu projenizin içinde istediğiniz bir yere koyun
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Web.Mvc;
using System.Web.Mvc.Html;
using System.Security.Principal;
using MvcContrib.UI;
public static string RenderPartialToString( string userControl, ViewDataDictionary viewData, TempDataDictionary tempdata, ControllerContext controllerContext )
{
HtmlHelper h = new HtmlHelper( new ViewContext( controllerContext, new WebFormView( "message" ), viewData, tempdata ), new ViewPage() );
var blockRenderer = new BlockRenderer( controllerContext.HttpContext );
string s = blockRenderer.Capture(
() => RenderPartialExtensions.RenderPartial( h, userControl, viewData )
);
return s;
}
3. Bir Controller içine aşağıdaki gibi bir action'ı yazın
public ContentResult GetEditView()
{
//Vıewdata içine ya da model'e birşey eklemek ya da değiştirmek istiyorsanız bunu burada yapın daha sonra aşağıdaki adımlara devam edin.
string s= MvcStuff.RenderPartialToString( "/Views/deneme/EditView.ascx", ViewData, TempData, this.ControllerContext );
return new ContentResult()
{
Content = s
};
}
4. Bu action'ı istediğiniz sayfa ya da ViewUserControl içinden Ajax.ActionLink ile ekleyin.
<%= Ajax.ActionLink( "buraya basın", "GetEditView", new
{
Controller = "deneme"
}, new AjaxOptions
{
UpdateTargetId = "mesedit"
} )
%><div id="mesedit">
</div>
5. Masterpage kullanıyorsanız oraya kullanmıyorsanız sayfa içine gerekli javascript kütüphanelerini ekleyin
<script src="../../Scripts/jquery-1.3.2.js" type="text/javascript"></script>
<script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="../../Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>
Bu kadar basit. Şu anda eğer aynı mantık ile yazdıysanız mesedit diye adlandırdığım div içinde usercontrol'ünüz gösterilecektir ve orada çalışacaktır. Elbette %100 Ajax. :-)
Bu arada eğer usercontrol bulunamadı diye bir hata alıyorsanız bir viewengine yazmadınız demektir. Bunun için de viewengine örneği için yazdığım yazıyı okumanızı tavsiye ederim.
Bu kütüphaneler ve jQuery sayesinde isterseniz fade gibi animasyonlar ekleyebilir, görünümü daha da güçlendirebilirsiniz.
İyi günler!
- Posted by oozturk on April 18, 2009
Çok kolay yazılır. Bazı belirtilmesi gereken mecburi şeyler var onlara dikkat etmek gerekiyor o kadar. Nedir onlar?
- Bir class yaratmalısınız ve bu class static olmalı. Ayrıca eğer yazacağınız methodun Html class'ında görünmesini istiyorsanız class adınız Html olmalı ve partial olmalıdır. Yani:
public static partial class Html
- Bu class içine yaratacağınız method'da aynı şekilde static olmalı, geriye string döndürmeli ve ilk değişkeni this htmlhelper helper olmalı (değişken adı size kalmış tabii). Bu arada HtmlHelper class'ı System.Web.Mvc namespace'i içinde bulunuyor. Yani:
public static string Anchor(this HtmlHelper helper, string text, string link)
- Bu kadar.
Bir de örnek vereyim:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace DenemeMVC
{
public static partial class Html
{
public static string Anchor(this HtmlHelper helper, string text, string link)
{
var builder = new TagBuilder( "a" );
builder.MergeAttribute( "href", link );
return builder.ToString( TagRenderMode.StartTag ) + text + builder.ToString( TagRenderMode.EndTag );
}
}
}
Mesela yukarıdaki kodu kullanarak Html.Anchor("Microsoft", http://www.microsoft.com) diye kullanabilirsiniz ve ortaya bir anchor çıkacaktır.
Bu olay tamamen Anonymous methods'dur, başka da birşey değildir esasen.
Kolay gelsin.