taiki-t's diary

きぎょうにっき, React Native, Rails そして雑多な記録: The world is waiting for you to give it a meaning.

人生から遅刻が消えてた

人生からいつからか遅刻が消えていた。遅刻があった頃となかった頃で何が違かったのか書いてみる。 遅刻がない人にとっては当たり前なんだろうけど。

出発時間じゃなくて準備完了時間で行動するようになった

以前は「◯分に出発すれば大丈夫」という考えていたがそれだとその時間に準備が終わっておらず、結果バタバタするということが多かった。 それを「◯分までに準備が終わっておけば大丈夫」に切り替えてから遅刻が消えたように思う。 出かける頃には準備が終わっているので、バタつくこともなくなった。

準備にかかる時間を織り込むようになった

上に書いたとおり以前は「◯分に出発すれば大丈夫」で準備を初めても○分に準備が終わるということがなかった。しかも○分に準備が終わってもそもそもダメなのだ。それは出発時間なのだから。 今は出発時間の30分まえには準備が終わってることを目標にして、そして準備には1時間かかることにしている。結果、出かける時間の1時間半前にはそのときやってる作業をやめるようになった。これでバタつかなくて良いようになった。

意識の変化

意識の変化っていうとふわっとしていて微妙だけど、要するに準備を終える時間が意識の上でのデッドラインに切り替わった。出発時刻はそもそもなのであまり意識に上がっていない。準備が終わったあと、改めてちゃんと意識に上ってくるというか。

年齢の変化

年齢が上がるにつれ脳がそういうことできるように変化していったのかな〜という気はせんでもない。「おまえら全員ADHD」これ兄貴が担任から高校のとき言われたらしいw 診断は受けたわけじゃないけど否定はしない。その先生は理解があったので発言に悪意はないし不快にもなっていない。

応用

資料作りとかにも応用していきたい。Rails Developers Meetup 2018 Day 3 Extreme|IT勉強会ならTECH PLAY[テックプレイ]のための資料が全然できていないw 「木曜までに完成させる、完成には1日2時間必要、それが1週間なので」というように言い聞かせていくか…って明日木曜日じゃねーかw

但し書き

そうは言ったものの、僕の場合遅刻が頻繁にあったわけじゃなくて「時間ぴったりに着く」が常習になっていた。その点見積もりは人よりかなりうまかったと思う(?)。「時間に厳しいんでwぴったりですw」と伝えるのが鉄板ネタだった。今でもその名残で、待ち合わせだと割と前の段階で到着点には3分に着くとか、7分に着くだとか分単位で伝えることができる。ただ何かイレギュラーなことがあるとダメだったわけだ。それを含めてなくなったわけだな。

称賛

最初からできてる人はすごい

曲作り

soundcloud.com

これは楽譜アプリから作ったから楽譜がある

他、もう8年前くらいに作った曲とかも掘り出したので全部まとめて上げた

日記

なんか翻訳したいなーと衝動が出たのでとりあえずReact Navigationの最初のところだけ訳した。本家のページに反映する方法がよくわかってないし、ざっと訳した感じなのでとりあえずここにおいておく。Docusaurusの仕組みに乗っかって、crowdinというところにアップロードすれば良いぽいけど。 気が向いたらまたやる。


Hello React Navigation · React Navigation (v2)

より

Hello React Navigation

webブラウザではアンカータグ(<a>)を使って異なるページへリンクできます。ユーザがリンクをクリックすると、そのURLがブラウザの履歴スタックに追加されます。ユーザーが戻るボタンを押すと、ブラウザは追加したものを履歴スタックの一番上から取り出します。それにより、現在アクティブなページは1つ前に訪れたページになります。React Nativeには、webブラウザにあるような「最初から存在するグローバルな履歴スタック」といった概念はありません。そうです。ここでReact Navigationが登場します。

React Navigationのスタックナビゲーターによって、アプリはスクリーン間を遷移し、ナビゲーションヒストリーを管理できるようになります。アプリがスタックナビゲーターを1つだけ使うのであれば、概念的にはwebブラウザがナビゲーションステートを処理する方法に似ています。ユーザーの操作に合わせて、アプリはナビゲーションステートに要素の追加と取り出しを行います。そしてその結果、ユーザーは別なスクリーンを見ることになります。この一連の仕組みにおけるwebブラウザとReact Navigationの重要な違いは、React Navigationのスタックナビゲーターはジェスチャーとアニメーションを提供することです。これは通常AndroidiOSでスタック内のルートをナビゲーションする時に期待されるものです。

React Navigationを使い始めるために必要なのはcreateStackNavigatorと呼ばれる関数だけです。

スタックナビゲーターを作る

createStackNavigatorはReactコンポーネントを返す関数です。これはルート設定オブジェクトとオプションオブジェクトをとります(下記の例ではオプションオブジェクトについては一旦省略します)。createStackNavigatorはReact Componentを返すので、App.jsから直接エクスポートしてアプリのルートコンポーネントとして使えます。

一括ダウンロードがないページで無理やり全部ダウンロードするchrome console スニペット

プロローグ

一括ダウンロードしたいけど一括ダウンロードボタンがない時がある。 ログインが必要ない画面だったらwgetなりで引っ張ってくればいいんだけど、管理画面とかだとちょっとしたそういうのがめんどくさい。 chrome consoleからやればページさえ開けていれば一括ではないけれど自動化できるのでそうすることにした。

コード

const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms))
const links = $$("任意のセレクター, a要素を選択")
for (const link of links) { link.click(); await sleep(3000); console.log(link) }

sleepは状況に合わせて適当に時間を。for...ofを使ったのは、forEachとかmap内では非同期処理ができなかったから。

papertrailのlogダウンロードならこんな感じ

const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms))
const links = $$("#archives-list > ul > li > span > a")
for (const link of links) { link.click(); await sleep(3000); console.log(link) }

セレクターもchrome consoleで簡単にとってこれる

f:id:taiki-t:20180521200939p:plain

余談

最近暑くね

曲作り

はい

soundcloud.com

手書きで楽譜をかけるアプリをiPadに入れたので記念に作ってみたやつ タッチノーテーションてやつ。音はLogic Xのピアノに差し替えてある。

React Native (iOS)で電話番号のリンク

Androidはまた別ぽいけどiOSだけ対応でざっくりやるならこんな感じ

<View>
  <Text
    style={{textDecorationLine: 'underline' }}
    onPress={() => {
      // <actural phone number>は実際の番号で置き換える
      const url = 'tel:<actural phone number>'
      Linking.openURL(url).catch(err => console.error('An error occurred', err));
    }}
  >
    電話をかける
  </Text>
</View>

Linkingコンポーネント使ってtel:nnnuuuummmm形式のurlひらけば良い

メモ: GitHubにpush/pullする時に毎回SSH key使うためにパスワード入れないといけない問題

極たまに設定が必要な状況になって毎回調べてる気がするのでメモ これ:

Generating a new SSH key and adding it to the ssh-agent - User Documentation