"Çalışkan bir çiftçiye çelik üretmeyi öğretebilirsiniz ama iş ahlakına sahip olmayan birine, çiftçiliğin iş ahlakını öğretemezsiniz. Ne yaparsak yapalım herkes içindeki potansiyeli kullanır."  - Jim Collins 

"Dünya yaşamak için tehlikeli bir yer; kötülük yapanlar yüzünden değil, durup seyreden ve onlara ses çıkarmayanlar yüzünden." - Albert Einstein
"Dünya; kötülük yapanlar değil, seyirci kalıp hiçbir şey yapmayanlar yüzünden tehlikeli bir yerdir." - Albert Einstein

"Eğitim, insanın okulda öğrendiği her şeyi unuttuğunda arta kalandır."  - Albert Einstein

Eğer datalist içerisine koydugunuz bir button ve imagebutton, tıklandıgında postback yapmıyor ise, ki genelde bu hata yanlızca Internet Explorer IE de oluyor. Efendim maalesef postback yapacak yani command ın oluşması için sayfayı refresh etmesini şu şekilde sağlıya bilirsiniz.

protected void dtl_urun_ItemDataBound(object sender, DataListItemEventArgs e)
    {
        ((ImageButton)e.Item.FindControl("btn_sepete")).Attributes.Add("onclick", "javascript:__doPostBack('ctl00$ContentPlaceHolder1$dtl_urunumuz$ctl00$btn_sepete','')");
    }

Kullandıgınız control un adı ne ise ona eklemeyi unutmayınız, tabii ben burada master page kullanmıştım, o yüzden button un ismi bu şekilde,
sizin eklemek istediginiz çalışmayan ( not firing) kontrolun adını yanına bir linkbutton koyup ögrene bilirsiniz, browse ettiginizde üzerine geldiginizde javascript kodunu gösterecektir, onu revize edebilirsiniz. 
 Can alıcı nokta kontrolun adını databound oldugunda bilmek tıpkı ( benim imagebutton un adı  'ctl00$ContentPlaceHolder1$dtl_urunumuz$ctl00$btn_sepete' )

Yanlızca şu kadar

ALTER SCHEMA dbo TRANSFER YNS00009.CAR002 

artık database ile aynı olan YNS00009 shcemalı CAR002 tablosu DBO.CAR002 e dönüştü.

(Not : I was trying to change the 'schema' name on an object from 'username' to 'dbo' in SQL Server 2005.  )

 

Proxy arkasındaki Web Servisleri için

5 Şub 2010 In: .net, ipucu

Sunucunuzda bir web servisiniz var ise ve sunucularınızın önünde de bir proxy yerleştirilmiş ise " The request failed with HTTP status 417: Expectation failed " hatası alabilirsiniz, sebebi web sunucusundan istemci veri göndermek gerektiğini belirtmek için bir 100-Continue yanıt almayı bekler post etmek için. Bu mekanizma istemciler ağ üzerinden istek başlıklarına göre sunucu, isteği reddederek büyük miktarlarda veri gönderilmesini önler. 

Örneğin, Expect100Continue "false" ise İstek sunucuya gönderilir, bu verileri içerir. Eğer, istek başlıklarını okuduktan sonra, sunucu ve kimlik doğrulama gerektiren bir 401 yanıt göndermesi gerekir, istemci kimlik doğrulaması uygun başlıklarını verileri yeniden gerekir.

Eğer bu özelliği "true" ise , istek başlıklarını sunucuya gönderilir. Eğer sunucu isteği reddedmezse, gönderir bir 100-Continue yanıt veri aktarılabilir sinyalizasyonla. Eğer, yukarıdaki örnekteki gibi, sunucu kimlik doğrulaması gerektiriyorsa, o ve 401 yanıt gönderir istemci gereksiz yere iletilen veri yoktur.

 Web.config e bunu ekliyoruz ve sorun çözülüyor.

  <system.net>
    <settings>
      <servicePointManager expect100Continue="false"/>    
    </settings>
  </system.net>
 

IIS 7 de Tarih Formatı Sorunsalı

23 Oca 2010 In: .net, ipucu

Efendim özene bezene hazırladığınız ASP.NET uygulamanız kendi PC nizde sorunsuz çalışır ve tarihleri 23.10.2010 gibi gösterirken, Windows Server 2008'e attığınızda tarihler 10/23/2010 gibi gözüküyorsa, ve siz serverda Regional Settings'den Culture Türkiye seçtiyseniz hatta Short Date Format ı dd.MM.yyyy olarak şekillendirseniz bile bir türlü ASP.NET uygulamalarınızda tarihler istediginiz şekle gelmedi ise aşağıdaki tüyo işinize yaraya bilir.

Sorunun kaynağı IIS deki ASP.NET Application Pool'un Network Service Account tarafından çalıştırılması. Ve elbette IIS, o kullanıcının Regional Settingsini göz önüne almasını.

Hemen napıyoruz ?

"Regedit" i çalıştırıyoruz
"HKEY_USERS\S-1-5-20\Control Panel\International" a gidip 
"sShortDate" sag tıklayıp degiştir diyor ve "d/M/yyyy" şeklinde göstermesini istiyoruz.

Sorun çözüldü...

DVD leri Birleştirmek

23 Ara 2009 In: ipucu

Eğer elinizde HandyCam ile kaydettiğiniz 8 cm lik video DVDleri birleştirip (merge) 12 cm lik tek bir DVD de toplamak istiyorsanız, işte çözüm burada. Bu yöntemle 4 DVD yi tek 1 DVD ye aktarabiliyorsunuz.  ( Combine ) Üstelik tek bir menü ile. Bildiiniz gibi kameranın DVDleri küçük DVD ve maximum 1.4 Gb veri kaydedebiliyor. Ama büyük 12 cmlik DVDler 4.7 Gb veri alabiliyor.

Program : DvdReMakePro program burada 

1. İlk olarak kaynak DVDlerinizi tüm klasörleri ile  bilgisayarınıza kaydedin. (Yada DVDleri bilgisayara aktarmadanda yapılabilir, ama daha sıkıntılı olur)

2. Şimdi bunları Import yapıyoruz.

3. Bunun gibi 4 adet videoyu "import" ediyorsunuz onlar sol altta "Project olarak gözüküyor.


4. Şimdi sıra bunları birleştirmekte, 


size hangi sıra ile birleştirmek istidiginizi soracak onları seçip Merge diyoruz





Ve son olarak bu işlem bittikten sonra birleştirilen DVD yi bir klasöre Export yapıyoruz






Artıkın bu export yaptıgımız klasorü Nero veya benzeri bir DVD yazma yazılımı ile DVD ye yazmamız yeterli. Hepinize kolay gelsin.

Merhabalar, alpha kardeş yeni bir mail atıp sorunu giderdigini anlatmış, sizde adım adım uygularsanız blogengine altyapısı kullanan blogunuza yorum ekleme kısmında captcha ( resim dogrulama) ile spam yorumlardan kurtula bilirsiniz.

Ben ciddi anlamda comment (yorum) kirliligi yaşıyorum.
Aşagıdaki adımları eksiksiz yaparsanız, bendeki gibi çalışan bir yapınız olur :

 1. Web.config den ajaz destegini açıyoruz

<pages enableSessionState="true" enableViewStateMac="true" enableEventValidation="true">

 2. Kök dizinde Image.aspx diye bir dosya oluşturuyoruz, içisi bu şekil :

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Image.aspx.cs" Inherits="Image" %>
     Kök dizinde yine Image.aspx.cs diye bir dosya yaratıyoruz, içisi :
using System;using System.Data;using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Drawing;using System.Drawing.Drawing2D;

public partial class Image : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

CreateCheckCodeImage(GenCode(4));

}

private string GenCode(int num)

{

string[] source ={ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E",

"F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };

string code = "";

Random rd = new Random();

int i;for (i = 0; i < num; i++)

{

code += source[rd.Next(0, source.Length)];

}

return code;

}

private void CreateCheckCodeImage(string checkCode)

{

if (checkCode.Trim() == "" || checkCode == null)return;

Session["AlphaCaptchaCode"] = checkCode;System.Drawing.Bitmap image =

new System.Drawing.Bitmap((int)(checkCode.Length * 19), 22);Graphics g = Graphics.FromImage(image);

try{Random random = new Random();

g.Clear(Color.White);

int i;

for (i = 0; i < 25; i++)

{

int x1 = random.Next(image.Width);

int x2 = random.Next(image.Width);

int y1 = random.Next(image.Height);

int y2 = random.Next(image.Height);

g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);

}

Font font = new System.Drawing.Font("Arial", 14, (System.Drawing.FontStyle.Bold));

System.Drawing.Drawing2D.LinearGradientBrush brush =

new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2F, true);

g.DrawString(checkCode, font, brush, 4, 1);

g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);

System.IO.MemoryStream ms = new System.IO.MemoryStream();

image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);

Response.ClearContent();Response.ContentType = "image/jpg";

Response.BinaryWrite(ms.ToArray());

}

catch

{

g.Dispose();

image.Dispose();

}

}

}

   3.1. Kök dizindeki /Users Control/ klasöründe bulunan CommenView.ascx i açıp, '<span class="bbcode" title="BBCode tags"><%=BBCodes() %></span>' yazan satırın üstüne aşagıdaki kodu ekleyip kaydedip geri yolluyoruz :

 <label for="<%=txtCaptcha.ClientID %>">Güvenlik *</label>

<img src="/Image.aspx" alt="Degistirmek için tıklayın" style="width: 82px; height: 23px" onclick="this.src=RefreshCaptcha(this.src)" />
<asp:TextBox runat="Server" ID="txtCaptcha" TabIndex="4" MaxLength="4" Width="60px" onblur="DoCheckCaptcha()"/><span id="CaptchaMsg"></span><asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" ControlToValidate="txtCaptcha" ErrorMessage="<%$Resources:labels, required %>" Display="dynamic" ValidationGroup="AddComment" /><br />

 

3.2. Birde sayfada ki 'Save' butonunu aşagıdaki kodla degiştiriyoruz :

<input type="button" id="btnSaveAjax" value="<%=Resources.labels.saveComment %>" onclick="if(Page_ClientValidate('AddComment')&&checkCaptchaResult){AddComment()}" tabindex="7" />

 

3.3. Ve  'lbCommentsDisabled' labelini buluyorsunuz sayfada, onun hemen üst satırına aşagıdaki kodu ekliyorsunuz :

 <script type="text/javascript">    

        function DoCheckCaptcha() {

            var code = document.getElementById("<%=txtCaptcha.ClientID %>").value;

            checkCaptcha(code);

        }

        var checkCaptchaResult=false;

        function ReceiveServerData(CheckResult) {

            document.getElementById("CaptchaMsg").innerHTML = "";

            if (CheckResult == 1) {

                checkCaptchaResult = true;

                document.getElementById("CaptchaMsg").innerHTML = "<font color=green>Captcha OK</font>";

            }

            else if (CheckResult == -1) {

                checkCaptchaResult = false;

                //document.getElementById("CaptchaMsg").innerHTML = "<font color=red>Captcha Error</font>";

            }

            else {

                checkCaptchaResult = false;

                document.getElementById("CaptchaMsg").innerHTML = "<font color=red>Captcha Error</font>";

            }

        }

        function RefreshCaptcha(url) {

            if (url.toString().indexOf("?",0) > 0) {

                url = url.toString().substring(0, url.toString().indexOf("?", 0)) + "?" + new Date().toUTCString();

            }

            else{

                url = url.toString() + "?" + new Date().toUTCString();

            }

            return url;            

        }

    </script>

4.1.  Neredeyse bitti, son olarak CommentView.ascx.cs de RaiseCallbackEvent, foksiyonunu buluyorsunuz o fonksiyonun en üstüne aşagıdaki kodu ekliyorsunuz :

 if (eventArgument.Length < 1)

  {

      _Callback = "-1";

      return;

  }

  if (eventArgument.LastIndexOf("-|-") < 0)

  {

      string img = Session["AlphaCaptchaCode"].ToString().ToLower(); ;

      if (eventArgument.ToLower().Equals(img))

      {

          _Callback = "1";

      }

      else

      {

          _Callback = "0";

      }            

      return;

  }

4.2. Sayfadaki Page_Load, methodunu buluyorsunuz '//InititializeCaptcha();' satırını hemen altına :

string cbReference = Page.ClientScript.GetCallbackEventReference(this, "CheckResult", "ReceiveServerData", "");
string callbackScript = "function checkCaptcha(CheckResult){" + cbReference + ";}";
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "checkCaptcha", callbackScript, true);
 

 

İşte bu kadar arkadaşlar, hepinize kolay gelsin, alpha ya teşekkürler.

 

Visual Studio 2008 için bir ipucusu

10 Kas 2009 In: .net, ipucu

Code sectionda, kod yazarken methodlarımızı, regionlarımınız veya scopelarımızı Visual Studio sağ olsun daha kolay okuna bilsin diye bize yardımcı olur ve onları agaç yapısı şeklinde kümeler, tıpkı aşagıdaki gibi :

 

böyle düzenli iken çok güzelde çalışmaya başlayınca, gitgite kodlar arasında kaybolunmaya başlanılıyor. Bir düzene sokmak için tek tek kapatmanız (collapse) yapmanız gerekebilir. Bendede sebebini bilinmez bir hepsini tek tek kapatma istegi var. Bu 5000 satırlı bir cs dosyasında epey vakit alabileceginden bunun ipucunu sizinle paylaşmak istedim.

Efendim tek yapmanız gereken, kapatmak istediginiz region veya scope a geliyorsunuz ve CTRL+M CTRL+M (iki kere)
ve ilgili scope kapandı tekrar CTRL+M CTRL+M deyincede yeniden açıldı.

Ha eğer tümünü açmak isterseniz CTRL+M CTRL+L diyoruz tümüsü açılır (Open All olayı).

Tümünü hızlıca kapatmak içinse CTRL+M CTRL+O (Yani Collapse All olayı).

Ben Kimim ?

Celiker BahceciMerhabalar, ben Çeliker BAHÇECİ. 2004 den beri özel sektörde bilgisayar mühendisligi ve egitmenlik yapıyorum. Yine aynı yılın Ekim ayından beri sitemde .Net ile programlama ve hayat görüşüm ile ilgili makalelerimi yayınlıyorum. Blogum dışında Yazgelistir.com, mobilnedir.com gibi ineta kapsamındaki bir çok siteye Microsoft teknolojileri ile ilgili yazılar yazmaktayım.
Bu site ile sizinde hayatınızı anlamlandırmanızda bir parça katkımın olması dilegiyle...