21 Ekim 2018 Pazar

YouTube kanalının ismi CODE CUBE olarak değişti

Geçen gün youtube'da deep learning videoları izlerken bir anda kendimi "evde tuğla yapımı" isimli videoyu izlerken buldum :D Youtube aslında amacına uygun kullanılırsa gerçekten bir bilgi yuvası. Her ne kadar son yıllarda biraz değişmiş olsada hala en fazla vakit geçirilen sitelerden birisi. Bazı eğitim içeriği hazırlayan kişiler şu an içeriklerini profesyonel eğitim satış sitelerine taşısalarda gerekli olan kitleyi Youtube ve diğer sosyal medya araçları üzerinden elde etmek zorundalar. Hazırlanan videonun kalıcı olması, dünya çapındaki yaygınlık sebebi ile Youtube hala en büyük sosyal ağlardan birisidir.
 
İlk youtube kanalımı sanırım 2008 yılında açmıştım, o zamanlar 3ds Max videoları ekleyerek hatrı sayılır bir takipçi elde etmiştim. Fakat ilerleyen yıllarda çeşitli sebeplerden ötürü kalıcı olamayıp kanalı kapatmıştım. Bir kaç yıl önce yeniden bir kanal açtım ve derslerde öğrencilere yardımcı olması için çektiğim Java videolarına olumlu yanıtlar alınca, kanalı büyütme kararı aldım. 

Biraz daha profesyonellik için kanal ismini kişisel isim olarak değil de bundan sonra CODE CUBE olarak adlandırmayı düşünüyorum. Ayrıca farklı eğitmenler ve öğrenci arkadaşlardan gelen videolara da yer vereceğim. Her ne kadar CODE CUBE olsada 3ds Max vb diğer bilişim konularında da videolar eklemeye devam edeceğim.

1 Ekim 2018 Pazartesi

Algoritma Soruları 047 - String içindeki palindromu bulmak.

Seviye : İleri

Tersten yazıldığında da aynı harfleri içeren stringlere palindrome denir. Kullanıcıdan alınan bir string içindeki en uzun palindrome ifadeyi bulan programı yaznız?

Açıklama:
Kullanıcı "adanmışlık" kelimesini girmiş olsun
bu kelimede "adanmışlık" en uzun palindrome kelime ada'dır

28 Eylül 2018 Cuma

En basit Bitcoin madenciliği nasıl yapılır?

Tarihi rekor olan 19 bin $ zirvesini gördükten sonra Bitcoin (BTC) şu an yaklaşık maliyet fiyatı olan 6 bin $ civarında fiyatlanıyor. Bir kaç yıl içinde fiyatlarda yeniden bir artış yaşanacağı kesin. Bu süre zarfında hiçbir masraf yapmadan madencilik yaparak BTC biriktirebilirsiniz. Tek yapmanız gereken aşağıdaki linke tıklayarak Crypto browserı yada browser eklentisini kurmak;


CryptoTab browser, chrome tabanlı bir browser. İşlemci ve ekran kartınızın gücüne bağlı BTC madenciliği yapıyor. Browser chrome'un tüm eklentilerini destekliyor.

CryptoTab tarayıcıyı ortadaki büyük mavi linkten indirip kurabilirsiniz.

Browserı ilk kurduğunuzda karşınıza bir sayaç çıkacak ve ne kadar BTC kazdığınızı görebileceksiniz. Tabiki bir BTC kazmak oldukça zaman alan bir iş ve normal bilgisayar gücü ile bunu elde etmeniz oldukça fazla zaman alacaktır. Browser sayacı bize kazılan miktarı BTC'nin alt birimi olan Satoshi ile göstermektedir. 100 000 000 satoshi = 1 BTC 'dir. Yani 10 üzeri eksi sekize kadar alt birim vardır. Browser ilerlemeyi göstermek adına virgülden sonra 8 hanenin sonuna 4 hane daha eklemiştir. Son dört haneyi dikkate almamak gerekli.
Bir kaç günlük kullanım sonunda yaklaşık 5000 satoshi kazdım. Tabiki işlemci hızına ve çalıştırma süresine bağlı olarak bu miktar daha fazla da olabilir.
Sağ üst köşede bukunan turuncu simge ile gösterge ekranını her an açabilirsiniz. Açık olmasa bile browserı kullandığınız süre boyunca kazmaya devam edecektir. Sol alt köşede ise saniyedeki hash hızı veriliyor bu ne kadar fazla olursa kazanç o kadar fazla olur. Görev yöneticisinden baktığımda CryptoTab browser işlemci gücünün yaklaşık %60'nı tüketiyor. Bu da oldukça makul bir oran, yine de 3d tasarım, render, oyun vb. işlemlerde browser'ı kapatabilirsiniz.

Browser gösterge ekranında bulunan ayar düğmesine basarak yine genel bilgilerinizi görebilir yada istediğiniz bir cüzdana kazanılan BTC'leri aktarabilirsiniz. Parayı çekebilmeniz için en az 1000 satoshi kazmış olmanız gerekli, tabiki bu çok küçük bir biktar. Şu anki BTC fiyatına göre yaklaşık 15 bin satoshi 1 dolar civarında. Bu fiyatlardan satmak yerine bir cüzdanda bunları bir kaç yıl boyunca biriktirip, BTC fiyatları yükselince satmak daha mantıklı olacaktır.
Gösterge ekranında bulunan  ayar düğmesi ile bilgi ekranı ve para çekme işlemlerine yönlendiren butona ulaşabilirsiniz.
Başta da belirttiğimiz gibi bu yöntem hiç bir masraf yapmadan BTC madenciliği yöntemidir. Gerçek madencilik için biraz sermaye ile ekran kartlarından oluşan bir sistem kurmanız gerecektir. Tabi ki böyle bir sistemin elektrik masrafı da yüksek olacaktır. Bu yazıda belirttiğimiz yöntem ise durağan madencilik işidir.

29 Ağustos 2018 Çarşamba

Kaosdan düzene, Sierpinski Üçgeni

Tüm büyük değişiklikler kaos sayesinde ortaya çıkar.
Deepak Chopra

20. yüzyılda bilim insanları sadece bir kaç basit kuralla tamamen rastgele ve kaotik durumlardan düzen oluşturulabileceğini keşfetti. Kaotik olarak görünen bazı şekillerin aslında düzenli olduğu bulundu. Bu tür örüntülere(izler) Fractal adı verildi. Matematiksel fonksiyonlarla ifade edilebilen bu örüntüler(izler) bilgisayar yazılımları sayesinde daha fazla iterasyon ile hesaplandılar ve görüntülendiler.

Fractal örüntüsü
Bir çok bitki ve canlı yapısı fractal şeklindedir.

Polonyalı matematikçi Vaclav Sierpinski (1882-1969) 1916 yılında, daha sonra kendi adıyla anılan ve Sierpinski Üçgeni (Sierpinski Triangle) veya Sierpinski Şapkası (Sierpinski Gasket) veya Sierpinski Kalburu (Sierpinski Sieve) da denen bir fraktal tanıttı. Eşkenar üçgenin içerisine her iterasyonda yeni bir üçgen çizerek elde ediliyordu.

Sierpinski üçkeni
Sierpinski üçgeni aslında binom açılımında da kullanılan Ömer Hayyam üçgenindeki çift sayıların işaretlenmesi ile de bulunabiliyordu.
Binom açılımındaki tek ve çift rakamların işaretlenmesi ile de Sierpinski üçgeni elde edilebilir.
Fractallar kaotik görünen düzenli örüntülerdir, Sierpinski üçgeni de bir üçgen içerisinde rastgele seçilen bir noktadan başlayarak, her adımda rastgle seçilen bir köşeye olan uzaklığın orta noktasının işaretlenmesi ile oluşur. Tamamen rastgele süreçlerin tek bir kural ile düzenli bir fractal oluşturduğu görülür.
Kaos oyunu ile tek kuralda kaosdan düzen sağlanır
Aşağıdaki kod örenğinde Çalıştır Butonu ile kaos ortamından oluşan Sierpinski üçgenini gözlemleyebilirsiniz;




19 Ağustos 2018 Pazar

JAR (Java ARchieve) Dosyaları

Java classlarının, kılavuz bilgilerinin(metadata) ve dosya kaynaklarının(resim,text,ses vb.) sıkıştırılarak dağıtıldığı dosya türüdür. Uzantısı genellikle ".jar" olarak adlandırılır. Teknik olarak bir zip dosyasıdır, Windows ve diğer işletim süstemleri üzerinde çift tıklama çalışabilir. Basit programların dağıtımı için idealdir. Ayrıca kaynak kütüphanaler java projelerine dahil edilerek kullanılabilir.

Eclipse ile çalıştırılabilir JAR dosyası oluşturmak için;
1. Adım - Run Configuration
Eğer çalıştırma ayarları yapılmamışsa yada yeni bir isim vermek istiyorsanız run/run configurations seçeneğini açın, name kısmına istediğiniz bir ismi yazın ve apply seçeneğine tıklayın. Ardından deneme amaçlı yeşil çalıştır butonu ile deneyebilirsiniz.
Run Configurations

2. Adım - JAR dosyasının export edilmesi
Proje dosyasının üzerine sağ tıklayın ve Export seçeneğini seçin, a.ılan pencerenin Java klasörü içerisinde "JAR file" ve "Runnable JAR file" seçeneği vardır. Jar file sadece kütüphane dağıtımı için kullanılabilirken Runnable Jar file ise çift tıklama ile çalıştırılabilen dosyadır. İleri diyerek, run configuration ayarında verdiğiniz ayarı seçiniz, ardından dosyanın çıkarılacağı yolu seçin ve isim verin. Finish diyerek dosyayı export edin. Programınızda uyarı niteliğinde sarı ünlem işaretleri varsa küçük bir uyarı alacaksınız fakat bunun dosyanın çalışması açısından hiç bir önemi yoktur.
Export
3. Adım JAR dosyasının içeriğini inceleyelim
Bunun için export edilen Jar dosyasına sağ tıklayın ve winzip, winrar, 7 zip benzeri bir program ile açın. Ben winrar ile açıp aşağıdaki görselde dosyaları göstereceğim. Klasör içindeki class dosyaları Java byte kodtur, bu kod JVM yani Java runtime ile çalıştırılır, dağıtım yapılan makinada JVM varsa program sorunsuz çalışacaktır.
JAR dosyasının yapısını winrar ile inceleyelim

26 Temmuz 2018 Perşembe

Algoritma Soruları 046 - Ducci Sekansları

Seviye : Orta

Bir dizide ardıl elemanların arasındaki farkın alınması ile yeni dizinin oluşturulmasıdır.


 Bu hesaplama sürdürülüerse dizinin tüm elemanları 0'a oluşur.

Rastgele üretilen bir dizinin Ducci sekanslarını hesaplayınız?

Açıklama: Başlangıç dizisi [0; 653; 1854; 4063] olsun.

[0; 653; 1854; 4063]
[653; 1201; 2209; 4063]
[548; 1008; 1854; 3410]
[460; 846; 1556; 2862]
[386; 710; 1306; 2402]
[324; 596; 1096; 2016]
[272; 500; 920; 1692]
[228; 420; 772; 1420]
[192; 352; 648; 1192]
[160; 296; 544; 1000]
[136; 248; 456; 840]
[112; 208; 384; 704]
[96; 176; 320; 592]
[80; 144; 272; 496]
[64; 128; 224; 416]
[64; 96; 192; 352]
[32; 96; 160; 288]
[64; 64; 128; 256]
[0; 64; 128; 192]
[64; 64; 64; 192]
[0; 0; 128; 128]
[0; 128; 0; 128]
[128; 128; 128; 128]
[0; 0; 0; 0]
24 steps

25 Temmuz 2018 Çarşamba

JetBrains yazılım ürünlerini tanıyalım

2000 yılında Prag'ta kurulan yazılım şirketi, IntelliJ Idea isimli Java IDE'si ile tanındı. 2012 yılında IntelliJ üzerinden inşa edilen Android Studio, Google tarafından resmi Android geliştirme ortamı olarak tanındı. Firmanın geliştirdiği Java tabanlı Kotlin dili ise 2017 yılında Google tarafından desteklenen resmi Android dili olarak duyuruldu.

 
Şirketin birçok programlama dili için IDE'si bulunmaktadır. Bunlar Java için IntelliJ IDEA, Python için PyCharm, Php için PHPStorm, JavaScript için WebStorm, Ruby için RubyMine, iOS/OS X geliştirmeleri için AppCode, C ve C++ için CLion, veritabanı ve SQL çalışmaları için DataGrip, Python ile programlamaya yeni başlayanlar için PyCharmEdu şeklindedir. 



Java için IntelliJ ve Python için PyCharm ürünlerinin ücretsiz community sürümleri bulunmaktadır. Ayrıca diğer araçlar için 30 günlük deneme sürümleri mevcuttur. Ayrıca Öğretmen ve öğrenciler için 1 yıllık deneme sürümleri mevcuttur. https://www.jetbrains.com/student/ adresinden üye olarak tüm ürünleri bir yıl süreyle kullanabilirsiniz. Güncel programcılık açısından oldukça kararlı Ide'lere sahip an firmanın ürünlerini mutlaka denemenizi öneririm.

19 Haziran 2018 Salı

Mersenne Twister (sözde rastlantısal sayı üreteci)

"Aritmetik yöntemlerle rastsal sayılar üretmeye çalışan biri büyük günah işliyordur."
John Von Neumann 

Günümüzde random sayı üreteçleri donanımsal özellikleri kullanarak (sistem saati vb.) çalışıyor olsada çoğu programlama dili aritmetik yöntemlerle rastgele sayı üretmektedir. Aritmetik olarak rastgele sayı üretmenin avantajı şüphesiz hız olacaktır. Bilimsel simülasyonlar üzerindeki üretilmesi gereken milyonlarca rastsal eğer donanımsal olarak üretilirse epey zaman kaybı olacaktır. Bunu çözmenin bir yolu önceden rastsal sayı dizisinin oluşturulup saklanması olsa bile bir çok gerçek zamanlı simulasyonda işlevsiz kalacaktır. Python dili ve bir çok programlama dili varsayılan random sayı jeneratörü olarak mersenne twister algoritmasını tercih etmektedir. 

Algoritma, Makoto Matsumoto ve Takuji Nishimura  tarafından 1998 yılında tanıtılmıştır. Temel olarak algoritma çekirdeği 19,937 bit uzunluğunda, bu bitler 624 değişik dizi de tutuluyor ve bunlardan 623 tanesi kullanılırken son dizi elemanı ve kalan 31 kullanılmıyor. XOR ile kaydırma kaydedicileri her seferinde dizi elemanlarını birer kere kaydırıyor. Kaydırma periyodu 2^19937-1 (yani Mersenne asal sayıları, algoritmanın ismi de buradan geliyor) olduğu için her periyod ta dizi içindeki bitler rastgele kaydırılmış oluyor.

Mersenne Twister doğrusal kaydırıcısının mantıksal gösterimi


Algoritmanın pseudo kodu aşağıdaki gibidir;

for i = 0 to 623
  temp = first bit of a(i) followed by last 31 bits of a(i+1) ;
  a(i) = temp shifted right one bit xor
         X'9908B0DF' if temp is odd xor
         a(i+397) ;
 next i
 
for i = 0 to 226
  temp = first bit of a(i) followed by last 31 bits of a(i+1) ;
  a(i) = temp shifted right one bit xor
         X'9908B0DF' if temp is odd xor
         a(i+397) ;
 next i
 for i = 227 to 622
  temp = first bit of a(i) followed by last 31 bits of a(i+1) ;
  a(i) = temp shifted right one bit xor
         X'9908B0DF' if temp is odd xor
         a(i-227) ;
 next i
 temp = first bit of a(623) followed by last 31 bits of a(0) ;
 a(i) = temp shifted right one bit xor
        X'9908B0DF' if temp is odd xor
        a(396) ;
 
L = 19937
W = 32
M = 397
A = X'9908B0DF'
 
N = floor( L/W ) + 1
R = L mod W
 
for i = 0 to N-M-1
  temp = first R bits of x(i) followed by last W-R bits of x(i+1) ;
  x(i) = temp shifted right one bit xor
         A if temp is odd xor
         x(i+M) ;
 next i
 for i = N-M to N-2
  temp = first R bits of x(i) followed by last W-R bits of x(i+1) ;
  x(i) = temp shifted right one bit xor
         A if temp is odd xor
         x(i+M-N) ;
 next i
 temp = first R bits of x(N-1) followed by last W-R bits of x(0) ;
 x(N-1) = temp shifted right one bit xor
          A if temp is odd xor
          x(M-1) ; 

5 Haziran 2018 Salı

Recursive Fibonacci

Fibonacci serisini recursive hesaplamak;

Java

static int fibonacci(int n)  {
    if(n == 0)       return 0;
    else if(n == 1)      return 1;
    else        return fibonacci(n - 1) + fibonacci(n - 2);}

Yukarıdaki kod Fibonacci serisinde gönderilen n. elemanı döndürür.

Yukarıdaki kod main fonksiyonundan çağırıldığında

public class fibo {

    static int fibonacci(int n)  {
        if(n == 0)       return 0;
        else if(n == 1)      return 1;
        else        return fibonacci(n - 1) + fibonacci(n - 2);    }

    public static void main(String[] args) {
        for(int i=1;i<10;i++) System.out.print(fibonacci(i)+" - ");    }
}

Çıktı aşağıdaki gibi olacaktır

1 - 1 - 2 - 3 - 5 - 8 - 13 - 21 - 34 -