ラベル google app engine の投稿を表示しています。 すべての投稿を表示
ラベル google app engine の投稿を表示しています。 すべての投稿を表示

2019年4月21日日曜日

空き時間に合わせて本を一冊、無作為に青空文庫の公開中の作品から提案するページ

あまりにもgoogle app engine上でphpを動かすのが私でも楽過ぎたので、調子に乗って表題のようなものを作ってしまいました。
見てくれは地味で恐縮ですが、こんな感じです(javascriptで動作します)。


今回の一冊 🔄
リクエスト中...


ご希望の読書量は:
+その他の検索条件  
児童書は?
旧字は?
旧かなは?
読みたいジャンルは?
著者名(and,or,notは正規表現でお願いします)


とりあえず何でもいいからランダムに一冊選べるといいなあ、とずっと思っていたのですが、ついでに時間をつぶしたい時間を指定できればいいかな、と思って作ってみたところ、思いのほか気に入ったので、さらに提案機能をオリジン間リソース共有可能なAPI化して公開してみました。
この上の画面は、そのAPIをajaxで呼び出して実装しています。

作品が気に入らなかったらリロード絵文字(絵文字が見えない場合は「今回の一冊」という行)をクリックしますと、読書時間に合わせた別の作品を提案します。

それにしても、こういう一発ネタも膨大なデータをそろえて公開してくれている人や組織、団体様あってこそでございます。
今回は青空文庫さんからGitHubさん経由でデータを拝借して実現できました。
ありがとうございます。

geocitiesや大学のサイトなどで公開されている作品は除外しましたが、提案候補は一万五千冊を超えてます。
すごい。

なお、この例のようなデータを取得するAPIの詳細についてはこちらをご参照ください。
お読みいただいてありがとうございました。

---
2019/07/13 選択対象元リストを表示する機能(Selection candidate listボタン)を追加しました
2019/08/27 著者名を正規表現(perl互換)を用いて絞り込む機能を追加しました。

2019年4月12日金曜日

ローカル環境にgoogle謹製SDKをインストールせずにGoogle App Engineにプロジェクトをdeployしてみる

たった数年前なのに、Google App Engine(以下GAE)というサービスがいろいろなものと統合されちゃって最近ではGoogle Cloud Platform(以下GCP)とかいうことにしたんですって奥様。

で、今も稼働中の、とあるサーバ機能を持つアプリはeclipseでdeployしてた覚えがあるんですが、もう既に安定稼働につきメンテナンス不要モードに入って何年もたっていて、GAEにアプリをdeployする方法も忘れちゃいました。

そこで、GAEの知識を更新したくなったので、一つなんかやってみるべえ、と思い立ちました。

今ではプロジェクトに選択できる言語が増えていますね。
無償枠で使える言語中から選ぶとすると、javaでのプロジェクトはdeployも運用もすでに経験済みというか運用中だからパスするとして、pythonはインデント縛りのおかげで私にとってメンテがだるい言語だし(インデントを忘れているのか意図しているのかわかりづらいケースがイヤ)、goは開発環境を整えるところから始めなくちゃいけないし、ということで、結局、残っている言語はphpとなりました。

そこで、phpで、アクセスされたら問答無用で四字熟語を送信するサーバを作って、それをGAEにdeployして運用してみようと思います。

余談ですが、以前と大きく変わった点としては、「組織」ってのが必須になっていることです。
これは私のアカウントがG Suiteのせいかもしれません(東日本大震災時に計画停電のせいで自宅サーバがぶっ飛んだ時にgoogle様に独自ドメイン用MXをお願いしたらなぜか今ではG Suiteというサービスになってしまったんですよねぇ)。
そして、めったやたらに権限が細かい。
何をするためにどんな権限が必要なのかがとってもわかりづらくて、プロジェクトを追加する権限は一体どれなんだ、と片っ端から権限を与えてはプロジェクト作成を試すという頭の悪いことをしてしまいましたが、結局どれが「組織なし」へプロジェクトの新規作成ができる権限なのかさっぱりわかりませんでした。
まあ、この辺りは本題から外れますのでいい加減にするとして、本題に戻ります。

ともかくGCP上でプロジェクトを作成してしまいましょう。
さすがにこの手順の解説は端折ります。
ブラウザ画面左上にプロジェクト名が表示が表示されていますから、そこからちゃちゃっと追加してください。

プロジェクトが無事生成出来たら、今度は画面右上の
というアイコンボタンをクリックしますと、bash(Cloud-shell)が立ち上がっちゃいます。

こうなったら、とりあえず自分のプログラムをこのコンソールが立ち上がっているところにダウンロードします。
とりあえず、まずはgitでhttps経由でcloneしてみます。
gitコマンドの使い方は、あまりに文献が豊富なのでここでは説明しませんが、オレオレサーバからhttps経由でcloneしてみます。
無論、別にhttpsでgitじゃなくてもいいんですけど、私が構築してあるgitのbareなリポジトリはgitbucketを利用させていただいている関係でhttpd経由でアクセスするお約束なんですが、そのhttpdがhttps経由でしかgitbucketにアクセスさせない定義になっているというだけの理由です。
あとで触れますがgitである必要性は全くありませんがともあれ説明手順が楽なので一通りこの前提で説明します。

1) オレオレサーバなのでhttps経由の場合は証明書が証明になってねぇよと怒られるので、gitさんに検証をしないで黙って持って来いとお願いする設定にします。
$ git config --global http.sslVerify false
2) オレオレサーバからデプロイしたいプロジェクトをcloneします。
3) cloneしたディレクトリにおります。
4) deployします。
$ gcloud app deploy

以上で終了です。
たったこんだけ。
app.yamlを書き忘れていても3)の段階で書いちゃえばOK。Cloud-shellからはemacsもvimも使えますので宗教論争も無縁です。え?edですか? それはないみたいですね。

んー。gitって何それ?という方に朗報です。
実はscpもsftpもwgetもcurlもCloud-shellから使えるんです。
ですので、開発したプロジェクト一式をzipかなんかで圧縮して、それをCloud-shell上でダウンロードして、展開するだけでいいわけです。
書庫の展開にはunzipもtarも、その他めぼしいところはそろっています。

方法はどうあれ、ソースをgetして展開してdeployしておしまい。
ちょっと前までが信じられないほど極めてシンプルです。

自分の管理下にあるサーバにSDKだのなんだの、得体のしれないものを一切インストールする必要がありません。Cloud-shell上に一式そろっています。

わしの環境じゃあSDKの実行にゃあpython2.7以上が必要じゃけえのう、OSのパッケージ管理システムから外してmake installせんならんけえのう、とか細かいことは何も考えずにデプロイできます。

一度デプロイしちゃえばこっちのものなので、あとはgit cloneしたり tar zxvfしたディレクトリをrm -frしちゃってください。まあ、記念に残しといてもいいですけど。

いやあ、httpsをしゃべれてプログラムも実行できるんですからインスタンス時間が28時間まで無料なGAEってホントにまいっちゃいますね。

で、何をdeployしたのかというと、アクセスすると約7千件あるデータベースの中から四字熟語を1つだけあなたに提案する「提案型四字熟語供給システム」です。大げさでいいでしょ。
インタフェイスはJSONです。供給されるのは四字熟語と、その読み。
どこからでも使えるようにオリジン間リソース共有に対応しています。
一日一語で覚えてゆきましょう。

以上です。
こんな記事をお読みいただいてありがとうございました。

2013年12月31日火曜日

google app engine で文字化け(split)

自作の逆ジオコーディングサービスをgoogle様にホスティングしていただいていて、それをjavaでもって実装していた。

ちょっと考えがあって実装してみたら実に秒からミリ秒単位への高速化を実現。
最初からやっとけよ!っていう内容なんですけどね。
無料枠と有料枠の端境でDataStoreとInstanceのバランスをとることもうまくいけそうだなあ、なんて年末にホクホク。

で、デプロイしたらとたんに文字化け。12/31早朝に。
データもソースも全部UTF8で固めてあっても。
イヤになるねぇ。Latin1圏がうらやましい。

結論はString.split()。
こいつのソース読んでないけど、これを行うと文字化けする。

やっぱ他人が作ったライブラリはわかんないね。
オブジェクト原理主義者の犯行だな!

ていうかいいよ別にバイト列で・・・
オブジェクト指向だ!!!!!!!とか、肩に力入りすぎ。この言語。