C#で自作クラスを比較する方法

C#で自作クラスを比較したいと思うことがよくあるので自分用にメモしておきます。
もっと深い理解をしたい方は各自ググってください。

使いたくなるシチュエーション

priority_queueに入れたくなった時とか。

何をすればいいのか

自作クラスにIComparableインターフェースを実装する。
CompareTo関数を定義する。この返り値で大小の比較を定義している。
比較対象(other)よりも小さい場合は負の値を、大きい場合は正の値を、同値の場合は0を返せばよい。

ソースコード(C#)

MyDataという名前の自作クラスを作るとします。
hikakuを比較する際の基準とします。
dataは一緒に入れておきたいデータ(何でもいい)とします。
CompareTo関数では、現在のインスタンスが比較対象(other)よりも小さい場合は負の値を、大きい場合は正の値を、同値の場合は0を返すようにします。

class MyData:IComparable<MyData>
{
    public long data, hikaku;
    public MyData(long data, long hikaku)
    {
        this.data = data;
        this.place = hikaku;
    }

    public int CompareTo(MyData other)
    {
        return hikaku.CompareTo(other.hikaku);
    }
}

参考サイト

IComparable.CompareTo メソッド (Object) (System)

自作クラスの配列やコレクションでSortやBinarySearchができるようにする: .NET Tips: C#, VB.NET

進撃の巨人 IN THE DOME -兵士たちの星空- に行ってきた

進撃の巨人プラネタリウム版が上映中ということで、行ってきました。

絵柄はPVの通り、3G感のあるタッチ。 プラネタリウムで上映ということもあり、360度見渡せます (まあ大体正面を見るんですけど)。
上映時間は20分。

場面としては、

  1. 巨人出現
  2. エレン巨人が岩を運ぶ
  3. エレンvs鎧の巨人

の3本立てです。 公開時期が中途半端だなー、と思っていたら、アニメの放映タイミングと合わせるためだったんですね。 行く方はアニメ2期まで見ておきましょう。

トーリー的には、特に新しいことはありません。
アニメの場面をプラネタリウム用にアレンジしたと考えるとよいです。
星についてのお話も(申し訳程度にしか)ありません。

開始前にアニゲーイレブンのCMが入ります。
よく番組内でCMを流していますが、相互に客を送り合う戦略なんでしょうか。
客層としてはかぶっているので戦略としてはいいのかもしれません。
私はCMに釣られて行きました。

入場時にもらえるパンフレット的なものが、リアル脱出ゲームになっています。
私は解けていません…。

まとめ

プラネタリウム進撃の巨人を見るとどうなるのか、が気になるなら行ってみてもいいかと。

攻殻機動隊のVRを体験してきた

Production I.Gのオフィシャルストアが渋谷にあるという情報を (今更)入手したので行ってきました。 ig-store.jp

お店自体はよくある感じ。
Production I.G系列のアニメ作品のグッズがいろいろあります。

特徴的なのがこれ。

www.sign.site

600円で攻殻機動隊のVRが体験できるということでやってみました。
15分間600円です。
毎時0、20、40分スタートの整理券をショップで購入します。
同時に複数人が体験することはできないみたいです。設備が1つしか見当たらなかったので当然と言えば当然。
私が行ったときには枠がすべて空いていました。

スマホ(Galaxyでした)を装着したゴーグルと、ヘッドホンを装着して、 TELEPODという半球状の椅子に座って体験します。

360度回れるうえ、映像に対応して振動します。面白い。
最近のスマホはこんな映像表現ができるんですね、という感想です。

強いて言えば、よく見ると画面のドットを感じたのが難点?(まあそれほど気になりませんが)
あと、見ているうちに3D酔いしました。弱い方は気を付けて。

まとめ

VRは普通に見られる代物になっていました!

キズナアイのドット絵を描いた

キズナアイのドット絵を描いてpixivに上げました。
例によってポケモンGBA風です。

カチューシャや髪のメッシュの微調整が今回のポイントでした。

【キズナアイ】「キズナアイ ドット絵」イラスト/yu3mars [pixiv]

YAPC::Kansai 2017 OSAKAにPerl未経験だけど行ってきた

先日開催されたYAPC::Kansai 2017 OSAKAに参加しました。

yapcjapan.org

YAPCはYet Another Perl Conferenceの略…なのですが、Perlを触ったことのない私でも全く問題なく楽しむことが出来ました。

トークYAPCということもあり、Perlが絡んだ話が多い、 といいつつ、Perlと関係ないWebの話も同じくらい多かったかな、という印象です。 (本当にPerlと関係ない話でもいいのか……)

話を聞いているとちゃんとISUCONやりたくなってきました……

IT系のカンファレンスが好きな人なら、 Perl触ったことないよ、とビビらずに参加してみるといいのではないでしょうか。 (これは数年前の自分へのメッセージです)

IRroid 恋の有効フロンティア(恋フロ) 用株価配信プログラムを作った

今日のテーマ

IRroid 恋の有効フロンティア(恋フロ) というスマホゲームに最適化した株価配信プログラムを作りました。

ソースコードGitHubで公開しています。
手元で試してみたい、カスタマイズしてみたい、という方は、readmeを参考にして動かしてみてください。

github.com

こちらで試験公開中です。
当面は運用を続ける予定ですが、予告なく終了する可能性があります。
あらかじめご了承ください。

IRroid 恋の有効フロンティア(恋フロ) とは

koifro.com

金融情報ベンダーのQUICKが運営する、 株式投資シミュレーションゲーム
やたらとバグが多い。
投資対象の企業は擬人化されていてかわいいです。

ゲーム内株価は、20分前の株価が反映され、5分ごとに更新されます。
もちろん現実ではリアルタイム株価を取得可能です。
あとは、わかりますね……?

プログラムでやっていること

config.rb でデータの保存先を指定します。
irroid_init.rb で株価を取得する銘柄を指定します。
irroid.rb を定期的に実行し、プログラム実行時点での株価を取得します。

取得した株価データはcsv形式で保存しています。
付属のhtmlを用いると、csvを表形式でブラウザから確認することができます。
表の描画には、csv2tableライブラリを用いています。

こんな感じで見ることができます。
f:id:yu3mars:20170207235825p:plain

実運用では、Linuxサーバー上でcronを使って定期実行しています。
irroid_init.rb を前場開始前に1回、 irroid.rb を取引時間中5分に1回実行しています。

使ってみた結果

週間ランキング上位常連になりました!!!
1周年記念大規模リニューアルの結果金持ちに辛い仕様になったので辞めました。

終わりに

恋フロプレーヤーの皆様、よければ使ってみてください。
エンジニアの皆様、プルリク歓迎します。
投資家の皆様、本当の株取引には役に立たないと思います。
それはそうと、IRroidの本が出ているそうです。

Amazonアソシエイト・プログラムに参加申請してみた

先日、Amazonアソシエイト・プログラムに参加申請してみました。
当サイトが承認されるまでの流れを、簡単にメモしておきます。

申請の流れ

利用するサイトを準備する

まずは、Amazonアソシエイト・プログラムを使うホームページ・ブログを用意します。
今回はこのブログで申請しました。
ちなみに投稿時点での当ブログの状況はこんな感じです。
開設からの日数: 約4か月
投稿数: 17
アクセス数: 月1000

Amazonに申請する

次にこちらからアカウントを作成します。
Amazonにログインしていると、その情報を勝手に設定してくれるようです。
今回はいつもAmazonで使っているアドレスを使って設定しました。
基本的に、聞かれた質問に素直に答えていけばいい、はずです。
サイトでどのようにAmazonアソシエイト・プログラムを使う予定か、という質問がありますが、 記述例と同レベルの小学生並みの回答をしました。

affiliate.amazon.co.jp

申請から3日後、承認されたとのメールが届きました。
早いですね。

利用していることを宣言する

承認されたら、利用規約に書いてあるように、Amazonアソシエイト・プログラムを利用していることをサイトのどこかに明記する必要があります。
Amazon アソシエイト(アフィリエイト)
というわけで、宣言してみます。

当サイト(yu3mars' diary)は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。

Amazon.co.jpアソシエイト、とだけ書いておいても大丈夫みたいですね。

使う

あとは、実際に自分のサイトで使うだけです。

実際に貼ってみた

こんな感じです。