skip to Main Content

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.

“/usr/bin/env: `node’: Böyle bir dosya ya da dizin yok” hatası

fcicek@fcicek-home:~$ cordova create MyApp
/usr/bin/env: `node': Böyle bir dosya ya da dizin yok

hatası ile karşılaşıyorsanız nodejs ile ilgili eksik bir şeyler kurulmuş olabilir..

root@fcicek-home:~# sudo apt-get install nodejs-legacy

ı tekrar kurduktan sonra yeniden denmekte fayda var.

fcicek@fcicek-home:~$ cordova create MyApp
? May Cordova anonymously report usage statistics to improve the tool over time? Yes

Thanks for opting into telemetry to help us improve cordova.
Creating a new cordova project
Back To Top