上京して一年後の状況

生まれて初めて東京に住んで一年ちょっとが立ったので、東京に住んでてよかったことと悪かったことを列挙します。 弊社には、博多オフィスを開設してほしいと思っています。

よかったこと

  • 高専の部活の先輩・友人が東京にいるため集まりやすくなった。
  • 電車を逃した時の悲壮感がない。(終電を除く)
  • 大型書店まで気軽に行ける。

悪かったこと

  • 家賃が高い。今の家賃を出せば、福岡なら駅近くの1LDKが余裕で借りられるらしい。
  • 人が多い。新宿、原宿、渋谷などはまっすぐ歩けない。
  • 電車の込み具合が異常。人を乗せる乗り物ではない。
  • 地方にある大型のショッピングセンターのようなものがないため、いろいろなものを買おうと思ったら、いろいろなところ(店・駅)を巡らないといけない。地方にいる頃は、大型ショッピングセンターに行けば欲しいものがほぼすべて手に入ったのに。(大型のショッピングセンターに売っていないものは大体その地方で手に入らないので、あきらめがつく)
  • "豚骨ラーメン"の記述が信じられない。
  • うまかっちゃんがスーパーに売っていない。
  • ポテトチップスの九州しょうゆ味がスーパーに売っていない。
  • 鮮魚類が高いくせに、質が悪い。

クソの役にも立たない社会人一年目の思い出

2017年4月から、新社会人として、某仕事検索会社でソフトウェアエンジニアとして働いています。1年間で体験したどうでもいい思い出を並べます。

4月

英語研修を受けた。今となっては信じられないが、朝9時前に出勤していた。

5月

開発チームのローテーションが始まった。苗字ではなく、名前で呼ばれることに慣れていなかったため、「おい!blue_jam!」と呼ばれるまで自分が呼ばれていることに気が付かなかった。

6月

生まれて初めて合コンに参加する。ここでいう合コンとは、企業合同プログラミングコンテストの意。

7月

生まれて初めて海外に渡航する。アメリカの入国審査員は恐い。 海外初めてのくせに、3か月滞在するという無理ゲー。渡航の最優先目標は無事に帰国すること。

8月

会社に行く以外は徹底して部屋に引きこもっていた。引きこもりのすることはどの国に行っても変わらない。

9月

日本に帰るまでの日にちを指折り数えていた。寿司以外の和風魚料理がめちゃくちゃ恋しかった。煮魚とか。

10月

自分が住むべき国は日本であると確信する。少なくとも、アメリカよりは自分に適している。

11月

楽しみかたは、十人十色

12月

ボーナスの金額を母に伝えると「私がパートで働くのが馬鹿らしくなっちゃうわ。お父さんには金額を内緒にしておきなさい。きっと悲しむから(父のボーナスよりも高額であるため)。」と言われる。

1月

スペースワールドが閉園してしまったため、とても悲しい。

2月

バレンタインデーにもらったチョコレートが1個だった。送り主は姉。

3月

合コン3回目

ACM-ICPC 2017 アジア地区予選つくば大会(JAGスタッフ)

ICPCのアジア地区予選のお手伝いをしてきました。ICPCに行くのは2年ぶり、JAGスタッフとしては初めての参加でした。

0日目(12月15日)

この日は通常通り会社に行って働いていた。つくばは行ったことがあったし、東京からはそんなに遠くないので、出発時刻をこの日の夜まで確認していなかった。※よい子は真似しないでね!

1日目(12月16日)

前日に調べた時間の電車に間に合うように6時に起床。予定よりも少し早い少し早い電車に乗る。結果、集合時間よりも30分早くついてしまった。

集合後、「いつもの面子で安心する~」という言葉とともに諸注意が始まった(気がする)。主に、システムの保護(物理)と選手の安全(物理)にかかわることだった。 そのあとは、ホワイトボードを運んだり、椅子を運んだり、配布資料を揃えたり、風船を膨らませたりという作業をした。個人的には風船を膨らませるのが一番疲れた。

今年はかなりスタッフの手際が良かったらしく、かなり早めに準備が終わった。「みんなこんなに早く終わるんだったらJAXA見学に行きたかったよね」はい。

選手が会場に入り始めると、会場を見回る仕事(通称:徘徊)が始まった。選手に頼まれてトイレまでの道を教えたり、質問があれば対応をしたりした。見知った顔を見るとうっかり話しかけてしまいそうになるが、そこはぐっと我慢。

練習セッションが始まる。練習セッションでは風船を配って歩いた。そののち、tatuyan_edsonさんに風船配布の進捗管理の方法を教わる。配布された風船の管理は、万が一、風船の誤配があったときに必要になる。けっこうアナログな方法で管理されています。

懇親会では、後輩に「焼肉はおごってもらう自信はありますか?」と質問しておいた。あと、司会をしていた陽気な先生に「君は30代に見えるよ!」と言われて地味にショックだった。

2日目(12月17日)

8時集合だといわれていたのに、7時55分ごろに説明が始まった。説明後準備作業に移る。

コンテスト中は風船配布の進捗管理のお仕事をtatuyan_edsonさんとやっていた。コンテスト序盤がかなり忙しかった(多くのチームがA問題を解くため)。ACラッシュがひと段落すると、コンテストの順位が落ち着いてみられるようになる。後輩チームがBで詰まっているな~とか。余裕が出てくると、時々ダジャレを言った。風船配布係から失笑が漏れていた気がするが気にしない。

コンテスト終了後、コンテスタントが外に出ていった後に会場の片づけをする。片付け終了後は表彰式を見に行く許可が出た。やはり、Yes/No演出はよい。

懇親会になると真っ先にご飯を取りに行ったが、周りにご飯を取っているJAGスタッフが見当たらなかったため、本当に飯を食っていいのか不安だった。食事を十分とると、会社のブースのお手伝いに行った。途中、会社の偉い(と思われる)人に「Is the order a rabbit?って知ってる?」って聞かれて戸惑った。

懇親会終了後はCertificate(なぜか僕の分は2枚あった)と企業のロゴが入った名札(同じ会社の人は誰も付けていなかったので存在を知らなかった)を受け取って帰った。無事に家に着いたので僕のICPCはここで終了です。

3日目(12月18日)

普通にお仕事です。出社したら、ICPC参加者が会社の説明を聞いているところを見つけた。興味深そうに見ている同僚に、「彼らは昨日ICPCに参加していた選手たちだよ」と説明しておいた。 先輩がプレゼンをしている中、スクリーン近くにある味噌汁をそーっと取りに行った。

獺祭の正規販売店の一覧マップを作る

獺祭を作っている旭酒造が「頼むから(正規販売店で)正規の値段で買ってくれ」という広告を出したらしい。その広告を見て思った。

「よし。正規販売店で買ってやろうじゃないか…ただし、正規販売店のリストをGoogleマップでくれ!広告にある店名のリストから、最寄り店を目grepで探せるわけがないんじゃ!」

というわけで、旭酒造のWebページから正規販売店の一覧マップを作れるようにしました。

やり方

CSVをダウンロードした後の手続きはGoogleマイマップの公式ドキュメントを参照した方が親切です。

  1. ここでCSVファイルを入手します。
  2. Googleマイマップのページに行き、新しいマップを作ります。
  3. インポートメニューから1で入手したCSVファイルをインポートします。どの列が住所でどの列がタイトルかを聞かれるので、適切に選んでください
  4. 完成

f:id:blue_jam:20171212202342p:plain

やったこと

前述のとおり、Googleマイマップはタイトルと住所が含まれたCSVファイルからマップを作れるらしい。というわけで、店名と住所が含まれたCSVを生成することが今回の目標です。 言語はJavascriptに決定。理由はJSだとHTMLのデータの抽出が楽そうだから。最近は頻繁に触っているし。(スクレイピングツールを使えばいいじゃんというツッコミは無しの方向で)

とりあえず、Webページの形式を確認しに行く。

f:id:blue_jam:20171212203128p:plain

嫌な予感がするぞ…

f:id:blue_jam:20171212203135p:plain

はい。というか、まともなフォーマットだったらExcelで完結するんですけどね。(いや、このままでもExcelでいける気がする。) 一つしか要素がないTRタグを取り除いて、二ついっぺんに処理するといい感じになりそう。

const getPage = (region)=>{
    return new Promise((resolve,reject)=>{
        const request = new XMLHttpRequest();
        request.open('GET', `http://www.asahishuzo.ne.jp/store/ja/${region}`);
        request.responseType = 'document';
        request.addEventListener('load', (e)=>{
            if (request.status === 200) {
                const doc = request.responseXML;
                const trs = doc.querySelectorAll('tbody > tr');
                const filteredTrs = [];
                for (let i = 0; i < trs.length; i++) {
                    if (trs[i].childNodes.length > 1) {
                        filteredTrs.push(trs[i]);
                    }
                }
                const map = new Map();
                for (let i = 0; i < filteredTrs.length; i += 2) {
                    map.set(filteredTrs[i].childNodes[1].innerText, filteredTrs[i + 1].childNodes[1].innerText);
                }
                resolve(map);
            }
        });
        request.addEventListener('error', (e)=>reject());
        request.send();
    })
};

const regions = ['hokkaidou', 'touhoku', 'kantou', 'cyubu', 'kansai', 'cyugoku', 'shikoku', 'kyushu', 'okinawa'];

Promise
    .all(regions.map(getPage))
    .then((maps) => {
        let resultMap = new Map();
        for (let i = 0; i < maps.length; i++) {
            resultMap = new Map([...resultMap, ...maps[i]]);
        }
        document.open();
        resultMap.forEach((name, address) => {
            document.write(`${name},${address}<br/>`);
        });
        document.close();
    });

コードレビューで英語実質ネイティブの人々がよく使ってくるAcronymのまとめ

公用語が英語の会社でコードを書いているので、コードレビューのコメントも英語で来る(それはそう)。よく、英語話者が使うAcronym(頭字語と訳すらしい。代表例はLGTM)がわからなくなるので忘れないようにメモる。

Acronym 意味 別解 備考
AFAIK As far as I know アメリカ人のマネージャーは”あふぁいく”みたいに発音していた
AFAIR As far as I remember 前述のマネージャーはAFAIKとAFAIRの違いは特に気にしたことがないらしい。
IIRC If I remember correctly
IMO In my opinion 国際数学オリンピック(International Mathematical Olympiad) なんでコードレビュー中に数オリの話が出てくるのか
LGTM Looks good to me
NVM Never mind Node Version Manager なんでJavaのコードレビュー中にnodeの話を始めるのか
RC Release Candidate 鉄筋コンクリート(Reinforced-Concrete)
SGTM Sounds good to me

他に何か気が付けば追加する。

徳山こうせん(not 高専)の標識まとめ

高専生ならみんな入力したことのある○○光線ですが,実在する○○光線があります.

それは徳山光線です.ちゃんと証拠の画像もあります.

f:id:blue_jam:20170613005806j:plain

暗くて字が読めなかったので,色味の調整をしていますが,それ以外の画像編集は一切していません.ちなみに,Google マップでも確認できます.

徳山光線は"とくやまひかりせん"と読みます.その名のごとく,旧 徳山市(現 周南市)と光市を結ぶ道路です. 山口県道8号徳山光線 - Wikipediaによると,都濃郡都濃町が徳山市に編入された時に現在の名称になったようです.なお,徳山市周南市になったときは名称の変更はなかったもよう(周南市でかすぎるんもんね.)

ちなみに,徳山港線(Google マップ)も存在します.山口県道52号徳山港線 - Wikipediaによると,こっちは"とくやまこうせん"と読むらしい...

証明を書こう!

この記事はCompetitive Programming (その2) Advent Calendar 2016 - Adventarの記事として書きました.

この記事に,技術的に有用なことはありません. 「証明を書こう!」という話です.

何か月か前に,とある方から次のような質問をされました.

競技プログラミングをやっていて,こういうのがあったらいいなあってものてある?

僕は「ちゃんとした解法の証明がほしい!」と答えました.その後に理由を長々としゃべりましたが,大体次のようなものだったと思います.

  1. 解説では解法の方針がざっくりと説明されているだけだから.
  2. (僕の研究室では)重要なスキルの一つに証明を書くことがあるから.(この質問の前に 「競プロって研究の役に立ってる?」 という質問をされていた.)
  3. (僕は証明無しでアルゴリズムについて話をするとうちの先生方に説教を食らうのに,みんなサボってずるい!)

1つ目の理由は,ざっくりとした説明だけではわかった"つもり"にしかなれないと思っているからです. 特に,最近は競プロの問題の難易度がどんどん上がってきていて,「本当にそれでうまくいくの?」と思うような解法がたまにあります. 牛ゲーとか,高難易度の貪欲とか「証明があったらうれしいなあ」と思うことがよくあります. なぜその解法でうまくいくのかを確認するには,やっぱり証明を追わないと.

2つ目の理由は,僕の所属している研究室の研究内容に大きく依存しています. 僕はアルゴリズム関係の研究室に所属しています. 研究室仲間がやっている研究は様々で,マッチングをやっている人もいるし,乱択数え上げをやっている人もいるし,分散アルゴリズムをやっている人もいます. 僕らに共通して必要なスキルは"証明を書くこと"です.だから,証明を書く練習がしたいし,そのお手本があったらうれしいというわけです.

ちなみに,この会話の最後に「お前がやればいいんだよ!」というツッコミをいただきました. アドベントカレンダーを書くまでに,問題の証明を書こうと思っていましたが,残念ながら間に合いませんでした. 今後,時間が空いたときに何かしら書いていこうと思います.

以上「(僕が)証明を書こう!」という話でした. 最後までお付き合いくださった方,ありがとうございます.