Wednesday, May 26, 2010

hız önemli mîrim

json_encode ve serialize arasındaki hız farkını bir de ben test etmek istedim hepsi bu.
Bendeki sonuç şuydu
JSON encoded in 0.17906808853149 seconds
PHP serialized in 0.4260368347168 seconds
json_encode() was roughly 137.92% faster than serialize()


Konuyu irdeleyin :
http://www.google.com.tr/search?sourceid=chrome&ie=UTF-8&q=json_encode+vs+serialize

<?php
ini_set( 'display_errors', 1 );
error_reporting( E_ALL );
$testArray = fillArray( 0, 4 );
//print_r($testArray );    

$start = microtime( true );
json_encode( $testArray );
$jsonTime = microtime( true ) - $start;
echo "JSON encoded in $jsonTime seconds<br>";

$start = microtime( true );
serialize( $testArray );
$serializeTime = microtime( true ) - $start;
echo "PHP serialized in $serializeTime seconds<br>";

if ( $jsonTime < $serializeTime )
    echo "json_encode() was roughly " . number_format( ($serializeTime / $jsonTime - 1 ) * 100, 2 ) . "% faster than serialize()";
else if ( $serializeTime < $jsonTime )
    echo "serialize() was roughly " . number_format( ($jsonTime / $serializeTime - 1 ) * 100, 2 ) . "% faster than json_encode()";
else 
    echo 'Unpossible!';


function fillArray( $depth, $max )
{
    static $seed;
    if ( is_null( $seed ) )
        $seed = array( 1,'a',2,'b',3,'c',4,'d',5,'e',6,'f',7,'g',8,'h',9,'i',0,'j' );
    
    if ( $depth < $max )
    {
        $node = array();
        foreach ( $seed as $key )
         $node[$key] = fillArray( $depth + 1, $max );
       
        return $node;
    }
    return 'empty';
}
?>

Friday, April 23, 2010

programcınız için "beer factor" hesaplamasını yaptınız mı?

Daha öncede gündeme getirdiğim bir mevzu.

Hesaplama basit. tek hamlede rakam çıkarabilirsiniz.
Sadece aşağıdaki sorulara 0 dan 4 e kadar değer verin çıkan sonuxc (x) sizin programcınız için beer factor değeridir. Bu bir çarpandır. Bunu 5 ile çarparak "yüzde x olasılık ile" diyebilirsiniz.

Projenizin risk analizini yaparken projede yer alan her bir programcı için bu çarpan da hesaplanmalı. Şöyle ki:


  1. Cuma akşamları her zamankinden erken çıkıyor. [0-4]
  2. Bir etkkinlik Cumartesi sabahı ise gelmekte güçlük çeker. [0-4]
  3. Pazartesi günü sesi her zamankinden boğuk veya derin. [0-4]
  4. Gözünden göbeğine teğet bir çizgi çizildiğinden bu çizginin yere olan açısı 24° mi? [0,4] (bu soruya sadece 0 veya 4 verebilirsiniz)
  5. Haftanın başında ve sonunda dinlediği müzik tarzı şuna benzer bir değişim gösterir : Zeki Müren - Megadeth [0-4]

Saturday, April 17, 2010

tip : excel den spss e veri aktarırken unutmayın ki


Değişken adlarında Türkçe karakter olması halinde hatalar alabilirsiniz. Özellikle kllandığınız program SPSS 16 ve daha düşük versiyonu ise.

Bu durumda sutunların en başında yazan sütun adlarında geçn tüm Türkçe karakterleri latin benzerleri ile değiştirin




Wednesday, March 17, 2010

Mobil geliştiriciler!!

Bunu okudum : Vodafone Genç Yetenekler İçin Widget Geliştirme Yarışması

Orda şöyle hitap etmiş yazar "Mobil geliştiriciler...". Böyle bir hitap şeklini okuyunca kendi kendime gene ah çektim. Vakit bulup mobil uygulama geliştirmek isterdim hep. Hatta bana da "mobil geliştirici" denmesini isterdim :)
Geç değil tabi ancak 21 Mart'a kadar da mümkün değil. Bu bahsi geçen yarışma için son başvuru 21 Mart imiş.
İşte şöyle diyor:

Vodafone gençler için yeni bir yarışmaya biraz önce start verdi.  Mobil iletişim konusunda sektörde öncü firmalardan olan Vodafone mobil teknoloji alanında yeni bir fırsat sunuyor.  Düzenlenen yarışmada Vodafone’un Webşın tarayıcısı için Widget Uygulaması geliştirmeniz isteniyor.
Mobil geliştiriciler…
Webşın’ı hemen hemen herkes duymuştur.  Yeni sürümü için yeni özellikler eklenmesi planlanıyor.  Tabiki bu planlar arasında sizde yer alabilirsiniz.  Webşın Opera Mini tarayıcısına geliştireceğiniz Widget ile yarışmaya katılabilirsiniz.  Vodafone abonelerine özel olarak geliştirilen Webşın yarışmasında ilk 3 sırayı kazanan arkadaşlar Vodafone Türkiye’de staj yapma hakkına sahip olacaklar. Tabiki sadece bununla kalmıyor. Dereceye giren arkadaşlar için ilk 10′da  Nokia N97 hediye ediliyor.
http://www.simdiseninsiran.com/
...
Bu Yazı Alıntıdır..! http://www.TEAkolik.com


Konuyu irdeleyin :
Link : http://www.simdiseninsiran.com/
Link : http://www.teakolik.com/vodafone-genc-yetenekler-icin-widget-gelistirme-yarismasi/

Thursday, March 11, 2010

Google Visualization Api - Interactive charts ve UTF-8 Karakter Sorunu

Visualization Api içinde "Interactive charts" son derece pratik ve gelişmiş bir şekilde grafik sunum ihtiyaçlarınızı karşılıyor. "Image Charts" için herhangi bir js kütüphanesi yüklemenize gerek olmazken bunda Google jsapi ile Visualization Api yi yükletiyorsunuz sayfanıza. Detay : http://code.google.com/apis/visualization/documentation/using_overview.html

Ben de harita üzerinden ağırlık dağılımını göstermek için kullandım şu şekilde

<script type="text/javascript" charset="utf-8" src="http://www.google.com/jsapi">
</script>
<script type="text/javascript" charset="utf-8">
    google.load('visualization', '1', {
        'packages': ['geomap']
    });
    var temp = 0;
    google.setOnLoadCallback(drawMap);


    function drawMap() {

        var data = new google.visualization.DataTable();
        data.addRows(81);
        data.addColumn('string', 'City');
        data.addColumn('number', 'Kelime Sayisi');

// ...
        data.setValue(4, 0, 'İstanbul');
        data.setValue(4, 1, 57);

        data.setValue(5, 0, 'Ankara');
        data.setValue(5, 1, 42);
// ...

var options = {};
   options['region'] = 'TR';
   options['colors'] = [0xA493FF, 0x4C51CD, 0x00065E]; // colors
   options['dataMode'] = 'regions';
   options['width'] = '540px';
   options['height'] = '348px';
 
   var container = document.getElementById('map_canvas');
   var geomap = new google.visualization.GeoMap(container); 
  
   var ikinci_sehir="";
   var ilk_sehir="";
   
  google.visualization.events.addListener(geomap, 'regionClick', function(e) {   
   sehir=e['region']; // tıklanan sehri su sekilde getirir : TR-06   : TR-PLAKA  
 });
 
 geomap.draw(data, options);
 
    };


Çok da güzel oldu aslında.



Fakat tek sorun Türkçe karakterlerde.
Tam şurada şehir adlarını eklediğim yerde :
  
        data.setValue(4, 0, 'İstanbul');
        data.setValue(4, 1, 57);
        data.setValue(5, 0, 'Ankara');
        data.setValue(5, 1, 42);

Bu grafiğin aynısı google analytics'de de var ve fakat orada Türkçe karakter sorunu yok. Yani çözümsüz bir şey değil fakat henüz çözüm bulamadım.

Mesela neler yaptığımı da yazayım, "şunu yap bunu yap öyle dene" demeyin yani :

1. Sayfanın karakter kodlaması gerçekten de UTF-8 mi diye kontrol ettim
2. header ('Content-type: text/html; charset=utf-8'); yaptım üstüne bir de
3. javascript tagına charset="utf-8" ekledim
4. google jsapi'ye karakter kodlaması parametresini utf-8 verdim bir d eöyle yüklettim
5. Gelen şehir isimleri "string" değerlerimi veritabanından doğrumu çekiyorum
6. iconv ile utf-8 gelen şehir adlarını bir de iso formatına çevirdim.
7. 6 dakininin tam tersini yaptım
8. bıktım usandm bıraktım
9. google araması yaptım
10. uykum geldi bu yazıyı yazdım


Çözüm bulur bulmaz yazacağım buraya. Fakat lurda okuyan bir bilinçli internet kullanıcısı çözümü biliyorsa yorum olarak yazsa ne güzel olur?

Saturday, March 6, 2010

Google Maps Api : Adresten haritaya

<!-- Açıklama yaz :) -->

 <script src="http://maps.google.com/maps?file=api&v=2&key=ApiKeyinizBurayaYazılacak&sensor=true"
        type="text/javascript"></script>
       
    <script type="text/javascript">
 var geocoder;
 var map; 
 function initialize() {
 var geocoder = new GClientGeocoder();
 var map = new GMap2(document.getElementById("map_canvas"));
   geocoder.getLocations("Ankara , TURKEY", function(result){
          if (result.Status.code != 200) {
            alert('Could not geocode "' + result.name + '"');
            return;
        }
          place = result.Placemark[0];
          point = new GLatLng(place.Point.coordinates[1],
                              place.Point.coordinates[0]);
          map.setMapType(G_HYBRID_MAP);
          map.setCenter(point, 8);
          marker = new GMarker(point);
         map.addOverlay(marker);
         alert("OK");
          marker.openInfoWindowHtml(place.address);
    
   });
 
 }
  
    $(document).ready(function(){
     initialize(); 
    });

    </script>


Konuyu irdeleyin:
geocoder.getLocations : 
 - http://www.google.com.tr/search?hl=tr&rlz=1C1GGLS_trTR355TR355&q=geocoder.getLocations&btnG=Ara&meta=&aq=f&oq=
http://www.developer.com/tech/article.php/3615681/Introducing-Googles-Geocoding-Service
google maps api ref. : 
http://code.google.com/apis/maps/documentation/reference.html

Friday, March 5, 2010

jquery ile akıllı liste çözümleri

<ul> veya <ol> bir listeniz vardır uzunca, belki dinamik oluşmuştur, genişliği değişkendir fakat genişliğine göre sayafda sütunlara bölünmesini istiyosunuz. Bu sadece görsel bir durumdur. İşte bu durumda şunu ve bunu kullanabilirsiniz.


Konuyu iredeleyin
http://plugins.jquery.com/project/makeacolumnlists
http://www.sohtanaka.com/web-design/smart-columns-w-css-jquery

Bir Teknik Eleman için Askerlik Öncesi "To Do" listesi

Sadece askerlik öncesi değil aslında, eğer bir süreliğine işlere ara verecekseniz, mesela kısa olmayan bir tatile çıkacaksanız da bu liste önemli.

Ben bir süre işlere ara vermem ile bu listede yapmam gerekip de yapmadığım bir çok şey olduğunu anladığımda oldukça gerilmiştim.

Teknik Kişi İçin Askerlik Öncesi To Do
(bu listeyi bir kağıda yazın. yanlarına da birer kutucuk koyun, aman atlamayın hiç birini)
  1. Inbox Düzenlemesi
    • Gmail
      1. Düzenli gelen maillerin neler olduğunu not al
      2. Düzenli gelen maillerin her biri için ayrı bir filtre oluştur ve etiket aç ("Skip inbox" demeyi de unutma) 
      3. Bir "otomatik cevap" oluşturmayın. Sonra üye olduğunuz tüm gruplara da ha bire bu mesaj gider durur. Can sıkıcı.
      4. Üye olduğunuz mail gruplar için de filtre ve etiket yapın. Glen kutusuna düşmemesini sağlayın.
      5. Gmail şifreni değiştirin.
    • Outlook
      1. Tüm verilerin yedeğini al. glen mailleri sunucudan gmailine yönlendir. 
      2. Gmail için yazılan  1, 2 ve 3. maddeleri uygula
  2. Abone Olduğunuz Dergiler
    • Adresine gelebilecek olan dergiler için birini tembihle o dergilerin posta kutusunun üstünde veya yerde zedelenmesine mani olsun veya dağıtım adresini bir arkadaşının adresi olarak değiştir.
  3. FTP bilgileri vs
    • FTP bilgileri kağıda yazma (bunu zaten yapmayın)
    • Eğer bilgileri birisine illede vermek gerekiyorsa yeni ftp hesabı açıp ver
    • Eski şifrelerini değiştir
    • Ftp client daki kayıtlı şifrelerini sil! Hepsini.
    • Zend, Dreamweaver gibi programlardaki kayıtlı hesap bilgilerini sil!
    • İnternet tarayıcılarında kayıtlı ftp şifrelerini sil!
  4. Müzik & Film
    • Bu çok önemli bir madde. Tüm müzik arşivini lütfen DVD lere çek önce.
    • Tüm müzik ve film arşivinin indeksini oluştur. Bunu yapan programlar var (veya Windows'ta tree komutu ile de yapabilirsin.)
  5. Browser
    • Browser a kayıtlı şifrelerini koruma altına al (Firefox ile bu mümkün)
  6. Blog
    • Bloguna "askere gittiğine" veya "tatile çıktığına" dair bir yazı yazmayı unutma. İnsanlar neden yazılarına ara verdiğini bilsin.

    Thursday, February 4, 2010

    Search Engine Optimization Toolkit Nedir?

    TAVSİYE EDİYORUM

    Bir arkadaşımın tavsiyesi ile denediğim bir çeşit SEO analiz aracı. Bir siteyi dernilmesine tarayarak bulduğu her sayfadaki (SEO ile ilgili) sorunları, html hatalarını listeleyor güzelce. Raporlaması güzel.

    Aslında tek başına çalışan bir uygulama değil. IIS bileşeni. Bu nedenle sisteminize bu aracı kurarken IIS'i de otomatik olarak kuaracak. Deneme için mecbur kurdum.

    Eğer sisteminizde IIS yoksa kurulum sonrası sistem yeniden başlatmak gerekcektir.



    Kurar kurmaz denedim. 7 dakikada 1617 sayfamı tarayarak 5367 uyarı verdi. Benzer uyarıları içeren sayfalar gruplanmış olarak listeleniyor.




    Sevdiğim yanları
    Sayfaardaki hataların yanı sıra performasn raporu da sunuyor.
    Ummadığım hatta hiç bağlantı vermediğimi düşündüğüm sayfaları dahi taradı. Taram oldukça derin.
    Raporlar çok detaylı.
    Taranan tüm sayfa verilerini yerel diskte saklayabiliyor.
    Analiz sonuçlarını sorgulayabiliyorsunuz. Detaylı ve geniş analizler sonuçlarında filtremele, arama yetenekleri başarılı.


    Sanırım sevdim bu uygulamayı.

    Konuyu irdeleyin:
    detay : http://www.iis.net/expand/SEOToolkit
    download : http://go.microsoft.com/?linkid=9695987

    Monday, January 25, 2010

    mysql - bir tablodan başka tabloya kopyalamak zor değil korkmayın

    Bazıları çok canını sıkıyor bu işlem için. Daha geçen gördüm adamcağız bir tablodan aynı veri yapısından olmayan başka bir tabloya verileri kopyalamak icin ömründen bir gecesini yedi. Zor değil efendim. Bakın işte örnek

    INSERT INTO yeni_tablo(farkli_id_sutun, ilce , il) SELECT id, ilce , il FROM kaynak_tablo

    Thursday, January 14, 2010

    google wave için sansür robotu denemesi

    Belirlenen kelimeler yazılıp gönderildiğinde istenen alternatifleri ile değiştiren robottur.
    (yazılıp gönderilmeden önce yazılır yazılmaz da yapılabilir ancak çok yavaş oldu o zaman).

    Hızlıca ilk adımları atlıyorum
    (Google App Engine Launcher sahibi olmalısınız ki zatn bedava bir uygulama onu bir indirin. Bu uygulamayı öyle deploy ediyorum ben)
    1. Google App Engine bir uygulama oluştur (ben tayyarrobotfiltre yaptım)
    2. waveapi (python) indir
    3. tayyarrobotfiltre dizini içine waveapiyi kopyala
    4. App.yaml oluştur :
    application: tayyarrobotfiltre
    version: 1
    runtime: python
    api_version: 1
    
    handlers:
    - url: /_wave/.*
      script: main.py
      
    - url: /assets
      static_dir: assets
     
    - url: /argo.txt
      static_files: argo.txt
      upload: argo.txt
    

    5. argo.txt diye bir dosya (ana dizine) oluşturun. İçinde "dict" oluşturun şunun gibi (içeriğini arttırın tabi. bu bir deneme) :

    'salak': 's****', 'salakca':'s****', 'aptal':'a*****'

    (aslında xml ile yapmak isterdim ama python çok yeni bir dil bana. siz isterseniz genişletebilirsiniz.)


    6. ve python kodumuz da şöyle main.py


    # -*- coding: utf-8 -*-
    #!/usr/bin/python
    # Copyright (C) 2010  Hasan Tayyar BEŞİK
    # tayyar.besik@gmail.com
    
    
    import re
    import urllib2
    
    
    from waveapi import events
    from waveapi import model
    from waveapi import robot
    from waveapi.document import Range
    
    
    
    def replace_all(text, dic):
        for i, j in dic.iteritems():
            text = text.replace(i, j)
        return text
    
    
    def OnBlipSubmitted(properties, context):
     """Invoked when a Blip is submitted to the wave."""
     blip = context.GetBlipById(properties['blipId'])
     contents = blip.GetDocument().GetText()
     dic1 = {'manyak':'m***k','okuz':'o***z','aptal':'a***l','mongol':'****','yalaka':'******','salak':'******'} 
    
     response = urllib2.urlopen('http://tayyarrobotfiltre.appspot.com/argo.txt')
     #dic = eval('{%s}' % open("/argo.txt","r").read())
     dic = eval('{%s}' % response.read().encode('utf-8'))
    
     newcontents = replace_all(contents,dic)
     if newcontents != contents:
      blip.GetDocument().SetText(newcontents)
     #blip.GetDocument().SetText(dic)
     #blip.GetDocument().SetText(response.read())
     
    def OnDocumentChanged(properties, context):
            """Invoked when the document is edited."""
            pass
    
    def OnRobotAdded(properties, context):
            """Invoked when the robot has been added."""
            root_wavelet = context.GetRootWavelet()
            root_wavelet.CreateBlip().GetDocument().SetText("Merhaba; Ben bir robotum. Konuşmalardaki kötü ifadeleri kaldırırım.  ;)")
    
    if __name__ == '__main__':
            myRobot = robot.Robot('Tayyar Robot Filtreleme',
                            image_url='http://tayyarrobotfiltre.appspot.com/assets/icon.png',
                            version='2',
                            profile_url='http://tayyarrobotfiltre.appspot.com/assets/profile.html')
            myRobot.RegisterHandler(events.BLIP_SUBMITTED, OnBlipSubmitted)
            myRobot.RegisterHandler(events.DOCUMENT_CHANGED, OnDocumentChanged)
            myRobot.RegisterHandler(events.WAVELET_SELF_ADDED, OnRobotAdded)
            myRobot.Run()
    
    
    

    Wednesday, January 13, 2010

    python populer utf8 meselesi

    Python ole cok yasanan sorun UTF-8 kod dosyası ve UTF-8 harici dosyadan veri okumakdir.


    1. Dosuynin en basina şu satırı eklemek yeterli

    # -*- coding: utf-8 -*-


    2. Ayrica veriyi okurken de

    sock.read()..encode('utf-8')

    Wednesday, January 6, 2010

    wget ile cookie

    TAVSİYE EDİYORUM

    Mesela rapidshare'den dosyaları wget ile çekmek istedik. işte burada wget ile evvela cookileri yüklemek gerek. Rapidshare in sadece bir satı bir cookie bilgisi var.

    (Önce rp panelinden "direct download" aktif hale getirilmeli)
    Daha sonra rp'e giriş yapınca elinizdeki cookie'yi bir metin belgesine saklayın (mesela rpcookie.txt içine).

    .rapidshare.com TRUE / FALSE 1122334455 user 111111-%20%20%20%20%20%20%20%20

    ve sonrasında şu kod yeterli olacaktır

    wget --load-cookies=rpcookie.txt http://rapidshare.com/files/319105750/Debut.rar
    

    (rapidshare linki örnektir :) )




    konuyu irdelemek için
    http://www.g-loaded.eu/2007/09/15/use-wget-or-curl-to-download-from-rapidshare-premium/

    Tuesday, December 29, 2009

    MSSQL Error : String or binary data would be truncated. The statement has been terminated.

    Hayatta yapmadığım şeyi yaptım ve veri tipini nvarchar() olarak tanımlarken büyüklüğü hakkında hiç düşünmeden "10" dedim. nvarchar(10)


    sonra olan oldu ve
    String or binary data would be truncated. The statement has been terminated.

    Aradan sinir dolu dakikalar geçince gördüm ki hata veri alanın yetersiz olmasından. nvarchar(50) yaptım ve hatadan kurtuldum

    Siz siz olun verilerinizin olası büyüklüğü hakkında değerlendirme yapmadan alanlarınızı tanımlamayın.