20 Mart 2014 Perşembe

ms sql coklu sonuc donduren subquery i concat etmek

SELECT
.
.
.
(SELECT
Stuff(    (SELECT
N', ' + YTable.YArea2
FROM
YTable   
WHERE
XTable.Xarea = YTable.YArea    FOR XML PATH(''),TYPE)    .value('text()[1]',
'nvarchar(max)'),
1,
2,
N''))      AS Area,
FROM XTable
WHERE
.
.
.
.



ayrıca mysql de de group_concat adlı fonksiyon bu işlemi yapabilir.

20 Kasım 2013 Çarşamba

Sayıyı yazıya dönüştürme.

        var SayiYazdirma = function(yazdirilacakSayi){
            this.desteklenebilecekSayiBasamagi = 4;
            this.yazdirilacakSayi = parseInt(yazdirilacakSayi);
            this.sayininRakamlari = new Array();
            this.mevcutSayiBasamakSayisi = 0;
            this.enBuyukBolen = 0;
            this.sayininYaziHali = '';
            this.sayiSistemiHesapla = function(){
                if(this.desteklenebilecekSayiBasamagi == 1 || this.yazdirilacakSayi<10){
                    this.enBuyukBolen = 1;
                    this.mevcutSayiBasamakSayisi = 1;
                    return;
                }
                var bolen = 1;
                for(var i=0;i<this.desteklenebilecekSayiBasamagi;i++){
                    bolen *= 10;
                    if(Math.floor(this.yazdirilacakSayi)/bolen<10){
                        this.enBuyukBolen = bolen;
                        this.mevcutSayiBasamakSayisi = i+2;
                        return;
                    }
                }
                this.enBuyukBolen = bolen/10;
                this.mevcutSayiBasamakSayisi =  this.desteklenebilecekSayiBasamagi;
            };
            this.sayiSistemiHesapla();
            this.rakamlarinaAyir = function(){
                if(this.mevcutSayiBasamakSayisi == 1){
                    this.sayininRakamlari[0] = yazdirilacakSayi;
                }
                var bolen = this.enBuyukBolen;
                var sayiTemp = this.yazdirilacakSayi;
                for(var i=0;i<this.mevcutSayiBasamakSayisi;i++){
                    if(i==this.mevcutSayiBasamakSayisi-1){
                        this.sayininRakamlari[i] = sayiTemp;
                        break;
                    }
                    this.sayininRakamlari[i] = Math.floor(sayiTemp/bolen);
                    if(this.sayininRakamlari[i]!=0){
                        sayiTemp = sayiTemp - (this.sayininRakamlari[i]* bolen);
                    }
                    bolen = bolen/10;
                }
            };
            this.rakamlarinaAyir();

            this.rakamBasamakYaziKarsiligi = function(rakam,rakamIndexi){

                var deger = '';
                switch (rakam) {
                    case 1:
                        switch (rakamIndexi) {
                            case 1:
                                deger = "bir";
                                break;
                            case 2:
                                deger = "on"
                                break;
                            case 3:
                                deger = "yuz"
                                break;
                            case 4:
                                deger = "bin"
                                break;
                        }
                        break;
                    case 2:
                        switch (rakamIndexi) {
                            case 1:
                                deger = "iki";
                                break;
                            case 2:
                                deger = "yirmi"
                                break;
                            case 3:
                                deger = "ikiyüz"
                                break;
                            case 4:
                                deger = "ikibin"
                                break;
                        }
                        break;
                    case 3:
                        switch (rakamIndexi) {
                            case 1:
                                deger = "üç";
                                break;
                            case 2:
                                deger = "otuz"
                                break;
                            case 3:
                                deger = "üçyüz"
                                break;
                            case 4:
                                deger = "üçbin"
                                break;
                        }
                        break;
                    case 4:
                        switch (rakamIndexi) {
                            case 1:
                                deger = "dört";
                                break;
                            case 2:
                                deger = "kırk"
                                break;
                            case 3:
                                deger = "dörtyüz"
                                break;
                            case 4:
                                deger = "dörtbin"
                                break;
                        }
                        break;
                    case 5:
                        switch (rakamIndexi) {
                            case 1:
                                deger = "beş";
                                break;
                            case 2:
                                deger = "elli"
                                break;
                            case 3:
                                deger = "beşyüz"
                                break;
                            case 4:
                                deger = "beşbin"
                                break;
                        }
                        break;
                    case 6:
                        switch (rakamIndexi) {
                            case 1:
                                deger = "altı";
                                break;
                            case 2:
                                deger = "altmış"
                                break;
                            case 3:
                                deger = "altıyüz"
                                break;
                            case 4:
                                deger = "altıbin"
                                break;
                        }
                        break;
                    case 7:
                        switch (rakamIndexi) {
                            case 1:
                                deger = "yedi";
                                break;
                            case 2:
                                deger = "yetmiş"
                                break;
                            case 3:
                                deger = "yediyüz"
                                break;
                            case 4:
                                deger = "yedibin"
                                break;
                        }
                        break;
                    case 8:
                        switch (rakamIndexi) {
                            case 1:
                                deger = "sekiz";
                                break;
                            case 2:
                                deger = "seksen"
                                break;
                            case 3:
                                deger = "sekizyüz"
                                break;
                            case 4:
                                deger = "sekizbin"
                                break;
                        }
                        break;
                    case 9:
                        switch (rakamIndexi) {
                            case 1:
                                deger = "dokuz";
                                break;
                            case 2:
                                deger = "doksan"
                                break;
                            case 3:
                                deger = "dokuzyüz"
                                break;
                            case 4:
                                deger = "dokuzbin"
                                break;
                        }
                        break;
                    case 0:
                        switch (rakamIndexi) {
                            case 1:
                                deger = "sıfır";
                                break;
                            case 2:
                                deger = ""
                                break;
                            case 3:
                                deger = ""
                                break;
                            case 4:
                                deger = ""
                                break;
                        }
                        break;
                }
                return deger;
            }

            this.sayiyiYaziyaDonustur = function(){
                var deger = '';
                for(var j= 1,i=this.mevcutSayiBasamakSayisi-1;i>=0;i--,j++){
                    deger = this.rakamBasamakYaziKarsiligi(this.sayininRakamlari[i],j) + ' ' + deger;
                }
                this.sayininYaziHali = deger;
                return deger;
            }
        }

var sayiYazdirmaNesnesi = new SayiYazdirma(95214); window.alert(sayiYazdirmaNesnesi.sayiyiYaziyaDonustur());


http://www.daltinkurt.com/Icerik/185/Sayiyi-yaziya-donusturme.aspx

http://www.hayatisahin.com/BlogEngine/?tag=/C%23+Say%C4%B1y%C4%B1+Yaz%C4%B1ya+%C3%87evirme

11 Kasım 2013 Pazartesi

asp.net iss subdirectory webconfig probleminden kurtulma



Eğer iss application ununzda root directory altında subdirectory ler varsa webconfig ler karışıyorsa root webconfig dosyanızın system.web tagları üstüne location tagını inheritInChildApplications parametresini set ederek ekleyin.


<location path="." inheritInChildApplications="false">
    <system.web>
    ...

1 Kasım 2013 Cuma

duck typing ve mix-in

http://yazilimsozluk.com/mixin-teknigi-ve-duck-typing-paradigmasi   na istinaden yazılmıştır.


Dostum Duck typing i bildiğim kadarıyla anlatmaya çalışayım. Yazdığım şeylerin tamamı doğru olmayabilir ama benim anladığım bunlardır. Linq yu incelerken görmüştüm. Aslında javacıyım ama java da bu özellik direk olarak desteklenmiyor. O yüzden .net üzerinden anlatmaya çalışcam. Duck typing i java da sağlamak istiyorsan sanırım reflection kullanarak işin içinden çıkabilirsin fakat bilemiyorum kendisini pek sevmem.

Duck typing in bana ifade ettiği şey kısaca kalıtım özelliğini kullanmadan çok biçimlilik özelliğini destekleyebilmektir. O yüzden bence adamlar bunu nesneye yönelik olmayan dillerde çok biçimliliği desteklemek için yapmışlar. Aslında farkında olmadan javascriptte bu olayı çok kullanıyoruz. Ruby de de oldukça fazla kullanılır. Mesela javascriptte kullanırken diyelim ki bir A ve B diye 2 sınıfımız var. A ve B sınıfımızında birer denemeMetodu isimli metodu olsun. Ben bu metodları şu şekilde çağırabilirim.

var denemeArray = [];
denemeArray.push(aNesnesi);
denemeArray.push(bNesnesi);
var fakeFunction=function(nesne){
    nesne.denemeMetodu();
}
for(var i=0;i<denemeArray.length;i++){
     fakeFunction(denemeArray[i]);
}
Şimdi yukarıda javascript ile birbirinden tamamen bağımsız olan A ve B sınıflarının ortak olan metodunu sanki bunların atası aynıymış gibi (tamam teorik olarak hepsi object ten türüyor ama aynı değil) kullanabildik ve nesnenin ne oldugunu önemsemeden denemeMetodunu çağırabildik. Böyle birşeyi java ve ya c# ta nasıl sağlardık? Pseu olarak yazıyorum.

class C{

}

class A extends C{

     public void denemeMetodu(){
     
     }
}


class B extends C{

     public void denemeMetodu(){
     
     }
}

class E{

     public static void cDenTuretilenleriAl(C nesne){
           nesne.denemeMetodu();
     }
     public static void main(string [] args){
          A aSinifi = new A(); 
          B bSinifi = new B();
          cDenTuretilenleriAl(aSinifi);
          cDenTuretilenleriAl(bSinifi);
     }
}

Yukarıda da cDenTuretilenleriAl ın parametre olarak A ve B sınıflarını beraber kabul edebilmesi için A ve B sınıflarını C den türetip parametre olarak C sınıfını geçtik. Şimdii...
.net içerisine 4 ile gelen dynamic tip ile bunu şöyle yazabiliyoruz.

class A{

     public void denemeMetodu(){
     
     }
}


class B{

     public void denemeMetodu(){
     
     }
}
class E{

     public static void cDenTuretilenleriAl(dynamic nesne){
           nesne.denemeMetodu();
     }
     main(string [] args){
          A aSinifi = new A(); 
          B bSinifi = new B();
          cDenTuretilenleriAl(aSinifi);
          cDenTuretilenleriAl(bSinifi);
     }
}
böylece ne oldu. cDenTuretilenleriAl na çok biçimlilik kazandırmış olduk. Hemde kalıtım özelliğini kullanmadan. Bu kullanımın performans olayını falan bilmiyorum stress testi yapmak lazım ama bence bunu yapabilmesi için arkada biryerlerde yine reflection kullanıyordur. Reflection da java dan tanıdığım kadarıyla performans konusunda biraz sıkıntılı. Son çare dir her zaman.

mix-in olayına gelince. Buna fazla yazamıycam gücüm tükendi :-) Yine anladığım kadarıyla bir sınıfa çoklu kalıtım teknikleri kullanarak yeni özellikler katmak üzerine kurulu bi teknik. Mesela diyelim ki aynı özelliği kullanması gereken bir sürü class ın var. Run time da bu class ların tümüne birden bir özelliği katmana yarayan birşey bu olay. Ya da yine runtime da bazı sınıflara farklı işlevsellikleri kazandırmaya yarıyor. tabi bunu dediğim gibi kalıtım üzerinden yapıyorsun. Ama çoklu kalıtım. Yani bu teknik java c# gibi tekli kalıtım destekleyen dillerde kullanılamaz.Phyton gibi çoklu kalıtım destekleyen bir dilde kullanılabilir. Çünkü adam bi sınıfı sürekli extension lar ekliyor ve biz c# ta ve java da bir sınıfı sadece 1 sınıftan extend edebiliyoruz. tabi istediğimiz kadar interface den implement edebiliriz fakat metodların implementasyonları olmamış olur fakat bu teknik için implemantasyonları yapılmış metodlara ihtiyac var o yüzden sınıfa ihtiyacımız var.

Umarım biraz birşeyler anlatabilmişimdir dostum. Kolay gelsin.

8 Kasım 2012 Perşembe


http://www.yazilimsozluk.com/Konular-2101-javascipt_yard%C4%B1m.aspx da bir soruya cevap olarak benim tarafımdan yazılmıştır.


Dostum ben ayrı bir form kullanarak yapmışım upload işini sayfanın refleshlenmesinden kurtulabileyim diye. Ayrı bir form tanımlayıp içine bi file elementi bir de submit butonu eklemişim. Resim de diğer form da div de gösteriliyor. Div in background ını set ederek resmi göstertmişim. Adam file elementten resim seçtikçe oradaki resmi de değiştirmişiz. Sonra submit e bastığında o ayrıyetten oluşturduğum formun formdata sına resmi atımışım ve o şekilde servlet e yollamışım. Örnek kod vericem umarım işine yarar.

//Alttaki kısım html de yer alıyor.Action da upload edilecek servis adresi,
//onsubmit te de çalışacak javascript metodları var.
//File nesnesinin onclick inde de çalışacak javascriptler var.Birşey
//seçildiğinde anaformun içindeki div in background ının değiştirilmesi
//falan.
<form action="/Fide/formdesigner/resimekle" name="ggrd23_form" id="ggrd23_form" method="post" enctype="multipart/form-data" target="ggrd23_frame" onsubmit="var fide_formIslemi=new Fide_AnaFormIslemleri(document.forms,'panellistgrid',
document.forms['ggrd23']);return fide_formIslemi.fide_formSubmiteResimEkle('ggrd23_image19_file');">
<input name="ggrd23_image19_file" id="ggrd23_image19_file" class="ggrd23_image19_file" type="file" value="Dosya Seç"
onchange="var fide_formIslemi=new Fide_AnaFormIslemleri(document.forms,'panellistgrid',
document.forms['ggrd23']); fide_formIslemi.fide_secilenResmiGösterici(this,'ggrd23_image19');">
</input>
<input name="ggrd23_image19_submit" id="ggrd23_image19_submit" class="ggrd23_image19_submit" type="submit"
value="Resmi Gönder"></input>
</form>
//Aşağıdaki metod file nesnesinin onchange inde çalışan metod. Resim
//seçildiğinde gidiyor div in background ını değiştirererek kullanıcıya
//resim gösteriyor. Senin için gereksiz ve benim için gizliliği önemli olan
//birkaç yeri sildim. Umarım fazla silmemişimdir :-)

/**
     *
     * Resim nesnelerinde choosefile butonu ile seçtiğimiz resmin gösterilmesini
     * sağlayan metoddur.
     *
     * @param input
     *            File nesnesinin kendisi
     * @param fide_resimNesnesiAdi
     *            Hangi resim nesnesinde gösterilmesini istiyorsak o ad
     *            girilecek.
     */
    this.fide_secilenResmiGösterici = function (input, fide_resimNesnesiAdi) {
        /**
         * Dosya seçilmeden tamam a basılmışsa bir işlem yapmıyoruz.
         *
         */
        if (input.files && input.files[0]) {
            /**
             * Bizim istediğimiz tip image Başka tip upload etmiycez ve resim
             * nesnesinde de gösteremeyiz zaten.
             *
             */
            /**
             *
             * Daha sonra da reader ile okuyoruz. Onload ını override edip
             * istediğimiz nesnenin istediğimiz özelliğini dolduruyoruz.
             *
             */
            if (input.files[0].type.indexOf('image') >= 0) {
                var reader = new FileReader();
                reader.onload = function (e) {
//                    document.getElementById(fide_resimNesnesiAdi + 'resim').style.backgroundImage = "url("
//                        + this.result + ")";
                    document.getElementById(fide_resimNesnesiAdi + 'resim').style.backgroundImage =
document.getElementById(fide_resimNesnesiAdi + 'resim').title;
                };
                reader.readAsDataURL(input.files[0]);
                return;
            } else {
                window.top.popupOlusturucuHata(fide_jsDil.gecerliResimBulunamadi(),
                    3000);
                document.getElementById(fide_resimNesnesiAdi + 'resim').value = "";
                return;
            }
        }
        document.getElementById(fide_resimNesnesiAdi + 'resim').value = "";
    };
//Bu da formun onsubmitinde çalışacak method. File elementinden
//seçili dosyayı alıyor ve bir formdata oluşturarak onun içine basıyor.
//Daha sonra da o formdata yı return ediyor. Return edilince de o
//formdata Action da yazılan adrese gidiyor içindeki resim ile beraber.
//Karşıda da o resmi okuyup istediğini yapıyorsun.


/**
     *
     * Resim upload edebilmek için kullanmamız gereken metoddur. Resim upload
     * edebilmek için harici bir form kullanıyoruz. Bu metod genelde onsubmit
     * metodnda çağırılır. Yeni bir formdata oluşturulur ve bunun içine image
     * eklenir. Formu post ettiğimizde karşıya burada oluşturulan formun
     * gönderilmesi sağlanır.
     *
     *
     * @param fide_resimNesnesiAdi
     */
    this.fide_formSubmiteResimEkle = function (fide_resimNesnesiAdi) {
        var fide_images = document.getElementById(fide_resimNesnesiAdi).files;
        if (fide_images.length == 0) {
            window.top.popupOlusturucuHata(fide_jsDil.seciliResimBulunamadi(), 3000);
            return null;
        }
        var fide_formData = new FormData();
        for (var i = 0; i < fide_images.length; i++) {
            if (fide_images[i].type.indexOf("image") >= 0) {
                fide_formData.append('image', fide_images[i]);
            } else {
                window.top.popupOlusturucuHata(fide_jsDil.gecerliResimBulunamadi(),
                    3000);
                return null;
            }
        }
        window.top.popupOlusturucuBasarili(fide_jsDil.resimGonderildi(),
            3000);
        return fide_formData;
    };
Umarım işine yarar. En azından fikir verir. Kafanı karıştırdıysam affola. Kolay gelsin.

1 Kasım 2012 Perşembe

Çarpımları toplamlarının 7 katı olan 3 adet pozitif çift tam sayıyı bulma.



Elimizde 3 adet pozitif çift tamsayı var. Bu sayıların
çarpımlarını, toplamlarına bölünce 7 sayısını elde
ediyoruz. Bu sayıları bulan kodu yazınız. ( Sayılar 1
ile 10.000 arasında olacak.) bu sorunun nasıl bir algoritması olacak. Sorusuna cevap olarak yazılmıştır.

package main;
import java.util.Calendar;
/**
*
*
*
* @author Murat GUZEL
*
* (Elimizde 3 adet pozitif çift tamsayı var. Bu sayıların
* çarpımlarını, toplamlarına bölünce 7 sayısını elde
* ediyoruz. Bu sayıları bulan kodu yazınız. ( Sayılar 1
* ile 10.000 arasında olacak.) bu sorunun nasıl bir algoritması olacak).
* Sorusuna cevap olarak benim tarafımdan yazılmıştır.
*
*/
public class Deneme {
     public static void main(String[] args) {
     long ilkZaman=Calendar.getInstance().getTimeInMillis();
     int sayilarinCarpimi = 14;
     int sayilarinToplami = 0;
     while(sayilarinCarpimi<10000){
          sayilarinToplami=sayilarinCarpimi/7;
          for(int i=2;i<sayilarinToplami-2;i+=2){
               for(int j=i;j<sayilarinToplami-2;j+=2){
                    for(int k=j;k<sayilarinToplami-2;k+=2){
                         if((i+j+k)*7==sayilarinCarpimi && (i*k*j)==sayilarinCarpimi){
                              System.out.println(i + " " + j + " " + k);
                              break;
                         }
                    }
               }
          }
          sayilarinCarpimi+=14;
     }

     long sonZaman=Calendar.getInstance().getTimeInMillis();
     long zamanFarki = sonZaman - ilkZaman;
     if(zamanFarki>1000){
          System.out.println((zamanFarki-zamanFarki%1000)/1000 + " saniye ve " + zamanFarki%1000 + "                                         milisaniye");
     }else{
          System.out.println(zamanFarki + " milisaniye");
     }
}
}