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

久しぶりに競技プログラミング再開しました。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のときもありますが、たいてい見返さないです。むしろこのブログがメモかも。

【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:もうちょっと補足するとビルド関係の変更があったコミットをプルした後