ゆるふわ技術日誌

エンジニア見習いの悪戦苦闘日記

「手を止めてちょっとすると自動保存するアレ」 #62

今日やったこと

今日はいちにちコードを書くお仕事でした。

学んだことはたくさんあるんですが、コードをポンとアップするわけにもいかないのがアレなところ。

「手を止めてちょっとすると自動保存するアレ」を作ったので作り方を忘れないように書いておきます。

手を止めてちょっとすると自動保存するアレ?

Googleドキュメント的な。タタタッと文字を打って、ちょこっと手を止めると勝手に保存の処理が走るやつ。

どうやって実装するのがいいかなぁなんて思ってる人の役に立てば幸いです。

ちなみにコードは置けないので作り方の方針だけ。

どうするか

setTimeoutを使います。

文字を入力すると同時onChangeかなにかでにsetTimeoutを作る。

で、また文字を打つと、前のsetTimeoutを破棄して次のsetTimeoutを作ると。

そうすることで最後に手を止めてから一定の時間が経過したタイミングで好きな処理を走らせることができますよね。

終わってみれば簡単なことだったんですが、作ってる間はウンウン悩んでしまいました。

雑談

いやぁ、8時間コードゴリゴリたのしいですね。疲れるけど。

明日はコード書かない方のバイトです。(結局月2から3くらいでこっちも続けることになった)

朝から晩までお外にいるのでそれはそれで疲れる。勉強する時間取れるといいけど…。

React+Reduxだぞオラオラ #61

今日やったこと

React+Redux!!!

今日は特段新しいことをしたということはないのですが、react-reduxでWebアプリ的な何かを作っていました。(講義の課題です。)

なにかをモクモクと作るのはたのしいですね。

先日の記事で書いたmaterial-uiのSnackbarも実装しました。こんな感じ。

f:id:uutarou:20170714202511g:plain

これは業務コードではないので掲載できますねw

だんだんReduxわかるようになってきた。嬉しい。

material-uiの他にも諸々使っていて、課題が完全に業務のための練習台になりつつあります。

雑談

Amazonギフト券7000円分もらいました。

IoTしたい欲がすごいのでIRKitでも買っちゃおうかなぁ。

SimpleDateFormatのparseでコケるときに確認すること #60

今日やったこと

SimpleDateFormatのparse

今日は講義で作らされている作っているAndroidアプリ開発について。(というよりJavaのオハナシです。)

JavaThu, 13 Jul 2017 18:00:15 +0900 こういう形式の文字列をDate型に変換したいとき、ありませんか?

こんな感じで

public class Main {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z");
        System.out.println(sdf.parse("Thu, 13 Jul 2017 18:00:15 +0900"));
    }
}

SimpleDateFormatのparseメソッドを使うと実現できる…といろんな記事に書いているのですが、実際に実行すると

Exception in thread "main" java.text.ParseException: Unparseable date: "Thu, 13 Jul 2017 18:00:15 +0900"
    at java.text.DateFormat.parse(DateFormat.java:366)
    at Main.main(Main.java:15)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

Unparseableですって奥さん…。

おかしいなーと数時間も頭を悩ませてしまいましたが、正解はこうでした。

public class Main {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH);
        System.out.println(sdf.parse("Thu, 13 Jul 2017 18:00:15 +0900"));
    }
}

3行目、SimpleDateFormatのコンストラクタの第二引数にLocaleを渡しています。

これでちゃんと Thu Jul 13 18:00:15 JST 2017 という出力が得られます。ヤッタネ。

どういうことなの

勘のいい方はどういうことかすでにお分かりかと思いますが、なんでLocaleを指定すると動いたかというと、先程のLocaleの指定なしsdfでformatしてみると 木, 13 7 2017 22:08:43 +0900 という出力が返ってきます。

…。これが犯人でした。

パターン文字列 EEEってLocaleによって出力が変わっちゃうんですね。環境依存にならないためにもLocaleの指定はした方が良さそうですね。


なんとなくQiitaにも投げました。内容同じです。

qiita.com

雑談

この講義のためだけに週1回だけJava書いてるわけですが、やっぱりこういうかっちりした言語はそれはそれでたのしいです。


研究室、自己推薦通りました👍

hubコマンド入れた #59

今日やったこと

hubコマンドを入れた。

いやね、開いてるプロジェクトのGithubのページがコマンドラインから開けたら便利だなっておもったんですよ。

remoteのURL取ってくるのなんて簡単だし、そういうコマンド作ろうと思えばすぐ作れそうな割に需要ありそうじゃない?天才では?…と思って作るぞ〜と息巻いていたんですが、ぼくのような凡人が思いつくようなものはすでにこの世に存在していました😔

それがhubコマンド。

github.com

てか、いま気がついたけど公式ですねこれ…。

Go言語で書かれている模様。

当初の目的であったGithubのページをコマンドラインから開くのは

(プロジェクト下で)
$ hub browse

でいけます。最初だけユーザー名とかパスワード聞かれた気がするけど、プライベートリポジトリだったからかも。

ちなみにbrowseコマンドの実装は多分コレ。

github.com

Go全然わからないけど余裕ができたら読みたい。(そんなに難しい実装じゃない…気がする)

他にもusername/reponameとかでcloneしたりとかGithubを便利にコマンドラインから使えるツールっぽいのでうまいこと便利なところは使いこなしていければな、と。

雑談

今日は1日お出かけしていました。

内容がお粗末、つらいなぁ。

material-uiのSnackbar with Redux #58

今日やったこと

バイトでした。今日はバイト先での出来事というか得た知見を。

material-uiのSnackbar with Redux

(こんなピンポイントな記事が何かの役に立つかは謎ですが。。。)

ボタンを押すとテキストエリアの文字が何処かへ送信されるみたいなモノを作っていました。NDAに誤って触れないように必要以上に注意を払いすぎた結果やたら抽象的な表現が多いですが気にしないでください)

保存が完了したらSnackbarで「保存しました」みたいに出したいと。

そういったものを作っていたのですが、Snackbarの仕様が厄介というか。openというpropにtrueを渡すと表示されて、autoHideDurationで指定したミリ秒後に消えます。ただ、opentrueにしたままだとビューのレンダリングが走るたびにSnackbarが表示されるという挙動をしてしまうので、表示し終わったらopenfalseにしてやる必要があります。(でも表示中にfalseにすると消えちゃう。)

ちゃんとドキュメント読めと言う話なのですが、SnackbarにはonRequestCloseというpropがあって関数を渡すと、autoHideDurationで指定したミリ秒後に消えるタイミング or 外の領域をクリックしてSnackbarが消えるタイミングで呼ばれます。(ちなみに引数にどの原因で消えるのかを取るのでなにか分岐させたいときはその値を使うといいですね。そんなことある?って感じはしますが。)

つまり、表示状態をstateに持っておいてonRequestCloseの中で、それを切り替えるactionをdispatchしてあげればOKですね。ここにたどり着くまで3時間位かかってしまった。

回りくどいけどちゃんとドキュメント読んでから実装は考えようね。という話でした。

雑談

フロントエンド、楽しくなってきたぞ…!?

Semantic UI触りたい #57

今日やったこと

Fetch APIを使ってみた

Ajaxをしたくてaxiosと悩んでFetchを使った。

qiita.com

かんたん、すばらし。

Semantic UI使いたい

弊サークルでは何故か部室IoTプロジェクトが進行していて、Webのフロントエンドを書いてたのですが

f:id:uutarou:20170710171326p:plain

なんというか、いかにもmaterial-uiって感じだし、他のUIライブラリ的なのにも触ってみたいと思っていたらSemantic UIなるものを教えてもらった。

semantic-ui.com

かっこよくて素敵。

しかも、React対応してるみたい。

github.com

使いたいなーと思ってたんですけど、タイムアウト。進捗〜。

雑談

やることたくさん。TSURAIゼ★←?

AndroidのListView #56

今日やったこと

ListView

毎日技術日誌が始まって以来ずっとWeb系の技術ばかりやってたので「こいつWebにしか興味ないんか?」と思っている人も多いハズ。

部分的には正解だったりしますが、それ以外のことにも(特に最近は)興味ありますよ、ちゃんと。

というわけで今日はAndroid Studio使って云々してました。(講義の課題でやらなきゃならなくなったという部分もある)

昔ちょっとだけAndroidアプリやったことあったけどもはやなにも覚えていなかったので初心に帰ってListViewをちょこちょこ。

f:id:uutarou:20170709224210p:plain

(おいこんなの中学生でもできるぞ…とか言わないでほしい。)

なんというか、Androidアプリ開発の勉強ってどこから手を付ければいいのかもよくわからないしウムム…。

雑談

とあるSlackで熱い技術討論が行われているところをずっと眺めてたんですが、この人達はなんで会話の流れと同じ速度でいろんなことを飲み込んでるのだろうと思ってしまった。

どうやったらああなれるのだろうか。場数を踏めば僕もそうなるのだろうか。

こうやって悩んでる時間に一行でも多くのコードを書けということなのだろうか。

つらいし、つらい。悔しい。