diff --git a/src/content/blog-metas/100.json b/src/content/blog-metas/100.json new file mode 100644 index 0000000..f951e6e --- /dev/null +++ b/src/content/blog-metas/100.json @@ -0,0 +1,3 @@ +{ + "postDate": "2019-04-19T20:36:00+09:00" +} diff --git a/src/content/blog-metas/105.json b/src/content/blog-metas/105.json new file mode 100644 index 0000000..2ffff5a --- /dev/null +++ b/src/content/blog-metas/105.json @@ -0,0 +1,3 @@ +{ + "postDate": "2019-05-03T20:45:00+09:00" +} diff --git a/src/content/blog-metas/110.json b/src/content/blog-metas/110.json new file mode 100644 index 0000000..47dd002 --- /dev/null +++ b/src/content/blog-metas/110.json @@ -0,0 +1,3 @@ +{ + "postDate": "2019-09-12T09:00:00+09:00" +} diff --git a/src/content/blog-metas/116.json b/src/content/blog-metas/116.json new file mode 100644 index 0000000..0ba43c3 --- /dev/null +++ b/src/content/blog-metas/116.json @@ -0,0 +1,3 @@ +{ + "postDate": "2019-11-04T13:21:00+09:00" +} diff --git a/src/content/blog-metas/120.json b/src/content/blog-metas/120.json new file mode 100644 index 0000000..8378549 --- /dev/null +++ b/src/content/blog-metas/120.json @@ -0,0 +1,3 @@ +{ + "postDate": "2019-12-10T18:50:00+09:00" +} diff --git a/src/content/blog-metas/132.json b/src/content/blog-metas/132.json new file mode 100644 index 0000000..4bbfb1b --- /dev/null +++ b/src/content/blog-metas/132.json @@ -0,0 +1,3 @@ +{ + "postDate": "2019-12-13T20:02:00+09:00" +} diff --git a/src/content/blog-metas/145.json b/src/content/blog-metas/145.json new file mode 100644 index 0000000..b2bd3ce --- /dev/null +++ b/src/content/blog-metas/145.json @@ -0,0 +1,3 @@ +{ + "postDate": "2019-12-31T00:00:00+09:00" +} diff --git a/src/content/blog-metas/161.json b/src/content/blog-metas/161.json new file mode 100644 index 0000000..1bbeaa3 --- /dev/null +++ b/src/content/blog-metas/161.json @@ -0,0 +1,3 @@ +{ + "postDate": "2020-04-03T14:24:00+09:00" +} diff --git a/src/content/blog-metas/227.json b/src/content/blog-metas/227.json new file mode 100644 index 0000000..0e52092 --- /dev/null +++ b/src/content/blog-metas/227.json @@ -0,0 +1,3 @@ +{ + "postDate": "2020-04-06T13:08:00+09:00" +} diff --git a/src/content/blog-metas/234.json b/src/content/blog-metas/234.json new file mode 100644 index 0000000..53a3433 --- /dev/null +++ b/src/content/blog-metas/234.json @@ -0,0 +1,3 @@ +{ + "postDate": "2020-04-11T23:59:00+09:00" +} diff --git a/src/content/blog-metas/57.json b/src/content/blog-metas/57.json new file mode 100644 index 0000000..e16acf2 --- /dev/null +++ b/src/content/blog-metas/57.json @@ -0,0 +1,3 @@ +{ + "postDate": "2019-01-22T15:04:00+09:00" +} diff --git a/src/content/blog-metas/69.json b/src/content/blog-metas/69.json new file mode 100644 index 0000000..2d63758 --- /dev/null +++ b/src/content/blog-metas/69.json @@ -0,0 +1,3 @@ +{ + "postDate": "2019-02-25T22:38:00+09:00" +} diff --git a/src/content/blog-metas/73.json b/src/content/blog-metas/73.json new file mode 100644 index 0000000..45c04e2 --- /dev/null +++ b/src/content/blog-metas/73.json @@ -0,0 +1,3 @@ +{ + "postDate": "2019-03-05T15:49:00+09:00" +} diff --git a/src/content/blog-metas/76.json b/src/content/blog-metas/76.json new file mode 100644 index 0000000..9cb49be --- /dev/null +++ b/src/content/blog-metas/76.json @@ -0,0 +1,3 @@ +{ + "postDate": "2019-03-09T18:51:00+09:00" +} diff --git a/src/content/blog-metas/79.json b/src/content/blog-metas/79.json new file mode 100644 index 0000000..5b61aa4 --- /dev/null +++ b/src/content/blog-metas/79.json @@ -0,0 +1,3 @@ +{ + "postDate": "2019-03-17T08:59:00+09:00" +} diff --git a/src/content/blog-metas/82.json b/src/content/blog-metas/82.json new file mode 100644 index 0000000..2a02bf9 --- /dev/null +++ b/src/content/blog-metas/82.json @@ -0,0 +1,3 @@ +{ + "postDate": "2019-03-22T18:49:00+09:00" +} diff --git a/src/content/blog-metas/90.json b/src/content/blog-metas/90.json new file mode 100644 index 0000000..dff8231 --- /dev/null +++ b/src/content/blog-metas/90.json @@ -0,0 +1,3 @@ +{ + "postDate": "2019-04-06T12:24:00+09:00" +} diff --git a/src/content/blog-metas/93.json b/src/content/blog-metas/93.json new file mode 100644 index 0000000..4d76bbf --- /dev/null +++ b/src/content/blog-metas/93.json @@ -0,0 +1,3 @@ +{ + "postDate": "2019-04-13T12:55:00+09:00" +} diff --git a/src/content/blog-metas/98.json b/src/content/blog-metas/98.json new file mode 100644 index 0000000..c5f210b --- /dev/null +++ b/src/content/blog-metas/98.json @@ -0,0 +1,3 @@ +{ + "postDate": "2019-04-17T12:58:00+09:00" +} diff --git a/src/content/blogs/100.md b/src/content/blogs/100.md new file mode 100644 index 0000000..0541610 --- /dev/null +++ b/src/content/blogs/100.md @@ -0,0 +1,28 @@ +--- +title: 2019年度LT会開催! +description: | + Posted By OUCC サーバ管理 (2019/04/19) + + 本日、4月19日にOUCC部室にて、春のLT会が開催されました! + + LT会では、各部員が自身の活動内容を要約して発表するもので、OpenCVやBrain〇uckなど中々個人の趣味に走ったものが紹介されていました。 + + 今後は、PythonやJavaScriptなど、講習会を開いていく予定です! +author: member +tags: [] +--- + +

Posted By OUCC サーバ管理 (2019/04/19)

+ + + +

本日、4月19日にOUCC部室にて、春のLT会が開催されました!

+ + + +

LT会では、各部員が自身の活動内容を要約して発表するもので、OpenCVやBrain〇uckなど中々個人の趣味に走ったものが紹介されていました。

+ + + +

今後は、PythonやJavaScriptなど、講習会を開いていく予定です!

+ diff --git a/src/content/blogs/105.md b/src/content/blogs/105.md new file mode 100644 index 0000000..808fc88 --- /dev/null +++ b/src/content/blogs/105.md @@ -0,0 +1,18 @@ +--- +title: いちょう祭に出店しました +description: | + こんにちは、久々の更新です! + 令和初のいちょう祭にOUCCは模擬店と展示で出展させていただきました。 + 模擬店では唐揚げと焼き鳥を売らせていただき、二日とも休日だったおかげか唐揚げを完売することができました!!(去年は10kgほど売り残りがあり、部員たちで唐揚げパーティー(消費会)を開催しました(笑)) + また、展示では去年のまちかね祭で出させていただいたシューティングゲームや占いに加え、opencvを用いたゲームや部長が作ったアクションゲームを展示させていただきました!! +author: member +tags: [] +--- + + +

こんにちは、久々の更新です!
令和初のいちょう祭にOUCCは模擬店と展示で出展させていただきました。
模擬店では唐揚げと焼き鳥を売らせていただき、二日とも休日だったおかげか唐揚げを完売することができました!!(去年は10kgほど売り残りがあり、部員たちで唐揚げパーティー(消費会)を開催しました(笑))
また、展示では去年のまちかね祭で出させていただいたシューティングゲームや占いに加え、opencvを用いたゲームや部長が作ったアクションゲームを展示させていただきました!!

+ + + +

今後のOUCCの活動としては五月に講習会や新入生の入部会があるので、興味のある人はぜひ部室にお越しください!!

+ diff --git a/src/content/blogs/110.md b/src/content/blogs/110.md new file mode 100644 index 0000000..17519d3 --- /dev/null +++ b/src/content/blogs/110.md @@ -0,0 +1,32 @@ +--- +title: 夏合宿を行いました +description: | + 2年前に消滅してしまった合宿を再興したいということで、9月9日~9月11日にかけて、福井県にある「泰澄の杜(たいちょうのもり)」で夏合宿を行いました。 + + この合宿の目的はチーム開発を経験することということで、3人1組の2つのグループに分かれて開発をしました。開発をする時間は9月9日の16時から9月11日の11時30分まででした。最後の夜は徹夜をして、開発終了時間にはどちらも動くものを発表することができました。 +author: member +tags: [] +--- + +

2年前に消滅してしまった合宿を再興したいということで、9月9日~9月11日にかけて、福井県にある「泰澄の杜(たいちょうのもり)」で夏合宿を行いました。

+ + + +

この合宿の目的はチーム開発を経験することということで、3人1組の2つのグループに分かれて開発をしました。開発をする時間は9月9日の16時から9月11日の11時30分まででした。最後の夜は徹夜をして、開発終了時間にはどちらも動くものを発表することができました。

+ + + +

今回お世話になった「泰澄の杜」さんは、大人数が入れる多目的室を6人で使わせていただいたり、料理がおいしかったり大変満足しました。

+ + + +

個人的な感想としては、開発時間がもう1日くらいあればよかったなと思ったので次に開発合宿をする際は3泊4日とかにしてもいいかなと思います。

+ + + +合宿とは関係のない話ですが、**大阪大学コンピュータクラブは後期も部員を募集しているので、入部したい方や見学したい方は是非メールを送ってください。** + + + +![](./110/OUCCnatsugasshuku2019-1024x768.jpg) + diff --git a/src/content/blogs/110/OUCCnatsugasshuku2019-1024x768.jpg b/src/content/blogs/110/OUCCnatsugasshuku2019-1024x768.jpg new file mode 100644 index 0000000..c62c439 Binary files /dev/null and b/src/content/blogs/110/OUCCnatsugasshuku2019-1024x768.jpg differ diff --git a/src/content/blogs/116.md b/src/content/blogs/116.md new file mode 100644 index 0000000..4cb6ccb --- /dev/null +++ b/src/content/blogs/116.md @@ -0,0 +1,28 @@ +--- +title: まちかね祭出店! +description: | + どうも、久しぶりに投稿します。 + + 今回、2019年度まちかね祭に店舗及び展示で出店しました! + + 今回の学祭でも我々は沢山の方に唐揚げを食べていただき、展示では、VRやシューティングゲームなど、これまでとは一味違うガチの展示を行えました。 + + 興味がある方は是非学祭に足を運びください! +author: member +tags: [] +--- + +

どうも、久しぶりに投稿します。

+ + + +

今回、2019年度まちかね祭に店舗及び展示で出店しました!

+ + + +

今回の学祭でも我々は沢山の方に唐揚げを食べていただき、展示では、VRやシューティングゲームなど、これまでとは一味違うガチの展示を行えました。

+ + + +

興味がある方は是非学祭に足を運びください!

+ diff --git a/src/content/blogs/120.md b/src/content/blogs/120.md new file mode 100644 index 0000000..4413f86 --- /dev/null +++ b/src/content/blogs/120.md @@ -0,0 +1,56 @@ +--- +title: ちょこっと思いついてちょこっと作ってみたゲームについて +description: | + これはOUCC 2019年アドベントカレンダー 12/10 分の記事です。 + + ちょこっと思いついてUnityで簡単に作ったゲームについて書きます。作ったといっても個人で自己満足するくらいの出来で、とても他人に見せられるものではないです。 + + 今回考えたゲームのテーマは、「デッキ作製系リアルタイム対戦ゲーム」です。戦闘画面のイメージは次の通り。 +author: member +tags: [advent-calendar, unity] +--- + + +

これはOUCC 2019年アドベントカレンダー 12/10 分の記事です。

+ + + +

ちょこっと思いついてUnityで簡単に作ったゲームについて書きます。作ったといっても個人で自己満足するくらいの出来で、とても他人に見せられるものではないです。

+ + + +

今回考えたゲームのテーマは、「デッキ作製系リアルタイム対戦ゲーム」です。戦闘画面のイメージは次の通り。

+ + + +![](./120/cardGame.png) +
対戦画面
+ + + +

画面下にコマンドを10個程度用意し、ボタンをクリックするとその効果を発揮する、という感じで先頭を進めます。連打は禁止するために一定時間押せないようにし、また、押すたびにそのボタンが発揮する効果を変更します。ほんとはもっとカードっぽいものにしたいんですけど、もちろん著者にそんな技術や時間はありません。

+ + + +

ボタンに現れる効果は、あらかじめデッキを作成しておき、そのデッキにおけるカードの割合で出す、ということを考えています。つまり、攻撃カード、攻撃力アップカード、魔法攻撃カード、魔法攻撃アップカードを各1枚ずつ入れたデッキなら、4分の1の確率で各カードが登場します。

+ + + +

戦闘はこのボタンクリックのみで行います。そのため、図では攻撃系のカードしか表示してませんが、体力回復、防御力アップなどのカードも入れる必要があると思います。カードゲームをしたことがある人なら、使いたいカードをただひたすら入れてもうまく動かないことがよくわかると思います。なので、戦闘そのものより、戦闘しやすいようにデッキを作る、というのが主なゲームになると思います。そんなところまで作ってませんけど。

+ + + +

ここからは、このゲームを作る場合どうするのがいいかということついてだらだら書こうと思います。

+ + + +

まず能力アップ系のカードについてですが、戦闘中に何回も押されるため、効果を小さくする必要があります。1.1^100は約14000なので、まあ1.1倍とかがいいのかなと思います。また、1回の戦闘で終わるのはせっかく強くしたのに、という感じだったり難易度的にもその敵に対しデッキを作るだけになるので、フェーズの形で1つ前の状態を受け継いで次の敵キャラとの戦闘に入る、とするほうがいいんじゃないかと思ってます。

+ + + +

デッキ作製系ゲームを謳うならカードの種類もいろいろ必要だと思うんですけど、上に挙げたもの以外だと普通の攻撃だけでなく必殺技を設けるとか、あとはレベルの高いカードを用意して、効果が1.1倍でなく1.2倍になったり、次にカードが押せるようになるまでの時間が短くなるみたいな効果を追加したらいいんじゃないかと思います。あとは、デッキを2つ用意しておいてデッキを入れ替えるカード、というのもゲーム性が上がるんじゃないかと思います。

+ + + +

ここまでいろいろ書いてきましたが、僕はこのゲームを最後まで作るつもりはありません。そんな気力がないので。なのでここまで作って完成ということにします。すでにこういうゲームがあるなら教えてほしいです。

+ diff --git a/src/content/blogs/120/cardGame.png b/src/content/blogs/120/cardGame.png new file mode 100644 index 0000000..4b64da5 Binary files /dev/null and b/src/content/blogs/120/cardGame.png differ diff --git a/src/content/blogs/132.md b/src/content/blogs/132.md new file mode 100644 index 0000000..1f22219 --- /dev/null +++ b/src/content/blogs/132.md @@ -0,0 +1,103 @@ +--- +title: Unityでノベルゲームを制作中 +description: | + ・あらすじ  + ~ Unityで武器換装機能を実装したい~ + +  先週VRのシューティングゲームを作っている最中に武器の換装機能を徹夜で実装する機会がありました。 + +  その際プレイヤーやどこかのGameObjectに全ての武器の処理を書くのが煩雑で嫌だなと思ったので、武器のオブジェクトにその武器の動作を規定するスクリプトを張り付けることにしたんです。 + +  Oculus IntegrationアセットのOVRGrabberスクリプトのgrabbedObjectに現在つかんでいるオブジェクトが格納されるそうなので取得した武器オブジェクトからGetComponentでスクリプトを取得したいと思っていたんですが、unityの仕様上それぞれの武器につけるスクリプト名は同一の名前を使用出来ないので GetComponent で一様に処理できないことに気が付いて、AM2時を迎えた私は大変困りました。 + +  それで何分悩んだかわからないけど死にかけの頭で考えて何とか実装には成功したので、今後同じ事態にはまった時のためにメモとしてここに記述します。 +author: member +tags: [unity, csharp] +--- + + +

・あらすじ 

+ + + +

~ Unityで武器換装機能を実装したい~

+ + + +

 先週VRのシューティングゲームを作っている最中に武器の換装機能を徹夜で実装する機会がありました。

+ + + +

 その際プレイヤーやどこかのGameObjectに全ての武器の処理を書くのが煩雑で嫌だなと思ったので、武器のオブジェクトにその武器の動作を規定するスクリプトを張り付けることにしたんです。

+ + + +

 Oculus IntegrationアセットのOVRGrabberスクリプトのgrabbedObjectに現在つかんでいるオブジェクトが格納されるそうなので取得した武器オブジェクトからGetComponentでスクリプトを取得したいと思っていたんですが、unityの仕様上それぞれの武器につけるスクリプト名は同一の名前を使用出来ないので GetComponent で一様に処理できないことに気が付いて、AM2時を迎えた私は大変困りました。

+ + + +

 それで何分悩んだかわからないけど死にかけの頭で考えて何とか実装には成功したので、今後同じ事態にはまった時のためにメモとしてここに記述します。

+ + + +

・ GetComponents

+ + + +`GetComponents()`というメソッドがあって、ここでMonoBehaviourを指定すればMonoBehaviourを継承したスクリプト、つまり自作のスクリプト(の大半)を全て取得できるそうです。 + + + +```cs +public class TimerManager : MonoBehaviour +``` + + + +

  (↑実はこの:の後の部分が継承元だったんですね。私はC#を勉強せずにUnity書いてる人なので知りませんでした。) 

+ + + +

 しかし、MonoBehaviourを指定して取得したインスタンスは MonoBehaviour に存在するメソッドしか使用できないみたいです。

+ + + +

・解

+ + + +

 よって次のように MonoBehaviourを継承した、使用したいメソッドを記述したクラスを生成し、

+ + + +```cs +public class guns : MonoBehaviour +{ +  public virtual void shoot(){} +} +``` + + + + +さらにそれを武器の動作を記述したクラスが継承すれば、 `GetComponents()` で取得し、shootメソッドを使用することが出来るようになります。やったね。 + + + +```cs +public class gun_makrov : guns//継承 +{ +   public virtual void shoot(){ +   //内容 +  } +} +``` + + + +

筆者:OUCC 2DCG班班長、AI班班長

+ + + +

ちなみに筆者は当日実装間に合ってません。

+ diff --git a/src/content/blogs/145.md b/src/content/blogs/145.md new file mode 100644 index 0000000..3efa861 --- /dev/null +++ b/src/content/blogs/145.md @@ -0,0 +1,113 @@ +--- +title: Unityでノベルゲームを制作中 +description: | + はじめに + この記事はOUCC Advent Calender 2019の23日目の記事です(完成したのは12/31です) + + パワポケから野球要素を抜いたノベルゲームみたいなのを作りたかったので、12月から土台作りを始めました。 + 土台作りといっても基礎となる部分は以下のサイトを参考に作成しました。 + + https://kanchi0914.hatenablog.com/entry/2019/10/02/181617 + 今回はこれをパワポケ風に近づけるために追加した機能を書きたいと思います。 +author: member +tags: [advent-calendar, unity] +--- + + +

はじめに

+ + + +

この記事はOUCC Advent Calender 2019の23日目の記事です(完成したのは12/31です)

+ + + +

パワポケから野球要素を抜いたノベルゲームみたいなのを作りたかったので、12月から土台作りを始めました。
土台作りといっても基礎となる部分は以下のサイトを参考に作成しました。

+ + + + +https://kanchi0914.hatenablog.com/entry/2019/10/02/181617 + + + + +

今回はこれをパワポケ風に近づけるために追加した機能を書きたいと思います。

+ + + +

1 キャラの立ち位置を二か所にする

+ + + +

パワポケでは左右にキャラが立って、会話が展開されるので、まずはキャラを左右に立たせるようにしました。このとき、3人目のキャラを追加するときは、既にいるどちらか二人のうちの一人を消して、3人目のキャラを追加するようにしました。

+ + + +- ![](./145/p1-1.png) +- ![](./145/p2-1.png) + + + +

Gif画像をUpしたかったのですが、容量的に上げられませんでした...

+ + + +

2 背景画像を変える

+ + + +

#bg_imageで背景を変えられるようにしました。

+ + + +![](./145/p3.png) + + + +

3 真ん中に画像が出るようにする

+ + + +

背景と同じ要領で真ん中に画像が出るようにしました。背景との違いは#center_imageで真ん中に画像が出現して、#center_image_offでその画像を見えなくするといったところです。

+ + + +![](./145/p4.png) + + + +

4 選択肢の内容をメッセージボックスに表示する

+ + + +

選択肢のボタンを表示させて、ボタンに触れるとそのボタンのテキストの内容をメッセージボックスに表示するようにしました。

+ + + +![](./145/p5.png) + + + +

5 その他機能

+ + + +

そのほかに追加した機能としては、BGMを変える機能や、SEを鳴らす機能、コマンドで使用している'#'をメッセージボックスに表示させるためのエスケープシーケンスを実装しました。

+ + + +

6 まとめ

+ + + +

以上述べたような機能を実装しましたが、パワポケ風にするためには、パラメーターの追加やフラグ管理など、追加しなければならないことが沢山あるのでこれからも追加していきたいと思います。
今回は容量の都合上、gif画像を使えなかったので、次に投稿するときはgif画像を上げられるようなブログで書きたいなと思います。

+ + + +

お借りした素材

+ + + +

キャラクターの素材:いらすとや様
背景素材:あやえも研究所様
出演:部室に侵入した猫様

+ diff --git a/src/content/blogs/145/p1-1.png b/src/content/blogs/145/p1-1.png new file mode 100644 index 0000000..bc6bff2 Binary files /dev/null and b/src/content/blogs/145/p1-1.png differ diff --git a/src/content/blogs/145/p2-1.png b/src/content/blogs/145/p2-1.png new file mode 100644 index 0000000..f02605c Binary files /dev/null and b/src/content/blogs/145/p2-1.png differ diff --git a/src/content/blogs/145/p3.png b/src/content/blogs/145/p3.png new file mode 100644 index 0000000..24e6c47 Binary files /dev/null and b/src/content/blogs/145/p3.png differ diff --git a/src/content/blogs/145/p4.png b/src/content/blogs/145/p4.png new file mode 100644 index 0000000..31d3d2e Binary files /dev/null and b/src/content/blogs/145/p4.png differ diff --git a/src/content/blogs/145/p5.png b/src/content/blogs/145/p5.png new file mode 100644 index 0000000..5640828 Binary files /dev/null and b/src/content/blogs/145/p5.png differ diff --git a/src/content/blogs/161.md b/src/content/blogs/161.md new file mode 100644 index 0000000..bde4ca0 --- /dev/null +++ b/src/content/blogs/161.md @@ -0,0 +1,520 @@ +--- +title: OpenCVでMONO消しゴムのデザインをイタリアの国旗にする +description: | + ・~あらすじ~ +  クリスマスではないけど、一応アドベントカレンダーの名目で二日目の記事書かせてもらいますOUCCの2DCG班長です。最初は適当にunityの音声認識の記事でも書いてやり過ごそうと思ってたんですが、一日目の先代の部長が結構頑張ってたんで、それを見て急遽書く内容変更して、一日で出来るけどそこそこ難易度のあるテーマを考えました。シートン学園を見ながら3時間くらい悩んだ結果、PCの隣にあったMONO消しゴムのデザインがエストニアの国旗に似ているな~とふと気が付いて、現在に至ります。 +author: member +tags: [advent-calendar, python, open-cv] +--- + + + + + + + + + +

・~あらすじ~

+ + + +

 クリスマスではないけど、一応アドベントカレンダーの名目で二日目の記事書かせてもらいますOUCCの2DCG班長です。最初は適当にunityの音声認識の記事でも書いてやり過ごそうと思ってたんですが、一日目の先代の部長が結構頑張ってたんで、それを見て急遽書く内容変更して、一日で出来るけどそこそこ難易度のあるテーマを考えました。シートン学園を見ながら3時間くらい悩んだ結果、PCの隣にあったMONO消しゴムのデザインがエストニアの国旗に似ているな~とふと気が付いて、現在に至ります。

+ + + +
+ + + +

・道のり① 消しゴムの青いところを取得

+ + + +

 コードが300行あって説明が大変なので要点をかいつまんで書きます。読んでも幸せになれない可能性があるので、青い鳥をお探しの方は結果まで飛ばした後、AMAZONにお買い求めください。

+ + + +

※実行環境はwindows10、Python3.8で、使用ライブラリはOpenCVとNumPyです。

+ + + +

・MONO消しゴムが写っている画像を読込み

+ + + +

・読み込んだ画像をガウス平滑化

+ + + +

・cv2.inRangeで青周辺の色域選択&選択部分取得

+ + + +

・cv2.dilateで白い部分を膨張させ、erodeで収縮

+ + + +

↑(これは白い部分の中に散見される黒い所を出来れば除去したいなという希望でやってます。)

+ + + +![](./161/lkhfukfhj-3.png) + + + +

・cv2.findContoursで輪郭を取得

+ + + +

・各々の輪郭についてcv2.contourAreaで輪郭領域内の面積を求め、小さすぎる領域や、大きすぎる領域を除外。

+ + + +

・一面真っ黒の画像をnp.zerosで生成。

+ + + +

・各輪郭について黒一色の画像にcv2.drawContoursで輪郭を描画

+ + + +

・cv2.momentsで輪郭で囲まれた各領域の重心を求める。

+ + + +

・cv2.floodFillで先ほど輪郭を描画した画像について重心を含む領域を塗りつぶし。

+ + + +

↑領域の中の黒い点を塗りつぶしで除去

+ + + +

・塗りつぶし画像のnp.averageが大きければ塗りつぶし失敗なので、cv2.bitwise_notで反転。

+ + + +

・こうして作成された塗りつぶされた画像(輪郭の数だけ存在)と輪郭情報をペアでリスト(名前:blue_area)に格納。

+ + + +

・消しゴムの黒い部分に関しても同様にして、リスト(名前:black_area)に格納。

+ + + +![輪郭を描画した画像](./161/output1-2.png) +
輪郭を描画した画像
+ + + +
+ + + +

・道のり② MONO消しゴムを判別

+ + + +

MONO消しゴムは青から少し離れて黒の領域があるという性質を利用して消しゴムの柄の場所を特定していきます。

+ + + +・black_areaとblue_areaの要素の全ての組み合わせについて、 + ++ 2つの塗りつぶされた画像の膨張を前述のdilateで行う。 ++ cv2.bitwise_andで重なった領域を取得する ++ 2つの画像の重なった領域がnp.averageが0より大きいかを見て存在を確認し、存在すればその組み合わせを除外(一つの消しゴムの青い領域と黒い領域が接することは無いため。) ++ np.concatenateで2つの輪郭領域情報のリストを結合する。
++ cv2.minAreaRectで二つの領域に外接する最小の長方形を取得。 ++ 2つの塗りつぶされた領域の面積を前述の方法で求める。 ++ 長方形の面積を求める。 ++ 長方形の面積が塗りつぶされた面積に対し比較的大きかったり小さければその組み合わせを除外(青と黒の領域が離れている組み合わせを除外) ++ 除外されずに残った組み合わせの先ほど作成した長方形を保持。 + + + + + +![](./161/output9.png) +
青い部分の抽出された画像(blue_areaの要素の一つ)と黒い部分の抽出された画像(black_areaの要素の一つ)をOR演算で合成し、外接矩形を表示した画像。心の清い人には外接しているように見えるはず。長方形の面積が白い部分の面積より比較的大きいため、この組み合わせは正しくないと判別する。
+ + + +

・保持された全ての長方形と保持された他の全ての長方形との組み合わせしていき、一方の長方形がもう一方の長方形にほとんど含まれているとき、大きい方の長方形を除外。

+ + + +

↑この判別法は、長方形の領域を塗りつぶし、AND演算を行って重なった部分の比率がどれくらいあるかで判別しています。

+ + + +

・残った領域一つ一つについて、その領域の部分だけをマスキングして切り取る。(読み込んだ画像と長方形の中身を塗りつぶした画像のAND演算)

+ + + +

↑なお、この過程で次元の低い長方形塗りつぶしの画像はcv2.COLOR_GRAY2BGRで3次元に変換。

+ + + +![](./161/output4.png) +
画像にマスキングをかけて消しゴム一個だけ取得した画像
+ + + +

hitomatagiさんのコードにかけて特徴量マッチングし、コード中のgoodの個数がある一定水準を超えないものを除外。

+ + + +![](./161/output5.png) + + + +

特徴点を結んでいった画像

+ + + +

ここまでクリアしたものををMONO消しゴムと認定します。

+ + + +
+ + + +

・道のり③ MONO消しゴムをイタリア化

+ + + +

ここから色付けをしていきます。...とその前にもう3時近いので寝ます。おやすみなさい~

+ + + +

+ + + +

おはようございました。現在12時です。どうやら記事を書いていたのは夢落ちではないそうですね。さて...

+ + + +

・各長方形を塗りつぶした画像と読み込んだ画像の青い部分を取得した画像のANDを取る。

+ + + +

・AND演算して出来た画像の白い部分が存在するピクセルの座標と、同じ座標の読み込まれた画像の場所の色を緑に変更。(2重ループ文で一つ一つのピクセルを処理)

+ + + +

・同様にして黒の部分を赤に変更

+ + + +

完成!

+ + + +
+ + + +

・結果

+ + + +![](./161/output6.png) +
イタリアと化したMONO消しゴム
+ + + +![](./161/output10.png) +
他の画像での実行結果
+ + + +

 とても精度が悪いですね。影は仕方ないとしても、文字の部分や、ノイズは頑張ればどうにかなる部分です。でも作者は途中で力尽きました。許して下さい。

+ + + +
+ + + +

・コード

+ + + +

RTAして書いたコードなので絶対見ない方がいいですよ。呪われます。コード整理をしてなくてもOKで、呪い耐性がある方だけどうぞ。

+ + + + +```py +import cv2 +import numpy as np +import compare #引用したコードを記載した場所 + +def main(): + sample=cv2.imread("./data/monoEraser.jpg") + testImg=cv2.imread("./data/test1.jpg") + height, width, channels = testImg.shape + image_size = height * width + testImg_b= cv2.GaussianBlur(testImg, (9, 9), 2) + hsv=cv2.cvtColor(testImg_b,cv2.COLOR_BGR2HSV) + lower = np.array([110, 50, 50]) + upper = np.array([240, 255, 255]) + frame_mask = cv2.inRange(hsv, lower, upper) + + img2,blueArea = getColorArea(frame_mask, testImg) + lower = np.array([0, 0, 0]) + upper = np.array([180, 255, 50]) + frame_mask2=cv2.inRange(hsv,lower,upper) + + kernel = np.ones((5, 5), dtype=np.uint8) + + frame_mask2 = cv2.dilate(frame_mask2, kernel) + frame_mask2 = cv2.erode(frame_mask2, kernel) + + + testImg_g=cv2.cvtColor(testImg,cv2.COLOR_BGR2GRAY) + + img_canny=cv2.Canny(frame_mask2,300,400) + + + img,blackArea=getColorArea(frame_mask2, testImg) + rects=[] + for i, blue_a in enumerate(blueArea) : + for j,black_a in enumerate(blackArea): + b,rect=checkAreaRatio(testImg,blue_a,black_a) + if(b): + rects.append(rect) + deleteRects=[] + for i, rect1 in enumerate(rects): + for j,rect2 in enumerate(rects): + if(i>j): + k= checkContain(rect1,rect2,height,width) + if(k==1): + deleteRects.append(rect2) + elif(k==2): + deleteRects.append(rect1) + for rect1 in deleteRects: + rects.remove(rect1) + deleteRects=[] + for rect1 in rects: + if(not compareTrait(sample,img,rect1)): + deleteRects.append(rect1) + for rect1 in deleteRects: + rects.remove(rect1) + for rect1 in rects: + img=changeColorItaly(img,rect1) + + cv2.imshow("sample2", img) + cv2.imwrite("./data/output6.png", img) + cv2.waitKey(0) + cv2.destroyAllWindows() +def changeColorItaly(img,rect): + height, width, channels = img.shape + mask = np.zeros((height, width), dtype=np.uint8) + box = cv2.boxPoints(rect) + box = np.int0(box) + mask1 = np.copy(mask) + mask1 = cv2.drawContours(mask1, [box], 0, 255, 1) + mask1 = fillArea(mask1, int(rect[0][0] + 2), int(rect[0][1] + 2)) + mask2 = np.copy(mask) + mask2 = cv2.drawContours(mask2, [box], 0, 255, 1) + mask2 = fillArea(mask2, int(rect[0][0] + 2), int(rect[0][1] + 2)) + hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) + lower = np.array([110, 50, 50]) + upper = np.array([240, 255, 255]) + frame_mask = cv2.inRange(hsv, lower, upper) + lower = np.array([0, 0, 0]) + upper = np.array([180, 255, 50]) + frame_mask2 = cv2.inRange(hsv, lower, upper) + mask1=cv2.bitwise_and(frame_mask,mask1) + mask2=cv2.bitwise_and(frame_mask2,mask2) + mask1=cv2.cvtColor(mask1,cv2.COLOR_GRAY2BGR) + mask2=cv2.cvtColor(mask2,cv2.COLOR_GRAY2BGR) + for x in range(height): + for y in range(width): + b, g, r = mask1[x, y] + if (b, g, r) == (0, 0, 0): + continue + img[x, y] = 99, 135, 0 + for x in range(height): + for y in range(width): + b, g, r = mask2[x, y] + if (b, g, r) == (0, 0, 0): + continue + img[x, y] = 57, 41, 206 + return img + +def compareTrait(sample,img,rect): + height, width, channels = img.shape + mask = np.zeros((height, width), dtype=np.uint8) + box = cv2.boxPoints(rect) + box = np.int0(box) + mask1 = np.copy(mask) + mask1 = cv2.drawContours(mask1, [box], 0, 255, 1) + mask1=fillArea(mask1,int(rect[0][0]+2),int(rect[0][1]+2)) + + mask1=cv2.cvtColor(mask1,cv2.COLOR_GRAY2BGR) + img2=cv2.bitwise_and(img,mask1) + + return compare.compare(sample,img2) + +def checkContain(rect1,rect2,height,width):#領域の中に領域があるかチェック + mask = np.zeros((height , width ), dtype=np.uint8) + box=cv2.boxPoints(rect1) + box = np.int0(box) + mask1 = np.copy(mask) + mask1 = cv2.drawContours(mask1, [box], 0, 255, 1) + mask1=fillArea(mask1,int(rect1[0][0]+2),int(rect1[0][1]+2)) + box = cv2.boxPoints(rect2) + box = np.int0(box) + mask2 = np.copy(mask) + mask2 = cv2.drawContours(mask2, [box], 0, 255, 1) + mask2 = fillArea(mask2, int(rect2[0][0] + rect2[1][0] / 2),int( rect2[0][1] + rect2[1][1] / 2)) + mask3=cv2.bitwise_and(mask1,mask2) + contours, hierarchy = cv2.findContours(mask3, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) + + if(len(contours)<=0): + return 0 + area3 = cv2.contourArea(contours[0]) + + area1=rect1[1][0]*rect1[1][1] + area2 = rect2[1][0] * rect2[1][1] + ratio=0.9 + if(area3>area1*ratio): + return 1 + elif(area3>area2*ratio): + return 2 + else: + return 0 + +def checkAreaRatio(img,mask1,mask2): + mask1,cnt_mask1=mask1 + mask2, cnt_mask2 = mask2 + kernel = np.ones((5, 5), dtype=np.uint8) + mask4=cv2.dilate(mask1,kernel) + mask5=cv2.dilate(mask2,kernel) + mask6=cv2.bitwise_and(mask4,mask5) + + if(np.average(mask6)>0):#隣り合っている領域を除外 + return False,None + area1=cv2.contourArea(cnt_mask1) + area2=cv2.contourArea(cnt_mask2) + cnt_mask3=np.concatenate([cnt_mask1,cnt_mask2]) + + rect = cv2.minAreaRect(cnt_mask3) + area3= rect[1][0]*rect[1][1] + if (area3 > (area1 + area2) * 3 or area3<(area1 + area2) * 1.6):#比率で除外 + return False,None + #box = cv2.boxPoints(rect) + #box = np.int0(box) + #img2=np.copy(img) + #img2 = cv2.drawContours(img2, [box], 0, (0, 0, 255), 2) + + return True,rect + +def getColorArea(frame_mask, draw_img, draw=False): + ret, testImg_g2 = cv2.threshold(frame_mask, 100, 255, cv2.THRESH_BINARY) + + contours, hierarchy = cv2.findContours(testImg_g2, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) + height, width, channels = draw_img.shape + + img=draw_img + if(draw): + img = cv2.drawContours(draw_img, contours, -1, (0, 0, 255, 255), 2, cv2.LINE_AA) + cont_area=[] + + for i, contour in enumerate(contours): + area = cv2.contourArea(contour) + image_size=height*width + if area < 500: + continue + if image_size * 0.99 < area: + continue + epsilon = 0.02 * cv2.arcLength(contour, True) + approx = cv2.approxPolyDP(contour, epsilon, True) + if(draw): + cv2.drawContours(img,[approx], -1, (255, 0, 255), 2) + + mask = np.zeros((height, width), dtype=np.uint8) + cv2.drawContours(mask, [approx], -1, (255, 0, 255), 2) + M = cv2.moments(contour) + mask= fillArea(mask,int(M['m10']/M['m00']),int(M['m01']/M['m00']))#引数に重心を入れている + + + cont_area.append((mask,contour)) + + + + + return img,cont_area +def fillArea(img,startx,starty,color=(0,0,255)): + channels=0 + height=0 + width=0 + if(img.ndim==2): + channels=1 + height, width = img.shape + elif(img.ndim==3): + height, width, channels = img.shape + mask = np.zeros((height+2, width+2), dtype=np.uint8)#+2しないとエラー + if(channels==3): + pass + else: + color=255 + retval, img2, mask, rect = cv2.floodFill(img, mask, seedPoint=(startx, starty), newVal=color) + if(np.average(img2)>100):#もし塗りつぶしが多ければ + img2=cv2.bitwise_not(img2)#反転 + return img2 + +if __name__ == '__main__': + main() +``` + + + +
+ + + +

・参考・その他

+ + + +

・OpenCV 3とPython 3で特徴量マッチング(A-KAZE, KNN):

+ + + +

https://qiita.com/hitomatagi/items/caac014b7ab246faf6b1

+ + + +

・OpenCV 2.2 C++ リファレンス:

+ + + +

http://opencv.jp/opencv-2svn/cpp/index.html

+ + + +

・OpenCV-Python チュートリアル :

+ + + +

http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/index.html

+ + + +

筆者:OUCC 2DCG・AI班長 上月

+ diff --git a/src/content/blogs/161/lkhfukfhj-3.png b/src/content/blogs/161/lkhfukfhj-3.png new file mode 100644 index 0000000..eab03ef Binary files /dev/null and b/src/content/blogs/161/lkhfukfhj-3.png differ diff --git a/src/content/blogs/161/output1-2.png b/src/content/blogs/161/output1-2.png new file mode 100644 index 0000000..7b536c8 Binary files /dev/null and b/src/content/blogs/161/output1-2.png differ diff --git a/src/content/blogs/161/output10.png b/src/content/blogs/161/output10.png new file mode 100644 index 0000000..20c7e6c Binary files /dev/null and b/src/content/blogs/161/output10.png differ diff --git a/src/content/blogs/161/output4.png b/src/content/blogs/161/output4.png new file mode 100644 index 0000000..98681e5 Binary files /dev/null and b/src/content/blogs/161/output4.png differ diff --git a/src/content/blogs/161/output5.png b/src/content/blogs/161/output5.png new file mode 100644 index 0000000..0e752cc Binary files /dev/null and b/src/content/blogs/161/output5.png differ diff --git a/src/content/blogs/161/output6.png b/src/content/blogs/161/output6.png new file mode 100644 index 0000000..c99f306 Binary files /dev/null and b/src/content/blogs/161/output6.png differ diff --git a/src/content/blogs/161/output9.png b/src/content/blogs/161/output9.png new file mode 100644 index 0000000..3758b0d Binary files /dev/null and b/src/content/blogs/161/output9.png differ diff --git a/src/content/blogs/227.md b/src/content/blogs/227.md new file mode 100644 index 0000000..ece93e0 --- /dev/null +++ b/src/content/blogs/227.md @@ -0,0 +1,156 @@ +--- +title: if文をすっきりさせる +description: | + ちょっとしたプログラム記述方法を紹介しようと思います。例えば、次のようなメソッドを記述したとします。 + + private void Example0(int x) + { + if (x%2==0) { + // 処理 + } + } + このif文は必要でしょうか?こんなことを聞くからには、もちろんNoです。ただ、if文が必要ないというのは語弊があります。正確には、処理をif文で囲む必要はありません。次のメソッドは全く同じ動作をします。 +author: member +tags: [csharp, for-beginer] +--- + + +

ちょっとしたプログラム記述方法を紹介しようと思います。例えば、次のようなメソッドを記述したとします。

+ + + +```cs + private void Example0(int x) + { + if (x%2==0) { + // 処理 + } + } +``` + + + +

このif文は必要でしょうか?こんなことを聞くからには、もちろんNoです。ただ、if文が必要ないというのは語弊があります。正確には、処理をif文で囲む必要はありません。次のメソッドは全く同じ動作をします。

+ + + +```cs + private void Example1(int x) + { + if (x%2==1) { + return ; + } + + // 処理 + + } +``` + + + +

xが奇数の時、つまり偶数でないとき、return命令によってメソッド処理を終了させます。すると// 処理 の位置に達したときはxが偶数であることが確定しているので、if文による確認を行わず処理を記述することができます。

+ + + +

この記述方法のうれしいところは、鍵かっこで処理を囲む必要がなくなるところです。例では処理は1行しかありませんが、これが何十行と続くと、最後にぽつんと}が残ることになり、どの鍵かっこと対応しているのかわかりにくくなってしまいます。鍵かっこを使わないpythonのような言語であっても、インデントが右にいきすぎてしまい、プログラムが見にくくなること必至です。

+ + + +```cs + private bool Example2() + { + + if (ReturnBooleanMethod1()) { + // 処理 + if (ReturnBooleanMethod2()) { + // 処理 + if (ReturnBooleanMethod3()) { + // 処理 + if (ReturnBooleanMethod4()) { + // 処理 + if (ReturnBooleanMethod5()) { + // 処理 + return true; + } + } + } + } + } + return false; + } +``` + + + +

この記述方法の問題点は、if文の条件がわかりにくくなることです。xが偶数の時処理をしたいのに、if文の条件式は否定である「xが奇数であるか」の確認を行っています。人によっては処理の流れが追いづらいと感じたり、条件によっては否定の記述が難しい場合があります。1つ前の例では、順にメソッドの条件を満たした場合処理をし、次の確認事項を調べて・・・という流れがわかると思います。この記述方法で書いた場合は次のようになります。

+ + + +```cs + private bool Example3() + { + if (!ReturnBooleanMethod1()) { + return false; + } + // 処理 + if (!ReturnBooleanMethod2()) { + return false; + } + // 処理 + if (!ReturnBooleanMethod3()) { + return false; + } + // 処理 + if (!ReturnBooleanMethod4()) { + return false; + } + // 処理 + if (!ReturnBooleanMethod5()) { + return false; + } + // 処理 + return true; + } +``` + + + +

インデントやかっこは見やすくなりましたが、何となくどういう場合にReturnBooleanMethod4()の確認を行うのかわかりにくいですよね?少なくとも僕にはわかりにくいです。また、メソッド内の最初と最後以外でreturnによって抜けると、処理していると思っていたコードが、実はその前にreturnしていて処理していない!ふざけんな!というような事態になったりするので注意です。

+ + + +

この記述方法は、メソッドだけでなくforループからの脱出(break,continue)でも使えます。また、if ... else break のような場合にも、breakする条件を記述することで、そのあとの処理をif文で囲む必要がなくなります。また、elseが消えてますよね。次のコードはbreak文の例を紹介するためだけに書いたどうでもいい動作をするプログラムです。

+ + + +```cs + private void Example4() + { + int sum = 0; + for (int i=0;i<10;i++) { + if (i<=5) { + sum += i; + } + else { + break; + } + } + + for (int i = 0; i < 10; i++) { + if (i>5) { + break; + } + sum += i; + } + + } +``` + + + +

{}で1行とらないような記述方法をとるなら行数は変わりませんが、処理が複数ある場合は{}で1行とる人がほとんどだと思うので、そこそこ使えると思います。

+ + + +

プログラムの見やすい記述方法、書きやすい記述方法は人それぞれだと思います。自分に合った記述方法でデバッグをしやすい、ストレスのたまらないプログラムを書きましょう。

+ diff --git a/src/content/blogs/234.md b/src/content/blogs/234.md new file mode 100644 index 0000000..e67cc66 --- /dev/null +++ b/src/content/blogs/234.md @@ -0,0 +1,145 @@ +--- +title: OUCCの主な活動を振り返る +description: | + はじめに + この記事はOUCC Advent Calender 2020 の12日目の記事です。 + + 新入生へ向けてのアドベントカレンダーということで、今回はここ数年でこの クラブ が行った活動を、私の知りうる範囲で振り返りたいと思います。 +author: member +tags: [advent-calendar] +--- + + +

はじめに

+ + + +

この記事はOUCC Advent Calender 2020 の12日目の記事です。

+ + + +

新入生へ向けてのアドベントカレンダーということで、今回はここ数年でこの クラブ が行った活動を、私の知りうる範囲で振り返りたいと思います。

+ + + +

・4月

+ + + +

4月は新入生歓迎(新歓)の時期ということで、課外活動オリエンテーションで、OUCCがしていることや開発したものを展示し、毎週金曜日には部室で説明会を行いました。

+ + + +

・5月

+ + + +

5月にはいちょう祭があり、OUCCの模擬店では、唐揚げや焼き鳥を販売しました。また展示では、部員が作ったゲームを多くのお客様にプレイしていただきました。
この時期あたりで、部員やOBさんが新入生に向けて講習会を開き、講習会に興味のある新入生や部員が講習会に参加しました。(※注)春の講習会の画像は去年のものです

+ + + +- ![](./234/S__40976386.jpg) +- ![](./234/S__40984581.jpg) + + + +

・6月

+ + + +

6月には確定新歓が行われ、新入生は晴れて正式な部員となります。
去年の確定新歓では、部室でたこ焼きやお菓子を食べながら、新部員と既部員がテレビゲームやボードゲーム、雑談等をして交流しました。
また、OUCCでは2D、3DCG班や競技プログラミング班、WEB班、等があり、各部員は興味のある班活に入って班での活動も行います。

+ + + +

・7月

+ + + +

7月は下旬にテストがあるので、上旬の部会で夏休みの各予定を決め、テスト休みとなります。

+ + + +

・夏休み

+ + + +

8月上旬にテストが終わったらいよいよ夏休みです!!
私たちの部室は冷房設備がなく、夏場はサウナと化してしまうため、部員は基本在宅での作業を行います。基本的には個人個人でやりたいことをやりますが、人によっては班で活動したり、似たようなことをしたい同士で共同開発や勉強会を行います。
昨年の夏休みの主な活動としましては、KC3と 夏合宿 がありました。
また、希望者を募って夏コミにも行きます

+ + + +

・KC3

+ + + +

KC3とは、関西情報系学生団体交流会の略称で、関西の大学の情報系団体に所属する学生たちが交流を深める会です。
参加団体は大阪大学コンピュータクラブのほかに、立命館コンピュータクラブ、立命館大学情報理工学部PJ団体 RiG++、関西大学電気通信工学研究会、関西学院大学機巧堂、近畿大学電子計算機研究会、京大マイコンクラブ等があります。
去年の9月に行われたKC3では、各クラブの紹介と、各 クラブ による講習会がありました。また、最後には懇親会があり、他のクラブ の部員との交流ができます。
KC3について詳しくはこちらから

+ + + +- ![](./234/IMG_20180916_113853-1024x768.jpg) +- ![sdr](./234/IMG_20180916_190740-1024x768.jpg) + + + +

・夏合宿(開発合宿)

+ + + +

去年は夏合宿で福井に行きました!!
この合宿は開発合宿ということで、2つのチームに分かれ、待ちかね祭に向けてゲームの開発を行い、最終日には各チーム制作物を発表しました。

+ + + +- ![](./234/S__40984578.jpg) +- ![](./234/OUCCnatsugasshuku2019!_190912_0003-2-1024x768.jpg) +- ![](./234/OUCCnatsugasshuku2019!_190912_0045-2-1024x768.jpg) +- ![](./234/OUCCnatsugasshuku2019!_190912_0009-2-1024x768.jpg) +- ![](./234/S__40984580.jpg) + + + +

・10,11月

+ + + +

夏休みが終わり10月になるとまちかね祭の準備に向けて動き出します。
まちかね祭が近づいてくると、模擬店の買い出しの確認をしたり、展示するゲームの開発によるデスマーチが発生したりします。
そして、まちかね祭当日は部員が一丸となって展示・模擬店を行います。

+ + + +

・12,1月

+ + + +

この時期になると部室は冷蔵庫並の寒さになるので、部室にこたつが導入されます。部員たちは、各々の開発を進めたり、課題やテストに追われたりと思い思いのことをします。

+ + + +![](./234/fig1-1024x918.jpg) + + + +

・春休み

+ + + +

テストが終わり冬休みになると、部員はバイトをしたり、旅行に行ったり、勉強・開発したりと、それぞれ自分のやりたいことをやります。また、4回生の追いコンも開催しました。(今年は新型コロナウイルスの影響で、追いコンは3,4回生のみでの開催となりました)

+ + + +![追いコン(画像はイメージです)](./234/S__41009155-1024x768.jpg) +追いコン(画像はイメージです) + + + +

・まとめ

+ + + +

以上がOUCCのおおまかな活動内容となります。
主な活動曜日は金曜日ですが、部室にはいつでも入れるので、金曜日以外に来て作業をする人もいます。また、月に1回ある部会もオンラインでの参加が可能なので、部室に来れない人でも参加できます。
これまで見てもらった通り、このクラブは活動日を柔軟に決めることができ、他のサークルとの掛け持ちも可能です。
今回は大まかな紹介のみとなりましたが、興味のある人はOUCCのTwitter等を見れば今後の活動が分かると思います。

+ + + +

・最後に

+ + + +

このクラブに限らず、サークルや部活に入ることは、他学科の人との交流や大学生活を何かに打ち込むという点で大変良いものなので、自粛期間がおわり各サークルが新歓を始めたら、いろいろなところを見て回ることをおすすめします。

+ diff --git a/src/content/blogs/234/IMG_20180916_113853-1024x768.jpg b/src/content/blogs/234/IMG_20180916_113853-1024x768.jpg new file mode 100644 index 0000000..2882fd5 Binary files /dev/null and b/src/content/blogs/234/IMG_20180916_113853-1024x768.jpg differ diff --git a/src/content/blogs/234/IMG_20180916_190740-1024x768.jpg b/src/content/blogs/234/IMG_20180916_190740-1024x768.jpg new file mode 100644 index 0000000..d1a4f6c Binary files /dev/null and b/src/content/blogs/234/IMG_20180916_190740-1024x768.jpg differ diff --git a/src/content/blogs/234/OUCCnatsugasshuku2019!_190912_0003-2-1024x768.jpg b/src/content/blogs/234/OUCCnatsugasshuku2019!_190912_0003-2-1024x768.jpg new file mode 100644 index 0000000..c586cdd Binary files /dev/null and b/src/content/blogs/234/OUCCnatsugasshuku2019!_190912_0003-2-1024x768.jpg differ diff --git a/src/content/blogs/234/OUCCnatsugasshuku2019!_190912_0009-2-1024x768.jpg b/src/content/blogs/234/OUCCnatsugasshuku2019!_190912_0009-2-1024x768.jpg new file mode 100644 index 0000000..77c73b8 Binary files /dev/null and b/src/content/blogs/234/OUCCnatsugasshuku2019!_190912_0009-2-1024x768.jpg differ diff --git a/src/content/blogs/234/OUCCnatsugasshuku2019!_190912_0045-2-1024x768.jpg b/src/content/blogs/234/OUCCnatsugasshuku2019!_190912_0045-2-1024x768.jpg new file mode 100644 index 0000000..d24fd41 Binary files /dev/null and b/src/content/blogs/234/OUCCnatsugasshuku2019!_190912_0045-2-1024x768.jpg differ diff --git a/src/content/blogs/234/S__40976386.jpg b/src/content/blogs/234/S__40976386.jpg new file mode 100644 index 0000000..ba89084 Binary files /dev/null and b/src/content/blogs/234/S__40976386.jpg differ diff --git a/src/content/blogs/234/S__40984578.jpg b/src/content/blogs/234/S__40984578.jpg new file mode 100644 index 0000000..ecfadb6 Binary files /dev/null and b/src/content/blogs/234/S__40984578.jpg differ diff --git a/src/content/blogs/234/S__40984580.jpg b/src/content/blogs/234/S__40984580.jpg new file mode 100644 index 0000000..adda9e0 Binary files /dev/null and b/src/content/blogs/234/S__40984580.jpg differ diff --git a/src/content/blogs/234/S__40984581.jpg b/src/content/blogs/234/S__40984581.jpg new file mode 100644 index 0000000..0598dc6 Binary files /dev/null and b/src/content/blogs/234/S__40984581.jpg differ diff --git a/src/content/blogs/234/S__41009155-1024x768.jpg b/src/content/blogs/234/S__41009155-1024x768.jpg new file mode 100644 index 0000000..8131df8 Binary files /dev/null and b/src/content/blogs/234/S__41009155-1024x768.jpg differ diff --git a/src/content/blogs/234/fig1-1024x918.jpg b/src/content/blogs/234/fig1-1024x918.jpg new file mode 100644 index 0000000..1fc70a6 Binary files /dev/null and b/src/content/blogs/234/fig1-1024x918.jpg differ diff --git a/src/content/blogs/57.md b/src/content/blogs/57.md new file mode 100644 index 0000000..2d5ea2d --- /dev/null +++ b/src/content/blogs/57.md @@ -0,0 +1,22 @@ +--- +title: 大阪湾にて沈み中なう(単位) +description: | + Posted by OUCC 落単ワンチャン部員 (2018 1/22) + + 現在、大阪大学では絶賛期末シーズンに突入しております。特に私が所属する基礎工学部情報科学科はこの時期が様々な科目のテストが集中しているため、とんでもなくハードモードとなっています。 + + うちの学科は、どうもパソコンをいじっていても単位はくれないようです泣。 +author: member +tags: [] +--- + +

Posted by OUCC 落単ワンチャン部員 (2018 1/22)

+ + + +

現在、大阪大学では絶賛期末シーズンに突入しております。特に私が所属する基礎工学部情報科学科はこの時期が様々な科目のテストが集中しているため、とんでもなくハードモードとなっています。

+ + + +

うちの学科は、どうもパソコンをいじっていても単位はくれないようです泣。

+ diff --git a/src/content/blogs/69.md b/src/content/blogs/69.md new file mode 100644 index 0000000..810c8f3 --- /dev/null +++ b/src/content/blogs/69.md @@ -0,0 +1,26 @@ +--- +title: 受験生お疲れ様です! +description: | + 今日は前期試験らしい + POSTED BY 新サーバー係†兼展示係†(∵#)何故こうなった + 今日が国立大学の前期試験と言うことで、受験生の皆様はお疲れ様ですー。ええ、私は新二回なのでいよいよ後輩が入ってくるのでわくわくなのですね(大学って浪人があるので年上の後輩というのがあるわけですが)。 + + 宣伝なのですが、入学されましたら是非OUCCに見学に来てください!うちの者が新歓説明回すっぽかしたので新歓のための教室取れませんでした(^^)どうしてくれよう。後々見学会等々の情報を掲載しますのでそれまでお待ちくだされ。 +author: member +tags: [] +--- + +

今日は前期試験らしい

+ + + +

POSTED BY 新サーバー係†兼展示係†(∵#)何故こうなった

+ + + +

今日が国立大学の前期試験と言うことで、受験生の皆様はお疲れ様ですー。ええ、私は新二回なのでいよいよ後輩が入ってくるのでわくわくなのですね(大学って浪人があるので年上の後輩というのがあるわけですが)。

+ + + +

宣伝なのですが、入学されましたら是非OUCCに見学に来てください!うちの者が新歓説明回すっぽかしたので新歓のための教室取れませんでした(^^)どうしてくれよう。後々見学会等々の情報を掲載しますのでそれまでお待ちくだされ。

+ diff --git a/src/content/blogs/73.md b/src/content/blogs/73.md new file mode 100644 index 0000000..ca84817 --- /dev/null +++ b/src/content/blogs/73.md @@ -0,0 +1,30 @@ +--- +title: alert、犯罪か(JS) +description: | + Posted by OUCC 某部員 (2018 3/05) + + さて、近頃兵庫県警がJavaScriptのalertを用いたブラクラの不正プログラムで中学生を補導する、というある種センセーショナルな事件が起きた。この事件は各方面で物議を起こしているが、筆者は「積極的なITに関する啓蒙」を声を大にして言いたい。 + + そもそもJavaScriptのalertとは、webブラウザにおいてクライアントに対しメッセージを発信する機能である。そしてこれはJavaScript学習者が最初期に学ぶものである。したがって、alert機能による不正プログラムを補導レベルとみなした県警は、JavaScriptの触りの部分の知識すらままならない可能性もあったのである。 +author: member +tags: [javascript] +--- + +

Posted by OUCC 某部員 (2018 3/05)

+ + + +

さて、近頃兵庫県警がJavaScriptのalertを用いたブラクラの不正プログラムで中学生を補導する、というある種センセーショナルな事件が起きた。この事件は各方面で物議を起こしているが、筆者は「積極的なITに関する啓蒙」を声を大にして言いたい。

+ + + +

そもそもJavaScriptのalertとは、webブラウザにおいてクライアントに対しメッセージを発信する機能である。そしてこれはJavaScript学習者が最初期に学ぶものである。したがって、alert機能による不正プログラムを補導レベルとみなした県警は、JavaScriptの触りの部分の知識すらままならない可能性もあったのである。

+ + + +

今の社会、犯罪は多様化している。その中でもサイバー攻撃はIT技術への素養なくしては防ぎようのない犯罪である。このような犯罪に対応するためにも、日本の安全を守る警察の方にはよりITを学ぶ機会を設けてもらいたいものだ。

+ + + +

(駄文失礼しました、今回の件を知ってあまりにも衝撃だったため書かせてもらいました)

+ diff --git a/src/content/blogs/76.md b/src/content/blogs/76.md new file mode 100644 index 0000000..15be35f --- /dev/null +++ b/src/content/blogs/76.md @@ -0,0 +1,32 @@ +--- +title: ご入学おめでとうございます! +description: | + Posted by OUCC 元サーバ係 (2019 3/9) + + 大阪大学に合格された新入生の皆さん、おめでとうございます!😄 + + 大阪大学コンピュータクラブは毎週火曜日と金曜日をメインに、18時から活動しています🌸 + + このサイトは我々の活動の様子を書いていきますので、部活の雰囲気を掴む目安としてみてください! +author: member +tags: [] +--- + +

Posted by OUCC 元サーバ係 (2019 3/9)

+ + + +

大阪大学に合格された新入生の皆さん、おめでとうございます!😄

+ + + +

大阪大学コンピュータクラブは毎週火曜日と金曜日をメインに、18時から活動しています🌸

+ + + +

このサイトは我々の活動の様子を書いていきますので、部活の雰囲気を掴む目安としてみてください!

+ + + +

ちなみに私、元サーバ係はLinuxやVR、webアプリ開発を部内で専門としていて、このwebサイトもサーバを一から構築して運営しているので興味があれば是非お声かけください!

+ diff --git a/src/content/blogs/79.md b/src/content/blogs/79.md new file mode 100644 index 0000000..d56124d --- /dev/null +++ b/src/content/blogs/79.md @@ -0,0 +1,30 @@ +--- +title: 講習会を開きます! +description: | + Posted by OUCC 元サーバ係 (2019 3/17) + + さて、タイトル通りOUCCで、部では恒例行事となっている「講習会」を開かせてもらいます! + + 講習会とは、部員が自身の得意とする分野(競プロだったり開発だったり)の講習を部員に対して開くというものです。 +author: member +tags: [] +--- + +

Posted by OUCC 元サーバ係 (2019 3/17)

+ + + +

さて、タイトル通りOUCCで、部では恒例行事となっている「講習会」を開かせてもらいます!

+ + + +

講習会とは、部員が自身の得意とする分野(競プロだったり開発だったり)の講習を部員に対して開くというものです。

+ + + +

ちなみに昨年は「Unity 」「JavaScript」「WEB」「音楽」「C#」など様々な講習が開かれましたが、今年は「JavaScript」「Pythonなどの今熱いプログラミング言語をはじめ、部員の個性全開の講習が開かれることが決定しました!

+ + + +

この機会にプログラミングを始めたい、仲間が欲しいという人はぜひご参加ください!(部の場所は アクセスに記載しております!)

+ diff --git a/src/content/blogs/82.md b/src/content/blogs/82.md new file mode 100644 index 0000000..2c25d70 --- /dev/null +++ b/src/content/blogs/82.md @@ -0,0 +1,25 @@ +--- +title: 部室カメラ復活 +description: | + 部室カメラが1年ぶりに復活! + Posted by 旧会計監査 (2019/03/22) + 大阪大学の入学式まで残り2週間となりました. 皆様はこの春休み, いかがお過ごしだったでしょうか? + + さて, 私たちの所属するOUCCでは, 部員が現在部室に居るかどうかを確認するためのシステム「部室カメラ」を導入しています. + + しかし, 昨年2018年のある日, かくがくしかじかの理由によりそのシステムが使えなくなるという事態になっていました. + + そのシステムが本日, 部員有志により復活することができました! +author: member +tags: [] +--- + +

部室カメラが1年ぶりに復活!

+

Posted by 旧会計監査 (2019/03/22)

+

大阪大学の入学式まで残り2週間となりました. 皆様はこの春休み, いかがお過ごしだったでしょうか?

+

さて, 私たちの所属するOUCCでは, 部員が現在部室に居るかどうかを確認するためのシステム「部室カメラ」を導入しています.

+

しかし, 昨年2018年のある日, かくがくしかじかの理由によりそのシステムが使えなくなるという事態になっていました.

+

そのシステムが本日, 部員有志により復活することができました!

+

このように, OUCCは知識0の状態から実際にシステムを運用するスキルを得ることができます. 興味のある方は, ぜひご連絡ください!

+

...私?この記事を書いているからってことは相当な実力者でしょうねって?私はそこまでの技術を持ってはいないので, 今回の有志のような活動はできませんね...

+

代わりにいいことを知ってるのでお教えしまうわなにをするやm(文章はここで途切れている)

diff --git a/src/content/blogs/90.md b/src/content/blogs/90.md new file mode 100644 index 0000000..09f2844 --- /dev/null +++ b/src/content/blogs/90.md @@ -0,0 +1,31 @@ +--- +title: サーオリ開催! +description: | + Posted by 旧サーバ管理 (2019/04/06) + 本日、サークルオリエンテーション、通称サーオリが大阪大学で開催されました。 + + サーオリとは、大学内の各サークル・部活が新入生に対して活動の紹介や新歓を行う春の恒例行事です! + + ちなみに我がOUCCでは、なんと手違いにより部室をとれないというびっくりするような事態が起きたため、部に関する説明は部室にて行うことになっております汗。 +author: member +tags: [] +--- + +

Posted by 旧サーバ管理 (2019/04/06)

+ + + +

本日、サークルオリエンテーション、通称サーオリが大阪大学で開催されました。

+ + + +

サーオリとは、大学内の各サークル・部活が新入生に対して活動の紹介や新歓を行う春の恒例行事です!

+ + + +

ちなみに我がOUCCでは、なんと手違いにより部室をとれないというびっくりするような事態が起きたため、部に関する説明は部室にて行うことになっております汗。

+ + + +

説明会に参加してもらえれば、OUCCの雰囲気を理解してもらえると思うので、アクセスなどを参考にして、是非ご参加ください!!

+ diff --git a/src/content/blogs/93.md b/src/content/blogs/93.md new file mode 100644 index 0000000..ee81113 --- /dev/null +++ b/src/content/blogs/93.md @@ -0,0 +1,28 @@ +--- +title: 激動の一週間を終えて +description: | + Posted By OUCC 旧サーバ管理 (2019/04/13) + + さて、やっと一週間が終わりました。新しいセメスターになり、久しぶりの講義に苦労していましたが、何とか乗り越えることが出来たという感じです汗。昨日は多くの新入生が見学に来て、説明会などを行いました。 +author: member +tags: [] +--- + +

Posted By OUCC 旧サーバ管理 (2019/04/13)

+ + + +

さて、やっと一週間が終わりました。新しいセメスターになり、久しぶりの講義に苦労していましたが、何とか乗り越えることが出来たという感じです汗。昨日は多くの新入生が見学に来て、説明会などを行いました。

+ + + +

さて、本日は「OUCC火曜会」(火曜日に集まるメンバー)で集まり、たこ焼きパーティを開きました。とは言っても、タコは高くて手が出しづらいため代わりにウインナーを使いましたが(-_-;)

+ + + +

このように、OUCCの部員は部室を自由に使うことができるため、集まって宴会を開いたりすることができるのです!

+ + + +

次には、新歓でも新入生にも振るう予定ですので、ぜひ部室にお越しください!

+ diff --git a/src/content/blogs/98.md b/src/content/blogs/98.md new file mode 100644 index 0000000..a7b6bf0 --- /dev/null +++ b/src/content/blogs/98.md @@ -0,0 +1,34 @@ +--- +title: ドメインの更新 +description: | + Posted By OUCC サーバ管理(2019/04/17) + + 本日、OUCC BLOGはwebの仕様を変更しました! + + これまでのOUCC BLOGは「https://oucc.org/blog/」でしたが、今度からは「https://blog.oucc.org/」になります! + + 変更した理由は、別のサービスであることを強調する・管理体制の観点からこの変更に至りました。 + + 今後ともOUCC BLOGをよろしくお願いします。 +author: member +tags: [] +--- + +

Posted By OUCC サーバ管理(2019/04/17)

+ + + +

本日、OUCC BLOGはwebの仕様を変更しました!

+ + + +

これまでのOUCC BLOGは「https://oucc.org/blog/」でしたが、今度からは「https://blog.oucc.org/」になります!

+ + + +

変更した理由は、別のサービスであることを強調する・管理体制の観点からこの変更に至りました。

+ + + +

今後ともOUCC BLOGをよろしくお願いします。

+ diff --git a/src/content/tags/javascript.json b/src/content/tags/javascript.json new file mode 100644 index 0000000..8ac873a --- /dev/null +++ b/src/content/tags/javascript.json @@ -0,0 +1,3 @@ +{ + "name": "JavaScript" +} diff --git a/src/content/tags/open-cv.json b/src/content/tags/open-cv.json new file mode 100644 index 0000000..daab72a --- /dev/null +++ b/src/content/tags/open-cv.json @@ -0,0 +1,3 @@ +{ + "name": "OpenCV" +}