Arduino Uno R3 で Japanino の水晶発振子を有効化する

執筆者: watamario15 (2022 年度部長)

これは OUCC Advent Calendar 2022 の 4 日目の記事です。結局誰も入れてくれなかったので、自分のストックをそのまま放出します。昨日までは、3 編に分けて OUCC の 3 年間と展望をお届けしておりました。そちらも興味があれば見ていってください。

(ここから本文)

昔入手した Japanino という付録マイコン、単体では何もできない (当たり前) ので放置していたが最近ふと調べてみると、水晶発振子が搭載されているのに使われていないという情報を発見した。そもそもこのマイコンを活用できていない以上何の意味もないわけだが、使えるはずのものが使われていないというのはどうにも気持ち悪いものだ。で、方法を調べてみると fuse ビットを書き換えると有効化できるようだが、それには書き込み装置か別の Arduino が必要らしい。ただ「使えるはずのものが使われていないというのはどうにも気持ち悪い」というだけで購入するようなものではない。ということで、結局諦めていたのだった...

話は変わるが、2022 年春夏学期、実験 B の授業が始まった。COVID-19 の感染状況が読めない中、いつオンラインにせざるを得なくなっても対応できるように毎回部品類を持ち帰るシステムとなった。また、今年からボードを Arduino (Uno R3) に切り替え、内容を一新したらしい。そして、毎回持ち帰る部品類には当然 Arduino も含まれている。

...ここで何か気付くだろうか。

fuse ビットを書き換えると有効化できるようだが、それには書き込み装置か別の Arduino が必要らしい。

あるじゃないか!!まさに今、手元に!!

ということで、[Japanino] 外部水晶発振子を使う: 案山子のメモ帳を参考に 2022 年にこの作業を実施してみたログを残したいと思う。

要件

  • Japanino (持ってなかったらそもそも読んでないと思うけど)
  • Arduino Uno R3 (他のボードは知らない)
  • PC (Uno R3 にスケッチを書き込み、シリアルモニタから操作する)
  • ジャンパワイヤ6本

なお、この手順に従ったことによって発生した損害に関して私は一切責任を負わない。自己責任で実施すること。

手順

  1. 普通に最新の IDE を https://www.arduino.cc/en/software から入手する。Japanino 用は Uno R3 に対応していないので使えない。
  2. https://playground.arduino.cc/Code/Programmer2/ の一番下にある programmer2.txt をダウンロードする。japanino-quartz.ino みたいなファイル名にして、その名前のフォルダに入れておくとそのままスケッチとして開ける。
    • もし削除されてダウンロードできなくなった等の際には、Internet Archive を使う。
  3. ダウンロードしたファイルをスケッチとして Arduino IDE で開き、以下のような編集を加える。
    • 240 行目ぐらいの謎の隙間に #define BYTE 0 と書く。別に void DebugLCD::clear() より前であって、#ifdef の中でなければどこに書いてもいいけど。
    • 450 行目付近の void DoSTK() 関数内の case 'a': 直後に break; を追記する (case 'a': break; でいい)。タイプミスで bootloader をふっ飛ばさないようにするための保険。
    • 1000 行目付近の void Fuse_Arduino_Style() 関数内の case atmega168: で、CMD_Write_Fuse_High( 0xdf);CMD_Write_Fuse_High( 0xdd);CMD_Write_Fuse_Low( 0xef);CMD_Write_Fuse_Low( 0xc6); に書き換える。
    • 1100 行目付近の loader8loader168 (大量の数値が並んでるところ) に const 修飾を加える。要するに unsigned char PROGMEM loader8[]const unsigned char PROGMEM loader8[] に、unsigned char PROGMEM loader168[]const unsigned char PROGMEM loader168[] にすればよい。
  4. Arduino Uno R3 に書き込む。
  5. 以下のように Arduino Uno R3 と Japanino をジャンパワイヤで結線する。Arduino Uno R3 を PC に接続していれば、この結線によって Japanino にも電源供給されるはず。
    Arduino Japanino
     +5V --- +5V
     GND --- GND
     D10 --- Reset
     D11 --- D11
     D12 --- D12
     D13 --- D13
  6. Arduino Uno R3 を PC につないだままの状態で、シリアルモニタを開いて 19200 baud に設定する。もし外してしまっても再接続すればよい。
  7. *s を送信してシグネチャを確かめる。Arduino IDE 2 では Ctrl + Enter が送信。
    • 何も表示されない場合は Arduino Uno R3 を外して Arduino IDE を閉じ、再度 Arduino IDE を立ち上げて Arduino Uno R3 を接続してシリアルモニタを開き、コマンドを再送信してみる。もしそれでもうまくいかなければ、Japanino 用 IDE 等の古いバージョンのシリアルモニタを開いて試してみる。
    • Arduino Uno R3 に書き込んだスケッチはずっと動いているので、IDE の再起動やバージョン変更に伴うスケッチの再コンパイルは不要。
  8. *A を送信する。Writing から始まる文字列が表示されるはず。
    • 小文字にすると全く違う意味となり、手順3で該当箇所の修正を行っていない場合は最悪 bootloader が吹っ飛ぶので注意。
  9. *u を送信し、以下の出力と一致すれば成功(ただし => 以降は補足のための追記)。
    Lock Bits: 11111111 => FF
    Fuse Low:  11000110 => C6
    Fuse High: 11011101 => DD
    Fuse Extn: 11111000 => F8

    逆に以下なら元のままで、変更できていない。以上の手順を再確認してほしい。

    Lock Bits: 11111111 => FF
    Fuse Low:  11010010 => D2
    Fuse High: 11011110 => DE
    Fuse Extn: 11111000 => F8

念のため、書き込んだときに自分が得た出力を掲載する。はじめ最新 IDE では *s*A が利かず Japanino の IDE で実行した画像となっているが、その後最新 IDE でも利くようになった。謎。

出力

あいにく私は精度を確認できる機器を持ち合わせていないため、本当にこれでうまくいっているのかどうかは分からない。実際に確認できた人がいれば、Twitter 等で教えてほしい。

おまけ - Japanino を 2022 年最新環境で使う

以上の作業では Japanino にスケッチを書き込む必要がないため、Japanino 用の環境構築は必要なかった。しかし、実際に Japanino 用に開発を行う際には環境構築が必要になる。以下にその手順を記す。

ドライバ

Japanino 用 IDE に付属するドライバは古いので、https://jp.silabs.com/developers/usb-to-uart-bridge-vcp-drivers の「ダウンロード」から最新のドライバを取得することを推奨する。Windows なら「CP210x Universal Windows Driver」、macOS なら「CP210x VCP Mac OSX Driver」だろう。

ちなみに、インストールは Windows に関しては .inf ファイルを右クリック (Windows 11 ならさらに「その他のオプションを表示」) で「インストール」を選択してもいいし、Japanino を接続すればデバイスマネージャーに警告表示になっているデバイスが現れるはずなのでそれを選択し、「ドライバの更新」からダウンロードしたドライバを選択してインストールしてもよい。前者は何も表示されないのでちょっと心配になるが、Japanino を接続して Arduino IDE が認識すればインストールできている (最新版 IDE なら不明なボード扱いになるが問題ない)。macOS は知らないので、自分で調べてほしい。多分普通のドライバインストールと同じ。

IDE

Japanino 用 IDE を使ってもいいのだが、Arduino IDE 2 が使えるようになった今あの太古の昔の IDE は使いたくないだろう。でも朗報だ。普通に接続して表示されたポートを選び、ボードとして「Arduino Pro or Pro Mini」を選択した上で「ツール -> Processor」から「ATmega168 (3.3V, 8 MHz)」を選べば普通にコンパイルと書き込みが行える。これは VSCode で行う場合も同じ。

OUCC の 3 年間を振り返る [後編]

執筆者: watamario15 (2022 年度部長)

これは OUCC Advent Calendar 2022 の 3 日目の記事です。昨日は中編をお届けしました。

2022 年度

2022 年度は、2021 年度に進めた改革の続き、2021 年度には部室の処理があったためにできなかった「コンピュータクラブ」としての活動の再興、そして後輩への継承を進めました。私は部長となりましたが、恐らく部の運営に関わる最後の年になるため、引継ぎを考えて関与量は 2021 年度よりはかなり減らしました。

新歓 (講習会、チーム開発など, 4-6 月)

2021 年度と同じ流れですが、部員数がかなり回復したことで、講習会担当者の割り振りはものすごくスムーズでした。結果、1 人で 3 つ担当するとかいう 2021 年度の私のような人は生じず、1 人 1 つ以下で回せました。COVID-19 もある程度落ち着いてきていたため、副部長が中心となり、大学の教室を借りて 3 年ぶりの対面講習会も実施されました。2021 年度に引き続き、RAINBOU による競プロ講習会 (@KowerKoint2010) も実施しました。また、チーム開発も全員参加ではなく、興味のある人の任意参加としました。2021 年度までは「自由な緩い部活」を謳いながら、人数の都合上強制参加のイベントがそれなりにあるという矛盾状態にあったのですが、2022 年度の人数なら任意参加でもできると判断しました。これによってか、あるいは流行りのクロスプラットフォーム開発環境 Flutter を選んだのが良かったのか、今回は全て少なくとも「使える」レベルの一定の完成度に達しました。

新歓イベント
対面講習会

各開発プロジェクトのリンクはこちらです:

ちなみに、こうして掲載できていることからわかるように、この開発は完全に OSS で行われました。このまま OSS で開発することが当たり前となり、公開コミュニティ化が推進されていくと嬉しいものです。

いちょう祭 (5 月)

部室を手放したことで財政的には安定していましたが、それは「存続できる」という意味であって、何か古い機器の更新など、設備投資ができる状態ではありません。入部障壁を下げるために部費を減額した以上、学祭は重要な収入源となります。この時期は新歓という意味でも重要です。という訳で、まちかね祭に引き続き久し振り (3 年ぶり) に開催されたいちょう祭にも出展することになりました。

さて、いちょう祭自体は 3 年ぶりですが、やることはまちかね祭と同じです。なので、特に問題なく...行きませんでした。まず、懲りずに食品模擬店と展示を両方出展したので、やはりカツカツでした。そして、一番は思ったより客足が無かったことと、唐揚げが他の 5 店舗と被ったことでした。被りについてはギリギリまで知らされなかったためどうしようもなかったのですが、結果大量に余り利益が出ませんでした。まあ、原価率 25% なので大赤字とはならず、15163 円の赤字で済みましたが。

食品模擬店

これで懲りたので、以降は「いちょう祭ではゲーム展示 (新歓、活動紹介) のみを行い、まちかね祭では食品模擬店 (活動資金の獲得) のみを行う」という方針になりました。

夏の開発 (8 月)

2 年前から続くアクション RPG の改良、2021 年度の会話ボットの強化、画像判別の新規制作が行われました。これらは 11 月のまちかね祭での出展を目指して制作され、実際に使用しました。2022 年度のまちかね祭に関しては、副部長が記事を作成しているそうなのでここでは省略します。ちなみに、まちかね祭では食品模擬店という方針にしたと先ほど書いたところですが、これについては、部員がもう食品は懲り懲りだということで、今年度限りでまちかね祭もゲーム展示とする方針になりました。

KC3 2022 (9 月)

毎年恒例 KC3 2022 です。今年度はハイブリッド形式となり、2 年ぶりに対面開催が復活しました。OUCC からは @kakikaki85 による「画像認識で遊んでみよう」と私のニッチな「電子辞書でプログラミング」を出しました。高い技術力を持った関西の情報系学生が一堂に集まったことで、刺激を受けた部員も多かったはずです。

まとめ

まちかね祭の話を省略するので、12/1 時点で書ける内容はこの辺りです。遺産の処理が終わったこと、部員数が回復したこと、財政的にも余裕ができたことで、部の運営は随分と安定するようになりました。後輩も積極的に運営を支えてくれており、来年度以降も期待できます。

今後の展望

私が目指していたものは、「同じ大学のコンピュータに興味のある人と情報交換ができたり、(主に)情報系学科なら履修や講義の相談ができたりする」コミュニティでした。これは、従来の「クラブ・サークル」としての在り方とは一線を画すものであり、同時に現代の多くのコミュニティの姿でもあります。特に Discord 等のオンラインコミュニティ形成に便利なサービスが登場したことによって可能になったものでしょう。今ではソフトウェアを GitHub で公開して Twitter で発表する、ということが誰でもできるようになったため、既に技術を持っている人は大抵自分でプロジェクトを決めて開発するようになり、クラブ・サークルに所属する流れは縮小に向かっているのだと思います。冒頭に述べたとおり、私も元はクラブ・サークルへの所属に消極的でした。では、それを邪魔することなく、意見交換などができるコミュニティとしての OUCC ならどうでしょうか。これなら、既に技術を持っている人でも入部、あるいはそこまでいかなくとも公開コミュニティへの参加までは検討してもらえるのではないかと期待しています。そして、そういうコミュニティは、時代が変わっても常に需要があるものだと思うんですよね。そういう意味で様々な改革を進めましたが、まだ不完全な部分は多いです。これをどういった方向に発展させていくのか、あるいはまた根底から覆して全く別の OUCC に改革するのか、これは次世代に託します。

様々な苦難を経て、ようやく安定した基盤を確立できました。余裕ができてこそイノベーションのきっかけが生まれるので、これは重要です。来年度以降、この基盤の上にどういった情報系コミュニティ OUCC が生まれるのか、是非とも期待したいところです。

おわりに

12/5 - 12/11 にかけて、Osaka University Giving Campaign 2022 なるイベントが開催されます。今回が初めてのイベントであり、我々としてもつい先日大学からメールがあったところなのでよく分からないところも多いですが、東大初のベンチャー企業 Alumnote が、スポンサー企業から集まった寄付金を得票数によって分配するイベントのようです。胡散臭さがすごいですが、主催は大阪大学となっており、大阪大学の内部ツール KOAN でも学生センターから通知が行われたため、怪しいイベントではないでしょう。既に述べたように、OUCC は資金面において安定して存在できる状態にはありますが、設備投資が行える状態にはありません。最新機器 (考えているものは Apple Silicon Mac や VR 機器) を導入することができれば、OUCC はコミュニティとしての価値のほかに、新しい技術を気軽に試し、学び、新たなイノベーションに繋げる遊び場としての価値も持つことができるようになります。本記事で紹介した OUCC のここ 3 年間の活動や、今後の展望に賛同いただける方は、「大阪大学コンピュータクラブ」にぜひご投票をお願いいたします。各日「正午から 30 分に最も多くの票を集めた団体」に追加で資金分配が行われる「デイリーチャレンジ」なるものがあるようなので、もし可能であればこの時間に投票いただけると有難いです。

最後に、OUCC の公開 Discord サーバーの招待リンクを掲載しておきます。荒らしやスパムでなければ、阪大関係者でなくとも誰でも参加可能としておりますので、他大学の方でも高校生以下の方でも、興味のある方は気軽にご参加ください。なお、スパム対策として「自己紹介」チャンネルで簡単な自己紹介を投稿した参加者にのみ、他のチャンネルに書き込めるようになるシステムとなっておりますので、その点はご協力をお願いします。

招待リンク: https://discord.gg/jBM2NP7ZxK

OUCC の 3 年間を振り返る [中編]

執筆者: watamario15 (2022 年度部長)

これは OUCC Advent Calendar 2022 の 2 日目の記事です。昨日は前編をお届けしました。明日は後編をお届けします。

2021 年度

2021 年度には、曖昧な数え方になっていた「部員」「OB」を明確化したり、それに併せて 10 年以上誰も触ってこなかった部の規約を実情に沿うように大幅に改正したり、部室を引っ越したり、既に経験者がいなくなっていた学祭に参加したり、活動形態を変更したり、顧問が交代したりと OUCC にとって大きな局面となりました。ちなみに、当時私は役職上は 2020 年度の流れで ANU CSSA との橋渡し役を担っており、副部長 (当部における実質リーダー) ではなかったのですが、なぜか部の方向性を大幅に担っていたり副部長より部を回していたりと不思議な立ち位置にいました。

新歓 (講習会、チーム開発など, 4-6 月)

2020 年度に新入部員 (我々世代) がそれなりに入ったため、人数的には 2020 年度よりマシでした。しかし、注意しなければならないのは「2 年目部員がほとんど」というところです。講習会できるネタを持っていない部員も多く、割り当てにはかなり苦労しました。結果、自分は C, C++, Python の 3 つの講習会を受け持つことになりました() なお、この年度から新たな取り組みとして、2020 年に大学公認団体に加わった阪大競技プログラミング部 RAINBOU から @small_onions さんを招き、競プロ講習会を実施しました。同じ大学の情報系団体として、交流を深めていきたいものです。

チーム開発では、パスワードマネージャ、会話ボットの新規開発と、2020 年度のアクション RPG、既存ゲーム「阪大大戦」の改善の 4 つのチームに分かれ、1 か月間の開発を行いました。「ハッカソン」の名は用いていないので、期間が長くとも問題はありません (キリッ。ちなみに、自分はパスワードマネージャでした。

Password Manager
会話ボット

なお、この頃は講習会のハイライトやイベントの告知など、頻繁に Twitter 投稿を行いました。その甲斐あってか新入生が 10 人ほど入部し、OUCC に活気が戻ってきました。

部室をどうするか (5 月)

「支援をお願いし、今後様子を見ながら来年 5 月頃にまた再検討する」

さて、その時が来ました。「様子」としては、5 月のいちょう祭 (学祭) も結局中止となり、明らかにアウトでした。しかし、今回はまだ 2020 年度ほど極限状態ではないので、検討の時間がありました。2020 年の流れを受けて、何とか残すことはできないかと、選択肢を洗い出しました。

  • 協賛
  • HP 広告料収入
  • 企業との交渉
  • クラウドファンディング
  • 有償 OB 会の設置

なんというか、無理!!って言いたくなるような選択肢です。協賛では部室維持につながるような額は期待できず、広告料、企業との交渉、クラウドファンディングは余りに難易度が高く、「多さ課題が苦」の部員が十分にそれに貢献できるとも期待できません。有償 OB 会は KMC で実際に採用されているなど有力でしたが、加入メリットの捻出が課題です。しかし、部室を手放すと以下の懸念がありました。

  • 備品置き場所問題
  • 学祭時の商品保管用冷蔵庫
  • 2 度とあの部室を取れないかもしれない
    • 大家さんとの契約更新の際の反応は、学生の入居は騒がしい等で迷惑になったり、老朽化による安全性が心配だったりとあまり積極的ではなかったようで、手放すと立地にしては (家賃的に) 超好条件だったあの部室をもう 2 度と借り直せなくなる恐れがありました

しかし、今回は耳寄り情報がありました。何と、他部の解散により学内の部室 (共用室) に空きができたのです。学外に確保していた部室より遥かに狭い (4m x 3m) ため、活動スペースが取れないばかりか物品も結局ほとんど処分しなければ収まらず、インターネットもなく、共有空間なので高額機器や金銭の保管に少し抵抗が生まれるなどの問題点はありましたが、金がない以上贅沢は言えません。

共用室

  • 共用室に興味を持っている団体は他にもあり、判断を待ってもらえるのは今年限り
  • 収支を計算するとマイナス 40 万超 (年間) なので、仮にクラウドファンディングで 50 万儲けても 1 年しか伸ばせず、もし 100 万儲けられたとしても 2, 3 年延ばすのみ
    • しかもその時点で共用室は取れなくなる
  • 部室維持が困難になったのは COVID-19 のパンデミック前からの話であり、収束しても厳しいことに変わりはない
    • 結構前から、部費半期 1 万円であったことが判明した
    • 部費の高さで入部をためらう声もあり、部室維持のために部員が減るのは本末転倒である

以上の思考の元、部室維持は長期的に非現実的だということを部員一同が認識し、2021 年末を以って部室を手放し、物品は共用室に移送することで合意しました。

しかし、話はこれで終わるほど単純ではありません。大量の物品をどうやって残す/売る/捨てるの判断をするのか、私物が紛れていないか、どうやって運ぶのか、どうやって捨てる/売るのか。そこにこそ、最大の砦が待ち構えていたのです...

活動形態の変更 (8 月)

部室を手放すということは、完全に Discord が活動場所になるということです。そこで、Discord サーバーの整理を始めました。まず、役割の同じチャンネルが複数あったり、全く使われていないチャンネルがあったりと、散らかり放題だった内部サーバーを、実情に合わせて再編しました。そして、「新歓サーバー (公開)」と「メインサーバー (内部)」の 2 つが存在していたのですが、これらの役割を変更し、前者をメインサーバー、後者を議論用サーバーに変更しました。これには、以下の背景があります。

まず、新歓サーバーはその名の通り、2020 年に新歓目的で作成されたサーバーでした。そして、内部サーバーが活動のメインであり、こちらは 2019 年に Slack から移行する形で作成されました。新歓サーバーは、おそらく新歓期間終了後破棄することを想定されていたものですが、新歓時期終了後にも新たな参加者が入ってくることが結構あり、また公開サーバーであるという側面から先述の ANU CSSA の方との交流にも利用され、その結果、破棄されず 2021 年の新歓にも使用されました。しかし、新歓時期にしか使用しないとなると、OUCC の活動風景が唯一見える新歓サーバーは新歓時期を過ぎると閑散とし、これによって新たな参加者も発言しにくくなり、多大な機会損失が生じているのではないかという懸念がありました。

現代では、誰でも参加できる高度なオンラインコミュニティが無数に存在します。部費を払わないと参加できないオンライン活動のクラブは、この点で大きなディスアドバンテージになります。これは OUCC に限らず、多くのクラブ・サークルが直面した問題です。そもそも、私は「それによって価値を失ったクラブ・サークルは、そのまま消えてしまえばいい」という考え方です。これは、OUCC に対しても同じです。しかし、OUCC には「同じ大学のコンピュータに興味のある人と情報交換ができたり、(主に) 情報系学科なら履修や講義の相談ができたりする」という価値を見出していました。なので、そこに重点を置くことを考えました。具体的には、「活動を公開空間で行い、部員以外でも誰でも参加できるようにする。つまり、コミュニティとしての存続を目指す。」ということです。とはいえ無料で運営できる状態ではないので、部として参加する外部イベントへの参加、活動方針の決定、備品利用等の「部員」にのみ提供される付加価値をいくらか残すことで、部費を払って入部するメリットも確保しました。

KC3 2021 (9 月)

KC3 2021 も、2020 年度と同じくオンライン開催となりました。この回も私は受講生側でしたが、当時の部長 (2020 年度とは違う) が JavaFX の講習会「初心者向けGUIプログラミング -某番組のシステムをまねてみよう」を開いていました。

部室の整理 (9-10 月)

部室には大量の物品が存在し、共用室への移動時には大量の処分を行わなければいけないことが分かっていました。そのため、「今どのような物品が存在し、どれが優先度が高いか」を明らかにする必要がありました。ちなみに、「部室をどうするか」から 4 か月も経っているのは、学期中には碌な活動ができないという「多さ課題が苦」ならではの制約によるものです。これが、後に地獄を招くことになるのですが...

さて、まず、整理には 4 日間を確保しました。行う内容は以下です。

  • 必要な物を優先度の高い順に整理する
    • よく分からないもの・判断に迷うものは適宜 OB さんにもメンションしながら頻繁に質問する
  • 明らかなゴミを除き、写真と共に選別結果ごとにリスト化する
    • 大きい物品は採寸結果も
    • 1 つ 1 つのリスト化は非現実的なので、小物類はまとめて写真を撮るだけでもいい
  • 古い PC を起動し、スペックを確認する
    • 使えそうでないものは USB 等にデータの救出を行う
    • 起動しないものは HDD を取り出せばいいと思われるが、大したデータはなくそのまま捨ててもいい
  • コード類はどこに繋がるものかわかればその機器に繋ぐ
    • 最悪まとめて箱詰めでも良い
  • OB さんに原則 25, 26 日に自分の所有物を回収してもらう
    • 都合が合わない方は 11/14 までの範囲で柔軟に調整するが、できる限り早くにお願いする
    • 11/14 までに連絡がないものは、部の備品として処分などの取り扱いを行うことも併せて告知する
  • 業者に運んでもらうものを決める
    • 見積もり訪問が来るので、値段が変わらない範囲を探る

できそうに見えた方も多いことでしょう。実際、我々もできると思って 4 日間としましたから。しかし、現実はそう甘くはありませんでした。

物品量

はい、無理です。まず足の踏み場がないので、整理やリスト化などの作業を行うためのスペースすらなく、リスト化作業もかなり滞りました。遠い昔の世代が遺した得体の知れない物体も大量に存在し、これもまたリスト化作業の停滞を招きました。最終的に、リスト化は「ある程度」進みましたが、「優先度の高い順に整理」は無理でした。結局、学期が始まってからも部員が頻繁に通ってリスト化が済んでいないものをリストに追加する作業が続くこととなりました (自分も 65 枚ぐらい撮りました)。ちなみに、このリストは最終的には 41 ページに渡る巨大文書となりました。

物品リスト

リスト化できたら、これに優先順位をつける作業に入ります。これは、部会で投票方式で行いました。時間が掛かることは分かっていたので、限界まで時間短縮するためにテンポよく短時間の投票を繰り返す方式にしたのですが、それでも 14:00 に開始して 22:30 終了という、過去に例を見ない恐ろしく長丁場な部会となりました。

物品の優先順位投票

引っ越し (10 月)

必要なものが決まれば引っ越しですが、単純に量が多いことと冷蔵庫のような大型物品を含むことから、学生だけでは非現実的で業者に頼むことは必須でした。格安業者は不安だったため、大手の業者で相見積もりを取って決めました。壊れた冷蔵庫 (冷蔵庫は 3 台あり、そのうち 1 つは壊れていた) の処分を含めて 32890 円になりました。家電リサイクル法とかいうクソが絡む物品を含んでいることを考えると、まあ妥当な額です。ちなみに、箱詰め資材が届くのが引っ越しの 2 日前の夜という感じで、そこから (大幅処分の上でも依然) 大量の物品を箱詰めする訳なので、かなりギリギリでした。近くに住んでいる部員が夜遅くまで献身的に働いてくれたことで、辛うじて間に合いました。ブラック労働

しかし、これで引っ越しが完了した訳ではありません。処理しなければならない不要物品が大量に残っているし、さらに事前に伝えておいた冷蔵庫とホワイトボード以外は箱に入るものしか運んでもらえず、結局プリンタなどは部員で運ぶことになりました。この辺のこと、ちゃんと確認しておかないといけないという教訓ですね。まあ、それでも助かったことは間違いないです。

残った物品

まちかね祭 (11 月)

いきなり何の関係もない話題に飛びますが、実際にこのタイミングに学祭が割り込んできたのです。実際には準備があるので、8 月から議論が始まっていました。引っ越しと学祭出展の 2 刀流はもう... しかも、この学祭、食品模擬店とゲーム有償展示の 2 店舗同時出店なんですよね。両方の準備をしなければならないし、何より少ない部員で 2 店舗を準備日含めて 4 日間割り当てないといけない。はっきり言って無謀ですが、この学祭は完全に資金獲得を目的としており、財政がギリギリという背景から、何としてもそうせざるを得なかったのです。

この学祭はただ大変だっただけではなく、2 年ぶりということで、学祭経験者がもはや 0 でした。ゲーム展示の方は、部として持っているゲーム (VR、シューティング) と夏休みに新規開発した占いを出すということで、企画自体はまあ何とか決まりました。問題は食品模擬店です。まず何を売ればいいのか、色々と議論の後に唐揚げに決まった後も何 kg 仕入れればよいのか、調理にあたって必要なものは何か、買い出しはいつどこでどうやればいいのか、全てが手探りでした。あまりに不安要素が大きかったため試食会を部室で開き、調理方法などを確認しました。

そして迎えた本番、COVID-19 が小康状態であったことや久し振りの学祭ということもあって、とんでもない客入りでした。唐揚げは原価率 25% で飛ぶように売れ、ゲーム展示にも長蛇の列ができました。私は食品模擬店を担当しており、ゲーム展示の担当ではなかったのと、現場が限界運営で状況報告をする余裕がなかったようで、全く状況は分からなかったですが、とりあえず盛況だということは間違いなかったようです。

食品模擬店
ゲーム展示

もうとにかく「大変」の 2 文字だった学祭ですが、その効果は絶大でした。売上 249849 円で 180650 円の利益を出したのです。もはや我々にも信じられない数字でした。頑張った甲斐があるというものです (そして当時来てくださったお客さんにはもう感謝してもしきれません)。そしてこれによって得た盤石な財政は、以降の引っ越し作業を大いに救うことになります。

不要物品の処分・売却・譲渡 (11-12 月)

学祭が終われば、不要物品の処理です。この時点で OB さんによる回収期限は終わっていたので、あまりに高価だと判明した物品以外は部員と OB さんが自由に持って帰ってもいいという方針にしました。それでも残ったものを処理する形になります。

まず、粗大ごみは大変です。ゴミ処理場まで運ぶのには車が必要になり、処分費用も掛かります。電化製品なら家電リサイクル法とかいうクソも絡んできます。今回は、CM でおなじみのジモティーを利用し、部室まで引き取りに来てもらうことを前提にタダで出しました。結果、鉄くずを集めているらしい業者っぽい方が全て回収してくれて、この辺の物品は特に大きなテレビ台などを除き無事処理できました。

続いては、金になるもの (書籍、ゲーム、ゲーム機等) の処理方法です。それぐらい残しておいてもいいじゃないかと思うかもしれないですが、量が尋常ではないのです。書籍もゲームも、「それぞれ」200 以上はあったのではないでしょうか。もはや数えることすらできませんでした。ゲーム機も PS2 が 5 機ぐらいあったりと意味不明でした。一体どの世代が何のために... オタクの楽園ではありますが、こんなものを狭い共用室に運べるわけがないので処分が必要になります。金になるなら売りたいというのが、常に財政がギリギリの貧乏クラブの発想で (そもそも、だから部室を引き払うことになったわけで)、ボドゲと一部の漫画はボドゲ研漫研に売りました。しかし、先述の学祭で資金を獲得したことで、「何としてでも金になるものは売らないとまずい」というよりは、「あと 1 か月で引き払わないといけないのにこれでは間に合わない」の方が強くなっていたため、特に高額なもの以外は業者に一括で丸投げする方針になりました。というか、期日が近づくにつれてどんどん適当になっていきました。まあ、本当に売ることを考えるとヤフオクやメルカリになりますが、これはあまりに大変なので非現実的でした。なお、この方針でさえ期日ギリギリだったので、学祭で大失敗していればもう... かなり悲惨な結果だったことでしょう。

大量のゲームソフト
大量のゲーム周辺機器

一応、当時のメモを掲載しておきます:

TODO:

  • 書籍類/ゲームソフトの分類(種類別)、その後シリーズごとに出品用写真を撮り箱詰め。

    • 箱詰めは、部屋に散乱して作業の大きな妨げとなっているため行う。どれがどの箱に行ったか分かるようにすること。
    • 見落とされていた専門書は共用室へ移動エリアに置く。
  • 書籍類/ゲームソフトのうち高価な物を探す。

    • 上の作業で写真が届くのと並行に、現地にいない人が解析すると効率が良さそう。
  • ゲーム機/周辺機器の分類と、出品用写真の撮影。

    • これも、現地にいない人が同時に価格解析すると効率良さそう。
  • PC/モニタ/HHKB/ゲーム系/例のレンジの動作確認。

  • 共用室に運ぶエリアに置いた物品と高価値物品の移送。また、そこにはないがクーラーボックスや座布団と椅子と机(とモニタ)も運ぶ。

  • あまり価値のないゲームソフト/ゲームハード/書籍類/トレカは BOOK OFF か HARD OFF に一括で投げる。

  • 不要な家具類はヤフオクかジモティーで出品する(最悪0円でもいい)。引き取り手が無ければ粗大ごみ。

  • 重要度の低いボドゲをボドゲ研かメルカリ/ヤフオクに売る。

  • 大量のゴミ(粗大ゴミ含む)の処分。

    • 行政サービスを使うか民間業者を使うか。行政サービスなら手続きとかいろいろあるし休日や年末年始は受けてくれない可能性があるし、申込期限もあるので注意。
  • 鍵の取り外しと、マナーとして最低限の掃除。

さて、残りはシンプルに「ゴミ」です。それの量は、「引っ越し」の節の最後に示した画像から察してください。一部、引っ越し業者の箱に入らなかったために部員が自力で運んだ物品、ギリギリになって発掘されたり議論が漏れていたりしたために検討時間が取れなかった物品、処分方法不明な自動車関連の缶系物品など、共用室に運び込んだ物はありますが、ほとんどはゴミです。これを、自治体のゴミ収集で何とかできるでしょうか。そもそも、部員の力で運び出せるでしょうか。...無理です。どう考えても無理です。ということで、ゴミ処理の業者を呼ぶことになりました。業者決めというのは例によって大変なのですが、今回はコネがありました。そう、ジモティーのときに粗大ごみを引き取ってくれた業者です。ここの業者に相談したところ、何と大量の書籍の売却、粗大ゴミの回収を一挙に引き受けてくれるということで、これでようやく先が見えました。さらにこの業者は、粗大ごみ以外の大量のごみも引き受けてくれて、部室が一気に片付きました。軽トラック大盛 2 回分で 24000 円と良心的な価格で、学祭の利益をもってすれば余裕でした。この業者に巡り合えていなければどうなっていたか、考えるだけでも恐ろしいです。ジモティーへの出品がきっかけでこの結果にたどり着いたことを考えると、人生何がどう繋がるか、分からないものですね。

大量処分後の部室

部室の退去 (12 月)

さて、前節の業者によるゴミ回収が 12/18 で、退去日は 12/25 (年末年始休暇に入るので 25 が限度だと大家さんに言われたため) でした。残りの物品も、授業の合間を縫っていくつか運び、退去日の 25 日に何人かで集まって運び終わりました。本当にギリギリですが、何とかなりました。

しかし、最後に事件が起きました。物品移送の後、共用室で棚を組み立てていたときのことです。退去の立ち合いをしていた部員から、連絡が入りました。

2021/12/25 15:07
下駄箱は元からあったものでは無いので運び出してくれと言われました
人手が要ります

怪しいかもしれないとは思いつつ、しかしこれはさすがに備え付けだろうと思って処分しなかった下駄箱が、なんと当日にこう言われた訳です。傘立ての壺があったのですが、これについても同様でした。契約当時を知る OB さんとは既に連絡が取れなくなっており、というか誰かも分からず、大家さんに確認を取るも返事がなく、当日にこの有様... 現場は大混乱でした。契約が切れた以上当日中に撤去する必要があり、しかし共用室に入るサイズではありません。先日の業者も、こんなタイミングでいきなり呼んで来てもらえるとは期待できないし、そもそもこの日は年末ということもあり条件は最悪です。

しかし、どうにかするしかないので、最寄りのリサイクルショップを半ば賭けで目指しました。最寄りとはいえ、大荷物をタイヤがボコボコの台車で徒歩で運ぶとなるとかなり遠いです。何とか着いても、壺は無償引き取りできたものの、やはり下駄箱は無料引き取りもできず、有償処分も引き受けていないと言うことでした。途方に暮れていると、見かねた店員さんが知り合いの業者をあたってくれ、8000 円出せば処分を引き受けてくれる人を見つけてくれました。下駄箱 1 つ 8000 円とは普通の感覚ではぼったくりですが、タイミングがあまりに最悪で他の選択肢は川に投げるしかないという状況にあったため、金を積めばそんな状況を救ってくれるというだけでもものすごく有難かったのです。何なら数万円でも出すつもりでした。というわけで、この条件で引き受けてもらうことにしました。これも、学祭による盤石な資金が後ろ盾にあったためにできた判断であり、先の学祭の成功は重要な鍵になりました。

という訳で、一悶着ありましたが、何とか部室の引っ越しが完結しました。

引っ越し後の共用室

...はい、結局新たなオタクゴミ屋敷になりました。そもそも活動スペースが取れないことは想定内であり、倉庫として運用するつもりだったため自然な結果ではありますが、運び込んだ備品を使うスペースすらないため、物品の保持基準を更に厳しくして断捨離する必要がありそうです。とはいえ、これには 1 年経った今も手を付けられていません。

Advent Calendar (12 月)

毎年恒例 OUCC Advent Calendar 2021 です。今回は部室の引っ越しのクライマックスと被ったことでかなり厳しかったです。その結果、12 記事しか集まらず、それも後半のみという寂しい感じになりました。しかし、OUCC 部員でない方が 1 つ記事を埋めてくれたのには、公開コミュニティ化の手応えを感じました。

ちなみに、私は「テトリスの電子辞書移植」という記事を書きました。締め切り直前に書き始め、ブログシステムのトラブルによって結局間に合わなかった迷作です。

役職再編 (12-1 月)

実際の運営状況を反映し、旧来の役職体系を再編しました。それぞれの責任範囲を明確にし、「これは誰がやるのか」問題を減らそうとも試みました。「これは誰がやるのか」というのが曖昧なものって、結局誰もやらないので私に回ってきていたんですよね。そういう意味でも、運営の健全化において重要でした。なお、部室係はここで廃止したものの、半年後に需要が出てきたため復活させました。

旧:

・部長
・副部長: 部会の司会進行、部の運営・意思決定、他役職のサポート
・国際交流: ANU CSSAとのやり取り
・国内交流: 外部(大学・他企業)との交流(これまでの渉外と同)
・会計: 部のお金の管理
・Webサーバー係: Webページ更新など
・出版係: 部誌・広告作成
・部室係(部室に近い人)
・店舗・副店舗
・展示・副展示

新:

# 新3年配当

部長
- 副部長への職務継承、アドバイス、手助け

店舗
- 学祭の食品模擬店の正責任者
- 総会の出席、検便の回収、シフト決め等を行う

展示
- 学祭の展示の正責任者
- 総会の出席、シフト決め等を行う

# 新2年配当

副部長
- 部の代表者
- 部会などイベントの計画・開催
- 他の人の手が回ってないこと全部

会計
- 会計記録
- 部費徴収
- 部長、副部長、会計による会計会議への参加
- バイトの斡旋
- その他、金銭に関わること

渉外
- 部外の方との橋渡し(郵便受けの確認やメール対応、会議など)
- 教室確保(共用室の利用届更新を含む)

Intl PR
- ANU CSSA とのやり取りを含む国際交流
- 留学生のサポート

広報
- Twitter (@OUCC, @OUCC1) や OUCC BLOG の対応と情報発信
- 新歓(サーオリを含む)の取り仕切り

サーバ
- サーバの管理・運用
  - セキュリティ更新とクラッキング被害有無の確認/対応
  - bot の管理
- OUCC が管轄する GitHub, GitLab, Discord, Slack, etc の管理
  - これらの Owner 権限あるいは類する最高権限を持つことを想定

出版デザイン
- Web サイトの管理・更新(部誌制作の代わり)
- 紹介動画制作、サーオリ/学祭等のサムネイル/ビラ制作

部費システムの大幅変更 (2 月)

まず、何度か軽く触れましたが、当時は

  • 春夏学期・秋冬学期それぞれ、会計が決めた額の部費を支払う
    • 大阪大学は形だけの 4 学期制なのでこの呼び方になりますが、前期・後期と読み替えても支障はありません
  • 新規入部者は「入部金」という、部費よりも安く設定した料金を支払うことで参加でき、これを当期の部費納入と見做す

というシステムでした。そして、その部費は部室の家賃を賄うために 15000 円まで跳ね上がっていたのでした。

しかし、月 5 万の部室を手放した今、そこまで部費を吊り上げる必要はありません。もっと安価にできます。そして、半期単位での集金は会計への大きな負担になっていました。この時点で出費を考えると、

  • サーバレンタル料
  • ドメイン (oucc.org) 代
  • 学祭費用

でした。学祭費用は大抵の場合学祭の利益で相殺されることと、却って利益になることの方が多いため考えないことにすると、残りは年間 3 万円程度でした。ということは、全体で年間 3 万円を部費として徴収できれば、OUCC は安定して存在できる訳です。そこで、部員 15 人は確保できるだろうと見込み、以後固定で年間 2000 円とすることにしました。今まで年額に直すと 3 万円前後徴収していたことを考えると、超大幅値下げです。部費はオープンコミュニティ化における大きな障壁だったため、この値下げは重要でした。また、有効期間を厳密に年度単位 (4/1 - 3/31) としたことで手続きも分かりやすくなり、この期間に部費を納入した人数として部員数の正確な統計も得られるようになりました。

まとめ

2021 年度の「活動」は、まあ見ての通り、ほとんど「部室」でした。折角沢山入ってきてくれた新入部員に労働しか与えられなかったという点は申し訳ないなぁという気持ちですが、こうする他ありませんでした。改めて、自分の世代で出した遺産の処理をその世代のうちに済ませておくことの大切さを感じました。

一方で、運営関連では雑だった部分を是正したり、公開コミュニティ化したりと、時代に合わせた大幅な改革を行いました。これによって入部できない人も活動に参加してくれるようになったりと、一定の手応えは感じています。公開コミュニティ化については、2022 年現在においても不十分なところはあります。例えば、課題の質問は剽窃や講義の規則 (第三者に資料を渡してはいけない etc) 等の懸念があったり、単に恥ずかしかったりで公開サーバーでは行いづらく、結局内部サーバーでの会話の方が多くなってしまっている現状があります。また、公開コミュニティ化する上では開発プロジェクトは OSS 化したいものですが、外部公開を想定して開発していなかったためにソースコードがぐちゃぐちゃだったり、著作権周りが怪しかったりで開発に携わった部員が消極的なことも多く、既存プロジェクトについてはあまり実現しませんでした。この辺をより推進するのは、2022 年度以降に託されました。

中編はここまでです。続きは OUCC の 3 年間を振り返る [後編] にお進みください。

OUCC の 3 年間を振り返る [前編]

執筆者: watamario15 (2022 年度部長)

これは OUCC Advent Calendar 2022 の 1 日目の記事です。明日は中編をお届けします。

今年もこの季節がやって参りました。部室を手放した昨年からもう 1 年経つのですね。課題に追われる日々は、本当に過ぎ去るのが早いものです。さて、今日は、私が在籍していたこの 3 年間、OUCC がどのような事態に陥り、変遷を遂げてきたかをまとめておきたいと思います。先に言っておきますが、かなりの長文になります。どこの団体でもそうだと思いますが、OUCC も例に漏れず、色々な危機に瀕することとなりました。

OUCC とは

初日ですので、ざっくりと OUCC の紹介をしておきます。

OUCC は、大阪大学文化系公認団体コンピュータクラブ」の略称です。「コンピュータに関連する多種多様な事柄を通じ、部員相互の技能向上、並びに親睦を図り、もって人格形成に寄与し、健全な学生としての成長を促す」が設立の目的です。...要するに、コンピュータ関連の活動は大体何でも対象としています。部の運営に一定の人手が必要であることと、イベントなどに誰も参加しないと悲しいことになってしまうこととで、参加必須となるような活動もいくつかありますが、基本的には何をするか、あるいは何もしないかというのも自由な緩いクラブです。

学祭などの行事を除き完全オンラインで活動しています。部費は、サーバ代やドメイン代などの設備維持のため、年間 2000 円ほど頂いています (十分格安だと期待しています)。部員数は 25 人ほどで、学部は情報系がほとんどという訳でもなく、文系含め様々な学部の人が所属しています。入部には阪大生であることと部費の納入が必要ですが、活動場所自体は公開の Discord サーバーを使用しており、大阪大学の関係者ですらなくとも (荒らしやスパムでなければ) 誰でも参加可能なので、興味のある方は是非覗いてみてください。

なお、OUCC はそれなりに歴史があるクラブであることが知られています。普通、こう言う話には設立年が併記されるものですが、できません。記録が残っていないのです。一体何故なのでしょうか... 一応、1985 年ごろの OUCC の OB と名乗る方が新聞記事で取り上げられていたことから、1985 年時点ではすでに存在していたことが示唆されているものの、やはり具体的にいつ設立されたのかは謎のままです。

2020 年度

2020 年度は、COVID-19 のパンデミックが発生した年であり、また私が大阪大学基礎工学部情報科学科に入学した年でもあります。中学でブラッククラブに所属していたという黒歴史を抱えていることと、他人に何かをやらされることが基本的に嫌いなため、クラブ・サークルへの参加には消極的でしたが、コンピュータに興味は持っていたため調べていたところ、OUCC を発見しました。講習会をやるとあったので、面白そうだなと思い Discord 新歓サーバー (前節で紹介した公開サーバーと同じ。当時は新歓用だった。) に入りました。その後、講習会、(3 週間の) ハッカソンイベントを経て、自由な雰囲気なら悪くなさそうだと思い入部しました。当時の入部金は 5000 円でした。

ちなみに、ハッカソン (3 週間をハッカソンと呼んでいいかどうかは疑問だが) では「通」というテーマがあり、C# によるチャットアプリ、AI とのチャットアプリ (うろ覚え)、音ゲー、アクション RPG が開発され、私は「C# によるチャットアプリ」に所属しました。まあ、「多さ課題が苦」で知られる大阪大学定番の課題地獄の真っ最中だったこともあり、一応の完成を見たのは前者 2 つだけでしたが...

C# によるチャットアプリの動作画像

KC3 2020 (9 月)

例年通り、KC3 2020 に参加しました。私が以前を知らないので何とも言えないですが、COVID-19 パンデミック前の 2019 年度までは対面実施だったものがオンライン開催となったようです。私はあくまでも受講生としての参加でしたが、OUCC としては「HerokuでLINEとDiscordをつないでみよう」と「経験ゼロからウェブページを作ってみよう」と「3DCG入門」を出していました。

他大学との連携 (9 月)

さりげなく ANU CSSA と緩やかな関係 (実質的に、相互の Discord サーバーに部員が参加し合っているだけ) を構築しているのですが、それが始まったのがこの年です。8 月末に相手方からメールで連絡があり、面白そうだということで関係を結ぶことにしました。不思議なことに、当時新入部員であった私がいつしか主導していました。最初は競プロイベントを開いたのですが、それ以降は交流案もなく、緩やかな関係に留まっています。まあ、それでも相手方の運営方針、活動状況、文化、英語圏 (のインテリ層) から見た現況など、色々と学べることは多いので有意義ではあると思っています。

夏の勉強会 (9 月)

COVID-19 下だからといって活動を何もしないという訳にはいかないので、オンラインで勉強会が開かれました。とはいっても、何人かのグループを作り、期日までに何かの技術を学んで報告資料を作成する、といった感じでした。自分は Python をやりました。

Python 発表内容

財政危機 (10 月)

10 月に入ると、当時の会計から以下のような報告が為されました。

財政危機

何というか、やばいという言葉だけで片付けてはいけないレベルに致命的です。学生が 42 万をホイホイと出せる訳がありません。そもそも、なぜこんなことになったのでしょうか。鍵になるのは「補助金」「部員数」「学祭」「部室」です。

OUCC は、当時部室を学外に所有していました。これは、学内の部室は他の団体と共有になるために高価な PC 等を置きづらい、ネット回線を引きづらい、などが理由としてあったようです。しかし、これの代償は極めて大きく、家賃としてコンスタントに月 5 万が吹っ飛びます。石橋阪大前駅からそれほど離れていない「駅チカ」物件としては破格ですが、それでも全予算を自力で確保する学生団体としてはかなり厳しい額です。

しかし、昔は普通に賄えていたようなのです。まず、これは噂の域を出ない (記録が残っていない) のですが、大学から公認団体に対して補助金が出ていた時代があったようです。企業による支援金があったという話もあります。次に、部員数もかつてはかなり多く、100 人いた時代もあったと言われています (これも例によって記録が残っていない)。さらに、年 2 回の学祭の食品模擬店でもかなり (10 万円以上) 儲けていたようです。そういうこともあり、部室を維持できていたようです。

ところが、2020 年時点ではそれらがすべて崩れていました。まず、大学からの補助金は皆無で、協賛企業もありません。そして、部員数についても、正確な記録は行われていなかったものの 10 人 + 新入生 6 人程度でした (2 年は何と 1 人)。学祭も感染拡大防止のため中止されました。その結果収入源が無くなり、危機的状況に陥っていたのです。

部室をどうするか (11 月)

部室の家賃を払えないとなると、その解決策は「部室を引き払う」です。その際問題になるのが部室にある備品ですが、当時の部長が大学の学生センターと連絡を取り、倉庫スペースを貸してもらえるという話がありました。なお、この時点では学内に部室の空きはありませんでした。余りに狭く、本当に最低限しか置けないスペースでしたが、金がない以上仕方ないということで、一旦この方針になりました。

しかし、OB の方々とも連絡を取ったところ、部室には思い入れがあるので支援したいという方が何人か現れました。あまり記録はない (なぜ?) ものの、30 年近く借りていたことを示唆する資料もあるので、それだけ部室に思い出を持った方もいたわけです。部員としても、残せるなら残したいというのが本心だったため、何度か話し合いを重ねたのちに、「支援をお願いし、今後様子を見ながら来年 5 月頃にまた再検討する」という結論になりました。結果、多大なる支援を頂くことができ、2021 年までは維持可能な財源を確保することができました (本当に感謝です...)。ここで、事態は「一時的に」収まることになります。

ちなみに、部室を維持するようにしたことにより、部費は高額なまま据え置かれました。入部金は 5000 円だったと書きましたが、これは新入部員向け特別価格です。既存部員には前期、後期それぞれ 15000 円でした。そりゃぁ部員も減るよ...

部室環境

部室の概観

一応、部室の話が出たからには当時の部室がどのようであったかの説明をしておきましょう。まず、立地としては阪急線を挟んで大阪大学豊中キャンパスの反対側にあり、阪急石橋阪大前駅から徒歩 5 分程度の場所でした。部室そのものは 2 階建ての建物の 3 階です。ん?今何か変なことを言いましたか?まあ、画像から薄々察せるかとは思いますが、屋上付きの建物の屋上に置かれたプレハブです。建付けは素晴らしく、全て閉め切ってあるのに台所の下から猫が侵入して鍋で生活していたそうです。夏は屋上からの照り返しで 45℃ を超える暖かさで、一度部室に入ると靴下の裏が埃で真っ白になるなど、環境も快適でした。ちなみにエアコンなんて豪華なものはありません。

とはいえ、こう見えて面積は割と広く、色々なところに目を瞑れば駅チカで格安の、学生団体には十分な部室でした。講習会やハッカソンを行ったり、布団があるので泊まる人が居たり、大量のゲーム設備 (後述) で交流を深めたり、と COVID-19 のパンデミック前には大いに活用されていたようです。

Advent Calendar (12 月)

毎年恒例 OUCC Advent Calendar 2020 が行われました。自分は「SHARP Brain 用アプリケーションの作成方法」なる記事を書きました。裏話としては、この内容は今では Brain Wiki にあるのですが、それは私が後で Brain Wiki の管理者を引き継いで内容を反映したからであって、丁寧に開発方法をまとめた記事は当時まだありませんでした。部員以外にも、部室の話で (何故か失われていた) OB さんとのコネが復活したため、昔の OB さんも記事を書いてくださいました。その割に全然 25 記事に達していないのは内緒。

金曜部室 (1 月)

COVID-19 によって活動がかなり縮小したことが懸念事項となり、その解決策が話し合われました。その結果、金曜日の夜に Discord に集まって交流会をしたり雑談会をしたりといった緩い集会を開き、部員同士の交流を維持しようとする試み「金曜部室」が始まりました。これは、時期に合わせて履修相談会にしたり LT 会を開催したりと一定の成功を見せ、ネタが無くなってマンネリ化した 2021 年度の終わりまで続きました。

なお、これ以前にも一時的に「もくもく会」が木曜日に開かれていました。目的ややることも概ね似ていたため、金曜部室はある意味でそれの再興ともいえます。

まとめ

2020 年前半については自分の入部前だったりして曖昧な情報しかない (というかほぼ自分語り) ですが、それでもオンライン活動への移行や財政再建など、激動の 1 年でした。まさかコンピュータクラブがこんな状況に陥っていようとは、誰が予想しただろうか... まあ、国際的な関係構築など、良い面もありましたが。

前編はここまでです。続きは OUCC の 3 年間を振り返る [中編] にお進みください。

初学者のためのC#

C#とは

 C#はC++からJavaになる際に追加されたガーベージコレクション(GC)や中間言語を介して共通の実行環境で実行することなどを参考にMicrosoftが開発した言語です。C#はIL(中間言語)にコンパイル後.Net Framework上で実行されます。この.Net Framewokというのは標準でWindowsにインストールされており、そのためC#とその統合開発環境のVisual Studioを使うことで簡単にWindowsアプリケーションが開発・公開ができます。また、OUCCで主に使用しているUnityというゲーム作成に使われるフレームワークで使用する言語にも採用されています。

基本的な書き方

using System; // ファイル内でほかの名前空間のものを完全修飾型名を使わずに使用できるようにする

namespace Hoge // 名前空間はこうやって宣言する。
{
    public class Program // 処理は必ずクラスの中に関数を置いて書く
    { // 波カッコで範囲を示す

        public int HogeHoge { get { return _hogeHoge; } set { _hogeHoge = value; } } // プロパティの宣言方法
        private int _hogeHoge; // フィールドの宣言方法

        public static void Main()
        {
            Console.WriteLine("Hello World"); // 1文の最後は ; (セミコロン)で終わる
            var odds = Enumerable.Range(0, 100)
                .Where(i => i % 3 == 0)
                .ToArray(); // こんな感じで複数行にわたって書くことも可能。
            /*
            複数行コメントはこうやる
            */
        }
    }
}

StructとClass

 大きく分けてStructとClassの2種類があり、したのようにいろいろ違いはあります。StructはClassよりも動作が早いのですが参照型でないためにおこる様々な問題があるためオブジェクトを自分で定義する際は何か重要な問題がない限りClassで作ることをお勧めします。

structとclassの違い

struct class
オブジェクトの型 値型 参照型
データが保存されるメモリ スタック ヒープ
継承 interfaceの実装のみ class,interfaceともに可能
コンストラクタの定義 引数ありのものだけ可能 なんでも可能
nullableか nullを入れられない nullを入れられる

structの問題点

  • スタックに保存されるのでメモリを多く占有する大きなオブジェクトを入れると逆に遅くなる。
  • 参照型でないので関数やプロパティでとってきたものを変更してももとのオブジェクトを変更できない。(classでは可能)
  • 継承ができない
  • 引数なしのコンストラクタを作れない
  • nullを入れられない

他の問題を見たい方はC#に潜むstructの罠などを参考にしてみてください。

よく使う型

この中ではstringのみがclassでそのほかはstructです。

エイリアス 実装 リテラル 説明
byte System.Byte 0(収まる範囲内のみ) 符号なし整数(8bit) 主にバイナリデータのために使われます
short System.Int16 0(収まる範囲内のみ) 整数(16bit)
int System.Int32 0(収まる範囲内のみ) 整数(32bit)
long System.Int64 0(収まる範囲内のみ) 整数(64bit)
float System.Single 0f 小数型(32bit)
double System.Double 0.0又は0d 小数型(64bit)
decimal System.Decimal 0m 小数型(128bit)
bool System.Boolean true, false 真偽値(2bit)
char System.Char 'j' (シングルクォーテーションで囲む) UTF-16の文字(16bit)
string System.String "java" (ダブルクォーテーションで囲む) UTF-16の可変長文字列

使用例

int x = 1;
var x = 1; // varキーワードを使えば自動的に型を推測してくれる
System.Int32 x = 1; // こう書くこともできるが普通はしない

詳細(Microsoft公式ページ)

配列

C#で配列はclassであり、大きさは定義時に決定されます。書き方は以下の通りです。

int[] arr = new int[5]; //大きさ5の配列
string[] arr = new string[] { "a", "b", "c", "d", "e" }; //このように書いて初期化することも可能です。

var temp = arr[0]; //このように書くことで配列の要素にアクセスできます。

多次元配列

int[,] int[,,]のように書くことで多次元配列を作れます。たとえばint[3,4]とすると3×4多次元配列になります。

ジャグ配列

int[][]のように書くことでジャグ配列(ギザギザ配列)を作れます。これは配列の配列となっているので内側の配列の要素の数はそれぞれ違っても構いません。

演算子

定番の+ - * / %(余り)はありますが、pythonにはある累乗の**はありません。また、静的型付け言語なので以下のような整数同士の割り算は小数点以下が切り捨てられます。どちらかをdoubleにキャストしましょう。

int a = 10;
int b = 3;
int result = a / b; // 3
double result = (double) a / b // 3.333...

また、自分自身に+ - * / %を行う+= -= *= /= %=や、自分自身に1だけ足したりひいたりする++ -- などもあります。

int i = 0;
i += 1;    //これは
i = i + 1; //これと同等

i++;       //これは
i = i + 1; //これと同等

比較演算子として< <= > >= == !=があります。これらは前後のオブジェクトを比較して真偽値(bool)を返します。<= >=は数学における≦ ≧に相当し、== !=は数学における= ≠に相当します。また、&& ||はそれぞれ真偽値における論理積・論理和をあらわし、!は真偽値の直前につけることで真偽値を反転させることができます。

※論理積 二つともがtrueのときtrueを返す
※論理和 二つのうち一方がtrueのときtrueを返す。

ifとかforとか

条件分岐

C言語と違い条件式に指定できるのは真偽値だけです。ifステートメントとswitchステートメントが実装されており、詳しくはMicrosoft公式に書いてあります。

int x = 10;
if(x < 0)
{
  //ここに処理を書く
}
else if (x < 10) { /* else ifを使うことでいくつものパターンに対応できる */ }
else
  return 0; // 終わるときはelseで終わる。1文で終わるなら 波カッコ{} は不要

switch(x) //たくさんの条件で分岐したいときに使う
{
    case 10: // xが10の時の処理
        break;
    case 20: // xが20の時の処理
        break;
    default: // xが上のすべてと異なったときの処理
        break;
}

繰り返し

C#には繰り返しの処理としてforステートメント, foreachステートメント, whileステートメント, do-whileステートメントが実装されています。Microsoft公式を見るとここより詳しい情報を得られます。

for(var i = 0; i < 100; i++) // (初期化処理 ; 終了条件 ; ループが終わるごとに実行される)
{
    // 処理を書く
}

var arr = new int[]{ 0, 1, 2, 3, 4 };
foreach(var item in arr) //コレクションのループ
{
    item++;
}
foreach((var item, var i) in arr.Select((num, index) => (num, index))) //インデックス付きのコレクションのループ
{
    item += i;
}

while(true)
{
   // 条件を満たす間繰り返す。
}
do
{
  // 最初の一回実行され後条件を満たす間繰り返す。
}while(true)

デリゲート

C#では関数オブジェクトを格納するものとしてdelegateというもがあり、下のように定義し、使うことが可能です。

public delegate string Hoge(int x);//引数がint型 返り値がstring型の関数型Hoge

public class Program
{
  public static void Main()
  {
    Hoge func = new Hoge(Foo); //クラスをインスタンス化するときみたいにかける。
    Hoge func = Foo; //こうもかける。
  }

  public static string Foo(int x)
  {
    return x.ToString();
  }
}

このように定義できますが、実際はFuncActionを使うことが多いです。この2つはジェネリクスを用いて(厳密には違いますが)下のように定義されており、どんな型でもその場で指定して入れることができるので大変便利です。

public delegate void Action<T1>(T1 arg); //Actionは返り値がvoid
public delegate TResult Func<T1, T2, TResult>(T1 arg1, T2 arg2); //Funcは返り値がTResult(最後の型)

//使い方
public class Program
{
  public static void Main()
  {
    Func<int,int,int,string> func = Foo; //こんな感じで書けます。
  }

  public static string Foo(int x, int y, int z)
  {
    return x.ToString();
  }
}

コレクション

コレクションはデータをまとめて扱うためのクラスでジェネリクスなしのものはSystem.Collection名前空間に、ジェネリクスありのものはSystem.Collection.Generics名前空間にあります。代表的なコレクションはリストと辞書型があります。

リスト

リストは可変長配列のようなもので、配列とは違い検索メソッドやソートメソッドが実装されてたりします。

var arr = new List<int>();
arr.Add(3); //Addで追加
var temp = arr[0]; //これで中身を見る
arr.Remove(3); //引数と最初に一致したものを削除

詳細はMicrosoft公式で確認してください。

辞書型

辞書型はキーと値をセットで保持することができるコレクションです。

var dic = new Dictionary<string, string>();
dic.Add("key", "value"); //Addで追加
var temp = dic["key"]; //これで取得
dic.Remove("key"); //引数と一致したキーを持つ値を削除

詳細はMicrosoft公式で確認してください。

プロパティ

プロパティはclassやstructのメソッドをあたかもフィールドであるかのように扱う機能です。

public class Hoge
{
    public int Number
    {
        get
        {
            return _number;
        }
        private set // アクセス修飾子を片方だけ変えることが可能
        {
            if(value < 0) // 入ってきた値は valueキーワード に格納されている
                value = 0;
            _number = value;
        }
    }
    private _number;

    public int Id { get; private set; }  // getとsetだけ書いて中身は書かないとコンパイル時に
    public int Id { get{ return _id; } set{ _id = value; } }  // これみたいに展開される
    private int _id;

    public void HogeHoge()
    {
        Number = 10; //setプロパティが呼ばれる
    }
}

フィールドではなくプロパティで実装することのメリットはset時に制約をつけたりget時にnullの場合などで条件分岐したりできることがあります。また、interfaceにはフィールドは定義できないですがプロパティは実際は関数なので定義できます。

名前空間

C#ではコードを名前空間で分割することができす。下のようにクラスやメソッドと同じように宣言することができます。名前空間では同じ名前空間にあるもの、またはusingを使って宣言したものだけが制限なく使えます。別の名前空間のものを使用する際はA.Hogeのように名前空間から指定するかusing A;という文言を書いておく必要があります。

using System;
namespace A
{
   public class Hoge
   { }
}

yield return

yield returnで値を返すことで簡単にIEnumeratorを作ることができます。returnの代わりにyield returnを使うとIEnumeratorが自動的に生成され、foreachステートメントで使用できます。

public static void Main()
{
    foreach(var i in GetEnumerator())
    {
        // 処理
    }
}

private static IEnumerator GetEnumerator()
{
    int i = 0;
    while(true)
    {
        yield return i++;
    }
}

UnityではCoroutineという機能で使わています。

継承

C#はオブジェクト指向の言語なので継承が実装されています。継承とはあるクラスから性質を受け継いだ新しいクラスことで、派生とも呼ばれています。例としては以下のようなものがあります。

class Person
{
  public string name; // 名前
  public int    age;  // 年齢
}

class Student : Person
{
  public int    id;   // 学籍番号
}

継承 - C# によるプログラミング入門 | ++C++; // 未確認飛行 Cより

時間がなかったので継承はあとで書きます。

参考させていただいたサイト

Python 講習会を開催

5/22 (土) に Python 3 の講習会をオンライン開催しました。

Python は C/C++ のような言語よりも手軽に扱えることから多くの人に好まれている言語です。また、統計処理や機械学習系のライブラリが充実しており、その分野でも広く使われています。今回の講習会では、Python が持つ基本的な機能を網羅的に解説し、AtCoder Beginners Selection で演習することで、Python を活用できるようになることを目標としました。

資料は Discord で配布していますので、今回参加できなかった方もその資料で学習可能です!

今後の予定

次は6月初めに Linux の講習会、そして 5/29 - 6/26 にチーム開発イベントを同じく Discord 新歓サーバーで予定しています。興味のある方は https://discord.gg/jBM2NP7ZxK からご参加ください。なお、最新情報は Discord 内及び新歓特設サイトで紹介していますので、こちらもご確認ください。

Git と OOP の講習会を開催

5/15 (土) に SourceTree と GitHub による Git 講習会、5/16 (日) に TypeScript を用いたオブジェクト指向プログラミング (OOP) の講習会を Discord を用いてオンラインで開催しました。

Git 講習会

Git は分散型バージョン管理システムで、近年のソフトウェア開発で頻繁に利用されるほか、複数人開発では必須ツールとなっています。仕組みが複雑で初心者にはとっつきにくいのが難点ですが、使いこなせればソフトウェア開発を力強くサポートしてくれるとても便利なツールです。今回は、初学者にも比較的扱いやすい SourceTree という GUI ソフトウェアを用いて、Git を扱うのに最低限必要な技能を身に着けることに重点を置きました。

OOP 講習会

オブジェクト指向は「関数と型の関連付け」と「抽象化」を目的としたもので、「カプセル化」「継承」「多相」が主な特徴となります。近年はソフトウェアのメンテナンス性を重視する傾向が強まってきており、そういった点で合理的な OOP が広まっています。また、この考え方を取り入れた言語も数多く存在します。しかし、これもまた初学者にはとっつきにくいものであることから、今回は入門編としてその目的や定義を紹介したのち、TypeScript を題材として実際の実装例を確認しました。

今後の予定

次は 5/22 (土) に Python、6月初めに Linux の講習会を、同じく Discord 新歓サーバーで予定しています。興味のある方は https://discord.gg/jBM2NP7ZxK からご参加ください。なお、最新情報は Discord 内及び新歓特設サイトでも紹介していますので、こちらもご確認ください。

Blender と競プロの講習会を開催

5/8 (土) に Blender による 3D モデリング、5/9 (日) に競技プログラミングの講習会を Discord 新歓サーバーを用いてオンラインで実施しました。

Blender 講習会

約 90 分間という短時間で、VRChat で使える Avatar 制作の流れを学びました。短時間制作であることからポリゴンや着色などが荒くなっていますが、それでも様々な必須技術を学ぶことができました。

競プロ講習会

阪大競技プログラミング部 RAINBOU の部長を務めるこたまねぎ(Twitter: @small_onions)氏に、特別に講習会を開いていただきました。テーマは「全探索攻略」で、バグを減らすためのマクロ定義や文字列化 bit 全探索の活用、また C++ ライブラリの活用など、競プロに最前線で取り組んでいる方による様々なノウハウやアドバイスなどはとても新鮮で、競プロをそれなりにやっている受講者にとっても新たな発見がありました。

REP マクロを使う
bit 全探索
順列全列挙
複雑なデータ構造の操作は関数化

ご協力くださったこたまねぎ氏に感謝です!今後も、同じ志を持つ別団体との交流を進めていきたいですね。

今後の予定

次は 5/15 (土) 15:00 に Git、5/9 (日) 14:00 にオブジェクト指向プログラミングの講習会を、同じく Discord 新歓サーバーで予定しています。興味のある方は https://discord.gg/jBM2NP7ZxK からご参加ください。なお、最新情報は Discord 内及び新歓特設サイトでも紹介していますので、こちらもご確認ください。

ゲーム制作と Web の講習会を行いました

昨日 4/24(土) に Unity を用いた 2D ゲーム制作の講習会、そして本日 4/25(日) に HTML/CSS/JavaScript を用いた Web サイト制作の講習会を、Discord 新歓サーバーでオンラインで行いました。今回も、資料は Discord 新歓サーバーで配布していますので今回参加できなかった方もご参加下されば参照可能です。内容に関する質問もいつでも受け付けております。

2D ゲーム制作 (Unity)

Unity での 2D ゲーム制作の基礎として、ものすごく単純なゲームを作成しました。

単純とはいっても、スクリプトの書き方や当たり判定の実装、シーンの作成や遷移、そして Unity の各種機能の使い方など、Unity 初心者が身に着けるべき内容を丁寧に説明しています。Nintendo Switch 等の有名プラットフォームでも Unity で開発されたゲームが増えてきていますが、そういったゲーム開発の裏側に触れることができる講習会となりました。

以下に講習会のスライドを抜粋して掲載します。

Web サイト制作 (HTML/CSS/JavaScript)

Web サイト制作において最も基本的な HTML/CSS/JavaScript を用いて、簡単な Web サイトを作成しました。

まずは HTML で Web サイト制作への導入を行い、CSS で背景や文字などのスタイルを変更できることを確認したのち、最後に JavaScript でインタラクティブな Web サイトを実現できることを学びました。このブログも含め、日々目にする Web サイトの仕組みに触れることができる講習会となりました。

以下に講習会のスライドを抜粋して掲載します。

今後の予定

次は 5/8 (土) に Blender、5/9 (日) に競技プログラミングの講習会を、同じく Discord 新歓サーバーで予定しています。オンラインなので緊急事態宣言などの影響を受けることはありません!興味のある方は https://discord.gg/jBM2NP7ZxK からご参加ください。なお、最新情報は Discord 内及び新歓特設サイトでも紹介していますので、こちらもご確認ください。

C/C++ の講習会を開催しました

本日 4/18(日) に C 講習会、その準備編として昨日 4/17(土) に C++ 講習会を行いました。今回参加できなかった方も、講習会資料を Discord 新歓サーバーで配布していますので、ご参加下されば参照可能です。内容に関する質問もいつでも受け付けております。

C は広く利用される非常に有名な言語で大学の講義で1年から早速学びますが、プログラミング初学者にとっては修得が難しいものとなっており、それに向けた助けとなることを目指した内容としました。

講義の予習として、また、講義が理解できなかったときの参考書代わりとして、ご活用いただければ幸いです!