『思考する機械 コンピュータ』を読んで印象的だったフレーズ

ロマンに溢れた言葉たちに、現代を生きる楽しみ方のヒントを得た。

ch.7 「並列コンピュータ」

p.203

たいていの計算処理が並列的に実行できる複数の部分問題に分解可能な理由の1つは、計算処理が自然界の物事をモデルに構築されていることが多いからである。そして、自然界の物事が並列的に機能するので、それをモデルとした計算も並列的に実行できるのである。

ch.8 「工学的アプローチの次にくるもの」

p.234

工学的な技術を超えるための道具とは、我々に、我々の理解を超越したものを想像させてくれる道具である。そして、人類に対する最大の技術的貢献とは、それを可能とする道具を丹生させることにある。

【Python】string.join()を用いてリストから文字列や整数に変換する方法

AtCoder Beginner Contest 150のC - Count Orderを解いていて、以下のような空白混じりの順列が標準入力として与えられた時に、空白を結合して整数として扱えないだろうかと考えました。

1 3 2

実装

n = input().split()           # => ['1', '3', '2']
string_n = ''.join(n)         # => '132'
int_n = int(''.join(n))       # => 132

学んだこと

調べる前に、join()を使えば良さそうだと目処は立っていましたが、join()が文字列メソッドだと学べたことで、理解が深まりました。

参考文献

  • 入門 Python3

【競技プログラミング】 AtCoder Beginner Contest 127 - C問題

foobarwithgoogleでは全問クリアすることが出来ず、呆気なく終わってしまいました。 悔しい気持ちが残りますが、本来の目標である水色コーダーを目指し、AtCoder Problemsで鍛錬しています。 2月は最低3問はACすることを日課にしており、現在は2, 3, 8, 9日の4日間でsubmissionできませんでした。

本日14日なので、およそ30%の割合です。業務に脳内のキャパを占有されていたのが最大の要因ですが、それは学生生活、社会人生活を送る皆さん全員に起こる話なので、言い訳に過ぎません。

残り半月は毎日ACできるように少し自分に負荷をかけ、学んだことのアウトプットも同時に行うと緊張感を維持できるのでは、と考えた次第です。

さて、それでは本題のABC127 C問題の解説に移ります!

詰まったところ

問題の意図が理解出来なかった。 解説放送を見て、Li ~ Riが各ゲートを通過可能な番号(つまりIDカード)だと理解した。

解法

max(Li) ~ min(Ri)に存在する整数(つまりIDカード)が、全てのゲートを通過できる。

n, m = map(int, input().split())
l, r = 0, n
for i in range(m):
    a, b = map(int, input().split())
    l = max(l, a)
    r = min(r, b)
print(max(0,r-l+1))

参考サイト

1年前にRails Girlsに参加しエンジニアになった振り返り

TECHPLAY女子部 Advent Calendar 2020 - Adventar14日です!

初めまして、昨年11/27にRails Girls Kyoto #10に参加し、現在は広告系の会社でエンジニアとして自社サービスを開発している@eri290です。
晴れてエンジニアになれたので、この1年取り組んできたことを振り返っていきます💆🏻‍♀️
Rails Girlsに参加した記録はこちら eri2490.hatenablog.com

目次

はじめに

1年強の時間経過で何に取り組んだのかを振り返る前に、まずは就活についてお話しておきます。というのも、6月初旬に友人がCTOを務める会社にお声がけいただき、そのまま入社を決断したからです。

当時関西に居住していた為、足を使っての会社探しに難航していました。その上に、徐々に社会活度へ影響を及ぼし始めていたCOVID-19が、未経験の採用にどの程度影響するのかが読めず、不安が募っていました。

会社を選ぶ際に一番重視していたのは技術力を伸ばせる環境か否かでした。
一方で技術力云々以前の問題として、「女の子なのにエンジニアやってて偉いね」と声をかけてくる人がいないことも必須でした。どれだけ技術に明るい方がいようと辛くなってしまい、結果的に集中力を失ってしまうことも合わせて考慮した上で、自分の望む環境が用意されていると思えた為、就活に時間を使うよりもコードを書く時間を作ることを選びました。

なので未経験者の就活に参考になる部分は多くないかもしれませんが、実務と現在取り組まれていらっしゃることのギャップを埋める手助けになれば幸いです。

それではエンジニアが気になり始めてから取り組んだことを順に列挙し、合わせてその時にどういうことを学び感じながら過ごしたのか記述していきます!

Rails Girls参加前後から内定が決まるまでに取り組んだこと

  • Rails Tutorial: 3周
  • Vue.jsでTODOアプリの作成
  • Dockerを用いてRuby on Rails+Vue.jsでToDoアプリの作成

Rails Tutorialを2周完走後以降、週に1度、現在の上長から課題をもらいそれに取り組んでいました。課題を全て実装できていない状態だったことも多々あり、2回に1度の割合で胃が痛くなっていました。それでも折角教えてもらえるのだからと毎日少なくとも3時間はコードを書くようにしていまいした。その甲斐あってか、5月の終わり頃に採用のお話が出てきます。

内定後(7月)に取り組んだこと

  • Python+Vue.jsでElectronを用いたデスクトップアプリの開発

今では好きな言語だと思えるPythonも、当時はまだ触ったことがなかったので、何という無茶振り🤯と焦りました。 最初にProgateで簡単な記述方法だけ学び、コードリーディングに取り掛かりました。
チュートリアルを写経している時とは違い、自分以外の誰かが使うコードを書くことにワクワクしてきました。 新しく学ぶことばかりで全てをググっていたのですが、一番大変だったのはjsonエンコードと、デコードする時に正規表現を用いたことです。当時費やした時間と感情から、未だに正規表現への苦手意識が拭えません。

今思うと、わからないことが当たり前だからできないことを卑下する必要は全く無いのだよと当時の自分へアドバイスしたいです。

入社後に取り組んだこと

晴れて8/16に無事、入社日を迎えました🎉

  • Ruby on Rails + Vue.jsで軽微な機能の追加と修正
    まだ「分からないことがわからない」状態でした。時間は経過するもエラーやバグが解決できず、助けを求める日々でした。
    呼吸の方法も知らないまま「インターネット」という大海に飛びこみ、溺れている感覚です。
    一方で9月末頃から、今やっていることが「パケットの受け渡しだ」と徐々に体感できるようになってきます。

  • 上記アプリケーションにauth0を用いたログイン認証の追加(仕様変更によりデプロイは見送りになりました。悲しい。)
    プロトコルの存在を知り、インターネットを築いてきた”人”の存在を感じました。 頭の片隅で「今自分がどこにいて、どこに何をどういう状態で送りたいのか、または受け取りたいのか」を意識するようになってきました。

  • Ruby on Jets + Vue.jsで簡単な機能の修正
    10月中旬~11月初旬です。
    この時期から「分からないことがわかる」という状態になりました。何をどう質問すれば良いのかわからずに踠いていた状況だったのが、やっと腑に落ちる言葉で質問できるようになりました。
    インターネットという大海をやっと航海している気分です。
    ただ、Jetsのエラーかと思いきやDockerのエラーだった時はまだまだ何もわかってないなと反省しました。

  • 再びPython+Vue.jsでデスクトップアプリの開発
    軽微の機能修正であれば、難なくこなせるようになりました。
    7月に取り組んでいた時は3週間かかっていたことが3時間で終わった時に、ようやくスタートラインに立てたと実感しました。

  • AWSのEC2インスタンスRailsアプリで作成したサンプルプロジェクトをデプロイ
    0からサーバーに構築していくのがとっても面白かったです。Railsのproduction環境を使うのは初めてだったのでマイグレーションの時に戸惑ったものの、コンピューターサイエンスの面白さをもっと理解したいと思える余裕が生まれました。

執筆中の現在は、本番環境のAWSssh接続して軽微な修正に取り組んでいます。

業務外で最近取り組んでいることは、foobarwithgoogleです。
簡単に説明すると、回答はPythonJavaのみで可能なGoogleがランダムに招待を送っているコードチャレンジです。聞き慣れない言葉でしょうが長くなってしまわない様に説明はQuoraの記事に譲ります。What is Google Foobar? - Quora

風の噂では聞いたことがあったものの、実際に目にすることは無いだろうと最初から参加権を諦めていたので、この画面が表れた時は心底驚きました。

f:id:eri2490:20201213161521p:plain
captured by @eri2490
"Python try except"でググった時に出てきたこのラッキーなインビテーションはサンタさんからの早めのクリスマスプレゼントだと思っています🎄
現段階ではAtCoderのB問題を難なく解けるぐらいでアルゴリズムの作成力を強化している段階だったので、勉強の良いモチベーションです!

2020年の総括と来年の目標

最後に本年を振り返るには、COVID-19の社会情勢の変化が特筆すべきなのは言うまでも無いですよね。

年始の2/17に、HYUKHOという韓国のバンドが開催したライブに行きました。当時はまだ日本でライブなどの大規模イベントが中止や延期になっていなかったものの、先に流行が拡大した韓国や中国では軒並みキャンセルとなっている状況でした。「このライブを逃したら、次にいつオフラインでのライブに足を運べるかわからないから」という判断で、開催されるのか不安な中チケットを取ったことを覚えています。

その後日本国内でも徐々に感染者数が増加し、オンラインのライブは2つ参加したもののオフラインでのライブはその日を最後に本日を迎えています。

そんな中でエンジニアという仕事をしながら感じるのは、どんな状況であろうとトライアンドエラーを試せることの有難さです。最近ハマっているキングダムでも「実戦に勝る修行はない」と実戦が強くなる為の最短ルートだと扱われていましたが、「自分の足りない部分」と向き合える環境は、当たり前なようで当たり前じゃなかったことに気が付けた1年でした。

AtCoderで水色のランクを目標として、2021年もまたどれだけできることが増えているのかを楽しみに、日々真摯にコードに向き合います!

またアルゴリズムを考える時に、問題の理解がACへの道のりと切ってもきり離せないように、コードを書く上で事業への理解が切っても切り離せないことに気がつきました。
2020年はコードを書くことに必死で気になる事業を考える余裕を持てませんでしたが、その面も少しずつ意識していきたいです。

それでは良いお年をお迎えください🎍

and...

I wish you have a merry christmas🎅

f:id:eri2490:20201214191246j:plain

Rails Tutorial 13章でcarrierwaveを導入した時のエラー

エラー内容

Running via Spring preloader in process 78243 Run options: --seed 24974

Running:

E

Error: MicropostTest#test_content_should_be_preset: NameError: uninitialized constant #<Class:0x00007ffc7f2e9040>::PictureUploader app/models/micropost.rb:4:in <class:Micropost>' app/models/micropost.rb:1:in

'

rails test test/models/micropost_test.rb:20

E

Error: MicropostTest#test_user_id_shoud_be_present: NameError: uninitialized constant #<Class:0x00007ffc7f2ea968>::PictureUploader app/models/micropost.rb:4:in <class:Micropost>' app/models/micropost.rb:1:in

'

rails test test/models/micropost_test.rb:15

F

Failure: MicropostTest#test_content_should_be_at_most_140_characters [/Users/eri2490/02-01-web_dev/rails_tutorial_03/sample_app/test/models/micropost_test.rb:27]: Expected true to be nil or false

rails test test/models/micropost_test.rb:25

..........F

Failure: MicropostsInterfaceTest#test_micropost_interface [/Users/eri2490/02-01-web_dev/rails_tutorial_03/sample_app/test/integration/microposts_interface_test.rb:14]: "Micropost.count" didn't change by 0. Expected: 38 Actual: 39

rails test test/integration/microposts_interface_test.rb:9

............................................

Finished in 7.343647s, 7.8980 runs/s, 39.4899 assertions/s. 58 runs, 290 assertions, 2 failures, 2 errors, 0 skips

対処方法

config/environment.rb に追記 require 'carrierwave/orm/activerecord'

試していないが、springを再起動して直す方法もあるようだ。

参考記事

Railsチュートリアル中にNameError: uninitialized constant Micropost::PictureUploaderが出た時の対処法 - Qiita

NameError: uninitialized constant Article::ImageUploader when using Carrierwave on rails 4.1.5 - Stack Overflow

AbstractController::Helpers::MissingHelperError

エラー内容

Rails Tutorial 13章 リスト 13.28 Userプロフィール画面に対するテストを記述し、テストを実行すると、Missing helper file helpers/microposts_helper.rb (AbstractController::Helpers::MissingHelperError)というエラーが出現した。

対処方法

$ spring stop

参考サイト

stackoverflow.com

特に "AbstractController::Helpers::MissingHelperError: showing a custom controller helper was missing when I ran the test suite. Running "spring stop" as suggested at the terminal (Linux) and rerunning the test suite was immediately successful with no other action required. " という箇所が役立った

npm install -g npm @vue/cliを実行する時に出たエラー

エラー内容

Unexpected end of JSON input while parsing near '...":"^1.2.0","gulp-repl'

対処方法

npm cache clean --force

考察

エラーの出現理由は不明だが、取り敢えずnpm周りのキャッシュを削除したらいいようだ。 お陰様で無事インストールできた。

参考記事

Installing ERROR | Unexpected end of JSON input while parsing near ' : ' · Issue #19072 · npm/npm · GitHub