2014-01-01から1年間の記事一覧

続・Excelで作ったツールを業務運用にのせる場合に考えておくべきこと

前日の続きです。こういう考えに基づいて、メリットとデメリットを勘案した上で、Excelツールを作って運用にあげたとします。 そうすると得てして起こりがちなのが、 勘案した上で気にしない事にしたデメリットの存在をすっかり忘れてしまう ということです…

Excelで作ったツールを業務運用にのせる場合に考えておくべきこと

いつもと少し毛色の違った話題。システム屋をやっていると、Excelに数式やVBAマクロを埋め込んだツールを作り込むことがよくあります。自分やチーム用の便利ツールとして作るときもあれば、構築したシステムの補助輪的役割をもつものであったり、逆に業務の…

Google Cloud SDK を完全にアンインストールする方法

GAE

GAELauncherによるupdateでは、/usr/local/bin および /usr/local 配下にシンボリックリンクが作成される。 gcloudでupdateすると、それは作成されない。Cloud SDK を完全にアンインストールするには、次のようにしたらいいんじゃないかと思う。 google-clou…

【未解決】CloudSDKをアップデートしたら、PATHが最新のディレクトリにならない→対処療法あり

GAE

いつからそうなったのか、きっかけがわからないし、未だに解決していないのだが、起こったこと時系列でメモしてみる。 OAuth の検証をしようと思い、とあるサンプルコードをダウンロードして、ローカル開発サーバで実行してみた。 認証処理の途中で、from n…

loggingのログレベルの指定方法

GAE

過去記事 http://d.hatena.ne.jp/noazoh/20140731/1406783304 の補足。開発サーバのログレベルはアプリケーションごとに設定することができる。Google App Engine Launcherにて、プロジェクトのApplication Settings で、起動時フラグを設定してやることによ…

HTTPリクエストのメッセージ長の制限は?

GAE

HTTP GETおよびPOSTのリクエストメッセージにサイズ制限はあるのか?調べ中。GETメッセージ2047byte説がある。2009年の記事。 http://d.hatena.ne.jp/Kazumi007/20090921/1253501500 POSTメッセージ10MByte説がある。2011年の記事。 http://php6.jp/python/2…

リストを逆順に並べ替えるreverse()メソッドには戻り値がない

リストを逆順に並べ替えるにはいくつか方法があるが、そのうちの リストオブジェクト.reverse()であるが、これって、逆順に並べ替えた結果を返すfunctionなのではなく、リストオブジェクトの中身を実際に並べ替えてしまうmethodなんですね。 つまり、こうい…

ウェブブラウザの自動テストにおいて、クリックできない場所にあるエレメントはclick()できない

タイトルだけ見ると、当たり前すぎて何言ってんの感があるわけだが。こんなWebページがあるとする・・・クリッカブルマップがあり、そのマップ上の地点をクリックすると、その地点に関するとあるデータがダウンロードできるようなWebページが。 この地点が膨…

文字コードがUTF-8のCSVファイルを読み込む

絶対忘れるので書いておく。まず、pythonでcsvを読み込むには、csv.reader() を使う。 これは、1行分のデータが配列になって帰ってくるものなので、項目の何番目は何の項目、ってのを自分でわかっている必要がある。次に、csvファイルの先頭行をヘッダとして…

開発サーバでTaskQueueする際の注意点

GAE

参考: http://knightso.hateblo.jp/entry/2014/06/10/080720開発サーバ上でのtaskqueueにおいては、queue.yamlに設定したrateの設定は無視される。 たとえば5分おきに実行させたいと思って、rate: 20/h とやっても、開発サーバ上ではwaitせず連続して処理…

appengine_config.pyに、PYTHONPATHを切る

GAE

サードパーティ製のPythonライブラリを使おうと思った時、うまくimportできるものとそうでないものがある。importできない原因の1つに、ライブラリ自身が依存している他パッケージをimportする際に、そのパッケージにPYTHONPATHが通っていること前提になっ…

Modelのプロパティのデータ型が違うと、こうなる

GAE

先日、こんなトラブルがあった。 bulkloaderにて、とあるデータを取り込む。 開発コンソールの Datastore Viewer で中身を確認。ちゃんと入ってる。 自分のプログラムから、そのデータをクエリで取得すると、特定のプロパティだけ、どのレコードも常に値が N…

テスト中にてっとり早くdatastoreの中身をクリアする方法

GAE

ローカル開発サーバで開発・テスト中に、あるカインドの全エンティティを削除したい場合、ローカル開発サーバの管理コンソールの Interactive Console を使うと良い。(http://localhost:ポート番号/console) from google.appengine.ext import ndb from 場…

ゼロ埋め方法いろいろ

いつも忘れるので備忘。 数値のゼロ埋め方法。 val = 123 #推奨 "{0:0>5}".format(val) #古い方法 "%05d" % val #いったん文字列にする str(val).zfill(5) #いったん文字列にする。埋め草を指定できる str(val).rjust(5, "0")

GAEでREST的なGETを行う−URLルーティング方法2種

GAE

たとえば、検索条件に従って検索を行うhogeというページがあったとすると、検索条件をサーバ側に送信する方法には次のようなものがあるだろう。 方法1 GETメソッドで、URLにパラメータを付与する。 http://サーバアドレス/hoge?param1=xxxx&param2=yyyy&par…

コーディング スタイルガイド 抜粋

自分用に抜粋。 ファイル名は、小文字+アンスコ形式。 クラス名はPascal形式(単語の先頭を大文字、アンスコ使わない)。 グローバル変数は、小文字+アンスコ形式。 定数は、大文字+アンスコ形式。 メソッド・関数は、小文字+アンスコ形式。 ローカル変…

サーバ側のインデックス削除(プロジェクトが複数ある場合)

GAE

インデックスの削除のやり方をググると、 appcfg.py vacuum_indexes をやれ、という情報に行き当たるのであるが、渡しているパラメータについて説明がないことが多くて混乱するのでメモっておく。基本形はこうだ。 appcfg.py vacuum_indexes フォルダ名 -A …

datastoreのfilterについての注意

GAE

datastoreでfilterを行うとき、次のように、"="の前にスペースを空ける必要があるのだが、その操作によってインデックスが設定される。 datas = カインド名.all().filter("カラム名 =", "hoge")index.yaml - kind: カインド名 properties: - name: カラム名…

テンプレート内で変数に代入したい

お題:A.html、B.html の2つで、hoge.html というテンプレートを使い回している(=includeしている)として、ページタイトルをAとBで異なる物にしたい。タイトルは固定的な文字列なので、ハンドラーから渡すんじゃなく、テンプレート内で定数のように定義…

ローカル開発サーバで、-clear_datastore=yes オプションつけて起動したら、すぐにオプション外しとけっての

GAE

普段、GAE Launcher つかって、開発サーバ起動するじゃないすか。 で、データストアが消えないように、自分の好きな場所にデータストアを保存するように設定しとくじゃないすか。 そしたら、今回は全部クリアしたいなーというときには、あえて、GAE Launcher…

関数へ引数を参照渡しできない件について

言い古された話ではあるようですが、pythonは、基本的に、値渡しです。たとえば、3つぐらい配列があって、関数にその3つの配列のガワを渡して、関数の中でappendしてほしいよ、てな時どうするかというと、戻り値をタプルとして複数返せることを利用するの…

タプル げに素晴らしい

お題:YYYY/MM/DD形式の日付文字列を、年・月・日に分割する dateStr = '2014/07/31' yy, mm, dd = dateStr.split('/')なんと簡単なんだ...

ログ出力方法(開発サーバ)

GAE

import logging ... logging.debug("hoge")とやるわけだが、ログレベルは、開発サーバでは、dev_appengine.pyの起動パラメータに指定してやる。 --log_level=debugdebug/info/warning/critical/error のいずれか。なお、ググると、良く「以下をmain()に記述…

ローカル開発サーバで、マシン再起動時にDatastoreが消えるのを防ぐ

GAE

ローカル開発サーバにおけるDatastoreの保存先ファイルは、tempファイルであり、マシンを再起動すると消えてしまう。 これを防ぐには、AppLauncherにて Editメニュー⇒Application Settings を開き Extra Flags: の欄に、以下のように設定する --datastore_pa…

bulkloaderでUTF-8のファイルをアップロードするときの注意

GAE

bulkloaderでUTF-8のファイルをアップロードする際は、BOMなしにすること! BOMありにすると、ファイルの先頭のデータが認識されなくなる。 この現象を発見した経緯 (1)アップロードさせたいテストデータをExcelで作成し、CSVファイルとして保存。 (2)bulklo…

Datastore関連でよくわかってなかったこと整理

GAE

わかっているようでわかってなかったので整理。 用語 kind RDBでいうところのテーブルのこと Entity RDBでいうところのレコードのこと #テーブルのことじゃなかった! Propery RDBでいうところのカラムのこと Tips 異なるバージョン間のDatastoreは別々にな…

%Y-%m-%dT%H:%M:%S の T って何なの

GAEのbulkloaderがらみで疑問に思ったこと。bulkloader.yaml に、date型のプロパティに、 transform.import_date_time(%Y-%m-%dT%H:%M:%S) という初期値がセットされていた。この書式部分の仕様は、Python の strptime() に渡す書式と同一だそうで、 http://…

webapp2で、ソースファイルをサブフォルダに置きたい

GAE

webapp2のサンプルでは、ほとんどのファイルがアプリケーションのルートディレクトリに置かれているので、ソースコードをサブフォルダに置きたい場合のやり方がわかりにくい。ちなみに、Python2.5 + webapp だった時代は、このようにやってた。 ディレクトリ…

MacOS X 10.8 で 、PyDevインタープリタが登録できない

OS X 10.8 + Aptana でPyDevインタープリタの登録ができない。http://stackoverflow.com/questions/5595276/pydev-eclipse-python-interpreters-error-stdlib-not-foundで、原因はこれだったhttp://stackoverflow.com/questions/11702139/pydev-debugger-una…

Aptana Studio 3 に Google Plugin for Eclipse がインストールできない

Google Plugin for Eclipse を使いたい。eclipse 4.3 にはすんなり入ったが、Aptana Studio 3 に入れると依存関係エラーになってインストールできない。#ちなみに、Aptana Studio 3 は、Eclipse3.7(Indigo)がベースになっている #(と、about画面を見て判断…