
English: 
Thank you.
I have to wake my computer up.
Hi everyone.
I'm Arne Martin, I live in Trondheim Norway.
I work for Boost Communications.
They paid for my trip.
I'll be talking about programming languages.
I'll be talking about isotheric languages.
And why I think you should write in one of
these crazy languages.
But, what's an isotheric language?

Turkish: 
Teşekkür ederim.
Bilgisayarımı uyandırmalıyım.
Herkese selam.
Ben Arne Martin, Norveç'te Trondheim'da yaşıyorum.
Boost Communications için çalışıyorum. Onlar ödediler
seyahatim için. Programlama hakkında konuşacağım
duujjil. İzotermik hakkında konuşacağım
duujjil. Ve neden yazman gerektiğini düşünüyorum
bu çılgın dillerden birinde.
Ancak, izoterik bir dil nedir?

Turkish: 
Programlama tüm iş olmamalıdır.
Ezoterik programlama dilleri dillerdir
Bu genellikle sadece eğlence içindir. Ve onlar
hemen hemen her durumda tamamen işe yaramaz
Herhangi bir pratik kullanım. Bu harika yapar.
Elimde olabilecek birkaç örnek var
duydum.
Brainfuck. Selam Dünya.
Bu en az dillerden biridir. Sadece
8.
Bu 
Yine de kullanımı zor.
O zaman Malboge’un var. Kullanımı daha zordur.
Bu program yazmak zor olmak için yaratılmıştır.

English: 
Programming shouldn't be all business.
Esotheric programming languages are languages
that are often just for fun.
And they are in almost all cases completely
useless for any practical use.
That makes it great.
I have a few examples that you might have
heard of.
Brainfuck.
Hello world.
It is one of the most minimal languages.
Only 8.
It is 
kind of hard to use though.
Then you have Malboge.
It is harder to use.
This is created to be hard to write programs.
Each instruction is encrypted.

Turkish: 
Her talimat şifrelenmiştir. Şifreleme
Programın her adımı için değişiklikler.
Bu Merhaba Dünya örneği henüz yazılmamıştır.
kaba kuvvet kullanılarak oluşturulan kadar.
Ve sonra Piat gibi şeyler yaptık.
Resimde yazabileceğiniz bir dildir.
editör.
Ama neden birileri bunu yapmak istesin ki?
Benim ana fikrim şudur: Neden olmasın? Bu eğlenceli.
Eğlenin, asla girmeyeceğiniz bir kod yazın
günlük işlerinizde yazın.
Yeni yollarla programlama. Yazdığın gibi. Ve
yazdığın dili öğrenmeye çalışıyorum
için.

English: 
The encryption changes for each step of the
program.
This Hello World example has not been written,
as much as generated using brute force.
And then we have things like Piat.
It is a language you can write in an image
editor.
But why should anyone want to do that?
Well, my main idea is: Why not?
It is fun.
Have some fun, write some code you would never
write at your day jobs.
Programming in new ways.
As you write.
And trying to learn the language you are writing
for.

Turkish: 
Devam etmeden önce seni uyarmalıyım.
İ ne yapıyorum hiç bir fikrim yok. Eğitim yok
veya derleyici veya tercüman yazma bilgisi.
Ben sadece bir şeyler yaparım.
Umarım herhangi bir teknik kullanmazsınız.
Kod, kavram Burada herhangi bir yerde göreceksiniz
üretim kodu Sorumlu olmayacağım.
Eğlence için kod yazdığımda yazmıyorum
yorum yapın veya günlüğe kaydetme gibi sorunları göz önünde bulundurun.
Bu sadece eğlence için.
2 satır kaydedebilirsem. Öyle yapacağım.
Göstereceğim ilk dil Befunge.
Befunge, ideokratik bir dildir. Hangisi
Yeni kavramlar

English: 
I have to warn you before we proceed.
I have no idea what I'm doing.
No education or knowledge of writing compilers
or interpreters.
I just do things.
I hope that you will not use any techniques,
code, concept.
That you will see here in any production code.
I will not be held responsible.
When I write code for fun, I don't do writing
comments, or consider issues, like logging.
It is just for fun.
If I can save 2 lines.
I will do so.
The first language I will demonstrate is Befunge.

English: 
Befunge is an ideocratic language.
Which has new concepts.
It is stack based.
No variables.
Only on a stack.
You can only push and pop from this stack.
Befunge are reflective.
Can read and modify their own sourcecode at
runtime.
Multidimensional.
Consist of single character instructions on
a grid.
There is an insertion pointer that moves in
any direction.
And executes instructions as it passes.
Because of this, it is a cross between Forth
and Lemmings.
It is quite annoying to write programs for.
It is completely useless.
But also quite fun.

Turkish: 
Yığın tabanlıdır. Değişken yok. Sadece
yığını. Sadece bundan itip patlatabilirsiniz
yığını.
Befunge yansıtıcıdır. Okuyabilir ve değiştirebilir
çalışma zamanında kendi kaynak kodları. Çok boyutlu.
Tek karakterli talimatlardan oluşur.
Bir ızgara. Bir ekleme işaretçisi var ki
herhangi bir yönde hareket eder. Ve talimatları yürütür
geçer gibi.
Bu nedenle, Forth arasında bir haç
ve Lemmings. Yazması oldukça can sıkıcı.
için programlar. Tamamen işe yaramaz. Fakat
ayrıca oldukça eğlenceli.

English: 
I'll show you what it looks like.
Here is an interpreter I have written for
Befunge.
It is using React.
Now, the code is Hello World.
It is on the stack in reversed order.
A loop that will print out all the characters.
Until it hits zero and terminates.
Slow it down a bit.
You can see down here, the program as it executes.
The characters.
And printing them.
Back and forth.

Turkish: 
Sana nasıl göründüğünü göstereyim.
İşte için yazdığım bir tercüman
Befunge.
React kullanıyor.
Şimdi, kod Merhaba Dünya.
Yığın üzerinde ters sırada bulunur. Bir döngü
tüm karakterleri yazdıracak. A kadar
sıfıra basar ve sonlanır.
Biraz yavaşla. Burada görebilirsiniz
program yürütülürken.
Karakterler. Ve onları basıyorum. Geri ve
ileri.

Turkish: 
Orada.
Başka bir örnek. Fizzbuzz'ı biliyorsun.
Sayıları 1 ile 100 arasında yazıyorsun.
Fizz veya buzz yazdırıyorsunuz. Sen fizzbuzz yaz
ya da sadece numara.
Talimat işaretçisine dikkat edin.
Şuna bak!
Çok komik değil mi?
Öyleyse, ne yaptığı, şu anki 1 ekler
numara. Değilse 3 ile bölünebilir olup olmadığını kontrol eder
bu tarafa gider.

English: 
There.
Another example.
You know Fizzbuzz.
You write the numbers from 1 to 100.
You print fizz or buzz.
You write fizzbuzz or just the number.
Pay attention to the instruction pointer.
Look at it go!
Isn't it hilarious?
So, what it does is, it adds 1 to the current
number.
Checks if it divisible by 3, if not it goes
this way.
It pushes the string it needs onto the stack.

English: 
It goes down here down to this area to print
it out.
Then it goes all the way back to the beginning.
And, does it over again.
Nice example.
This program demonstrates the reflective nature.
If you pay attention to the upper left corner
of the program.
There is a number.
When I run this.
It is a counter.
It reads in the number, adds 1 to it and prints
it back out.
Modifying the source code.
Because it is reflective, Quine quite simple.
Quine is a program that prints out its own
source code.

Turkish: 
İhtiyacı olan ipi istifin üzerine iter.
Buraya yazdırmak için bu alana iner
dışarı.
Sonra baştan sonuna kadar gider.
Ve tekrar yapar.
Güzel örnek
Bu program yansıtıcı doğasını göstermektedir.
Sol üst köşeye dikkat ederseniz
Programın
Bir numara var. Bunu çalıştırdığımda.
Bu bir sayaç. Bu sayı okur, ekler
1 ve yazdırır.
Kaynak kodunu değiştirmek.
Yansıtıcı olduğu için Quine oldukça basit.
Quine kendi yazdıran bir programdır
kaynak kodu. Kendinden okur ve yazdırır

English: 
It reads from itself and prints itself out.
You can write things like this one.
Which I'm proud of.
This program.
Reads itself, one character at a time and
prints itself back into the program on the
next line.
Moves down, and keeps going.
You'll see what I mean.
Prints itself out.
When it is done it jumps down.
Does it once more.
It keeps going.
Quite fun.
Right.
Let's look at the source code for this interpreter.

Turkish: 
kendisi dışarı.
Bunun gibi şeyler yazabilirsiniz. Hangi
Gururluyum. Bu program.
Her seferinde bir karakter, kendini okur ve
kendisini programdaki programa geri yazdırır
Sonraki satır. Aşağı taşır ve devam eder.
Ne demek istediğimi anlayacaksın.
Kendini yazdırır.
Tamamlandığında aşağı atlar. Bir kez yapar
Daha.
Devam ediyor.
Oldukça eğlenceli.
Sağ. Bunun için kaynak koduna bakalım
tercüman.

English: 
The main entrypoint is this file.
JS.
What it does is basically create a new object.
The main entry point for the interpreter.
Functions like stopping and starting and stepping
and things like that.
The parser is what reads the source code and
turns it into an actual program.
Like a data structure.
That the interpreter can work on.
And that's actually quite simple in this case.
All it needs to do is read in a text file
and dump it into a 2D array.
Splits the screen.
And divides each line into separate characters.
The interpreter for this thing is the main
meat of the program.

Turkish: 
Ana giriş noktası bu dosyadır.
JS.
Yaptığı şey temelde yeni bir nesne yaratmak.
Tercüman için ana giriş noktası.
Durdurma ve başlatma ve adımlama gibi işlevler
ve bunun gibi şeyler.
Ayrıştırıcı kaynak kodunu okur ve
onu gerçek bir programa dönüştürür.
Bir veri yapısı gibi. Tercüman
üzerinde çalışabilir.
Ve bu aslında oldukça basit.
Tek yapması gereken bir metin dosyasında okumak
ve 2B diziye boşaltın. Ekranı böler.
Ve her satırı ayrı karakterlere böler.
Bunun için tercüman asıl
programın et.

Turkish: 
Yani, tercüman çok büyük bir yöntemdir.
Her komut için 1 uygulamaya sahip olan
dilde
İşlevsel bir anahtar ifadesi gibidir.
İlkine göre farklı uygulamalar
argüman.
Eğer bir yer bulursanız, hemen bir iş yaparız.
Bir sürü şey var.
Hash. Bir sonraki hücreye geçiyoruz. Hücre ekle
programı sonlandırır.
alt çizgi ise doğu-batıdır.
Eğer sıfırsa, sağa git, yoksa sola git.
Boru karakteri eğer bir kuzey-güneydedir.

English: 
So, the interpreter is a huge multi method.
Which has 1 implementation for each command
in the language.
It is like a functional switch statement.
Different implementations, based on its first
argument.
If you get a space, we do a noap.
There is a lot of stuff.
Hash.
We skip to the next cell.
The add cell terminates the program.
the underscore is the east-west if.
If it is zero, go right, otherwise go left.
The pipe-character is a north-south if.

Turkish: 
Rakamlar kendilerini yığına itiyorlar.
Onaltılık sayılar dahil.
Temel aritmetik operatörler.
Yığından 2 değer çıkarır ve
geri sonuç.
O 
2 değer alır ve operatör arasında
ve sonucu geliştirir.
Buradaki her şey yazılı.
Bunu duydunuz mu bilmiyorum.
Yapmadıysan, kontrol etmeni tavsiye ederim.
dışarı.
O zamanlar yeniydi.
Bunu yapmaya başladım.
Ve hafızaya gelince bu kötü bir fikir
kullanımı. Eğlenceliydi.

English: 
The numbers, push themselves on the stack.
Including hexidecimal numbers.
Basic aritmethic operators.
Pops 2 values from the stack and pushes the
result back.
It 
takes 2 values and the operator in between
and evals the result.
Everything here is written.
I don't know if you heard of that.
If you haven't, I recommend you to check it
out.
It was brand new at the time.
I started doing this.
And it is a bad idea when it comes to memory
usage.
It was fun.

Turkish: 
Sunuma geri dönelim.
Eğlendin mi?
(alkış)
Bu çevrimiçi. İstersen deneyebilirsin.
Adresi daha sonra alacağım.
Size gösterebileceğim 1 dil daha var.
Bu Thue.
Norveçli bir matematikçi sonra adlandırılır
Thue.
Bu oldukça farklı bir dil.
Çok basit. Tamamen dize dayanmaktadır.
yeniden yazma.
Deterministik değil.
Bu da bazı şeyleri zorlaştırıyor.

English: 
Let's go back to the presentation.
Did you enjoy it?
(applause)
This is online.
You can try it if you want.
I'll get the address later.
I have 1 more language to show you.
It is Thue.
It is named after a Norwegian mathematician
Thue.
It is a quite different language.
Very simple.
It is based entirely around string rewriting.
It is non deterministic.
Which makes doing certain things hard.

Turkish: 
O çok basit.
Thue'da bir program birkaç kuraldan oluşur.
Sol taraf, sağ taraf ve kolon, kolon,
eşit.
Kullanıcıdan okuyacak. Yazdırır
Neyin peşinde olduğunu. Ve sonra geri
Boş dize
Kurallar bölümü boş bırakıldı
kural.
Bunun altında programın ilk halidir.
Ve program bir kural seçerek çalışır.
rasgele.
Geçerli duruma uygulama. Yerini
sol tarafın içeriği ile
sağ taraf. Ve tekrarlar.
Uygulanabilecek normal kurallara kadar.

English: 
It is very simple.
A program in Thue consists of several rules.
Lefthand side, righthandside and colon, colon,
equal.
It will read from the user.
It will print out what comes after.
And then return the empty string.
The rules section is finished with an empty
rule.
Below that is the initial state of the program.
And the program runs by picking a rule at
random.
Applying it to the current state.
Replaces the content of the lefthand side
with the righthandside.
And repeats.
Until there are normal rules that can apply.

Turkish: 
Öyleyse bunu uygulayalım.
İşte Thue tercüman için temel iskelet.
Birkaç temel fonksiyon. Dizeyi okumak için ayrıştırın.
Ve program veri yapısı şeyleri üretin.
Programı çalıştırmak için fonksiyonu çalıştırın.
Ve argümanlardan dosyayı okur.
Ve onu ayrıştırır ve çalıştırır.
Yani, ayrıştırmak oldukça basittir.
İlk önce veri yapısının ne olması gerektiği ile başlıyoruz
gibi görünmek.
O çok basit.
Bir dizi kural.
Bir dize, geçerli duruma sahiptir.

English: 
So, let's implement this.
Here is the basic skeleton for the Thue interpreter.
A few basic functions.
Parse to read the string.
And generate program data structure thing.
Run function to run the program.
And it reads the file from arguments.
And parses it and runs it.
So, to parse is quite simple.
First we start with what should the data structure
look like.
It is very simple.
An array of rules.
It has a string, current state.

Turkish: 
Varsa bize söyleyen bir bayrak var.
eşleşebilecek daha fazla kural var.
Yani, yaptığımız şey giriş dizesini almak.
Ve her şeyden önce yeni çizgileri çıkardık
ve yorumlar.
Ve bunu 2 bölüme ayırıyoruz.
Kurallar bölümü. İlk giriş kısmı.
Ve programa ilk girişi atarız.
belirtmek, bildirmek.
Sonra kuralları böldük.
Ve onları kurallar dizisine tek tek itin.
Ardından run fonksiyonunu elde ederiz. Bu çok
basit.
Program bitmediyse, başka bir tane çalıştırın
adım.
Adım işlevi, temelde, alır
girdi olarak program durumunu.
Bakalım.

English: 
There is a flag that tells us if there are
more rules that can match.
So, what we do is to take the input string.
And first of all we strip out the new lines
and comments.
And we divide it into 2 parts.
The rules part.
The initial input part.
And we assign the initial input to the program
state.
Then we split the rules.
And push them one by one on the array of rules.
Next we get the run function.
This is very simple.
While the program is not exhausted, run another
step.
The step function, basically, it takes the
program state as an input.
Let's see.
It takes all the rules.

English: 
It shuffles them into random order.
It sets the flag to true.
And it loops through each of the rules.
And as soon as it finds a rule, that actually
can apply to the current program string, it
runs the apply rule function.
Which does the substitution.
Then returns.
The apply rule function, also quite simple.
A few special cases to handle.
First it assigns righthandside to the righthandside
of rule.
If it is 3 colons, it prompts the user for
input.
If the righthandside starts with tilde.
It will writes.

Turkish: 
Tüm kuralları alır. Onları karıştırır
rastgele sıra
Bayrağı true olarak ayarlar.
Ve her bir kuralın içine girer.
Ve bir kural bulur bulmaz, aslında
Geçerli program dizesine uygulayabilir
kural uygula işlevini çalıştırır. Hangisi yapar
ikame.
Sonra döner.
Uygula kural işlevi, aynı zamanda oldukça basit.
İşlenecek birkaç özel durum.
İlk önce righthandside'i righthandside'e atar
Kural 3 sütun ise,
giriş için kullanıcı.
Sağ elek, tilde ile başlıyorsa. O
yazacak.
Ve her bir solhandside oluşumunun yerini alıyor.
giriş dizesinde righthandside.

Turkish: 
Yani sonuç.
Bir selam var.
İlk önce B'yi A ile değiştirir.
Sonra Hello World'ü yazdırır.
İşe yarayıp yaramadığını gör.
Evet! Öyle.
Thue'da başka bir örnek programım var.
Bu program 99 şişe bira basıyor
Duvardaki şarkıya. 99 ayetin hepsi.
Bunu ben yazmadım. Kaydırmakta zorlanıyorum
Kafam Thue'da her şeyi yapıyor.

English: 
And it replaces every occurrence of lefthandside
with righthandside in the input string.
So, the result.
I have a Hello.Thue.
First it replaces B with A.
Then it prints Hello World.
See if it works.
Yes!
It does.
I have another example program in Thue.
This program prints the 99 bottles of beer
on the wall song.
All 99 verses.
I didn't write this.

English: 
I have a hard time wrapping my head around
doing anything in Thue.
There we go.
All 99 bottles.
Nice, right?
Right.
So, the main point of my talk is just, have
some fun.
Write some ugly code, create something.
Having to write an interpreter and having
it run the program.
And print it.
It is a quite nice feeling.
I have some time left.
I'll show you something completely different.
A tool I'm using for the slides.

Turkish: 
Oraya gidiyoruz.
99 şişenin hepsi.
Güzel değil mi?
Sağ.
Yani, konuşmamın asıl amacı sadece
biraz eğlence. Çirkin bir kod yaz, bir şeyler oluştur.
Tercüman yazmak ve sahip olmak
programı çalıştırır. Ve yazdırın.
Bu oldukça hoş bir duygu.
Biraz zamanım var.
Sana tamamen farklı bir şey göstereceğim.

Turkish: 
Slaytlar için kullandığım bir araç. Ben yazdım
kendim.
Ve bununla ilginç bir hatam oldu.
başka gün.
Yani, hatırlarsın ... Geri dön.
Orada. Piat. Bu bir görüntü.
Ve bende alt baskılar, baskı yapan resim tüpleri kullanıyorum
terminale bir görüntü.
Ama bu bana ne diyordu?
Çalıştırmaya çalışırken. İzlemeye çalıştım
bu böcek.
Pmg.js kütüphanesinde bir hata vardı.
Size bu hatayı nasıl düzelttiğimi göstereyim.

English: 
I have written myself.
And I had an interesting bug with this the
other day.
So, you remember...
Get back to it.
There.
The Piat.
That's an image.
And I use substacks, picture tube that prints
an image to the terminal.
But, that was giving me, what you call it?
When I was trying to run it.
I tried to track this bug.
There was a bug in the Pmg.js library.
I'll just show you how I fixed this bug.

Turkish: 
İşte oradayız.
Burada verileri kopyaladığı yerdeyiz.
Mesele bu. Bu satırı ekledim. Eğer 1
= 1, hiçbir şey yapmayın.
Bu satır yorum yaparsam.
Ve slaytlarımı tekrar çalıştırmayı deniyorum.
Kes şunu.
Ve kurtar.
Söyleyecek: hata.

English: 
there we are.
Here we are inside where it copies the data.
This is the point.
I added this line.
If 1 = 1, do nothing.
If I comment this line out.
And I try running my slides again.
Quit this.
And save it.
It will say: fault.

Turkish: 
Bu çizgiyi hareket ettirirsem, bir adım yukarı ve kaydedin.
O söyleyecektir: Arıza.
Olduğu yere geri koyarsam.
Sadece iyi çalışıyor.
Herhangi birinizin neden bu olabileceği hakkında bir fikri varsa
olun!
Lütfen gel benimle konuş.
Bundan gerçekten etkilendim. En çılgın şey
Benim her şeyim var. Kelimenin tam anlamıyla değil.
Sağ.
Son slaytımı görmek için baştan sona geçeceğim.
Oraya gidiyoruz. Çok teşekkür ederim.
(alkış)
slaytlarım ve diğer şeyler için. Github'dalar.

English: 
If I move this line one step up, and save.
It will say: Fault.
If I put it back where it was.
It works just fine.
If any of you have any idea why this could
be!
Please come talk to me.
I'm really impressed with this.
Craziest thing I have ever thing.
Not literally.
Right.
I'll go through it to see my last slide.
There we go.
Thank you very much.
(applause)
for my slides and things.
They are on Github.

English: 
If you want to talk to me, I'll be in the
lounge.
That's it.

Turkish: 
Benimle konuşmak istersen, ben de olacağım
Salon. Bu kadar.
