23 Şubat 2011 Çarşamba

Web sitesi yapım ve yönetimlerinde sorun

Web sitesi yapımlarında karşılaştığım en sıkıcı sıralamasını yaparsam
1- karşıdaki insanın ne istediğini bilmemesi
2- karşıdaki insanın elinde beğendiği bir örneğin olması ve "buna asla benzer istemiyorum" deyip aynısını istemesi
3- karşıdaki insanın internetle bile bir alakası olmadan, web sitesi istiyor olması ve olmayacak veya olmaması gereken şeyleri talep ediyor olması
4- karşıdaki insanın internetten ve tasarımdan anlamadığını farketmesi sonucu, anladığı şeyi tasarıma yansıtmaya çalışması.
Bunları örneklendirelim ve daha anlaşılır olsun.
"Nasıl birşey istiyorsunuz?"
1- Ben bilemiyorum, şöyle nokianın sitesi gibi sade birşey olsun ama "xxx" inşaat firmasının sitesi gibi de olsun, çünkü bizde aynı işleri yapıyoruz.
Burada söylememe gerek yok, xxx inşaat firmasının sitesi uçup kaçıyor, koyu renkler ve gereğinden fazla karmaşık
2- Ben "xxx" sitesine hiç benzemeyen bir site istiyorum, aynı işi yapacağız bir de sitemiz aynı olmasın
3- Ben böyle motosiklet olsun istiyorum sayfanın girişinde, o gidiyor gibi olsun, arada ön tekerleri havaya kalksın takla atsın öbür tarafı dönsün patinaj atsın
4- Bana farketmez, yapın bişey bakalım

Bu tür müşterilerle yaptığınız ilk tasarım
1- Sade ve düzenlemesi xxx firması gibi
2- Tamamen verilen örnekten farklı bir site
3- Yolda motosiklet gidiyor efektli falsh bir tasarım
4- Kafanıza göre ve de öyle olduğundan özenerek hazırladığınız bir tasarım

Bu tür müşterilerle yaptığınız ilk tasarım sonrası konuşmalar
1- "Bu hiç olmamış bence, ben daha değişik birşey istiyordum"
2- "Bu nedir böyle, ben hayal kırıklığı içindeyim yaniiiii, napcam bilemiyorum, kırıldım, mutsuzum ve ümitsizim, siz bu işi yapamayacaksınız gibi gözüküyor, benim istediğim site bu değil ki."
3- "Bu motor yavaş gidiyor biraz daha hızlı gitsin"
4- "Şimdi yukarıdaki butonların üzerinde ne var öyle?"
     "Bir dakika çok küçük bende anlamıyorum, şuradan bakayım, evet, xxx var"
     "Yok bizde xxx yok, onun yerine xyz koyun"

Bu tip insalarla o kadar çok uğraştım ki artık yöntem olarak şunu benimsedim,
İlk iki gruptaki müşteriler gerçekten ne istediklerini biliyorlar ve de bunu itiraf etmiyorlar, daha doğrusu hiç tasarım ve yazılımdan anlamadıkları için, buldukları ilk örnek onlara en güzel tasarım gibi geliyor. Bu durumda yapılacak en iyi şey beğendim dedikleri, aynısı olmasın dedikleri sitenin prensipte aynısını yapmak. Sağda logo mu duruyor, logoyu oraya alacaksınız, renk pembe mi, pembe yapacaksınız.
3. gruptaki insan için allah yardım etsin, motor hızlandıktan sonra dönmesi istenir, sonra amuda kalkması, bu gruptaki insanlara en baştan teknik olarak istediklerinin çok zor yapıldığını ve hatta yapılamayacağını anlatmalısınız, sizden istemeye korkmayacaklardır, ücrete bağlayarak sınırlarınızı daraltabilirsiniz, aksi halde motor en son mars yörüngesinden dönüp dünyaya alevler içinde düşer.
4. grup için de tasarıma adamın işiyle alakalı hiçbirşey eklememek en akıllıca yöntem olacaktır. Yani kaldırın butonların üzerinden ne koyduysanız, sadeleştirin ama üzerine gelince renk değiştirtin vs vs.

Kimsenin frekansı ve zevki sizinle zaten aynı olamaz, bunu beklemek saçma olur. Tasarım standartları Türkiye genelindeki müşteriler için bağlayıcı bir nokta asla olmaz ama işin sonunda sizin tasarım standartlarında (çözünürlük 1024'de tam görünsün, menü solda olsun, cok scrol olmasın vs vs) yaptığınız tasarım tamamen değiştikten sonra, gelip scroll olmasa mı acaba diyeceklerdir? Artık çok geç değil mi deyip gülüp geçtiğinizde siz de benim gibi hissedeceksiniz.
2 hafta bir müşteriye tasarım beğendirmeye çalıştığım olmuştu, bu sürede 10 farklı tasarım yapmıştım ve en sonunda buna benzemesin dediği bir sitenin aynısını kopyalamıştım da beğenmişti. O gün benim için dönüm noktası ve tasarımı bıraktığım gündür. Darısı başınıza tasarımcı arkadaşlar, allah kurtarsın :)


Bu ruh halimi yansıtan şarkı
People are crazy and times are strange
I’m locked in tight, I’m out of range
I used to care, but things have changed
I’ve been walking forty miles of bad road
If the Bible is right, the world will explode
I’ve been trying to get as far away from myself as I can
Some things are too hot to touch
The human mind can only stand so much
You can’t win with a losing hand

21 Şubat 2011 Pazartesi

Bir tabloyu dinamik olarak object data sourcedan doldurmak...

Diyelim ki bir tablonuz var, bir dünya field var ve de dinamik olarak dolması gerekiyor. Şu şekil doldurmanız mantıklı olabilir.

Bir object data source ile verileri bir nesneye doldurun, nesneyi veritabanından direkt çekerek veya dinamik olarak sessiondan vs aldığınız değerle doldurabilirsiniz.

<asp:ObjectDataSource ID="odsRaporDetay" runat="server"
OldValuesParameterFormatString="original_{0}" SelectMethod="KayitDetayDondur"
TypeName="VeritabaniIslemleri"></asp:ObjectDataSource><asp:ObjectDataSource ID="odsRaporDetay" runat="server"
OldValuesParameterFormatString="original_{0}" SelectMethod="KayitDetayDondur"
TypeName="VeritabaniIslemleri"></asp:ObjectDataSource>OldValuesParameterFormatString="original_{0}" SelectMethod="KayitDetayDondur" TypeName="VeritabaniIslemleri"></asp:ObjectDataSource>TypeName="VeritabaniIslemleri"></asp:ObjectDataSource>

Tablonuzu aşağıdaki şekilde oluşturun. REF,KOD ve URUN yerine nesnenizdeki isimlerin gelmesi gerekiyor.

<asp:FormView ID="fvDeneme" runat="server" DataSourceID="odsRaporDetay" AllowPaging="True"

EnableViewState="False" Font-Size="X-Small" ><asp:FormView ID="fvDeneme" runat="server" DataSourceID="odsRaporDetay" AllowPaging="True"

EnableViewState="False" Font-Size="X-Small" >EnableViewState="False" Font-Size="X-Small" >
<ItemTemplate><ItemTemplate>
<hr /><hr />
<h3>Referans Numarası : <%# Eval("REF")%></h3><h3>Referans Numarası : <%# Eval("REF")%></h3>
<table border="0" cellspacing="3" cellpadding="3" class="table temp3" Width="750px"><table border="0" cellspacing="3" cellpadding="3" class="table temp3" Width="750px">
<tr>
<th>Kullanıcı Kodu:</th><tr>
<th>Kullanıcı Kodu:</th><th>Kullanıcı Kodu:</th>
<td><%# Eval("KOD")%></td><td><%# Eval("KOD")%></td>
<th>Ürün Bilgisi :</th><th>Ürün Bilgisi :</th>
<td><%# Eval("URUN")%></td> <td><%# Eval("URUN")%></td>
</tr></tr>
</ItemTemplate>
</asp:FormView></ItemTemplate>
</asp:FormView>asp:FormView>

Bu kadar basit. Artık nesneniz dolu olduğunda alanlar direkt doldurulmuş olacak...

18 Şubat 2011 Cuma

Bir bilgisayarı uzaktan erişim ile nasıl yeniden başlatırsınız

Windows 7 işletim sistemine sahip bilgisayarımı uzaktan erişimle bağlandığımda sorun yaşadım ve de bu çözüm. Start menüsündeki arama bölümüne (yani eski Run) --> Cmd yazıp enter'a basıyoruz.
shutdown -r -m \\xxx.xxx.xxx.xxxEğer başka bir bilgisayarı kendi makinanızdan restart etmek isterseniz  xxx.xxx.xxx.xxx alanına IP adresini yazıyorsunuz. İşte bu kadar basit.
-r bilgisayarı yeniden başlatmak için kullanılıyor, kaldırırsanız aynı komutla bilgisayarınızı kapatmış olursunuz.

16 Şubat 2011 Çarşamba

SQL kayıtlarını tek satırda virgülle ayrılmış halde alabilmek

Ne kadar açıklayabildim ama (SQL Server CLR function to concatenate values in a column) durum şu ki, raporlamada istenen bazı olmayacak taleplerden biride normalize ettiğiniz, yani farklı satırlarda tuttuğunuz kayıtları, değişen kolonlarını virgülle ayırıp tek satırda görmek istemeleri, Şekil 1-A

Şekil 1-A

Bunu halletmek için sql cümlesi, fonksiyonu vs olmadığı için, değişik bir yöntem izlemem gerekecek, sonuçları bildireceğim ama referans alacağım sayfa şudur: http://www.mssqltips.com/tip.asp?tip=1691

DevExpress Gridview içinde buton ile seçim yaptırmak


Eğer şu şekil ASPxGridView içinde butonlardan değer almanız gerekirse işte yapılacaklar...

1- Grid için bir object data source yapıyoruz. Normal şekilde kolonları belirliyoruz.

KeyField name alanını doldurmayı unutmadan örnekteki gibi hazırlığı yapıyoruz.


<dx:ASPxGridView ID="gvDegerlendirmeFormu" runat="server" KeyFieldName="Id" AutoGenerateColumns="False"DataSourceID="odsSoruYanitDoldur" OnCustomErrorText="gvDegerlendirmeFormu_CustomErrorText" OnHtmlDataCellPrepared="gvDegerlendirmeFormu_HtmlDataCellPrepared">

<SettingsText CommandCancel="İPTAL" CommandEdit="DEĞERLENDİR" CommandUpdate="TAMAM" />
<SettingsPager Mode="ShowAllRecords" />
<Columns>
<dx:GridViewCommandColumn VisibleIndex="0" Name="DegerlendirButonu">
<EditButton Visible="True"></EditButton>
</dx:GridViewCommandColumn>

<dx:GridViewDataTextColumn FieldName="Id" VisibleIndex="1" Visible="false">
</dx:GridViewDataTextColumn>

<dx:GridViewDataTextColumn FieldName="BaslikAdi" VisibleIndex="2" GroupIndex="0"SortIndex="0" SortOrder="Ascending" Caption=" ">
<EditFormSettings Visible="False" />
<EditFormSettings Visible="False"></EditFormSettings>
</dx:GridViewDataTextColumn>
</Columns>
<Templates>
<EditForm>

<div style="padding: 4px 4px 3px 4px">
<dx:ASPxPageControl runat="server" ID="pageControl" Width="100%" Height="40px">
<TabPages>
<dx:TabPage Text="DETAYLAR" Visible="true">
<ContentCollection>
<dx:ContentControl ID="ContentControl1" runat="server">

<dx:ASPxLabel runat="server" ID="lbBaslik" Text='<%# Eval("BaslikAdi")%>' Width="100%"CssClass="baslik">
</dx:ASPxLabel>

<dx:ASPxLabel runat="server" ID="lbSoruAdi" Text='<%# Eval("SoruAdi") %>' Width="100%"CssClass="baslik">
</dx:ASPxLabel>

<asp:Button runat="server" ID="butBaslik1" Text='<%# Eval("Secenek1")%>' Width="800px"CssClass="label1" OnClick="butBaslik1_Click"></asp:Button>

<asp:Button runat="server" ID="butBaslik2" Text='<%# Eval("Secenek2")%>' Width="800px"CssClass="label2" OnClick="butBaslik2_Click"></asp:Button>

<asp:Button runat="server" ID="butBaslik3" Text='<%# Eval("Secenek3")%>' Width="800px"CssClass="label3" OnClick="butBaslik3_Click"></asp:Button>

<asp:Button runat="server" ID="butBaslik4" Text='<%# Eval("Secenek4")%>' Width="800px"CssClass="label4" OnClick="butBaslik4_Click"></asp:Button>

Yorum :<asp:TextBox runat="server" ID="txtVidi" Width="800px" CssClass="label5" OnTextChanged="TextBox1_TextChanged">

</asp:TextBox>
</dx:ContentControl>
</ContentCollection></dx:TabPage></TabPages></dx:ASPxPageControl>
</div></EditForm></Templates>

2- ContentControl içine butonları yerleştiriyoruz

3- Butonların _Click eventini yakalıyoruz.

Ben aşağıda sessiondan aldığım ve gridi doldurmakta kullandıgım SoruCevapGridNesnesi nesnelerinin tümü arasında dolanıp, hangi nesnenin tuşuna basıldığını yakalamak için gelen butonun text'inden yararlandım. Siz daha efektif bir yol bulabilirsiniz. Bende en iyi çözüm bu oluyordu.

protected void butBaslik1_Click(object sender, EventArgs e)
{
SoruCevapGridNesnesi gonderilecekNesne = new SoruCevapGridNesnesi();

Button deneme = (Button)sender;

ArrayList personelinNotlari = new ArrayList();

personelinNotlari = (ArrayList)Session["PersonelPuanlari"];

foreach
{
if (deneme.Text == scNesnem.Secenek1)
{
gonderilecekNesne = scNesnem;
}
}(SoruCevapGridNesnesi scNesnem in personelinNotlari)gvDegerlendirmeFormu.CancelEdit();
gvDegerlendirmeFormu.ExpandRow(gonderilecekNesne.SoruId - 1);
}




11 Şubat 2011 Cuma

Roger'im canım benim :)

Bunu paylaşmadan olmaz tabii. Sevgili tavşanım Roger'ın keyif hallerinden TV izleme pozisyonu


Bu arada balıklarla ilgili ilginç birşey öğrendim, bir iddia sonucu, o da Beta balığımın solungaçlarına hava aldığını ve dışarıdan oksijen aldığını söylememle oldu. Yok o hava kesesidir dediler ama ben araştırdım ve işte gerçek.  BETA balıkları gerçekten havadan oksijen alabiliyormuş.
Beta, Cennet balığı, Gurami gibi türler Labirentliler olarak adlandırılır, bunun nedeni bulundukları sudaki oksijen miktarı çok düştüğünde hayatta kalmalarını sağlayan labirent adı verilen ek solunum organlarınada sahip olmalarıdır, doğrudan havadan oksijen temin edebilirler. İşte budur...

DevExpress Combobox'ların geri dönüş olmadan bir kontrolü update etmesi

İhtiyacım ComboBoxlarımın geri dönüş yapmadan(postback), sayfadaki textbox alanındaki bir alanın  güncellenmesi için bilgi getirmeleriydi. Uzun uğraşlardan sonra işte çözüm : AspxCallBackPanel

.aspx sayfasını şu şekilde hazırlayın

<dx:ASPxCallbackPanel ID="masterCallback" runat="server"  OnCallback="masterCallback_Callback" ShowLoadingPanel="false" ClientInstanceName="CallbackPanel">
        <PanelCollection><dx:PanelContent>
           <table Width="180px"><tr><td >
           
   <dx:ASPxCheckBox ID="cbSosBogurtlen" Text="Böğürtlen Sosu - 0.75TL" runat="server" Width="157px" ValueChecked="Y" ValueUnchecked="S" ValueType="System.String" >
      <ClientSideEvents CheckedChanged="function(s, e) { CallbackPanel.PerformCallback('cbSosBogurtlen');}" />
   </dx:ASPxCheckBox>
               
                <dx:ASPxCheckBox ID="cbBal" Text="Bal - 0.75TL" runat="server" ValueChecked="Y"  ValueUnchecked="S" Width="157px" ValueType="System.String" >
                   <ClientSideEvents CheckedChanged="function(s, e) { CallbackPanel.PerformCallback('cbBal');}" />
                </dx:ASPxCheckBox>
               
             </td></tr>
 <tr><td ><br />
 Toplam Tutar : <asp:Label ID="lbToplamTutar" runat="server" CssClass="icerikYazi"></asp:Label>
   </td></tr></table>
        </dx:PanelContent></PanelCollection>
    </dx:ASPxCallbackPanel>

.cs sayfasında ise bu geleni alalım

 protected void masterCallback_Callback(object source, DevExpress.Web.ASPxClasses.CallbackEventArgsBase e)
      {
          decimal vidi = 0.0M;
          if (cbSosBogurtlen.Value != null)
          {
              if (cbSosBogurtlen.Value.ToString() == "Y")
                  vidi = vidi + 0.75M;
          }
        if (cbBal.Value != null)
          {
              if (cbBal.Value.ToString() == "Y")
                  vidi = vidi + 0.75M;
          }
        lbToplamTutar.Text =(decimal.Parse(lbToplamTutar.Text) + vidi).ToString();
      }

işte budur ;)

Windows 7 de kilitlenme problemi

Bilgisayarıma Windows 7'yi kurduk ve sorunlar başladı.  Neden olduğu hala anlaşılamadı ama imajını alıp yeniden kurulduğunda da sorun devam ediyor. ÇEşitli bloglardan öğrendiğim kadarıyla networkde çalışan servislerin bilgisayara erişimi veya çok fazla kullanıcı adı ile giriş yapılması Windows 7'nin kilitlenmesine neden oluyormuş. İşte bu sorun için bir SP1 kurulumunu öneriyorlar ve bende önerileni yapıyorum. Sorunun çözülüp çüzülmediğini haber veririm.

İşte Windows 7 SP1'i indirebileceğiniz adres : http://www.ngohq.com/news/19212-windows-7-service-pack-1-final.html

Ekleme : Evet kilitlenme sorunu service pack yüklendikten sonra çözüldü.