Yılan hikayesi: İlk bölüm

Yılan hikayesi: İlk bölümFatih Erikli (Mican)BlockedUnblockFollowFollowingJan 22Bu da benim python kitabım olsun.

Python Hollandalı bilgisayar bilimcisi Guido van Rossum tarafından 1991 yılında yazılmış yorumlanan bir programlama dilidir.

Python’ı diğer programlama dillerinden ayıran en önemli özelliği kod okunabilirliğini arttırmak amacıyla dilin gramer yapısında boşlukların da (whitespace) hesaba katılmasıdır.

Bu programın akışını boşluk karakterleriyle de yönetebileceğiniz anlamına gelmektedir.

Bu sayede yazılan göz ile taramaya daha müsait olur ve eğer önerdiği tasarım prensiblerini takip ederseniz projenizi ölçeklendirmeniz diğer programlama dillerine nazaran daha kolay olur.

Bu makale bozuk türkçe içerir, çünkü banane.

Benim Python’ı tercih etme sebebim dilin teknik olarak getirdiklerinden ziyade muazzam bir kütüphane yelpazesinin olmasıdır.

Bir gazeteciden tutun astronoma (astrolog değil), istatistikçiden web geliştiricisine kadar bütün çalışma alanlarına hitap eden kütüphaneler bulunmaktadır.

Ben hakkındaBen 26 yaşında bir bilgisayar programcısıyım.

2012'den bu yana çeşitli topluluklarda Python ve web çatısı Django hakkında sunumlar yapmakta ve eğitimler vermekteyim.

Linux Yaz Kampı, şimdiki adıyla Özgür Yazılım Kampında iki haftalık sınıflarda birçok öğrenci ve kamu çalışanına gönüllü olarak temel web programcılığı kursu verdim.

Onur Mat ve ben.

Sağdaki çeküldeki gibi birisiyimBu dil ile ilgilenmeye Şişli Endüstri Meslek Lisesindeyken başladım.

Kütüphanede bir kitap bulmuştum ve araştırmaya başlamıştım.

Hatta o zamanlar kullandığım Nokia Symbian telefona bile yüklemiştim, ders aralarında o joystick’li telefon üzerinden dili kavramaya çalışıyordum.

Yazı serisinin yılan hikayesi olması sebebi, yılan oyunu benim yazdığım ve arkadaşlarıma dağıttığım ilk oyundu.

Bu dil ile birçok şey geliştirdim.

Yeri geldi varlığımın simülasyonunu yaptım (öyle buyurmuştu zerdüşt) ve kendimi tanıyamaz hale geldim, yeri geldi uyku problemlerimi çözmek için hatırlatıcılar programladım.

Bunlar kişisel olanlar.

Dictdiffer adında bir modül yazdım.

Avrupa Nükleer Araştırma Merkezinde dijital kütüphanelerde dökümanların karşılaştırılması için yapılmış bir yazılımın çatısını oluşturuyor.

CERN — Bir boruBir diğer geniş çaplı kullanılan modülüm ise NginxParser — düşük seviyeli kapalı bir dil ayrıştırıcısı.

Nginx sunucusunun konfigürasyon dosyalarını parse etmek için yazdığım bir gramer.

EFF’nin certbot isimli SSL/TSL sertifikaları imzalamak için geliştirdiği araçta kullanılıyor.

EFF — Electronic Frontier FoundationTeknik bir şey gibi gözükse de, yazdığım şey aslında bir dilbilimsel araç.

Bana uygun bir ordu ve sıradan insanın payına düşenden daha fazla para verin, ben de otuz yıl içinde, nüfusun büyük bir çoğunluğunu, iki artı ikinin beş olduğuna ve suyun ısıtıldığında donduğuna inandırayım.

Noam ChomskyEn son çalıştığım dilbilimsel araç ise Türkçenin morfolojik yapısını araştırmak adına yaptığım Kefir projesi.

Chomsky’nin askeriyim.

Dil bir mucizedir.

bir django projesi olan arguman.

org projesini arkadaşlarımla birlikte kurdum, şu an beş farklı dilde yayın yapmaktaPython’a nasıl erişilirGNU/Linux ve OSX bilgisayarlarda Python yüklü olarak gelmektedir.

Windows makinelerinizde ise ayrıdan yüklemeniz gerekiyor.

Benim için Windows ve diğerlerinin arasındaki en büyük fark budur.

Bir işletim sistemini oluşturan bütün araçlar zaten Python ile yapılabilmektedir — yapılmıştır da.

Microsoft’u microsoft yapan şey, işletim sistemlerinin içerisinde Python yüklü olarak gelmemesidir.

Bu linkten windows için gerekli olan kurulum yazılımını indirebilirsiniz.

Eğer internet kafede iseniz ve tarayıcınız üzerinde python alıştırmaları yapmak istiyorsanız da Fil’i kullanabilirsiniz.

https://fatiherikli.

github.

io/fil/Fil benim geliştirdiğim, tarayıcınız üzerinden Python, Ruby, Javascript, Brainfuck alıştırmaları yapabildiğiniz bir araçtır.

Yazı üzerinde örnekleri Fil üzerinden vereceğim.

Veri tipleri ve değişkenlerBir dil öğrenirken her zaman yukarıdan aşağı bakmak, yani tümdengelimler yapmak en faydalısıdır.

Konuşurken kullandığımız tarihler ya da sayılar için değişkenler diyebiliriz.

Dilin parçası değildirler ancak verilmek istenilen mesajı tamamen ters yönde bile değiştirebilirler.

Ben bugün 3 ekmek yedim.

Üç ekmek yenmiş.

Ben bugün 0 ekmek yedim.

Hiç ekmek yenmemiş.

Ben bugün -1 ekmek yedim.

Bir ekmek yememiş, üretmiş — Fırıncı galiba.

Yazacağımız programın bir mesaj olduğunu unutmamamız gerek.

Yani bir alıcısı ve göndericisi var.

Gönderen siz oluyorsunuz, alıcı ise programın çalışacağı bilgisayar.

Bilgisayarımız Python dilinden anlamadığı için bir yorumlayıcıya ihtiyaç duyarız.

Python buradaki yorumlayıcılık görevini üstlenmektedir —ki kategorisel olarak tam da bu sebeple yorumlanan programlama dilleri altındadır.

Temel veri tipleriBurada üç farklı değişken tipimiz var.

name String.

Bunun çevirisi yok, sicim ya da katar deniyor.

Sicim bana daha yakın bir çeviri gibi geliyor parçacık teorilerinden dolayı.

Bunun sebebi, aslında yorumlanırken numerik değerlere çevriliyor, çünkü isimdeki bütün karakterlerin numerik bir karşılığı var.

Mesela küçük f karakteri 102.

Kısacası, alfanumerik değerler saklamak için String tipinde bir değişken tanımlarız.

Değişken isimlerinden ayırmak için tek tırnak ya da çift tırnak ile yazılır.

age Integer.

Numerik değerler ile işlem yapmak için integer tipinde değişkenler tanımlamalıyız ki bu değerler üzerinde matematiksel işlemler yapabilelim.

String olarak tanımlarsanız bu işlemlerden feragat etmiş olursunuz.

Soru: Telefon numarası hangi tipte tutulmalıdır?is_male Boolean.

Mantıksal, yani sadece iki adet yanıtı bulunan verileri boolean tipi ile tanımlarız.

Erkek mi değil mi, çocuğu var mı yok mu, yaşıyor mu gibi sorular Evet, ya da Hayır yanıtı olan sorulardır.

Hayır ama ile başlayan bir yanıtı olamaz.

Yapay zeka ile uğraşıyorsanız bulanık mantık adı altında bulanık yanıtlar verebilirsiniz, ancak tuttuğunuz veri Boolean olmaz, ondalıklı sayı olur, 0.

60 ihtimalle çocuğu var demek gibi.

Mantık programlama dillerinin en önemli parçasıdır.

Bu kısmı atlarsanız hiçbir şey yapamazsınız.

Dönüp dolaşıp bu konuya tekrar gelin, gidebileceğiniz yere kadar gidin, Aristoteles’in mantığına kadar.

Bir örnek yapalım.

You think, therefore you existÖrnekde farkedeceğiniz üzere mantıksal operatörleri Boolean tipleri üzerinde uygulayabiliyorsunuz.

And mantıksal kapısında her iki koşulunda karşılanması beklenir.

Ben karabüklüyüm ve 26 yaşındayım.

Or mantıksal kapısında iki koşuldan birisi karşılanması beklenir.

Ben karabüklüyüm ya da 26 yaşındayım.

Java tarzı dillerde and işareti iki ampersand işareti (&&) ile belirtilir.

Python bana bu açıdan daha insan diline yakın bir dil gibi geliyor.

Ampersand işareti “ve” değil “ile” anlamına gelir.

Veri yapısı: ListelerDiğer progralama dillerindeki Array’lere denk gelse de Python üzerinde listeler biraz daha farklı implement edilmiştir.

Implementation uygulama diye çevrilmektedir ancak çoğu terim yerelleştirilmesinde olduğu gibi bir anlam kaybı da ortaya çıkmaktadır.

Genel olarak tanımlanmış bir plan ya da konseptin daha özel bir alanda uygulanmasıa implementation denmektedir.

Python’da listeler içinde gezebileceğiniz koleksiyonlardır.

Bu koleksiyonlarda istediğiniz türde veri tipleri saklayabilirsiniz.

Hatta koleksiyonların içerisinde koleksiyonlar saklamanız da mümkündür.

Fil üzerinde görselleştirme ile daha iyi anlaşılacaktır.

Koleksiyon içerisindeki bir öğeye köşeli parantezlerle ulaşılmaktadır.

Yukarıdaki örnekte iki adet koleksiyonumuz var.

İsimler ve doğal dilleri Fil bir koleksiyon olduğu için turkuaz rengi ile kenarlıklı bir şekilde gösterdi.

Sonuncusunda ise doğal diller koleksiyonunun birinci öğesini yazdıkdık ve bize bir string döndü.

Burada koleksiyon içerisinden bir eleman seçmiş olduk.

Önemli bir nokta, programlama dillerinde saymak sıfırdan başlar.

Bundan dolayı birinci elemanımız Polish.

İlk, yani sıfırıncı elemanımız ise Turkish.

Kaldığım yerden devam etmek için bu permalink’e tıklayabilirsiniz.

Koleksiyonlar içerisinde başka koleksiyonlar saklayabiliyoruz demiştik.

Bir koleksiyonun sadece bir parçasına erişmek için slicing adı verilen seçim metodu ile ilerleyebiliyoruz.

Bunun için listeden seçim yaparken iki nokta (:) kullanırız.

Başlangıç indeks:bitiş indeks şeklinde bir sözdizimi vardır.

Haftanın günlerini ve haftasonlarını bu şekilde parçaladıktan sonra yeni bir koleksiyon oluşturduk.

Bu koleksiyon Fil’in görselleştirilmesinde gözüktüğü gibi iki boyutlu bir koleksiyon elde ediyoruz.

Döngüler ve karar yapılarıBir sonraki veri yapısına geçmeden önce temel birkaç şeyi daha öğrenmemiz gerekiyor.

Bunlar programın akışını kontrol etmek için gerekli olan döngüler ve koşullardır.

Eğer — IfProgram akışını kontrol edebilmek için en geleneksel olan deyim “eğer”dir.

Bunu ofis yazılımlarından tutun email filtrelerine kadar çoğu yerde farkında olmasanız bile kullanmışsınızdır.

Biz örneğimizde kullanıcının bildiği dillere göre farklı mesajlar vermek için bir “if” karar yapısı kullandık.

Farkettiyseniz eğer koşulumuzu belirtip iki nokta ile satırı sonlandırdıktan sonra, bir sonraki satırda bir tab ileride devam ediyoruz.

Bu eğer koşul geçerli ise bu prosedürleri uygula anlamına gelmektedir.

Koşul uymazsa eğer elif ile bir sonraki koşulumuzu tanımlıyoruz.

İstediğimiz kadar elif koşulu tanımlayabiliriz.

Hiçbir koşula uymadığı durumlarda ise else ile karar yapımızı sonlandırıyoruz.

Bunu en iyi alıştırma yaparak öğrenebilirsiniz.

Kaldığım yerden devam etmek için buraya tıklayabilirsiniz.

For döngüleriBu örnekte ise diğer karar yapısı olan for döngüsü kullandık.

İlk örnekte koleksiyondaki tüm dilleri teker teker yazdırdık.

Sonrakinde ise bunlari enumerate fonksiyonu ile numaralandırdık ve indeksi ile yazdırdık.

Sonuncu örnekte ise range fonksiyonu ile yeni bir sayı koleksiyonu oluşturduk.

Aynı liste dilimler gibi başlangıc ve bitiş indeksini vererek istediğimiz sayı dizisi oluşturabiliyoruz.

Döngünün içeriğinde ise o sayının kendisini, karesini, ve küpünü satır satır yazdırmasını istedik.

Kaldığım yer.

Veri yapısı: SözlüklerKoleksiyon ya da liste veri yapısından sonra Python üzerinde en çok kullanacağımız veri yapısı sözlükler olabilir.

Eğer hatırlarsanız oluşturduğumuz listelerde, içerideki öğelere erişmek için bir indeks vermemiz gerekiyordu.

Sözlüklerde bu durum biraz farklı.

Sözlüklerin amacı koleksiyondaki öğelere numerik bir indeks değil de daha önceden belirlediğiniz bir anahtar ile erişmenizi sağlamaktır.

Bu yüzden bazı programlama dillerinde bu veri yapısı Hashmap şeklinde geçmektedir.

Bu veri yapısını gerçekten de adı gibi sözlük olarak hayal edebilirsiniz.

DictionaryGördüğünüz üzere Fil sözlük olan veri yapısını farklı bir şekilde görselleştirdi.

Bu veri yapısında dikkat etmemiz gereken birkaç husus var.

Blue neden mavi değil?İlk husus, blue için değeri “maviyesil” olacak sekilde tekrar bir atama yaptık.

Bu sağdaki görselleştirmede gözükmüyor.

Bunun sebebi aynı anahtar ile tek bir değer saklayabildiğimizdendir.

Diğer husus ise, tanımları yaparken blue ikinci sırada iken görselleştirmede dördüncü sırada görüyoruz.

Hatta tanımlardan sonra atama yaparken de blue’yu en son olarak tanımladığımız halde sonuncu olarak gözükmüyor.

Bu veri yapısının implementation’ından kaynaklanmaktadır.

Sözlükler listelerden farklı olarak sırasız veri yapılarıdır.

Eğer verinizde öğelerin sırası önemli ise sözlük kullanmamalısınız.

FonksiyonlarBuraya kadarki örneklerde sadece yukarıdan aşağı satır satır prosedürler tanımlayarak programlar yazdık.

Gerçek hayatta projeler geliştirirken ne yazık ki bu şekilde ilerlemek çok mümkün olmuyor.

Biraz daha derli toplu bir codebase’imizin olması açısından bazı yapılara ihtiyacımız var.

Fonksiyonlar ve sınıflar gibi.

Fonksiyon tanımlamakFonksiyon tanımı def ile yapılır.

Fonksiyonlarımız aynı matematikteki gibi parametreler alırlar.

Ayrıca bu parametreler için varsayılan değerler de belirtebilmekteyiz.

İlk fonksiyonumuz title bir string’i büyük harflere çevirmektedir.

İkincisi ise alınan değerin başına “merhaba” ekliyor ve varsayılan parametre değeri var.

Muhtemelen nasıl çalıştığını zaten fil görselleştirmesinde farkettiniz.

Hello fonksiyonunu çağırırken parametre vermediğimiz için varsayılan değer olan isimsiz’i yazdırdı.

Fonksiyonel ProgramlamaProgramımız büyüdüğünde oluşacak karmaşıklığı indirgemek için sınıflar ya da fonksiyonlar kullanmaktayız demiştik.

Sınıflara ben bu blog yazısında değinmeyeceğim, çünkü eğer ona girersek nesne tabanlı programlamaya da girmek zorunda kalırız.

Ekosistem biraz öngörülenden farklı ilerlemekte, insanlar nesne yönelimli programlama yerine fonksiyonel programlamaya yönlenmektedir.

Fonksiyonel programlama tüm programı ufak kendi başına çalışan fonksiyonlardan oluşturmak eğilimi üzerine şekillenmiş bir paradigmadır.

Burada nesne yönelimi ve fonksiyonel programlama karşılaştırması yapamayacağım ancak ben fonksiyonel programlama tarafındayım.

Bunun sebebi ise yazacağım programı istediğim gibi parçalayıp o parçalarla yeni programlar oluştuyor olmak istemem.

Kefir bu şekilde geliştirilmiştir.

Eğer programlarınızı ne yaptığı belli ve dışarıdan hiçbir değişkene ulaşmayan ufak fonksiyon bloklarından oluşturursanız onu yönetmeniz daha kolay olur.

Peki nasıl bu fonksiyonları programıma entegre edeceğim?PrototipBurada bahsettiğim şeyi görselleştirmeye çalıştım.

Codebase’imiz (farklı dosyalarda olacaktır tabii ki) birbirinden habersiz fonksiyonlardan oluşuyor.

Programımız ise veri tanımlamaları ve o verinin nasıl şekilleneceği ile ilgileniyor.

Map ve filter adında iki adet fonksiyon kullandık.

Buraya tıklayıp fonksiyonlar üzerinde oynarak sonucun nasıl değiştiğini farketmeye çalışın.

Buradaki map bir dizi üzerindeki tüm elemanların üzerine verdiğiniz fonksiyonu uygular ve size yeni bir liste döndürür.

Filter ise verdiğiniz fonksiyona göre liste üzerinde eleme yapar.

Biz sadece F ile başlayan isimleri getiren bir fonksiyon verdik mesela.

Reduce — FoldingFarkettiyseniz eğer Map ve filter ile bir koleksiyon üzerinden başka bir koleksiyon üretebiliyoruz.

Bir koleksiyon üzerinden tek bir değer üretmek istemeniz, o koleksiyonu katlaya katlaya sıkıştırmanız anlamına gelmektedir.

Buna fonksiyonel programlamada folding denir.

Python üzerindeki karşılığı ise Reduce.

Örneğimizde bir eticaret sitesinde kullanıcının sepetindeki öğelerin toplam fiyatını almak için bir reducer fonksiyon yazdık.

Temel fonksiyonel programlama konseptleri bunlardır.

Bu üç araç ile istediğiniz uygulamayı geliştirmeniz mümkündür.

Bunları eğer iyi anlarsanız frontend tarafında da React benzeri araçlar size çerez gibi gelir.

Bu noktadan sonra Fil kullanamayız.

Kendi bilgisayarınızda çalışan bir Python yorumlayıcısı ve metin editörü gerekmektedir.

Ben metin editörü olarak SublimeText kullanıyorum.

O da python ile geliştirilmiştir ve Python ile modifiye edebiliyoruz.

ModüllerUygulamamız büyürken onu ölçekleyebilmek için bir takım prensiplerden bahsettik.

Teorik olarak nasıl ilerleyeceğimizi ögrendik, peki pratik anlamda bunu nasıl tamamlayacağız?Ölçeklenebilirlik, scalability: Bir web projesi bağlamında 1 (bir) kullanıcı için de 1000 (bin) kullanıcı için de aynı kararlılıkta hizmet verebilmektedir.

Aynı şekilde bu kural geliştirme ortamı için de geçerli.

Bir developer projeye katıldığında projeyi anlayabilmesi için geçen süre, diğer bir insanın projeden ayrılması için geçen süreden fazla olmamalıdır ki işler yürüyebilsin.

Bütün projeyi tek bir dosya içerisinde tamamlamak mümkün olsa da eğer insanlar tarafından anlaşılabilir bir proje geliştirmek istiyorsanız bunu düzgün organize etmeniz gerekir.

Python’da varsayılan olarak gelen bütün kod parçaları modüller şeklinde organize edilmiştir.

Biz de projelerimizi bu şekilde organize etmekteyiz.

Öncelikle bilgisayarımızda bir python yorumlayıcısı açalım ve denemelerimize başlayalım.

Terminalinizde “python” yazarak yorumlayıcınıza erişebilirsiniz.

Python versiyonumu 2.

7 olarak görüyorusunuz.

Bu yazdıklarım bağlamında hangi versiyonu kullanacağınız farketmemektedir.

Farklar var tabii ki, ancak bunu python temellerini öğrendikten sonra araştırmanız gerekir.

random isimli modülYorumlayıcımızda import random diyerek çalışma alanımıza bir modül dahil ettik.

Bu eyleme import etmek diyeceğim, çünkü çevirmek çok mantıksız geliyor.

Random mödülünü import ettikten sonra modülün içerisindeki fonksiyonları kullanabiliyor hale geliyoruz.

Bu modül olasılıksal süreçler ile alakalı yardımcı fonksiyonlar barındıran bir builtin, yani python ile birlikte gelen varsayılan modüllerdendir.

Bu modülün altındaki choice metodu ise verdiğiniz koleksiyon üzerinden bir adet rastgele öğe getirmektedir.

Bunu kullanarak bir taş kağıt makas, ya da zar atma uygulaması yapabilirsiniz.

Şimdi kendimiz bir modül yazalım.

Ben terminal içerisindeyken emacs editörü kullanıyorum.

Burada bir zar atma oyunu yaptık.

Çalıştırdığımızda ekrana bir, iki, üç, dört, beş, ya da altı yazdırmasını bekliyoruz.

Modülümüz “.

py” uzantısı ile bitmeli.

Python yorumlayıcını çalıştırırken eğer bir dosya adı verirseniz, yorumlayıcı çalıştıktan sonra o modülü de çalıştırır.

Biraz daha ilerleyelim.

Bu modülü başka bir modül içerisinden çağıralım.

cat komutu bir dosyanın içeriğini text olarak yansıtır.

Gördüğünüz üzere oyun.

py dosyasının içerisinde zar modülünü import ediyoruz.

Modül içerisindeyken “.

py” uzantısı eklemedik dikkat ettiyseniz.

Burada dikkat etmemiz gereken çok önemli bir husus var.

Biz zar modülünü importettiğimiz an oyun çalışmaya başlıyor.

Bu kaçınmamız gereken bir şeydir çünkü biz onu belirli koşullarda çalıştırmak isteyeceğiz.

Örneğin oyun seçimi yaptıktan sonra.

Bunun için zar oyununu yukarıdan aşağı yazmak yerine onu bir fonksiyon içerisinde toparlamamız gerekir.

Yukarıdaki örnek üzerinde biraz alıştırma yaparak modülleri daha iyi kavramaya çalışın.

Örneğin zar.

game() çağrısını bir if içerisine alın ve oyunun çalışıp çalışmayacağını gözlemleyin.

Bir modül kurmakBir modülün ne anlama geldiğini anladıysanız eğer artık temel python bilginiz var demektir.

Çünkü bu dilde her şey bunun üzerine kurulu.

Bir web projesinden tutun da masaüstü uygulamasına kadar, her şey birbirinden bağımsız modüller şeklinde geliştirilir.

Örnek, MongoDB veritabanına bağlanmak için yapmanız gereken o veritabanının Python modülünü kendi ortamınıza kurmanızdır.

Gerisi öğrendiğiniz temel veri yapılarıyla o veritabanı ile etkileşim kurmanız.

İş artık ne Python bilmek ne de MongoDB bilmek.

Yapacağınız iş ve sizi farklı kılan şey, bir problemi ne kadar iyi soyutlayabiliyorsunuz ve etrafınızdaki olayları nasıl modelleyebiliyorsunuz.

Yani, Mantık.

Sanal OrtamBir modül nasıl kurulur konusuna değinmeden önce çok önemli bir husus var atlamamanız gereken.

Burayı atlarsanız eğer başınıza taşlar yağabilir.

Sanal ortam, yani virtual environment kavramının ne olduğunu açıklamaya çalışacağım.

Terminal üzerinde bir yorumlayıcı başlattığınızda işletim sisteminizin kullandığı çalıştırılabilir olan yorumlayıcı ile etkileşim kurarsınız.

Sistemin kullandığı paketleri kullanırsınız.

Bakalım.

sys.

path o derleyici ile alakalı dizinleri getirir.

Unutmayalım, bu python yorumlayıcısı işletim sisteminde diğer kullanılan uygulamalar tarafından da kullanılmaktadır.

Bu dosyalar modifiye ettiğinizde işletim sistemini de modifiye etmiş olursunuz.

Yani Python sadece basit uygulamalar geliştirdiğiniz bir programlama değil, aynı zamanda işletim sisteminizin kararlı çalışmasını sağlayan işletim sistemi ile bütünleşik bir yapıdır.

Eğer sistem kararlılığının bozulmasının kabul edilemeyeceği kurumlarda çalışıyorsanız (ki bence çalışabileceğiniz bütün kurumlar) kendinize izole bir geliştirme ve çalıştırma ortamı kurmanız gerekir.

Bir senaryo hayal edelim.

X kurumunun email sunucuları Python ile geliştirilmiş bir yazılım kullanıyor.

Siz de bu kurumda çalışıyorsunuz.

Email sunucusunun üzerinde bir mailleri kontrol edebilmek için ayrıdan bir web uygulaması geliştirdiniz ve bunu mail sunucusunun kullandığı Python yorumlayıcısı ile çalıştırıyorsunuz.

Her şey yolunda gözüküyor, ancak bir vakit sonra geliştirdiğiniz web uygulama çatısını güncellemeniz gerektiğini söyleyen bir uyarı aldınız ve güncelleme yaptınız.

Güncelleme yaptığınızda web çatısının kullandığı diğer bağımlılıklar da güncellendi.

Bu bağımlılıklardan birisi mail sunucusunun da bağımlığı, ancak mail sunucusu 0.

2.

1 versiyonuna bağımlı.

Sizin çatınız ise 0.

2.

2 istiyor.

Burada minör bir patch olduğu için her şey yolunda sanıyorsunuz, ancak atladığınız bir nokta var, insan ve zaman faktörü.

Mail sunucusunun 0.

2.

1 versiyonuna bağımlı olma sebebi zaman dilimleri, 0.

2.

2 versiyonunda zaman dilimleri ile alakalı bir güncelleme gelmiş ve tüm sistem kararsız çalışmaya başlamış.

Bunu yakalamanız çok zor, çünkü zaman bilgisayar sistemlerinde en çok anlaşılamayan şey olmuştur.

Programınız çalışır, ama oniki ayrdan bir tanesi yirmisekiz gün çektiği için patlayıverir, ve onu o ay içerisinde farkedersiniz.

Bu bir senaryoydu.

İşletim sistemine bağımlı olarak çalışan uygulamalar bu karmaşık senaryoya kalmadan ilk yeniden kurulumlarda patlamaktadırlar; etkisi olarak saatler, günler, belki de aylar kaybediliyor.

Yazacağınız uygulama kuş gibi hafif olmalı.

İstediğiniz zaman kaldırabilmeli, istediğiniz zaman yeniden yükleyebilmelisiniz.

Bu bir tasarım prensibidir ve Gevşek Bağlılık ya da ingilizcesiyle Loose coupling adıyla bilinir.

Çözüm: İzolasyonPython için birçok izolasyon mekanizması bulunsa da en çok kullanılan ve destek alabileceğiniz olan virtualenv'dir.

Adından da anlaşılacağı üzere, size virtual (sanal) bir env (environment—ortam) hazırlar.

Virtualenv kurulumuTerminalinizde pip install virtualenv diyerek paket kurulumunu tamamlayabilirsiniz.

Bir environment (ortam) oluşturmak ve onu activate (etkinleşi) etmek$ virtualenv ORTAMADI –python=python3Temel söz dizimi bu şekildedir.

Dikkat ettiyseniz bir de hangi python versiyonunu kullanacağını da belirttim.

Bu örneğe kadar Python 2 versiyonu ile gitmiştik, artık Python3'e bu şekilde geçebiliriz.

Kitabın, ya da makalenin başlarında Python 2 ile başlamamın sebebi buydu.

İki versiyon arasındaki farkı bu şekilde iyi kavramanız gerekir.

Çoğu işletim sistemi hala Python 2 versiyonunu kullanır.

Bir işin başına geçtiğinizde Python 2 yazacağım ben diye işi alın, eğer Python 3'e geçme ihtimaliniz varsa geçin.

Durduk yere projelerin python versiyonunu da upgrade etmeye çalışmayın eğer düzgün bir test ortamınız yoksa.

Python 3'e erişiminiz ise mutlaka virtualenv üzerinden olsun.

$ source active izole/bin/activateOluşturduğumuz sanal ortamın adı izole.

Bu bir dizindir ve içerisindeki bin klasörünün altında activate script’i bulunur.

Bunu çalıştırarak sanal ortamınızı aktif edebilirsiniz.

Python 3'ümüz hazırGördüğünüz üzere izole bir Python 3 yorumlayıcımız oldu.

Burada istersek at oynatalım, hiçbir zarar gelmez üzerinde koştuğumuz organizmaya.

Bir paket kuralımArtık gönül rahatlığıyla üçüncü parti paketlerimizi kurabiliriz.

Kullanımı basit bir paket önermek istiyorum size denemeler yapmanız için.

ColoramaTerminal üzerinde metinleri renklendirebilmeniz için kullanabileceğiniz basit bir yardımcı modül.

$ pip install coloramaÖncesinde sanal ortamınızı etkinleştirmeyi unutmayın.

Kırmızı ve mavi foton atomaltı parçacıklarıİlk bölüm için yazacaklarım şimdi bu kadar.

İkinci bölüm muhtemelen Şubatta gerçekleşecek Akademik Bilişim konferanslarından sonra olacak.

Orada Web Programcılığına Giriş sınıfında eğitmenlik yapacağım.

Muhtemelen yazının bir sonraki kısmı da orada şekillenecek.

Akademik Bilişimde görüşmek üzere!????.. More details

Leave a Reply