7 Ağustos 2015 Cuma

Aşağıda işimizi kolaylaştıracak yararlı web siteler var
1- https://app.prntscr.com/tr/download.html - ekran alıntısı aracı linux, mac & win için. tarayıcılar için eklentileri de mevcut.
2- https://dictation.io/ - sesli mesaj, not yazma servisi.
3- http://zerodollarmovies.com/ - youtube'da uzun süreli film, video bulmanızı sağlar.
4- http://www.screenr.com/ - online olarak ekran videosu çekmenize yardım eder.
5- http://goo.gl/ - google url kısaltma servisi. detaylı raporlama sunar.
6- http://unfurlr.com/ - gezdiğiniz web sitesinin içinde zararlı link olup olmadığına bakar.
7- http://www.qlock.com/ - google map kullanarak bir şehrin yerel saati bulabilir.
8- http://copypastecharacter.com/ - klavyede olmayan özel karakterler bulun, buluşturun.
9- http://my.lovelycharts.com/ - akış şemaları, ağ diyagramları oluşturmanızı sağlar.
10- http://www.iconfinder.com/ - en iyi kalitedeki ikonları bulun, kullanın. faydalı eser.
11- http://www.office.com/- office belgeleri için hazır şablonlar bulmaya ne dersiniz? işte orası burası.
12- http://www.followupthen.com/ - kendinize ileri tarihli bir e-posta gönderin.
13- http://virusscan.jotti.org/en - şüpheli dosya veya e-posta eki tarayın.
14- http://wolframalpha.com/ - en doğru cevapları veren arama motoru. apple tarafından da destekleniyor.
15- http://www.printwhatyoulike.com/ - web sayfalarını kaydedin. mobil cihazınızda okuyun. sözlük yazarları arıyor böyle servisleri.
16- http://ctrlq.org/rss rss beslemeleri bulmak için arama motoru.
17- http://e.ggtimer.com/ - unutuyor musunuz? o halde bir de bunu deneyin.
18- http://www.pdfescape.com/ - pdf editlemek için ne yapması gerektiğini bilmeyenlere. online olarak edit yapar. süper!
19- http://scr.im/ - e-posta adresinizi online olarak paylaşanlar için büyük kolaylık. spam tehlikesi yok.
20- http://new.myfonts.com/whatthefont/ - görseldeki fontun ne olduğunu bilmenize yardımcı olur. yükleyin, bulun.
21- http://www.livestream.com/ - canlı yayın, paylaşın, izlenin. gerçi artık twitter periscope var.
22- http://iwantmyname.com/ - domain mi alacaksınız? hangi uzantıların boş olduğunu merak edenlere özel. tlds domain arama motoru.
23- http://www.homestyler.com/ - evinizin içini yeniden mi tasarlamak istiyorsunuz. size yardımcı olacaktır. test edildi.
24- http://hundredzeros.com/ - ücretsiz kindle kitapları okumak isteyenler için faydalı servis.
25- http://www.flightstats.com/ - uçakların bir harita üzerinden nereye uçtuğunu izleyin.
26- http://www.polishmywriting.com/ - gramer problemi olanlara yardımcı olur. ingilizcenize katkı yapar.
27- http://marker.to/ - sitelerde hoşunuza giden cümleleri sarıya boyayın ve paylaşın.
28- http://typewith.me/ - aynı dosya üzerinden birden fazla kişiyle çalışmanın keyfi.
29- http://whichdateworks.com/ - grup planları oluşturun ve kimse ne yapacağınızı unutmasın. basit ve güzel.
30- http://everytimezone.com/ - adından da anlaşılacağı üzere dünya saatlerini öğrenmenizi sağlar.
31- http://gtmetrix.com/ - web geliştiricileri için çok özel servis. sitenizdeki sorunları bulun ve düzeltin.
32- https://www.noteflight.com/ - tarayıcıda müzik notasyonu yapmak isteyenlere gelsin.
33- https://imo.im/ - bir çok chat servisi tek bir noktada.
34- http://kleki.com/ - online basit photoshop.
35- http://www.similarsites.com/ - benzer siteleri bulmak isteyenlere özel servis.
36- http://www.wordle.net/ - görsel etiket şovlar yapmaya ne dersiniz? java gerektirir.
37- http://kuler.adobe.com/ - en çok kullanılan renkler neler? ya da bir rengin rgb kodu nedir? hepsine cevap verir.
38- http://lmgtfy.com/ - bir google aramasını başkaları adına yapın ve paylaşın.
39- http://www.midomi.com/ - duyduğunuz ama adını bilmediğiniz şarkıları bulmaya ne dersiniz?
40- http://ge.tt/ - birine dosya göndermenin en hızlı yolu! gerçekten mükemmel.
41- http://www.privnote.com/ - daha sonra okumak için notlar yazın. siteyi yer imlerine ekleyin.
42- http://boxoh.com/ - kargo takip numarasını yazın ve kargonun nerede olduğunu öğrenin. çin'de işe yarıyor.
43- http://downforeveryoneorjustme.com/ - web sitelerinin durumunu öğrenin. kapanmış mı? açık mı? acaba??
44- http://www.whoishostingthis.com/ - hangi site hangi sunucuda barınıyor bilmek isteyenlere.
45- http://disposablewebpage.com/ - geçici olarak web sayfası yapmak isteyenlere özel.
46- https://www.aviary.com/ - adobe'nin fotoğraf düzenleme servisi. ücretsiz hemde.
47- http://www.urbandictionary.com/ - slogan bulamayanlara yardımcı olur. ilham verir.
48- http://www.sxc.hu/index.html - ücretsiz ve yüksek kalitede stok fotoğraflar edinin.
49- http://scribblemaps.com/ - google'da kolayca harita oluşturmanıza yardımcı olacak süper servis.
50- http://www.alertful.com/ - önemli olayları hatırlatan gerekli bir kaynak.
51- http://www.picmonkey.com/ - çevrimiçi resim editörü. deneyin ve görün.
52- http://www.sumopaint.com/app/ - katman katman görsellerle harikalar yaratmak isteyenlere.
53- http://studio.stupeflix.com/ - güzel anılarınızı bir video şovla renklendirin. animoto gibi.
54- http://safeweb.norton.com/ - web sayfalarını güvenle gezin. online internet security.
55- https://teuxdeux.com/ - hangi günde ne yapacağınızı planlayın. to-do listler yapın ki, hayat düzene girsin.
56- https://minutes.io/new/meeting - toplantıdasınız ve yanınızda bir kağıt yok mu? o halde bu siteye girin ve notlarınızı alın.
57- https://www.youtube.com/leanback - youtube'a tv ekranından bakmaya ne dersiniz?
58- http://pancake.io/ - dropbox hesabınızı kullanarak basit web sayfaları yapın. wix gibi.
59- http://otixo.com/ - cloud hesaplarınızı tek bir noktadan yönetmenizi sağlar. mükemmel bir araç.
60- https://ifttt.com/ - tek bir noktadan emir verin. mobil cihazlarınızı, sosyal hesaplarınızı, planlarınızı yaratın. internet hayatınızı kolaya çevirmenin en basit yolu.
61- http://add0n.com/ - tarayıcılar için mükemmel eklentiler. youtube'u en üst kalitede ziyaret edin, outlook, gmail, facebook, twitter, google+, icloud, için bildirimler alın, formları otomatik doludurun.
62- https://lastpass.com/ - artık şifreleri aklınızda tutmaya son. yaklaşık 7 yıldır premimum olarak kullandığım bu servisten herkes faydalanmalı. üst düzey koruma kalkanı ile şifrelerinizi koruyor ve saklıyor. masaüstü, (linux, mac, windows), mobil uygulamaları, tarayıcı eklentileri de mevcut.

www.yazilimsozluk.com dan alınmıştır.

eatj nedir

EATJ; J2EE destekleyen faydalı bir webhosting tir. 11 gün trial süresi vardır. Uygulamalarınızı kısa süreliğine test edebilirsiniz. Deploy ettiğiniz war dosyasının isminin ROOT.war olmasına dikkat edin.eatj help adresindeki ROOT.war ı indirip kendi war ınızı bunun gibi yaparsanız problem yaşamazsınız.

6 Ağustos 2015 Perşembe

Apache Cassandra nedir


Apache tarafından geliştirilen açık kaynaklı, yüksek ölçeklenebilirliğe sahip ve yüksek performanslı NoSQL veritabanı mimarisi yapısında olan dağıtık bir veritabanı sistemidir. İlk olarak Amazon’un Dynamo ve Google’ın Bigtable veri tabanları temel alınarak Facebook tarafından geliştirilmiştir. Facebook 2009 da Cassandra’yı açık kaynak olarak açıp Apache kuruluşuna devretmiştir. Kapasitesi oldukça yüksek olan Cassandra petabaytlarca veriyi tutabilir. Çoklu veri merkezlerinde ya da bulut ortamında bulunan yapısal veya yapısal olmayan verileri yönetmek için oldukça iyi bir sistemdir. Esnek, dinamik ve hızlı cevap süresine sahiptir. Yüzde seksenlere varan veri sıkıştırma (Google’ın Snappy algoritması ile) yeteneğine sahiptir. Güçlü memory cache yazılımlarına (memcache ...) olan ihtiyacı ortadan kaldırır. SQL kullanımına oldukça benzeyen ve öğrenilmesi kolay olan CQL dili ile sorgulama yapar. Platform ve dil desteği vardır. Cassandra’yı çalıştırmak için özel olarak tasarlanmış yazılım ve donanımlara ihtiyaç yoktur. Kullanım oranı yüksek olan Cassandra CERN, Comcast, eBay, GitHub, GoDaddy,Hulu, Instagram, Intuit, Netflix, Reddit ve daha 1500 den fazla kurum tarafından kullanılmaktadır. Cassandra’nın sağladığı kolaylıklar ve faydalar Elastik ölçeklenebilirlik (Elastic scalability) : İhtiyaç duyulduğu herhangi bir zamanda kapasiteyi kolayca artırmaya izin verir. Sürekli aktif (Always on architecture) : Geleneksel master/slave RDBMS ya da NoSQL çözümleri gibi esas bileşendeki bir hatadan (single point of failure ) dolayı sistemin çökmesi söz konusu değildir. Çünkü böyle bir mimarisi yoktur. Sürekli kullanılabilirlik esasına dayanır ve asla uygulamaların çökmesini göze almaz. Doğrusal ölçekli hızlı performans (Fast linear-scale performance) : Doğrusal ölçeklenebilirlik yapısı sayesinde cevap süresi saniyenin altındadır. Cevap süresini beklenen süre içinde tutmak için sonuçları iki nodetan, dört nodetan ya da bu şekilde mümkün olan nodelardan elde eder. Esnek veri depolama (Flexible data storage) : Tüm veri formatlarını (yapısal, yarı-yapısal, yapısal olmayan) kolayca barındırır. Günümüzdeki modern uygulamalar ile çalışır. Aynı zamanda dinamik olarak verinin ihtiyaç duyduğu yapısal değişiklikleri yaparak barındırır. Kolay veri dağıtımı (Easy data distribution) : Verinin ihtiyaç duyulduğu kadar çoklu veri merkezlerine, bulut ortamlarına ya da başka ortamlara dağıtılması ve kopyalanması için maksimum esneklik sağlar. Herhangi bir node üzerinde yapılan okuma ve yazma işlemindeki değişiklikler otomatik olarak cluster içindeki tüm nodelara yansıtılır. Operasyonel basitlik (Operational simplicity): Cluster içindeki tüm nodelar aynıdır. Karmaşık bir konfigurasyon yapısı yoktur. Yönetim işlemleri oldukça basitleştirilmiştir. Transaction desteği (Transaction support) : Cassandra transaction içinde “AID” (atomicity, isolated, durability) özelliklerini garanti eder. Tutarlılık ise ayarlanabilir. Cassandra Mimarisi Cassandra dağıtık veritabanı mimarisi üzerine kurulmuştur. Bir cluster ve bu clusterı oluştruan bir veya daha fazla nodelardan oluşur. Cluster birbirine bağlı sunuculardan oluşur. node ise bir veritabanı sunucusudur. Dolayısıyla veritabanı birden fazla sunucuda saklanır. Nodelarda saklanan verilerin kopyası başka nodelarda saklanabilmektedir. Tüm nodeların kopyasının olması zorunluluğu yoktur. Cassandra peer-to-peer dağıtık mimariye sahiptir. Bu da çok daha iyi, kurulumu ve bakımı kolay bir yapı oluşturur. Cassandra da tüm nodelar aynıdır. Bir master node konsepti yoktur. Tüm nodelar birbirleriyle iletişim halindedir ve iletişim için gossip protokolunu kullanmaktadır. Cassandra’nın yüksek ölçeklenebilir yapısı, petabaylarca veri saklanmasına ve saniyede binlerce kullanıcı operasyonlarının gerçekleştirilmesine olanak sağlar. İsteğe yönelik sürekli kullanılabilirlik (offer continuous availability) mantığında çalışır. Cassandra doğrusal ölçeklenebilirliğe sahiptir. Örneğin iki node ile saniyede 100.000 işlem gerçekleştirirken node artırılğında işlem kapasitesi de artmaktadır. Veri Dağıtma ve Kopyalama Cassandra veriyi otomotaik olarak cluster ya da “ring” içindeki nodelara dağıtır. Developerların ya da Cassandra adminlerinin cluster içinde veriyi dağıtmak için herhangi bir geliştirme yapmasına gerek yoktur. Veri transparan parçalar halinde nodelara ya rastgele seçilerek ya da sıralı bir şekilde gönderilir. Varsayılan olarak rasgele seçilir. Cassandra aynı zamanda bir Cassandra “ring” i içerisinde fazladan kopya tutmak için gömülü ve özelleştirileilir kopyalama sağlar. Bunun anlamı bir node down olduğunda bu nodeun verileri cluster içindeki diğer makinelerde durmaya devam eder. RDBMS ve NoSQL veritabanlarının içindeki karmaşık koplayalama düzenlerinin aksine Cassandra’da konfigurasyon son derece kolaydır. Developer ya da admin basitçe ne kadar veri kopyası istediğini belirtir ve Cassandra gerisini halleder. Cassandra da kopyalama seçenekleri aynı zamanda verinin otomatik olarak farklı fiziksel yerlerde, çoklu-data merkezlerinde ve bulut platformların saklanmasına izin verir. Çoklu-Veri Merkezi ve Bulut Desteği Cassandra çoklu-data merkezlerinde ve bulut platformlarından veri kopyalama işlemlerinde önde gelen ve başarısı kabul görmüş bir NoSQL veritabanıdır. Bir developer ya da admin çoklu-data merkezlerini ya da melez bulut sistemlerini içeren bir cluster oluşturabilir. Yeni bir veritabanı (keyspace) oluştururken ya da çağırırken kullanıcı basit bir şekilde tek komutla hangi veri merkezlerinden ya da bulut ortamından veriyi çekeceğini belirtir. bundan sonrasını Cassandra otomatik olarak ilerletir ve bakımını kendi halleder. Veri Okuma ve Yazma Cassandra veri okuma ve yazma işlemleri sırasında “location independent” mimarisini kullanır. Bunun anlamı cluster içindeki bir node okunurken ya da yazılırken herhangi bir yere yaz/oku dizaynı(read/write-anywhere design) aktif edilir. Cassandra’ya veri yazılırken, tüm verinin dayanıklılığını ve güvenliğini sağlamak için veri ilk olarak bir commit loga yazılır. Veri in-memory olarak memtable adı verilen yapıda saklanır. Memtable dolduğunda veri diske flush edilerek sstable (sorted strings table) yapısında saklanır. Eğer belirli bir veri kümesinden sorumlu olan bir veya daha fazla node down olursa, veri basitçe başka bir nodea geçici olarak yazılır. Bu sorumlu nodelar ilk kez tekrar geri geldiğinde otomatik olarak yönettikleri veriyi back up larının olduğu nodelardan alıp veriyi güncellerler. Böylece veri kaybı ortadan kalkmış olur. Veri okuma cluster içinde paralel olarak yapılır. Kullanıcı veriyi herhangi bir node tan ister. Kullanıcın sorgusu gerekli veriye sahip nodelardan veri alarak cevaplandırılır. Eğer istenen veriye sahip node down olursa Cassandra verinin kopyasına sahip olan diğer nodelardan veriyi çeker. Cassandra RDBMS (ilişkisel veri tabanları) lerde olduğu gibi işlemsel (transactinal) bir veritabanı değildir. Biraz daha farklı bir transaction yapısı vardır. RDBMS ler ACID (Atomicity, Consistency, Isolation, Durability) transaction sağlarken Cassandra AID (Atomicity, Isolation, Durability) transaction sağlar. Cassandra’da bütünlük tutarlılığına ait bir konsept ya da foreign key yoktur. Veri Tutarlılığı Cassandra veritabanı clusterı içinde ayarlanabilir veri tutarlılığı sunar. Bunun anlamı bir developer ya da admin veriyi nasıl istediğine(ne kadar güçlü ya da nihai olsun) karar verir. Örneğin tüm node lardan cevap alarak veriyi oluştur ya da bir veya bir kaç node tan cevap aldıktan sonra geri kalanları güncelle gibi bir kaç farklı seçenek kullanılabilir. tek ya da çoklu-veri merkezlerini de destekler. Ayrıca tutarlılık işlem bazlı olarak ayarlanabilir. Yani bir developer ya da admin her bir işlem (SELECT, INSERT, UPDATE ve DELETE) sırasında tutarlılık seçeneklerini ayarlayabilir. adresinden alınmıştır.

RabbitMQ nedir?

RabbitMQ (Open Source EnterPrise Messaging) Anlık yapılması gerekmeyen işlerimizi belli bir kuyruk yapısına sokarak async olarak yapmamızı sağlayan bir uygulamadır.

https://www.rabbitmq.com/download.html adresini kullanarak üstünde çalıştığımız ortama indirebilir ve tutorial lara bakarak işlerimizi görebiliriz. Birçok dile entegre edilebilir durumdadır.

10 Ekim 2014 Cuma

ITextSharp türkçe karakter problemi

ITextSharp Türkçe Karakter Sorunu

ITextSharp ile pdf çıktısı oluştururken Türkçe karakterler görünmeyebiliyor. Bu sorunu aşmak için yeni bir font tanımlayıp,

iTextSharp.text.pdf.BaseFont STF_Helvetica_Turkish = iTextSharp.text.pdf.BaseFont.CreateFont("Helvetica", "CP1254", iTextSharp.text.pdf.BaseFont.NOT_EMBEDDED);

iTextSharp.text.Font fontNormal = new iTextSharp.text.Font(STF_Helvetica_Turkish, 12, iTextSharp.text.Font.NORMAL); 



ekleyeceğin metinlerde de parametre olarak bu fontu eklemen gerekiyor. Örnek olarak pdftable adında bir tabloya yeni bir hücre eklerken;

pdftable.AddCell(new Phrase("ğüşıöç ĞÜŞİÖÇ" , fontNormal)); 
gibi.

http://www.canerkara.com/ dan alınmıştır.

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");
     }
}
}