3 Ekim 2012 Çarşamba

Bilgisayarınızı TV gibi izlemek ister ve ekran klavyesini bir daha kapatamazsanız

Bilgisyarımdan izlemek istediğim dizilerimi koltuğumda rahat rahat yayılarak dev ekranımda izlemek istiyorum diyorsunuz. Bunun için size gereken laptopınızı TVnize bağlamanıza yardımız bir kablo, bir kablosuz heryerde çalışan mouse(A4Tech padless mouse'unu tavsiye ederim, her zeminde  çalışıyor), ve de bilgisayarınıza internet adresini girebilmeniz için ekran klavyesi.


Ekran klavyesini windows giriş (log-in) ekranından direkt açabilirsiniz. Ama asıl sorun bunu kapatabilmekte :)
Her ne kadar kapat desenizde ekran klavyesi devamlı her açılışta yeniden belirmeye devam ediyor.
Kapatmayı gerçekleştirmek için öncelikle
Başlat>Denetim Masası>Erişim Kolaylığı Merkezi>altta Bilgisayarı Faresiz ve Klavyesiz kullan seçeneğinden ''Ekran Klavyesini Kullan'' ifadesinin yanındaki tik'i kaldırmak ve kaydetmek...

ArrayList ler mi List<> ler mi daha performanslı?

Verileri taşımak için kullandığımız liste yapılarında her zaman ArrayList'lerin mi yoksa List'lerin mi daha performanslı olduklarını düşünürdüm. Web uygulamalarında zaman ve yüklenme sıkıntılarını yaşamamak için her zaman dikkat etmemiz gereken performanlı kod yazımında hangisi daha avantajlı denemek için bazı testler yaptım.
Test sonuçları aşağıdaki gibi:

  • Öncelikle eğer kullanma durumunuz varsa mutlaka ikisinden birini kullanın. Bu şekilde elinizdeki verileri taşımak hem daha kolay hem de bu şekilde gerçekten performans elde ediyorsunuz. Ama sonuçta ikisi arasında önemli bir performans farklılığı bulunmuyor.
  • Taşınacak veri valuetype ise (Int32 gibi sayısal veriler) ArrayLists yüksek verilerde yavaşlık gösteriyor. Milyonlarca kayıtla uğraşıyoranız List<int> kullanmak daha yararlı olabilir.
  • Reference-type verilerde (string gibi) yine List<string> daha performanslı çıktı. Ama bu performans farklılıkları 8 milyon kayıtta 100 milisaniye gibi yani elinizdeki ArrayListleri List'e dönüştürmeye değmeyecektir. Yeni başlangıçlarda List kullanmayı düşünebilirsiniz. 
  • Tanımlama yaparken her ikisi için de ilk uzunluk değeri atayabiliyorsanız yapmanız yararlı oluyor.

  • ;)

     

    10 Ağustos 2012 Cuma

    Web sitesinde çoklu dil desteği - Global Resources dosyaları

    Eğer web siteniz veya internet uygulamanız çoklu dil desteği vermek durumunda ise size de Global resource dosyası oluşturmaktan başka çare kalmıyor.

    1- Öncelikle projenizde App_GlobalResources isimli bir dosya oluşturmalısınız.

    2- İçine Add->Resources File ile resx uzantılı yeni bir dosya oluşturun. Bu dosya açıldığında değeri ve karşılık gelecek değeri girebileceğiniz alanlar göreceksiniz. Örnek için bir iki tane doldurun. Mesela "TamamButonu" değeri "Tamam" olsun.
    Diyelim resx dosyasına WebResources.resx adını verdik.

    Bu da örnek bir resx dosyası


    3- Aynı dosyadan başka diller için de oluşturduğunuzda, otomatik browserın dili değiştiğinde uygulamanız o dile ait resx dosyasını kullanmaya başlayacak. Otomatik değişimin sağlanması için unutmadan Web.config dosyasının içine de 1 satır kod eklemeliyiz.
    <system.web> içine
           <globalization culture="auto" uiCulture="auto" /> 
    4- Dil desteği için oluşturulan dosyanın adı örneğin ingilizce için
    WebResources.en-US.resx   şeklinde oluşturulmalıdır. Diğer diller için de başka dosyalar oluşturabilirsiniz.

    5- aspx sayfasında kullanıma geldik bile. Aşağıdaki kullanım ile de oluşturduğumuz bir butona yazı hanesinde kaynak dosyamızdaki değeri getirmesini bildirdik.
    <dx:ASPxButton ID="butGiris" runat="server" OnClick="butGiris_Click"
    Text="<%$ Resources:WebResources,TamamButonu%>" />

    Bu kadar kolay :)

    8 Haziran 2012 Cuma

    Pahalı yazılımlara, bedava açık kaynak kodlu rakip uygulamalar

    Bildiğiniz gibi pekçok programın fiyatlandırmaları, Türkiye'de küçük işletmeler için ezici olabiliyor. Profesyonel kullanım yapılmayacak uygulamalara, firmaların ücret ödemesinin yersizliği de, yatsınamaz bir gerçek.  Çoğu zaman profesyonel kullanımlarda bile uygulamaların belli bir bölümü iş görmeye yetiyor. Open_source yani açık kaynak kodlu bedava yazılımlar için dikkat etmemiz gereken tek noktada bu, deneyerek görebileceğiniz, işimi çözmeme yetiyor mu?
    Sizlerle bir derlemeden aldığım uygulamaların muadilleri listesini paylaşmak istiyorum, böylece belki hiç ihtiyacınız olmayan yazılım yatırımları yapmanıza gerek kalmayacaktır.
    MUHASEBE PROGRAMLARI
    1. QuickBooks Pro yerine kullanabileceğiniz programlar
      1. Mac için Edoceo Imperium ,FrontAccounting
      2. Windows için TurboCASH
      3. Linux için XIWA
    MÜZİK KAYIT/DÜZENLEME PROGRAMLARI
    1. FL Studio Producer Edition ,Apple LogicPro yerine kullanabileceğiniz programlar
      1. Mac için Audacity ,Frinika ,
      2. Windows için Audacity ,Linux MultiMedia Studio
      3. Linux için Audacity ,Linux MultiMedia Studio
    İŞ ZEKASI PROGRAMLARI(Business Intelligence)
    1. Oracle Business Intelligence Standard, SAP Crystal Reports, DBxtra yerine kullanabileceğiniz programlar
      1. Mac için Pentaho , Jaspersoft, Palo BI Suite, OpenReports , JMagallanes
    İŞ AKIŞLARI/SÜREÇ YÖNETİMİ DÜZENLEME (Business Process Management)
    1. Oracle Business Process Analysis Suite  yerine kullanabileceğiniz programlar
      1. Windows için ProcessMaker
      2. Linux için ProcessMaker
    CAD PROGRAMLARI
    1. AutoCAD yerine kullanabileceğiniz programlar
      1. Tüm işletim sistemleri için BRL-CAD, Archimedes
    MÜŞTERİ İLİŞKİLERİ YÖNETİMİ PROGRAMLARI(CRM)
    1. Sage ACT! , Microsoft Dynamics yerine kullanabileceğiniz programlar
      1. Mac için Sugar Community Edition
    VERİTABANLARI
    1. Microsoft SQL Server Standard , Microsoft Office Access 2010 yerine kullanabileceğiniz programlar
      1. Mac için 
      2. Windows için
      3. Linux için
      4. Hepsi için Firebird, MySQL, Kexi(MS Access)
    BASILI EVRAK TASARIM PROGRAMLARI
    1. QuarkXPress , InDesign CS5 yerine kullanabileceğiniz programlar
      1. Hepsi için Scribus
    UYGULAMA GELİŞTİRME ARAYÜZLERİ(Development Tools)
    1. Microsoft Visual Studio 2010 Professional with MSDNAdobe ColdFusion 9 yerine kullanabileceğiniz programlar
      1. Windows için SharpDevelop, , Open BlueDragon (ColdFusion için)
      2. Hepsi için MonoDevelop , KDevelop
    EMAİL PROGRAMLARI
    1. Microsoft Exchange yerine kullanabileceğiniz programlar
      1. Linux için Zimbra , Citadel
    ÜRETİM YÖNETİMİ PROGRAMLARI (ERP)
    1. Microsoft Dynamics, SAP yerine kullanabileceğiniz programlar
      1. Mac için Openbravo , ADempiere , Phreedom
      2. Windows için OpenERP , ADempiere
      3. Linux için OpenERP , ADempiere
    ÇİZİM PROGRAMLARI
    1. Visio Professional , Photoshop CS5 yerine kullanabileceğiniz programlar
      1. Windows için  Gimp-win, Dia(Visio), Paint.Net
      2. Linux için Gimp , Dia(Visio)
      3. Hepsi için Illustrator , CorelDraw yerine Inkscape

    30 Mayıs 2012 Çarşamba

    Mobil uygulamalarınızın iphone uygulaması gibi gözükmesi artık çok kolay

    http://www.iui-js.org/ adresinden indireceğiniz framework ile mobil uygulamalarınızı sadece html ile ile tıpkı bir iphone uygulaması gibi gözükmesini sağlayabilirsiniz. Uygulamanızda istediğiniz kodu javascript, css veya html eklemeleri de yapabilirsiniz.

    28 Mayıs 2012 Pazartesi

    Seminer Duyuruları

    Network semineri :
    - Hitachi Data Systems ile ilgili güncel bilgiler.
    - Brocade Hoşgeldiniz Konuşması.
     
    Sapphire Plaza : 16:30-21:30 arasında
     
    ---------------------------------------
     
    Yeni Türk Ticaret Kanununun Bilişim dünyasına getirdikleri ve etkileri
     
    Istanbul Ticaret Odası : 10:00 - 15:00 arasında 
     

    23 Mayıs 2012 Çarşamba

    C# da "Forms Authentication" ile uygulamalar arası geçişler ve yetkilendirmeler

    Uygulamalarınızın arasında tek bir giriş(login) ekranından giriş yapıp, geçişler yapmanız için yapmanız gerekenler çok basit.
    1- Web.config dosyasında gerekli ayarları yapmak
    2- Uygulamalarınızın aynı makina üzerinde olduğundan emin olmak.
    3- Her uygulamanızda aslında bir giriş sayfasına sahip olmak

    Gelelim web.config dosyasındaki yapılacak düzenlemelere
    1.1 - Gelen genel kullanıcılar kısıtlayalım

      <system.web> içindeki alandaki authorization alanına tüm genel kullanıcıları yasakladığınıza dair aşağıdaki kodu ekliyoruz.
        <authorization>
          <deny users="?" />     
        </authorization>


    Eğer herkese izin vermeniz gerekirse burayı boş geçebilirsiniz
        <authorization/>

    1.2 - Uygulamada genel kullanıcılara izin verilecek dosyalara ve dökümanlara karar vermelisiniz veya bazı rollere izin giriş için izin verecek olabilirsiniz. Bunları <system.web/> den sonra location alanlarında belirleyebilirsiniz. Herkesin sitenize girmesini engellediyseniz, en azından giriş sayfasındaki resimlerin ve giriş sayfasının girişe açık olması gerektiğini hatırlayın.

    <location path="image">
        <system.web>
          <pages theme="Office2003Blue">
          </pages>
          <authorization>
            <allow users="*" />
          </authorization>
        </system.web>
      </location>


     Eğer bazı kullanıcılara veya rollere uygulamayı açacaksanız, aşağıdaki gibi ayarlamaları yapmalısınız.
    <location path="IKSayfalari">
      <system.web>
        <authorization>
          <allow roles="IK" />
          <deny users="*" />
        </authorization>
       </system.web>
    </location>


    Bu rolleri tabii ki authentication cookie içinde tanımlamanız gerekiyor. Buraya bir parantez açıp bunu da ekleyeyim.

     FormsAuthentication.SetAuthCookie(kullaniciAdi, false);
     FormsAuthenticationTicket ticket1 = new FormsAuthenticationTicket(
                     1,                                                          // versiyon
                     this.TextBox_username.Text.Trim(),   // kullanıcı adı
                     DateTime.Now,                                    // şimdiki zaman, cookienin oluşturulduğu zaman
                     DateTime.Now.AddMinutes(10),         // 10 dakika sonra cookie etkisiz kalacak
                     false,                                                    // cookie persistent değil
                     "IK"                                                    // içinde tutulacak kullanıcı rolü                
                     );
              HttpCookie cookie1 = new HttpCookie(
                FormsAuthentication.FormsCookieName,
                FormsAuthentication.Encrypt(ticket1) );
              Response.Cookies.Add(cookie1);


    Şimdi sıra geldi her uygulamada aynı tanımlamanız gereken machine key alanını eklemeye

      <authentication mode="Forms">
          <forms name="UygulamayaAitFormAlani" loginUrl="index.aspx" cookieless="UseCookies" protection="All" timeout="30" slidingExpiration="false" enableCrossAppRedirects="false" requireSSL="false" />
        </authentication>
        <machineKey validationKey="BurayaBirKeyBelirliyorsunuz" decryptionKey="BurayadaBirÇözücüKeyBelirliyorsunuz" validation="SHA1" />
      
    Bu alandaki değerleri geçiş sağlayacağınız her uygulamada aynı tutuyorsunuz.
    Test yapabilirsiniz, kolay gelsin :)

    22 Mayıs 2012 Salı

    İpad'de screenshot anlık ekran görüntüsünü kopyalamak

    Aynı anda ana ekrana dönüş ve açma/kapama düğmesine basarsanız, ekranınızdaki anlık görüntüyü fotograflar klasörünüze kaydetmiş olursunuz.


    Yani varolan iki düğmeye aynı anda basmanız tek yapmanız gereken :)

    22 Nisan 2012 Pazar

    CheckboxList içine değer atama ve seçilenleri alma işlemi

    protected void butYetkileriGoster_Click(object sender, EventArgs e)
    {
    DataTable dt = new DataTable();
    dt.Columns.Add("YetkiliOlduguAlan");

    const string str = "deneme{0}";
    for(var i=1;i<=10;i++)
    {
    dt.Rows.Add(
    new object[] {string.Format(str, i)});
    }
    cbListYetkiler.DataSource = dt;
    cbListYetkiler.DataTextField =
    "YetkiliOlduguAlan";
    cbListYetkiler.DataBind();

    }


    protected void butYetkileriGuncelle_Click(object sender, EventArgs e)
    {
    string secilenListeDegerleri= cbListYetkiler.Items.Cast<ListItem>().Where(item => item.Selected).Aggregate("", (current, item) => current + (item.Text + ", "));
    // txtP.Text = secilenListeDegerleri.TrimEnd(new[] {',', ' '});
    }

    27 Mart 2012 Salı

    SQL de Case When yapısı kullanımı

    SELECT ADI, SOYADI,
    CASE
        WHEN MEDENIHALI = 1 THEN ‘EVLİ’ 
        WHEN MEDENIHALI= 2 THEN ‘SULTAN’
    ELSE ‘BOS’
    END AS MEDENIHALI
    FROM TABLOM

    20 Mart 2012 Salı

    Sayfada sadece istenen bir alanı yazdırmak(print ) etmek için javascript

    <script language="JavaScript">
        function birAlaniYazdir() {
            var basilacakIcerik= document.getElementById('ALANI_TANIMLAYAN_AD').innerHTML;
            var orjinalSayfa= document.body.innerHTML;
            document.body.innerHTML = basilacakIcerik;
            window.print();
            document.body.innerHTML = orjinalSayfa;
        }

        //VEYA

    function gorunumAyarla() {
            var obj = document.getElementById('ALANI_TANIMLAYAN_DIV_ADI').innerHTML;
            if (obj.style.visibility == 'hidden')
                obj.style.visibility = 'visible';
            else       
                obj.style.visibility = 'hidden';     
                }
    </script>

    Bu da HTML içinden javascripti çağıracağınız tuş kodu örneği.

    <input type=button onclick="birAlaniYazdir()" style="width: 97px" />


    İlk kodda bir panel veya div adını ALANI_TANIMLAYAN_AD  yerine yazıyorsunuz ve bu alanı görünür, geri kalanını görünmez kıldığı anda print işlemi yapılmış, gereksiz hiçbirşey basılmamış oluyor. Daha sonra kod sitenizi orijinal haline geri döndürüyor. Kullanıcı birşey hissetmiyor ve gereksiz hiçbirşey basılmamış oluyor.

    İkinci fonksiyon kodunda ise (gorunumAyarla) bir alan görünmez kılınıyor ama internet explorerda bazen sorun oluyor ve geri kalan görünmez alan boş sayfa olarak yine de printera yollanıyor yani ilkini kullanmanızı tavsiye ediyorum.



    13 Mart 2012 Salı

    Visual Studio 11 Beta versiyonu yüklenmeye hazır

    Aşağıdaki link ile Beta sürümü yükleyip, framework 4.5 ile yeniliklerle geliştirme yapmaya başlayabilirsiniz. Denemekde yarar var :)

    http://www.microsoft.com/visualstudio/11/en-us/downloads#vs

    Yeni Ticaret Kanunu ve internet siteleri

    Yeni Ticaret Kanunu’na göre bir web sitesi nasıl olacak?
    Hangi bilgileri içerecek?
    Olması gereken şeyler neler?
    Farklı sektörlerdeki farklı şirketlere yapılan çalışmalarda ne tür ek bilgiler olacak?

    Yeni Türk Ticaret Kanunu yürürlüğe girdi. Modern ihtiyaçlara uygun bir ticaret kanunu olması planlandı ve ne kadar başarılı oldu zamanla görülecek.

    Bana sorarsanız, yeni kanun rekabete uygunluk kriterlerini Türkiye için oldukça ihlal edecek gibi, zira internet sitenizde artık 3 yıllık mali tablolarınızı göstermek zorundasınız. Bu rakiplerinize ve müşterilerinize belki de hiç göstermek istemediğiniz bir yüzünüzü inceleme fırsatı sunacak. Şirketlerin mali tablolarının listelenmesi ile, batmaları da bir hayli kolaylaşacak gibi. Bunun dışında şirketlerin ortaklarının da listeleniyor olması, organizasyon şemalarının yayınlanması cabası.
    Dediğim gibi zaman içinde göreceğiz. Bu yazının amacı ise Temmuz 2013'e kadar düzenlenmesi zorunlu olan internet sitelerinde olması gerekenleri listelemek. 

    Sitede Olması Gerekenler;
    • Şirketin tam ve resmi ünvanı, (Ticaret Sicil Gazetesi’nde yazan ünvan tam olarak yazılacak)
    • Şirketin kuruluş tarihi,
    • Kurucular ve ortaklar (hisse payları dahil)
    • Yetkili Müdürler (Yönetim Şeması)
    • Bağlı bulunduğu ticaret odası, ticaret sicil numarası,
    • Bağlı bulunduğu vergi dairesi ve vergi numarası,
    • Sermaye yapısı, şirketin ortaklarının ne kadar hisseye sahip olduğununun belirtilmesi,
    • 3 Yıllık mali yapı. Bilançolar, mali veriler.

    17 Şubat 2012 Cuma

    SQL de string formatlama ve kolonları birleştirme

    Diyelim birleştirmeniz gereken birden fazla kolon veriniz var.
    Sql sorgunuzda bu birleştirmeleri direkt yaparak veriyi bütün halinde alabilirsiniz

    SELECT (Trim(ADRES1) || ' ' || Trim(ADRES2) || ' ' || Trim(ADRES3) || '' || Trim(ILCE) || '/' || Trim(IL)) ADRES FROM MUSTERI_TABLOSU

    VEYA

    SELECT CONCAT(CONCAT(CONCAT(CONCAT(ADRES1,ADRES2),ADRES3),ILCE),IL) AS ADRES
    FROM MUSTERI_TABLOSU

    Sorgularındaki gibi birleştirmeleri yöntemlerini deneyebilirsiniz. İlk yöntem kolonlardan sonraki boşlukları silmenizide sağladığı için kesinlikle tercih edilen yöntem olacaktır çünkü genelde tablolardaki verilerimiz temiz olmuyor.

    Ekranın dışına tıklayınca kapatmak

    Bir linke tıklayıp bir ekranı açmak, ekran dışına tıklanınca da kapanmasını istiyorsanız basit bir javascript kodu ile bunu yapabilirsiniz. İşte bu da kod

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>Tıklanınca aç, dışına tıklanınca kapat</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9">
    <meta http-equiv="Content-Style-Type" content="text/css">
    <meta http-equiv="Content-Script-Type" content="text/javascript">
    <style type="text/css">
    <!--
    #mydiv{
        background-color: #999999;
        height: 100px;
        width: 100px;
        display:none;
    }
    -->
    </style>
    <script type="text/javascript">
    document.onclick=check;
    function check(e){
    var target = (e && e.target) || (event && event.srcElement);
    var obj = document.getElementById('alan');
    var obj2 = document.getElementById('goster');
    checkParent(target)?obj.style.display='none':null;
    target==obj2?obj.style.display='block':null;
    }
    function checkParent(t){
    while(t.parentNode){
    if(t==document.getElementById('alan')){
    return false
    }
    t=t.parentNode
    }
    return true
    }
    </script>
    </head>
    <body>
    <span id="goster" style="cursor:pointer">Alanı Göster</span>
    <div id="alan">
    <table width="50" border="0" cellpadding="2" cellspacing="1" bgcolor="#99FFCC">
    <tr>
    <td>buralara istediginiz yazıları stilleri uygulayabilirsiniz</td>
    <td>e</td>
    </tr>
    <tr>
    <td>rtr</td>
    <td>rty</td>
    </tr>
    </table>
    </div>
    </body>
    </html>

    7 Şubat 2012 Salı

    Bu ilan paylaşılmalıydı, payşalıyorum

    Gerek medeni cesareti, gerek açık yürekliliği, gerek istediğini sade bir vatandaş olarak dile getirmesinden dolayı tam sayfa ilan veren Ali ihsan Dönmez isimli beyefendinin saklamaya değer bulduğum bu gazete ilanını sizlerle paylaşıyorum.

    Kendisini düşüncelerin kısıtlanmak istendiği düşüncesini bu ortamda gazeteden tam ilan vererek haykırmasını da ayakta alkışlıyorum.

    SQL'de Truncate ile Delete arasındaki farklar

    Evet, ikiside tabloları silmek için kullanılan komutlar ama ne farkları var?
    TRUNCATE TABLE ya da DELETE FROM
    1- İlk farklılık truncate ile silme işlemi yaparsanız, veritabanı seviyesinde her silme işleminden sonra LOG tablosunda tutulan loglamayı dar kapsamlı tuttuğu için geri dönüşü olmaz ve bu özelliği ile daha hızlı çalışır.
    2- Truncate komutu ile where koşulu kullanılamaz, rollback yapılamaz.
    3- Truncate alter yetkisine, delete ise delete yetkisine ihtiyaç duyar.
    4- Bu bence en önemli nokta; kullandığınız anahtar alanınızı, otomatik artmaya ayarladığınızda(identity tipindeki kolon) delete ile silme işleminiz sonrası son değerinden devam eder, yani 120 de kaldıysa yeni attığınız kayıt boş tabloya 121 ile atılmaya başlar. Truncate ise tekrar 1'e dönmesini sağlar.

    Bu arada başka tablolar truncate etmek istediğiniz tabloya (ForeignKey) bağlılığı varsa truncate kodunu çalıştıramazsınız, ama derseniz ki truncate etmeden identity alanını sıfırlamak istiyorum, onun yöntemi

    DBCC CHECKIDENT('TABLONUZUNADI', RESEED, 0)

    Umarım bu özet bilgilerin yararı olur ;)