Web sayfası yazıcı çıktıları için ince ayarlar ve faydalı bilgiler

Programlama Yorum yapılmadı »

Konu Başlıkları: Web pages print-out tips & tricks, Web printing problems, CSS print-out attributes, CSS paged media

Uğraşanlar bilirler web sayfalarının yazıcı çıktıları oldukça baş ağrıtan ve detaylı bir konudur. Tarayıcıların uyumsuzluğu, görsel öğelerin kağıda dökülmesindeki problemler, sayfa ayarları ve benzeri birçok sorun vardır. Peki bu sorunları nasıl aşabiliriz kısaca bunlardan bahsetmek istiyorum.

  • Eğer web sayfanızın kullanıcılar tarafından çıktı alma amacıyla kullanılacağını düşünüyorsanız sayfaya “Yazıcıya Gönder” şeklinde bir düğme yada ibare koyarak salt çıktıya yönelik içeriğin oluşturulması için bir sayfa tasarlayabilirsiniz bu işinizi kolaylaştıracaktır.

  • Web sayfanıza CSS print stilleri belirlemelisiniz. Mesela sayfanıza aşağıdaki şekilde 2 adet stil dosyası eklenmiş olsun:

    <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”

       “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>

    <html xmlns=”http://www.w3.org/1999/xhtml”>

    <head id=”Head1″ runat=”server”>

       <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />

       <meta http-equiv=”Content-Language” content=”tr” />

       <title>Yazıcı Çıktıları Deneme</title>

       <link href=”/styles/styles.css” rel=”stylesheet”

          type=”text/css” media=”screen” />

       <link href=”/styles/styles-print.css” rel=”stylesheet”

          type=”text/css” media=”print” />

    </head>

    <body>

       <div class=”utilityPanel”>

          <span>Bu bölüm yazıcı çıktısında görünmeyecek.</span>

       </div>

       <span>Bu bölüm yazıcı çıktısında görünecek.</span>

    </body>

    </html>

    styles.css dosyasında aşağıdaki şekilde belirtilen utilityPanel sınıfı,

    .utilityPanel

    {

       border:solid 1px black;

       display:inline;

       margin:5px;

       font-size:9pt;

    }

    styles-print.css dosyasında aşağıdaki şekilde belirtilmiştir,

    .utilityPanel { display:none; }

    Bu durumda yazıcı çıktınızda utilityPanel stil sınıfının tanımlandığı kontroller görüntülenmeyecektir. Bu CSS sayfanız web sayfanıza link komutuyla eklenirken media seçeneği ile belirlenmektedir. media seçeneğini daha birçok öğe için kullanabilirsiniz (örneğin: all, aural, braille, handheld, print, projection, screen, tty ,tv).

  • Web sayfasınızdaki html kontrolleri için farklı stiller belirleyebilirsiniz. Örneğin web sayfasındaki bir resim A4 çıktısına sığamayacak kadar büyük ise buna uygun bir stil ile resminizi çıktılarınızda A4 boyutuna indirgeyebilirsiniz.

    #resim

    {

       margin:1cm;

       width:27cm;

       height:19cm;

    }

    Bu ve benzer konularda daha detaylı bilgiyi W3 CSS2 Paged Media referans bilgileri bölümünde bulabilirsiniz.

  • Web sayfanızın çıktısını alırken sayfa sonu ve başları için aşağıdaki stilleri kullanabilirsiniz.

    page-break-after:always | auto | avoid | left | right;

    page-break-before:always | auto | avoid | left | right;

    page-break-inside:auto | avoid;

  • Yazıcı çıktılarınız için görsel öğeleri ve gereksiz arkaplan renklendirmelerini kaldırın. Sayfaya obje olarak eklenmiş Java, Flash ve diğer uygulamaların; hareketli gif resimlerinin ve buna benzer görsel öğelerin kağıda olduğu gibi dökülemeyeceğini unutmayın.

  • Javascript ile otomatik yazdırma işlemini window.print() komuduyla yapabilirsiniz.

  • Farklı tarayıcıların (msie, mozilla, opera, safari) farklı sürümlerinde yazıcı çıktılarınızın sorunsuz ve benzer olması için kontrollerinizi yapın. Çünkü birçok tarayıcı yazıcı çıktısı bir yana web sayfasını görüntülerken bile farklı sonuçlar verebilmektedir.

ASP.NET Membership DateTime Sorunu ve UTC

Programlama Yorum yapılmadı »

Konu Başlıkları: ASP.NET Membership, Membership DateTime Problem, UTC, Local Time, DateTime Conversion

Bu şekilde başlık attım çünkü birçok arkadaş bu tip bir arama sonucunda bu yazıya ulaşmış olabilirler. Merak edipte membership veritabanını inceleyen yada membership verileriyle ilgilenen arkadaşlar varsa belki bilirler. Veritabanındaki DateTime türünden bazı verilerin (örneğin: CreateDate, LastLoginDate, LastPasswordChangedDate… gibi) değerine direk veritabanından ulaşmaya çalışırsanız verilerin Türkiye yerel saatinden 3 saat kadar geri olduğunu görürsünüz. Acaba bunun sebebi nedir?

Sorunun cevabı oldukça basit. Bu veriler kaydedilirken kullanılan zaman türü UTC (Coordinated Universal Time), yani eşgüdümlü evrensel zaman (saat) olarak seçilmiştir. Diğer bir deyişle atomik zaman olarakta nitelendirilir.

Discovery de seyrettiğim bir belgeselden de hatırladığım kadarıyla atomik saat denişinin sebebi saat hesabı için güneş yerine atom parçacıklarının kullanılmasıdır. Bu zaman türü oldukça yüksek çözünürlüklüdür. Dünyanın kendi yörüngesinde dönüşünün zaman içinde yavaşlaması yüzünden bilim adamları her yıl bu zamana 1sn eklemektedirler. Eğer bu konuda bir yanlışım varsa düzeltin lütfen :)

UTC ye kısaca değindikten sonra .net kütüphanesine bir bakalım.

using System.Runtime.InteropServices;

 

namespace System

{

   // Summary:

   //     Specifies whether a System.DateTime object represents

   //     a local time, a Coordinated Universal Time (UTC),

   //     or is not specified as either local time or UTC.

   [Serializable]

   [ComVisible(true)]

   public enum DateTimeKind

   {

      // Summary:

      //     The time represented is not specified as either

      //     local time or Coordinated Universal Time (UTC).

      Unspecified = 0,

      //

      // Summary:

      //     The time represented is UTC.

      Utc = 1,

      //

      // Summary:

      //     The time represented is local time.

      Local = 2,

   }

}

Görüldüğü üzere kütüphanede 3 çeşit zaman değişkeni tipi tasnif edilmiştir. Bunların birbirine dönüşümü içinde alttaki 2 fonksiyon kullanılmaktadır.

public DateTime ToUniversalTime();

public DateTime ToLocalTime();

Bunlardan ToLocalTime() fonksiyonunu veritabanından aldığınız verilerizi yerel saatimize çevirmek için kullanabilirsiniz.

İyi bir yazılımcı ve ötesi…

Programlama Yorum yapılmadı »

Bilişim sektöründeki yazılımcı ve yönetici arkadaşlar için kısa ve faydalı bir yazı. Robert L. Read e teşekkürler.

Adobe Acrobat Reader
How to be a Programmer: A Short, Comprehensive, and Personal Summary
by Robert L. Read

Verilerinizin güvenliği için SQL Injection dan korunun

Programlama Yorum yapılmadı »

Konu Başlıkları: SQL Query, SQL Injection, Data Safety

Hacker yada kötü niyetli kullanıcılar sizin programınızdaki açığı kullanarak basit bir giriş ile sitenizin veritabanında onarılması güç sorunlar çıkarabilirler. Bunun en çok yaşandığı örnek SQL Injection vakaları. O nedir diye sorarsanız: giriş yapılacak bir bölümün (örneğin TextBox) programınızda direk SQL sorgusuna ifade olarak eklenmesi ve kullanıcı tarafından girilen kötü amaçlı SQL ifadesinin verilerinize zarar vermesi şeklinde tanımlanabilir.

Örneğin sitenizde TextBox ile kullanıcıya ait bir veri giriş bölümü olsun. Bu giriş için SQL Injection oluşma durumu aşağıdaki şekilde olabilir:

protected void SQLInjection_KotuOrnek(object sender, EventArgs e)

{

   string connStr = “Server=(local);Database=Northwind;Integrated Security=SSPI”;

 

   // Bu yanlış bir kullanım ve SQL Injection a müsait

   string cmdStr = “insert into Shippers (CompanyName, Phone) values (’” +

      txtCompanyName.Text + “‘, ‘” + txtPhone.Text + “‘)”;

   using (SqlConnection conn = new SqlConnection(connStr))

   using (SqlCommand cmd = new SqlCommand(cmdStr, conn))

   {

      conn.Open();

      cmd.ExecuteNonQuery();

   }

}



SQL Injection dan korunmak için Parametre girişi kullanmalısınız. Bu durumda kötü amaçlı bir sorgu girilse bile programınız ya hata verecektir, yada bu sorguyu normal bir veri girişi olarak algılayacaktır:

protected void SQLInjection_IyiOrnek(object sender, EventArgs e)

{

   string connStr = “Server=(local);Database=Northwind;Integrated Security=SSPI”;

 

   // Bu doğru bir kullanım çünkü kullanıcı girişleri parametreler sayesinde

   // olacak ve girişler SQL sorgusunun bir parçası olmayacak.

   string cmdStr = “insert into Shippers (CompanyName, Phone) values (” +

      “@CompanyName, @Phone)”;

   using (SqlConnection conn = new SqlConnection(connStr))

   using (SqlCommand cmd = new SqlCommand(cmdStr, conn))

   {

      // Parametreler

      cmd.Parameters.AddWithValue(“@CompanyName”, txtCompanyName.Text);

      cmd.Parameters.AddWithValue(“@Phone”, txtPhone.Text);

      conn.Open();

      cmd.ExecuteNonQuery();

   }

}

ÖSYM bu işi kıvırabilirse dişimi kıracağım…

Memleket Meseleleri Yorum yapılmadı »

Bugün genç bir arkadaşın sınav sonucuna bakayım dedim ama gördüm ki ÖSYM’de değişen birşey yok, her sene aynı terane. ÖSYM nin web sitesi her sene olduğu gibi yine iptal olmuş. Kimbilir belki bir gün düzgün bir donanım ve bu işi kıvırabilecek adamları işe alırlar :)

AJAX kullanmak yada kullanmamak. İşte bütün mesele bu…

Programlama Yorum yapılmadı »

Konu Başlıkları: AJAX, AJAX Mistakes, Places to Use AJAX

Günümüz web yazılım ve tasarımcıları hızlı gelişmelerin peşinde koşarken bu gelişmelerin labirentinde kaybolmaları an meselesi. (X)HTML, CSS, XML, XSL, JavaScript, AJAX, ASP.NET, PHP ve daha birçok kavram başlı başına uzmanlık isteyen konular. Kaliteli sitelerin inşası bu yapıların amaca yönelik en iyi şekilde kullanılması ile mümkün.

AJAX (Asynchronous JavaScript and XML) yeni bir kavram olmasına rağmen onu oluşturan yapılar bildiğiniz üzere yıllardır kullanılıyor (JavaScript ve XML). AJAX sunucu ve istemci arasındaki standart request/response yapısını kullanmaz. XMLHTTPRequest ile sunucu servislerinin gücünü kullanarak istemcide beklemeksizin dinamik ve içeriği yüklü web tasarımlarına imkan tanır. Ancak AJAX bir oyuncak değildir, yanlış kullanımı sunucuları zor durumlara sokabilir. Ayrıca AJAX ın avantajları olduğu gibi dezavantajlarıda vardır. Örneğin:

  • AJAX tarayıcınızı geri tuşuna basarak bir önceki sayfaya dönebileceğiniz bir yapı sunmaz.
  • Ne kadar çok kod yazarsanız onu yüklemeye çalışan kullanıcıları o kadar çok bekletirsiniz.
  • AJAX ın kullanıldığı web tarayıcılar kısıtlıdır. Mobil cihazlarda henüz desteklenmemektedir.
  • JavaScript kapalı tarayıcılarda çalışmaz.
  • Web adresini alıp arkadaşınıza veremezsiniz, versenizde aynı içeriği alamayabilirsiniz
  • Asenkron işlemlerin belli belirsiz kullanımı ile içeriğin kullanıcıya sunumunda zorluklarla karşılaşılabilir.

Bu uyarıları verdikten sonra bugüne kadar denenmiş ve uygulanması uygun görülen AJAX servislerini listeleyebiliriz:

  • İnteraktif form kullanımı
  • Ağaç yapısı ve navigasyon
  • Anlık Kullanıcı-Kullanıcı bağlantıları
  • Oy ve reyting verme
  • Veri filtreleme ve işleme
  • Yazı tamamlama ve ipucu verme
  • Uzun soluklu sorgular ve uzak çağrılar
  • Ağır matematiksel hesaplama gerektiren işlemler
  • Sunucu kayıt işlemleri
  • Veri üzerinde interaktif tarama ve hareket

Elbette yeni ve kullanışlı AJAX servisleri zaman içinde ortaya çıkacaktır. Önemli olan sizin AJAX a ne kadar ihtiyacınız olduğudur…

Kaynaklar:
SWiK
Alex Bosworth’s Weblog: Ajax Mistakes

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Giriş