This add-in project converts c# and vb.net codes in visual studio. Sometimes we need to convert code between c# and vb.net but convertion progress is very boring. Open the web browser, google it(c# to vb.net) and using some online code convertion service and oh, code is converted. Thats really boring and difficult way.
What does CodeCopy do?
CodeCopy is simple way to code convertion between c# and vb.net languages. You can copy any c# or vb.net code and paste visual studio whit Paste with CodeCopy. Thats detect your project language and converts code to target language(c# or vb.net). It's simple!
Works on Visual Studio 2005, 2008 and 2010.
Feature plan
- Partial code converting: Converter runs on code blocks and covert code and comment code block when it is non convertable block. Notice convertable code blocks will be recover.
- Smart error fixer: We work on generic errors because some error messages fixed programmaticaly. Eg: if error is "',' expected." then we fix this problem when inserted ',' character on required line and column.
- More effective code convertion
More...
2466f189-b6d6-492c-9cef-4002fb5bf08f|4|4.5

Merhabalar, bir önceki yazımda da belirttiğim gibi c# ve vb.net arası otomatik kod dönüşümü sağlayacak bir eklenti geliştirdik. Talep yönünde geliştirme işlemine devam edeceğiz. Özetle eklenti kopyala yapıştır gibi basit bir işlemle proje diline dönüştürülüyor ve kullanıma hazır olmuş oluyor. Şimdilik bu kadar bilgi vermekle yetiniyorum. Projeyi codecopy.codeplex.com adresinden takip edebilir yada indirip deneyebilirsiniz.
Kaynak kodları indirin
Eklentiyi indirin(Kurulum dosyası)
4b330312-3931-4565-8a08-bb63a091b821|0|.0
Bilindiği üzere tüm veritabanlarının veri sorgulamak için birbirlerine benzer sorgulama dili vardır(Mssql için T-SQL, oracle için PL-SQL gibi). Hibernate ortamında veritabanından bağımsız düşünüldüğü için bu sorgulama dilleri arasındaki farklılığı ortadan kaldırmak amacıyla hibernate yapısal sorgulama dili(Hibernate Query Language) kullanılmaktadır. Hibernate yazılan HQL'i değerlendirip kullanılan veritabanına uygun dile dünüştürerek kullanır. Bu nedenle eğer HQL kullanarak daha esnek bir şekilde sorgulama yapmak istiyorsak bu dili öğrenmek icab ediyor. Aynı işlevi Criteria kullarak da belirtebiliyoruz. Ancak bu başka bir yazı konusudur. Bu yazıda HQL'in temel işlevlerini değerlendiriyor olacağım.
More...
5acb0a9d-84ba-4328-8b44-a4cf3efdd4b5|2|2.5
Merhabalar, NHibernate ile geliştirilen uygulamalarda veritabanından bağımsız çalışma yani herhangi bir veritabanına özel tipleri kullanamama durumundan dolayı özel tipler tanımlama gereği duyulmaktadır. Bu örneği daha iyi açıklayabilmek için Enumaration tipli alanların kullanımında yaşanan problem ve problemin çözümü hakkında bahsederek yazıya devam etmeyi uygun görüyorum.
Daha önceki yazılarda bir sınıfın Map edilme işlemine yönelik anlatımları gerçekleştirdim. Tabiki bazı özel durumlardan hemen bahsetmek uygun değildi. İlerledikce istisna durumları incelemek ve anlamak daha da kolaylaşıyor olacaktır.
Herşeyden önce Fluent NHibernate ile herhangi bir veritabanını kullanıldığı düşünülerek çalışılmalıdır. Yazacağımız kodun tamamı nesneye yönelik olması gerektiğinden nesne yönelimli kodlama önemli bir yer tutmaktadır.
More...
4c3f44e9-6d9e-4d15-90f9-30c526a7ce44|1|5.0
Merhabalar, NHibernate hakkında daha önce de yazmıştım. Bu yazıda asp.net ile birlikte NHibernate'in etkili bir şekilde kullanımına değiniyor olacağım. NHibernate'in sağladığı özelliklerden faydalanarak performanslı bir uygulama geliştirmemiz gerekiyor. Bu yazı klasik kullanımdan ziyade veri tabanı bağlantısının önemiyle alakalı bilgiler içeriyor.
NHibernate de Session kavramı önemli bir yer tutuyor. Veritabanı ile konuşma işlemleri için Session nesnesi kullanıyor. Bu nesne asp.net de bulunan Session nesnesi ile aynı isimdedir. İki nesneyi birbirine karıştırmamak gerekekir. NHibernate database ile konuşurken Session nesnesinin OpenSession() ile açıklması gerekiyor. Arkaplanda veritabanı ile alakalı bağlantı kuruluyor ve istediğimiz işlemleri(ekle, sil gibi) gerçekleştirmemize olanak sağlıyor.
ASP.NET ile ado.net yapısı için bağlantı yönetimine dayalı farklı bir çok yaklaşım vardır. Klasik yöntem her bir sorgu için bağlantının açılıp kapanmasına dayalıdır. Bu yazıda anlatacağım durum ise NHibernate'in OpenSession() yordamını sayfanın çağırıldığı andan tamamlanana kadar Session nesnesinin açık kalmasına dayalıdır. Bu yapıya göre istemci herhangi bir asp.net sayfasını çağırdığında veritabanı için oturum oluşturulur. Sayfa içindeki tüm db işlemleri bu oturum ile(yeni bir oturum oluşturmadan) gerçekleştirilir. Ve oturum sonlandırılır.
More...
46bc9d60-261e-4334-84aa-40a9a0a69f02|0|.0
Merhabalar, daha önce de bu konuya benzer şeyler yazmıştım. Bu yazıda cache işlemlerini kolayca yapabilmek için kullandığım aşağıdaki sınıfı paylaşıyorum. CacheHelper.cs sınıfı aşağıdaki gibidir.
namespace OMR.Core.Helpers
{
using System;
using System.Web;
public class CacheHelper
{
private static HttpContext GetHttpContext()
{
HttpContext httpContext = HttpContext.Current;
if (httpContext == null)
throw new InvalidOperationException();
return httpContext;
}
/// <summary>
/// Önbelleğe nesne eklemek için kullanılır
/// </summary>
/// <typeparam name="T">Nesne tipi</typeparam>
/// <param name="t">Nesne tipi</param>
/// <param name="key">Önbellek anahtarı</param>
/// <param name="minute">Önbellekte kalma süresi</param>
public static void Add<T>(T t, string key, int minute) where T : class
{
GetHttpContext().Cache.Insert(key, t, null, DateTime.Now.AddMinutes(minute), System.Web.Caching.Cache.NoSlidingExpiration);
}
/// <summary>
/// Önbellek anahtarına göre nesneyi önbellekten siler
/// </summary>
/// <param name="key">Önbellek anahtarı</param>
public static void Clear(string key)
{
GetHttpContext().Cache.Remove(key);
}
/// <summary>
/// Önbellekte önbellek anahtarı var mı?
/// </summary>
/// <param name="key">Önbellek anahtarı</param>
/// <returns></returns>
public static bool Exists(string key)
{
return GetHttpContext().Cache[key] != null;
}
/// <summary>
/// Önbellek anahtarına göre ilgili nesneyi dönderir
/// </summary>
/// <typeparam name="T">Nesne tipi</typeparam>
/// <param name="key">Önbellek anahtarı</param>
/// <param name="value">Önbellek değeri</param>
/// <returns></returns>
public static bool Get<T>(string key, out T value) where T : class
{
try
{
// Önbellek anahtarı yok mu?
if (!Exists(key))
{
// Varsayılan değeri ata
value = default(T);
return false;
}
// Önbellekteki değeri ata
value = (T)GetHttpContext().Cache[key];
return true;
}
catch
{
// Hata olması durumunda varsayılan değeri ata
value = default(T);
return false;
}
}
}
}
Faydalı olması dileğiyle, mutlu kodlar.
61ec3cb7-83d1-4a41-aeb1-da8d2447f432|0|.0
Daha önceki yazımda bahsettiğim gibi korkutucu yazıların aksine basit örneklerle devam etmeyi uygun görüyorum. Bu yazıda NHibernate ile basit bir veri yapısını nasıl modeller ve kullanırız sorusuna yanıt arıyoruz diyelim.
NHibernate de geleneksel olarak veri yapıları xml dosyaları ile yapılıyor ancak sınıf temelli yazmamanın daha uygun olduğunu düşünüyorum. Örneğin bir öğrenci veri yapısında öğrenci no, adı, soyadı gibi alanların xml içinde tanımlanmasında kuşkusuz bir sorun yok ancak ayrıca bir öğrenci sınıfının yazılmasına da ihtiyaç duyuyor. Öyleyse neden xml ihtiyaç var ki? sorusunu soranlardan olarak yaptığım araştırma sonucunda Fluent NHibernate'i keşfettim. Bu yazıda Fluent NHibernate ile ilgili örnekler üzerinden devam edelim.
Merhaba dünya projesi için izlenmesi gereken adımlar şöyle olmalı:
1) Fluent NHibernate'in son sürümü bakkaldan alınmalıdır. (İndir)
2) İndirilen NHibernate dll'leri bir güzel yıkanıp zipten çıkarılmalı ve projemize referans edilmelidir.
3) Konfigurasyon ile ilgili kodlar yazıldıktan sonra, öğrenci sınıfı ile ilgili kodlar yazılmalıdır.
NHibernate'i indirip referans ettikten sonra veritabanı ayarları için aşağıdaki xml dosyasını tanımlayalım.
<?xml version="1.0" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
<session-factory>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">server=.;database=tb;integrated security=true;</property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
</session-factory>
</hibernate-configuration>
Aşağıdaki kod ile ayarı okutalım:
var configuration = new Configuration();
configuration.Configure("DatabaseConfiguration.xml"); // Veritabanı ayarlarını oku
configuration.AddAssembly("NHibernate_HelloWorld"); // Hangi veri yapılarını okuyacağını anla
Öğrenci sınıfını aşağıdaki gibi tanımlayalım:
namespace NHibernate_HelloWorld
{
using System;
using FluentNHibernate.Mapping;
public class Ogrenci
{
public virtual int OgrenciId { get; set; }
public virtual string AdiSoyadi { get; set; }
public virtual DateTime DogumTarihi { get; set; }
}
public class OgrenciMap : ClassMap
{
public OgrenciMap()
{
Id(x => x.OgrenciId);
Map(x => x.AdiSoyadi);
Map(x => x.DogumTarihi);
}
}
}
Konsol uygulamasına ait kodlama'da aşağıdaki gibi olsun:
using System;
using NHibernate.Cfg;
using NHibernate;
using FluentNHibernate.Cfg;
using NHibernate.Tool.hbm2ddl;
namespace NHibernate_HelloWorld
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Program başldı");
using (var sessionFactory = GetSessionFactory())
{
Console.WriteLine("Session Factory oluşturuldu");
using (var session = sessionFactory.OpenSession())
{
Console.WriteLine("Session oluşturuldu");
Ogrenci ogrenci = new Ogrenci();
ogrenci.AdiSoyadi = "Ömer Faruk ZORLU";
ogrenci.DogumTarihi = new DateTime(1987, 7, 27);
session.Save(ogrenci);
Console.WriteLine("Öğrenci kaydı eklendi");
}
}
}
static ISessionFactory GetSessionFactory()
{
Configuration configuration = new Configuration();
configuration.Configure("DatabaseConfiguration.xml"); // Veritabanı ayarlarını oku
return Fluently.Configure(configuration)
.Mappings(m => m.FluentMappings.AddFromAssemblyOf())
.ExposeConfiguration(BuildSchema)
.BuildSessionFactory();
}
static void BuildSchema(Configuration config)
{
new SchemaExport(config).Create(false, true);
}
}
}
Aşağıdaki videoda biraz daha açıklama çalıştım. Kafanız karıştıysa ve biraz daha karışsın istiyorsanız izleyin :)
d6bf885d-206e-4e44-9c71-9a9340cc1341|4|5.0
Merhabalar, kısa bir aradan sonra tekrar yazmaya başlıyorum nihayet. Genel itibari ile bu konuda pek yazılı materyal bulunmamasının da yazmaya karar vermem de etkili olduğunu belirtmek istiyorum. Database erişimi konusunda uzun zamandır çalıştığımı yakın arkadaşlarım bilirler. Araştırmalarım boyunca NHibernate den uzak durmaya çalıştım. Adı biraz ürkütücüydü ve çok büyük projelerde kullanıldığından felan bahsedildiği olmuştu. Sanırım benim gibi düşündüğünden dolayı uzak duran onlarca kişi var :) Konu üzerinde araştırdıkca aslında o kadar da korkulacak bir şey olmadığını farkettim. Bu bağlamda edindiğim bazı bilgileri de paylaşmakta fayda olduğunu düşünüyorum.

NHibernate kütüphanesi özetle database ile ilgili kodlama yükünün büyük bir kısımını üstlenir ve tek işi de database'den aldığı data ile ilgili olduğundan bu konuda uzmanlaşmıştır. Veritabanı ile uygulama arasındaki iletişimi sağlamak oldukca basitdir ancak bazı özel durumlar için kodlamada değişiklikler gerekebiliyor. Tüm kodlamanız yalnızca mssql destekliyor olmasına karşın bir gün patronunuz size bunun mysql sürümünüde yapmanızı isterse ne yapacaksınız? Kodlamanız farklı database'ler ile çalışabilir durumda olabilir ancak database dönüştürülebilir şekilde tasarlanmamışsa ne olacak? Çok özel bir örnek olmuş olabilir, kabul ediyorum ancak bu tür durumlarda ortaya çıkabiliyor. Maliyetler ve müşteri talepleri doğrultusunda işinizi bitirmeniz gerekiyor. Diğer taraftan veritabanı iletişim dili veritabanlarına göre değişiklik gösterebiliyor. Özetle veri tabanı erişim işini bu konuda uzman bir kütüphaneye bırakmakta fayda görüyorum, tabiki bu kararı verirkende işi kime emanet ettiğinize de iyi karar vermeniz icap eder.
Bu yazıda herhangi bir kod bloğu görmemiş ve görmeyecek olmanızın asıl sebebi nhibernate ile ilgili yazılarda xml veya class larla örnekler verilerek bir çok makalenin yakın zamana kadar beni ürkütmesinden dolayıdır. Temel olarak nhibernate sizin için veritabanı işlerini organize ediyorsa bir şekilde veri yapılarını bildirmeniz gerekiyor. Bir öğrenci takip sistemi düşünelim, öğrenci, öğretmen, sınıf vs. tablolarını veritabanında oluşturup yola koyuluyoruz(malesef) oysa önce nesnesel tasarımın yapılması çok daha uygundur. Bu bağlamda nhibernate'de veritabanı bağımsız(mssql, mysql, oracle gibi herhangi bir veritabanı ile) çalışabildiği için veri tabanı üzerinden tablo açarak başlamak çok anlamsız oluyor. Yapılması gereken ve genel olarak kullanılan iki yöntem var. Birincisi xml kodları ile veri yapınızı bildirmek ki tercih etmiyorum ikincisi de ilgili sınıfları yazıp(öğrenci, öğretmen vb. sınıfları) nhibernate'e sınıfa göre tabloları vb. oluşturmasını istediğinizi bildirmek ki bunu da çok seviyorum.
Özetlersek, nhibernate güçlü bir veri tabanı erişim ve etkileşim aracıdır ve bir şekilde veri yapılarını bildirdiğimiz taktirde veri getir götür işlerini üstleniyor.
Bu yazıyla nhibernate'in güzel yönlerinden kısaca bahsetmiş oldum. İlerleyen yazılarda teknik meselelere iniyor olacağız. Entitiy Framwork Code First ve SubSonic projelerine de arasıra gidip gelebiliriz diye umuyorum. Görüşmek üzere.
f3891680-7edd-4af1-8adb-0c5dd1b33c08|3|3.7
Sumer Filemanager is fully open source file management project code named Sumer Filemanager has released with version 0.1. This version we used json, templates, shift click and edit in place plugins of jQuery.And we used SharpZipLib for compress and extract files and folders. Thanks for all open source project authors.

Version 0.1 contains are bellow:
Rename: Rename file and folder names in place.
Compress: Zip and un-zip any files and folders quickly.
Multiple Upload: Upload and manage files and supports multiple file upload if browser too.
List: Listing files and folder with ajax async request for best performance.
Unfortunately we can't work on user friendly interface. Its be fine later but script supports easy design for new user interface because all use interfaces based on jquery templates.
You can download full source code runs on asp.net. Full source code published on codeplex. Click here to download it.
f0fcb872-3bf5-48ac-936f-c9c3d20183c2|4|4.8
Bir önceki yazıda sayfa aksiyonlarının(PageAction) yetki kontrolü için her bir sayfa şablonunun içine(PageTemplate) yetki yoksa AccessDenied.aspx sayfasına git gibisinden bir kod eklemiştik. Sonradan aslında bu kontrolün henüz yönlendirilmeden yapılmasını ve merkezi olması gerektiğini düşünerek kodda bir takım eklemeler yaptım. Bunun için Dynamic data nın route handler(yönlendime kontrolörü) tarafından yapılan işi üstlenmek en doğru çözüm diye düşünerek aşağıdaki sınıfı yazdım
namespace DynLibrary.Entities
{
using System.Web.DynamicData;
using DynLibrary.Helpers;
///
/// Dynamic Data'nın route işlemini gerçekleştiren sınıftan kalıtılmıştır.
///
public class DynRouteHandler : DynamicDataRouteHandler
{
public DynRouteHandler()
: base()
{ }
///
/// Dyanmic data'nın GetActionLink metotunun linki oluşturmak
/// aynı zamanda da sayfanın route edilmesi işlemi sırasında
/// çağırılan metottur. null değeri dönmesi durumunda sayfa handle
/// edilmez, dolayısıyla 404 bulunamadı hatası ile karşılaşılır.
/// Benzer şekilde GetActionLink metotundanda null döneceği için
/// linkler boşalmış olacaktır.
///
///
///
///
///
public override System.Web.IHttpHandler CreateHandler(DynamicDataRoute route, MetaTable table, string action)
{
// action değişkeninden gelen açık değer
// Edit, Update, List, Detail gibi
char cCrudOperation;
switch (action)
{
case "Insert":
cCrudOperation = 'c';
break;
case "List":
cCrudOperation = 'r';
break;
case "Detail":
cCrudOperation = 'r';
break;
case "Edit":
cCrudOperation = 'u';
break;
default:
cCrudOperation = 'r';
break;
}
// Eğer yetki yoksa null değerini dönder
if (!PermissionHelper.CanAccessCrudOperation(table.EntityType.Name, cCrudOperation))
return null;
// Herhangi bir durum yoksa normal şekilde route işlemini gerçekleştir
return base.CreateHandler(route, table, action);
}
}
}
İlgili sınıfı yazdıktan sonra global.asax dosyasında aşağıdaki değişiklik yapılmalıdır. Bu tanımlama ile routehandler sınıfının bizim sınıfımız üzerinden yapılacağını bildirmiş oluyoruz.
Önceki hali:
routes.Add(new DynamicDataRoute("{table}/{action}.aspx")
{
Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }),
Model = model
});
Yeni hali:
routes.Add(new DynamicDataRoute("{table}/{action}.aspx")
{
Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }),
Model = model,
RouteHandler = new DynRouteHandler()
});
Bu şekilde yetkilendirme işlemini daha yönlendirme bile gerçekleşmeden yapmış olduk. Bu işlemin ardından personel tablosunda edit yetkisi olmayanlar aşağıdaki gibi bir sayfa ile karşılacaklar :)

Faydalı olması dileğiyle, mutlu kodlar!
Ömer Faruk ZORLU
de906c43-661e-4ebe-b3f9-4f40cde603fa|0|.0