Python
Python, nesne yönelimli, yorumlamalı, birimsel (modüler) ve etkileşimli yüksek seviyeli bir programlama dilidir.[1]
Paradigması | çok paradigmalı: nesne yönelimli, zorunlu, fonksiyonel, yansıtıcı |
---|---|
İlk çıkışı | 20 Şubat 1991 |
Tasarımcı | Guido van Rossum |
Geliştirici | Python Yazılım Vakfı |
Kararlı sürüm | 3.13.0 (7 Ekim 2024 ) ) |
Önemli uygulamaları | CPython, IronPython, Jython, Python for S60, PyPy, Unladen Swallow |
Lehçeleri | Stackless Python, RPython |
Etkilendikleri | ABC, ALGOL 68, C, Haskell, Icon, Java, Lisp, Modula-3, Perl |
Etkiledikleri | Boo, Cobra, D, Falcon, Groovy, Ruby, JavaScript, Comfy, Land (programlama dili) |
Platformu | Çapraz platform |
İşletim sistemi | macOS, Linux, Windows, OpenBSD, FreeBSD |
Lisans | Python Yazılım Vakfı Lisansı |
Olağan dosya uzantıları | .py, .pyw, .pyc, .pyo, .pyd, .pyz |
Web sitesi | www.python.org |
Girintilere dayalı basit söz dizimi, dilin öğrenilmesini ve akılda kalmasını kolaylaştırır. Bu da ona söz diziminin ayrıntıları ile vakit yitirmeden programlama yapılmaya başlanabilen bir dil olma özelliği kazandırır.
Modüler yapısı, sınıf dizgesini (sistem) ve her türlü veri alanı girişini destekler. Hemen hemen her türlü platformda çalışabilir (Unix, Linux, Mac, Windows, Amiga, Symbian). Python ile sistem programlama, kullanıcı arabirimi programlama, ağ programlama, web programlama, uygulama ve veri tabanı yazılımı programlama gibi birçok alanda yazılım geliştirebilirsiniz. Büyük yazılımların hızlı bir şekilde prototiplerinin üretilmesi ve denenmesi gerektiği durumlarda da C ya da C++ gibi dillere tercih edilir.
Python 1980'lerin sonunda ABC programlama diline alternatif olarak tasarlanmıştı. Python 2.0, ilk kez 2000 yılında yayınlandı. 2008'de yayınlanan Python 3.0, dilin önceki versiyonuyla tam uyumlu değildir ve Python 2.x'te yazılan kodların Python 3.x'te çalışması için değiştirilmesi gerekmektedir. Python 2 versiyonun resmi geliştirilme süreci, dilin son sürümü olan Python 2.7.x serisi versiyonların ardından 1 Ocak 2020 itibarıyla resmi olarak sona erdi.[2][3] Python 2.x geliştirilme desteğinin sona ermesinin ardından, Python dilinin 3.7.x ve sonraki sürümlerinin geliştirilmesi devam etmektedir.[4]
Geçmiş
değiştirGeliştirilmeye 1990 yılında Guido van Rossum tarafından Amsterdam'da başlanmıştır. Adını sanılanın aksine bir yılandan değil Guido van Rossum'un çok sevdiği, Monty Python adlı altı kişilik bir İngiliz komedi grubunun Monty Python’s Flying Circus adlı gösterisinden almıştır.[5] Günümüzde Python Yazılım Vakfı çevresinde toplanan gönüllülerin çabalarıyla sürdürülmektedir. Python 1.0 sürümüne Ocak 1994'te ulaşmıştır. 2.0 sürümü 16 Ekim 2000'de yayınlanmıştır.[6] 3 Aralık 2008 tarihinden itibaren 3.x serisi yayınlanmaya başlamıştır; ancak 3.x serisi 2.x serisiyle uyumlu değildir.[7]
Kullanım
değiştirDjango, Zope uygulama sunucuları, YouTube ve orijinal BitTorrent istemcisi Python kullanan önemli projelerden bazılarıdır. Ayrıca Google, NASA ve CERN gibi büyük kurumlar da Python kullanmaktadır. Pygame ile 2D oyun yapılabilir, Blockchain uygulamaları kodlanabilir, uzaktan kontrol veya görüntü işleme yapılabilir, veri analizi veya veri kontrolü yapılabilir, TensorFlow, PyTorch, Keras gibi kütüphanlerle derin makine öğrenmesi uygulamaları yapılabilir.
Aynı zamanda Python Siber Güvenlik için çok kullanışlı bir programlama dilidir. Kötü amaçlı yazılım analizi ve sızma testi dahil olmak üzere birçok siber güvenlik işlevini yerine getirebilir.[8]
Ayrıca OpenOffice.org, GIMP, Inkscape, Blender, Scribus ve Paint Shop Pro gibi bazı programlarda betik dili olarak kullanılır.
Pek çok Linux dağıtımında ve Apple macOS işletim sisteminde Python öntanımlı bir bileşen olarak gelir.
Söz dizimi
değiştirPython'un son derece kolay okunabilir olması düşünülmüştür. Bu yüzden örneğin küme parantezleri yerine girintileme işlemi kullanılır. Hatta bazı durumlarda girintileme işlemine dahi gerek kalmadan kodun ilgili bölümü tek satırda yazılabilir. Böylece Python, program kodunuzu en az çaba ile ve hızlıca yazmanıza imkân tanır. Sade sözdizimi ile diğer programlama dillerinden üstündür.
Girintileme
değiştirPython'da ifade bloklarını sınırlandırmak için süslü ayraçlar ya da anahtar kelimeler yerine beyaz boşluk girintileme kullanılır. Belli ifadelerden sonra girinti artar; girintinin azalması geçerli blokun sonlandığını gösterir.
İşleçler
değiştir*
işleci, çarpma işlemleri için
/
işleci, bölme işlemleri için
//
işleci, tam sayı bölme işlemleri için
+
işleci, toplama işlemleri için
-
işleci, çıkarma işlemleri için
%
işleci, mod alma işlemleri için
<
işleci, 'küçüktür' anlamına gelir
>
işleci, 'büyüktür' anlamına gelir
==
işleci, 'eşittir' anlamına gelir
<=
işleci, 'küçük eşittir' anlamına gelir
>=
işleci, 'büyük eşittir' anlamına gelir
!=
işleci, 'eşit değil' anlamına gelir
**
işleci, 'üs alma' anlamına gelir
True
işleci, 'doğru' anlamına gelir
False
işleci, 'yanlış' anlamına gelir
and
işleci, 've' anlamına gelir
or
işleci, 'veya' anlamına gelir
not
işleci, 'değil' anlamına gelir.
İfadeler ve akış kontrolü
değiştirPython ifadeleri şunları içerir:
if
ifadesi, bir kod blokunu belli bir koşula bağlı olarak,else
veelif
(else-if'in kısaltılması) ile birlikte çalıştırır.for
ifadesi, yinelenebilir bir nesne üzerinden yineleme yapar, bu sırada ilgili bloktaki her ögeyi bir yerel değişkene atar.while
ifadesi, koşulu doğru olduğu sürece o kod bloğunu çalıştırır.try
ifadesi, eklenmiş kod bloğundan dolayı oluşan hataları yakalar veexcept
maddeleriyle; ayrıcafinally
blokundaki temizleme kodunun blok nasıl sonlanırsa sonlansın çalıştırılmasını sağlar.class
ifadesi, bir kod blokunu çalıştırır ve onun yerel ad alanını bir sınıfa atar, bu sayede o sınıf Nesne Yönelimli Programlamada kullanılabilir.def
ifadesi ile fonksiyon tanımlanır.with
ifadesi, bir kod blokunu bir içerik yöneticisine hapseder (örneğin bir kod bloku çalışıtırılmadan önce bir kilit edinir ve sonrasında bu kilidi çözer)break
ifadesi, döngüyü durdurur.continue
ifadesi, döngüde geçerli değeri atlar ve sonrakinden devam ederbreak
ifadesinden farklı olarak döngüyü durdurmaz.del
ifadesi, nesneleri silmek için kullanılır.pass
ifadesi, bir NOP görevi görür ve geçici kod bloku yerine kullanılabilir.assert
ifadesi hata ayıklamada koşulları kontrol etmek için kullanılır.return
ifadesi, fonksiyondan değer döndürür ve fonksiyonu sonlandırır.yield
ifadesi, fonksiyondan değer döndürmek için kullanılır.return
ifadesinden farklı olarak çalıştıktan sonra fonksiyonu sonlandırmaz. Fonksiyonun sonuna kadar devam eder.print
ifadesi, bir ekrana yazdırma görevi görür. Bu ifade Python 3 sürümüyle birlikteprint()
fonksiyonu ile değiştirildi.import
ifadesi, modülleri içe aktarmak için kullanılır.from
ifadesi, modülün belli bir kısmını içe aktarmak için kullanılıras
ifadesi,import
vefrom
ifadelerini içe aktarırken modüllere takma ad vermek için kullanılır.
Her ifadenin kendi sözdizimi vardır, örneğin def
ifadesi diğer ifadelerin genelinin aksine blokunu anında çalıştırmaz.
Metotlar
değiştirNesneler üzerindeki metotlar nesnenin sınıfına eklenmiş fonksiyonlardır; örnek.metod(değişken)
sözdizimi, normal metot ve fonksiyonlar için Sınıf.metod(örnek, değişken)
ifadesi için bir sözdizimsel şekerdir. Python metotlarının örnek verisine ulaşmaları için açık self
parametresine sahip olmaları gerekir. Bu durum Java, C++, Ruby gibi bazı diğer nesne tabanlı programlama diliyle farklılık gösterir.
Standart kütüphane
değiştirPython'un çok büyük bir standart kütüphanesi 30 Mart 2020 tarihinde Wayback Machine sitesinde arşivlendi. vardır. Bu, dilin artı özelliklerinden biri olarak kabul edilir.
Örnekler
değiştirPython 3 ve üstü sürümler için uygundur.
Merhaba dünya
değiştir# -*- coding: utf-8 -*-
print("Merhaba Dünya")
Yorum satırları
değiştir#Tek satırlık bir python yorumu
"""Bu çok satırlı
bir python
yorumu"""
Girdi alma ve ekrana basma
değiştirveri = input('Bir veri giriniz:')
print(veri)
Palindromik sayı kontrolü
değiştirdef palindrom_kontrol(number):
# Sayıyı string veri tipine çevirir
str_number = str(number)
# Sayının tersi kontrol edilir
if str_number == str_number[::-1]:
return True
else:
return False
# Aşağıdaki değişken kullanıcıdan sayı girişi alır.
sayi = int(input("Bir sayı girin: "))
# Aşağıdaki koşul yapıları fonksiyon üzerinden kontrol yapar ve sonucu ekrana yazdırır.
if palindrom_kontrol(sayi):
print(f"{sayi} bir palindromik sayıdır.")
else:
print(f"{sayi} bir palindromik sayı değildir.")
Veri Tipleri
değiştirVeri tipi | Değiştirilebilir | Açıklama | Örnekleri |
---|---|---|---|
bool
|
hayır | Boole'sal değer | True
False
|
bytearray
|
evet | dızi | bytearray(b'Some ASCII')
bytearray(b"Some ASCII")
bytearray([119, 105, 107, 105])
|
bytes
|
hayır | Bytelardan oluşan dizi | b'ASCII'
b"ASCII"
bytes([119, 105, 107, 105])
|
complex
|
hayır | Karmaşık sayı | 3+2.7j
|
dict
|
evet | Komut çizelgesi | {'anahtar1': 1.0, 3: False}{}
|
float
|
hayır | Kayan nokta | 1.414
|
int
|
hayır | Tamsayı | 42
|
list
|
evet | Farklı veri tiplerinden oluşan bir liste, array olarak ifade edilebilir | [4.0, 'string', True]
[]
|
NoneType
|
hayır | Değerin yokluğunu ifade eden veri tipi, diğer dillerde null olarak bilinir. | None
|
range
|
hayır | İki sayı arasındaki aralık, for döngülerinde yaygın olarak kullanılır
|
range(1, 10)
range(10, -5, -2)
|
set
|
evet | Sırasız küme, değerler tekrar edemez | {4.0, 'string', True}
set()
|
str
|
hayır | Karakter dizisi | 'Vikipedi' "Vikipedi"
""" Birden Fazla
Satır"""
|
tuple
|
hayır | değiştirilemez liste | (4.0, 'string', True)
('element',)()
|
Sürüm Geçmişi
değiştirSürüm | Tarih[9] |
---|---|
0.9 | 20 Şubat 1991 |
1.0 | 26 Ocak 1994 |
1.1 | 11 Ekim 1994 |
1.2 | 13 Nisan 1995 |
1.3 | 13 Ekim 1995 |
1.4 | 25 Ekim 1996 |
1.5 | 31 Aralık 1997 |
1.6 | 5 Eylül 2000 |
2.0 | 16 Ekim 2000 |
2.1 | 15 Nisan 2001 |
2.2 | 21 Aralık 2001 |
2.3 | 29 Haziran 2003 |
2.4 | 30 Kasım 2004 |
2.5 | 19 Eylül 2006 |
2.6 | 1 Ekim 2008 |
2.7 | 3 Temmuz 2010 |
3.0 | 3 Aralık 2008 |
3.1 | 27 Haziran 2009 |
3.2 | 20 Şubat 2011 |
3.3 | 19 Eylül 2012 |
3.4 | 16 Mart 2014 |
3.5 | 13 Eylül 2015 |
3.6 | 23 Aralık 2016 |
3.7 | 27 Haziran 2018 |
3.8 | 14 Ekim 2019 |
3.9 | 5 Ekim 2020 |
3.10 | 4 Ocak 2021 |
3.11 | 24 Ekim 2022 |
3.12 | 2 Ekim 2023 |
İsim Kaynağı
değiştirPython'un ismi, dilin yaratıcısı olan Guido van Rossum'un dili geliştirirken keyif aldığı İngiliz komedi grubu Monty Python'dan gelmektedir. Monty Python'a ait birçok atıf Python kodunda ve kültüründe sıklıkla görülebilir.[10] Örneğin, Python literatüründe sıklıkla kullanılan metasentaktik değişkenler, diğer dillerde bulunan geleneksel “foo” ve “bar” yerine “spam” ve “eggs” olarak geçer.[11] Resmi Python belgeleri ayrıca Monty Python rutinlerine çeşitli referanslar içerir.[12] Py- ön eki, bir şeyin Python ile ilgili olduğunu göstermek için kullanılır. Python uygulamalarının veya kitaplıklarının adlarında bu ön ekin kullanımına için Pygame, Qt ve GTK'yi Python'a bağlayan PyQt ve PyGTK ve orijinal olarak Python dilinde yazılmış bir Python uygulaması olan PyPy bunlara örnek olarak verilebilir.
Popülerlik
değiştir2003 yılından itibaren PythonTIOBE Programlama Topluluğu Endeksi'nde en popüler 10 programlama dili arasında istikrarlı bir şekilde yer alırken, Ekim 2021 itibarıyla Java ve C programlama dillerini geçerek en popüler dil konumunda bulunmaktadır.[13] 2007, 2010, 2018 and 2020 yıllarında ise bir yıl içerisindeki en yüksek kademe artışı çatısı altında “Yılın Programlama Dili” seçilmiştir ve bunu 4 kez yapabilen tek dildir.[14][15]
Deneysel bir akademik çalışma, Python gibi komut dosyası yazma dillerinin, dize işlemeyi ve sözlükte aramayı içeren programlama sorunları için C ve Java gibi geleneksel dillerden daha üretken olduğunu raporlamış, bellek tüketiminin genellikle "Java'dan daha verimli ve C veya C++’dan çok daha verimsiz” olmadığını saptamıştır.[16]
Python kullanan büyük kuruluşlar arasında Wikipedia, Google,[17] Yahoo![18] CERN,[19] NASA,[20] Facebook,[21] Amazon, Instagram[22] ve Spotify[23] gibi bazı kuruluşlar yer almaktadır. Sosyal haber ağı sitesi Reddit, çoğunlukla Python ile yazılmıştır.[24]
Python'dan Etkilenen Programlama Dilleri
değiştirPython programlama dilinin tasarımı ve felsefesi, diğer birçok programlama diline de ilham vermiş veya bu dillere etki etmiştir:
- Boo, benzer bir girintileme, sözdizimi ve nesne modeli kullanır.[25]
- Cobra, benzer bir girintileme ve sözdizimi kullanır ve “Teşekkürler” kısmında bu dilin gelişimine ilham olan diller arasında Python ilk sırada yer alır.[26]
- JavaScript ile çapraz derlenen bir programlama dili olan CoffeeScript, Python'dan ilham almış bir sözdizimine sahiptir.
- ECMAScript/JavaScript, Python'dan yineleyiciler ve oluşturucular ödünç almıştır.[27]
- Python'a çok benzeyen bir betik dil olan GDScript, Godot oyun motoruna yerleştirilmiştir.[28]
- Go, "Python gibi dinamik bir dilde çalışma hızı"[29] ve dizileri dilimlemek için aynı sözdizimini paylaşması için tasarlanmıştır.
- Groovy, Python tasarım felsefesini Java'ya getirme motivasyonuyla geliştirilmiştir.[30]
- Julia, “genel programlama için Python kadar kullanılabilir” olma hedefiyle tasarlanmıştır.[31]
- Nim, girintileme ve benzer sözdizimi kullanır.[32]
- Ruby'nin yaratıcısı Yukihiro Matsumoto Ruby'in gelişimine yönelik şunları ifade etmiştir: "Perl'den daha güçlü ve Python'dan daha nesne yönelimli bir betik dil hedefliyordum. Bu yüzden kendi dilimi tasarlamaya karar verdim."[33]
- Apple tarafından geliştirilen bir programlama dili olan Swift, Python'dan ilham alan bir sözdizimine sahiptir.[34]
Python'un geliştirme uygulamaları diğer diller tarafından da taklit edilmiştir. Örneğin, Python'da “PEP” olarak geçen, bu dile yönelik bir değişikliğin gerekçesini ve bununla ilgili konuları açıklayan belge talep etme uygulaması, Tcl,[35] Erlang,[36] ve Swift'de de kullanılmaktadır.[37]
Ayrıca bakınız
değiştirKaynakça
değiştir- ^ "Arşivlenmiş kopya". 24 Ekim 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 13 Aralık 2014.
- ^ "Sunsetting Python 2". Python.org (İngilizce). 12 Ocak 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 22 Eylül 2019.
- ^ "PEP 373 -- Python 2.7 Release Schedule". Python.org (İngilizce). 13 Ocak 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 22 Eylül 2019.
- ^ "Python Developer's Guide - Python Developer's Guide". devguide.python.org. 9 Kasım 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 15 Kasım 2020.
- ^ "General Python FAQ". 5 Nisan 2023 tarihinde kaynağından arşivlendi. Erişim tarihi: 23 Nisan 2023.
- ^ "Python.org". 30 Ekim 2012 tarihinde kaynağından arşivlendi.
- ^ "Python.org". 2 Kasım 2012 tarihinde kaynağından arşivlendi.
- ^ "Siber Güvenlikte Python Kullanımı". Makale. Beyaznet. 16 Ağustos 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 18 Eylül 2023.
- ^ "Arşivlenmiş kopya". 13 Ekim 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Haziran 2015.
- ^ "Whetting Your Appetite". The Python Tutorial. Python Software Foundation. Archived from the original on 26 October 2012. Retrieved 20 February 2012.
- ^ "In Python, should I use else after a return in an if block?". Stack Overflow. Stack Exchange. 17 February 2011. Archived from the original on 20 June 2019. Retrieved 6 May 2011.
- ^ Lutz, Mark (2009). Learning Python: Powerful Object-Oriented Programming. O'Reilly Media, Inc. p. 17. ISBN 9781449379322. Archived from the original on 17 July 2017. Retrieved 9 May 2017. Fehily, Chris (2002). Python. Peachpit Press. p. xv.
- ^ "TIOBE Index". TIOBE. 29 Temmuz 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Ocak 2023.
The TIOBE Programming Community index is an indicator of the popularity of programming languages
Updated as required. - ^ "TIOBE Index for January 2021". 21 Mart 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Aralık 2021.
- ^ "TIOBE Index for December 2021". 25 Şubat 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Aralık 2021.
- ^ "An empirical comparison of C, C++, Java, Perl, Python, Rexx, and Tcl" (PDF). 3 Ocak 2020 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 19 Aralık 2021.
- ^ "Qutotes about Python". 3 Haziran 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Aralık 2021.
- ^ "Organizations Using Python". 5 Haziran 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Aralık 2021.
- ^ "Python : the holy grail of programming". 10 Mayıs 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Aralık 2021.
- ^ "Python Success Stories". 5 Haziran 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Aralık 2021.
- ^ "Tornado: Facebook's Real-Time Web Framework for Python". 19 Şubat 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Aralık 2021.
- ^ "What Powers Instagram: Hundreds of Instances, Dozens of Technologies". 15 Haziran 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Aralık 2021.
- ^ "How we use Python at Spotify". 10 Haziran 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Aralık 2021.
- ^ "Reddit Archieve Code". 1 Haziran 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Aralık 2021.
- ^ "Gotchas for Python Users". 11 Aralık 2008 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Aralık 2021.
- ^ "Acknowledgements". 8 Şubat 2008 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Aralık 2021.
- ^ "Iterators and Generators". 20 Ekim 2007 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Aralık 2021.
- ^ "Frequently Asked Questions". 28 Nisan 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Aralık 2021.
- ^ "Google's Go: A New Programming Language That's Python Meets C++". 18 Ocak 2010 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Aralık 2021.
- ^ "Groovy - the birth of a new dynamic language for the Java platform". 5 Nisan 2007 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Aralık 2021.
- ^ "Why We Created Julia". 2 Mayıs 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Aralık 2021.
- ^ "Nim language draws from best of Python, Rust, Go, and Lisp". 13 Ekim 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Aralık 2021.
- ^ "An Interview with the Creator of Ruby". 28 Nisan 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Aralık 2021.
- ^ "Chris Lattner's Home Page". 22 Aralık 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Aralık 2021.
- ^ "TIP 3: TIP Format". 13 Temmuz 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Aralık 2021.
- ^ "EEP 1: EEP Purpose and Guidelines". 21 Ocak 2008 tarihinde kaynağından arşivlendi.
- ^ "Swift Programming Language Evolution repository on GitHub". 27 Nisan 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Aralık 2021.
Dış bağlantılar
değiştir- Python Programlama Dili - Python 3 için Türkçe Kaynak 27 Ocak 2020 tarihinde Wayback Machine sitesinde arşivlendi.
- Python programlama dili resmi sitesi17 Nisan 2018 tarihinde Wayback Machine sitesinde arşivlendi. (İngilizce)
- www.learningpython.com 21 Temmuz 2014 tarihinde Wayback Machine sitesinde arşivlendi. (İngilizce)