bz0のにっき

quick and dirty prototype

twitterのトップでコンソールから自動ツイートする

chrome拡張で簡単に定型文をツイートさせようと思っていて、そのツイート部分の実装です。
twitterのホーム画面で、下記コードをchromeのコンソール等から実行すると定型文をツイートできます。

下記ソースは、はじめのやつが動きます。
2つ目は挙動が不安定です。

formタグを埋め込んで実行させる方はCSPの問題でエラーになるのと
成功しても実行結果のJSONファイルがローカルダウンロードされてしまいます。

単純に入力したいテキストを埋め込んでボタン押すようにしました。


CSPエラー:

Refused to execute inline script because it violates the following Content Security Policy directive: "script-src https://connect.facebook.net https://cm.g.doubleclick.net https://ssl.google-analytics.com https://graph.facebook.com https://twitter.com 'unsafe-eval' https://*.twimg.com https://api.twitter.com https://analytics.twitter.com https://publish.twitter.com https://ton.twitter.com https://syndication.twitter.com https://www.google.com https://t.tellapart.com https://platform.twitter.com 'nonce-3fmPjUSbjydKKll2qfU3Hw==' https://www.google-analytics.com blob: 'self'". Either the 'unsafe-inline' keyword, a hash ('sha256-a3jrMYVXEEA6OiADmrxAYVqEyCuvciqKxYphw6Z0AiY='), or a nonce ('nonce-...') is required to enable inline execution.


twitter.comでコンソールからツイートを実行する

GoogleAnalyticsAPIを使って定期的にユーザサマリーをチャットに流してくれるライブラリを作った

目的

GoogleAnalyticsは、アクセスがほとんどなかろうと
無限に見ていられる悪魔のツールです。

その為、要点を定期的にチャットにぶん投げてくれる時間節約装置が欲しく作りました。

機能

googleAnalyticsAPIで、ユーザサマリー等を
自前のテンプレート形式で、チャットに自動通知してくれるライブラリを作りました。

まだテストも例外処理も使い方マニュアルも出来ておらず、とりあえず動いているレベルで拙いのですが。。。

github.com

下記のような感じでチャットに流れます。(chatwork)
アクセス数はゴミなのでスルーして下さい。。。

f:id:bz0:20171010005823p:plain

今後やるタスク

・テンプレートの追加
・例外処理
・使い方マニュアルの作成
・通知に、slack / メール通知を追加
・後入れで機能を足していったので
 コードが既にごちゃごちゃしている為、設計から考え直してみる

Google Analytics API(Management API)でビュー情報を取得する

何をしたのか

google analytics APIの「Core Reporting API」だと
サイト名やサイトURLが取れないようだったので、「Management API」でビュー情報からとるようにしてみた。

前提

Google Analytics のデータ構造はアカウント > プロパティ > ビューの構成になっている。
・ビューごとに、サービス アカウント IDのメルアドに権限の付与が必要
Google Analytics APIのライブラリ(SDK)がPHP 5.4以上なので、実行時のバージョンに注意する

準備

下記を読んで、APIキーの設定・composerでGoogle Analtics APIのライブラリをインストールしておく。

google analytics apiの利用方法
 https://qiita.com/zayarwinttun/items/90ef6979c644f262d0c4

google analytics apiの使い方
 https://syncer.jp/google-analytics-api-tutorial

・"google/apiclient": "1.*"でcomposerインストール
 "^2.0"とするとエラーが出てダウンロードできなかった為、1系を利用する。

Failed to download google/apiclient-services from dist: The process "unzip -qq -o '/var/www/html/gaApiClient/vendor/google/apiclient-services/cfe77a392d46e400cc90ece63d6dcc97' -d '/var/www/html/gaApiClient/vendor/composer/2223267b'" exceeded the timeout of 300 seconds.

注意

・ビュー情報を複数作成している場合、何故か1つしか取れなかった。
 今のところ未解決なので下記ソースを利用する場合は注意して下さい。

CSV読込して配列化 その2

CSV読み込むときに気を付けることをまとめてみました。

メモリを極力使わないようにする

ストリームを利用する

・大容量のCSVを読み込む際はストリームで「文字コード変換」を行う
 ストリームを利用すればメモリサイズを気にしなくてよくなる為

・ストリームフィルタを利用する際、iconvフィルタの利用は避ける
 iconvフィルタは不正なバイトが含まれていると全体を0バイトに変換してしまう
 http://d.hatena.ne.jp/hnw/20090317

CSVを一度に配列化してしまうと容量が大きい場合メモリを食いすぎる
 「 Stream_Filter_Mbstring」を使ってファイルを一行ずつ取得する
 http://nob-log.info/2012/04/17/stream_filter_mbstring/

エンコードの扱い

・文字エンコーディングの取り扱いはphpの各関数の実装に委ねられる

ロケールについて

・fgetcsv()はsetlocaleの影響を受ける
 ロケールhttps://wiki.archlinux.jp/index.php/%E3%83%AD%E3%82%B1%E3%83%BC%E3%83%AB
 
 ・ロケールとは
   ロケールはOSが持っている多言語対応の仕組み。
  利用する言語 / 文字エンコードの設定を行うことが出来る。

 ・環境によりsetlocaleが効かない
  https://mgng.mugbum.info/1014
  ※Windows では setlocale(LC_ALL, 'ja_JP.UTF-8') は効かない

・setlocaleの挙動はOSのロケールの挙動に依存しており
 かつ大抵の環境の Shift_JISロケールは腐っている

ロケール設定はプロセス全体に影響する。
 マルチスレッドサーバで実行した場合、ほかのスレッドのロケール設定に影響を受ける

結論

・fgetcsv()はロケールに影響を受ける
 環境によってsetlocaleが効かない / マルチスレッドサーバで実行したときに他のスレッドの
 ロケール設定に影響を受けるかもしれない事に注意する。

・大容量のCSVの読込を行う場合は、メモリ対策の為にストリームを利用する

CSV読込して配列化

前提:
・読み込むCSVファイルはSJISであること
・PHP5.3で動作させることが前提(5.3以上でも動くはず)

微妙なので、書き直したい。


CSV(SJIS)読込クラスです。

認知行動療法

やってみたいこと

思考のゆがみから、ストレスがたまりやすく体調を崩しやすいので
認知行動療法(まだ触りの知識しかないですが)的なことを試してみたいと思っています。

まずは自分の思考のクセを知るために、下記3点やってみようと思います。

・事象・その事象から自分が思ったことをevernoteにメモする
・思考がネガティブな方向に行っていると感じた場合は、別の現実的な可能性を考える
・書いたものを、3日おいて後から見返す(客観的にみるため)

この仕様を満たす簡単なアプリを作ってみることも出来そうですね。
とりあえずやってみて続くようなら自分用を作ってみたいです。

認知行動療法について調査まとめ

・1つの出来事に対して自分がどのように考え(思考)
 自分はどのように感じているか(感情)をわけて考える

・別の可能性を現実的に考えてみる
 証拠もないのに非現実的な考え方をしていくため、現実的に考えることが重要

・瞬時に浮かんでくる「認知のクセ」のゆがみをチェックする
 ・ゆがみ思考にまずは気がつくようにする
 ・暴走を止める

 ・日記を書く
  ・今日の出来事をシンプルに書く。
  ・出来事に対して感じたこと、考えたことことを書く。
  ・3日後に見直して、感じたことや考え方が現実に沿っているかをチェックする。

https://www.direct-commu.com/training/a_012.html
https://www.direct-commu.com/training/a_044.html

認知行動療法ツール集:
http://www.eijinkai.or.jp/cbt.html

好きとは何か?

好きとは何か?

メモに、「プログラミングが好き」と自分で書いて「何か違うな」と感じてしまったので
「好き」とは何かを考えてみるために、下記記事を読んで思ったことをまとめます。


君は好きで毎日プログラミングできるのか」と問われて
http://bugrammer.g.hatena.ne.jp/nisemono_san/20130610/1370881915

第一線で活躍するプログラマーが「どうやってプログラミングを学んだか」を語った!イベントレポート(その2)
https://techacademy.jp/magazine/1268

仕事好きと会社好きとプログラミング好き、どれですか?
http://el.jibun.atmarkit.co.jp/noriwo_t/2017/09/post_59.html

好きとは:

好きな人は、時間リソースをその事柄に躊躇なく突っ込める。
自分でやり始めていつのまにか出来るようになっている。(問題が起きても根気よく対処できる。どうでもいいことは途中で投げるはず)

という事で、客観的に「好きか」を判定する為には、どれだけの時間を費やすことができているかですね。(当たり前ですが)


・情熱 / 時間リソースを出来る限りそこに費やすことができるか?

 ・作るのが好きなんだなという人はずっと作っています
 ・長く続けられる人 / まつもとゆきひろさんはひとつの言語を20年間ずっと作っている


・自分の日常の中に入り込んでいるもの(好き=日常に紛れている)
トライアンドエラーの繰り返しの中でしか得ることはできないし、誰かから教わる類のスキルでもない

 プログラミング出来ない奴ちょっと来い
 http://b.hatena.ne.jp/entry/s/anond.hatelabo.jp/20130322031333

自分が何を求めているのかを明確にする

仕事に何を求めるか

1:会社という空間、場が好きな人(仲間タイプ)
2:お仕事をしてお金を稼ぐ、または地位を築くことが好きな人(お金タイプ)
3:仕事の内容にやりがいを感じている人(やりがいタイプ)

仕事において重視している事を自己認識することで、やりたい事も変わってきそう。
エンジニアだからプログラミングが好きでいないといけないわけではない。
欲望に素直になることで、目標達成しやすい、満足度も上がるはず。