Bir sınavı daha verebilirsem (Exam 70-563), Microsoft Certified Professional Developer (MCPD) sertifikası alabileceğim.


çeliker bahçeci MCTS gaziantep

Artık yanlızca DeviceSolutions degil GHI firmasınında ürünlerini bizden temin edebilirsiniz. 


Türkiye Distrübütörüyüz
http://www.ghielectronics.com/distributors

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' )

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ü...

PC kullanım istatistikleri

13 Oca 2010 In: .net, hoş, olmazsa olmaz, öneri

Merhabalar, bu uygulamayı geliştirme sebebim bilgisayarımın ne kadar süre açık kaldığını bulmak idi. Bu arada elim değmiş iken klavye tuşlarına basma adeti ve mouse tıklama sayısınıda istatistik için ölçeyim dedim. Uygulamanın adı Bilgili

Efendim kendisi neler yapar :

1- Bilgisayarınız açık kalma süresini ölçer, eğer PC nizi sürekli uyutup uyandırıyorsanız ne kadardır bunu yaptığınızı söyler.

2- Bu süre zarfında fare ile yaptığınız tıklama sayısını aklından sayar.

3- Yine makinanızın açık kaldığı sürelerdeki klavye tuşlarına dokunma sayınızı sayar. Tıpkı aşağıdaki gibi :

 

 

 

 

 

4- Ağ istatistiklerini gösterir, o an bilgisayarınız ağ üzerinden ne kadar veri iletimi yapıyor veya alıyor ondan bilgi sahibi olabilirsiniz. Buna P2P programlarından tutunda Ağ Paylaşımları da dahil, PC nizden gönderilen ağ trafiginin veya alınan bilgilerin anlık olarak hızlarını görebilirsiniz. Bunu grafik olarak gösterebiliriz. 

  

 

 

 

 

 

 


5- İsteyen kişilere uygulamanın kaynak kodlarını mail ile atabilirim.

 

Klavyeden basılan tuş sayısını veya fare tıklama sayınızı merak ediyorsanız buyrunuz uygulama burada, indirin.
Program ilk çalıştığı klasörü registry e kaydetmekte bu sayede Windows her açıldığında uygulama otomatik başlayacaktır. Ve sağ altta yerini alacaktır. Programı kaldırmak için klasörü silin ve regedit den startup path i kaldırın.

Uygulamanın tamamı C# ile kodlandı.

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...