Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Fotoğrafı ile ara.

Konu, 'Proje Geliştirme' kısmında sedirAğacı tarafından paylaşıldı.

  1. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    916
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    Sitenin alan adını aldım.

    www.toyhan.net

    Fotoğrafı ile kişi arama, ankara, istanbul, izmir gibi şehirlerde bir kişiyi fotoğrafı ile arayıp bulabiliyorsun.

    Biliyorum google ın benzer uygulaması var. Onda var diye ben yazmayayımmı.? o_O
    Zaten benim projede fotoğraf ile arama işlemi sadece %20 gibi bir bölümü oluşturuyor ve amaç google ile çok farklı, diğer bölümler ise %80.

    Tabi sitenin bitmesine daha çok var, tahminim bu yıl sonu ancak.

    Alan adını erken almamın sebebi, gerçek site yükleninceye kadar, arama motorları benim alan adına alışsın diye.

    Tabi alan adının arkası boş dursa olmaz, gerçek projenin bi kaç sayfasını sadeleştirerek yükledim. Bi kaç tanede internetten bulduğum test fotoğrafları koydum.

    Projede openCV kullandığımdan, web servere attığımda bir sürü sorun ile karşılaştım. 3 günde ancak halledebildim.

    Normalde windows web serverde bi kaç yeri tıklasalar hallolacak bişeydi, tıklayacakları yerleride gösterdim.
    Ama olmaz dediler, sana özel bulut server kiralayıp kendin tıklamalısın dediler. Haklılar bişey diyemedim.

    Ama siteye özel bulut sunucu 12 kat daha pahalı olduğundan, şimdiden kiralamamın anlamı yoktu. Bulut sunucu yerine kendi sunucunu satın alıp işletsen daha ucuza geliyor ya.? Oda ayrı mesele. Başında sürekli ilgilenen biri olması lazım.

    Sonuçta openCV nin tıklamak gerektirmeyen eski sürümünü web servere yükledim.

    Artık arama motorlarının kapıyı çalmasını bekliyor site. Şekerle kapının önünde bekliyoruz.

    Asıl siteyi yıl sonuna kadar yetiştireceğimi umuyorum.
     
  2. dinlex

    dinlex Aktif Üye

    Kayıt:
    23 Aralık 2016
    Mesajlar:
    345
    Beğenilen Mesajlar:
    89
    Şehir:
    Hatay
    Peki neye göre buluyor ki bu? İbrahim tatlısesi bile bulamadıysa kimseyi bulamaz :D
     
  3. dinlex

    dinlex Aktif Üye

    Kayıt:
    23 Aralık 2016
    Mesajlar:
    345
    Beğenilen Mesajlar:
    89
    Şehir:
    Hatay
    İlk yüklediğim resimde bir sonuç çıkmadı. ikincisinde ibrahim tatlısesin resmini koyunca ilk yüklediğim resmi benzer resim olarak buldu ve ihtimal %22 dedi. İlk resim kadındı :))
     
  4. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    916
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    kemik ve kıkırdak yapısına göre buluyor. :p

    Valla neye göre bulduğunu bilmiyorum, kitabını aldım ama okumadım daha. Bulma işini yapan openCV paketi, intel firmasının.
    Yüzdeki göz, burun, ağız gibi organların büyüklükleri ve birbirlerine olan mesafelerine göre buluyor olabilir.

    Ayrıca orada yazdığım gibi sadece sitede bişeyler olsun diye koydum. Henüz gerçek arama yapmıyor. Üç beş test resmi koymuştum, onlar arasından ibrahim tatlısesi aramıştır, bulamayınca üzülmüştür.:confused: Yazık oldu üzdük amerikalıyı.
     
    dinlex bunu beğendi.
  5. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    916
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    HTML de select option lu bi kaç element var. Onları javascript ile kullanmak genelde zahmetli oluyor. kaçıncı seçenek işaretlenmiş, işaretlenen seçeneği al yada işaretle gibi işlemler lazım oluyor. Bugün çok seçenekli radio elementi lazım oldu.
    Burayada asayım, hap gibi yazanı internette kısa bi aramada bulamadım, mecbur ben yazdım.


    HTML:
    /*
        jfRadioID: radio list ID.
        jfI: radio listin hangi indexli seçeneğine true değeri atanacak.
        örnek: setTrueRadioListItem("konu", 2)  // konu id li radioButtonList de, 2 nolu indexi seçili yapar.
    */
    function setTrueRadioListItem(jfRadioID, jfI) {
        let jj = 0;
        const myInput = document.getElementsByTagName("input");
        if (myInput != null) {
            for (var ii = 0; ii < myInput.length; ii++) {
                if (myInput[ii].type === 'radio') {
                    if (myInput[ii].name.indexOf(jfRadioID) > -1 || myInput[ii].id.indexOf(jfRadioID) > -1) {
                        if (jfI == jj) { myInput[ii].checked = true; break; }   // ii: aktif input. jj: istenen inputun kaçıncı indexi
                        jj++;
                    }
                }
            }
        }
    }
    /*
        jfRadioID: radio list ID.
        radio listte seçili olan Item in index değerini döndürür.
        örnek: getTrueRadioListItem("konu");    // konu id li radioButtonList de, index no yu döndürür.
    */
    function getTrueItemRadioList(jfRadioID) {
        let jj = 0;
        const jfInput = document.getElementsByTagName("input");
        if (jfInput != null) {
            for (var ii = 0; ii < jfInput.length; ii++) {
                if (jfInput[ii].type === 'radio') {
                    if (jfInput[ii].name.indexOf(jfRadioID) > -1 || jfInput[ii].id.indexOf(jfRadioID) > -1) {
                        if (jfInput[ii].checked === true) { return jj; break; }
                        jj++;
                    }
                }
            }
        }
        return -1;  // bulunamadı.
    }
    
    Buda test sayfası.

    HTML:
    <!DOCTYPE html>
    <html>
    <head>
    
    </head>
    <body style="padding: 70px;">
    
      <input type="text" id="txSet" value="1"  />
    &nbsp; &nbsp;
      <input type="button" id="btSet" value="SET et" onclick="setTrueRadioList('gender')" />
    
    <br /><br />
    
    <input type="radio" id="gender1" name="gender" value="a"> AAA<br>
      <input type="radio" id="gender2" name="gender" value="b"> BBB<br>
      <input type="radio" id="gender3" name="gender" value="c"> CCC<br>
      <input type="radio" id="gender4" name="gender" value="d"> DDD
    
    <br /><br /><br />
    
    
    <br /><br />
    
      <input type="button" id="btGet" value="GET et" onclick="getTrueRadioList('gender')" />
         &nbsp; &nbsp;
        <span id="spnR" style="padding: 6px; width: 60px; border: 1px solid white;"></span>
    </body>
    </html>
    
    
    <script type="text/javascript">
    
    
    
    // jfRadioID: radio list ID.
    // jfI: radio listin hangi indexli seçeneğine ine true değeri atanacak.
    function setTrueRadioList(jfRadioID) {
        let jj = 0;
        const myInput = document.getElementsByTagName("input");
        const jfI = document.getElementById("txSet").value;
        if (myInput != null) {
            for (var ii = 0; ii < myInput.length; ii++) {
                if (myInput[ii].type === 'radio') {
                    if (myInput[ii].name.indexOf(jfRadioID) > -1 || myInput[ii].id.indexOf(jfRadioID) > -1) {
                        if (jfI == jj) { myInput[ii].checked = true; break; }   // ii: aktif input. jj: istenen inputun kaçıncı indexi
                        jj++;
                    }
                }
            }
        }
    }
    
    
    function getTrueRadioList(jfRadioID)
    {
    
        const mSpn = document.getElementById("spnR");
        mSpn.innerText = "";
        let jj = 0;
    //    console.log("mI: " + mI);
    
        const myInput = document.getElementsByTagName("input");
        if (myInput != null)
        {
            for (var ii = 0; ii < myInput.length; ii++)
            {
                if (myInput[ii].type === 'radio')
                {
                    if (myInput[ii].name.indexOf(jfRadioID) > -1 || myInput[ii].id.indexOf(jfRadioID) > -1)
                    {
                        if (myInput[ii].checked === true) { mSpn.innerText = jj; break; }
                        jj++;
                                    }
                }  
            }  
        }
    }
    </script>
    
     
    Son düzenleme: 23 Haziran 2018
  6. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    916
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    sitede resim yerine utf-8 karakterler kullanayım hız artar dedim.

    UTF-8 unicode karakterler çok fazla binlerce.
    Tek tek araştırmak yerine javascript kod yazdım. Tüm karakterleri kullanışlı bi şekilde listeliyor.

    Umarım işinize yarar.
    Bide .svg vektörel karakterler var ama uğraşmaya değermi bilmem. 2 tane kullandım.

    HTML:
    <!DOCTYPE html>
    <html>
    <head>
    <title>html utf-8 unicode özel karakter karşılıklarını gör</title>
    <meta charset="utf-8" />
    
    
    <style>
    body { font-family: sans-serif; font-size: 12px; color: #1b1b1b; }
    [id*='tdAdd'] {
        padding: 10px; width: 300px; vertical-align: top;
    }
    .padL40 { padding-left: 40px; }
    .pad4_ { padding: 4px; }
    .cPointer { cursor: pointer; }  /* hand */
    .borderBottomS1 { border-bottom: 1px solid silver; }
    .cSilver { color: silver; }
    .cGray { color: gray; }
    .font12 { font-size: 12px; }
    .font20 { font-size: 20px; }
    .font14 { font-size: 14px; }
    .backEf { background-color: #efefef; }
    .backWht { background-color: #fff; }
    
    .tblGridS { border-spacing: 2px; }
    .tblGridS caption { color: #fff;  padding: 6px; border-bottom: 1px solid gray;}
    .tblGridS th { border: 0px solid silver; font-weight: 500; padding: 4px; }
    .tblGridS td { border: 1px solid silver; padding: 5px; text-align: left; }
    
    </style>
    
    </head>
    <body class="padL40 backEf ">
    <p>
        text alana entity rakamı gir örneğin 8595 veya 8962 veya 129407 - sonra adet gir örn: 10 ve işlem tuşuna bas. ie, me, ch OK
    </p>
    bu rakam, rakam alanına aktarılır.
    <br />
    <span class="pad4_ cPointer borderBottomS1" onclick="fTakeEl('tx1').value = this.innerText;" title="">0</span>
    <span class="pad4_ cPointer borderBottomS1" onclick="fTakeEl('tx1').value = this.innerText;" title="">255</span>
    <span class="pad4_ cPointer borderBottomS1" onclick="fTakeEl('tx1').value = this.innerText;" title="arapça">1536</span>
    <span class="pad4_ cPointer borderBottomS1" onclick="fTakeEl('tx1').value = this.innerText;" title="işaretler">5120</span>
    <span class="pad4_ cPointer borderBottomS1" onclick="fTakeEl('tx1').value = this.innerText;" title="houseHomeEv - uzun işaretler - oklar - rakamlar - roma">8960</span>
    <span class="pad4_ cPointer borderBottomS1" onclick="fTakeEl('tx1').value = this.innerText;" title="Trafik - doğa. - oklar - telex - kutular - pişti">9917</span>
    <span class="pad4_ cPointer borderBottomS1" onclick="fTakeEl('tx1').value = this.innerText;" title="TL - süslü harfler - roma rakamları - oklar - çizgiler - işaretler ">8370</span>
    <span class="pad4_ cPointer borderBottomS1" onclick="fTakeEl('tx1').value = this.innerText;" title="Çince">13056</span>
    <span class="pad4_ cPointer borderBottomS1" onclick="fTakeEl('tx1').value = this.innerText;" title="">126975</span>
    <span class="pad4_ cPointer borderBottomS1" onclick="fTakeEl('tx1').value = this.innerText;" title="zarlar - renkli-meyveler-doğa - arabalar - saat - evler - hayvanlar - smileys - chart">127000</span>
    <span class="pad4_ cPointer borderBottomS1" onclick="fTakeEl('tx1').value = this.innerText;" title="evler">127900</span>
    <span class="pad4_ cPointer borderBottomS1" onclick="fTakeEl('tx1').value = this.innerText;" title="">128400</span>
    <span class="pad4_ cPointer borderBottomS1" onclick="fTakeEl('tx1').value = this.innerText;" title="">129407</span>
    <span class="pad4_ cPointer borderBottomS1" onclick="fTakeEl('tx1').value = this.innerText;" title="insan yıldızlar oklar smile">128713</span>
    <span class="pad4_ cPointer cSilver" title="tıklama">(55.296 - 119.040 arası boş - 178.206 dan sonrası boş)</span>
    
    
    
    <div style="padding: 14px;">
        <div id="spnR" class="pad4_ cPointer" onclick="fTakeEl('tx1').value = this.innerText;" title="rakam  rakam alanına aktarılır."></div>
    
        <table class="tdLeft backWht tblGridS" style="width: 1200px;">
            <tr>
                <td colspan="5" style="padding: 10px; color: teal;">
                    rakam: <input id="tx1" type="number" class="txEntryWhite" value="8370" />
                    <span style=" margin-left: 40px;">
                        adet : <input id="tx2" type="number" class="txEntryWhite" value="100" style="width: 60px;"/>
                    </span>
                    <span style=" margin-left: 40px;">
                        <input type="button" value="&#10094; işlem" onclick="islemYap('sola')"/>
                    </span>
                    <span style=" margin-left: 40px;">
                        <input type="button" value="işlem &#10095;" onclick="islemYap('saga')"/>
                    </span>
                    <span style=" margin-left: 30px;">
                        <span class="pad4_ cPointer borderBottomS1" onclick="fTakeEl('tx2').value = this.innerText;" title="bu rakam, adet alanına aktarılır.">100</span>
                        <span class="pad4_ cPointer borderBottomS1" onclick="fTakeEl('tx2').value = this.innerText;" title="bu rakam, adet alanına aktarılır.">200</span>
                        <span class="pad4_ cPointer borderBottomS1" onclick="fTakeEl('tx2').value = this.innerText;" title="bu rakam, adet alanına aktarılır.">400</span>
                        <span class="pad4_ cPointer borderBottomS1" onclick="fTakeEl('tx2').value = this.innerText;" title="bu rakam, adet alanına aktarılır.">600</span>
                        <span class="pad4_ cPointer borderBottomS1" onclick="fTakeEl('tx2').value = this.innerText;" title="bu rakam, adet alanına aktarılır.">1000</span>
                        <span class="pad4_ cPointer borderBottomS1" onclick="fTakeEl('tx2').value = this.innerText;" title="bu rakam, adet alanına aktarılır.">2000</span>
                    </span>
                </td>
            </tr>
            <tr>  
                <td id="tdAdd1"></td>
                <td id="tdAdd2"></td>
                <td id="tdAdd3"></td>
                <td id="tdAdd4"></td>
                <td id="tdAdd5"></td>
            </tr>
        </table>
    </div>
    
    </body>
    </html>
    
    
    
    <script>
    
    
        function islemYap(jDirection) {
            removeAllChilds("tdAdd1,tdAdd2,tdAdd3,tdAdd4,tdAdd5");
          
            let jTxNumber = fTakeEl("tx1");
            let jTxAdet = fTakeEl("tx2").value.trim();
    
            if (jDirection == "sola")  jTxNumber.value = jTxNumber.value - jTxAdet;
            const jYedek = fTakeEl("spnR");
            jYedek.innerText = jTxNumber.value.trim();
    
            if (jTxAdet == "") jTxAdet = 100;
            let jLine = 20;
            if (jTxAdet > 100) jLine = Math.floor(jTxAdet/5);            // aşağı yuvarla.
            if (jTxNumber != null && jTxNumber.value.trim() != "") {
                for (var ii = 0; ii < jTxAdet; ii++) {
                    var jElem = crtElemDyn("DIV", "dv" + ii.toString(), "260px", "", "font20 pad4_ borderBottomS1");
                    let jN = Number(jTxNumber.value.trim()) + ii;
                    if (jElem !== null && typeof (jElem) !== 'undefined') {
                        var jTdAdd;
                        jElem.innerHTML="<span class='pad4_ font12 cSilver'>"+(ii+1).toString()+"- &nbsp; </span>"+("&#"+jN.toString()+";")+"<span class='pad4_ font14' style='padding-left: 80px;'> "+("&amp;#"+jN.toString()+";").toString()+"</span>";      
                        if (ii < jLine) {
                            jTdAdd = fTakeEl("tdAdd1");
                        } else if (ii < jLine*2) {
                            jTdAdd = fTakeEl("tdAdd2");
                        } else if (ii < jLine*3) {
                            jTdAdd = fTakeEl("tdAdd3");
                        } else if (ii < jLine*4) {
                            jTdAdd = fTakeEl("tdAdd4");
                        } else {
                            jTdAdd = fTakeEl("tdAdd5");
                        }
                        jTdAdd.appendChild(jElem);
                    }
                }
    
                if (jDirection == "saga")  jTxNumber.value = Number(jTxNumber.value.trim()) + Number(jTxAdet);
    
            } else { alert("rakam alanına rakam girin."); }
        }
    
    /**
    * gelen ID ye ait elementin içindeki tüm child elementleri remove eder.
    * @param {any} jElemIDlist: birden fazla ID gelebilir. Virgülle ayrılmalı. "dv1,spnV,tblA"
    */
    function removeAllChilds(jElemIDlist) {
        var arrE = jElemIDlist.split(',');
        for (var ii = 0; ii < arrE.length; ii++) {
            var jList = fTakeEl(arrE[ii].trim());
            if (jList !== null) {
                while (jList.hasChildNodes()) {  
                    jList.removeChild(jList.firstChild);
                }
            }      
        }
    }
    
    function crtElemDyn(myTag, myID, myW, myH, myClassNameList) {
        if (fTakeEl(myID) === null) {
            var myElem__ = document.createElement(myTag);
            if (myID != "") myElem__.id = myID;
            if (myW != "") myElem__.style.width = myW;
            if (myH != "") myElem__.style.height = myH;
            if (myClassNameList != "") myElem__.className = myClassNameList;
            return myElem__;
        } else { alert("Hatalı tuş.");}
    }
    
    function fTakeEl(elemID) {
        if (typeof elemID === 'string' && elemID.trim() != "") return document.getElementById(elemID);
        return null;
    }
    
    </script>
    
     
    Son düzenleme: 10 Eylül 2018
  7. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    916
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    Lanet olsun javascriptinde içine etmeye başladılar. Ezber beyinlilere bişey ver içine etsinler.

    Nesne yönelimli programlama çok değerli dendi... hurraaaaa herkes OOP diye ağlamaya başladı. Dilleri öyle bi nesne tabanlı yaptılarki, 2x2=4 için bile 3 nesne tanımlayabilir hale geldin. Yeni mezunlar marifet sandılar gerekli gereksiz herşeyi nesne olarak kodladılar.

    OOP işi dinazora dönmeye başlayınca, ya dediler "javascript ne güzel dil öyle, Fonksiyonel programlama süper, hem hızlı, hem okunaklı, hem yeterince esnek daha ne isteyelim" dendi. OOP gitti, geldi javascript.

    Hurraaaaa her kes javascript kovalar oldu. Sora şimdi onunda içine ettiler bu ezber beyinliler.
    Hem ilave paketlerle ettiler. Hemde orjinal javascripti dinazora çevirmeye başladılar. Yeni sürümde yazılanı anlaman için artık çevirmenler lazım.
    Büyük marifetmiş gibi olabildiğince kısa kodlarla işi bitirmeye çalışıyorlar. Şifre çözücü olman lazım.
    Kendi yazdığını 1 sene değil 3 gün sonra anlayamazsın.

    Bunuda mok edecekler sonra başka dile hücum edecekler... Çok kısa yazmak marifet olsaydı C dilinde gelişim sonlanır başka dile ihtiyaç olmazdı. Ölçüsü olmalı, 3 tane ok işareti ile 10 tane iş yapılmaz. 10bin satırlık tek dosyada tüm dosyayı bu oklarla yaz, sonrada hatayı bul bakalım.

    Çok sinirliyim bildiğiniz gibi değil.

    Hacimli ve komplex Büyük projelerde çalışanlar ne dediğimi anlayacaklardır. yazmak kadar, başkasının yazdığı kodlara bakım yapmakta önemli. Kaç tane dev paketin dinazora döndüğü için çöpe atıldığını gördüm.

    İşler acil istenir, başkasının yazdığı standardı olmayan okunaksız kod bloğunu çözene kadar yama yaparsın. Yama yama yı kovalar. Sonra onlarca milyon dolarlık bütün paket dinazora döner, haydi çöpe.
     
    Son düzenleme: 21 Eylül 2018
  8. EMRESONMEZESK

    EMRESONMEZESK Üye

    Kayıt:
    1 Aralık 2016
    Mesajlar:
    124
    Beğenilen Mesajlar:
    13
    Şehir:
    ESKİŞEHİR
    fotoğrafları data olarak mı tarıyor formatı mı işliyor bende bu olayı merak ediyorum
     
  9. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    916
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    Fotoğrafları pixel olarak işliyor.
    Önce tüm resmi siyah beyaza çeviriyor.
    Sonra siyah nokta bilgilerini analiz ediyor.
    Tabi resmi bizim gibi görmüyor, her pixel koordinat ve renk kodu bilgisinin yer aldığı bir matrix yaratıyor. Sonra matrix üzerindeki bilgilerden hareket ediyor.

    Bildiğim kadarı ile, temelde böyle yapıyor. Daha detayı bilmiyorum.
     
    Son düzenleme: 1 Ekim 2018
  10. ismailcan10

    ismailcan10 Yeni Üye

    Kayıt:
    21 Eylül 2018
    Mesajlar:
    5
    Beğenilen Mesajlar:
    2
    Meslek:
    web uzmanı
    Şehir:
    Çanakkale
    Teşekkürler bilgilendirme için :)
     
    sedirAğacı bunu beğendi.
  11. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    916
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    Bir metni küçük harfe çeviren ve her cümlenin ilk harfini büyük harf yapan fonksiyona ihtiyacım oldu. Baktım internette bulamadım.
    Kelimeleri çeviren var ama cümleyi çeviren yok. Yazmak zorunda kaldım. Türkçe desteğide var. Aslında artık pek türkçe sorunu çıkmıyor, ama benim eskiden yazdığım hazır fonksiyonlarda kullanmışım.
    Asayım, birilerine lazım olur.


    HTML:
    <!DOCTYPE html>
    <html>
    <body style="padding: 70px;"
    <p>Metni, küçük-BÜYÜK harfe çevir.</p>
    
    
    <table>
    <tr>
        <td style="width: 500px;">
            <textarea id="txa1" class="tx" rows="4" cols="100">  XFGbcABC012. DEFWQrt. 75zuzu</textarea>
        </td>
        <td style="width: 200px;">
            <input type="button" value="küçük yap" onclick="_doP('k')"/>
        </td>
        <td style="width: 200px;">
            <input type="button" value="BÜYÜK YAP" onclick="_doP('b')"/>
        </td>
    </tr>
    <tr>
        <td colspan="2">
            <input type="checkbox" id="chbx1" checked="true"> Noktadan sonraki ilk harfler büyük olsun.(sadece metin küçüğe çevrileceğnde geçerli.)
        </td>
    </tr>
    <tr><td colspan="2">&nbsp;</td></tr>
    <tr>
        <td colspan="2" style="color: teal;">
            Sonuç :    <span id="spnR"></span>
        </td>
    </tr>
    </table>
    
    
    <br />
    
    
    </body>
    </html>
    
    
    <script type="text/javascript">
    
    
    function _doP(jD) {
        const jStr = document.getElementById("txa1").value;
        var jR = document.getElementById("spnR");
        jR.innerText = "";
    
        jR.innerText = convertVal(jStr, jD);
    }
    
    // gelen metni, küçük yada büyük harfe çevir.
    function convertVal(jStr, jType) {
        let jN = "";
        if (jStr.length > 0) {
            if (jType === "k") {
            if (document.getElementById("chbx1").checked) {
                jN = cvtFirstChr(jStr.toLowerCase());
            } else {
                jN = ConvertTRbigTOsmall(jStr.toLowerCase());
            }
            } else {
                    jN = ConvertTRsmallTObig(jStr.toUpperCase());    // büyük harfe çevir.
            }
        }
        return jN;
    }
    
    //TR chr leri küçük TR chr lere çevir. tolower() Normal çeviride İ ler sorun çıkarabiliyor.
    function ConvertTRbigTOsmall(jStr) {
        let jR = "";
        if (jStr.trim() !== "") jR = jStr.replace(/İ/g, "i").replace(/I/g, "ı").replace(/Ğ/g, "ğ").replace(/Ü/g, "ü").replace(/Ş/g, "ş").replace(/Ö/g, "ö").replace(/Ç/g, "ç").replace(/Â/g, "â").trim();
        return jR;
    }
    function ConvertTRsmallTObig(jStr) {
        let jR = "";
        if (jStr.trim() !== "") jR = jStr.replace(/i/g, "İ").replace(/ı/g, "I").replace(/ğ/g, "Ğ").replace(/ü/g, "Ü").replace(/ş/g, "Ş").replace(/ö/g, "Ö").replace(/ç/g, "Ç").replace(/â/g, "Â").trim();
        return jR;
    }
    // gelen metindeki her cümlede, ilk harfi büyük harfe çevir.
    function cvtFirstChr(jVal) {
        let jR = "";
        let jFirstChrPrcs = false;
        let jLetter = false;
        let jChr = "";
    
        var jPattern = /[a-zA-Z|Ğ|Ü|Ş|İ|Ö|Ç|Â|ğ|ü|ş|ı|ö|ç|â]/igu;
        for (ii = 0; ii < jVal.length; ii++)
        {
            jChr = jVal.substr(ii, 1);
            jLetter = jPattern.test(jChr);
    
            if (!jFirstChrPrcs && jLetter) {
                jR += ConvertTRsmallTObig(jChr).toUpperCase();
                jFirstChrPrcs = true;
            } else {
                if (jChr === ".") jFirstChrPrcs = false;
                jR += jChr;
            }
        }
        return jR;
    }
    
    </script>
     
    Son düzenleme: 5 Ekim 2018
  12. ismailcan10

    ismailcan10 Yeni Üye

    Kayıt:
    21 Eylül 2018
    Mesajlar:
    5
    Beğenilen Mesajlar:
    2
    Meslek:
    web uzmanı
    Şehir:
    Çanakkale
    Valla teşekkürler arkadaşlar sağolın :):):)
     
  13. CryptoTurtle

    CryptoTurtle Yeni Üye

    Kayıt:
    6 Ekim 2018
    Mesajlar:
    6
    Beğenilen Mesajlar:
    0
    Şehir:
    İstanbul
    Burası geliştikçe çok yararlı şeyler için kullanılabilir. Henüz başarı oranı çok düşük ama gün geçtikçe geliştirilebilir.
     
  14. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    916
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    JS de trim() methodunda sorun yaşıyordum. kazara rakama trim yaparsam hata msg dönüyor.
    Proje çok büyüdü, sırf js satırları 10bini geçince hataları tolerans eden kodlara ihtiyacım oldu, detayla boğuşamıyorum.
    trim() yerine geçen bir fonksiyon yazdım. İsteyen buyursun kullansın.
    chrome ve ms edge de test ettim.

    Kullanım örneği;

    let jVal = " ab 3c ";
    jVal = Trimmed_(jVal, false);
    Sonuç : "ab 3c"

    veya
    if (Trimmed_(jVal, false) !== "") { ... }

    HTML:
    /**
    * baştaki ve sondaki boşlukları atar. trim() işlevi.
    * @param {string} jVal: string değer gelmeli.
    * @param {boolean} jWarn: true: system error oluşursa uyarı mesaj versin.
    * @returns {string} :Baştaki ve sondaki boşluklar atılmış olarak sonuç değeri döner.
    */
    function Trimmed_(jVal, jWarn) {
        let j = 0, jj = 0, jStr = jVal.toString();
        try {
            for (j = 0; j < jVal.length; j++) if (jVal.charAt(j) !== ' ') break;
            for (jj = jVal.length - 1; jj >= 0; jj--) if (jVal.charAt(jj) !== ' ') break;    
            if (j !== 0 && jj !== 0 && j < jj) jStr = jVal.slice(j, jj + 1);
        } catch (e) {
            if (jWarn) alert("Metnin başındaki ve sonundaki boşlukları atmak isterken hata oluştu. Gelen string: " + jVal +
                "\n Hata mesajı: " + e.message);
        }
        return jStr;
    }
    
     
    Son düzenleme: 14 Aralık 2018
  15. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    916
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    Üstteki Trimmed in, null kontrolu koyulmuş, type göre geri döndüren ve bir eksiği giderilmiş, son hali. textarea daki new line karakterinide başta veya sondaysa yok eder.

    HTML:
    /**
    * baştaki ve sondaki boşlukları atar. trim() işlevi.
    * @param {string} jVal: string değer gelmeli.
    * @param {boolean} jWarn: true: system error oluşursa uyarı mesaj versin.
    * @returns {string} :Baştaki ve sondaki boşluklar atılmış olarak sonuç değeri döner.
    */
    function Trimmed_(jVal, jWarn) {
        let typeN = false;
        let jStr = "";
        if (jVal) {
            if (typeof jVal === "number") typeN = true;
            let j = 0, jj = 0;
            jStr = jVal.toString();
            try {
                for (j = 0; j < jVal.length; j++) if (jVal.charAt(j) !== ' ' && jVal.charAt(j) !== '\n') break;
                for (jj = jVal.length - 1; jj >= 0; jj--) if (jVal.charAt(jj) !== ' ' && jVal.charAt(jj) !== '\n') break;
                if ((j > 0 || jj < jVal.length - 1) && j < jj + 1) jStr = jVal.slice(j, jj + 1);
                if (j > 0 && jj === - 1) jStr = ""; // tamamen boşluk yüklüymüş.
            } catch (e) {
                if (jWarn) alert("Metnin başındaki ve sonundaki boşlukları atmak isterken hata oluştu. Gelen metin: " + jVal +
                    "\n Hata mesajı: " + e.message);
            }
        }
        return typeN ? Number(jStr) : jStr;
    }
    
     
    Son düzenleme: 14 Aralık 2018
  16. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    916
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    Çok ilginç.

    üç beş aya kadar aktif edeceğim sosyal sitem için makale yazarına ihtiyacım vardı.
    İşe yarar birilerini bulabilirim diye R10 denen siteye üye olayım dedim.

    Sitenin yazılımına ve üyelerine bakarsan lise öğrencileri takılıyor gibi. Yani benim seviyemin 2 basamak altında. netçede Türkiye çapında pek çok yerli-yabancı proje geliştiren ekipte çalışmışım, kimindede proje liderliği yapmışım.

    Sonuç R10 sitesi, üyelik başvurumu kabul etmedi.

    Şaşırtıcı.?

    Üyelerin yazılarına bakıyorum, çoluk çocuk.!!!

    Demekki onay için bakanlar yada site sahibi, gerçek profesyonel değil... çok şaşırtıcı hakkaten...

    Neyse, makale yazarlarınıda başka şekilde bulacağız demektir... R10 sitesini listemden çıkardım.
     
  17. dinlex

    dinlex Aktif Üye

    Kayıt:
    23 Aralık 2016
    Mesajlar:
    345
    Beğenilen Mesajlar:
    89
    Şehir:
    Hatay
    Hocam wmaraci diye bir site var. Orda da bayağı makale yazan var. İstediğinizi bulabilirsiniz belki.
     
  18. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    916
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    Sağol dinlex. Buralardasın demek.
    wmaracı yı kaydedeyim.

    Aslında site bitince baksam iyi olur. Acele ettim nedense. Araya bişey girerse sitenin bitişi aylarca uzayabilir.

    Ayrıca bi ara ablam, sitede makale yazı işini bana bırak diyordu. Ona bırakırsam, inanmayacaksın ama şu abd de victorias secret iç çamaşırı mankenleri var ya.? Aha onlara bile sitede yazdırabilir çünki kızı yani yeğenim onlarla da çalışıtığı oluyor. :p:p:p

    Yinede her ihtimali düşünmek lazım.

    Sen ne yaptın.?
    Kendini yazılım konusunda geliştirtiriyormusun.? Bak ben unumu elemişim ama yinede javascript konusunda hala bi sürü şey öğreniyorum.
     
  19. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    916
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    Javascript demişken, bi fonksiyon lazım oldu. Onu yazdım, asayım.

    Kullandığım her değişkende, içindeki değerde sorun varmı yokmu diye kontrol edip kod yazacağıma. Değeri ve hatalı veri varsa yerine koymam gereken default değeri gönderdiğim bir fonksiyon var. Onu kullanmaya başladım.

    Kullanımı
    // jRetType alanında 1 veya 2 yoksa, default değer 2 atanacak.
    jRetType = Number(setDefaultNumMin(jRetType, 2, "12", 1, 2));

    HTML:
    /**
    * jMin ve jMax dahil, bu aralıktaki rakamlar için doğruluk kontrolu. Bu aralıkta değilse default değer döndürülür.
    *
    * @param {number} jVal: Kullanılan rakam değer.
    * @param {number} jDefaultVal: jVal değeri  uygun değilse kullanılacak olan default rakam.
    * @param {string} jPossible: Boş "" gelebilir. string değişken içinde rakam gelmelidir. indexOf la kontrol yapılıyor. "12" veya "23,45,178" gibi gelebilir.
    *                              Dolu gelirse, değer bu rakamlardan birimi kontrol edilir. Değilse default değer atanır.
    * @param {number} jMin: Dolu gelsin, bu rakamdan küçükse default değer döner.
    * @param {number} jMax: Dolu gelsin, bu rakamdan büyükse default değer döner.
    * @returns {number} : değer uygunsa aynen geri döner, uygun değilse default değer number olarak döndürülür.
    */
    function setDefaultNumMin(jVal, jDefaultVal, jPossible, jMin, jMax) {
        try {
            if (!jVal || typeof jVal !== "number") return jDefaultVal;
            if (jVal < jMin || jVal > jMax) return jDefaultVal;
            if (jPossible !== "") if (jPossible.indexOf(jVal) === -1) return Number(jDefaultVal);
            return Number(jVal);
        } catch (e) {
            return jDefaultVal;
        }
    }
    
    


    Birde tüm sayfadaki giriş alanlarını kontrol edip, giriş eksik olan tüm alanların üzerinde hata mesajı veren bir fonksiyon var. Mesaj alanlarını, hatalı giriş yapılan alan üzerinde runtime da dinamik yaratıyor.

    Biraz geç oldu ama çok işime yarayacak.
    Her sayfayı bir javascript ile client ta kontrol ediyorsun, birde aynı kontrolleri serverde yapıyorsun.

    Client tarafta her sayfa için kod yazmama gerek kalmadı. Sadece kontrol yapılması gereken alan id lerini yanyana yazıyorum. İlgili hata mesajınıda yazıyorum ve fonksiyonu çağırıyorum. Hiç sorun yoksa true döndürüyor. Sorun varsa, sorun olan alanın üzerinde hata mesajına ilişkin elementi yaratıp, alana ilişkin hata mesajını gösteriyor.
    Şartlı kontrol bile yapıyor. Şu radiolist de bunu seçmişse, diğer 4 alanı kontrol et gibi, şu alan boş yada nümeric olmalı gibi... Bayağı kapsamlı oldu.

    1 hafta uğraştım ama değdi.

    3 sene önce projeye başladığımda yazsaydım, fazladan 2 ay kazanırdım herhalde.
     
    Son düzenleme: 21 Aralık 2018
  20. dinlex

    dinlex Aktif Üye

    Kayıt:
    23 Aralık 2016
    Mesajlar:
    345
    Beğenilen Mesajlar:
    89
    Şehir:
    Hatay
    Rica ederim. Pek buralarda değilim aslında. 1 sene oldu mu buraya girmeyeli hatirlamıyorum artık. Kapanıp duruyordu zaten, sonra da konu açan kalmayınca girme gereği de kalmadı hiç. Zaten evdeki internet taahhüdüm de bitti. Bittikten sonra ailevi ve maddi sorunlardan dolayı internet bağlatamadım bir daha. Aylardır da internetsizim, öyle olunca bu işlerden uzaklaştım biraz. Doğru düzgün kodlarla uğraşmayalı da 5-6 ay oldu. Wmaraci ve r10 gibi sitelere mobilden -üyeliksiz- girip ilgimi çeken konuları okuyup çıkıyorum. Baya aktif oluyor oralar. Onun dışında da internette pek bir şey yaptığım yok. Geçen boş anıma denk gelince buraya bi bakayım dedim, şifremiz zor hatırlayıp girdim :)

    Ama maşallah siz hala enerjinizi kaybetmemişsiniz. Siteniz de bitmedi bir türlü, sırf onu merak ettiğim için gözüm direkt onunla ilgili konuları aradı burda :)