Koray Kırdinli

Yazılım ve İş Yaşamı Hakkında Paylaşımlar

Reflection Kullanarak Generic Singleton Tasarım Deseni

Singleton pattern’i bildiğiniz gibi bir sınıfın sadece tek bir nesnesini oluşturmak için kullanıyordurk . Peki bir sınıfın neden sadece tek bir nesnesini oluşturma ihtiyacımız olabilir örneğin DataAccessLayer ınızda connection oluşturacaksınız. Bunun için bu pattern oldukça kullanışlı olabilir çünkü connection nesnenizde size sadece 1 tanesi yeterli. Siz new ile yeni bir nesnesini oluşturmak yerine mevcut connectionı kullanmanız daha mantıklı ve performanslı olacaktır.

Peki generic singleton patterni neden kullanıyoruz adından da anlaşılacağı gibi yapılan pattern’i bütün sınıflar için kullanabilelim. Şu andan itibaren bütün konsantrasyonumuzu bu yöne verelim.

Sınıfın instance’ını  Singleton<T>.Instance şeklinde kullanmayı hedefleyeceğiz.Singleton’unun temel prensibi sınıfın constructor’unun public olmaması, bu ne demek? new() keyword’u ile sınıfın nesnesini oluşturamıyoruz demek.

</pre>
<code> </code>
<pre id="pre0">public static class Singleton<T>
       where T : class
{
  static volatile T _instance;
  static object _lock = new object();

  static Singleton()
  {
  }

  public static T Instance
  {
    get
    {
      if (_instance == null)
        lock (_lock)
        {
          if (_instance == null)
          {
            ConstructorInfo constructor = null;

            try
            {
              // Binding flags exclude public constructors.
              constructor = typeof(T).GetConstructor(BindingFlags.Instance |
                            BindingFlags.NonPublic, null, new Type[0], null);
            }
            catch (Exception exception)
            {
              throw new SingletonException(exception);
            }

            if (constructor == null || constructor.IsAssembly)
            // Also exclude internal constructors.
              throw new SingletonException(string.Format("A private or " +
                    "protected constructor is missing for '{0}'.", typeof(T).Name));

            _instance = (T)constructor.Invoke(null);
          }
        }

      return _instance;
    }
  }
}

Buradaki T tekil oluşturulacak olan sınıfı temsil ediyor. Burada daha önce görmeye alışık olmadığımız bir keyword var o da volatile .volatile ile bildirilen değişkenler farklı iş parçacıkları yada prosesler tarafından ortak kullanılıyor olsa da programın akışı içerisinde her zaman son versiyonu elde edilecektir böylece olası hataların önüne geçilmiş olunur.

public static SingleInstanceClass Instance
{
  get
  {
    return Singleton<SingleInstanceClass>.Instance;
  }
}

Artık bu sınıfın bir nesnesine ihtiyaç duyduğunuzda  SingleInstanceClass.Instance şeklinde çağırıp sınıfın statik olmayan metodlarına erişebilirsiniz.

Peki bu kadar efora ne gerek var diyorsanız şunu aklınızdan çıkarmayın derim. Örneğin bir log yazan bir sınıfınız var ve static metodlarla text dosyaya log yazma işlemini yapabiliyorsunuz buraya kadar herşey güzel ancak daha sonra logları veritabanına yazmanız gerektiğinde bu sınıfı genişletemeyeceksiniz . Bu şekilde bir pattern kullandığınızda ise inheritance ile genişletebileceksiniz.

Basit örnek :

<code>public static class Logger {
    public static void Log(string s) { ... }
}

public class Client {
    public void DoSomething() {
        Logger.Log("DoSomething called");
    }
}</code>

Singleton pattern kullanılan örnek :

</pre>
 <code><code>public class Logger {
 private static Logger _instance;
 public static Logger Instance
 {
 get
 {
 if (_instance == null)
 _instance = new Logger();
 return _instance;
 }
 set { _instance = value; }
 }
 protected Logger() { }
 public virtual void Log(string s) { ... }
}</code></code>

public class Client {
 public void DoSomething() {
 Logger.Instance.Log("DoSomething called");
 }
 }
<pre>

TestLogger : Logger şeklinde yeni bir Logger türetilebilir.

Umarım makale size singleton patterni ve bunu nasıl generic hale getirebileceğiniz hakkında ufak da olsa bir fikir vermiştir.
Herkese iyi çalışmalar.

Kaynaklar :
http://www.codeproject.com/Articles/14026/Generic-Singleton-Pattern-using-Reflection-in-C
http://geekswithblogs.net/akraus1/articles/90803.aspx
http://www.yoda.arachsys.com/csharp/singleton.html
http://www.csharpnedir.com/articles/read/?filter=&author=&cat=cs&id=155&title=Kod%20Optimizasyonu%20ve

Ekim 19, 2012 Posted by | C#, Yazılım | , , , , , , | Yorum bırakın

Nuget nedir ne işe yarar?

Arkadaşlar Nuget Visual Studio’ya eklenti olarak kurulan ve yine Visual Studio projelerine kolayca library ve tool’ları kurmaya,güncellemeye ve silmeye yarayan harika bir open source araç. Visual Studio’da Tools->Extension Manager’a tıklıp Nuget’i listeden bulabilirsiniz.
Nugeti Yükledikten Sonra Tools->LibraryPackageManager->Manage Nuget Packages a tıklayarak projede bulunan paketleri yönetebilir, olmayan bir paketi solution’daki istediğiniz projeye dahil edebilirsiniz. Güzel tarafı Nuget gerekli config ayarlamalarını dahi sizin yerinize yönetip işinizi çok kolaylaştırıyor.

Ben kullanmaya başladıktan sonra çok alıştım ve artık projeme manuel paket yüklemiyorum desem yeridir. Herkese tavsiye ederim.

Ekim 11, 2012 Posted by | Yazılım | | 2 Yorum

Dependency Injection Tasarım Deseni (Unity)

Dependency Injection komponentlerin compile time da değil run-time da seçilmesini sağlayan tasarım desenidir.(Design Pattern) Bu desen örneğin dinamik olarak plug-in yükleyebilmek için , test ortamlarında mock nesnelerinin seçimini dinamik olarak yapmak için veya gerçek nesnelerin prod ortamında dinamik olarak oluşturulması için kullanılır. temeldeki mantığı Inversion of Control (IoC) ‘dür yani kontrollerin yer değiştirebilmesi. Aynı interface’den türeyen concreate sınıflar loose coupling sayesinde yer değiştirdiğinde sistemde herhangi bir değişiklik yapmadan yeni haliyle çalışabilir.
Kendisi nesneler arasındaki bağımlılığı azaltmak için güzel bir tasarım desenidir. (Bkz:Loose Coupling)
Bu deseni uygulamak için Ninject ve Microsoft Enterprise Library Unity Application Block ‘dan faydalanabilirsiniz.
Önemli bir nokta ise birbirinin yerine geçecek nesneler aynı interface’den türetilmek zorundadır.

Hemen bir örnek yapalım , Öncelikle genel sınıf ve interface’lerimizin bulunacağı bir class library oluşturuyoruz.
Unity Application Block’u kullanabilmek için Microsoft.Practices.Unity.Configuration.dll ve Microsoft.Practices.Unity.dll ‘lerini UI projemize eklememiz gerekiyor.

 public interface IHesap
    {
        int MusteriNo { get; set; }
        string HesapAdi { get; set; }
        string HesapTipi { get; set; }
        decimal Bakiye { get; set; }
    }

    public class Hesap : IHesap
    {
        public int MusteriNo { get; set; }
        public string HesapAdi { get; set; }
        public decimal Bakiye { get; set; }
        public string HesapTipi { get; set; }
    }

    public interface IHesapProvider
    {
        IHesap HesapTipiGetir();
    }

Daha sonra da run-time de oluşmasını istediğimiz component’ler için 2 adet class library projesi ekleyip içlerine 1er sınıf ekliyoruz.

</pre>
namespace CariHesapLibrary
{
 public class CariHesapProvider : IHesapProvider
 {
 public IHesap HesapTipiGetir()
 {
 Hesap h = new Hesap();
 h.HesapTipi = "Cari Hesap";
 h.Bakiye = 100;
 h.HesapAdi = "HesapAdim";
 h.MusteriNo = 6148976;
 return h;
 }
 }
}
<pre>
namespace DovizHesapProvider
{
 public class DovizHesapProvider : IHesapProvider
 {
 public IHesap HesapTipiGetir()
 {
 Hesap h = new Hesap();
 h.HesapTipi = "Doviz Hesap";
 h.Bakiye = 112;
 h.HesapAdi = "HesapAdim2";
 h.MusteriNo = 154030;
 return h;
 }
 }
}

Daha sonra da artık UI projemizde configden okuduğu değer ile bu 2 component’den birinin sınıfının yaratılmasını sağlayan sınıfımızı yazacağız.


public class HesapUygulama
 {
 private IUnityContainer container = new UnityContainer();

private IHesapProvider hesapProvider;
 public IHesapProvider HesapProvider
 {
 get
 {
 if (hesapProvider == null)
 {
 hesapProvider = container.Resolve<IHesapProvider>();
 }
 return hesapProvider;
 }
 set { hesapProvider = value; }
 }

public HesapUygulama()
 {
 UnityConfigurationSection unityConfig =
 (UnityConfigurationSection)ConfigurationManager.GetSection("hesap_unity");
 unityConfig.Configure(container);
 }

internal IHesap GetHesap()
 {
 return HesapProvider.HesapTipiGetir();
 }
 }

En sonunda bu sınıfı çağırıyoruz.


HesapUygulama uygulama = new HesapUygulama();
 IHesap hesap = uygulama.GetHesap();
 Console.WriteLine(String.Format("HesapTipi:{0} Bakiye:{1}",hesap.HesapTipi,hesap.Bakiye));

UI config ayarı da aşağıda gibi olmalıdır.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <configSections>
 <section name="hesap_unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,
 Microsoft.Practices.Unity.Configuration" />
 </configSections>
 <hesap_unity>
 <containers>
 <container>
 <type type="CommonLibrary.IHesapProvider, CommonLibrary"
 mapTo="DovizHesapLibrary.DovizHesapProvider, DovizHesapLibrary" />

 </container>
 </containers>
 </hesap_unity>

</configuration>

Eğer web.config de bir ayar hatası veya dll’lerde bir referansı unuttuğunuzda eğer unity block oluşturacağı dll leri veya sınıfları bulamazsa aşağıdaki hatayı almanız muhtemeldir.

“The given assembly name or codebase was invalid. (Exception from HRESULT: 0x80131047)”

Umarım faydalı olmuştur.

Ekim 9, 2012 Posted by | C#, Yazılım | , , , , , | Yorum bırakın

Interface Extension Method ve Generic Factory Pattern Örneği.

Aşağıda işime yarayan bir kod örneğini paylaşmak istedim.Öncelikle Extension metodlar nedir kısaca ondan bahsedeyim.Net’in varolan sınıflarına yeni bir method eklemek için kullanılan genişletilebilen metodlardır. Örneğin :

string s = "Extension Deneme";
 s.ToLower();
<pre>

Bu örnekte .NET tarafında tanımlı bir extension metodu kullandık. İşte biz de bu şekilde metodlar .net tiplerine veya kendi oluşturduğumuz sınıf tiplerine uygulayabiliriz. Bu kod örneğimizde bir interface ve ondan türeyecek sınıflar için bir extension metod yapacağız . Ayrıca ekstra olarak da Generic Factory Pattern’ini kullanarak sınıfın create edilmesini sağlayacağız. Yani bir örnekte 2 kuş birden.

Generic Factory Pattern de Generic yapıları kullanarak nesnelerin run time da oluşturulmasını sağlayan bir tasarım desenidir. Nesneler recflection yöntemi ile create edilir.


/// <summary>
/// Generic Factory Pattern
/// Software classes, modules, functions etc. should be open for extension, but closed for modification
/// </summary>
public class Factory<T>
{
    private readonly Dictionary<string, Type> _factoryDictionary = new Dictionary<string, Type>();

    public Factory()
    {
        //Assembly içinde T tipinden bulunan bütün sınıflar bulunuyor ve dictionary'e ekleniyor.
        Type[] types = Assembly.GetAssembly(typeof(T)).GetTypes();
        foreach (Type type in types)
        {
            if (!typeof(T).IsAssignableFrom(type) || type == typeof(T))
            {
                continue;
            }
            _factoryDictionary.Add(type.Name, type);
        }
    }

    public T Create<V>(params object[] args)
    {
        return (T)Activator.CreateInstance(_factoryDictionary[typeof(V).Name], args);
    }
}

public static class ExtensionMethods
{
    public static decimal TotalPrices(this IEnumerable<IProduct> productEnum)
    {
        decimal total = 0;
        foreach (IProduct prod in productEnum)
        {
            total += prod.ListPrice;
        }
        return total;
    }
}

public class ShoppingChart : IEnumerable<IProduct>
{
    public List<IProduct> Products { get; set; }

    public IEnumerator<IProduct> GetEnumerator()
    {
        return Products.GetEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}

class Program
{
        static void Main(string[] args)
        {
            Factory<IProduct> factory = new Factory<IProduct>();
            factory.Create<Product>(null);
        }
}

Ekim 8, 2012 Posted by | C#, Yazılım, İpucu | , , , , | 2 Yorum

MVC – Avantajları (3)

MVC mimari deseni Microsoft’un  çıkardığı yeni bir anlayış değil, kökleri taa 1978 lere dayanıyor.( Smalltalk project Xerox PARC) . Bu kadar popüler olmasının sebebi ise ; doğal akıştaki gibi hareket etmesi ; http request ve response yapısı.
1-) MVC Viewstate kullanmadığı için giden-gelen mesajların boyutu küçülüyor.
2-)Uygulama Model-View-Controller şeklinde bölündüğü için kod karmaşasanın önüne geçilir.
3-)FrontController tasarım deseni sayesinde bütün istekler merkezi bir controller tarafından yönlendirilebilir.
4-)Test Driven Development desteği hat safhadadır.
5-)Takım çalışması için ideal bir yapı sunar. Ayrıca tasarımcı ve developer’ın ayrı çalışabilmesine olanak sağlar.
6-)Güçlü routing yapısı sayesinde arama motorları tarafından kolayca indekslenebilir ayrıca daha anlaşılır bir url çıktısı elde edilir.
7-)ASP.NET’in güçlü taraflarını kullanmaya devam ediyor. Örneğin .NET platformunun kod yazmadaki kolaylığı ,master page,authentication mekanizması, server kontrolleri vs.
8-)Open Source olması. Kodunu http://aspnet.codeplex.com linkinden indirebilirsiniz.
9-)Browser uyumluluğu daha iyi.

Ekim 5, 2012 Posted by | MVC | , , | Yorum bırakın

MVC – Günümüzde Web Yazılım Geliştirme (2)

Web forms release olduğu günden bu yana web geliştirme teknolojileri Microsoft dışında da hızla ilerlemeye devam etti. Son yıllarda web standartları uyumu için  web browser ,HTML,CSS ve javascripte birçok gelişmeler oldu.
İşte bu arada da Representational State Transfer (REST) uygulama uyumluluğu anlamında baskın mimarilerden biri olmaya başladı. REST uygulamayı bir kaynak(URI) olarak tanımlar ve bu yapı arama motorları tarafından indekslenebilmeyi sağlar.
Bugünün web uygulamaları sadece HTML olarak servis edilmiyor , bunun yanında JSON veya XML data olarak da servis ediliyor.(AJAX,Silverlight,smartphone uygulamaları). Bu REST tarafından doğal olarak yapılabiliyor.
Son zamanlardaki çevik yazılım geliştirme (Agile ) metodolojileri bir çok yeni kavram hayatımıza soktu. TDD : Test-Driven Development, BDD: Behavior-Driven Development vs. Buradaki konseptimi asp.net web formlarda unit test yapmak neredeyse imkansızdı ancak MVC birim testler kolaylıkla yapılabiliyor. Bunun dışında UI test araçları içinde MVC oldukça kullanışlı çünkü page layout u değiştirince bütün html id leri değişmiyor. Web forms da ise page layout da bir değişiklik yapıldığında id ler değiştiği için test aracını tekrar düzenlemek gerekiyor.
Open source ve Independent Software Vendor (ISV) community’si  ALT.NET çatısı altında bir çok araç üretiyor ve hemen hemen hepsi MVC’ye destek veriyor.
ALT.NET : Nisan 2007’de David Laribee ‘nin ortaya atılmış bir terimdir. Java dünyasından esinlenilerek oluşturulan .net platformunun özgür topluluğudur denilebilir. “Basitlik”, “Birlikte çalışma” ve “Hizmet” kavramları üzerinde durulur. Detaylı bilgiyi : http://analystdeveloper.com/blogs/gurkan/archive/2008/09/26/3551.aspx sitesinden elde edebilirsiniz.
Örneğin ;
–  Unit testing frameworks (NUnit and xUnit)
– Mocking frameworks (Moq and Rhino Mocks)
– Inversion-of-control containers (Ninject and AutoFac)
– Continuous integration servers (Cruise Control and TeamCity)
– Object-relational mappers (NHibernate and Subsonic)

Japonya’da geliştirilen Ruby isimli bir programlama dili MVC’nin altyapısına ilham kaynağı oldu . Ruby platform bağımsız her yerde çalışabildiği için bir çok web programcısı bu dili projelerinde kullanılır oldu ve bir anda çok popüler hale geldi.

Sinatra isimli bir kütüphane ile Ruby ile kod yazmak kolaylaştırılmış.

Bir diğer konu ise Node.js(Javascriptin server tarafında çalışan versiyonu). Bunun sayesinde sistem kaynakları verimli çalışabiliyor. Client’dan istek alınıyor ve gönderiliyor. Server tarafında iş bittiği anda cevap dönüyor böylece thread beklemiyor. (Javascript callback)

Ekim 4, 2012 Posted by | MVC | , , , , , , | Yorum bırakın

ASP.NET Web Forms’dan MVC’ye Geçiş (1)

Arkadaşlar merhaba, MVC hakkında bir kaç makale serisi yazma niyetindeyim fırsat buldukça.  Bu yazıda öncelikle MVC’ye kısa bir giriş yapacağız. Öncelikle .net web geliştiricileri için MVC’nin radikal bir geçiş olduğunu belirtmek isterim. Öncelikle MVC temiz mimari, tasarım desenleri ve test edilebilirlik üzerinde duruyor. ASP.NET MVC ,asp.net web sayfalarının tam olarak bir alternatifi diyebiliriz, MVC çevik programlamanın ve asp.net in iyi taraflarını harmanlamış bir yapıdır. ASP.NET ilk çıktığında amacı kullanıcıyı HTML ve state’less yapısından kurtararak windows programlama mantığına yakın bir kodlama rahatlığına kavuşturmaktı. Bunun için server-side kontrolleri hazırladı ve VIEWSTATE ile state’leri yönetebilir hale geldi. Örneğin butonun click eventini .cs uzantılı dosyada yani server tarafında handle edilebilir hale geldi.
Peki Microsoft neden böyle bir yapı kurmaya kendini mecbur hissetti dersiniz. Öncelikle 2002 yılında piyasaya sürülen Web Forms 1.0’ın eksilerine şöyle bir göz atalım.
1- ViewState’in ağır olması : Her ne kadar bir avantaj gibi olsa da veri büyüdükçe client ile server arasında gidip gelen verinin boyutu 100lerce kilobyte’ı bulabiliyor.

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTc1MDU0Nzg9Tkt2Gz2HkU/i" />

2-Karmaşık Page LifeCycle : Bir çok yazılımcı tam olarak bu yaşam döngüsünü kavrayamadığı için yazdıkları kodlarda beklemedikleri hatalarla karşılabiliyorlar.(bkz:page life cycle)
3- Kavramların mantıksal olarak doğru ayrılmamış olması, yani kod ile html’i birbirinden tamamen ayırmaya çalışması ancak bunun pratikte zor olması.
4- HTML üzerinde hakimiyet kurulamaması : En basitinden javascript ile kontrollere saçma ek isimler eklenerek ulaşılabilmesi.
5-Zayıf abstraction
6- Zor test edilebilirlik.

Tabi Microsoft durmadı çalıştı 2005 yılında 2.0 ‘ı çıkardı, 2007 de zeygin user interface Web 2.0/AJAX  akımına kapılarak AJAX’ı piyasaya sürdü. Daha sonra da 4.0 ile developerların hayatını kolaylaştırmaya devam etti. Ancak hala web form ların limitleri vardı.
Devam edecek ….

Ekim 4, 2012 Posted by | MVC | , , , , , | Yorum bırakın

Webrazzi Summit 2012

Arkadaşlar Bu etkinlik bugün (4 Ekim 2012) de başlıyormuş. Güzel konu ve kişiler var ama biletler baya pahalı .

08:00 – 09:00 KAYIT ve KAHVELER
09:00 – 09:15 AÇILIŞ
09:15 – 09:30 Arda Kutsal (Webrazzi)
Tümay Asena (Nokta)
09:30 – 09:45 Dünya Dün Değişti, Şimdi Sizin Sıranız Efe Çakarel (MUBI)
09:45 – 10:00 Soner Canko ile Söyleşi (BKM)
10:00 – 10:15 Hanzade Doğan Boyner ile Söyleşi (Doğan Online)
10:15 – 10:30 Aydın Şenkut ile Söyleşi (Felicis Ventures)
10:30 – 11:00 KAHVE ARASI
11:00 – 11:15 Yakın ve Sıcak Pazarlar: MENA vs Türkiye
Moderatör: Arda Kutsal (Webrazzi)
Moderatör: Nina Curley (Wamda)
Habib Haddad (Wamda)
Nevzat Aydın (Yemeksepeti)
Omar Christidis (ArabNet)
Facebook’ta Pazarlamanın Gücü
Doğa Öztürkcan (Facebook)
Gökmen Karasu (Facebook)
Lisya Alalu (Facebook)
İnsan Bulutundan Şirket Kurmak ve Sürdürebilmek
Kjetil Olsen (Elance)
Yandex Haritalar ve Arama API’si
Serhad Akkoç (Yandex.Türkiye)
11:15 – 11:30 LinkedIn Türkiye Stratejisi
Ali Rıza Babaoğlan (Linkedin)
Mehmet Taha Doğruyol (Linkedin)
11:30 – 11:45 Dünyanın En Sıcak İnternet Pazarları: Brezilya vs Türkiye
Moderatör: Allen Kinsey Taylor (Endeavor)
Anderson Thees (Redpoint e.ventures)
Eric Acher (Monashees Capital)
Cem Sertoğlu (Earlybird Ventures)
Numan Numan (212 Limited)
Televizyonun Geleceği: İnteraktif ve Kişisel
Kemal Altıntaş (LG)
Önlenemeyen Bir Müşteri Davranışı: Arama
Deniz Utku (Teknokrasi)
11:45 – 12:00 Mobil Sosyal Oyun Pazarı ve Fırsatları
Moderatör: Ümit Öncel (Webrazzi)
Akın Babayiğit (Facebook)
Rina Onur (Peak Games)
Erol Nahmias (Fugo)
12:00 – 12:15 Türkiye E-Ticareti’nin 5 Gerçeği
Philippe Botteri (Accel Partners)
Workshop: İnteraktif Stratejiler
Serhad Bolukçu (Facebook)
Sosyal Medyada Uygulama Kiralama Modelleri
Alper Özdemir (Krombera)
12:15 – 12:30 IoT = Donanım Odaklı Girişim Fırsatları
Rob Coneybeer (Shasta Ventures)
Oyuniçi Reklam: Oyunlar Reklam için Nasıl Kullanılabilir?
Kader Kutun (Netcom Medya)
12:30 – 12:45 İnternet dünyayı değiştirdi. Peki şimdi?
Ali Dağlı (GP Bullhound)
Mobil’in Gücü
Ciaran Quilty (Facebook)
12:45 – 13:00 İki Yılda Global bir Oyun Şirketi Olmak!
Sidar Şahin (Peak Games) ile Söyleşi
13:00 – 14:00 ÖĞLE YEMEĞİ
14:00 – 14:15 Neden Oyunlar Yeni Büyük İştir ve Neden Türkiye Anahtar Pazar?
Alexis Bonte (eRepublik)
Platformda Öne Çıkanlar
Barış Yesugey (Facebook)
Mert Canlı (Facebook)
Sayılar Önemlidir!
Lauris Lietavietis (Gemius)
Yeni Nesil Tüketiciyi Düşünmek: Omni Kanal Stratejisi
Deniz Güven (Garanti Bankası)
14:15 – 14:30 Dijital Müziğin Geleceği
Axel Bringéus (Spotify)
Türkiye ve Global Pazarlar için Online Video Gerçekleri, Trendler ve Gelecek Öngörüleri
Mike Read (comScore)
Yükselen Ödeme Alternatifleri: Başarılı bir Online İş için İpuçları
Alper Akcan (3pay | Mikro Ödeme)
14:30 – 14:45 Yeni büyük İŞ!
Barış Aksoy (Intel Capital) ile Söyleşi
Video Reklamın Gerçek Değeri
Başar Ekim (Nokta)
Şimdiki gelecek zaman: Mobil
Sertan Eratay (Turkcell)
14:45 – 15:00 New York ve San Francisco Girişimcilik Ekosistemi
Jason Kincaid (ex-Techcrunch) ile Söyleşi
Facebook’ta Sayfa, Platform ve Promosyon Politikaları
Serden Eren (Facebook)
Real Time Bidding (RTB) – Dijital Reklamın Devrimi
Frank Colmsee (coAdvertise)
M-Ticaret: Tüketimin Geleceği
Erkan Taş (Turkcell)
15:00 – 15:15 Gerçek Zamanlı Veriyi Doğru Şekilde Kullanmak!
Tony Haile (Chartbeat)
RTB Teknolojisinin Türkiye’de ki Yayıncı ve Reklam Verenlere Sağlayacağı Faydalar
Bertan Doğusoy (iBillboard)
Cüzdansız Gelecek
Rudi Dökmecioğlu (tmob)
15:15 – 15:30 ‘Cloud’da Yaşamak
Tariq Krim (Jolicloud)
Facebook Takımı ile Soru Cevap “Gelecekte Conversion” ve Gelen Ziyaretçileri Müşteriye Dönüştürmenin Sırları
Carsten Kraus (FACT-Finder)
Erol Yöndem (FACT-Finder)
E-ticarete Hızlı ve Güvenli Başlangıçta Ödeme Sistemleri
Y. Emre Güzer (PayU)
15:30 – 15:45 Türkiye İnternet Dünyasına Kuşbakışı Bakmak
Erhan Erdoğan (Yandex.Türkiye)
15:45 – 16:15 KAHVE ARASI
16:15 – 16:45 Kickstarter’dan 10 Milyon Dolar Nasıl Toplanır?
Eric Migicovsky (Pebble) ile Söyleşi
16:45 – 17:00 Günümüz Trendleri E-Ticaret’in Geleceğini Nasıl Şekillendiriyor.
Alexis Maybank (Gilt)
17:00 – 17:15
17:15 – 17:30 E-Ticaret’te Finansal Yönetim, Büyüme ve Yerelleştirme
Moderatör: Melek Pulatkonak (Microsoft Türkiye)
Alexis Maybank (Gilt)
Amy Jain (Baublebar)
Demet Mutlu (Trendyol)
17:30 – 17:45
17:45 – 18:00 Etkileşim için Oyna: Sosyal Oyunların Gücü
Mateo Graziosi (Zynga)
18:00 – 18:15 LinkedIn: Profesyonel İş Dünyasını Birbirine Bağlamak
Emma Baird (LinkedIn)
18:15 – 18:30 Sosyal Pazarlamanın Sırları – Türkiye’ye Özel Verilerle Global ve Yerel Pazarlarda Yapılması Gerekenler
Jan Rezab (Socialbakers)
18:30 – 18:45 KAPANIŞ

Ekim 4, 2012 Posted by | Etkinlikler | , , , , , , , , , | Yorum bırakın