skip to Main Content

sqlite-web

sqlite ile çalışırken bir ide ihtiyacınız olursa ve progralama diliniz python ise web tabanlı sqlite-web isimli basit bir çözüm mevcut. kurulum için

pip install sqlite-web

ve kullanım için ise

sqlite_web veritabani.db -H 0.0.0.0 -p 8080

yeterli olacaktır. sqlite-web flask tabanlı olduğu ihtiaç duyulan kütüphane sayısı fazla olabilir. mevcut projelerinizi bozmamak adına virtualenv ile çalışılması tavsiye edilmektedir.

proje sitesi : https://github.com/coleifer/sqlite-web

python – pip ile güncel olmayan paketlerin güncellenmesi

windows altında python ile çalışıyor ve paket yöneticisi olarak pip kullanıyorsanız

pip list --outdated

ile güncel olmayan paket listesini görebilirsiniz.

PS C:\python> pip list --outdated
Package                  Version      Latest       Type
------------------------ ------------ ------------ -----
absl-py                  0.11.0       0.12.0       wheel
add-trailing-comma       2.0.2        2.1.0        wheel
aiohttp                  3.7.4        3.7.4.post0  wheel
APScheduler              3.6.3        3.7.0        wheel
astroid                  2.5.1        2.5.2        wheel
autoflake                1.3.1        1.4          sdist

paketlerin hepsini güncellemek istiyorsanız

pip list --outdated --format freeze | %{$_.split('==')[0]} | %{pip install --upgrade $_}

işinize yarayacaktır. paket bağlımlıklarında dolayını bunu önermiyorum. paket bağmlılıkları bir çok konuda sorun olabileceği için virtualenv kullanmanılması tavsiye edilir..

Python – Selenium kullarak wordpress admin paneline giriş

web hasadı ,kazıma, test vb yöntemler için en kullanışlı araçlardan bir tanesi selenium kütüphanesi. diğer bir deyişle web üzerinde herhangi bir işi otomatize etmek istiyor, bir siteden veri çekmek istiyorsanız selenium ihtiyacınızı karşılamakta yardımcı olacaktır.

bu kısa yazıyı selenium kullanarak wordpress kullanan bir siteye giriş yapmanın nasıl yapılabileceğine gösteren en temel python kodunu ile sonlandıralım.

from selenium import webdriver
import time
browser = webdriver.Firefox()
url = "https://www.wordpresssitsi.com/wp-admin/" 
browser.get(url)  
username = browser.find_element_by_id("user_login") 
password = browser.find_element_by_id("user_pass") 
username.send_keys("k_adi") # wordpress kullanici adi
password.send_keys("k_adi_sifre") # wordpress kullanici adi
submitButton = browser.find_element_by_id("wp-submit") 
submitButton.click()
time.sleep(10)
browser.close()

python da pandas ile excel üzerinde çalışmak – 1

pythonda excel dosyaları ile çalışmak için kullanabileceğiniz kütüphane sayısı oldukça fazla. bu kütüphanlerin kendine göre avantajları mevcut. bu kısa yazıda kullanımı oldukça kolay olan pandaw dan bahsedegim

öncelikle pandası kuralım

pip3 install pandas

kurulum sorunsuz olarak tamamlandıktan sonra ilk örneğimizi yapabiliriz. temel ıolarak üç adım mevcut.

import pandas as pd   # 1. adim kutuphaneyi import ediyoruz

excel_text = pd.read_excel(r'router.xls')  # 2. adim excel dosyami belirtiyoruz

print (excel_text ) # 3. ekrana yazdiriyoruz / işliyoruz..

en temel haliye excel içindeki verileri text ortamına aktarmış olduk.. bu python dosyamızı çalıştırınca aşagıdaki şekilde bir çıktı elde ediyoruz.

root@fcicek:~/python/# python3 router_excel.py 
       router interface
0    router_a     0/0/1
1    router_b     0/0/2
2    router_c     0/0/3

csv dosyası üzerinde çalışmak istereniz read_excel yerine read_csv kullanmanız gerekmektedir. ; ile ayrılmış ve utf8 ile kodlanmış bir csv dosyasında çalışmak isterseniz

data = pd.read_csv (r'router.csv', sep=';', encoding='utf8', quotechar='"') 

işinize yarayacaktır. eğer herhangi bir sutun veya satır ile çalışmak istiyorsak

df = pd.DataFrame(data, columns= ['router'])

ile çalışacağınız sütünu seçebilirsiniz. satırları okuyorak satırlardaki veriler ile işlem yapmak için ise


for i in df.index:
    print(df['router'][i]+'----'+df['interface'][i])

yapısını kullanabilirsiniz. pandas konusunda daha detaylı bilgilere erişmek isterseniz aşagıdaki bağlantılar işinize yarayacaktır

https://pandas.pydata.org/docs/

https://pandas.pydata.org/docs/pandas.pdf

https://pandas.pydata.org/Pandas_Cheat_Sheet.pdf

wordpress xmlrpc erişimini kapatmak

oluşturulmasında ve kullanılmasındaki temel düşünce güzel olsada kullanılmıyorsa xmlrpc wordpress için güvenlik açığı riski barındırıyor.

apache kullanıyorsanız .htacces dosyasına aşagıdaki ilaveleri yaparak riskleri minimize etmiş olursunuz.


# .htaccess WordPress xmlrpc.php devre disi birakmak
<Files xmlrpc.php>
 order deny,allow
 deny from all
 #allow from <izin verilen ip adresleri>
 allow from xxx.xxx.xxx.xxx
</Files>

nokia sros için araçlar

genel olarak network ekipmanlarında cli ile konfigürasyon yapıyorsanız sıklıkla kopyala – yapıştır yapıyorsunuzdur. ancak bu yöntem hatalara oldukça açıktır.

bu hatayı minimize etmek adına python ile yazılmış nokia sros güzel bir kod bulmuştum. bunu paylaşmak istedim. örnek için aşağıdaki şekilde bir konfigürasyonumuz olsun.. bunu c1.txt olarak kaydediyoruz.

        vpls 11 customer 1 vpn 11 i-vpls create
            backbone-vpls 100:11
            exit
            stp
                shutdown
            exit
            sap 1/5/1:11 create
            exit
            sap 1/5/1:12 create
            exit
            no shutdown
        exit
        vpls 100 customer 1 vpn 100 b-vpls create
            service-mtu 2000
            stp
                shutdown
            exit
            mrp
                flood-time 10
                no shutdown
            exit
            sap 1/5/1:100 create
            exit
            spoke-sdp 3101:100 create
            exit
            spoke-sdp 3201:100 create
            exit
            no shutdown
        exit

t.py olarak kaydettiğimiz python kodunu çalıştığımızda mevcut kodumuz aşağıdaki örnekte görüleceği üzere yeniden düzenleniyor. bu şekilde bir yapı bir çok olası hatanın önüne geçecektir.

fcicek@cicek:~/mpls/sros$ python t.py c1.txt
/configure vpls 11 customer 1 vpn 11 i-vpls create backbone-vpls 100:11
/configure vpls 11 customer 1 vpn 11 i-vpls create stp shutdown
/configure vpls 11 customer 1 vpn 11 i-vpls create sap 1/5/1:11 create
/configure vpls 11 customer 1 vpn 11 i-vpls create sap 1/5/1:12 create
/configure vpls 11 customer 1 vpn 11 i-vpls create no shutdown
/configure vpls 100 customer 1 vpn 100 b-vpls create service-mtu 2000
/configure vpls 100 customer 1 vpn 100 b-vpls create stp shutdown
/configure vpls 100 customer 1 vpn 100 b-vpls create mrp flood-time 10
/configure vpls 100 customer 1 vpn 100 b-vpls create mrp no shutdown
/configure vpls 100 customer 1 vpn 100 b-vpls create sap 1/5/1:100 create
/configure vpls 100 customer 1 vpn 100 b-vpls create spoke-sdp 3101:100 create
/configure vpls 100 customer 1 vpn 100 b-vpls create spoke-sdp 3201:100 create
/configure vpls 100 customer 1 vpn 100 b-vpls create no shutdown

kullanılan t.py

#!/usr/bin/env python3

import re
import math
import sys

def pop(stack):
    try:
        stack.pop()
    except Exception as err:
        print("ERROR: Unable to flush stack - %s" %err)

def output(stack):
    output = " ".join(stack)
    print(output)
    return output

def sros_flatten(data):
    stack = []
    exit_detected = False
    indent = 0
    new_conf = ""

    for line in data.lstrip().splitlines():
        l = len(line) - len(line.lstrip())
        nxt_indent = math.ceil(float(l/4))

        if line.startswith(("#", "echo")) or line.strip() == "":
            pass
        elif line.strip() == "exit all":
            new_conf = new_conf + "\n" + output(stack)
        else:
            if nxt_indent == 0 and line.strip() == "configure":
                new_line = str("/") + str(line.strip())
                stack.append(new_line)

            elif nxt_indent > indent:
                if line.strip() != "configure" and len(stack) == 0:
                    stack.insert(0, "/configure")
                stack.append(line.lstrip())

            elif nxt_indent == indent:
                if line.strip() != "exit":
                    if exit_detected:
                        stack.append(line.strip())
                    else:
                        if len(stack) != 0:
                            new_conf = new_conf + "\n" + output(stack)
                            pop(stack)
                            stack.append(line.strip())
                        else:
                            stack.insert(0, "/configure")
                            stack.append(line.strip())
                    exit_detected = False

            else:
                if line.strip() == "exit":
                    if not exit_detected:
                        new_conf = new_conf + "\n" + output(stack)
                        del stack[-2:]
                    else:
                        pop(stack)
                    exit_detected = True

                else:
                    new_conf = new_conf + "\n" + output(stack)
                    exit_detected = False
                    pop(stack)
            indent = nxt_indent
    
    return new_conf

def main():
    filename = sys.argv[1]
    with open(filename, 'r') as f:
        data = f.read()

    sros_flatten(data)

if __name__ == "__main__":
    main()

Akıllı Ulaşımda GTFS (General Transit Feed Specification) – I

akıllı şehir kavramının en temel alt kavramı ve olmazsa olmazı elbetteki akıllı ulaşım. akıllı ulaşımın temel amacını ise “a noktasından b noktasına en hızlı , ekonomik ve güvenli ulaşım” şeklinde özetleyebiliriz.

akıllı ulaşımı ise kendi içinde farklı alanlara ayırabiliriz. bunlara örnek verecek olursak

  • toplu ulaşım yapısı ve planlaması
  • sinyalizasyon ve yönlendirmeler
  • park sistemleri
  • trafik analizi ve navigasyon hizmeti

vb şeklinde sayıyı arttırabiliriz. şimdi gelelim yazımızın ana konusuna toplu taşıma ile a noktasından b noktasına erişim olayına.

bir şekirde a noktasından b noktasına gitmek istediğimizi düşünelim. bunun için neler gerekmektedir aklımıza gelebilecekleri yazmaya çalışalım.

  • öncelikle cebinizde ulaşımı sonlandıracak seviyede para olması gerekmektedir ve toplu ulaşım sistemine ait ödeme sistemine sahip olmalısınız. güzergahtaki seferlere ait ücret bilgisini bilmelisiniz.
  • bineceğiniz ve ineceğiniz durakları bilmelisiniz
  • aktarma yapacaksanız aktarma noktalarını bilmelisiniz.
  • birden fazla alternatif varsa metro, vapur v.b. bu alternatifleri bilmelisiniz
  • ….

temel olarak en hızlı ve ekonomik olarak yolculuğu gerçekleştirmek için yukarıdaki bilgileri sahip olmalısınız. bu bilgileri bir düzen altında toplanması ve paylaşılması için   standart altında toplama gereksinimi sonucu oluşturulmuş standartlardan bir tanesi General Transit Feed Specification (GTFS) dir.

GTFS standartı ile toplu taşıma bilgileri için 13 farklı dosya – tablo oluşturulmuştur. Bu standart gereği 6 tanesi zorunludur. standartda kullanılan dosyalar ait temel açıklamalar aşagıdaki tabloda yer almaktadır. tablolar hakkında daha detaylı bilgi almak için dosya adları üzerine tıklayabilirsiniz.

Dosya adı Zorunluluk durumu Açıklaması
agency.txt gerekli verileri sağlayan bir veya daha fazla toplu ulaşım hizmeti sağlayan kurumlara ait bilgiler
stops.txt gerekli araçların yolcu indirme/birdirme yaptıkları noktalar.
routes.txt gerekli güzergah bilgisi yer alır. güzergah üzerinden birden fazla sefer bulunabilir.
trips.txt gerekli Güzergah üzerindeki tüm sefer bilgilerini içerir.

Her rota için geziler. Gezi, belirli bir saatte gerçekleşen iki veya daha fazla durak dizisidir.

stop_times.txt gerekli Toplu taşıma araçlarının duraklara ulaşma ve duraktan ayrılma zamanı yer alır.
calendar.txt gerekli Hizmetin ne zaman başlayıp bittiğini ve hizmetin mevcut olduğu haftanın günlerini belirtir.
calendar_dates.txt isteğe bağlı Calendar.txt dosyasında tanımlanan servisler için istisnaları içerir. örnek olarak resmi tatillerdeki değişimler.
fare_attributes.txt isteğe bağlı Toplu ulaşım kurumlarının güzergahlar için belirlediği ücret bilgileri yer almaktadır
fare_rules.txt isteğe bağlı Toplu ulaşım kurumlarının güzergahlar için belirlediği ücret bilgileri uygulama kuralları yer almaktadır.
shapes.txt isteğe bağlı bir güzergahın harita üzerinde temsil edilirken kullanılacak çizgi ve simgeler kuralları.
frequencies.txt isteğe bağlı Güzergahlardaki değişen servislere ait zaman bilgilerini, aradaki süre farkları içerir.
transfers.txt isteğe bağlı Transfer noktaları arasındaki aktarım için bağlantı kurallar. (30 dk içerisinde ücretsiz v.b. gibi)
feed_info.txt isteğe bağlı İçerik hakkında yayıncı, sürüm ve son kullanma bilgileri gibi ek bilgileri

dosyalar arasında temel bağlantıları gösteren diagram ise aşagıdaki yer almaktadır.

bu verilerin işletmeci, belediye v.b. bir organizasyon tarafından hazırlanıyor olması ve tüm geliştiricilere açılıyor olması gerekliki buraya kadar baktığımız temel bilgiler bir işe yarasın. ülkemiz için bu bilgilerin olduğu işletmeci belediye bilgisi ne yazıkkı iki elin parmakları kadar.

google, microsoft, yandex gibi şirketlerin harita uygulamaları üzerinden belirgin iller için navigasyon seçenekleri arasında toplu taşıma seçenekleri çıkmaktadır.

sadece bu alanda özelleşen moovit uygulmasına göre ülkemize toplu taşıma bilgisinin yer aldığı iller aşagıdaki gibidir. yani bu illere ait veriler bir şekilde paylaşılıyor – paylaşılmış durumdadır.

bu bilgilere ulaşabilirseniz gelişime açık olan bu alanda bir uygulama yazabilirsiniz. bu yazıyı yazarkent istanbul haricinde bu verilere ulaşamadığımı belirtmek isterim. verilere ulaştıktan sonra moovit tarzından bir hizmet sunabilmenin nasıl yapılacağını merak ediyorsanız

opentripplanner.org

adresini inceleyebilirsiniz. bu noktada esas girişim belediyelerin bu verileri hızlıca oluşturacakları ve günceleyecekleri bir arayüz servise sunmak daha sağlıklı olacaktır.

toplu ulaşım verisi konusunda ülkemizde en iyi şehir istanbul. bunun nedeni ise avrupa birliğinin akıllı şehirler projesinde pilot şehirlerden bir tanesi olması. proje nedir neler yapıldığını merak ediyorsanız www.citysdk.eu adresi size yardımcı olacaktır.

bir sonraki yazıda basit bir uygulama anlatmaya çalışacağım. yazı konusunda tarih net olmadığı için o işin detayını merak edenler

https://developers.google.com/transit/gtfs/
http://gtfs.org
https://github.com/opentripplanner
https://github.com/BlinkTagInc/gtfs-to-html

adreslerini inceleyebilirsiniz.

Back To Top