Node.js始めました

JavaScript

フロントエンドかバックエンドどっちがやりたいかって聞かれると、フロントエンドがやりたい!って思うのに、JavaScriptをまともに書けないとかいう矛盾した感じを何とかしたくて、JavaScript力を上げることにした。

練習として、

サーバサイド : Node

Webアプリケーションフレームワーク : Express

テンプレートエンジン : EJS

を使った、はてなダイアリーのようなものを作ってみたいと思う。

(このテキストが分かりやすかったので、これのJavaScript版を作ってスキル身につけたい) github.com

HomebrewでNode入れるところから始めて、3時間くらいでデータベースから読み込んでテンプレート使って表示が出来るWebアプリが出来た。 f:id:yuki_tkd:20150706230039p:plain (idとtextをMySQLから引いてきてるだけだけど)

github.com

最終的に、VPSにデプロイしてポートフォリオサイトとして使えるWebアプリ作りたい。

感じたこと

ネスト深い

JavaScriptはイベント駆動なので、どうしてもネストが深くなってしまう。 これはJavaScript力がもっとあれば綺麗に書けるらしいし、今後はTypeScriptも導入していく予定なので、今のところは気にしないで行こう。

ORM

今はSQLをベタで書いてるんだけど、nodeのORMって何がいいんだろ。

node-dev便利

app.jsを立ち上げるとき、普通に

$ node app.js

すると、jsファイルに更新かかってもリロードされなくて不便。 node-devっていうのをnpmで入れておくと、

$ node-dev app.js

ってするだけで、更新があれば自動でリロードしてくれる。

node-devはデフォルトだとjsファイルしかトラッキングしないので、templateの中身変えても更新かからないので注意。(ハマった)

それから、node-devは更新するたびにMacの通知を送ってくるので、気になるならオフにしたほうが良い。

オフにするには、.node-dev.json

{
    "notify": false
}

って書いておけばOK

Ingressやりだしてから歩く距離が伸びた

タイトル通りですが、最近めっちゃIngressするようになって歩く距離が伸びました。 f:id:yuki_tkd:20150629220312p:plain Google Fitを見たところ、大体毎日5kmくらいは歩いてるみたい。 ところどころ10km近く歩いているのはIngressをするために外出したりした日。

今日も美味しいコーヒー豆と日本酒を買いに行くという名目で、Ingressしながら京都と奈良で歩いてたら、11kmも歩いてた。

ここまでハマったゲームはIngressが初めてかもしれない。まだA7だけど。 Ingress生活を快適にするために、良い靴まで買ってしまった。

長距離歩いた日のほうが思考がはっきりして、自分のことについてしっかり考えれる気がするから、Ingressをいつまで続けるかは分からないけど、長距離歩いたりする週間は残したい。

PerfumeOwl City聴きながら、Ingressするのが個人的なトレンド www.youtube.com

大学生の時間管理難しい

常に忙しい(気がしている)

常に忙しい気がしている。忙しいのを言い訳に、何もかもが中途半端にしてしまっていて良くない。 何もかもが中途半端になるのは忙しいからだよねーとか思ってたけど、夜寝る前に、今日一日何やったかな?って思い返すと、そんなにタスク消化して無くない?ってなる日が多い。

コンテキストスイッチ

僕は、タスクとタスクの切り替えにかなりのオーバーヘッドがかかる人間らしい。 CPUだけでなく脳にとってもコンテキストスイッチはオーバーヘッドなのでは!って信じてる。 けど、どうしても大学生は複数のタスクを頻繁に切り替えないといけない。 複数の科目を学習するし、アルバイトしたり、自習したり、家事をしたりと、違うジャンルでタスクが色々あるし、その日ごとに不規則な切り替えになる。

僕の考えた最強の一週間

講義の予定とかは自分で変えれないし、日ごとにタスクが変わるのは仕方ないとして、1週間単位では規則的になるように、30分単位でタスクを洗い出して、自分の理想の1週間をGoogle Spreadsheetに書き込んだ。

さすがに予定をそのまま載せるわけにはいかないので、激しくぼかしたが、こんな感じ。 f:id:yuki_tkd:20150621163315p:plain

洗いだした予定をタスクごとに集計して、1週間で少なくとも何に何時間かけないといけないか調べた。

僕の場合

他にも細々と時間使う必要があるものはあるけれど、大きな要因はこんな感じになった。

  • 睡眠時間 49時間
  • アルバイト 21時間
  • 移動時間 15.5時間
  • 大学の講義 12時間
  • 自由時間 29時間

考察してみる

理想の1週間で過ごしたとしても、自由時間が29時間しか取れない。思ったより少ない。 しかも、この自由時間は大学の課題やレポートや自習をしたり、友人と食事に行ったりとかいう時間を含めての自由時間なので、完全にフリーな時間は1/3も取れない。

ポートフォリオサイト作りたいけど、じっくり進められる時間取れないなって思ってたけど、そもそも自由に使える時間がそんなに無かった。

「講義よりアルバイトの時間長いじゃん。忙しいとか言うならアルバイト減らせよ」って言われそうだけど、エンジニアアルバイトをさせて頂いてるので、アルバイトの時間はエンジニアリングの勉強って感じで、自分の中では優先度高い。

自宅生なので移動時間がどうしても長い... けど、下宿したら家事の時間とか増えるし、お金かかるしなぁ...って感じ。

時間作り

移動時間に何かするってことと、自由時間をいかに大切に使うかってことが重要になってくる。

移動時間は平日毎日3時間くらいあるけど、満員電車なのでスマホくらいしか使えない。 なので、覚えるだけの勉強とかは、自由時間の間にまとめてスマホに突っ込んで、移動時間で覚えるようにしたいな。

自由時間を上手く使う方法は、いかに一つのタスクに集中して早く終わらせるかだと思うんだけど、rebuild.fmを聞いてたら、Pomodoro Techniqueっていうのが出てきたので、最近それを試している。

rebuild.fm

要は、3, 5, 15, 30分単位あたりでタイマーセットして、このタスクはこの時間内に終わらせる...!!って決めて取り掛かることらしい。 typesterさんはさらに、タスクリストと組み合わせると良いと仰っていたので、普段使ってるTrelloと組み合わせて運用している。

f:id:yuki_tkd:20150621170750p:plain

まだ始めてから2日だけど、いつもより集中出来てるし、タスクの達成率も上がってるので、 続けていきたい。

大学生の間にしか出来ないことって、講義以外だと研究とか交友関係広げることだと思ってるので、そっちに時間裂けるよう、無駄な時間過ごさないようにしていきたいなー。

名古屋ペンギン旅行してた

名古屋に旅行してた。先週の話だけど。

名古屋港水族館からの名古屋市立科学館からのPGCafeというペンギン盛りだくさんツアー。

名古屋港水族館、めっちゃ大きいしペンギンの数多くてペンギン好きにはたまらない感じだった。 アデリーペンギンとジェンツーペンギンとヒゲペンギンの三種類居るの確認した。 アデリーペンギンやはり可愛い。

ただ、全部ガラス越しだからカメラで写真はあんまり撮れなかった。アデリーペンギンは冷やさないとダメだから、ケープペンギンだけの京都水族館みたいに外から写真撮ったり出来ないっぽい。

f:id:yuki_tkd:20150620211826j:plain 一眼レフ欲しい...

名古屋港水族館のあと、科学館でプラネタリウムと展示見てから、大須にあるPGCafe行ってきた。 店内の至るところにペンギングッズ置いてあるし、メニューもペンギンだし通いたくなった...!! 京都にあれば通うのにっ...!!!! f:id:yuki_tkd:20150620211834j:plain

【4月は君の嘘】 1~5巻を読んだ

四月は君の嘘(1)

四月は君の嘘(1)

Kindleセールの時に、1~5巻までをまとめ買いした。 今期じゃないかもだけど最近アニメ化されて、Twitterとかで良い!って意見を見てたから、読んだことないけど5巻くらい買うかーって買ってみた。

結論から言うと凄く良かった。こんなことなら最後の11巻まで買えば良かった。

僕は普段あんまりアニメとか漫画とかを見ない|読まない人なんだけど、読んで良かったなって思える漫画だった。

こっからポエミーな感じなので、苦手な方は注意していただきたい。

大学3年生になって、今まで考えないように逃げてきたけど、自分は何の為に生きるのかっていうのを考える時期に来てると思ってて、この言葉が刺さった。

ピアノは嫌いだ それでもしがみついているのは きっと僕には何もないから ピアノを除けば僕は からっぽで 不細工な余韻しか残らない

1巻 有馬公生

別にエンジニアな自分が嫌いなわけでは無いんですが、ふと、 僕からコンピュータ関係のスキルを除いたら何が残るのだろう、と。

君はベートヴェンじゃないもんな 君はバッハでもなければショパンでもない  じゃあ君は誰なんだい? 君はどこにいるんだい?

3巻 黒猫

自分の周りには、僕より若いのにエンジニアとして優秀な人が居るし、 アイデアを出してモノを作るのが得意な人も居るし、 自分のやりたいことを見つけて起業をしようとしてる人も居る。 僕に何が出来るんだろうなー。

まあでも、どれだけ悩んでも結局はこれなのかなって気がする。

悲しくてもボロボロでもどん底にいても弾かなきゃだめなの  そうやって私達は生きていく人種なの

1巻 宮園かをり

僕は何か作るのが昔から好きで、ハードウェアだろうがソフトウェアだろうが作りたいモノがあったら、そのために必要な技術を勉強して作ってきたし、僕はこれからもそうやって何か作り続けたいんだろうなー。

Kindle本半額セールを終了2時間前に知った。

Kindle半額セール

週末から今日の午前中にかけてKindle本の一部が半額セールになっていた。 売値はそのままだけど、買うと半額Amazonポイントが付くのでオトク!ってことらしい。

セールが終わる2時間位前に知ったので、慌てて買いたいKindle本探したものの、すぐに終わってしまった。普段から欲しいものリスト活用するべきだった...

Kindleで本を買ったことが無かったので、何を買うか結構悩んだ。

今回のセールは技術書も半額になってたから欲しかった技術書を買おうかとKindle版探したけど、直前で踏みとどまってしまった。 少なくとも僕は技術書を前から順番に最後まで読むことは無くて、目次を見て分からないところや気になるところを開いて読むことが多いから、Kindleよりも本のほうが向いてそう。

Nexus 7を持ってるから、Kindle Paper whiteとかと違って解像度が十分なカラー液晶で読めるので、漫画を買うことにした。

買ったやつ

結局買ったのが「4月は君の嘘」の1~5巻

この漫画読んだ感想は別記事に。

四月は君の嘘(1)

四月は君の嘘(1)

電子書籍は漫画と相性が良い

初めて漫画を電子書籍で買ったけど、漫画は電子書籍と親和性高い気がした。 読み返したくなってもスマホあれば何処でも読めるし、本棚を圧迫することもないし。 これ以降買う漫画はKindle版が増えそう。

ただ、電子書籍だと読み終わった後に誰かに貸したり、売ったり出来ないから、 読んだことない漫画に手を出すのは、半額までしなくてもいいけどセールの時じゃないと手を出しにくいかなーって気がした。

漫画以外は

毎号買ってる雑誌のWiredは、雑誌を買うと電子書籍版のpdfを無料ダウンロードできるサービスをしてくれているので、毎号pdfでダウンロードしてるけど、結局読んでない。 情報量多いからタブレットで読むの大変だなっていう。 というかまぁ、雑誌買ってるから紙で読めるし、それなら紙で良いじゃんっていう。 雑誌をpdfだけで買ったらどんな感じなのかは良く分からない。今度試そう。

けど、Wiredのpdfサービスは、読まなくなった古い雑誌はデータがあるし読み返したくなっても大丈夫だろって捨てれるので嬉しい。

Scala入門(1) HelloWorldとテスト

Scala?

凄いエンジニアの方と話しているときに、Scalaが良いという話を聞いた。 Scalaって名前は聞いたことあるけど、今流行りの関数型言語?とかいうやつ?IQ145の美女?くらいのイメージしか無かったので、家に帰ってから調べてみたら興味をそそられた。

Scalaは静的型付け言語で、関数型言語オブジェクト指向言語の中間らしく、JVM上で実行されるのでJavaのクラスを使えるらしい。というかインラインでJavaが書けるらしい。面白そう。しかもコードが洗練されててカッコイイ!

Javaのクラスが使えるということは、困ったときはJavaっぽく書いたら良いし、AndroidScalaで開発出来るらしいし、難しそうだけど関数型言語の勉強も出来て良いのでは!って思って始めてみることにした。

Scala使うための環境構築

このサイトを参考にさせてもらいながらScalaの環境を導入した。 IDEEclipseIntelliJの2択らしいけど、普段AndroidStudioを使ってるのでIntelliJにした。 blog.chopschips.net

HelloWorld

このサイトを参考に、とりあえずHelloWorldを作った。 thachinohe.hatenablog.com

作ったコードがそのまんまだけどこれ。

object HelloWorld {
  def main (args: Array[String]){
    println(createGreeting(args))
  }
  def createGreeting (args: Array[String]) = {
    args.headOption match {
      case Some(name) => "Hello" + name + "!"
      case None => "Hello!"
    }
  }
}

色々調べながらこのコードについて理解したことをメモっておくと、

  • ScalaにはObjectとClassが両方あって、ObjectはJavaでいうシングルトンクラスに相当。
  • match文はJavaのswitch文を強力にした感じのやつで、型ごとに処理を分けたり、case文の中にifを入れたり出来る。かなり便利そう。
  • Scalaにはプリミティブ型が存在しない。つまりint, long, double, string, byteとかは無い。オブジェクトのInt, Long, Double, String, Byteを使う。
  • プリミティブ型が無いので、+-*/%とかの演算子も実はメソッドとして定義されてる。

HelloWorldのTest

ScalaのテストにはScalaTestというのを使うのが一般的らしい。

ScalaTestを使うと様々な書き方でテスト出来るらしいが、僕はxUnit系に慣れてるので何となくFlatSpecを使った。

built.sbtを見ると、

scalaVersion := "2.11.6"

って書かれてたので、ScalaTest使うために

libraryDependencies += "org.scalatest" % "scalatest_2.11" % "2.2.4" % "test"

を追加した。

書いたテストコードがこれ。

import org.scalatest._

/**
 * Created by yuki on 5/16/15.
 */
class HelloWorldTest extends FlatSpec {
  "No argment" should "return Hello!" in {
    val greeting = HelloWorld.createGreeting(Array())
    assert(greeting == "Hello!")
  }

  "With argment" should "return HelloTest!" in {
    val greet = HelloWorld.createGreeting(Array("Test"))
    assert(greet == "HelloTest!")
  }
}

IntelliJでテスト動かすとこんな感じでテストが通った! f:id:yuki_tkd:20150517004528p:plain

参考になるか分からないけど、プロジェクト一式はGithubに置いてある github.com

これだけだと全然Scalaっぽくないし、これから勉強してラムダ式とかカリー化とかクロージャとか使うようなもっとScalaらしいコードを書いていきたい。