Ay: Nisan 2020

Codewars’ta Gördüğüm Bir Soru ve Düşündürdükleri

https://www.codewars.com/kata/52de553ebb55d1fca3000371/python

Soru bildiğimiz dizi içindeki eksik elemanı bulalım sorusu. İnsan öncelikle düşünüyor insan farkları kontrol ederim ve farklı olanı bulurum diyor. O(n) cinsinden bir çözüm buluyoruz. Ancak sonrasında çözümleri okuduğumuzda görüyoruz ki olması gereken toplamdan elimizdeki toplamı çıkardığımızda O(1)’de çözüme ulaşabilmekteyiz. Örnek verirsek:

find_missing=lambda s:(s[0]+s[-1])*(len(s)+1)/2-sum(s) #may42's solution

Codewars O(n) çözüme izin verdiği için çözüm eklenebiliyor ve aslında düşününce bir yığın kütüphane app abi vb içerisinde de böyle yeterince iyi olduğu için duran çözümler bulunmakta. Belki de ilk aklına geldiği şekli ile implemente etmişse programcı belki de bazı bilgisayarlarda çalışamayacak hale gelmektedir. O yüzden ilk aklınıza geleni yazmayın ve biraz düşünün. Hatta benzer problem çözümlerini arayın arama motorunda. O an önemli olmayabilir ama ileride projenin yeniden yazılmasına dahi gidebilecek sorunlara yol açabilir.

John Snow’un Data Mapi ve Önemi

Kolera günlerini yaşayan John Snow Kolera ölümlerini Londra haritası üzerinde görselleştiriyor ve sonuç olarak salgının sebebinin şehir merkezindeki bir su pompası (Çeşme herhalde) olduğunu buluyor. Map şurada yeniden üretilmiş:

https://www.arcgis.com/apps/PublicInformation/index.html?appid=d7deb67f810d46dfacb80ff80ac224e9

Şurada da ayrıntılı bir şekilde anlatılmış yaşanan olay:

Kablolardaki Hayalet Nasıl bir Kitap?

Kablolarda Hayalet Kevin Mitnick’in yaşam öyküsünü anlattığı kitabı. Mitnick gerçekten de dünyanın en çok aranın hackerı olarak yaşadıklarının yanı sıra öncesi ve sonrasını da anlatmakta.

Öncelikle şunu söylememiz gerek. Kitap teknik değil . Zaten Mitnick’in asıl becerisi de Sosyal Mühendislik. Teknik şeyler de yapıyor ancak söylediği bazı şeyler çok eski bazıları da Amerika’nın yapısı gereği oluşan durumlar yani kitaptan ders çıkarmak yerine Amerika’nın ve Dünya’nın o zamanki halini görmek için uygun.

Kitabı okurken Mitnick’in bir dahi olmadığını anlıyorsunuz. Mitnick hacklemenin verdiği adrenalini seviyor ve büyük bir tutku ile hareketlerini gerçekleştiriyor.

Kaçabilmesi ise günümüz koşulları ile değerlendirildiğinde gerçekten olağan dışı geliyor. Dünyanın o yıllardan sonra oldukça değişmiş. Artık günümüz teknolojik imkanları ile Mitnick’in kaçması olası değil.

Mitnick’e son kez yakalandıktan sonra yapılanlar ise gerçekten akıl almaz şeyler. Yapılanlar gerçekten çok kötü. Kaldığı şey ve yapılanlar korkunç. Mitnick’ten gerçekten korktukları anlaşılıyor.

Sonuç olarak hiç kimsenin hazır olmadığı şeyleri yapmak Mitnick hayatta da yakın ve uzak çevresinin anlamlandıramaması ve fark edememesi yüzünden harcanıyor. Eğer bir 10 yıl sonra dünya’ya gelmiş olsaydı her şey onun açısından çok daha iyi olacaktı. Yine de Mitnick gerçekten de Hackerlık denen kültürün ana akımlaşmasının (ve dolayısıyla karikatürize) edilmesinin sebebi ve kitabı okunmayı hak ediyor. Son olarak kitap biraz daha kısa olabilirmiş.

Python Decorators nedir?

Decoratorlar ile birlikte fonksiyonumuzu oluşturmadan önce fonksiyonumuzun girdileri ve çıktıları kontrol etmemizi ve değiştirmemizi sağlayan bir yapıdır.Yeniden kullanılabilir olduğu için duplicate veya benzer kodun önüne geçer.Python’da fonksiyonların first class member olmasından faydalanılarak oluşturulmuştur. Örnek olarak:

def decoratemi(func):
    def wrapper():
        print("Some Operation")
        func()
        print("Some Other Operation")
    return wrapper

Kullanırken ise:

@decoratemi
def newfunc():
    print("İşlemler")

newfunc() 

Aslında Decorator’ün yaptığı tam olarak şudur:

newfunc=decoratemi(newfunc)

Gördüğümüz gibi fonksiyonumuzun sarıp sarmalıyoruz. Çalışması kontrol altına alıyoruz.

Parametreli bir şekilde kullanım da tabiki mümkündür. Örnek olarak:

def Spending_control(func):
    def wrapper(*args):
        result=func(*args)
        if result<0: #Eliminate Negative Spending
           return 0 
        else:
            return result
    return wrapper
@Spending_control
def spend_to_furniture(color,maxprice):
    furniture=apicall(color,maxprice)
    return furniture.price
    
spend_to_furniture("green",500)

Gördüğünüz gibi negative spending ihtimalini yok ediyoruz ve güvenli bir ortam sağlıyoruz.

Son olarak keyword argümanları da kullanabilmek için:

def Spending_control(func):
    def wrapper(*args,**kwargs):
        result=func(*args,**kwargs)
        if result<0: #Eliminate Negative Spending
           return 0 
        else:
            return result
    return wrapper