paizaで遊んでいるという話

特に転職したいというわけではないが、最近あまりコードを書いていなかったのとキッカケがありpaizaの問題を解いている。

大抵の問題はレベルによって様々だが一番簡単なもので数分、難しいものでも2時間程度で解けるようなものが多い。 Swiftで解いていたが、Swiftに飽きてきたので他の言語でもやってみようと思う。この記事では、Swiftでよく使った関数と他の言語の対応表を作って素早く問題が解けるようにしたい。

Swift Ruby
入力 readLine() gets
出力 print() puts
0からn未満までのRange 0..<n 0...n
String→Int Int(s) s.to_i
Int→String String(i) i.to_s
Number format import Foundation*1
String(format: "%04d", 12)
format("%04d", 12)*2
map .map {(s) in s} .map {|s| s}
each .forEach{(s) in print(s)} .each {|s| in puts s}
filter .filter {(i) in i % 2} .select {|i| in i % 2}
reduce .reduce(0) {(r, i) in r + i} .inject(0) {|r, i| in r + i}
split .split(separator: " ") .split(" ")
join joined(separator: " ") join(" ")

*1:ないとエラーになる

*2:"%04d" % 12という書き方もある

会社でご飯を炊いた

背景

原宿に勤務しており飲食店事情は非常に芳しくない。弁当を作る意欲が定期的に高まることがある。しかし、2人暮らしをしていて、米は5合炊いて食べてれない分は冷凍しているため、弁当用にご飯を炊いたり、冷凍しておくことが面倒ということになり、解決方法を探すことになった。その一つの案として、「会社でご飯を炊く」ことになった。

結論から言えばもっとマシな方法があるからやめたほうがいい。

会社でご飯を炊くには

レンジで炊飯できる

rocketnews24.com

こんな感じのものがダイソーで売っている。本当は陶器製のものがあるのだが、販売元でも在庫切れだったということもあり手に入らなかった。

無洗米を買ってくる

会社で米を研ぐのは面倒ということから、無洗米を買ってきた。

計量カップを持ってくる

1合を測る必要があるので、計量カップが必要。

実際に炊いた

f:id:akuraru:20181012210730p:plain 米と同量の水がはかれれば炊くことができるので適当に測ることにした。そのため、分量が多すぎて吹きこぼれてしまった。レンジの中が炊きたてのご飯の良い香りがする中、吹きこぼれた水を拭くことになった。

600w5分200w12分とかなり長い間。会社の電子レンジを17分も占領するのもどうかと思って、12分を省いて長めに蒸らすことにした。それども吹きこぼれた分と12分をやらなかったことにより、硬かった。食べれないほどではない。

おかずを買ってきていなかったので、吉野家牛皿を買いに行くことにした。牛丼を買えばいいんじゃないかと思ったが、気がつかなかったことにした( 差額は100円だった)。

若干固く炊かれたご飯を牛丼にして食べる分にはいい感じだった。

わかったこと

会社で炊くにはあまりにも時間がかかるのと、1合は多すぎることがわかった、まぁわかりきっていたことだが。

一方、無洗米は非常に便利で、米と水を入れるぐらいなら毎朝やれそうだ。あと、レンチンできるご飯の偉大だ。

問題設定を間違えていた

「お弁当作るの面倒くさい」という問題は、ご飯を解凍して弁当に詰め直すことが面倒だと考えていた。おかず作る方が面倒だということに気が付いた

AppStoreConnectで時間指定リリースが開始されなかった

弊社のiOSアプリのリリースポリシーとして「日曜の深夜にリリースをする」というものがあります。これは、iOSアプリでトラブルがあった場合には修正を行ってもすぐさまリリースができず審査の時間があるため、ユーザーが発見して修正の時間が取りやすい時間にリリースしています。

AppStoreConnectにはこれをサポートする機能があり、日時を指定してリリースすることができます。9/9 23:00にリリースされるようにしていましたが、今朝見たところリリースされておらず、手動でリリースを行いました。

原因は不明。

1日スプリントをやってみようと思う

レッツゴーデベロッパー 平成ジェネレーションズ FINAL
https://connpass.com/event/95619/

きょんさんの話によく出てくる基盤チームが開発する。見れる機会はそうそうないので、東京から仙台に日帰りで行ってきた。

このイベントは基調講演を行った後、開発フリースタイルバトルで各チームがそれぞれの開発手法でお題に沿って開発を行う。各チームはスクラムやDDD、TDDを行っていた。他のチームの感じは他のまとめを見てもらうとして(https://www.asakara.net/entry/study-letsgo)、一時間スプリントを行う基盤チームを見ていました。


お題に沿って開発を進める。
https://github.com/5000dai/free-style-battle/blob/master/README.md

1時間スプリントができると思えた

25m作業を行なって5mふりかえりや計画を行う。やることは6m単位で黄色の付箋にして、どんどん貼っていく。ある程度時間がかかるものは青い付箋にする。

サーバーの設定や、仕様の読み込み、設計など、長くて12m短くても一応のタスクに分割していく。25mにやったことを共有して分単位で情報共有していく。非同期で仕事をしているが同期のタイミングが短いので遅れが素早く見つかる。必要に応じて手伝って、遅れをカバーしていく。今回はイベントということで、サーバーがうまく立ち上がらなかったのでローカルまででOKにしたり、素早い判断をしていた。

1時間スプリントは、5mで1hでできることをタスクにして実行して、25m開発し一旦共有して、もう25m開発し、5mふりかえりをする。実際やっていることはこれだかのように見える。たったそれだけだった。

それでも難しいこと

標準的な開発では省いていることがかなりある。

レビューと単体テストだ。レビューをせずにどんどんrebaseしてmasterにマージしていくし、単体テストを書かずにE2Eテストだけを書いていた。これは信頼できるframeworkと設計、そして実力が相まってできる開発手法ではある。実際に体験した私も「単体テストをするだけ時間の無駄」だと思うような信頼性の高いコードが書かれていく。せいぜい不安に思う時にだけレビューしたり単体テストを行うそうだ。実際に目の当たりをすれば、高い生産性がほこっているがゆえに1時間スプリントが必要なことが納得いく。基盤チームにとっては1週間スプリントはあまりにも長すぎるのだ。

1日スプリントをやってみる

1時間スプリントをいきなり真似するのは、火傷するどころか骨すら残らない。
弊社では2週間でスプリントを行なっているが、1日スプリントをやってみようと思う。と言っても「今日1日で終わらせると決めたタスクは終わらせる」ためにより小さくタスクを分割したり、レビューを別の付箋にするなどを行なっていこうと思う。

最高の開発がしたい

きょんさんの話を聞いてテンションが上がって書いている。
https://www.creationline.com/lab/agile/22618

ビジネスを成功させる目的で、アジャイルを手段として行う。
ビジネスを成功させるためにはアジャイルは必ずしも必要はないのだけど、アジャイルをやっている人たちからすればものすごい努力をして成功に至ろうとしている。アジャイルをすることが目的になるくらい努力をして、ビジネスを成功させようとしている。

という話を聞いた。

私は、「最高の開発したいな」となった。

コード書いている間は、コンパイルが通った時、テストが通った時、実行して意図通りに動いた時に楽しい。
タスクが完了した時、ストーリーが完了した時、スプリントが無事に終わった時に楽しい。
ユーザーが価値を感じて使ってくれた時、ユーザーに感謝してもらった時に楽しい。

楽しく開発がしたい。辛いことはしたくない。

楽しく開発するためには努力が必要だ。いろいろなことを学んで、経験して改善していこうと思う。

適当に退職するため必要なこと

注:一年くらい前の話。今は楽しく仕事しています。

1年くらい前に全く先を決めないまま退職しました。運良く、有給消化中に転職できたもののそうでなかったら無職になっていました。無職になる気満々でやめたのですが、色々持っていたというのが大きかったと思ったので書いておこうと思います。

貯金がある

身も蓋もないですが、貯金があることはかなり安心につながりました。その時の給料の一年分くらいの貯金があったため、少なくとも一年くらいは無職でもやっていける状態でした。一年くらい無職になって、休憩していればいいと思える貯金があったことで退職届を出すことができました。

手に職をつけている

iOSエンジニアとして知識や技術はあったつもりなので、無職にであってもそれをアップデートし続けたり、OSSで活動していれば就職にはあまりにも不利にはならないと考えていました。日本だとどうしても休職期間があるとそこを問われることが良くあるそうなので、言い訳できるようなスキルがあったのは良かったと言えます。

彼女の理解

退職すると話した時、しばらく休息して欲しいと言われました。若干、精神的にやられていたこともあり頼もしくありました。彼女は働いていたので金銭面でもすぐさま収入がない安心感があります。しばらく、ヒモになるわけですが"そのうち就職する"と信じてくれていました。精神的な支えがあることは、退職する上で非常に心の支えになりました。

親との仲が悪くない

貯金を使い果たし、彼女にも捨てられ、再就職が叶わなかった場合、実家に転がり込めばいいと考えていました。無条件で助けてくれる存在はそうそういません。なじられるかもしれませんが、生存は確保出来るでしょう。

 辛くない時に貯めておくのが大事だと書きながら思いました。

2017年の振り返り

ユビレジに入って一年目の年で、仕事がだいぶ変わった年でした。

年の前半

iOSアプリエンジニアとして働いていました。前職ではアプリエンジニアで1人で全ての作業をせねばならず、相談する相手もいなかった。ユビレジでは現在3人のアプリエンジニアがいたため、相談しながらできたのは非常にありがたい状況でした。さらに、CIの整備やレビュー体制が整っていて働きやすい環境でした。
 この時期はどんどん人が増えていっている時期だった。その時期の初めのことに入れたのは幸運と言える。

夏頃

働きやすい環境ではあったものの問題はありました。全然リリースできない状況が続いたのである。アプリができてもサーバーができていなかったり、逆もあった。アプリが出来上がって、サーバーができる頃にはアプリで何を作ったか忘れているという状況が頻繁にあるということが続いたのである。
 この状況をだかするために、全員で一つの機能を作っていくことになった。アプリエンジニアやサーバーエンジニアの枠組みがなくなり、全員がただ開発者となって一つの機能に集中するのことになった。これは非常に良い変化となった。以前は一人のエンジニア一つのプロジェクトを行っていて、リリースが3ヶ月先がザラとなっていたが、2週間で順次リリースされるようになっていた。

秋頃

エンジニアリングマネージャーがやめることになった。マネージャーは以前から辛そうにしていた。ユビレジでは、誰かがやらなければいけないが誰もできるような人がいないという状況だった。そのマネージャーは年の功でやっていたように思う。コードが書きたいのだろうとは思っていて、どうすることもできなかった。そして、やめていったのだ。
 やりたくない人にマネージャーをやらしてはいけない。
 今、ユビレジでは専門職としてエンジニアリングマネージャーを募集している。

冬頃

スクラムマスターがやめることになった。こっちは青天の霹靂。聞いた瞬間に中華屋で合席していて目の前の関係ないおっさんにFワードを言いそうになった。その結果、私がスクラムマスターの仕事を引き継いだ。今の所、うまくいっている(と思う)。私も楽しくやっている。だいぶ引き継ぎをしてから去っていってくれたので、私がスクラムマスター(仮)なこと以外は問題ない。
 若干昇進して給料が上がった。そして、2018年からスクラムマスターとして働く。

まとめ

人の出入りが大きかった年だった。それが、経験と成長に繋がった年だった。