24 Ocak 2014 Cuma

Javascript replaceAll() metodunun yazılması

JavaScript'te kullandığımız replace methodu bir string'de sadece bulduğu ilk eşleşmeyi değiştiriyor. Yani string içerisindeki tüm eşleşen kayıtlar üzerinde bir değişiklik yapmıyor. Tüm string içerisinde değiştirme yapmak için iki method önerilmektedir.
 
Birincisi aramayı Regex kullanarak yapıp, Regex'in ikinci parametresi olarak g (Global) geçmek. Böylece tüm string dizisi içerisinde aradığından bu sorun ortadan kalkıyor. 
Örnek method:
 
function replaceAll(txt, replace, with_this) {
  return txt.replace(new RegExp(replace, 'g'),with_this);

}
 
 
İkincisi ise JavaScript'in string kütüphanesi içerisine kendi replaceAll methodumuzu eklememiz. 
Örnek method:
 
// Replaces all instances of the given substring.
String.prototype.replaceAll = function(

    strTarget,        // The substring you want to replace

    strSubString    // The string you want to replace in.

  ){
 
    var strText = this;
    var intIndexOfMatch = strText.indexOf( strTarget );

 

    // Keep looping while an instance of the target string

    // still exists in the string.

    while (intIndexOfMatch != -1){

        // Relace out the current instance.

        strText = strText.replace( strTarget, strSubString )

         

        // Get the index of any next matching substring.

        intIndexOfMatch = strText.indexOf( strTarget );

    }

     

    // Return the updated string with ALL the target strings

    // replaced out with the new substring.

    return( strText );

}
 
Benim fikrime göre ikincisi kullanmak daha mantıklı çünkü Regex ile yapılacak aramalarda ilk göndereceğimiz parametreyi Regex'in anlayacağı şekilde yollamamız gerektiği için (örneğin "." yollamak için "\." yollamamız gerekli gibi) hem gözden kaçabilir, hem de zorlayıcı olabilir.
 
Kaynaklar:

operation not valid due to the current state of the object hatası ve çözümü

Problem: Sayfadaki html input sayısı 1000 sayısını geçtiğinde HttpValueCollection metodu ThrowIfMaxHttpCollectionKeysExceeded() hata fırlatıyor.

Çözüm olarak :
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="<new value>" /> 
</appSettings>

Bu hatadan kurtulmak için <new value>  1000 den büyük olmalıdır.

Ancak siz bu sayıyı artırmak yerine sayfadaki html input sayısını küçültmeye çalışın.

ASCII Table - C# Konsol Uygulaması

static void Main(string[] args)
{
    Console.WriteLine(GetAsciiTable(128));
    Console.ReadLine();
}
 
public static string GetAsciiTable(int totalChar)
{
    return GetAsciiTable(totalChar, 0, totalChar, " ");
}
 
public static string GetAsciiTable(int totalChar, int startChar)
{
    return GetAsciiTable(totalChar, startChar, totalChar, " ");
}
 
public static string GetAsciiTable(int totalChar, int startChar, int charCountPerRow)
{
    return GetAsciiTable(totalChar, startChar, charCountPerRow, " ");
}
 
public static string GetAsciiTable(int totalChar, int startChar, int charCountPerRow, string seperator)
{
    StringBuilder sb = new StringBuilder();
 
    for (int i = 0; i < totalChar; i++)
    {
        sb.AppendFormat("{0}{1}", (char)(i + startChar), ((i + 1) % charCountPerRow == 0 && i > 0) ? "\r\n" : seperator);
    }
 
    return sb.ToString();
}

ASP.NET Page & Control Life Cycle



Time sync olmayan VirtualPC yaratmak

Elimizde varolan bir image dosyasını, sistem saatiyle sync olmadan çalıştırmak için aşağıdaki adımların izlenmesi gerekmektedir.
 
1.  Image dosyasını C:\Users\<User>\Virtual Machines içerisine kendi ismiyle bir klasör yaratarak kopyalayın. (Bu örnekte image ismimiz XYZ olsun)
2.  C:\Users\<User>\Virtual Machines\XYZ klasöründeki XYZ.vmc dosyasına çift tıklayarak imajınızı çalıştırın.
3.  Image’ınız çalıştıktan sonra sistemi kapatın. Bu işlem sayesinde C:\Users\<User>\Virtual Machines\XYZ.vmcx dosyası oluşmuş olacak.
4.  C:\Users\<User>\Virtual Machines\XYZ klasöründeki dosyaları silip kaynağından tekrar kopyalayın.
5.  C:\Users\<User>\Virtual Machines\XYZ\XYZ.vmc dosyasını notepad ile açıp aşağıdaki satırları ekleyin
 
<bios>
      <time_sync_at_boot type="boolean">false</time_sync_at_boot>
</bios>
 
<integration>
      <microsoft>
            <components>
                  <host_time_sync>
                        <enabled type="boolean">false</enabled>
                        <frequency type="integer">15</frequency>
                        <threshold type="integer">10</threshold>
                  </host_time_sync>
            </components>
      </microsoft>
</integration>
 
6.  Aşağıdaki scripti script.vbs olarak kaydedin ve komut satırından cscript script.vbs "XYZ" komutuyla çalıştırın.
 
'Title: Script to disable timesync for a VM.
 
'Usage: cscript ScriptName <vmname>
Set objVPC = CreateObject("VirtualPC.Application")
 
'Get virtual machine name from command-line parameter
Set objVM = objVPC.FindVirtualMachine(WScript.Arguments(0))
 
'Disable TimeSync During Boot Time
errReturn  = objVM.SetConfigurationValue("hardware/bios/time_sync_at_boot",false)
 
'Get object for GuestOS
Set objGuestOS =objVM.GuestOS
 
'Disable TimeSync During VM Execution
objGuestOS. IsHostTimeSyncEnabled = false
 
7.  XYZ.vmcx ile VirtualPC’nizi çalıştırabilirsiniz, artık sistem saati ile senkronize olmayacaktır.

MSSQL Replication

Sql Server aşağıdaki üç tip çoğaltmayı destekliyor:
  • · Transactional replication
  • · Merge replication
  • · Snapshot replication

Ana veritabanına Publisher, dağıtılacak veritabanlarına ise Subscriber diyoruz.

Transactional replication
Bu çoğaltma yöntemi veritabanındaki objelerin ve dataların snapshot’ının (birebir görüntüsünün) alınmasıyla başlıyor. Snapshot alındıktan sonra Publisher veritabanında oluşan data değişiklikleri ya da şema değişiklikleri anında (çok kısa bir gecikmeyle) Subscriber veritabanına dağıtılıyor. Publisher veritabanında oluşan data değişiklikleri Subscriber veritabanına aynı sırayla ve aynı transaction’larla dağıtıldığı için transaction tutarlılığı garanti ediliyor.

Bu replication yöntemini kullanmak aşağıdaki senaryolar için kullanışlı:
. Publisher veritabanında oluşan değişikliklerin yapıldığı haliyle Subscriber veritabanında olmasını istiyorsanız
. Publisher veritabanı ile Subscriber veritabanı arasındaki farkın minimum olmasını istiyorsanız
. Örneğin bir satır beş defa değiştiyse, son halinin değil de tüm 5 değişikliğin de sırasıyla Subscriber veritabanında oluşmasını istiyorsanız
. Publisher veritabanı yüksek insert, update ve delete hareketlerine sahipse
. Publisher ya da Subscriber veritabanı MsSql değilse

Default olarak, Subscriber veritabanı read-only olmalıdır çünkü Subscriber veritabanında yapılan değişiklikler Publisher veritabanına uygulanmaz ama Subscriber veritabanının update edilebilmesini sağlayan bir seçenek de mevcuttur.


Merge replication
Merge replication da transactional replication gibi Publisher veritabanının snapshotını alarak başlar. Daha sonra Publisher ve Subscriber’da oluşan değişiklikler triggerlar yardımıyla takip edilir. Subscriber network’e bağlandığı an Publisher ve Subscriber arasındaki tüm değişiklikler birleştirilir.

Merge replication aşağıdaki durumlar için uygun:
. Bir veyahut daha çok Subscriber aynı datayı değişik zamanlarda değiştirip, Publisher’a ve diğer Subscriber’lara dağıtmasını istiyorsanız
. Subscriberların datayı alıp üzerinde offline olarak çalışıp daha sonra senkronize etmesini istiyorsanız
. Her Subscriber’ın datanın değişik kısımlarına ihtiyacı varsa
. Çakışmalar olabileceği için, bunları farkedip çözebilmelisiniz
. Kullandığınız uygulamalar en son değişikliği istiyorsa, örneğin bir satır beş defa değiştiyse, beş değişikliği değil de en son halini istiyorsa

Merge replication birden çok uygulamanızın birbirinden bağımsız olarak çalışıp daha sonra bu bilgileri birleştirmek için kullanabileceğiniz bir yöntemdir.


Snapshot replication
Bu replication yöntemi güncellemeleri takip etmeden belirtilen zamanda tüm datayı birebir kopyalarak Subscriber veritabanını günceller.

Aşağıdaki durumlar için kullanılabilir:
. Datalar nadir olarak değişiyorsa
. Subscriber veritabanındaki dataların biraz eski olması kabul edilebilirse
. Varolan datanın küçük bir kısmı dağıtılıyorsa
. Varolan datanın büyük bir kısmı kısa bir aralıkta değişiyorsa
Transactional
Merge
Snapshot




TypeScript

Aslında daha çok DART'a benziyor ama arasındaki farkı Anders Hejlsberg şöyle açıklamış:

DART, tamamen Javascript'i yeniliyor. Yeni bir programlama dili ve yeni bir sanal makine. Kodunuzu Javascript'e çevirebiliyorsunuz fakat bunu yaparken yeni bir dilin semantiğini alıp Javascript'e benzetmeye çalışıyor. Script# aynı şeyi C# için, Google Web Toolkit ise JAVA için yapıyor. Bunu yaptıkları için karışıklığa ve maliyete sebep oluyorlar.

TypeScript ise herşeyden önce aslında Javascript, yeni bir dil öğrenmenize gerek yok, sadece parametrelerinize açıklamaları nasıl koyacağınızı öğrenmeniz yeterli ve bu o kadar da zor değil. İkinci ve asıl önemlisi öğrendiğiniz bu yeni şeyler ECMAScript 6 ile uyumlu (Javascript'in bir sonraki sürümü). Yani aslında TypeScript öğrenirken, Javascript öğreniyorsunuz. Ayrıca tüm diğer Javascript frameworklerini bu dille rahatlıkla kullanabilirsiniz.

Bu arada TypeScript açık kaynak kodlu bir proje.
http://typescript.codeplex.com

Açıklamanın tam metni:
http://www.eweek.com/developer/microsoft-delivers-typescript-a-better-javascript-for-big-apps/

REST vs SOAP

Bu iki teknolojinin en temel farklılıkları SOAP’ın veri isteklerini HTTP data kısmında halletmesi. RESTful web servislerinde ise istekler  HTTP header kısmında halledilir. Bunu sağlamak için HTTP protokolunde bulunan POST,PUT,GET,DELETE parametreleri kullanır.  Bu da RESTful web servislerinin en önemli özelliğidir.
Genel olarak farkları ;
·         REST daha az trafik harcar, Platform ve dil (java ile .net haberleşebilir)  bağımsızdır.
·         Veriler REST’te işlenmeden de okunabilirliği yüksek olur.
·         SOAP ‘ta WSDL’den otomatik proxy class oluşturulup , client uygulamaya kolay entegre edilebilir.
·         REST’te client uygulamaya entegre etmek için proxy class yazılması gerekir.
·         SOAP tip korumalıdır. SOAP headerda belirtilen şekilde veri gelir.
·         REST’da veri tanımlaması yoktur.
·         SOAP alt yapısında xml kullanır(JSON veri gömülebilir).
·         REST verileri xml veya JSON olarak gönderebilir.
·         REST, veritabanına uzaktan erişim gibi çalışır. SOAP ise uzaktan metot çağırma(RPC) ilkesine dayanır.
·         REST’i uygulamak için url etkin şekilde kullanılır ve url tasarımı yapılması gerekir.
·         SOAP’ta ise uzaktan metot çağrıma tekniği kullanılır.

REST
SOAP
Dönüş değerini belirleyebildiğimiz için, bu değer çok küçük boyutta olabilir.
Dönüş değeri XML tipinde olduğu için boyutu daha büyük.
Client tarafında cache'lenebilir.
Cient tarafında cache özelliği yok.
Twitter, Facebook ve Google REST kullanıyor.
Google 2006'dan sonra kullanmaktan vazgeçmiş.
Uygulaması ve öğrenmesi çok kolay.
Standartlarını öğrenmesi zor.
Stateless olduğu için scale etmesi kolay.
Scale etmesi zor.
Her MIME tipinde dönüş yapabilir.
Sadece XML döner.
Mobile playformlar için iOS ve Android tarafından destekleniyor.
Mobile platformlarda tüm özellikleriyle desteklenmiyor.
Async desteği yok.
Async desteği var.
Session desteği yok.
Session desteği var.
Standart mesajlaşma sistemi içermediğinden dolayı iletişim hatalarında zorluk çıkarabilir.
Standart mesajlaşma sistemi olduğundan otomatik olarak başarısız bir isteği tekrar deneyebilir.
Kullanıcı doğrulama sistemi zahmetli.
Session desteğiyle birlikte, daha kolay bir kullanıcı doğrulama sistemi var.
Kısıtlı kaynak ve hızlı kod geliştirme için uygun.
Yüksek güvenlik ve büyük data transferleri için uygun.
 

Sql Server Üzerindeki Tüm Veritabanlarında Sorgu Çalıştırmak

Aşağıdaki örnek size yardımcı olacaktır.
Kolay gelsin.

CREATE TABLE ##tempTable
(
      DatabaseName VARCHAR(64),
      ObjectName VARCHAR(128),
      ObjectKind VARCHAR(128)
)
 
EXEC sp_Msforeachdb "USE [?];
      INSERT ##tempTable (DatabaseName, ObjectName, ObjectKind)
      SELECT db_name(), t1.name, t1.xtype
      FROM sysobjects t1"
 
SELECT  *
FROM    ##tempTable
 
DROP TABLE ##tempTable

Angular.js için Ücretsiz Kaynak

AngularJS'ye başlangıç yapmak için güzel bir ücretsiz kaynak: http://www.egghead.io

CLR Fonksiyon DLL'leri Nerede Tutulur?

CLR DLL'ler Sql Server'a yüklendikten sonra dosya olarak değil, veritabanı içerisinde bir obje olarak tutulduğundan dolayı sadece yükleme aşamasında Sql Server'ın görebileceği bir yerde durması yeterli, daha sonra kendisini silebilirsiniz.

Kaynaklar:
CLR in a cluster is no different than in a stand-alone instance. When you create a CLR object in SQL Server, it's in the DB - not the file system. The dll's for CLR assemblies in SQL Server are not loaded from the file-system, but from the database itself.
http://dbaspot.com/ms-sqlserver/218767-implementing-clr-cluster-print.html

When using CLR the placement of the dll is only important while loading the CLR assembly. Once this hace succesfully done you can remove the dll. So even on a cluster it makes no difference if you use a local drive or one of the shared cluster drives.
http://www.sqlservercentral.com/Forums/Topic395782-386-1.aspx#bm395787

VideoConverter.js

Ffmpeg kütüphanesini Javascript'e çevirip, video çevirme ve kesme işlerini javascript ile halletmişler. Enteresan bir proje.

http://github.com/bgrins/videoconverter.js

MVC Teknolojileri

ASP.NET MVC View Engine
Uygulamamızda geliştirdiğimiz önyüzün (.aspx, .cshtml) dosyalarını yorumlar. Varsayılan olarak Razor geliyo fakat MVC ile .aspx dosyalarını kullanmak mümkün bunun için varsayılan viewengine olarak WebFormViewEngine seçilmesi gerekiyor ama önerilmiyor. Kendi viewengine kodunuzu yazarak .isoft uzantılı bir dosyanın web’te nasıl görüntüleneceğini belirtebilirsiniz.
1.       System.Web.Razor
CSS Framework
Uygulamamızdaki önyüzü geliştirirken, görselin standart olması ve hızlı bir şekilde geliştirilebilmesi için kullandığımız CSS kütüphaneleri bu kategoride. Şu anlık popüler olan kütüphane Twitter’daki çalışanlar tarafından geliştirilen Bootstrap. Bunun yanında bir kaç alternatif daha var fakat bunlar genellikle Bootstrap altyapısını kullanıyorlar.
1.       Bootstrap
2.       Pixelkit
ORM (Object-Relational Mapping)
Uygulamamızda iş katmanı ile veri katmanı arasındaki bağlantıları yapmak ve bu katmanı projeden soyutlamak amaçlı kullanabileceğimiz yapılara ORM diyoruz. ORM’lerin avantajları arasında katmanların birbirinden ayrılmasını kolaylaştırması, tekrar eden kodu minimuma indirmesi, kolay kullanılması ve kendi içinde yaptığı cache mekanizmaları var. Bu kategoride iki tane önemli oyuncu var.
1.       Entity Framework
2.       NHibernate
Javascript Framework for Data
Uygulamamızda iş katmanı ile sunum katmanı arasındaki bağlantıları kurmak ve network trafiğini minimuma indirip önyüzdeki veri işleme zorluğunu azaltmak için kullandığımız kütüphaneler bu kategoride yer alıyor. Özellikle RESTfull servislerle çalışan websiteleri üzerinde önemli bir yer tutuyorlar.
1.       AngularJS
2.       BackboneJS
3.       KnockoutJS
4.       EmberJS
Javascript Frameworks
Javascript ile uzun bir şekilde yapacağımız işleri bizim için kısaltan kullanışlı frameworkler.
1.       jQuery
2.       MooTools
3.       Underscore.js
Log Framework
Uygulamamızdaki kayıt tutma işini bizler için yapan, bu işi kolaylaştıran kütüphaneler.
1.       NLog
2.       log4net
Client Side Programming Languages
Aslında bu kategorinin adı tam doğru olmasa da kullanıcı tarafında javascript uygulamalar geliştirmek için yardımcı programlama dillerine ya da sadece scriptlere ihtiyacımız oluyor. Bunun sebebi javascript ile düzgün bir class yapısının oluşturulmasının zor olması. Bu kategoride de kısıtlı alternatifimiz var.
1.       TypeScript
2.       Dart
3.       CoffeeScript
UI Tools
Önyüz geliştirirken kullanılabilecek hazır tablolar, raporlar gibi MVC’nin bize sunmadığı hazır kontroller sunan firmalar.
1.       Telerik
2.       DevExpress
3.       Infragistics
Client-Server Frameworks
Aslında gerçek zamanlı uygulamalar yazmak istediğinizde kullanmanız gereken bu kütüphanelere en bilindik örnek nodejs. Nodejs’yi ne zaman kullanmanız gerektiğiyle ilgili en sade tanım: Aynı anda çok fazla sayıda ve çok az CPU kullanan istekleri karşılamak için kullanabilirsiniz. Sohbet programı, online oyunlar gibi çözümlerde kullanılabilir.
1.       node.js
Test Frameworks
Projemizde yazdığımız kodları test etmek için aşağıdaki kütüphaneleri kullanabiliriz.
1.       NUnit
2.       NCrunch

Windows 2012 için .Net 3.5 Kurulumu Sırasında Hata Alınması

Windows Server 2012'ye .NET 3.5 kurulumu nun hata vermesi durumunda aşağıdaki komut çalıştırılırsa hatayı düzeltip düzgün bir şekilde kurulumu tamamlayabiliyor.

dism.exe /online /enable-feature /all /featurename:NetFX3 /Source:KAYNAK_KLASOR

Microsoft F# Projesinin Kaynak Kodları

Microsoft F# projesinin tüm kaynak kodlarını açmış. Aşağıdaki linkten ulaşabilirsiniz.
http://fsharp.org/

Jquery File Upload Plugin


Github'da en çok takip edilen ilk 10 proje arasında yer alan bu dosya yükleme plugini gerçekten çok güzel.
http://blueimp.github.io/jQuery-File-Upload/

JQuery DropDownList Plugin

Çok kullanışlı bir dropdownlist plugini, tavsiye olunur.

Kütüphane:
https://github.com/harvesthq/chosen
http://harvesthq.github.io/chosen/

Şifre Kaydetme Uygulamaları

Piyasada bir çok uygulama olmasına rağmen KeePass, Gizmodo tarafından tavsiye edilmiştir. Hepsinin artıları eksileri var aşağıda verdiğim sayfada bunları sıralamışlar fakat KeePass hem açık kaynak kodlu olması, hem şifre dosyasını dropbox'ta tuttuğunuzda her yerden erişim sağlaması ve ücretsiz mobil uygulaması olması dolayısıyla tercih edilmektedir. Alternatifler şöyle, öne çıkanlara yıldız koydum:

1Password*
Dashlane
eWallet
KeePass*
Lastpass*
my1login
PasswordBox
Sticky Password

Karşılaştırma yazısı için:
http://www.reddit.com/r/apple/comments/1psfmt/

Gizmodo yazısı için:
http://gizmodo.com/lastpass-vs-keepass-whats-the-best-online-password-m-1452918307

Moment.js


Güzel bir tarih/zaman kütühanesidir.
Tavsiye edilir.
http://momentjs.com/