Tarayıcıda Sekme Değiştirmenin Algılanması

Okuma Süresi: 1 dakika

Merhabalar,

Tarayıcılarda bir sekmeden başka bir sekmeye geçişi Page Visibility API sayesinde anlayabiliriz. visibilityState özelliğinde sekmenin durumu tutulmaktadır. Örnek olarak aşağıdaki kodu inceleyebiliriz:

document.addEventListener("visibilitychange", function() {
  console.log(document.visibilityState);
});

Sekme değişikliklerini visibilitychange olayı yakalamaktadır. visibilityState özelliği aşağıdaki değerleri almaktadır:

  • visible: Tarayıcı sekme aktiftir ve tarayıcı penceresi simge durumuna küçültülmemiştir.
  • hidden: Tarayıcı sekmesi aktif değildir, sekme değiştirilmiştir veya tarayıcı penceresi simge durumuna küçültülmüştür.

Kaynaklar:

https://www.w3.org/TR/page-visibility/
https://developer.mozilla.org/en-US/docs/Web/Events/visibilitychange
https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API

Bootstrap Popover Eklentisinin Ekran Görünümüne Göre Konumlanması

Okuma Süresi: 1 dakika

Bootstrap’in Popover eklentisini kullanırken tarayıcının ekran boyutlarında herhangi bir değişim olduğunda açılan Popover ekranda düzgün bir şekilde konumlanmamaktadır. Örneğin Popover’ın placement özelliğini top olarak atarsanız tarayıcı ekranını aşağı doğru kaydırdığınızda veya ekran boyutunu değiştirdiğinizde Popover ekranın dışında kalacaktır.


Bu sorunu önlemek için placement özelliğini aşağıdaki şekilde düzenlememiz yeterlidir.

var options = {
    placement: function (context, source) {
        var position = $(source).position();

        if (position.left > 515) {
            return "left";
        }

        if (position.left < 515) {
            return "right";
        }

        if (position.top < 110){
            return "bottom";
        }

        return "top";
    }
};
$(".popover-tooltip").popover(options);

Çalışan örneği aşağıdaki gibidir:


Kaynak: http://stackoverflow.com/a/12656175

Code-First ile Üretilmiş Migration’ların SQL Çıktısının Üretilmesi

Okuma Süresi: 1 dakika

Entity Framework Code-First yöntemi kullanılarak geliştirilmiş uygulamalarda add-migration ve update-database komutlarını Package Manager Console üzerinden çalıştırdığımızda uygulamamızın kullanmış olduğu Connection String üzerinden değişiklikleri veritabanına uygulayabiliyoruz.

Ancak üretilen bu migrationları veritabanında herhangi bir değişiklik yapmadan SQL çıktısı olarak alabilmek için aşağıdaki komutu kullanabiliriz.

Update-Database -Script -SourceMigration:0

Bu komut sayesinde yapmış olduğumuz tüm migrationların SQL çıktısı ekrana gelecektir.

ASP.NET’te Page_Load Olayının Master Page’deki Page_Load Olayından Önce Tetiklenmesi

Okuma Süresi: 1 dakika

ASP.NET’te bazı durumlarda sayfa yüklemeden önce bazı işlemlerin yapılması gerekebilir. Örneğin kullanıcı doğrulaması gibi.

Bu gibi durumlarda hem sayfalarda hem de Master Page’lerde Page_Load olayı kullanılır. Ancak bu olayda sayfanın içeriği oluşturulmaktadır. Sayfanın içeriği oluşturulmadan önce bu kontrolleri yapabilmemiz için Page_Init ve Page_PreRender olayları kullanılır.

Master Page dosyalarımızda Page_Init, normal sayfalarımızda ise Page_PreRender olayı kullanılır. Örnek kullanımları aşağıdaki gibidir:

Master Page


protected void Page_Init(object sender, EventArgs e) { /*Olay gövdesi */ }

 

Sayfalar


protected void Page_PreRender(object sender, EventArgs e) { /*Olay gövdesi*/ }

ASP.NET 4’ün IIS’e Register Edilmesi

Okuma Süresi: 1 dakika

Web sunucuya yüklemiş olduğunuz bir ASP.NET 4.0 uygulamasını çalıştırdığımızda HTTP Error 500.21 – Internal Server Error – Handler “PageHandlerFactory-Integrated” has a bad module “ManagedPipelineHandler” in its module list” şeklinde bir hata alırsanız ASP.NET, IIS’e register edilmemiştir.

HTTP Error 500.21 - Internal Server Error

Bu sorunu düzeltmek için Komut İstemi’nden (Command Prompt) aşağıdaki komutu çalıştırmanız yeterlidir.

%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i

Bu komutu çalıştırdığınız zaman ASP.NET başarıyla IIS’e register edilmiş olacaktır.

SQL Server’da Komutların Çalışmasını Belli Bir Süre Bekletme

Okuma Süresi: 1 dakika

SQL Server’da çalıştırdığımız komutları belli bir süre bekletip tekrar çalıştırabilme olanağımız vardır. Bazı programlamla dillerinde bulunan Delay veya Thread.Sleep metodlarının aynısını SQL Server üzerinde de kullanabiliriz. WAITFOR DELAY komutu bu işlemi gerçekleştirmektedir.

Kullanımı aşağıdaki şekildedir:

-- 5 dakika bekletir.

WAITFOR DELAY '00:05';

-- 5 saniye bekletir.

WAITFOR DELAY '00:00:05';

-- 5 saat bekletir.

WAITFOR DELAY '05:00:00';

Apache’de Dizin Listelemeyi Pasif Yapma

Okuma Süresi: 1 dakika

Apache’nin önceki sürümlerinde Dizin Listeleme’yi (Directory Listing) devre dışı bırakmak için httpd.conf dosyasında bazı değişiklikler yapmak gerekliydi. Ancak Ubuntu üzerinde Apache2 kullanıyorsanız bu dosyayı düzenlemenize gerek kalmamaktadır. Terminal üzerinden aşağıdaki kodu yazıp çalıştırdığınızda dizin listeleme pasif olacaktır.

sudo a2dismod autoindex

Terminal’de kodu çalıştırdığınızda sadece apache2 servisini yeniden başlattığınızda dizin listeleme pasif olacaktır.

sudo service apache2 restart

Dizin listelemeyi tekrar aktif hale getirmek için aşağıdaki kodu kullanmanız yeterlidir.

sudo a2enmod autoindex


Web Servislerinde Session Kullanımı

Okuma Süresi: 1 dakika

Bir ASP.NET uygulamasında web servisiniz içerisinden Session’a erişmek istediğiniz zaman “Object reference not set to an instance of an object” hatasını alacaksınızdır.

Örnek olarak aşağıdaki gibi bir servis metodumuz olsun.

        [WebMethod]
        public string SayHello()
        {
            if(HttpContext.Current.Session["message"] != null)
               return HttpContext.Current.Session["message"];
            return "";
        }

Uygulamamızın herhangi bir yerinde message isminde bir Session’ın oluşturulduğunu varsayalım. null kontrolü yapmamıza rağmen if bloğunun başında “Object reference not set to an instance of an object” hatasını fırlatacaktır. HttpContext null olmamasına rağmen HttpContext’in Session özelliği null olarak gelmektedir.

Sorunu çözebilmek için WebMethod niteliğimizin (attribute) EnableSession özelliğini true olarak ayarlamamız gerekmektedir.

        [WebMethod(EnableSession = true)]
        public string SayHello()
        {
            if(HttpContext.Current.Session["message"] != null)
               return HttpContext.Current.Session["message"];
            return "";
        }

Kodumuzu bu şekilde düzenleyip çalıştırdığımızda sorunsuz bir şekilde çalışacaktır.

TinyMCE ile Formatter Kullanımı

Okuma Süresi: 1 dakika

TinyMCE’de Formatter basit bir şekilde istediğimiz biçimleri uygulamamızı veya kaldırmamıza yarar.

Örnek olarak TinyMCE editöründe seçmiş olduğumuz alanı ins veya del etiketleri arasına alacak ve kaldır düğmesine bastığımızda ise bu biçimleri kaldıracak.

Varsayılan olarak gelen init fonksiyonumuzu aşağıdaki şekilde değiştirelim:

tinymce.init({
    selector: "textarea",
    plugins: [
        "advlist autolink lists link image charmap print preview anchor",
        "searchreplace visualblocks code fullscreen",
        "insertdatetime media table contextmenu paste"
    ],
    toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image",
    formats: {
         removed: { inline: 'del', 'classes': 'deleted' },
         added: { inline: 'ins', 'classes': 'inserted' }
       }
});

formats özelliğinde istediğimiz kadar yeni biçimler ekleyebiliriz. Bu örnekte removed ve added isminde biçimler ekledik. inline değeri ile hangi elementi kullanarak biçimlendireceğini, classes özelliği ile de elemente class vermiş olduk.

Editörde seçili olan alana bu biçimleri uygulayabilmek veya kaldırabilmek için apply ve remove fonksiyonları kullanılır. apply fonksiyonu seçili alana biçimi uygular, remove fonksiyonu ise seçili alanda uygulanmış bir biçim var ise bu biçimi kaldırır. Her iki fonksiyonda tek bir parametre almaktadır. Parametre olarak formats alanında tanımlamış olduğunuz ismi vermeniz yeterlidir.

Örnek ekran görüntüsü aşağıdaki gibidir.
TinyMCE FormatterYazmış olduğumuz tüm kod aşağıdaki gibidir.

<script type="text/javascript">
tinymce.init({
    selector: "textarea",
    plugins: [
        "advlist autolink lists link image charmap print preview anchor",
        "searchreplace visualblocks code fullscreen",
        "insertdatetime media table contextmenu paste"
    ],
    toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image",
    formats: {
        removed: { inline: 'del', 'classes': 'deleted' },
        added: { inline: 'ins', 'classes': 'inserted' }
    }
});
</script>

<form method="post" action="dump.php">
    <textarea name="content"></textarea>
</form>
<a href="#" class="add" onclick="tinymce.activeEditor.formatter.apply('added');return false;">ekle</a>
<a href="#" class="remove" onclick="tinymce.activeEditor.formatter.apply('removed');return false;">sil</a>

TinyMCE’nin formatter hakkında daha detaylı bilmek almak ve fonksiyon listesine gitmek için buraya tıklayabilirsiniz.

Yazdığımız kodların bulunduğu örnek sayfaya gitmek için buraya tıklayabilirsiniz.