24 Haziran 2014 Salı

Java Streamleri

BufferedInputStream
close metodu
BufferedInputStream kapanırken kendisine verilen stream'i de kapatır.

17 Haziran 2014 Salı

Sosyal Ağlarda İlişki

Facebook
İki insanın birbirlerine arkadaşlık göndermesi gerekir. Arkadaşlık isteği kabul edildikten sonra birbirlerinin duvarlarına mesaj gönderme (post) ve görme imkanını elde ederler.

Twitter ve Instagram
Daha esnek olan izleyen ve izlenen ilişkisi kullanılır. 

IEEE 754 ve Yuvarlama

Not : Konuyla ilgili olarak IEEE 754 başlıklı yazıya göz atabilirsiniz.

Yuvarlama İşlemleri
Yuvarlama (rounding) küsuratlı sayının tam sayıya çevrilmesi demek. 


Standart Yuvarlama Yöntemleri
Burada yuvarlama formüllerini gösteren güzel bir şekil var. Bir çok programlama dili bu yuvarlama yöntemini metod olarak sunuyor.


Round (Away FromZero) aşağıdaki gibi gerçekleştirilebilir

Standart Olmayan Yuvarlama Yöntemleri
Aşağıda programlama dilleri tarafından sunulmayan ve pek te karşımızı çıkmayan yuvarlama yöntemlerini not ettim.

Eksiyi Koruyan Ceil
Buradaki örnekte ceil'in tersine eksi sayılar daha da küçülüyor.
f(0.1) = 1
f(-0.1) = -1
f(0.0) = 0
İki şekilde kodlanabilir.
rounded = Math.ceil(Math.abs(toBeRounded)) * Math.signum(toBeRounded);
veya
rounded = Math.copySign(Math.ceil (Math.abs(toBeRounded)),toBeRounded);


Sayıyı Başka Bir Sayının Katı Olacak Şekilde Yuvarlama
Örneğin 201 gibi bir sayı 300'e yuvarlanır. 14 sayısı 100' yuvarlanır.
Algoritma aşağıdakine benzer
int round (int number,int multiple){
    int result = multiple;

    //If not already multiple of given number
    if (number % multiple != 0){
        int division = (number / multiple)+1;
        result = division * multiple;
    }
    return result;
}
Burada da benzer bir cevap var ancak genel bir algoritma sunmamış.

Bir diğer yöntem ise aşağıda. Kolay okunsun diye parantezleri renklendirdim.
#define ROUND_UP (x,multiple) ( (int) (x)+ (multiple -1) ) ) & ~ (multiple -1)

#define ROUNDA_DOWN (x,multiple) ( (int) (x) & ~ (multiple -1) )

C
ceil
ceil() ve ceilf aynı işlevi görürler. Kabaca şöyledirler:
return ( (v < 0.0 ) ? v : (v +1) );

floor
floor() kabaca şöyledir.
return ( (v < 0.0) ? ( v - 1.0) : v ); 

round ve roundf
Bu metodlar verilen kayan sayıyı en yakın integer'a yuvarlar. 

Yuvarlama yönünü fegetround() ve fesetround() metodları ile değiştirebiliriz.

Sayıyı belli bir küsürata yuvarlamak için round() metodu dışında, buradaki  gösterildiği gibi floorf veya ceilf metodları kullanılabilir.

C++
Yuvarlama işlemi fesetround() ile yapılır. Örnek:
Java
Math.Floor ve Math.Ceil metodları var.

Yuvarlama yaparken kaç hane istediğimizi belirtmek istersek aşağıdaki kodu kullanabiliriz.
static Double round(Double d, int precise) {
    BigDecimal bigDecimal = new BigDecimal.valueOf (d);
    bigDecimal = bigDecimal.setScale(precise, RoundingMode.HALF_UP);
    return bigDecimal.doubleValue();
}

C#
Aynı Java'daki gibi Math.Floow ve Math.Ceil metodları var.
Math.Ceiling(num) // Rounds up
Math.Floor(num) // Rounds down
Math.Round ile yuvarlamak yöntemi ve kaç hane istendiği belirtilebilir. Örnek:
Math.Round(value, 2, MidpointRounding.AwayFromZero);
SQL
round metodu ile haç haneye kadar yuvarlama istendiği belirtilebilir.


10 Haziran 2014 Salı

AR-GE

AR-GE projelerinde işin tanımsız olması gerekiyor. Tanımlı işlerin gerçekleşmesi uygulama sayılır.

AR-GE projeleri de normal iş akışını takip ederler

I have a concept or an idea
I draft the concept/idea on paper. 
I do a prototype.
I realize a semi-working version I can use. 
I end up with a working product which is used by me and eventually a few other people.
I ship a stable product to a limited number of people.
The product is a commercial success and achieved to become popular.


6 Haziran 2014 Cuma

Sıralama - Ordering

QuickSort
Quicksort recursive (özyineli) veya sıralı olarak yazılabilir. Burada algoritma dans ile gösteriyor. Açıklaması şöyle
The quicksort algorithm is based on the partitioning procedure. Partitioning procedure works like this: You pick an element from the array to be the pivot. Your array will be divided into two subarrays around the pivot item. Elements larger than the pivot will end up in the right subarray and the ones that are smaller will end up in the left subarray.
...
If you keep applying this partitioning procedure recursively to the left and right subarrays until you reach subarrays of size 1, you will obtain a sorted array. 
Recursive Yöntem
Bu algoritmayı recursive şeklinde aratınca karşımıza bu sayfa çıkıyor. Sayfadaki algoritmada partition metodunda gereğinde fazla swap() yapılıyor. Daha iyi çalışan bir kod ise burada.