Railsはちょっとお休みしてRubyを学んでいこう!

    PAYDAY2 Blacklist Assist

    最近更新中のPAYDAY2のBlacklist MODの補助ツール
    ※特に理由が無い場合は最新バージョンを使用してください。


    ━━━━━━━━━━━━━━━━━━━━━━━━━━━

    Rails難しくてあきたとかじゃな・・・ちょっとね。

    やはりRailsを学ぶにはRubyをおさえなくては!!(Rubyの本読んだだけで結局Rubyのプログラム書いてなかった)

    ということで、昔買った「Javaゲームプログラミングアルゴリズム」を引っ張り出してきた。

    中学生のころにこの本を買ってもらったものの、Javaのよく言われる「おまじない」に納得いかない、意味が分からなくて投げたことを思い出した。

    なのになぜC#をわりかしすんなり呑み込めたのだろうか・・・謎である。

    今思えばC#もおまじない系だと思うのだが・・・なぜか、そしていまJavaの本を読むとなぜ分からなかったのか分からない・・。

    何はともあれ、この本の最初に出てくるレースゲームもどきをRubyで書いてみた。

    一応できたものの、うーん。

    170408_Race1.png

    思っていたものと違う。

    そもそも、Rubyで書くべきではなかった。(今更)

    どうしても入力待ちが発生してしまう(スレッドはあきらめた)

    入力待ちになるため、考える時間がいくらでもあり、まー死なない。

    次はリアルタイム性の要求されない、ターン制のものを作ろう!

    初めてのRuby書いた学び!


    ・-- ++は使えない! += -=を使おう!
    ・偶数奇数の判定は % 2よりも even?を使うといいぽい!?(型の問題なのかな?%2だとうまくいかなかった)
    ・インスタンスメソッドとクラスメソッドの違いがよくわからないー


    一応ソースコードもあるよ。
    https://bitbucket.org/rinjugatla/race
    スポンサーサイト

    考えたことがあたってるとちょっとうれしくなるよね

    PAYDAY2 Blacklist Assist

    最近更新中のPAYDAY2のBlacklist MODの補助ツール
    ※特に理由が無い場合は最新バージョンを使用してください。


    ━━━━━━━━━━━━━━━━━━━━━━━━━━━

    ちょうど一年前くらいにとある理由でプログラムを書くことになった。

    ・読み込むデータは用意されている
    ・解析手法も用意されている
    ・結果の見せ方も大体既存の参考資料がある

    ・使用言語は自由
    ・とりあえず動けばいいらしい

    というゆるい開発だったので、これまでの趣味の延長で作り始めた。

    やはりGUIはあったほうが便利だろうということ、グラフや表で結果を示したかったこともあり、言語はC#を選んだ。
    (というより割とまともに扱えるものがC#以外にな・・・)

    読み込むデータは大体以下のようになっていた

    data.csv
    #ヘッダー開始(ない場合もあり、ない場合はヘッダー終わりもなし)
    #ヘッダー終わり
    日時,データ1-1,データ2-1,...(複数列)
    日時,データ1-2,データ2-2,...
    日時,データ1-3,データ2-3,...
    以下数千から数百万行

    ・解析手法でのちにデータを消すことが分かっている
    ・とりあえず動けばいいらしい

    ということから、今までの経験から得た技術のListを用いてデータを格納していることにした。

    Step0
    List1-1(データ1-1を格納)
    List1-2(データ1-2)
    List1-3(データ1-3)
    List1-4(データ1-4)
    List1-5(データ1-5)

    と順番に格納していくわけである。(データ2-は表記省略)

    解析する間に

    Step1
    List1-1(データ1-1)
    List1-2(データ1-2)
    List1-3(データ1-3)

    List1-4(データ1-5)

    Step1
    List1-1(データ1-1)

    List1-2(データ1-3)

    List1-3(データ1-5)

    と歯抜けになっていく。

    Forで回していたと思うので、ここはList.RemoveAt(Int32)でデータを抜いていった。

    しかし、遅い、遅い、待てども待てども終わらない。何が悪い?

    既存技術の組み合わせということがあって、同様の処理をするプログラムがフリーで公開されている。
    それらを用いると時間がかかるものでも1分程度、自作のものは1時間以上かかる。

    明らかにおかしい!
    いろいろな場所にブレークポイントを設置した結果、上記の箇所が原因であると特定された。
    (ここまでに一通り作ろうと思っていた機能をすべて盛り込み済みで、自分の開発した中では最大規模のプログラムになっており、特定作業も大変であった)

    どうやら、要素を削除するたびに、要素を前に詰めているようだった。
    言葉にすると伝わりづらいだろうか、昔作った画像が出てきたので参考に

    270407_prog.png

    数百万*数列あるデータに対して、列ごとにデータを一つ消すたびに後ろからデータを詰めていたらしく、計算量は莫大な量になっていたということである。

    今までは扱うデータ量が多くとも数千程度だったので、詰め詰めしても大して気にならなかったようだが、今回は数百万*十数と今までとは全く違う規模のデータ量なので問題が浮き彫りになった。

    消すとダメ・・・ダメ・・・なら飛ばせばいいじゃない!とひらめいた。
    お風呂に入っていた時だったような気がする。ぽけーっとしてるとひらめくことあるよね。

    270407_prog2.png

    要素を作成する際に、前後関係と要素データを合わせて持つようにする。

    Step0
    List1-1(データ1-1を格納、前なし、後1-2)
    List1-2(データ1-2、前1-1、後1-3)
    List1-3(データ1-3、前1-2、後1-4)
    List1-4(データ1-4、前1-3、後1-5)
    List1-5(データ1-5、前1-4、後なし)

    といった具合である。
    すると

    Step1
    List1-1(データ1-1を格納、前なし、後1-2)
    List1-2(データ1-1、前1-1、後1-3)
    List1-3(データ1-2、前1-1、後1-5)
    List1-4(データ1-4、前なし、後なし)
    List1-5(データ1-5、前1-3、後なし)

    といった具合になり、詰め詰めしなくともすむ。
    これは!すごいのでは!

    と、独自でクラスを作り始めたのだが、途中で「もしかして、自分が思いつくのなら既にあるのでは?」と考え、検索してみると

    「連結リスト(片方向リスト、双方向リスト)」

    というものが、これにあたるようで、C#にももちろん標準で実装されていると分かった。

    こちらを利用したところ、ほかのフリーソフト並みの爆速で処理が終わるようになった。
    今度のボトルネックはストレージからの読み込み速度だが、ここはいまだに難儀している。

    何はともあれ、

    「何が悪い?」

    から

    「消すとダメ・・・ダメ・・・なら飛ばせばいいじゃない!とひらめいた。」

    「もしかして、自分が思いつくのなら既にあるのでは?」


    やっとタイトルである、「考えたことがあたってるとちょっとうれしくなるよね」

    先人たちも同じところで躓いて、同じことを考えていたと分かるとうれしい!

    もちろん、そんなところで時間を(完全ではないにせよ)無駄にしないためにも基礎知識をきちんとつけておくべきではある。

    でも、うれしいよね。

    と、なぜ今更こういうことを書いたかというと、先ほども同じ経験をしたからである。

    ・ユーザ登録型
    ・ユーザごとに個人ページを持ち、ブログのようなことができる

    といったものをRailsの勉強で作ろうとしてるのだが、何分データベースもまともに触ったことがないので、データベースをどう作ればいいのかとここ数日悩んでいた。

    初期の想像

    Table ユーザ情報
    ID Name Password など
    1 Taro ababa
    2 Hana gegeg

    Table Taroさんのブログ
    記事ID Title Text など
    1 te fefef
    2 fdf fefe

    Table Hanaさんのブログ
    記事ID Title Text など
    1 te fefef
    2 fdf fefe

    これではユーザが増えるごとにテーブルが増える・・・テーブルが増えるとパフォーマンスが悪いと、ではどうすれば・・・。

    と先ほど思いついたのが

    Table ユーザ情報
    ID Name Password など
    1 Taro ababa
    2 Hana gegeg

    Table ブログ情報
    記事ID 投稿者ID Title Text など
    1 1 fefe cdcd
    2 2 df cece

    ブログ記事情報を一つのテーブルにまとめ、中に投稿者IDを作ればいいのだ!なるほど。

    これが正解らしい。

    と、いうことで、ふと前の経験を思い出したわけである。

    Ruby on Rails 初心者の覚書

    PAYDAY2 Blacklist Assist

    最近更新中のPAYDAY2のBlacklist MODの補助ツール
    ※特に理由が無い場合は最新バージョンを使用してください。


    ━━━━━━━━━━━━━━━━━━━━━━━━━━━

    詰まったところやらをつらつら書き連ねていこうかなな記事
    間違ってるかも

    アプリケーションの作成


    rails new アプリケーション名

    例:rails new hoge


    コントロールの作成


    rails g controller コントロール名 生成メソッド

    例:rails g controller top index


    上記でコントロールを作ると
    hoge/controllers/top_controller.rb
    hoge/views/top/index.html.erb
    このままだとルートが存在しない(route.rbにroot 'tops#index'を追記)としてエラーが出るため、ファイル・フォルダ名をそれぞれ変更する
    (手違いで複数形でファイルが生成されなかったのか、なにか作るときの命名規則に従っていなかったのか・・・?)
    hoge/controllers/top_controller.rb -> hoge/controllers/tops_controller.rb
    hoge/views/top/index.html.erb -> hoge/views/tops/index.html.erb

    そもそも複数形の名称でコントロールを作るのが良いようで


    ルートの指定


    hoge/config/ routes.rb
    root 'コントロール名(複数形)#index'

    例:root 'tops#index'


    [覚書]Windows10でWin+←(→)でタスクビューモードが暴発する場合の対策

    PAYDAY2 Blacklist Assist

    最近更新中のPAYDAY2のBlacklist MODの補助ツール
    ※特に理由が無い場合は最新バージョンを使用してください。


    ━━━━━━━━━━━━━━━━━━━━━━━━━━━

    日記は下のほうに書きまして、とりあえず方法だけ先に書きます。

    ①スタートメニューの検索ボックスに「スナップ」を入力

    ②「ウィンドをスナップしたときに横に配置できるものを表示する」を選択

    ③上記項目をオフに変更する

    終わり

    ーーーーーーーーーー
    Windows10OSが安かったので買ってみた。

    Windows7からの無料アップグレード期間にどうしようかなーと悩んでいて、気が付いたら締め切り数時間前、慌ててダウンロードするも全くダウンロードが進まず結局断念。

    Vistaや8.1での事故もあったのでOSの更新には奥手になっていたということもあって・・・いや、間に合わなかっただけですね。

    半年か年に1度くらいでOSドライブは初期化状態に戻しているので、バックアップや初期環境の整備は慣れたものです。

    OS入れ直しのついでに、つい先日発表されたVisual Studio 2017の導入と、同時に購入したMSIの1070も導入しました。

    購入した1070はこちら。
    GTX 1070 GAMING Z 8G [PCIExp 8GB]
    http://kakaku.com/item/K0000905377/

    NTT-X Storeで深夜特売にて46,000位になっていたので勢い余ってポチってしまいました。
    (てっきり1080tiが出て安くなっている状態からさらに値引きされていると勘違い・・・もしti発表後に購入額以上に値下がりしたら・・・さすがにそこまで価格変動はないはず)

    なぜか、XよりもZのほうが安く売られていたのだが、Zのほうが性能がいい・・らしい。
    なぜ安かったのかは在庫の都合?

    MSIのGeForce GTX 10シリーズ搭載カード「Z」を試す - GeForce GTX 1080で1.9GHz台の高クロックモデル
    http://news.mynavi.jp/articles/2016/09/07/msi/

    ところで、Win10にして2日目ですが、よかった、わるかった点をまとめてみますと次の通りです。

    〇良い
    ・ファイル転送時のグラフかっこいい(結局かかる時間やらは大差ないはずなのでかっこいいだけ)
    ・スタートメニュや設定画面の検索がかなり広範囲に検索してくれるようパワーアップ!(設定の場所がたどり着けなさそうなところにあっても検索でなんとかなる、普通にたどってたどり着けない仕様なのは問題だと思うが・・・)
    ・エクスプローラの動作が全体的に高速になったように思う(体感、グラボも同時に変えているがおそらくOSのおかげ)

    〇悪い
    ・スタートボタンの右のタイル邪魔(Classic Shellで対処済み)
    ・Win+←(→)のショートカットでタスクビューモードが暴発する(本記事で対処済み)
    ・一部アプリケーションの互換性がない(プリンタのドライバはいらない・・どうしよう)

    書くことがないよ・・・.

    PAYDAY2 Blacklist Assist

    最近更新中のPAYDAY2のBlacklist MODの補助ツール
    ※特に理由が無い場合は最新バージョンを使用してください。


    ━━━━━━━━━━━━━━━━━━━━━━━━━━━

    とりあえず広告消しに作りたいものとやりたいことなど.

    作りたいもの忘備録
    ・TF2 Server利用者記録プラグイン(データベースとの連携)
    ・TF2 Jump SRプラグイン(すでにあるものを動くようにする?)
    ・TF2 Simple timerプラグイン(AIさんが作っていたような簡単なもの)
    ・ARK MOD 同一アイテムを一括ぽいすて

    やりたいこと
    ・TF2 Jumpサーバで何かイベント
    ・TF2 Dodgeballサーバ再構築
    ・TF2 Jumpbot関係
    ・raspberry piで何か
    ・インターネットを介す通信を使ったプログラム(C#)