HTML sayfası içinden CSS ve Javascript dosyalarına nasıl link verilir?


Basit bir HTML dosyasını dışarıdan stilize etmek için CSS kullanırız. Aynı şekilde sayfamıza etkileşim katmak için ise Javascript kullanırız. Her ikisi de mevcut html dosyası içerisinde dışarıdan linkle ithal edilmeksizin direkt olarak tanımlanabilmektedir. Ancak bu kod okunabilirliği ve modülerlik bakımından tercih edilen bir yöntem sayılmaz.
Peki nasıl tanımlarız dış CSS ve Javascript dosyalarını: Aşağıda gösteriliyor:

https://gist.github.com/suatatan/f2fc490f01359d2cc13f.js

Web.Py için kullanıma hazır dizin


Yandex gibi büyük internet sitelerinin de kullanmakta olduğu Web.Py adlı meşhur, basit ve kullanışlı python web framework’u bilindiği üzere Google App Engine’nin kendi framework’unun da ruhunu oluşturmaktadır. Bu noktada Web.py’nin nasıl kullanıldığına girmeden; (vakit az, eğer talep olursa onun için ayrı bir post açarım) Web.py framework’ünü bilgisayarıza indirip hemen kullanabilmeniz için hazırladığım aşağıdaki dosyayı sunuyorum.

Web.py framework’ün güzel taraflarından biri de; ek bir sunucu kurulumuna gerek bırakmamasıdır. Dosyayı indirdikten sonra Windows altında run dosyasını çalıştırdıktan sonra: web browserinızda http://localhost:1234 adlı url’ye girdiğinizde web.py framework’unun çalışan ana sayfasını göreceksiniz.
Dizinde; templating sistem ve statik dizin ayarlamaları yapılmıştır.

Soru olursa memnuniyetle cevaplanacaktır.

Dizinin linki:

Python ile XML verisini işlemek (parse etmek)


Aşağıda bir projemde kullandığım ve işinize yarayabilecek bir örnek var. İteratif XML verilerini ayıklamak işinizi görecektir
XML değişkenine atanmış XML satırları bir sonraki kodlarla işlenmektedir:
Burada kullanılan kütüphane Minidom’dur. Python’un standart kütüphanesidir ve Google App Engine içinde de kullanımı mümkündür.
https://gist.github.com/3e64fdc2a0586943a0ed.js



Bu işlem aşağıdaki gibi de yapılabilir:


dom = parseString(XML)
        
        questions=dom.getElementsByTagName(‘question’)
        for question in questions:
            #NVAL=node.getElementsByTagName(“id”)[0].toxml()
            id=question.getElementsByTagName(“id”)[0].firstChild.data
            text=question.getElementsByTagName(“text”)[0].firstChild.data
            
    
            RESULT=RESULT+id+“
”;

        self.response.out.write(RESULT)

Google App Engine kitabımda bazı okurlarımızın 7. bölümde karşılaştıkları hata hakkında


Okurlarımdan Cemali Gencer Bey şöyle sordu:

Merhaba Suat Bey, Kitabınızdaki 7 Bölümde bulunan uygulamada problem yaşadım. Users kütüphanesi ve üye oturum yönetimi örneği (projem6 örneği) örneğini çalıştıramadım.Karşıma anlamadığım hatalar çıktı ekran görüntüsünü de bir adrese yükledim vaktiniz varsa inceler misiniz?


Cevabım:

Sorunun kaynağı; anaprogram.py dosyasındaki # ile başlaytan yorum satırlarında geçen bozuk karakterlermiş. Bu 2. kere sizde oldu. Sebebi kullandığınız kod editörlerindeki codeset ayarları olabilir. Ancak ayrıntıya hiç gerek yok. Hata raporunda dikkat ettiyseniz ‘ascii codec’ can’t decode hatasına bir daha denk gelirseniz python dosyanızdaki bozuk karakter varsa silin.

Düzeltilmiş kaynak kodlar şuradan indirilebilir.

Kendisine teşekkür ederim.

Google App Engine’de dosya upload etme


Google App Engine ile dosya upload etmek için aşağıdaki kodları kullanabilirsiniz. Bu kodları test ettiğinizde önce dosya ekleme arayüzü açılır sonra dosyanız yüklendikten sonra “dosya yüklendi” diye ifade çıkar. Ayrıca bir link çıkar bu linke tıklayınca dosyanızın sunucadaki halini geri indirebiilirsiniz.
Peki dosyanız nereye kaydedilmiş oluyor?
Google App Engine’de bildiğimiz anlamda bir FTP yoktur. Bu nedenle dosya herhangi bir dizin içine değil, blobstore denilen bir nevi dosya veritabanına kaydedilir. Bu blobstore’a gerek lokalde gerek gerçek sunucuda “Yönetici Dashboard” üzerinden erişip görebilirsiniz.

https://gist.github.com/171af1a0a8486d488a13.js

Generating custom unique id with python:


You can generate custom unique key for databases in python

from datetime import *
from random import *  
def generate_uniqid(self,prefix=“S”,suffix=“F”): now=datetime.datetime.now() SEC= str(now.second) m = str(now.minute) H = str(now.hour) D = str(now.day) M = str(now.month) Y = str(now.year) rn=str(randint(0,10000)) return prefix+Y+M+D+H+m+SEC+“-”+rn+suffix

Converting Google App Engine Datastore Model Class to XML


Model class actually have to_xml() function but this xml schema not customizable and entity based. You can export your model as xml with bit of code:
This functionality is good for data exporting operations:

class TestModule(webapp.RequestHandler): 
    def get(self):
        props=AuditLog().properties()
        data=“n”
        for prop in props:
            data=data+“  {{i.%s}}%s>n”%(prop,prop,prop)
        data=data+“”        
        self.response.out.write(data)

Using Decorators in Google App Engine


If you can use python decorator in your app engine project, there is tiny and smart example below which you can use it:
The print will be user email

def uzman(func):
    def check_auth(*args, **kwargs):
        user=users.get_current_user()
        print user
        return func(*args, **kwargs)
    return check_auth

class TestModule(webapp.RequestHandler):
    @uzman
    def get(self): 
          pass

Google App Engine de şahsi domain kullanılabiliyor mu?


Soru:

Suat hocam iyi günler
Google App Engine hakkındaki kitabınızı aldım ufak ufak uygulamlar yapmaya başlayacağım inşallah.Benim iki sorum olacak 
1-)Aldığımız domaini-örneğin abc.com gibi- Google app engine uygulamasına nasıl adapte edeceğiz
2-)Appspot.com uygulamları web servislere destek veriyor mu?Google bazı politikaları gereği web servislere izin vermiyor deniyor forumlarda.Peki web servis gerektiren işlemleri nasıl yapacağız?Saygılarımla.Selçuk ÖKMEN

Cevap:
Merhabalar;
1) Google App Engine ile şahsi olarak aldığınız selcukokmen.com gibi bir adresle de kullanabilirsiniz. Malum olduğu üzere Google App Engine üzerinde sayfanızı yayınladığınızda şuna benzer bir url alırsınız: selcukoktem.appspot.com. selcukoktem.com adresini appspot.com uzantılı adrese yönlendirebilirsiniz. Bu CNAME kayıtları ile olmaktadır. Bunu sitenizi appspot.com alt domaini üzerinden yayınlandıktan sonra Dashboard’a girerek (kitapta dashbooard anlatılmıştır) oradan Administration->Application Settings menüsüne girdikten sonra Domain Setup isimli başık altından Add Domain demek suretiyle başlatırsınız.

Resmi:

Bu minval üzere sistem sizi yönlendirecek ve kullandığınız hosting firması üzerinde DNS ayarları üzerinden CNAME kayıtlarını ghs.google.com adresine yönlendirmeniz için talimatları açıklayacaktır.
Siz de hosting firmanızın paneline (genellikle cpanel) girerek bu yönlendirmeyi yaptıktan kısa bir süre sonra selcukoktem.com domaini üzerinden google app engine uygulamanızı kullanabileceksiniz.

2) Web servislerinden kastınız neydi? Eğer uygulamanızın JSON veya XML formatında API responseleri vermesini istiyorsanız bu mümkün. Ya da sözgelimi Youtube API’yi Google App Engine uygulamanız üzerinde mi çalıştırmak istersiniz? Bu da mümkün.

Saygılarımla

Google App Engine ücretli mi?


Soru:
Merhaba,

Hocam kitabınızı internetten sipariş ettim, ama elime ulaşmasını bekleyemedim, gidip bir d&r bayisine yarım saatte kitabın %80 ini okudum, şimdi fikir sahibiyim ve engine’e girişmek için kitabı bekliyorum.

Fakat şöyle bir sorum var, kitabın yazıldığı dönemde sanırım app engine ücretsizdi, şimdi ise ücretli. kullanıcı olarak size sorum, fiyat politikası ne kadar iyi? ekşisözlükte biraz yermişler yeni halini. biraz tereddütteyim desem yeridir.

onun dışında geliştirme ortamı gerçekten hayran bıraktı. kesinlikte deneyeceğim.

Cevap:

Kitabın yazıldığı döndemde de şu anda da Google App Engine prensip olarak ücretsiz. Ücretli menüye istediğinizde geçiyorsunuz. Google App Engine fiyat politikası kanaatimce, klasik hosting hizmetinde periyodik olarak ödenen sabit ücret sisteminden daha hakkaniyetli. Server kaynaklarını harcadığınız kadar ödüyorsunuz.

Peki ücretli moda ne zaman geçiliyor?

Sitenizin özelliklerine kalmış. Kabaca tarif etmek gerekirse; aşırı bir ziyaretçi trafiği ile karşılaşmayan, aşırı veritabanı işlemi (ekleme,güncelleme,silme,listeleme) yapmayan, klasik bir site için ücretsiz mod fazlasıyla yeterli. Bir örnek vermek gerekirse kitapta da örneği verilen bazı siteler yanında mesela, Gürpınar Belediyesi (http://www.van-gurpinar.bel.tr) sitesi Google App Engine üzerinden çalışıyor. Ve iki yıldır ücretsiz olarak Google sunucularında barındırılıyor.

Ancak hergün ciddi bir trafik alan bir site/servis kuracaksanız, ki bunun için her halükarda nereden olursa olsun, hosting için ciddi yatırım yapmak gerekecektir, aynı şekilde Google App Engine’de de ücretli moda geçersiniz. Aylık sabit ücret yok. Siz verebileceğiniz aylık veya günlük  bütçenizi sisteme giriyorsunuz, sistem tükettiği kadarını sizin bakiyenizden düşüyor. Kontör mantığı gibi. Bunun nasıl yapılacağı kitapta anlatılıyor.
Şimdi, burada standart bir hosting firmasının aylık şu kadar fiyata şu kadar megabayt alan ve şu kadar bandwith şeklindeki planına göre, Google App Engine’nin bu sistemi karmaşık gelebilir. Çünkü Google App Engine ücretsiz sunduğu 500MB kota dışında, belirli adede kadar maili, belirli güce kadar CPU tüketimini ücretsiz sunup, bunun üzerindekini ücretli modda sunuyor. Bu anlamda her iki hosting çözümünün fiyat karşılaştırması zor olacaktır. Ancak Google App Engine’nin, Google sunucuları üzerinde, Google’nin altyapısı, gücü ve performansı ile sunulduğunu düşünürsek, her halde fiyat politikası konusunda daha az seçici oluruz. Neticede bilişim sektöründe yurtdışında yayılmaya başlayan, sektörde yer eden bir teknoloji…

Saygılarımla…