2018-01-01から1年間の記事一覧
Re:dashでメトリクスを作成する際に日別、週別、月別にデータの推移を見たく、いろいろ触ってみたので残しておく。データ分析対象のアプリケーションのDBはMySQLを使用している。 また、adwordsで使われている集客コストをspread sheetに吐き出して、Re:dash…
結論ですがmysqlとSQLiteの週単位に変換するための関数のズレが原因でした。週毎のCACをRe:dashで見れるようにしようとした際にハマりました。 CACはCost Acquisition Customerの略で「1顧客の獲得にいくらかかったか」を表す数字です。 この数字を週毎にチ…
cloud functions × puppeteer × Google Apps Scriptで定期実行されるクローラを作ってみます。 今回は毎週月曜に今週の金曜ロードショーをslackで通知させるようにしてみます。cloud functionsはGCPで利用できるAWSのlumbdaのようなもので、サーバーやランタ…
まずはspread sheetにgoogle adwordsの日毎のコストデータを吐き出させます。spread sheetのGoogle Adsというアドオンを使うのがシンプルで楽そうだなーと思い、試してみました。 実際にシンプルにadwordsのレポートデータを引っ張ってこれるんですが都度手…
QueryResultを使った週単位のデータ集計をしようとしたときの話。 分析対象のアプリのDBはmysqlを使っているのでその流れでdate_formatを使って書いたらエラーになった。mysqlの関数使えないのかー。どうやるんだー。となって公式から漁る。 が、見つからず…
タイトルのとおりの事象が発生。IE11でreact, redux-sagaの構成のフロントアプリケーションで外部アプリケーションからのwindow.location.hrefでの遷移時になぜか最新の情報が画面にレンダリングされない、、、というところから調査スタート。 safari, chrom…
GCPのアカウントで認証してproxy経由で接続させます。gcloudコマンドを使うのでインストールしてない方はこちらを参考に。 GCPのgcloudコマンドを公式に沿ってインストール - FFFT Cloud SQL Admin APIを利用するプロジェクトで有効にします。 Google Cloud …
Cloud Functionsで関数を作成するとデフォルトで下記の関数コードが生成されます。 exports.helloWorld = (req, res) => { let message = req.query.message || req.body.message || 'Hello World!'; res.status(200).send(message); };引数で渡されるreqでh…
まずはCloud Storageに適当なバケットを作成します。 作ったバケットに適当なファイルを入れます。自分は「test-20180903」というバケットに中身が「Hello,world」の「sample」というファイルを入れてます。 ※Cloud Storageのバケット名は全世界で未使用でな…
直前に下記の記事を書いたんですがCloud Functions触ったら30秒でできました。 便利ー。1分でlambdaとapi gatewayでAPIを作ってみる - FFFTGCPコンソールからCloud Functionsを選択して「関数を作成」から新しく関数を作ります。実はそのままページ下部の「…
1分でできちゃいます。やってみます。AWSコンソールからlambdaを選択して「関数を作成」を押します。デフォルトで「一から作成」が選択されたままになっているかと思います。 そのままさっと入力項目を埋めていきます。 3項目です。名前。なんでもいいです。…
ハマった。time - The Go Programming Language公式にはパース時の説明は特に載ってない。リクエストをstructにbindする処理のエラー内容を見るとRFC3339に準拠したフォーマットで送らないとパースできないとのこと。 厳格だー。下記のフォーマットでいけま…
Macでの手順を公式に沿ってまとめてみます。Windowsはこちら。 Google Cloud SDK ドキュメント | Cloud SDK | Google Cloud GCPのgcloudコマンドとは gcloud の概要 | Cloud SDK のドキュメント | Google Cloud 公式より引用。 gcloud は Google Cloud Platf…
GKEで新しくワークロードを追加しようとしてingressをcreateした際に下記のエラーが発生。 googleapi: Error 403: Quota 'BACKEND_SERVICES' exceeded. Limit: 9.0, quotaExceeded Compute Engine APIのBackend Servicesのリソースが足りねぇぞ、とのこと。…
JWTとは JSON Web Tokenを使っていて非常に便利なのでまとめてみます。 JSON Web TokenはJWTと略され、ジョットと読みます。jwt.ioこんな感じのトークンです。 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwia…
強い型づけと弱い型づけの話。 強い型づけはプログラムのコンパイル時にエラーを検知してくれる。 Javaやaltjava(scala, kotlinとか)、後はgolangなどの言語ですね。 対して弱い型づけはプログラムの実行時にエラーがはじめて検知される。 Rubyが代表的な言…
デフォルトでsentryが秘匿性の高さそうなものをマスクしてくれています。 下記を参照。Sensitive Data – Sentry Documentation追加でfilteredで表示されるようにしたい場合は対象プロジェクトのsettingからDATA PRIVACYのAdditional Sensitive Fieldsに追加…
developer.mozilla.orgURLSearchParams APIは、URLの細々した操作を簡略化してくれるもので自分がIEでぶちあたったのはx-www-form-urlencoded形式でAPIをコールする箇所でした。 こんな感じで使ってた。 const params = new URLSearchParams(); params.appen…
SPAの状態管理のパターンとパターン分けの考え方についてまとめたいと思います。 SPAの状態管理のパターンとパターン分けの課題 フロントエンドで持つ「状態」には様々なものがあります。 認証情報 検索クエリ APIをコールして取得するサーバサイドで管理さ…
Sentryの設定が完了したら、エラーの発生を開発者がすぐに知れるようにSlack連携をオススメします。 設定はとてもカンタン。 数分でできます。 まずはSlackのどこのチャネルで通知を受けるかを決めます。 チャネルを決めたらSlack Incoming Webhooksを使って…
Sentryはさまざまな言語に対応しているイベントログ収集ツールです。 サーバサイドのエラー検知にも大変便利に働くのですがやはりなかなか検知と詳細の把握が難しかったフロントエンドで最大の価値を発揮します。 エラーの発生デバイスやブラウザ、ユーザー…
react-reduxのアプリケーションにSentryを導入していきましょう。サンプルのプロジェクトはcreate-react-appを使用して下記の条件で作っています。 "react": "^16.4.1", "react-dom": "^16.4.1", "react-redux": "^5.0.7", "react-scripts": "1.1.4", "redux…
こちらの記事で諸々まとめてくれている。 medium.com最終的に記事を書いた人がreact-scripts-tsに向けて修正プルリク投げてそれがマージされているのでバージョンアップすれば解決します。 github.com 対応はシンプルでreact-scripts-tsのバージョンを2.16.0…
時の経過とともにシェアが緩やかに下がっているIEですがまだまだ全体の20%を占めているのが現状。みんなchrome使えばいいなーという想いはありますが現実的にIE対応しないと20%の人がサービス使えなくなっちゃいます。 IE対応を頑張るReactエンジニアのため…