仕事中の問題と解決メモ。

雑食系WEB開発者。最近はPythonとGCP、Vue.jsがメイン。株式会社ビズオーシャンで企画と開発運用、データ活用とか。https://github.com/uyamazak/

Vue.jsとElementで配列操作UIをつくる

現在、Vue.js 2とElementを使って、モバイル向け履歴書作成アプリを作成しているけど、学歴、職歴などでリスト要素の操作がいろいろ必要になってつくったので整理しておく。前提としてモバイル(タッチパネル)向けなので、PCではよくあるドラッグでの移動は…

Vue.js v2で親子間以外のイベントやり取り

最近はずっとVue.jsを使ってUIを開発しているけど、ページが複雑になるにつれ、どうしても親子間以外の兄弟とか、深くなったコンポーネントからとか、グローバルなイベントのやり取りが必要になってきた。発信側はthis.$emit(’foobar’, data)と、受信するコ…

Vue.jsでPWAアプリをつくりはじめた

bizoceanでは、ワードやエクセル形式の書式を配布しているが、ほとんど書式自体の編集が不要でワード・エクセルを使うまでもない書式もあるし、今後PCを使う人自体が減れば、どんどん利用も減っていくだろうと思う。個人的にもワード・エクセルは高機能すぎ…

Headless Chromeを使ったPDF変換サーバーをGitHubにあげた

以前から開発していたのが、だいぶ形になってきたのと、他のプロジェクトでも使っているので、共有も含めてGitHubにあげた。github.comDockerで動いて、URLを渡すとそのページをA4のPDFに変換して返してくれるシンプルなやつ。起動時にChrome本体とページを…

Headless Chrome + puppeteerを使ったHTML→PDF変換サーバーを作る puppeteer編

Headless Chromeを使ったHTML→PDF変換サーバー第3弾。前回は下記。 ヘッドレスChrome + Node.js + express + DockerでPDF生成サーバーを作る - 仕事中の問題と解決メモ。 ヘッドレスChromeを使ったHTML→PDF変換サーバーを作る 改善編 - 仕事中の問題と解決メ…

ヘッドレスChromeを使ったHTML→PDF変換サーバーを作る 改善編

以前とりあえず作ってみたサーバーが不安定なので、書き直すことにした。Dockerで動いてGETパラメータでURLを渡したらPDFが返ってくるというシンプルなもの。PDFのサイズ(現在はA4固定)等のオプションは起動時に固定してしまうので、変えられない。ローカ…

2018/1/26 Google Kubernetes Engine & Stackdriverでログが見れない問題

いつもGKEでデプロイした後は、Cloud ConsoleからStackdriverのログを眺めているけど、一向に出てこない。しばらくこちら側のログレベル設定を確認したり、kubectl logなどを見たけど正常。Twitter検索したら同じ症状の人が見つかる。gkeでstackdriverにログ…

GKE上の Django + ManifestStaticFilesStorage + Google Cloud Storage でValueError無限ループが起きてハマった話

Templyでは、Djangoのアプリが入ったDockerコンテナをGoogle Kubernetes Engine(GKE)で動かし、ファイルはGoogle Cloud Storage(GCS)で管理している。 temply.bizocean.jp本番公開してからデプロイ時にcss、jsなどの静的ファイルが更新されず困ったので…

vimのPython環境を再構築した

基本的にPythonの開発は社内のLinuxサーバー上でVimを使い行っている。Pythonを使うからには、やっぱりPEP8を守り、見た目も統一されたソースコードにしたいので、Vimに下記のプラグインを入れ、 github.comさらに.vimrcに下記を追加して保存時走るようにし…

DjangoのAdminsにメールが送られない時のチェックリスト

Djangoではsettings.pyのADMINSにメールアドレスを指定しておくと、エラー時に通知を送ってくれるので便利。でもこれまでの開発でもよくなぜか届かない問題があり、最近Templyの開発でも起きたので備忘録。temply.bizocean.jp まず、メールサーバーの設定が…

GCPのバグでGoogleのIssue Trackerに投稿して直してもらうまでの流れ

oceanusで使っているGCPのプロジェクトで、Cloud Functionsの関数の作成時、削除時にエラーが出て何もできない状況になった。Googleで検索しても解決策は見つからず、他のプロジェクトでは問題なくできる操作なので、明らかにバグだと判断して、Stack Overfl…

BigQueryに入れたアクセスログを調べたい時によく使うスニペットまとめ

よく忘れてDatalabの中を捜索するはめになるので、まとめておく レガシーSQL TABLE_DATE_RANGE 昔ながらの日付別テーブルに格納しているとき FROM TABLE_DATE_RANGE( [project_name:dataset_name.table_name_], TIMESTAMP("2017-11-27"), TIMESTAMP("2017-11…

gitでテストpushをたくさんしたいときのワンライナー

リモートレポジトリのWebHookとGoogle Cloud Functionsを使って、slack通知を作るときに使ったもの。今の日付(date)が入ったpush.testという名前のファイルを作って、コミットして、remote-nameのbranch-nameにプッシュして削除まで行う。 履歴はたくさん残…

gunicornの [CRITICAL] WORKER TIMEOUT で本当の原因がわからなくなる問題

GKE上で動かしているgunicornアプリケーションで、特に負荷が高いわけでもないのに、突然 [CRITICAL] WORKER TIMEOUT (pid:667)というログを出しまくって止まってしまうことが発生していた。いつなるかわからないのでしばらく見守っていたけど、原因を調べる…

ビズオーシャンから添付ファイルを簡単、安全に送るTemply公開しました

社外に書類などを送るときに、ZIPでパスワードかけて添付して送る、というのがめんどくさいので出来たサービスです。temply.bizocean.jpプレスリリース prtimes.jp サービスについては本サイトに書いてあるので、開発系の話をします。 目的 新卒入社3年目と…

GKEのコスト節約を考える2 CPUリクエストを調整してリソースを有効活用する

いろいろ調べてたら前回に引き続くことになった。uyamazak.hatenablog.comこれまでGKE上でpodが立ち上がらないエラーをkubectl evなどで確認すると原因はほぼ「Insufficient CPU」だった。oceanusは、BigQueryにデータを流すなどのあまりメモリを使わない処…

Google Container EngineがGoogke Kubernetes Engineになってた

それだけ。Kunernetesの名前が普及するのを待っていたのかな。略称はGCEとの兼ね合いもあり最初からGKEなので既定路線だったのかも。cloud.google.com

GKEのコスト節約を考える インスタンスをスケールアップしてノード数を5以下にする

2017/12/5追記 cloudplatform-jp.googleblog.comクラスタ料金が無料になったため、5ノード以下は考えなくてよくなりました。ただノード数を抑えることで、kubeシステム系の数は減らせるので、そちらはまだ有効そう。uyamazak.hatenablog.com 2017/12/5追記こ…

公開するサービス名とプロジェクト名を分けててよかった話

現在、ビズオーシャンでは、新しいサービスの開発と公開に向けて動いています。サービスの公開が近づき、サービス名も部内の投票を参考に責任者によって決められ、ロゴも作って、サブドメインも登録して、SSL証明書(Let's Encrypt)も作って、Djangoの設定…

GKEでKubernetes 1.8が使えるようになったのでCron Jobsを使う

cron的なバッチ処理をKubernetesで行えるCron Jobsが1.8から使えるようになって、ちょうど他のメンバーの新規プロジェクトで必要になったので使ってもらった。 kubernetes.io Prerequisites You need a working Kubernetes cluster at version >= 1.8 (for C…

ヘッドレスChrome + Node.js + express + DockerでPDF生成サーバーを作る

URLを渡すとChromeがPDFを作って返してくれるサーバーを作るお話。 業務用ソフトではよくPDFの帳票が必要になる。今作っているサービスでも必要になった。WEB系だとHTMLは生成しやすいので、それをPDFに変換するwkhtmltopdfなどのコマンドラインツールや、Ru…

Google Cloud DatalabでPython3が使えるようになってた

自社では、BigQueryのデータの分析とかには主にGoogle Cloud Datalabを使っている。cloud.google.com現在のドキュメントでは、GCEを使う方法しかのっていないが、公開当初はローカルのdockerで動かせる方法が書いてあって、現在も下記のようなコマンドで利用…

GoogleのCloud Pub/SubをやめてRedisのPub/Subに戻した話

要点を言えば、公式Pythonライブラリでメモリの問題が2回発生した上に、バージョンアップでさらにコントロールできないものになったので使うのをやめた。 自社用データ収集のプロジェクトoceanusでは、データをBigQueryに保存するだけでなく、データのリアル…

早速App Engineのmanaged SSLを有効化してみる

Let's Encryptから大きくなったSSL自動化の流れから、いつか来るだろうと思ってたのがついに来た。さっそく有効にした。cloudplatform.googleblog.com既存のプロジェクトはCloud Consoleで設定が必要。簡単だった。証明書は思っていた通りLet's Encrypt発行…

Raspberry Piで既存のコードを利用して複数のLEDチカチカさせたり、ブザーを鳴らしたりする

研究開発という建前で経費でRaspberry pi 3を買った。いろいろ揃えるのが面倒なので下記のセットを購入。kksmart Raspberry Pi 3 Model B ラズベリーパイ 3 モデル B コンプリートスターターキット 16GB (class 10)出版社/メーカー: kksmartメディア: エレク…

pythonのslackbotを使ってJSONを整形するボットを作る

新しく入ってきた人にPythonでSlack上の会話を翻訳するbotを作るにあたり、まずは自分でも作ってみた。yfp5521.hatenablog.com 使ったライブラリはこれ。普通にpipで入れられてすぐ使える。 GitHub - lins05/slackbot: A chat bot for Slack (https://slack.…

新しく入ってきた人にLinux、vim、Dockerなど開発環境を叩き込む1週間

詳しくは本人のブログだけど yfp5521.hatenablog.com 大きめのSlerに1年ちょっといた人がビズオーシャンに入ってきてくれた。 bizocean本体はクラウドではなく、データーセンターにあったり、CentOS6だったりPHPだったり、いろいろと退屈なので、私がoceanus…

scikit-learnを使ってナイーブベイズでお問合せ分類するまでの流れ

bizoceanのお問合せを自動で分類して、定型文で済むやつは送信前に出して、サポートコストの削減とともにユーザーがすぐ問題を解決できるようにしようと思い、まずはナイーブベイズを試してみる。環境は、Dockerで動かしたJupyterと、Python3.6とsklearn等を…

日本語の分かち書きにGoogle Cloud Natural Language APIを使う

日本語の文章を、検索用のデータにしたり、機械学習などする際に必須になる分かち書き。これまではMecabを使ってたけど、インストールが必要になり、辞書も変えたりすると結構大変。そこで、Google Cloud Natural Language APIを使ってみることにした。cloud…

Google Data StudioのためにMySQLのENGINE=MEMORYの調査をした

昨日書いたData Studio(以下DS)の記事で問題になっていたBigQuery(以下BQ)の割り当てエラー解消のため、専用のMySQLを立てることにした。メモリに乗せたテーブルで楽勝やろ、と内心思っていたが、そう簡単にはいかなかった。PostgreSQLではなく、MySQLに…