主夫ときどきプログラマ

データベース、Webエンジニアリング、コミュニティ、etc

MENTAを1ヶ月やってみたかんじ

MENTAというサービスに登録してみた。

「Techpitで教材をこうかいするんですよねー」という話をしていたら知人から紹介されてこのサービスをしった。教材を公開した後に、教材のユーザーとコミュニケーションが取れる良い方法がないかなーという話をしていたので、MENTAを教えてくれたのだろう。

それで、はじめた。 ユーザーにとって良い学習体験になるんじゃないかなぁと思った。

また、昨年からコーチングや教育という部分に少しずつ触れる機会があったけど、組織に属していないためそのへんのスキルアップや実践する機会がないので、MENTAをつかってそういう機会をつくれるんじゃないかという考えもあった。

いまのところMENTAで儲けようという気持ちはなくて、プラットフォームとして利用したいということで使っている。 ただ、そうなるとMENTAのプラットフォームにフリーライドすることになってしまうので、任意で投げ銭が出来るような単発のプランと、ちゃんとメンティに向き合うという責任を発生させるための月額プランを用意した。

1ヶ月ほどやってみて

ありがたいことにメッセージを送って相談してくださる方が数人いた。
やりとりをして感じたことは、
メッセージから想像することも大事だけど、相手の置かれている状況をわかるように教えてもらうことが大事だということ。
OSSの開発者ってこんな感じなんだと思う。

menta.work

www.techpit.jp

じぶん Release Notes (ver 0.37.10)

masayuki14 (ver 0.37.10)がリリースされました。更新内容は下記のとおりです。

仕事

  • WordPressを運用している人たちのお手伝いをした
    • PHPをどうにかするお仕事だった
    • WordPressを使う人達はエンジニアリングしたい人たちではない
    • エンジニアリングしたい人は離れていく
    • そして必要かどうかわからないコードが溢れていくのだろう
  • Techpit教材は4章をリリース
    • 5章の完了には至らなかったがあと少し

Tech

  • AtCoder
    • ABCコンテストに3回参加
    • ちょびっとRatingが上がった

勉強会・イベント

  • Python系のオンラインイベントに参加
  • はんなりPythonもオンラインイベントを開催
    • 今後も増えそう
  • 各地でオンライン開催されているが家事育児のピークタイムとかぶるので参加はむずい

読書

あそび

KPT

Keep

  • はんなりPythonをオンラインで開催
    • プロコン部も4月上旬に予定
  • MENTAのページを変えたら少し反応があった
  • AtCoderのビギナーコンテストに参加する

Problem

  • SoftwareDesign読めてない
  • MySQLドキュメント読めてない
  • Rustむずくて止まってるやばい

Try

  • Techpitの6章はサーバーレスをやる
    • それ用にGCP使ってみる
  • MENTAに画像追加してみる
  • MySQL8.0のデバッグビルドやってみる

じぶん Release Notes (ver 0.37.9) - 主夫ときどきプログラマ

Ruby教材 Release Note for 0.4.1

公開中のRuby学習用の教材のバージョンが 0.4.1 となりました。

Release Note

細かい修正を行いました。

  • 文言の統一
  • 表記ゆれの統一
  • リンク先のページが誤っている箇所の訂正
  • fix typo

動画の埋め込み

  • 4-2 optparse標準ライブラリを使うに解説動画を埋め込みました
  • 4-3 オプションの実装に解説動画を埋め込みました

細かい部分の修正ですが、文言が違ったり表現が違ったりすると、学習への集中の妨げになってしまうので、そういう引っ掛かりがなくなるようにリリース後でも少しずつですが文章もアップデートしていっています。よろしくおねがいします。

進捗

現在は5章のオブジェクト指向プログラミングについて執筆中です。8割がた終わっているので、来週にはレビューに入り、月末にはリリース出来ると思います。 6章は自動化について書く予定です。始めはcronとかでいいかと思ってましたが、GCPでサーバーレス構成にしてSlackに通知、って感じのほうが今っぽいので、そうしようと思っています。ご期待ください。

www.techpit.jp

深さ優先探索をマスターした。

蟻本の序盤で出てくる深さ優先探索を練習すべくこの問題をやっていた。

atcoder.jp

最終的にこんな感じに落ち着いて、まぁ解説通りだろっていう感じです。

ENV[Z='RUBY_THREAD_VM_STACK_SIZE']||exec({Z=>'100000000'},'ruby',$0)
(N, M) = gets.chomp.split.map(&:to_i)
@a = readlines.map{|l| l.chomp.chars}
def search(x, y)
  return false unless x >= 0 && x < ::N && y >= 0 && y < ::M
  return false if @a[x][y] == '#'

  return true if @a[x][y] == 'g'

  @a[x][y] = '#'

  return true if search(x+1, y)
  return true if search(x, y+1)
  return true if search(x-1, y)
  return true if search(x, y-1)
  false
end

result = false

(0...N).each do |x|
  (0...M).each do |y|
    if @a[x][y] == 's'
      result = search(x, y)
    end
  end
end

puts result ? 'Yes' : 'No'

RUBY_THREAD_VM_STACK_SIZE を変更しないといけない

ただ、ここに至るにはいくつかの問題があって結構苦労した。 コード自体はわりとすぐ書けたんだけど、どうにもRuntimeErrorがでている。 しかも提出結果がREになるだけで、具体的にどんなエラーが出ているかわからない。 どうしようもないので、Rubyの正解コードを見ていると共通点があった。

RUBY_THREAD_VM_STACK_SIZE 環境変数を指定している。これは以下の通り。

RUBY_THREAD_VM_STACK_SIZE: スレッドを作る時に作成する VM スタックサイズ(デフォルト: 128KB (32bit CPU) or 256KB (64bit CPU)) https://magazine.rubyist.net/articles/0041/0041-200Special-note.html

どうやら再帰呼びだしのスタックが溢れちゃってRuntimeErrorがでるので、そのサイズを大きくしてエラーがでないようにしよう、ということ。 しかしRUBY_THREAD_VM_STACK_SIZE はプログラム実行中には変更できない仕様なので、

exec({'RUBY_THREAD_VM_STACK_SIZE'=>'100000000'}, 'ruby', $0)

としてスクリプトを再実行する必要がある。
らしい。
これは知らなかったらわからない案件ですね。

再帰関数内で変数使わないほうがいい

RUBY_THREAD_VM_STACK_SIZEの対処がわかって、これでイケるだろうと思ったけど今度はメモリ不足。
その時のコードはこんな感じ

def reach_goal?(x, y)
  dx = [ 0, 1, -1, 0]
  dy = [-1, 0,  0, 1]

  (0..3).each do |i|
    nx = x + dx[i]
    ny = y + dy[i]

    next unless nx >= 0 && nx < ::N && ny >= 0 && ny < ::M
    return true if @a[nx][ny] == 'g'
    next if @a[nx][ny] == '#'
    next if @reached[nx][ny]
    @reached[nx][ny] = true
    return true if reach_goal?(nx, ny)
  end

  return false
end

メソッドのコールスタックに配列とかループとかそのへんのデータを乗せる必要になるから、たぶんそういうことだろう。 それで、関数内の変数とかループとかをなくして、コールスタックに積むデータをなるべく減らすようにコードを改善したらクリアできた。めでたしめでたし。

わからない時は答えをみればよい

わからない時は正解のコードを見ればよい。アルゴリズム自体には問題はなかったけど、実装方法に問題があった、って感じだ。 わからない時は答えみればいいし、それで理解できたらいいのだ。
幸いAtCoderには解説のPDFとYouTube動画があるし、正解のコードもいろいろ見れるので、学ぶには良い環境だ。

こぼれ話は、原因がわからないときにRustでやってみようと思って試したけど、最初の迷路データをSTDINから取得する部分で詰んだ。Rustむずい。っていう話。

Ruby教材を Version 0.4.0 にアップデートしました

公開中のRuby学習用の教材のバージョンが 0.4.0 となりました。

Release Note

4章が追加されております。

4章 コマンドライン設計
    - 4-1 オプションによる挙動の制御
    - 4-2 optparse標準ライブラリを使う
    - 4-3 オプションの実装

4章はOptrionParserクラスを使って、コマンドオプションの実装を行っております。これは標準ライブラリなので、Gemのインストールは不要です。OptionPerserの使い方を解説し、スクレイピングコマンドにオプションの挙動を追加しています。

www.techpit.jp

なお、動画は作成済ですが、教材にはまだ反映されておりません。随時アップデートする予定です。

youtu.be

youtu.be