#WeJS 初参加記

「2周年記念:We Are JavaScripters! @26th【初心者歓迎LT大会】 」というイベントに参加してきました。

wajs.connpass.com

会場はGINZA SIX内のプレイドさんでした。最近行くイベントのプレイドさん率高し。

全部の発表は追い切れなかったので、聞いた中で印象に残ったものをピックアップします。

Higher-Order Function ~関数型に憧れて~(hand-dotさん)

github.com

明日から使えそうなJSのTipsでした。

具体例としてあげられていたのは、サザエさんのキャラクター情報が入ったハッシュの配列から、10歳未満の要素を抜き出すプログラムです。

元となる配列は以下の通り。

var sazaeCharacters = [
{name:'フグ田サザエ', age: 24},
{name:'磯野波平', age: 54},
{name:'磯野フネ', age: 28},
{name:'フグ田マスオ', age: 24},
{name:'磯野カツオ', age: 11},
{name:'磯野ワカメ', age: 9},
// 以下略
];

普通のforループを使用した処理は以下の通り。

let underTen = [];
for(let i = 0; i < sazaeCharacters.length; i++){
    if(sazaeCharacters[i].age < 10){
        underTen.push(sazaeCharacters[i]);
    }
}

Array.prototype.filter()を使って取得する例が以下の通り。

const isUnderTen = user => user.age < 10;
const underTen = sazaeCharacters.filter(isUnderTen);

空の配列を作成して代入する処理がなくなったので簡潔です。これはいい!と使ってみたくなります。

優れた具体例を挙げられるのは、説明能力の高さを感じます。

@kyasbal_1994さん

WebとカメラとARを組み合わせて大学の学祭で一般の方に触ってもらうなど、いろいろやっていく話でした。優秀な若者すげえ。

まとめ

Pure JS、React、その他FWの話が多かった今回のLTでした。逆にVue、TSとかは全然なかったですね。Pure JSの話は楽しく聞けたので自分の関心が分かってよかったです。

また本筋とは外れますが、デモアプリのホスティングはfirebaseappで、定番となっているのかなと。

今回、気になったLTの発表者のツイッターGitHubを見に行ったりしたのですが、「うわめっちゃ強いやん」となった率が100%でした。頑張っていきたいと思います。

おまけ

今回、手書きでメモを取りました。参加者は9割型PCでメモを取っていました。

自分以外いないものだと思っていましたが何人かいらっしゃって安心しました。

手書きのメモには以下の2つの利点があると思っています。

  • 書くという動作によって記憶に残しやすい
  • ネットサーフィンしないので話に集中しやすい

まあもちろん、紙の上にしか記録が残らない、アナログなので検索が効かないなど大きな欠点がありますが。

みんな何でメモを取っているのかは地味に気になるテーマですね。僕はEvernoteのときもありますが、たいてい見返さないです。むしろこのブログがメモかも。

【Windows】Java環境構築、Amazon Correttoで。

AWSがOpenJDKを提供するというニュースが入ってきました。

この記事では、プログラミングを始める人が、Amazon Correttoを使ってJavaの環境を作ろうとした時の手順を記載します。

環境

作業開始前

コマンドプロンプト上でJDKがインストールされていないことを確認します。

java -versionで確認できます。

f:id:alek3:20181115232827j:plain

ダウンロード

こちらのページにアクセスします。

Downloads for Amazon Corretto 8 - Amazon Corretto 8

今回はWindows環境へのインストールなので対応するものをダウンロードします。

f:id:alek3:20181115235016j:plain

ダウンロードした後はポチポチ次へボタンを押していくだけです。 f:id:alek3:20181115235304j:plain f:id:alek3:20181115235324j:plain f:id:alek3:20181115235339j:plain f:id:alek3:20181115235408j:plain f:id:alek3:20181115235424j:plain

パスの設定

次にパスを設定します。*1

システム > 環境変数を編集 を開きます。

ユーザー環境変数の「Path」を選択し、編集を選択します。

f:id:alek3:20181116002441j:plain

f:id:alek3:20181116003034j:plain

「新規」を選択 > 「C:\Program Files\Amazon Corretto\jdk1.8.0_192\bin」を入力 > 「OK」を選択。

環境変数が追加されていればOK。「OK」を選択して閉じます。 f:id:alek3:20181116002954j:plain

確認

改めてコマンドプロンプトを開き、 java -versionコマンドを打ちます。

以下の表示が出ていれば成功です。

f:id:alek3:20181116005101j:plain

おまけ(トラブルシューティング

Correttoをユーザー環境変数に登録していても、以下のエラーが表示されています。

f:id:alek3:20181118113336j:plain

システム環境変数のpathから、「C:\ProgramData\Oracle\Java\javapath」を削除します。

f:id:alek3:20181116005004j:plain

以上でOKです。

私はCorrettoのインストール前にOracleJavaをアンインストールしたので、もとのJDKの設定が残っていたのでしょう。

まとめ

これからJavaを始める想定で導入を書いてみました。OracleのOpenJDK一強の時代から変わっていったら面白いなと思います。

*1:自動でやってくれたら最高なのにな~と思いましたが贅沢すぎたようです。

行ってないけどまとめてみた転職LT #3 #jobchanger

ex-sier.connpass.com

残念ながら参加できませんでしたが、スライドは見たいと思っていたのでTLを眺めるついでにまとめました。

あわなさん

転職しなきゃやばい!!と思わずにはいられない状況です。それでも何十社も受けるガッツには頭が下がります。

ちなみに私も3年くらい前はモニターありませんでした。

なぜインフラになりたいのかは聞きたくなりました。

もんりぃ先生

カルチャーマッチが重要であると理解しました。自分のマインドなんて自分でもわからないよ、とヤケにならず、ちゃんとアウトプットしていきたいと思います。

私が一番嫌なのは、能力的・時間的にできそうもないことをやらされることです。

逆に、ゴールだけ決まっていてあとは好きにやってね的な状況は好みです。2,3人のチームが好みかも。

CTOまさたん

目標から逆算して今の行動を決めるというのは各所で出てくるので本当に大事なのだと思います。

「軸」にも似ていますね。

さすが転職サービスを手がけるFindyさんだけあって、自分たちに聞いてくれ!!という自信を感じます。

実際この前CEOのお話を伺いましたがめっちゃ楽しかったです。

がみさん

プレイドとともに最近イケイケのがみさん。ポジショントークと言い切る潔さもいいと思います。

「仕事のできないおじさんたちの食い扶持を稼ぐのはもっと辛い」これは日本の大企業あるある、特に優秀な若手ほどそう感じると思います。

逆に言うと「仕事ができなくてもおじさんになったら若者が食わしてくれる」って悪くない*1と感じる人もいるよなーとも思いました。

その他

みなさんSpeaker Deck使っているんですね。SlideShareは苦しいのかな?

*1:幸運だとは言えそう

Error:reading data: The file “manifest.plist” couldn’t be opened because there is no such file. の解消

ある日*1、AppCodeでアプリをビルドしようとしたところ、タイトルのようなエラーが出てきてビルドできなくなりました。

ググってもAppCodeの情報が全然出てこないので非常に困りました。

解決方法は以下の通りです。

  1. AppCodeの「1.Project」欄に赤字のmanifest.plistがあるのを確認する。
    見つからない場合は左上が「Project▼」になっているのを確認してください。他に「Files」とかになっている場合があります。 f:id:alek3:20181102130704p:plain

  2. manifest.plistを削除する

以上になります。

実体のないファイルがリンクだけ残ってしまっていたようです。

*1:もうちょっと補足するとビルド関係の変更があったコミットをプルした後

FindyさんのIT/Web業界のトレンド研究共有会に行ってきました!!!

こちらのイベントに参加しました!

findy.connpass.com

オフィスは五反田の一室。社員の名前が記載されたトイレの掃除当番表があり、なんかいいなと思いました笑

CEO山田さんのセッションでは、IT/Web業界のトレンド、つまり、どの業界が伸びているか、今後発展してきそうか、中心となる企業は何か、といった話をされていました。

参加者が10人程度と少人数だったため、参加者からの質問を受けながら進んでいきました。

ネタバレしていいか分からなかったので内容は記載しませんが、思ったことは起業家はどの業界に切り込んでいくか(好みはありつつも)相当戦略的に考えていること、日経新聞を読んでいこうということです。

1時間ほどのセッションのあとはお酒とピザをつまみながらの懇親会でした。*1参加者の皆さんの業界が意外とバラバラだったので面白かったです。結構皆さん充実して仕事してそうなのもいいですね。

また、途中ではCEOと1対1でお話できました。これが一番楽しかったです。本人の経験もそうなのですが、経営者同士のつながりもあるので、他の経営者の話になっても面白いんですよね。

例えば物流の最適化を掲げてコンテストで優勝したベンチャーの話*2や、そこから発展してドライバーは荷物で片手がふさがっているため両手で携帯を使えないという問題をVUI*3で解消できたら面白いよね、という話をしました。

普段会社に引きこもっている私とは対照的でした。

予定表では9時までと書いてあった気がしますが、ガッツリ10時までお時間をいただけました。ありがとうございました!!

*1:立ち話とも言う

*2:多分こちら→https://www.businessinsider.jp/post-174551

*3:Voice UI 要するに音声認識

IntelliJ IDEA で Spring Boot 入門

経緯

今のプロジェクトはSpring Frameworkを用いているのですが、すでに組み上がった状態から私が参画しているため、構築の仕方が分かっていないという課題がありました。

そのため、当初はSpringでHello Worldしようと考えていました。しかし、それもかなり難しいと分かったので、お手軽なSpring BootでHello Worldすることにしました。

また、EclipseならびにSTSではなく、IntelliJ IDEAを使ってみようと思います。

ゴール

Spring Bootの以下のチュートリアルの「HTTP is the Platform」の項まで進めること。

spring.io

使用プログラム

始め方

IDEA上でSpring Bootプロジェクトを始める方法が紹介されていました。これを見つけられたおかげでだいぶ楽になりました!

qiita.com

これに基づいてやっていきます。

まず、IntelliJ IDEAを開き、「File > New > Project」*1

「Spring Initializer」を選択して「Next」 f:id:alek3:20181028205140p:plain

Artifactを適当なプロジェクト名、Typeを今回は「Maven POM」に設定する。 f:id:alek3:20181028205616p:plain

Dependencyを選択します。チュートリアルに従い、CoreからLombok、WebからWeb、SQLからJPAとH2を選択します。*2 f:id:alek3:20181028211917p:plain

次の画面でプロジェクト名とフォルダを設定して、「Finish」をクリック。

プロジェクトが作成されました。なんか下で動いている感が出ているので、それが終わったタイミングで右下の「Import Changes」をクリック。(「Enable Auto-Import」をクリックしてもよい) f:id:alek3:20181028210335p:plain


(ここら辺から手順が怪しいですが)左上にある「Project」を右クリックして、「New > Module」を選択。

Artifactを適当に設定し*3、Typeを「Maven POM」にして「Next」をクリック。 f:id:alek3:20181028211833p:plain

Dependencyはプロジェクト作成の時と同じです。 f:id:alek3:20181028212135p:plain

次の画面でモジュールの格納場所とかをプロジェクトのルートフォルダの下に設定して「Finish」をクリック。


最後に、Project Structureを設定します。

「File > Project Structure」

「Module」を選択し、作成したModuleを選択、「Javaディレクトリを選択した状態で、「Sources」をクリック。 f:id:alek3:20181028213257p:plain

以上で終わりです。あとはチュートリアルにしたがってソースを書いていくだけです。

様々なトラブル

……と順調に進むはずもなく、様々なエラーに見舞われました。

エラーが発生してアプリケーションが実行できない

アプリケーションを実施したところ、以下のエラーが発生しました。

Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException

ググったらドンピシャの回答がありました。ありがとうございます!

qiita.com

ただ元のレポジトリにはこれがpom.xmlに入ってなかったのでどうして必要なのかは不明。

@Dataアノテーション付与したのにGetterとSetterが設定されてないっぽい

以下のようなエラーが発生していてGetterやSetterがIDEに認識されていません。(赤字になっています。)

f:id:alek3:20181028215227p:plain

これはIDEAの設定の問題でした。ここを読んでその通りに実行すると解消されます。*4

stackoverflow.com

POSTの結果が想定通りにならない

チュートリアル内で以下のコマンドをたたくように書かれていました。

curl -X POST localhost:8080/employees -H 'Content-type:application/json' -d '{"name": "Samwise Gamgee", "role": "gardener"}'

しかし、このコマンドをそのままコピペするのは誤りで、うまくいきません。

誤ったコマンドとその結果

C:\Users\hoge\IdeaProjects\spring-boot-tutorial>curl -X POST localhost:8080/employees -H 'Content-type:application/json' -d '{"name": "Samwise Gamgee", "role": "gardener"}'
{"timestamp":"2018-10-28T08:28:10.333+0000","status":415,"error":"Unsupported Media Type","message":"Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported","path":"/employees"}curl: (6) Could not resolve host: Samwise Gamgee,
curl: (6) Could not resolve host: role
curl: (3) [globbing] unmatched close brace/bracket in column 9

かなり調べたらこの記事にたどり着いきました。

stackoverflow.com

ダブルクォーテーションのみを使ってJSON内はエスケープして使えというものです。

正しいコマンドとその結果

C:\Users\hoge\IdeaProjects\spring-boot-tutorial>curl -X POST localhost:8080/employees -H "Content-type:application/json" -d "{\"name\": \"Samwise Gamgee\", \"role\": \"gardener\"}"
{"id":3,"name":"Samwise Gamgee","role":"gardener"}

前にもこの罠に陥った気がします。お恥ずかしい……。

まとめ

どうもSpringは入門するのが難しい印象があるのですが、自力でそこそこ進められたので良かったです。

*1:ウェルカムページが開かれていた場合は、新しいプロジェクトを作るみたいなやつをクリックする

*2:これがpom.xmlに反映されます。

*3:今回はチュートリアルの内容から推測してnonrestにしましたが、実際何でもいい

*4:Slf4jのlogが認識されないエラーも同時に解消されます。

#技術書典5 エモ枠『セイチョウ・ジャーニー』『完全SIer脱出マニュアル』

小話

AとB、二人の会社員がいた。二人は同期で、今はたまたま同じプロジェクトに所属していた。


能力や、仕事に対する価値観が似通っていたためか、二人は親しい関係にあった。

プロジェクトも終わりに差し掛かったある日、二人は上司に会議室に呼ばれた。

「新しいプロジェクトが立ち上げられる予定である。そのプロジェクトは会社にとってチャレンジングなものだが、やる価値は非常に高い。君たちは興味あるかね?」

Aは迷った。あまりに唐突だったからだ。興味はそそられるが、ここでYesというべきか決めきれなかった。

Aが戸惑っている最中、Bが声を上げた。「ぜひやりたいです!」

かくしてBがその新しいプロジェクトにアサインされた。プロジェクトは困難を乗り越え大成功を収め、Bは次々と大きな仕事を任されるようになった。

一方Aは、良くも悪くも平均的なキャリアを進むこととなった。あのとき、先にAが声を上げていれば、立場は入れ替わっていたのかもしれない。

『セイチョウ・ジャーニー』

いきなり小話から入ってしまったが、要点は「何かを掴み取るには、声をすばやく上げることが大事」ということです。

技術書典5で『セイチョウ・ジャーニー』を著したGrowthfactionのメンバーは、てぃーびーさんのメンバー募集に「声をすばやく上げ」た人たちです。

tbpgr.hatenablog.com

*1

growthfaction.booth.pm

中身についての感想ですが、これまたてぃーびーさんのパートには共感するものがありました。ゲームをやりこんでいくことで、ゲームそのものの上達だけではなくて友達もできるという嬉しい経験は、私にもあります。

一方、これを仕事に当てはめようとすると、追加で考慮すべき要素が2つ増えます。1つはお金です。お金と成長はイコールではないものの密接に関わっていきます。もう1つはゴールが無数に存在することです。ゲームでは「最強」というゴールがポピュラーであり非常にわかりやすいですが、仕事に関しては自分なりの目標を立てていく必要があります。

さて、先程の小話にはもう一つ要点があります。それは、声を上げるためには自分の行きたいところがどこか決める必要がある、ということです。

チャンスは常に突然やってきます。それを掴み取れるか否かは、普段からそれを待ち構えているかによります。先程チャンスを掴んだBさんは、実は普段から目標についてアウトプットしていたり、すでに別の機会でのチャレンジを通じて、自分の目標をブラッシュアップしていました。だから、どのようなチャンスを自分が求めているか分かっているし、チャンスへのアンテナがビンビンに張られていたわけです。

『完全SIer脱出マニュアル』

転職に向かう舗装された高速道路、それがこの書籍です。

techbookfest.org

作中での「SIer」の定義は狭く、私はのっけからその定義から外れていました。しかし、「マニュアル」と題名にある通り、これに従っていけば転職できそうな印象を受けます。

特筆すべきは、これが著者のgamiさんだけはなく様々な方の経験を総合したものであるということです。これはPodcastしがないラジオ」で様々なゲストからキャリアを聞いてきたことが生きています。すると、マニュアルとしてバランスの取れたものになり、無用な失敗を経験せず済みます。

あと表紙めっちゃいいっすねこれ。

まとめ

とりあえずブログとツイッターのフォローを増やしました。

*1:boothのリンクを貼りたかったけど場所わかりませんでした。→教えていただきました(追記済み)