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年から早速学びますが、プログラミング初学者にとっては修得が難しいものとなっており、それに向けた助けとなることを目指した内容としました。

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

現役生と卒業生で LT 会を開催

本日、OUCC の卒業生と現役生との交流会を兼ねて卒業生による LT 会を開催しました。

内容は社会人としての経験や大学院での研究経験、また趣味で行っているプログラミングや電子回路技術の紹介といった様々な貴重なお話をして頂きました。

OUCC では、今後もこのような卒業生との交流会の機会を作っていけたらと思っております。ご協力くださった卒業生の皆様、ありがとうございました!

合格おめでとうございます!

令和3年度大阪大学一般入試を突破された新入生の皆様、合格おめでとうございます!
今年度はコロナにより模試日程や授業形態が例年と異なることに加え、本年度から始まった新しい試験の共通テストが実施されたということもあり、受験生は例年よりも大変な思いをされたと思います。ちなみに、中の人は基礎工学部情報科学科の学部4年生ですが、今年の倍率は3.8倍と聞いて驚いております。(今年受けたら落ちてそう…汗)

OUCCでは春に新歓活動として、プログラミングやITスキルに関わる講習会を開催します。詳しい情報はTwitterの新歓アカウント公式サイトにて順次公開しますので、是非ご覧ください!

大学ではたくさんの出会いや学びの機会、今までの人生では味わえなかった経験をすることができます。激動の一年(もしくはそれ以上)を乗り越えた皆様と共に大学生活を送ることができるのを心待ちにしております。

dotfiles を作ってみた

公開日: 2021年2月20日 最終更新: 2021年2月20日 執筆者: watamario15

大学の課題を全て出し終わり、ようやく自分の作業に取り組むことができるようになりました。無事に単位が取れていて、GPA もあれば良いのですが…

色々とやることはあるのですが、まずは dotfiles を作成することにしました。

dotfiles とは

検索すればすぐに分かるのですが、簡単に言うと環境構築を秒速で終わらせるためのファイル群です。Unix 系のソフトウェアの多くはテキストファイルを設定ファイルとして扱うものが多く、それをカスタマイズすることで自分好みに設定することができるようになっています。ここで、そのファイル群とそれを適切に配置したりその他の設定をしたりするスクリプトもセットで GitHub に上げておけば、新しい環境でも git clone してスクリプトを走らせるだけで即座に自分の環境が出来上がる、という訳です。

なお、dotfiles という名前は、設定ファイルの多くが名前がドット (.) で始まる「ドットファイル」であることが由来です。ちなみに、Unix 系システムにおいてドットファイルは隠しファイルとなります。

どんな dotfiles を作ったのか

これが私の dotfiles です: https://github.com/watamario15/dotfiles
機能や使い方などの説明は Readme.md にありますので、気になる方は読んでください。もちろん、install.sh.bashrc とかを参考にしてもらっても構いません(特に alias 周り)。まだまだ未熟ですが、少しずつ成長させて行けたらと思っています(この記事を読んでいる方で、もし「絶対これは設定すべき!」みたいなのがあれば issue 立てたり pull request 出したりして頂けると嬉しいです)。initialize.sh に付けた CASLII/COMETII のシミュレータをインストールする機能、阪大生(だけ)には割と需要ありそうですね(笑)

今回の投稿は以上です。ところで、推薦入試の合格発表があったそうですが、合格した皆さんおめでとうございます!もし合格してサークルを探している、という方で OUCC の活動に興味を持たれた方がいらっしゃれば、ぜひ Discord 新歓サーバー に参加してみてください(もちろん上回生も大歓迎!)。もちろん、これから一般入試だという方も全力で応援します!

GAN使用のアプリ制作における雑記

~あらすじ~

 GANを3か月前から学び始めたんですが、OUCCのAdvent Calendarの24日目?の記事を書くに当たって、自分が今までやったことがない技術を使用しようと思いまして、StackGANというGANを使用したアプリを制作しようとしました。具体的には大阪大学生協食堂の料理の写真とその料理名を学習して、入力された架空の料理名から架空の料理画像を生成するアプリです。結論から言いますと上手くいかなかったのですが、その間に得られた知見などの心に移りゆくよしなし事をそこはかとなく書きつくりました。

~GANって?~

GANについて軽く説明します。詳しくはググってください。

 GeneratorとDiscriminatorという2つの学習するモデルから構成される機械学習モデルです。小学校とかの先生と生徒の関係で例えると、生徒のGenerator君は答えを写した宿題を作成し、Discriminator先生は提出された答案が答えを写したものかきちんと解いて得られた答案かを見分けます。その見分けた結果、答えを写したことがばれて叱られたGenerator君は、学習してより自分で解いたかのように見える答案を作成します。Discriminator先生もきちんと解いてきた答案かどうかを見分けられる様に学習します。そのように一方が利するともう一方が損する関係によってお互いが高めあい、Generator君は自分で解いた答案と変わらない答案を作成することができるように成長します。つまり、Generatorモデルが最終的に本物そっくりのものが生成できるようになる学習の仕組みがGANというモデルです。

~StackGANって?~

 私も最近知ったのでよく知りません。言語から画像を生成する方法ないかなと探していたら発見したGANの一種のモデルです。これも詳しくはGoogle先生に教えを乞うか、私が参考にしたサイトを閲覧してください。(GANの説明に疲れて丸投げしたのでは無い)

 なお、レシピから料理を生成するCookGANというものがあるみたいですが、今回は料理名をラベルとして使用するので恐らく使えないです。

・何が駄目だったのか

 あまり制作にかける時間がなかったので原因究明はきちんとはされていないですが、早い話学習データが圧倒的に不足していました。もし、学習が上手くいかなくてどういうわけかこのページに行きついてしまったかわいそうな人にはこんな結論で申し訳ないです。それはさておき何が駄目だったかというと、130枚の、しかもラベルが重複しない、共通点としては器の形が似ているだけの画像で学習しようとしたことが無謀でした。そのデータ数でよくやろうと思ったなと言われそうですが、言い訳をすると入力する料理名に含まれる名詞は重複が多く何とかなるかなと思ってやってみた次第です。さらにGANの学習データを水増しするDifferentiable Augmentationという技術を発見して、もしかしたら出来るのでは?と愚考した次第です。

 Differentiable Augmentationについて軽く説明しますと、従来の画像のクラス分類学習では訓練データにちょっとした加工を加えることでデータの水増しを行うことができましたが、GANの学習ではさらにGeneratorの生成した画像に同様の加工を加えることで、より良いデータの水増し効果が得られるという技術がDifferentiable Augmentationです。間違っていたらすみません、詳しくはgoog(ry

・使用したデータの一例

 一枚目がピリ辛サーモン丼。美味で個人的なおすすめ。二枚目はマヨラーの友人によって犠牲となった親子丼。親子丼に何の恨みがあったのだろうか。なお、二枚目は学習には使用していません。

・結果

 StackGANのstage1の学習段階で上手くいきそうな気配がないのでやめました。

一応stage1の学習結果だけ載せておきます。

心が清い人には遠目で見るとかろうじて料理に見えるはず。

 これだけでは申し訳ないので、同じデータセットで学習したDCGANで生成したものを貼り付けておきます。

 右下以外はまんま存在する料理が生成されています。あ、そう くらいのつまらなさで申し訳ない。やはり、生成画像を人間がコントロールできるものを作った方が楽しいですね。

・損失関数について

 最近GANの学習にはHinge Lossを使用すれば上手くいくよという記事を見つけたので、これとは違うGANのアプリに実装すると劇的に学習が向上しました。なのでこのDCGANにもHinge Lossを適用したらより上手くいくかと思ったら、逆に学習しなくなってしまいました。Hinge Lossの取る値はReLUみたいに途中から一定の値になりますが、Binary Cross Entropyは少しの値の変化もLossの値に反映されるので、これが原因ではないかと考えています。

~終わりに~

 いかがでしたか?ろくな原因究明をしていない分、悪質なキュレーションサイトの方がよっぽど役に立つような内容でした。この山無し落ち無し意味なしのやおいページにお付き合い下さり有難うございました。そして1月になって記事を書いたことお許しください。

著者:AI班上月

昔作ったゲームを振り返る

これはアドベントカレンダー25日目の記事です。なんでトリなんて選んだんでしょうね。

特に書くこともないので昔作ったゲームでも紹介します。
1つ目はブロック崩し。
僕が初めて作ったゲームです。javascriptとhtmlで作りました。

2つのゲームを同時にクリアさせる必要があります。カーソルは1つなのでなかなか忙しいです。当てるなってやつに当てると画面が変化して見づらくなります。初めて作ったにしてはなかなかいい発想してたと思います。


2つ目は人生ゲーム。何番目に作ったのかは覚えてません。
小学生のころ考えた留置所と戦争に行くという要素を含んだものです。
ほかにも途中で無職になったり、事故を起こして裁判になったりと、およそ市販できないようなマスを用意しています。最近のマスがどんなものか知りませんが。大体所持金がマイナスになるというそれはひどい人生ゲームです。ちなみに画像は無職なのに車を買って事故を起こし、裁判で賠償金490万払ったところです。賠償金安すぎですね。

3つ目は陣取りゲームです。某イカのゲームが流行っていたので作りました。

右にあるいろいろな塗り方から選んで盤面を塗っていきます。緑色の場所しか選べず、盤面がすべて赤色か青色で塗られたらゲーム終了。色の多いほうが勝ちです。一番右にある4つはスペシャル技で、1種類だけ使えます。正方形が強かった気がします。

最後はトランプオセロ。これだけ大学に入ってから作ったものです。部室でトランプで遊んでた時にふと思いついたのでゲームにしたものです。

トランプでオセロをすることで、単純に表の数でなく数値の和で勝敗を決める戦略性、裏が同じ模様のトランプであることから両者が使える裏というおき方、裏返ったカードの色と数値を記憶する必要があるという神経衰弱要素、そしてジョーカーを使うことで場のカードを1枚ひっくり返せるという逆転要素が盛りだくさんです。自分の周りでは結構評価高かった気がします。

こうして振り返ってみるとなかなか頑張ってたなという気がします。今はこんな気力はないですけど、また面白そうなもの思いついたら形にしておきたいですね。たとえ日の目を浴びなくても、こうして思い出すことで自分も頑張ってたんだな、とか面白いこと考えてたな、とか懐かしい気持ちになれるなら形にした意味はあるんじゃないでしょうか。