2018年の失敗

今年も一年無事に過ごすことができましたが、たくさん失敗もしました。振り返ってみたいと思います。

髪を抜く癖が再発し、前髪が短いままになる

今年の秋ごろ、悩んでいるときや、ストレスがかかっているときに、前髪をクルクルしてしまう癖が再発しました。

その結果、前髪が不自然に短くなってしまいました。

最近は落ち着いたと思っていたのですが、今日髪を切りに行ったところ、美容師さんに「前髪伸びてないね~やばいんじゃない?」と言われてしまいました。

今後は、前髪を大事にしたいと思います。

Folioに100万円入金して、20万円以上損失を出す

ネット投資信託サービスFolioは去年の11月頃に始めました。当初は10万円ほど買っていたのですが、徐々に増やし、今年の1月に一気に50万円増やしました。

今年の1月は、そう日経が24000円くらいだったころです。

あとはお分かりの通りです。

どのへんで損切りすべきか、だれか教えてください。

Pythonを勉強しようとしてコミュニティに参加するも、フェードアウトする

私はもともとJavaを書いているのですが、もう一つ言語を身に着けよう!と思ってPythonを始めました。

手始めに、オンライン学習サービスのPyQをはじめました。

また、以下のコミュニティにも参加しました。

  • Python入門者の集い
  • Pythonもくもく自習室(rettypy)

さらに、SDVXという音ゲーでちょっと役立つツールを作成しました。

github.com

とはいえ、ここから仕事に使えるレベル*1となるとかなりのジャンプアップが必要だなと感じました。

そこからあまり進歩せずに今に至っています。

反省としては、目標を決めてそこまでがんばろうという気持ちが足りなかったなということですね。

まあ趣味レベルには身に付いたといえなくもないので、失敗ではないかも。

読書ペースが遅く、積読がたまる

現在Trelloを使って、技術書の進捗状況を管理しています。そのリストは公開しています。*2

trello.com

積読とここ半年の読書量を比較すると、今のすべての積読を消化するのに1年くらいかかってしまう計算になります。

さすがにもう少しペースを上げたいと思います。

具体的には、通勤時のスキマ時間とか、寝る前の数十分とかを確保したい。

同時に、取捨選択も大事だなと思います。月2冊のハイペースで進めていっても24冊ですからね。

  • 仕事で使える技術書
  • 仕事で使えるビジネス書(マネジメントとか)
  • 趣味

をバランスよく組みたいと思います。

今週の記事がしょぼい

しょうがない。来週から頑張ろう!

*1:もしくは自作サービスとしてリリースできるレベル

*2:そのうち非公開にするかも

読了『エンジニアリング組織論への招待』

読了したのでレビューです。面白かったです。

現在のプロジェクトと自分の立ち位置

とあるプロダクトを開発、成長させるプロジェクトに1年以上携わっています。ゼロからプロダクトを立ち上げるところから参画していて、最近は「リーダー的」に立ち振る舞うようマネージャーから求められています。

責任ってなんだ

一メンバーから「リーダー的」な役割になると責任が増大するような気がします。しかし、私は、この責任というものがどういう義務を負った状態なのか、長らく分かっていませんでした。

本書239ページにその答えが記載されています。

権限を委譲された側は、その権限に見合う会社のリソースを取り扱うことができ、その権限に見合う自由度を手にすることができます。一方で、権限にはそれに対応する責任が伴います。これを「説明責任」といいます。

説明責任とは、与えられた権限に対して、何を行い、どのような結果をもたらしたのかという説明を、権限を付与した人に報告する責務のことです。

なるほど。マネージャーからしたら、確かに説明はしてほしいですね。

なぜ開発が失速するか

本書では、プロダクトの開発スピードが、だんだんと遅くなっているという悩みが251ページから解説されています。スピード低下の理由は、システムが複雑になるから、機能を追加するために、既存の設計を変更する必要があるから、といったものでした。

これはまさに私がいまプロジェクトで経験しているものと同じで、初期のころに比べると多くの機能が追加されるとともに、設計が大きく変わっています。そして、開発スピードは当初に比べると今は遅くなっています。

所感ですが、機能追加よりも、機能を変えずに設計を変えていくほうが難しいような気がしています。

技術的負債の位置づけ

「技術的負債」というワードは、意外と説明するのが難しいですが、「見える・見えない」、「プラスの価値・マイナスの価値」を軸に、新機能、バグ、アーキテクチャ、と比較することで理解しやすくなります。*1

こういうのを図示されると、もやもやと考えていたことがクリアになりますね。

コミュニケーション

順番は前後しますが、第2章はメンタリングの話です。メンタリングはコミュニケーションを通じて行うため、コミュニケーションのやり方についての記述が多いです。

コミュニケーションをやっぱりサボっちゃいかんな、と反省しました。

また、以下のような感想を持ちました。

読んでいるとメンタリングは相手にがっつり向き合わないとできないように感じますが、私は第1章・第2章を読み終えた際、なんとなくメンタリングを受けたような気持ちになりました。

まとめ

対象読者が明記されていないのですが、私は以下だろうと思いました。

  • ITエンジニアで、特に自社サービスの開発に携わっている人
  • チームで業務に取り組んでいる人
  • もうちょっとうまいこと仕事が回らんかな~ともやもやしている人

読んでみると、そういったもやもやがはっきりとした問題になるかもしれません。問題が分かれば、あとは解決していくだけです*2

参考

togetter.com

*1:ツイートの「エン組」はエゴサ避けです。

*2:まあそれも結構大変なんですが……

JJUG CCC 2018 Fall #jjug_ccc 参加しました

JJUG CCC という、半年に一度あるJavaのカンファレンスに行ってきました。

www.java-users.jp

参加したセッションについて軽くまとめて行きたいと思います。

セッション一覧や、一部のスライドはこちらにまとまっていると思います。

d.hatena.ne.jp

Pivotal認定講師によるSpring Framework 5.1ハンズオン!

上記のセッション一覧にこのセッションが入ってなかったのでスライド等をあげておきます。

www.slideshare.net

qiita.com

Springはなんとなく使っているけど、1からアプリケーションを構築しようとすると難しいなという課題感がありました。

そんな中、ハンズオンセミナーがありましたので参加することにしました。

実際参加してみると、おいおいこれを無料で受けちゃっていいのかよ……。という充実した内容でした。

Springのベーシックなアプリケーションを構築する上で、一つの正解を教えていただいたなと思います。

まだ全部完走していませんが、基本的なBeanやConfigurationの設定から始まり、Spring DataやSpring Securityを触れるということで、最初に抑えるべきポイントはすべて押さえられていると思います。

おそらく、通常有料で開催している講座のダイジェスト版みたいなもので、時間内(105分)に終わらせるのは難しいから後でやっておいてねとも言われました。

一方で、失敗したところが2つありました。一つは、ハンズオンの事前準備をしてこなかったところ。公式ホームページのセッション詳細には書いてなかったのでスルーしていましたが、講師のTwitterなどでは事前告知があったようです。

もうひとつは、インターネットに全然つながらなかったところ。事前準備を完了するにはインターネット環境が必要なのですが、接続が多かったのか、全くインターネットに繋がりませんでした。これはどのあたりに原因があったのかイチ参加者には分かりかねますが、改善してほしいというのが正直な感想です。

俺が好きなのはJavaだけどJavaじゃない 〜虎の穴でのJava活用について〜

オタクならみんな知っているとらのあなのランチセッションです。

お昼ごはんもついていました。ごちそうさまです!

f:id:alek3:20181216135113j:plain
お昼ごはん

内容はリニューアルしたECサイトについての話でしたが、そこまでマニアックではありませんでした。Javaでシステムを組むとしたら非常にベーシックな作りになっていると思います。

ここ最近の宣伝の勢いがすごいので勢いのある会社なんだなと思いました。

今こそStream API入門

Java Champion 桜庭さんの講演です。めちゃくちゃわかりやすい。すごいわこの方。

自分がStreamを書くようになった一番の要因は、「同僚が書いていて、君も書きなよと言われたから」なんですけどね。

まず内部イテレータと外部イテレータの違いもよく分かってなかったので、そこらへんの理論強化につながったのが良かったです。

flatMapは全然使ってないなと思っていましたが、二次元の配列をなめすときとかに使うよと言われて、今までは使えそうなケースに当たらなかっただけなんだなと思いました。

Streamが使えない場合*1ってどんなのがあるんだろうというのがよく分かってなかったのですが、例えばindexに対して、index+1や+2を使わないといけないときだそうです。なるほどそりゃそうだ。

IDEの力を借りればいい感じに短く書いてくれるとのことでしたが、実際そうで、今回扱ってなかったメソッド参照まで使って書いてくれます。

秒間 200,000 Req/sec をさばく広告入札システムを支えるパフォーマンスチューニング術

以前、とあるアドテクの会社にお話を聞きに行った時に、「パフォーマンスチューニングの経験ってあります?」「いや、あんまり……」となって微妙な空気になった経験があるので、実際のところどうしているのか気になって聞きに来ました。

全く畑違いの分野なので細かいところはよくわかりませんでしたが、計測して一番時間食っているところを潰していくようです。

けどその計測する環境を整えるのは割と大変なような気がするんですが……。

まとめ

去年も参加したのですが、そのときに比べてついていける(知っていることが多少ある)セッションが多くて成長を感じました。

*1:すなわち通常のfor文とか拡張for文とかを使う

競技プログラミングをまた始めた

久しぶりに競技プログラミング再開しました。AtCoderです。ちなみに再開と言っても再開前で3回しかやってないのでほぼ初心者です。

なぜ再開したか

2つあります。

一つは、お手軽にプログラミングを楽しめる環境だと思ったからです。私の観測範囲だとサービスを作ってなんぼ!プログラミングは手段です!という風潮を感じていて*1、それだけだと息苦しいなあと思っていました。それに対し、AtCoderのコンテストは目の前の問題に打ち込めばいいだけです。せいぜい2時間で終わります。解けない問題があっても、数時間後には答えが知らされます。しかも解けるとうれしい。最高ですね。

もう一つは、手頃な目標が見つかったからです。下の記事で、レート(色)とレベル感の相場が記載されていました。

qiita.com

これを見て、とりあえず緑(レート800)を目指そう!俺も申し分ないソフトウェアエンジニア!という気持ちになりました。

現状

言語はJava8使っています。ABC*2に参加していますが、復帰後の初回は2完*3、次は3完でした。

課題

とにかくアルゴリズムが全然かけないことです。再帰関数を書こうとしてもStackOverFlowErrorが出てしまいます。調べてみても、どうしたらそのようなエラーが出ないような書き方ができるのか端的に書いてあるサイトがみつかりませんでした。蟻本を読みながら過去問を解いていって理解を深めていきたいと思っています。

また、Collectionを昇順、降順でソートするなど、簡単な処理をパパっと書けるようにするのも大事かなと思います。これは、書いていればそのうち覚えるでしょう。

所感

1年半ぶりにAtCoderに参加しての感想は、

「人がめちゃくちゃ増えている」です。

最後に参加したABC056の参加者は600人強でしたが、最新のABC115では2300人を超えていました。大幅に成長していてすごい。平均レベルも上がっている気がします。

あとは「楽しい」です。飽きないうちに次の色を目指したいと思います。

*1:あと本業もそんな感じ

*2:競技プログラミング初心者向けの全4問のコンテスト

*3:さらっと書きましたがだいぶ恥ずかしい出来です。

「しがない」に終わりはない

この記事は、#しがないラジオ Advent Calendar 2018の2日目の記事です。

アレクと申します。しがないラジオはエピソード1の公開当初から聞き続けています。

しがないラジオの構成

2018年のしがないラジオは、ゲストを招いてその人のキャリアを伺うというスタイルです。

人によって千差万別なのは承知ですが、一般化すると以下のような起承転結になるでしょう。

  • 起:SIerに入社した。
  • 承:だんだん仕事が辛くなってきた。今後のキャリアに不安を感じた。
  • 転:社外の活動を充実させ、キーとなるような人や会社に出会った。
  • 結:転職した。今は楽しくて仕方がない!(=しがない)

一方で、ラジオのエピソードとしての面白さは、ゲスト一個人に対する深掘りにあると言っていいでしょう。人生はそれぞれであり、聞いて印象に残るものはリスナーそれぞれにたくさんあると思います。

「しがない」に終わりはない

そして僕が最も面白いと思ったのは、結の「しがない」の内実です。

具体例を2つ挙げます。

あるゲストの方とお会いして、帰りの電車が一緒になったことがありました。その人に対しての印象は、「バリバリに仕事ができて、しかもさらなる高い目標に向かって突き進んでいる」というものでした。

しかし、話してみると、ある悩みを抱えていました。「通勤電車が辛い」というものです。そのとき僕は、「こんな人でもありふれた悩みを持つものなのか」という驚きを感じていました。

もう一つの例はずっきーさんです。彼は真っ先に新卒入社した会社から転職し、「楽しくて仕方がないラジオ」を開設しました。人生を大きく変える転職を成功させ、まさに「しがない(楽しくて仕方がない)」を体現した存在であったと言えるでしょう。

しかし、彼とは何度かお会いしましたが、時には悩ましい時期もあったようです。今は2回目の転職を経て別の会社に移り、ますます活躍の場を広げています。*1

2つの例から僕が言いたいのは、「現状完璧に満足している人はいない。しかし、課題の解決に向けて行動を積み重ねている人がいる」というものです。

パーソナリティやゲストの方々に、「いま楽しくて仕方がないですか?」と聞いたら、たいていYESと答えてくれるでしょう。なぜなら、悩みの尽きない現実と向き合っていく行為も「しがない」からです。

僕自身はどうか?

僕は新卒入社したSIerにそのまま在籍していますが、プロジェクトは現在3つ目になります。詳細は省きますが、使用エディタの推移は以下になります。

だんだん良くなってきていてうれしいです。

とはいえ、課題は山積みです。また、自分の能力が全然なさすぎてゴミのような気持ちになることもあります。

業務外ではこのブログを週1ペースで更新していて現在22週連続で続いています。タイトルの「等身大から1割増し」というのは、ちょっとだけ背伸びした自分を表現しようという思いを込めて名付けました。

ツイッターの友人に「アレクさんは割とエンジニア生活をエンジョイしているイメージある」と言われました。

実際、ここ2年くらいは楽しめていると思います。

まとめ

要するに、きれいなストーリーを語っているあの人も、実は裏でいろいろな悩みを抱えている、ということです。

逆に、現在悩みを抱えていたとしても、それを少し脇に追いやって理想的な自分を表現するのは、悪いことではないでしょう。それが人にとって魅力的に映ることもあると思います。

副次的な効果ですが、自分の発信に影響を受けて、誰かが変わり始めるということもあるかもしれないですね。

いま、「しがない」ですか?

はい!

*1:そのへんについては限定公開エピソードにあると思いますが、申し訳ないことにまだ聞けてない模様

Elastic Beanstalkで単一インスタンスで動くアプリをHTTPS化する

今回の問題点

Elastic Beanstalk(EB)でHTTPS化をするときはCertificate Managerで発行した証明書をロードバランサーに組み込むのが定石かと思います。

docs.aws.amazon.com

しかし、今回新たにEBで動くアプリをHTTPS化しようとしたところ、以下の通りロードバランサーの設定ができなくて困りました。

f:id:alek3:20181130131906p:plain

これが今回の問題点です。

なぜこのような画面が出ているかというと、単一インスタンスで動かしていて、ロードバランシングしていないためです。

調べてみると単一インスタンスで愚直にHTTPS化をしようとするとけっこう大変だということがわかりました。(参考

せっかくCertificate Managerで作った証明書が使えないというのが大きな痛手です。

対処法

調べてわかった対処法は以下の通りです。

  • 設定の「容量」を変更する

  • Auto Scaling グループの「環境タイプ」を「単一インスタンス」から「負荷分散」にする

  • インスタンスの最小・最大数は任意だが、1つでいいならどちらも1を設定する

「続行」をクリックすると、ロードバランサーの設定ができるようになります。なお適用を押すと更新処理が始まってしまい、キャンセルを押すと最初からやり直しになるので注意してください。*1

対処法は以上になります。

なお、今回の対処法に気づいたきっかけは以下の記事です。

medium.com

特にこの画像です。

f:id:alek3:20181202120724p:plain

Load Balancerの表示がまさに自分自身と同じ状況で、この後当然のようにHTTPS化していたので非常に参考にさせていただきました。

気づき

画像大事!

*1:今回の場合は適用を押しても確認の警告が出るので問題ない。キャンセルは環境セットアップの時に押してしまい、色々書いてた設定がやり直しになって泣いた。

#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のときもありますが、たいてい見返さないです。むしろこのブログがメモかも。