Fonksiyon Deseni ile Hata Yakalama

Standard

Merhaba;

Şu an üzerinde çalıştığım projede (ve genel olarak) hataları yakalama ve düzenli olarak loglama ihtiyacı hissettim, elbette try-except blokları ile bu yapıyı sağlayabilsem de, bir yerden sonra kodun hemen her parçasını try-except yapısına boğduğumu ve bu yapının da kodun okunaklığına ve akışına zarar verdiğini gördüm. Biraz araştırma yapınca, bu kontrol sistemi için güzel bir yapının olduğunu gördüm. Öncelikle fonksiyon deseni hakkında genel bir bilgiye sahip olmak gerekli bu yapıyı kullanabilmek için, bunun için araştırdıklarım arasında en güzel anlatım şu kaynakta

Okumaya Devam Edeyim Bari…

Azim Yaşta Değil Baştadır!

Standard

Merhabalar;

Biliyorsunuz, bu gün 1 nisan. İnsanların birbirlerine şaka yaptıkları, eğlendikleri günlerden biri. Peki 1 nisan şakası nereden gelmektedir? İşte hikayesi;

1 Nisan için bilinen en eski 1 Nisan hikayesi, 1 Nisan şakalarının çıkış tarihini şu şekilde anlatır. 15. yüzyılın sonlarında, Haçlı ordusu İspanya’daki Endülüs Müslümanlarının son kalesini (Gırnata) kuşatır. Uzun süren bir kuşatma olmasına rağmen, kış aylarının da etkisiyle, kale korunabilmektedir.

Okumaya Devam Edeyim Bari…

Postgresql’in Uzaktan Bağlantısını Aktifleştirmek

Standard

Merhaba;

Postgresql’in kurulumunu tamamladıktan sonra, uzaktan bağlanılmak istendiğinde servis aktif olmasına rağmen hata vermektedir. Bunun sebebi varsayılan olarak postgresql dışarıdan gelen bağlantıları reddedecek şekilde konfigüre edilmiştir. Peki dışarıdan bağlantıları nasıl aktifleştireceğiz?

Önce postgresql’e “dışarıdan sana bağlantı gelebilir, bunları reddetme, benim kontrolümde” demek için, kabul edeceği IP adres aralığını genişletiyoruz.

 # cd /etc/postgresql/9.3/main
# nano postgresql.conf

Okumaya Devam Edeyim Bari…

Lanet Olası İşaretler ve Sistemler Notları(PDF)

Standard

Merhabalar;

Normalde bloğumda bu tarz “bilgisayar”dan uzak, mühendislik temelli dersler ile alakalı paylaşımlar yapmazdım. Ancak bu dersin benim nazarımda yeri ve hikayesi bir başka.

Kendisini ilk aldığım hoca, 35 ile beni bu dersten ilk sene bıraktı. Sadece 10 saniye önce dalgaların üst üste binmesinden kaynaklanan yapıyı anlatırken 10 saniye sonra beyindeki sodyum potasyum dengesine dair apayrı bir konuya geçebilecek kapasitede bir hocaydı. Belki kötü bir hoca değildi, ancak bu dersi anlatmak yerine konuyu aşırı genişten alması sebebiyle dersi anlaşılması imkansız hale getirmekte de üzerine olmamıştı. Okumaya Devam Edeyim Bari…

Elektronik Sigarada SS316L tel kullanımı

Standard
Almadan önce biraz araştırsam da derli toplu bir kaynak bulamadığım için yazmak istedim. Öncelikle yazacaklarım 28ga UD SS 316 L tel ve Fiber Freaks pamuk ile denemem sonucu elde ettiğim deneyimlerdir;
Teller elime geçtikten sonra, teli 6 sarım 2,5 mm kurocoiler ile troy1x üzerinde denedim. Telin direnci kanthal’a göre neredeyse yarı yarıya. Aynı sarımda kanthal a1 28ga ile 1 ohm elde ederken, SS ile 0.54 gibi bir değer elde ettim. Aklıma bu tel dry burn yapılır mı sorusu geldi. Biraz araştırdıktan sonra yurt dışında yapılabileceği herhangi bir zararı olmadığını öğrendim;

Okumaya Devam Edeyim Bari…

Knapsack Probleminin Python ile Döviz Alım-Satımına Uygulanışı

Standard

Merhaba;

Bu yıl “genetik algoritmalar” adında bir ders almaktayım. Ders içeriği itibariyle yaygın genetik algoritmaların tanıtmayı ve öğrencilere gruplar halinde bu algoritmaların uygulanmasını hedeflemekte. Biz de grup olarak knapsack algoritmasını seçerek kendimize bir konu belirledik ve uygulamaya başladık. İlk problemimiz kullanacağımız dildi. Zaten hiçbirimiz matlab düşünmedi. Grup 3 kişiden oluşuyordu ve diğer 2 arkadaş C# biliyorlardı. Bense hem C# hem de python biliyordum ancak hassas sayısal hesaplamaların python’da çok daha etkin şekilde yapıldığını bildiğimden python tercih etmekten yanaydım. arkadaşlar şöyle dediler “3’ümüzde C# biliyoruz, ama sadece sen python biliyorsun, kodu C# da yazalım, sen python ile bize güncel kur verilerini xml olarak sağla, sonra da kodun python versiyonunu yazarsın, hocaya çapraz platform bir uygulama olarak sunarız.” Buraya kadar tamamdık. Ne var ki algoritma seçiminin ardından neye uygulanacağı konusunda seçimi ilk hafta yapma mecburiyetimizden kaynaklı olarak bir şansızlık yaşadık. Okumaya Devam Edeyim Bari…

Sistem Programlama Üzerine Notlar (13 Haftalık Seri)

Standard

Merhaba;

Geçen yıl sistem programlama dersi a
lırken, kendim için de başvurabileceğim kaynak olması adına güzel bir ders serisi (belki de ileride kitaba dönüştürebileceğim) bir döküman hazırlamıştım. Yandex hesabıma bakarken bu notlara denk geldim ve GNU/linux üzerinde güzel bir kaynak olarak kullanılabileceğini düşündüm. Aşağıdaki linkten notlara ulaşabilirsiniz, faydalı olması dileğiyle;

https://yadi.sk/d/klGoSqGj32E5m9

Debian Sunucularda Mysql’e Uzaktan Erişim Sağlama

Standard

Merhaba;

Sunucumuzun veritabanını elbette uzaktan kontrol etmek isteriz, bunu sağlamak için de Datagrip gibi programlar vasıtasıyla uzaktaki sunucumuzun veritabanına bağlanmamız gerekir. Sunucularda bu özellik varsayılan olarak kapalıdır ve açılması gerekir. Gelelim nasıl açacağımıza;

Önce mysql ayarlarından bunu sağlamak için dış IP’leri açalım, /etc/mysql/my.cnf dosyasına girip,

1
 <span class="pln">bind-address  </span><span class="pun">=</span> <span class="lit">127.0.0.1</span>

kısmını yorum satırı haline getirin (başına # koyun), böylece dış ip’lerde dinleniyor olacak.

Şimdi de mysql’e “dışarıdan girişlere izin ver” demek için şunları yapalım;

$ mysql -u root -p #Mysql baglantisini root olarak actik
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' identified by 'root_sifrenizi_yazin';FLUSH PRIVILEGES;

Mysql servisini yeniden başlatalım;

sudo service mysql restart

Böylece uzaktan root olarak sunucunuzun database’ine erişebilir oldunuz 🙂banner

Python/Scrapy ile Veri Kazımak (teşekkürler Türkçe!)

Standard

Merhaba;

Son birkaç gündür Scrapy adında mottosu “hızlı, basit geliştirmeye elverişli” olan bir data kazıma framework’ü ile tanıştım. Gugıl ve Ecosia amcada aratmama rağmen hiç Türkçe döküman bulamayınca içime öküz oturuverdi. Ben de birkaç günlük dahi olsa Türkçe olarak bu framework hakkında birşeyler yazmak istedim.

Öncelikle Scrapy bir python framework’u, yaptığı şey sizin gireceğiniz kurallara göre siteyi parçalara ayırıp, sitenin içerisindeki bilgileri size sunmakta. Sitenin içerisinden aldığınız bilgiler ile ne yapacağınız ise size kalmış bir durum. Günümüzde big data kavramınının iyice yaygınlaşması ile beraber Scrapy kesinlikle bu iş için biçilmiş kaftan.

Peki Scrapy ile örnek bir site parse etmek istesek?

Öncelikle Scrapy’ı bilgisayarınıza kurmalısınız, windows’ta nasıl yapılıyor bilmiyorum, eğer windows üzerinde python geliştiriyorsanız STFW 🙂

Apt-get paketli yöneticilerde (debian, ubuntu, mint gibi) ise yapmanız gereken gayet basit, “pip” yani “Python İnstalling Packages” aracı ile şu komutu vermeniz yeterli :

pip install Scrapy

Eğer pip yoksa sorun değil, pipsiz kurulum;

sudo apt-get install python-scrapy

Eğer Arch linux’a kuracaksanız;

yaourt -S scrapy

Daha detaylı kurulum bilgisi için;
http://doc.scrapy.org/en/1.1/intro/install.html

Bu kadar kurulum hikayesinden sonra, gelelim basit bir örümcek oluşturup site crawl etmeye. Aslında kendi sitemi crawl ederek örneklendirmeyi düşündüm başta ancak, yerimde duramayan biri olarak yarın sitenin şemasını değiştirdiğimde anlatıma yazık olacağından direk sitesindeki tutorial’i Türkçeleştirip kendi eklemelerimle anlatacağım;

Öncelikle konsoldan “scrapy” komutu verirseniz Scrapy size neler yapabileceğini söyler;

Scrapy 1.1.2 - no active project

Usage:
  scrapy <command> [options] [args]

Available commands:
  bench         Run quick benchmark test
  commands      
  fetch         Fetch a URL using the Scrapy downloader
  genspider     Generate new spider using pre-defined templates
  runspider     Run a self-contained spider (without creating a project)
  settings      Get settings values
  shell         Interactive scraping console
  startproject  Create new project
  version       Print Scrapy version
  view          Open URL in browser, as seen by Scrapy

  [ more ]      More commands available when run from project directory

Use "scrapy <command> -h" to see more info about a command

İlk satırda eğer aktif bir scrapy projesi içerisinde iseniz size projeyi yazacaktır, çünkü scrapy’daki kimi komutlar proje bağımlıdırlar, yani proje içerisinde değilseniz çalıştırmanız mümkün olmayacaktır. (mesela crawl gibi, değineceğiz…)

İlk önce projemizin temel yapısını oluşturarak başlayalım, konsoldan scrapy projesini açacağınız dizine girdikten sonra;

$ scrapy startproject tutorial

Komutu verdikten sonra şöyle bir çıktı alacaksınız;

New Scrapy project 'tutorial', using template directory '/usr/local/lib/python2.7/dist-packages/scrapy/templates/project', created in:
    /home/sezer/Ornek/tutorial

You can start your first spider with:
    cd tutorial
    scrapy genspider example example.com

Mealen diyor ki, istediğin Scrapy iskeletini falanca dizini örnek alarak /home/sezer/Ornek/tutorial dizini altında oluşturdum, dizine girerek ilk denemeni yapabilirsin, bunun için de gerekli satırlar filanca…

İskeletin içeriğini incelersek;

tutorial/
    scrapy.cfg            # Scrapy'nin konfigürasyon dosyaları

    tutorial/             # Scrapy ana dizini, proejenız burada
        __init__.py

        items.py          # Projede tutacağınız veri iskeleti burada

        pipelines.py      # Pipeline ile çekeceğiniz kurallar burada

        settings.py       # Projenin konfigürasyon dosyaları burada

        spiders/          # Yazdığınız/yazacağınız spiderlar burada
            __init__.py
            ...

Scrapy yapı olarak OOP bir teknolojiye sahip, Türkçe tabirle “nesne tabanlı bir framework” (olduğu kadar türkçe 🙂 )

Yani bol bol kalıtım ve bol bol metod var işin içinde. Öncelikle kazıyacağımız verileri içerisinde tutmak için bir class oluşturacağız, Scrapy veriyi kazıdıkça bunun içerisinde sözlük olarak tutacak. Ne demiştik ? items.py altında veri iskeletini tutacağız…

Giriyoruz items.py’a ve şöyle bir class oluşturuyoruz;

import scrapy

class DmozItem(scrapy.Item): # Scrapy'in Item'ından türettik
    baslik = scrapy.Field() # sitenin basligi tutacagimiz scrapy degiskeni
    link = scrapy.Field() # sitenin linkini tutacagimiz scrapy degiskeni
    icerik = scrapy.Field() # sitenin icerigini tutacagimiz scrapy degiskeni

Farkettiyseniz “Item” class’ından bir class kalıtım alarak türetmiş olduk. temel class’ımıza 3 değişken daha ekledik ve kendimize özgü class’ımızı oluşturmuş olduk.

Şimdi gelelim örümceğimizi yazmaya, şimdi de ”

1
<span class="pre">tutorial/spiders</span>

” dizinine gidiyoruz ve dmoz_spider.py adında bir python dosyası oluşturuyoruz, içerisine de örümceğimizin özelliklerini yazıyoruz;

import scrapy

from tutorial.items import DmozItem

class DmozSpider(scrapy.Spider):
    name = "dmoz"
    allowed_domains = ["dmoz.org"]
    start_urls = [
        "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
        "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
    ]

    def parse(self, response):
        for sel in response.xpath('//ul/li'):
            item = DmozItem()
            item['title'] = sel.xpath('a/text()').extract()
            item['link'] = sel.xpath('a/@href').extract()
            item['desc'] = sel.xpath('text()').extract()
            yield item
 

Kodda her ne kadar aşikar olsa da açıklamak adına bir daha kodu inceleyelim, class’ı Scrapy’ın spider class’ından kalıtım aldık. Bu class’ın özelliği, parse adında bir metodu zorunlu olarak tanımlamamız gerektiği, çünkü site kazındıktan sonra alınan veri buraya koyulmakta. Önce yukarıda oluşturduğumuz DmozItem adındaki class’I py dosyamıza dahil ettik, ardından hangi siteyi kazıyacağımıza Scrapy’a söyledik, sonra da “xpath” ile içerisinden çekeceğimiz kısımları seçtik. Xpath’in ne olduğuna zamanım olduğunda bir başka makalede değineceğim, bir cümle ile açıklamak gerekirse “Bir html sayfanın istenilen kısmını almayı sağlayan yapı” olarak tanımlarsam çok da yanlış konuşmuş olmam. Son kısımda da yield diye bir anahtar kelime ile bu nesneyi pipeline’a gönderdik.

Şimdi kodumuzu çalıştırmaya geldi sıra, bir çıktı olarak kodu elde etmek için şimdilik en basit yöntemi kullanacağız;

scrapy crawl dmoz -o veri.json

Kodu çalıştırıyoruz ve ta taaa, sitenin içeriği bir json dosyası içerisine aktarılmış durumda !

Elbette bu scrapy için ancak basit bir giriş anlatımı, ilerleyen zamanlarda vakit buldukça genişletmeye çalışacağım, ancak kısaca Scrapy böyle bir framework. Tutorial’in orjinali için;

http://doc.scrapy.org/en/1.1/intro/tutorial.html

İyi çalışmalar 🙂

banner