「プログラム」カテゴリーアーカイブ

javascriptのonloadは1ページ一回まで

javascriptを1つのページに2つ置いたら、片方しか動かない。

試しにHTMLに書く順番を変えたら、後ろに書いたほうが動くことがわかった。

最初は、変数とか、関数が重複していると思って、いろいろ変更したが治らないので、もっと調べるとonloadが原因だとわかった。

onloadは1ページで一回しか使えないらしく、複数使うと、最後に使ったものだけが実行されるらしい。なのでonloadで複数設定していたものを1つにまとめると解決

最初は以下のような2つを別々に書いていた。

onload = init1;
var state1;

function init1() {
state1 = $(‘state1’);
itemshow1();
}

onload = init2;
var state2;

function init2() {
state2 = $(‘state2’);
itemshow2();
}

これらをまとめて

onload = init;
var state1;
var state2;

function init() {
state1 = $(‘state1’);
itemDisp1();

state2 = $(‘state2’);
itemDisp2();
}

とするとあっさり解決して動くようになった。

古いprototype.jsを使っているとアドセンスが表示されなくなったこととか。

何故か突然グーグルのアドセンスが表示されなくなって、いろいろ調べてみるとprototype.jsが原因だった。
最近、アドセンスでの画像の表示が上から垂れ幕が降りてくるみたいに、徐々に表示されるように変わったのと関係してるのかもしれない。
こういうときは、関係してるプログラムを最新版にすると解決することが多いので、prototype.jsの最新版を探したら、1.7.2が見つかった。
その時まで使っていたのは「version 1.6.1」だった。

さっそく最新版に入れ替えて、表示させてみると、ばっちり表示された。やっぱりprototype.jsが問題だった。
prototype.jsを使った物は表示されていて、なぜアドセンスの方だけ表示が出来なかったのかは謎だけど
どちらもjavascriptを使うので、何か競合みたいなことが起きたんだと想像。

ついでにprototype.jsも

<script src=”//ajax.googleapis.com/ajax/libs/prototype/1.7.2.0/prototype.js”></script>

として、外部から利用するようにした。バージョン指定は、マイナー部分まで指定するとキャッシュが長くなるらしいので、ちゃんと指定しておいた。

Flickr APIのURLが変更になった。

Flickr APIを使ってるんだけど、いつの間にかエラーが出るようになっていた。
以下のエラーコード95が返ってくる。

<rsp stat=”fail”>
<err code=”95″ msg=”SSL is required”/>
</rsp>

海外のサイトを見ると、APIのリクエストURLが変更になったとのこと。

https://www.flickr.com/help/forum/en-us/72157645440333073/

Today’s the Day!

(Disclaimer, this post is probably only interesting to API developers)

It’s the day you’ve been preparing for, as of 10:00 PST this morning we will be switching the Flickr API to https-only access. We’ve had two blackouts, emailed all API key owners, and posted a bunch of info over on the code blog, so hopefully you’re ready.

とのことで、リクエストするときのURLを

http

https

へ変更しないと使えなくなっている。フリッカーのAPIのオーナーには全員メールをしたと書いてあるが、全く気づかなかった。。。

GoogleAppEngineで Python 2.5からPython 2.7へ切り替えた時文字化けする場合(テンプレート使用時)。

GoogleAppEngineで Python 2.5からPython 2.7へ切り替えは簡単にできたけど、なぜかテンプレートを使っているサイトが文字化け(タグがタグとして働かずそのまま表示されたり)する。

from google.appengine.ext.webapp import template

このテンプレを使用していたサイトで文字がおかしくなった。この中にはDJANGOというテンプレートエンジンが入っているらしい。

いろいろ調べたら、テンプレートの中のDJANGOのバージョンが上がったのが原因だった。プログラム自体は何もイジる必要はなくて、テンプレファイル側を書き換えるだけで良かった。それまで自動エスケープされていなかったのが、バージョンアップ以降自動エスケープされているのでHTML関係の文字の扱いを気をつけないといけない。

Django テンプレート言語

テンプレートブロック単位の制御
テンプレートで自動エスケープを制御するには、テンプレート (または テンプレートの一部) を、以下のように autoescape タグで囲みます:

{% autoescape off %}
こんにちは {{ name }} さん
{% endautoescape %}

上記の通り対処法は簡単で、指定のタグでテンプレ内のエスペープ処理してほしくない部分を囲むだけ。以上で解決。

Google App Engine で Python 2.5からPython 2.7へ切り替える

Google App Engineのダッシュボードに以下のようなメッセージがずっと表示されていた。

A version of this application is using the Python 2.5 runtime, which is deprecated!
The application should be updated to the Python 2.7 runtime as soon as possible, which offers performance improvements and many new features. Learn how simple it is to migrate your application to Python 2.7.

Python 2.5からPython 2.7へできるだけ早く切り替えるように、というメッセージ。面倒なので放置していたけど、思い切って移転作業をしてみた。結論から書くと思ったより簡単。調べ物の時間も入れて30分位でできた。

以下、Google App Engine で Python 2.5からPython 2.7へ切り替える方法

まずメインのプログラムファイル。

from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

これを削除して

import webapp2

とする。他のインポートしているものなどはそのままで大丈夫だった。

あと、クラス部分の

webapp.RequestHandler

webapp2.RequestHandler

とする

こういう作業はDevasというファイル置換ソフトを使って一括置換。

一番下の部分は

app = webapp2.WSGIApplication([(‘/’, MainPage)],
debug=True)

のようにappとする。(前はapplicationとしてた)

def main():
run_wsgi_app(application)

if __name__ == “__main__”:
main()

は要らないので全部削除。

app.yamlファイルは、

application: helloworld
version: 1
runtime: python27
api_version: 1
threadsafe: true
handlers:

として、次に

– url: /test
script: test.app

のように、拡張子をpyからappに変更。

それと

builtins:
– datastore_admin: on

これを下部に書いている場合は削除しないとエラーが出た。

 

あとプログラムのファイル内のソースは書き換える必要がなかった。ここをいじらないと行けないなら面倒で途中で諦めてたと思う。

エラーが出た場合はGAEのダッシュボード上のログのところを見ると、「E」と表示があるから、左上に「+」の部分をクリックすると詳細が表示されて、あとはグーグルでそのエラーを検索するとすべて解決できた。以上30分位でできた。

小さな会社の Google Apps 導入・設定ガイド (Small Business Support)