IFTTT と Zapier を使い、Twitterへのツイートをためて、1日ごとに Github issue を作成・更新し、エンジニアの振り返り日記のまとめを作るサンプル。
IFTTT と Zapier を使い、Twitterへのツイートをためて、1日ごとに Github issue を作成・更新し、エンジニアの振り返り日記のまとめを作るサンプル。
全体の流れ
Twitter -> IFTTT -> Slack -> Zapier -> Github Issue
Zapierは有料なので IFTTT を一回挟んで料金節約する。
IFTTT
ハッシュタグつきでツイートすると、Slackのチャンネルに投稿する
Zapier でチャンネルへの投稿をトリガーにする
Zapier の Date / Time フィルタで Slack の投稿日時を、日本時間の YYYY-MM-DD にフォーマット
Zapier の Github Find or Create issue アクション
Issue タイトルに日付を入れる。 Issue タイトルで見つからなかったら Issue を新規作成する。
Zapier の Github Update Issues アクションを使う
今現在のBody + Slack のメッセージ内容を Body のUpdate 内容にする。 てきとうにMarkdownとかつけてみる。
結果のイメージ
https://github.com/YumaInaura/YumaInaura/issues/567
その他
yumainaura qiita zapier - Google Search
エンジニアの行動も心理要因に依存する。心理療法的な日記メソッドで、自己分析をして問題解決したい。 #ポエム
エンジニアの行動も心理要因に依存する。心理療法的な日記メソッドで、自己分析をして問題解決したい。 #ポエム
なぜ「わからないことを、人に聞くこと」がこんなに怖いのか、言語化と、自己分析をしておきたい。
問題提議。
分からないことを、聞かない時の弊害
- 要件定義がうまく出来ずに、あとから膨大な手戻りが発生する。
- プロジェクトのことがいつまでも理解できずに、なおさら質問できない悪循環が生まれる。
問題の本質はなんだろう
- たとえば、大きなデメリットを理解していても、それでも動けない自分に気づくならば、それは理解の問題ではなく、心理的要因の可能性が高いんじゃないだろうか。
- 世の中の問題の多くは「頭では理解しているはずなのに、なぜか、出来ない」ことによって起こると思う。
- 個人の性格がボトルネックになりがち。自分の性格分析は、してもし足りないぐらいだと思う。
「なぜ質問しづらいか」を自己分析する作業をしたい。
- 一般的に、心理療法では日記をつけることが勧められているが、これを自己分析にも応用したい。
- 僕の場合は、日記形式で思考をつらつらと連ねていく行為に、解決の糸口があるような実感を得ている。
- こんな風にMarkdown形式で見出しをつけながら、見出しと箇条書きで、まとめを作っていく。それすら辛く感じられるなら、絶対にバックスペースを押さない、ジャーナリング的手法でも良いかもしれない。
さあ、自己分析するぜ
- ここでいったんエネルギー切れ。本題までたどり着けなかった。またあとでやろう。
とあるエンジニアの問題意識。 意外にコスト感の高い #Markdown の論理マークアップ。会社の理想は基礎的勉強に理解のあること。優秀なエンジニアの口癖も「あれ、今何しようとしてたっけ」。 #ポエム
とあるエンジニアの問題意識。 意外にコスト感の高い #Markdown の論理マークアップ。会社の理想は基礎的勉強に理解のあること。優秀なエンジニアの口癖も「あれ、今何しようとしてたっけ」。 #ポエム
- Github ISsue や Qiitaなどに記事を書く時、Markdown でのマークアップに謎のコスト感を感じる。このコスト感はあまりに強大で、見出しをつけることさえ、本当にわずらわしく感じる。ほんのキー数個を叩くだけ、半角スペースを押すだけのことに、どうしても高いコスト感ある。なのでこうやって今は、箇条書きのリスト一個あたり、改行もせずに、つらつらと思うことを書き留めるスタイル。論理構成を最小化したい。それでトピックが大きくなっても、別の記事を作ろうとしたりしない。新規ポストこそ、他の世界にジャンプするかのような、莫大なコスト感がある。てきとうにScriptをかまして、Zapierとか経由して、見出し付、リスト化をしてくれるようにでもしようか。インプットのしやすさの問題と、アウトプットの見やすさの問題は、分離できるかもしれない。
- 問題意識を感じて、それをメモ用のアプリケーションに記録しようと思っている最中に、全て忘れて、何を考えていたか分からなくなってしまう問題に対策したい。こう書くといかにも頭が悪そうに見えるが、こういった人間の脳の、メモリの揮発的な現象は、よく観察すると、いたるところで起きている。僕が見る限り、複数の優秀なエンジニアの口癖も「あれ、今何しようとしてたっけ」だったり。
- エンジニアとして理想の労働環境について、いまいちど洗い直したい。たとえ夢物語だとしても、理想を。エネルギー管理への理解があること、昼寝ができること、自分が興味関心のある分野の、基礎的勉強をしても、決して怒られないこと。会社として本当にアウトプット推奨で、アウトプットが最大学習になるということに、理解があること。集中できる静かな環境があること。願わくは、DEEP WORK に紹介されているような、瞑想的集中エリアと、人と仕事ができるざわめきエリアが別れていて、交互に、自由に行き来ができること。
とあるエンジニアの問題意識。
とあるエンジニアの問題意識。
- Slackが集中力を阻害する。Slackを一瞬でも開くと、30秒は今やっていることを忘れる感覚がある。注意残余が起こる。だがこれなしには業務は進まぬ。あまりにも誘惑が大きい。集中力が分断されるのに慣れきってしまうと、そこから戻る方法がまるで分からなくなる。人間の脳はマルチタスキングはそもそも出来ないというが、比較的、それを上手にこなせている人はすごいと思う。
- チームやプロジェクトの状況によっては、ひたすらに単純作業をせざるを得ない場合もある。慣れ親しんだプロジェクトだと、色々な実装が既に軌道に乗っていて、エンジニアリングやプログラミングというよりも、事務作業をやっているような感覚になることがある。単純作業から全力で逃げようとしている自分に気づくが、誰かがやらなければ仕方がない。単純作業をどのような呼吸法で、メンタリングで乗り切ろうかという作戦を立てたい。難易度が低すぎる仕事は実はものすごく疲れる。生産性も悪くなる。
- プログラミングの善悪は、構成メンバーによって変わる。たとえばリファクタリングを是とするか、非とするかもそうだ。仮に4人のチームの3人が、リファクタリングを是としていたら、それが開発の是となる。ソフトウェア開発も人間がやっていることなので、絶対的な正解は存在しない。常に人間というコンテキストに依存している。プログラミングにおいて是非を考える時、必ず人を思いかべる。Aさんがああ言っていたな、とか、Bさんがこう考えているな、とかいうアンカーが羅針盤の役割を果たす。僕のように絶対主義を持たない日和見プログラマは、そのぐらいがちょうど良い。
海外の優秀なエンジニアはマネージャーより給与が高いらしい。 #エンジニア
海外の優秀なエンジニアはマネージャーより給与が高いらしい。 #エンジニア
優秀な技術者(もちろんプログラマー)を採用しようとした某企業。応募してきた若手技術者に「年収800万円以上なら就職してもよい」と言われ、面接官の課長は「私の給与よりはるかに高い」と怒ったそうだ。でも米国企業では技術者が1000万円近くで、現場のマネジャーが500万円なんて当たり前のこと。
— 木村岳史(東葛人) (@toukatsujin) February 6, 2019
反応
その課長の理論で言ったら、プロ野球球団の中で一番の高給取りがマネージャーになるな。
— ライネル (@p_p21318218) February 7, 2019
ただのマネジメント業務の癖にプレーヤーより給料安くて怒るとは…
芸能人のマネージャーって芸能人より給料高いんですか?
— ひがっしー (@tklogyk) February 7, 2019
という質問を返してみたらどうだろう?
プロとマネージャーが分離している産業を見ればあきらかで、プロのプレイヤーの方がマネージャーより多く取るのは当たり前に見られますよね。マネージャーはプレイヤーの2割くらいをマネジメント料として取る。一方、沢山マネージできると当然マネジメントのプロの方が年収高くなる。
— 崎村夏彦 (=nat) (@_nat) February 7, 2019
はじめてプログラミングを覚える時のように python を触る。エンジニアのビギナーズマインドに、再開するには別言語。 #ポエム
はじめてプログラミングを覚える時のように python を触る。エンジニアのビギナーズマインドに、再開するには別言語。 #ポエム
変数の中に文字列を埋め込むのは、どうやるの?
そういう初歩的なことの全てが、面白い。新鮮な感動がある。
- 他言語を習得した人にとっては、難易度が低い。
- とりたてて、大きな目的がないのが、むしろ良い。
- とるにたらない、小さな違いに、喜べることが良い。
ところで、一年に新しい言語を、一種類覚えなさいという教えがある。
達人プログラマという本に書かれていたような。別の本だったような。
新しい言語を覚えるのは、大変なことだと思っていた。だけど、むしろ癒やしになるかもしれない。
ひとつの言語ばかり触っていると、初歩的な文法は全て覚えてしまって、出来ゲーになってしまう。 知らない分野は相変わらず広大だけれど、だいだい、調べればなんでもできるだろうという感覚になってしまう。 ようするに飽きて退屈になってきてしまう。
飽きてきたら別言語
でも良いかもしれないな。プログラミングって要するに、暇つぶしだと思うし。
#python スクリプトからMedium #API を叩いて新規ポストする例。公式APIリファレンスより。 @yumainaura
python スクリプトからMedium APIを叩いて新規ポストする例。
Guide
https://github.com/Medium/medium-api-docs#33-posts
Ref
- Medium #API で使えるトークンを設定する。サポートに問い合わせして有効化してもらった例。 · Issue #554 · YumaInaura/YumaInaura
- #python から Medium #API を叩いて自分のユーザー情報を取得する例 · Issue #556 · YumaInaura/YumaInaura
Run
AUTHOR_ID=xxxxxxxxxxx TOKEN=xxxxxxxxxxxx python example.py
Script
- 本運用ではcanonicalUrlは外す。canonical属性は重複排除のための HTMLの指定。
# -*- coding: utf-8 -*- # https://github.com/Medium/medium-api-docs#33-posts import requests import os url = 'https://api.medium.com/v1/users/{author_id}/posts'.format(author_id=os.environ['AUTHOR_ID']) token = os.environ['TOKEN'] headers = { 'Authorization': 'Bearer {}'.format(token), 'Content-Type': 'application/json', } json = { "title": "Liverpool FC", "contentFormat": "html", "content": "<h1>Liverpool FC</h1><p>You’ll never walk alone.</p>", "canonicalUrl": "http://jamietalbot.com/posts/liverpool-fc", "tags": ["football", "sport", "Liverpool"], "publishStatus": "public" } res = requests.post(url, headers=headers, json=json) print(res.json())
Result
{u'data': {u'canonicalUrl': u'http://jamietalbot.com/posts/liverpool-fc', u'license': u'', u'title': u'Liverpool FC', u'url': u'https://medium.com/@YumaInaura/liverpool-fc-3c7cd8bad6ec', u'tags': [u'sports', u'football', u'liverpool'], u'authorId': u'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, u'publishedAt': 1549500000000, u'publishStatus': u'public', u'licenseUrl': u'https://medium.com/policy/9db0094a1e0f', u'id': u'3c7cd8bad6ec'}}
Script
トークンだけ指定すれば良いバージョン。
# -*- coding: utf-8 -*- import requests import os # Get Author Token url = 'https://api.medium.com/v1/me' token = os.environ['TOKEN'] headers = { 'Authorization': 'Bearer {}'.format(token), } res = requests.get(url, headers=headers) author_id = res.json()['data']['id'] print(res.json()) print "author id is {author_id}".format(author_id=author_id) # Post # https://github.com/Medium/medium-api-docs#33-posts url = 'https://api.medium.com/v1/users/{author_id}/posts'.format(author_id=author_id) token = os.environ['TOKEN'] headers = { 'Authorization': 'Bearer {}'.format(token), 'Content-Type': 'application/json', } json = { "title": "Liverpool FC", "contentFormat": "html", "content": "<h1>Liverpool FC</h1><p>You’ll never walk alone.</p>", "canonicalUrl": "http://jamietalbot.com/posts/liverpool-fc", "tags": ["football", "sport", "Liverpool"], "publishStatus": "public" } res = requests.post(url, headers=headers, json=json) print(res.json())