【感想】ノンプロ研講座 freee APIコース第1期の第1回

 

 

contents

 

受講後:申し込んでよかった!

講師 森さんがご説明くださった内容は、まさに求めていた粒度の情報で安心しました。

講座後に予定があったとのことですが、写経の時間を押してしまった容疑者の筆頭は私です......

次回は、Macとコーディングのリハビリをして、万全のコンディションでのぞみます。

 

講座のアイスブレイクでは、TAつじけさんの明るさにとても元気をいただきました。みなさんこんなに場づくりが上手いのか?!という戸惑いは、のちに「あながち間違っていなかった」という感動に変わりました。

 

講座後の懇親会ではタカハシさんにいいかんじに話を振っていただき、業務で死んだ脳でもなんとか会話の輪に参加できました。

 

みなさん人がよいです。

相互理解が深く、上下関係があまりないけど、お互いに尊重していらっしゃる。

もし3年前、大学を修了時にノンプロ研を知っていたら人生どれだけ楽しかっただろうかと思うと妄想が止まりません。

受講前:まったく想像できない。。

講師の森さん、会社の先輩からブログをオススメされたことある!

freeeの開発者コミュニティーからのメール(だったと思う)で本講座を知った。

ノリと勢いで申し込んだけどそんな定期的に受講する時間とれる?いまの業務量で。(心の声)

今後の意気込み:成果物の要件定義をがんばろう

お恥ずかしいことに、普段はfreee会計を「会計ぜんぜん理解してない初心者」として利用しているだけです。

そもそも経理担当者の課題が想像できていないので、何をGASで便利にするのか聞かなきゃあいけない。

ついでに会計の基礎知識を身につけたい、本当にいい加減がんばらねば......

Qiitaに第1回の講座の解説を書こう。自分の中で整理できる。

自分の中で、プログラムは英語と同じくらい「普段と違う脳みそを使う」感があるので、プログラミング解説のわかりにくさはそこにある気がしている。

先に日本語で概念を固める、という戦術はどうかしや、という実験をかねて書いてみたい。(心の声)

APIについての理解を確かなものにできる予感がしています。

タイミングを見て、VBAPython、ライティングにも参加予定です......

末筆ながらノンプロ研の皆さま、今後ともよろしくお願いします。

「リモートワークでハマったこと」と対策まとめ

 はじめに

リモートワークをしていると、通勤がないことによる弊害を感じませんか?

現在、私が感じているリモートワークによる弊害を整理して、思いつくかぎりの対策を挙げていこうと思います。

本稿は技術的な記事ではありませんが、技術系の職につく人には、似た問題を抱える人も少なくないのではないでしょうか。

 

ハマったこと

上から順に、原因から結果の並びです。

  1. 給料以上に働こうと張り切って、過度なやる気をもつ

    f:id:mt4proconkai:20201125205841p:plain

  2. 慣れないビデオ通話で会話の呼吸が読みにくい状況で先輩社員と面談をする
  3. 労働時間外の自己研鑽の名目で、気後れするほど高い長期目標をたてる。
  4. 始業時間、就業時間の管理が曖昧な風土で、仕事の遅れを取り戻そうとなんとなくサービス残業をするようになる

  5. もともと自主的に外出する習慣がなく通勤もないため、運動不足になる
  6. ただし、生来、運動部などで毎日のように運動していたため、運動をしないと夜に眠気が訪れない
  7. 早寝早起きができなくなる

    f:id:mt4proconkai:20201125205940p:plain

  8. 睡眠のゴールデンタイムである22~2時に寝ていないため、睡眠の質が低くなる
  9. よく眠れていないと精神的に疲弊して、労働意欲、自己研鑽の意欲が下がってくる
  10. 日中の知的労働生産性が下がり、1つの仕事にかかる時間が長くなる
  11. サービス残業をして自己研鑽の時間がとれなくなる
  12. 長期目標にもとづく短期目標を設定しておらず、現状と目標の乖離がよくわからないけど全く無謀に思えてくる
  13. いよいよ自己研鑽をしようと思えなくなり、自己肯定感が低下する

    f:id:mt4proconkai:20201125210104p:plain

  14. 理想と現実のギャップに苦しみ、必要な用事があっても外出する気力がでずドタキャンする(うつ症状)
  15. 休日に、やる気はでないけどとにかく自己研鑽をしなければと思いつめて、現実逃避から過眠症になる

対策

ざっくりと方針を列挙してみます。

それぞれ、簡単に実行できる具体的なアクションプランに分解するなど、具体策が必要です。

  • 運動を毎日する
  • 瞑想を毎日する
  • 仕事と関係のない友人と定期的に話す(通話でも)
  • 週末は自然に触れる体験をする
  • 背伸びしすぎず、謙虚になりすぎない(ビデオ通話では伝わる情報量が少なく、相手から見た時も細かな機微、ニュアンスがわかりにくいため)
  • 毎日、日記をつけて感謝と、反省と学びと対策を書く
  • 長期目標を設定したら、指示がなくても自主的に具体的な習慣まで分解する
  • 少なくとも週毎に進捗を確認して、短期目標の軌道修正をする

まとめ

この記事を書いて、何十時間も無駄にした反芻思考の内容を筆記開示できました。

筆記開示した内容を記事として公開すると、なおさら客観視できる気がします。

同じような境遇にある人、これから同じような境遇に立つかもしれない人の参考になれば幸甚です。

ABC179 Eが解けそうで解けなかったからAC回答を書いてみた!

はじめに

aimakerさんのAtCoder Beginner Contest 179での成績:5623位
パフォーマンス:411相当
レーティング:55→81 (+26) :)
Highestを更新しました!

atcoder.jp

コンテスト開始30分後に気づいて参加しました。

ABC179のA, B, C問題を全完できました!

E問題が解けそうでしたが、TLE、WAでした!
 
くやしかったので、次の日にC++の解説放送を見ながらRubyで書いてACを取りました。

問題

atcoder.jp

解法

atcoder.jp

学んだ処理

ja.wikipedia.org

例)(n ,x, m) = (6, 2 ,11)

id = Array.new(m, -1)

まず-1が11項ある配列 id を用意します(鳩が入るための部屋)。

id = [-1, -1, -1, -1, -1, -1, -1, -1, -1 , -1, -1]

 

仮定より数列の初項が 2 なので、id[2] = 0 にします(2番の部屋に0番の鳩が入る)。

id = [-1, -1, 0, -1, -1, -1, -1, -1, -1 , -1, -1]

 

漸化式の処理:前の項を2乗して11で割ったあまりが次の項です。

2*2 = 4

4%11 = 4

 

数列の第2項が 4 なので、id[4] = 1 にします(4番の部屋に1番の鳩が入る)。

id = [-1, -1, 0, -1, 1, -1, -1, -1, -1 , -1, -1]

次の項、次の項と見て行くと、高々m回目で id のすべての項が 0 から 10 の数に置き換えられます(高々すべての部屋に1羽ずつ鳩が入る)。

 id = [-1, -1, 0, 3, 1, 2, -1, -1, -1 , 4, -1]

 

こうして数列の各項の値を配列 id の値に入れていくと、はじめて同じ数(この場合、数列の第5項の4)が2回目に出たときが検出できます(鳩を入れようとした部屋に、既に鳩が入っている)。

id[4] = 5

 

まとめ

これまで「配列といえば左から順に埋めるものだ」とばかり思っていました。

鳩の巣原理でループを見つける解法を理解できたときは膝を打ちました(心のなかで)。

paiza 御中「お電話ありがとうございました」

 はじめに

EN:TRY Produced by paizaという求人サイトをご存知ですか?

paiza.jp

「ああ、paizaって聞いたことある。なんか問題といて応募するんでしょ?(わたしには無理無理)」

というあなた!

paizaはいいぞ!!!

 

注意:この記事は、いつになく目的のない記事です。

あえてターゲットをいえば「これからエンジニア転職するぞ」というあなたです。

いきさつ

paizaから電話がかかってきた。

「いろいろ拝見しましたけど本当に頑張ってますね。未経験なら、望みの薄い求人に応募するより、『気になる!』だけ押したほうが、企業からオファーをもらえる可能性がゼロではないので。ご応募された企業様には、未経験で検討してもらえないか掛け合ってみます。本当にうまくいってほしいので」

おどろいた。どうしてこんなに親身に個別サポートをしていただけるのか。

paiza転職エージェントサービスに登録した覚えもなければ、paizaに親戚がいた覚えもない。

これがpaizaの普通なのか。

翌日から、望みが薄かったはずの企業から面接のオファーが届いた。

まだ内定は1つも頂いていないけど、とにかくうれしい。

実はpaizaが私の親戚の勤め先から投資を受けているのか。

いま、とてもうれしい

うわあこんなに面接があるや、緊張でしにそうだ。

そう思っていた矢先、paizaの通知がきた。

東京の某システム開発会社からカジュアル面談のお誘いだった。

こちらからは「気になる!」を押していないはずだった。

会社の説明を読んだ感想は「最高!」のひとこと。

文章、写真を含めて全体から感じた直感で、ここで働きたいと思った。

登録したのは3日前

登録した日は「昨日はGreenの日だったから、今日はpaizaの日にしよう」とひたすら課題を解いた。

感触としては、AtCoderと比べて数学パズル的な要素が大きくて、悩み甲斐がある。

それと、問題設定の情報量が多くて、素直に実装しているとコード量が多くなりがち。

これほど連休がいらないと思ったことがあっただろうか

「まずは面接で雰囲気を感じてみる」スタンスで求人に応募していたせいで、面接、適性検査がたてつづけに入っている。

オファーをいただいた企業の方を待たせるのが気になり、どうして連休があるのかとうらめしい

まとめ

paizaに登録してみると、ポートフォリオを登録するフォームもあり、プログラミングスキルチェック以外の面でも見てもらえる。

他にも、面接が決まった後に履歴書・職務経歴書を出せばいいというのが、気が楽でいい。

あなたにも思いもよらぬ理想の企業からオファーが届くかも!?

paizaはいいぞ!!!

paiza.jp

縦画面か横画面かでフォントサイズの計算を切り替えたい!

 はじめに

そこのあなた!レスポンシブデザインに悩んでいませんか?

定石では画面の横方向のピクセル数によって切り替えます。

 

(例)@media (min-width: 20em) {

  font-size: 1.25em;

}

 

しかし、今回作成しているアプリケーション(下記リポジトリ)では画面の縦横比によって切り替えました。

github.com

方法

@media only screen and (min-aspect-ratio:1/10) {
body {
font-size: calc(100vw / 23);
}
}

@media only screen and (min-aspect-ratio:5/8) {
body {
font-size: 1.5em;
}
}

 

前半はモバイル端末向けのCSSです。

 どのモバイル端末でも1行が23文字になるように計算しています。

もっとも、レイアウトもフォントサイズもem単位で記述したので、

大きな文字を使うところでは1行が10文字になったりします。

 

後半はPC向けのCSSです。

ブラウザの文字サイズ設定をもとに文字の大きさを決めています。 

ウィンドウのサイズには影響されません。

 

まとめ

昨今のモバイル端末が4:3、16:9と縦に伸びているため、当面は有効手ではないでしょうか?

10年後にはARが普及して通用しなくなるかもしれませんが、それはそれで面白い世界です。

 

AR世代「えー、お父さんが若かったころ、あんなちっちゃい画面見てたの!?」

「変数は1文字?それとも1単語?」ABC175C

目次

はじめに

普段、変数は1文字で定義しますか?

変数をアルファベット1文字で定義すればスッキリと書けて複雑な処理も短くまとめられます。

しかし、英単語を利用して変数名を定義したほうがいい、と実感した1問でした。

回答

atcoder.jp

# 座標xからtimes回、距離distだけ移動する
x, times, dist = gets.chomp.split.map(&:to_i)
# 原点からの距離absol
absol = x.abs
# 原点を通りすぎず最接近するまでの手数min
min = absol / dist
# 通り過ぎることができない場合
if min >= times
# できる限り(times回、距離dist)近づいて出力
puts absol - times * dist
# 原点の手前まで最接近してから、原点を奇数回またぐ場合
elsif (times - min).odd?
# 原点の手前まで最接近して、1回またいだときの位置を出力
puts (min + 1) * dist - absol
# 原点の手前まで最接近してから、原点を偶数回またぐ場合
else
# 原点の手前まで最接近したときを出力
puts absol % dist
end

工夫

はじめ、問題文に愚直にx,k,dで入力を受け取っていました。

しかし、回数をtimes、距離をdistanceという英単語を参考に書き換えました。

このおかげで処理の書き間違いを見つけることができました。

(1日テックキャンプをして疲れ切った状態では、特に効果的でした。)

感想

改良するなら、elseの出力内容 absol % dist をfrontのような変数に代入したほうがいいです。

frontの値を出力するだけでなく、計算に再利用して、elsifの出力を front - dist と書きかえたほうが、書き間違いが減り、可読性が向上します。

 

不特定多数のひとにわかりやすい書き方というのは永遠のテーマですね。

「next if が超便利!」ABC175B

目次

問題

atcoder.jp

f:id:mt4proconkai:20200819235603j:plain

赤、青を1本目、2本目に選ぶと、三角形は3通りできますね、という具合のお話

(長さはフリーハンド、参考程度です)

回答

# 棒の本数を受け取る
n = gets.to_i
# 棒の長さを受け取って小さい順に並び替える
a = gets.split.map(&:to_i).sort
# 答えの変数を初期化する
ans = 0
# i番目の棒を1本目とする
(0...(n - 2)).each do |i|
# j番目の棒を2本目とする
*1.each do |j|
# 「2本目の棒が1本目の棒と同じ長さ」だったら次をあたる
next if a[i] == a[j]
((j + 1)...n).each do |k|
# 「三角形が作れない」か、「3本目の棒が2本目の棒と同じ長さ」だったら次をあたる
next if a[i] + a[j] <= a[k] || a[j] == a[k]
# 三角形が作れる選び方を見つけたので、答えに加える
ans += 1
end
end
end
puts ans

学んだ処理

docs.ruby-lang.org

感想 

全探索をするにしても、nextを使うと不要なループを続けなくていいので計算時間が短くなっていい感じです!

*1:i + 1)...(n - 1