行ってないけどまとめてみた転職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のリンクを貼りたかったけど場所わかりませんでした。→教えていただきました(追記済み)

レビュー『金融に未来はあるか』

金融機関に勤める友人におすすめされたので買って読んでみました。

せっかくなので学んだことを書いてみたいと思います。前提知識は必要ないと思いますが、経済学の知識が多少あるとさらに読みやすいと思います。

なお私自身は一応経済学部を卒業したレベルで、現在の職業はSEです。

ギャンブルと保険の相違

書中の序盤で批判していたのは、金融取引の一部はギャンブルでしょというものです。例えば自分が病気になった時にお金がもらえる生命保険はリスクヘッジですが、いきすぎたCDSはただのギャンブルだよという主張です。 P51に賭けと保険の違いが述べられています。

1892年、競馬ファンだった判事のヘンリー・ホーキンス卿は、英国法における賭けの意味を次のように定義した。「二人の人物が、不確実な将来のある出来事について互いに反対の結果を予想すると明言し、その出来事の結果次第で一方が他方から金を獲得するという契約」であると。保険はこれとは異なる。ポッツのもう少しぎこちない表現によると、保険の本質とは「被保険者が想定する災難が起こった場合、それによって彼が被る不利益に鑑み、保証を行う契約」である。

いうまでもなく人類はギャンブルが好きです*1。そのうえ胴元は儲けやすく、ギャンブルの参加者はしばしば人生を破壊されます。こういう理由のため、ギャンブルは厳しく制限されています。しかし、金融機関はこういうギャンブル性の高い商品を売りまくっていましたよね?と筆者は批判を展開しています。

おまけに確率論的に計算可能な「リスク」だけではなく、どんなリスクが有るかすら分かっていないという「ブラックスワン」というのもあります。数学を駆使して新商品を生み出し、それを大量に流通させて持ち合うことで、誰がどんなリスクを取っているのか誰もわからなくなっていきました。「ブラックスワン」が現れやすい状況と言えるでしょう。

感想としては、「ギャンブルは胴元が儲かるってそれ一番言われてるから!!」です。あと一般論的に、人生におけるリスクの把握と管理はサボっちゃいけないよなと。

投資銀行の抱える利益相反

投資銀行利益相反を抱えているのは書中で何度も強調されていますが、P141にその構造が述べられています。

知識豊富な顧客は胴元の的である。(中略)事情通の参加者の存在が恐れられ、事情に疎い大半の顧客の足が遠のく恐れがあるからだ。だからこそ、「賭博場」にビジネスを呼び込むことと、賭けの対象であるリスクの根本的性質について広く知らしめることの間には、利害衝突が内在するのである。

賭博場という表現が当てはまるのは上で述べたとおりです。ちなみに、そのすぐ後で、トレーダーが顧客情報を使っていると書いてありました。そういう情報交換って禁止されているんじゃなかったっけ?と思いましたが、そのへんの線引きはちょっとよくわかりませんでした。

2008年の金融危機の引き金になったものに、住宅ローンの破綻があることは有名です。証券化したりリスク別に分解して販売したりと色々策を講じ、今まで貸せなかった人に貸しまくるようになりました。当然そのうち崩壊するのですが、証券を保有している金融機関は、実際どんなリスクがあるか把握できていません。そういう事もあって被害が拡大したのだと思います。

若干スルガ銀行に近いものを感じますね。あっちはもっと原始的というかダイレクトにアウトな気がしますが。

やはりいつの時代も割を食うのは情弱の一般市民ということですね。一生近寄らないか、めっちゃ勉強した上で最初は授業料を払う覚悟で臨むしかなさそう。

「大きすぎて潰せない」の訂正と投資銀行マンの報酬

「大きすぎて潰せない」という言葉は潰してしまうと経済に悪影響を及ぼしてしまうので、(主に政府が)その企業を救済するべきという意味です。先の金融危機では多くの金融機関が政府によって救済されました。しかし、それは「大きすぎて潰せない」というよりは「複雑過ぎて潰せない」というのが筆者の考えです。

金融機関がポジションをお互いに持ちあったために、正確な状況が誰にも把握できなくなり、「この銀行倒産したら影響が他の多数の銀行に及ぶのでは?金融システムやばくならない?」という懸念が沸き起こったということです。

なお、救済を受けた金融機関は全く反省しない……。その上、投資銀行の上層部への報酬はアホみたい高いと指摘しています。

全然関係ないけどプログラムは密結合ではなく疎結合にせよという原則を思い出しました。ぐちゃぐちゃにからみあったスパゲッティコードは変更するのが難しく、いざバグが見つかったときには大変なコストが発生します。

まとめ

他にも「高速取引のアルゴリズムの開発ばっかりやっていないでちゃんと本来の業務に集中しなさい」などの主張もありますがこのへんで締めたいと思います。

お金・金融関連の良作をいくつか読みたいと思っているので誰か教えてください。

*1:一般論です。ちなみに「自分ならうまくできる」という思い込みがギャンブルへの参加を加速させます

『試して理解 Linuxのしくみ 実験と図解で学ぶOSとハードウェアの基礎知識』後編

こちらの本、ようやく読み終わりました。

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

ちなみに前編はこちら alek3.hatenablog.com

前編を踏襲して各章軽くまとめます。詳細にいきたいですが私の理解があまり足りていない感じです。

第5章 メモリ管理

単純な物理メモリの管理ではいくつかの問題が発生するので、仮想記憶を使いますという話になります。前半の方でプロセスをランダムに落とすOOM Killerという恐ろしい子の話が印象的でした。なんでこんなのあるんだ……。

第6章 記憶階層

レジスタキャッシュメモリ、メモリ、ストレージデバイスという記憶装置の階層構造において、いかにレジスタとメモリ間でのアクセスを減らし、キャッシュメモリに収めるかという話です。 ちなみに1Gバイトのファイルをキャッシュする作業があるのですが、私のvagrant上での仮想マシンはメモリが1Gバイトしかないので全部がキャッシュされず、読み出しもほとんど速くならないという結果になりました。

第7章 ファイルシステム

ファイルシステムの不整合を防ぐために何をしているかについて詳しく書いてありました。原子性を保つためにジャーナリングやコピーオンライトという仕組みが用いられています。

第8章 ストレージデバイス

主にHDDの話になります。シーケンシャルアクセスとランダムアクセス、支援機能のありなし、読み出しか書き込みで対比させながら速度を比較していました。SSDになると速度が3~5倍になります。

全般

図がものすごくたくさんあるので分かった気になるのが良いです。特にメモリ管理の章はあるとないとでは理解に雲泥の差が生まれるような気がします。
Cのプログラムは全く読まずコピペで済ませました。それでも動くので楽しいです。
一方で、エントリ内の雰囲気から感じられたように1回の通読でそんなに理解できたかというとそうでもない気がします。*1

また、誤字がかなりあるので正誤表を手元において読み進めるのをオススメします。

参考

『[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識』読了 - Smoky God Express

*1:この本を出題範囲にした大学の期末試験があったらめっちゃ身につきそう