Man page of CHIKU_WAIT(2)

システムソフトウェアとポエムの差が激しいので,高山病に注意

未来大高度ICTコースのはなし

この記事はFUN Advent Calendar 2018の19日目の記事です adventar.org 某学科長に宣伝が足りないと言われたので。はい、本題通りです。みんな来てくれ。

不人気なコースなので宣伝をしていこうかなという次第です。学◯委員会のコース説明みたいなのでもハブられるので…

続きを読む

大学の授業でペアプロ・モブプロをやってみた話

こんにちは。最近大学でサーバサイドのコード書いたりモバイルのバグ探ししまくったりドキュメントやガイドラインを生やしたりインフラの設定生やしたりコードレビューしたりリーダー業したりスクラムの導入をしてるchikuwaitです。

いつもの前提

前回のブログ(学生だってちゃんと開発したい!大学の授業でスクラムを導入しようと思った話 - Man page of CHIKU_WAIT(2))でも書いてありますが、 公立はこだて未来大学では3年生の必修授業で「プロジェクト学習」と呼ばれる学科・コースの枠を超えた通年の開発演習があります。この授業では様々なテーマで最大15人程度のチームを組んで1年間取り組みます。詳細はこちらを参照。www.fun.ac.jp

前回同様、リーダー業やってて色々な開発手法だったり入れてみた話をしていこうかなと思います。

ペアプロ・モブプロについて

ペアプロとは

ペアプログラミングのことで、名前のごとくペア(2人)でプログラムを書いていく開発スタイルです。ペアプロにはドライバとナビゲータという役割があります。 ドライバは実装の細かい部分を考えながらナビゲータと一緒にプログラムを完成させることに集中し、ナビゲータは一緒に考えたりコードレビューやバグチェックなどをします。 また、ドライバとナビゲータは一定期間でローテーションしていきます。

モブプロとは

モブプログラミングのことで、ペアプロの人数をもう少し増やして、4〜5人程度のモブ(群衆)でプログラムを書いていく開発スタイルです。ペアプロ同様にドライバとナビゲータが存在し、一人がドライバ、残りはナビゲータです。

ペアプロ・モブプロに至った理由

チームの状況

プロジェクト学習では基本的に成果発表などの授業スケジュールの関係で後期の9月末〜12月第一週が開発期間となるような事が多いです。とはいえ、メンバー全員が授業でやらないようなモバイルアプリやサーバサイドアプリの開発スキルを持ち合わせていてすぐにサービスの開発!!!みたいなことはほぼありえないので、基本的にどのチームも夏休み期間でその分野の勉強をするようなことが多いです。 私達のチームでも開発経験が少ない学生には夏休みでSwift、Kotlin、Ruby(Rails)について個人での開発経験が多いメンバーが支援しながら本を一冊やり終えたりしながら技術のキャッチアップをしてもらいました。多分他のチームよりは頑張ってやってたと思います。

しかしながら、いくら本を何冊かやったところで開発めっちゃすぐにできるようにはならないですし、一人である程度書けるようになるには時間がかかります。そこで僕としては個人で色々アプリ書いてきた人の知見を直接教えたりしながら全員一定レベル(一人である程度機能追加ができるレベル)まで成長できるような仕組みがほしいなと考えていました。そこで試しにペアプロ・モブプロを導入してみようと考えました。

何を求めてやったのか

僕としてペアプロ・モブプロに求めたものは以下の通りです。

  • メンバーの教育
  • ソースコードの共有初秋
  • レビューコストの削減
  • 品質向上

上でも書いたメンバーの教育を第一目標として、直接レビューをすることで一人である程度実装ができるようなるくらいを目標にしました。 また、複数人でコードを考えることでソースコードを共有所有していきたいと考えました。それから、どうしても自分である程度書ける人や開発をリードする学生にソースコードのレビューが集中しがちなので、リアルタイムなコードレビューはレビュー待ちプルリクエスト渋滞の解消なども期待しました。

やってみた

授業でペアプロ・モブプロやるときのルールとしては

  • 1時間ごとにドライバ交代
  • できたら褒めたり拍手したりハイタッチ
  • 強い口調や不快にさせる言動はNG
  • お菓子食べたりしながらリラックス を設定しました。

f:id:chikuwa_it:20181123122519j:plainf:id:chikuwa_it:20181123122524j:plain

本当はもっと大きなモニターを使いたかったんですが教室の関係上無理でした…。

実際やってみてどうなった

授業でモブプロ・ペアプロを導入することで、メンバーの中ではわりと好評だったりしました。どうしても自分ひとりで躓いて解消できない…みたいなことは学生多かったりしたので三人寄れば文殊の知恵というわけではないですがうまくコミュニケーション取りながら詰みポイントを解消していったようです。知識が共有できて良さそうでした。あと結構意外だったのはペアプロ・モブプロをすることで生産性が少し下がるかなと思っていましたが、殆ど変わりませんでした。一人で躓いて時間を浪費することが減ったからかな?

ただ、頻度は結構難しいところで、最初は週1でやっていましたが、どうしても一人でもくもくする時間もほしいという声もあったので隔週にしたりしながら頻度の見極めをしていく必要があるかなと感じました。最終的に私達のチームでは特に時間を設けることはせず、必要なタイミングで自己主張していくと自然と人が集まってペアプロ・モブプロが始まるという感じのスタイルになっていきました。

最後に

ペアプロ・モブプロは全員をある一定レベル以上にする育成方法としては結構イケてるのでは?と思いました。ただ、乗り気ではないメンバーもいるのでそこは上手くチーム内でどうやっていくかを最適化できれば良さそうだと思います。ぜひ大学の開発演習でやってみてください。何よりも楽しいので。

学生だってちゃんと開発したい!大学の授業でスクラムを導入しようと思った話

前提

僕が居る公立はこだて未来大学では3年生の必修授業で「プロジェクト学習」と呼ばれる学科・コースの枠を超えた通年の開発演習があります。この授業ではサービスの開発や心理学研究、楕円曲線暗号アルゴリズムの高速化やアルゴリズムの改良といった様々なテーマで最大15人程度のチームを組んで1年間取り組みます。実社会に根ざした問題群を解決していく方法を探求する取り組みらしいです。また、教員はあくまでもアドバイザーで、どんなことをするのか、何で開発するのか、どう開発していくのか、スケジュールはどうするのかすべて学生が主体となって決めていきます。そのため、チームによってですが、授業の時間以外も時間を費やすことが多く、3年生はプロジェクト学習に全力を注ぐと言っても過言ではないと思います。詳細はこちらを参照。www.fun.ac.jp

僕が所属しているプロジェクトは「ビーコンIoTで函館のまちをハックする – BEACON FUN Reloaded」というテーマでビーコンと呼ばれるBluetoothの電波を発信する小さな機器を用いて世の中にはまだないような新しいサービスで函館のまちをハックすることを目的としています。

続きを読む

ソケットプログラミングの勉強も兼ねてCでポートスキャンツールを作ってみた

はじめに

普段C言語使っているのに、C言語であまりソケットプログラミングをしたことがなかったので勉強も兼ねて作ってみました。

github.com

続きを読む

mrubyの浮動小数点数演算をソフトウェアで置き換える

この記事はmruby Advent Calendar 2017の23日目の記事です

qiita.com

前提環境

この記事ではx86_64アーキテクチャをターゲットにしています。

mrubyはmasterの2017年12月5日のコミット Need to set `ci->proc` when we have `RProc` structure. · mruby/mruby@4a99f49 · GitHub の状態です。

はじめに

 一ヶ月ほど前mrubyにMRB_WITHOUT_FLOATという浮動小数点数関連の処理を取り除くオプションが追加されました。

github.com

今まではハードウェアでの浮動小数点演算に制限がある場合、自分でmrubyソースコードを改変して浮動小数点演算を取り除く必要がありましたが、このオプションが追加されたため、オプション一つで浮動小数点演算に制限がある環境でもmrubyを簡単に動作できるようになりました。

しかし、今回あえて浮動小数点演算に制限がある環境でMRB_WITHOUT_FLOATを使わないで別のやり方で対応してみました。 浮動小数点数演算にはハードウェアでの実行、ソフトウェアでの実現の2種類があります。 普段、x86_64ではハードウェアで浮動小数点演算を実行します。MRB_WITHOUT_FLOATは浮動小数点演算を排除することでハードウェアでの浮動小数点演算を無くそうということです。この記事ではmrubyの浮動小数点演算をハードウェアの実行ではなく、ソフトウェアで実現することで浮動小数点演算の制限がある環境でも問題なく浮動小数点演算を可能にする試みを紹介します。

続きを読む

Berkeley SoftFloatを使って浮動小数点数演算をソフトウェアエミュレートで置き換える(x86_64)

はじめに

この記事は公立はこだて未来大学 Advent Calendar 2017 18日の記事です。 adventar.org

今更ながら、夏のインターンでやってたことをまとめます。KLabの方々遅くなってすみません...。

さて、夏のインターンですが、mrubyの浮動小数点数演算をソフトウェアエミュレートで実行するという内容をしてました。 浮動小数点数演算にはハードウェアでの実行、ソフトウェアでの実現の2種類があります。 普段プログラミングしている際は気にすること無く浮動小数点数を扱いますが、レイヤーによってはハードウェアでの浮動小数点演算に制限がある場合などがあります。例えば、Linux Kernel内では浮動小数点演算を行ってはならないという制約がありますね。

僕がやっている mruby in BitVisorも同様に浮動小数点演算に制限があります(自分でレジスタの値を退避されるコードを書けば問題ない)。そこでソフトウェアフロートで置き換えることをしました。この記事ではまず、Berkeley SoftFloatの解説と使い方について書こうと思います。mrubyの置き換えに関してはmruby Advent Calendar 2017 - Qiitaをお待ち下さい。 Berkeley SoftFloatのサンプルコードや日本語の記事は殆どないので何か参考になればと思います。

続きを読む