全自動厳選機とかいう全人類の夢
椎名心美です
3ヶ月もブログを放置していたようだ、ORAS発売おめでとうございます
最近考えてること
まずはこちら
話題になったのかよく分からんのですが、全自動で色違い捕獲、タマゴ孵化をできるシステムらしい
前半の方のハードウェア仕様について見てみると、どうやらArduino Micro をMasterにして動かしている模様 (にわかがバレるのでこれくらいの説明に留めておこう)
で、
こんな感じでORAS用の全自動固定シンボル厳選機を作ればいいんじゃないの
という意見
って書くと俺がこれから作るみたいになってくるんですが今回はちょっと自分の力では厳しい
あくまでそういう方法があるという紹介ってことで、技術のある人はやってみては?(というかやってくださいなんでもしますから)
とは言うもののArduinoは研究室でも使ってる人居て多少興味あったのでにわかなりに考えてみる
動画主について調べてみるとこれの他により汎用的な3DS外部操作システムも作っていて、それも含めてGithubにソースコードと簡単なマニュアルを上げているのでこれを見てマネして作るのが一つの方法、
大体同じだと思うけど一から自分で作るとするなら
入力
3DSの画面をリアルタイムで取り込み。偽トロという既成品があるのでそれを買ってしまった方がよさそう
↓
システム(Arduino+PC?)
画像処理ライブラリ(OpenCVとか)を用いて取り込んだ画面をパターン認識、現在の状態と目標とする操作を決定
↓
出力
ボタンの配線と短絡した素子の電圧をArduinoから操作
Arduinoのデジタル信号の出力は±5Vだが3DSのロジックは1.8Vで動いているらしいのでレベル変換?を挟む必要がある
こんな感じだと思うので、夏休みの自由研究にちょうどいいんじゃないでしょうか
できたらぼくにください
-------------------------------------------------
P.S. そろそろいい加減アレ更新しないとな…
ランカーオブザ334 現在の課題点とか
なんでか分からないが334ランカーのフォロワーが増えてきたので色々考えないといけないことが増えた
1. 規制
ちょっと調べた感じ、現在の投稿規制は3時間の時間ターム(何て言えばいいんだ、分からん)の中で300ツイートすると発動するらしい
最近の334参加者はおよそ一日800人で、全員がリザルトとランクを呼び出したとすると全てに反応するためには1600回のツイートが必要になる
→ダメみたいですね(野獣声)
そこで、リザルトについてはGoogleスプレッドシートで公開し、それによってツイート数を減らすことを考えた。それでも規制は免れないが、規制によってリプライが返ってこなくなっても、最低限当日の結果だけは確認することができるようになる。
それと、タームの区切りを調整して2ターム分ツイートするとか。たとえば3:40に3時間のタームが終了するように調整しておけば、ちょうど規制されたころにすぐ規制が解除されてまた300ツイートできるようになる。何も試していないのでできるかは分からないが…
2. ネットワークエラー
よくわからない。User stream にてものすごい勢いでリプライを投稿していると起こる。大したエラーではなさそうなのでプログラムを再起動すれば直るレベルのものだが、無人で稼働させたいのでプログラムを再起動しにいかないといけないのはこマる。
→対象のエラーを特定してcatchし、自動的に再起動するようにしてみた。
3. デバッグがきつい
天才プログラマーではないので、新機能を追加したりするためにソースコードを書き換えたときには何回かテストをしたい。
しかし、本番環境に近いテストを行える環境がない。
なんといっても
サーバーからUser streamを介して雪崩のように同じ文字列のツイートが降ってくる環境も、鬼のようにリプライが飛んでくる環境も容易には用意できない。(ダジャレ)
じゃあ334本番に、裏で新プログラムも一緒に動かしておくか、となるわけだがリプライ機能があって邪魔になってしまうのでダメ。
性質的に一発勝負なので、まともに検証してない新プログラムをぶっつけ本番で動かすのはもちろんダメ(ダメだゾ、絶対)
現状どこかしらテストできない部分が出てきてしまうので、テストできなかったその部分のエラーによって本番でコケる可能性を排除できない。
まあこれはたぶん技量の問題で、Visual Studioのテスト機能を使えば頑張れると思う。
今は(他のプロジェクトで)単体テストしか使っていないが…単体テストを使うにあたっては、今はMainメソッドが肥大化しているのでそれをメソッド単位に細かく切り分けて単体テストがしやすいようにする必要があるとは思う。
ン~キツスギィ
4. バランス調整とか
何位をとると何点もらえるとか、何日前の点数は何倍に縮小されるとか、説明書にある通り世界ゴルフからそのまま引っ張ってきたわけだけれども
ほとんどの人は平均ポイントが1を下回るし、なんとなくだが毎日参加すると逆に損するルールな気がする。
まあアレだ。大会に出るために前後何日間かを犠牲にしなければいけないゴルフと、毎日夜更かしさえすれば簡単に参加できる334を一緒に考えてしまったからそりゃそうだ。
かといってどうするかというわけだが
とりあえず集計期間(今は104日)は一ヶ月くらいに縮小すると思う。データベース容量と計算速度も有利になるし。
しっかしこういう得点計算のルール考えてる人ってどういう分野の人なんだろ やっぱり数学徒なのかな
5. Webデザイン
Googleサイトってなんだよ。守るガルーラ並に見たことないぞ。
デザインセンスのなさは自覚してるのでシャレオツなものは作れない(というかテンプレートをインストールすることしか考えてないので作るとかいうレベルじゃない)が、せめて独自ドメインとってそれらしいサイトにはしたい
うむ、最近某お名前.comの「東京のドメイン誕生。」とかいう広告がウザいのだが、あのAKB(で合ってるのか)5人衆のちょっと裸に見える写真が憎めない
いや、334ranker.tokyo とかいうURLにはしません。
-------------------------------------------------------------------------------------------------------
9月からまたラボラトリーに行かねばならなくなるのだが初っ端から報告会があって、夏休みにやったことを報告しないといけない
Microsoft SQL Server の導入
Microsoft SQL Server
ってすごいですね
かねのbot再編計画の一環です
かねのbotはいくつかのデータを予め用意する必要があって、起動時に毎回それを読み込む仕組みになっています。
かねの本人のツイートリストなどがその例です。
「いくつか」と書きましたが今までの実装ではツイートリスト(約50000万件)とそれを抽出するための下ネタリスト(約20件)、後はちんガ関連のユーザーデータ(約400件)しかないのでまあtxtファイル or csvファイル+エクセルでなんとかなってました。
ですが、あまりにも愚直すぎて恥ずかしいというのと、配列として単純に読み書きしようとするとカラム名でindexを指定できなくてコードが汚くなってしまっていたのでもう少し洗練された方法を使わなければいけないと感じてはいました。
全く知識はなかったのですが、なんとなくこういうときには「データベース」とやらを使うのかなとアタリをつけて適当にググッた結果、データはSQL Serverで管理するとよさそうだという結論に。
なんで今までテキストファイルで頑張ってたのか分からないほど現状にピッタリの選択肢です。
今回は、このSQL Serverの導入についてまとめます。C#でデータベースに初挑戦する人の参考になれば幸いです。
データベースの概念的な
(ぼく自身がデータベース初挑戦なので)
"データベース"でググるとそれが何たるかはなんとなく理解できると思うのでデータベース初心者(自分含む)はひたすらググってお勉強しましょう。
データベース操作用のSQL構文もたぶん本当は真面目に覚えた方がいいですが、割となんとかなります(一応データベースの操作はC#の範囲内でできるので)
さて、ぼくのように、Excelでのデータ管理を発展させるためになんとなくデータベースの使用を検討し始めた場合、どうしても「Excelのシートが大量に存在するのがデータベース」みたいな思考に陥りやすいですが、そこらへんの誤解を解いてくれたページを紹介します。(AccessとExcelの比較ですが、Accessはデータベース管理ソフトなので話の方向性は大体合っています)
MS-Access2000超入門部屋--Excelとどう使い分けるか
個人的には、Excelは"ファイル"でありデータベースは"サーバー"であるという理解に落ち着きました。
後者はデータベースファイルを管理するための中枢となるサーバープロセスを立ち上げる必要がある、というのが大きな違いだと感じました。
だから例えばSQL Serverという"Server"の名のついたアプリケーションをインストールする必要があります。
インストール
MS信者の場合他の製品に付属していたりして既にインストールしてある場合もあるみたいです。一度ディスク内を検索してみましょう。SQL Server XXXX構成マネージャとかいうのが存在すればおそらく本体がインストールされています。
自分の環境では、Visual Studio 2013をインストールしたタイミングでSQL ServerのLocal DBコンポーネントがインストールされていたようです。たぶんこのパターンが多いと思います。
LocalDBはデータベースのファイルを取り扱うためだけのコンポーネントのようで、サーバーとしてのプロセスは立ち上げません。Visual Studio上からいじるだけならこれで用が足りると思いますが、
やはりサーバーとして接続できた方が複数のプログラムと連携できますし、SQL Server Management Studioという素晴らしいデータベースビューワーを使うためにもフルでインストールした方がいいです。
(レコードをちょっと確認するためにわざわざVisual Studio開くとかやってられない)
というわけでダウンロードはコ↑コ↓から
Download Microsoft® SQL Server® 2014 Express from Official Microsoft Download Center
予想以上にエディションが多いんで必要なものを選択する必要があります。
ページの下の方に説明が書いてあって結局よく分かりませんが、とりあえずExpress 64BIT\SQLEXPR_x64_JPN.exeをダウンロードしておけば困らないと思います。
インストール作業はこちらのページを参考にしました。(12.TCP/IPの有効化 まで)
SQL Server 2014 Express のインストール
インストールしたもののうち、よく使うものは以下の2つだと思います。
・SQL Server 2014 構成マネージャ … サーバープロセスを管理する
・SQL Server 2014 Management Studio … データベースの作成・閲覧
使い方を覚える
ぼくもそうでしたが、データベースそのものに初挑戦な人はまずサンプルを扱ってみないと何がなんだか分からなくて不安になるので、最初にサンプルデータベースをManagement Studioで閲覧するところから始めると心穏やかになると思います。
【初級編③】Management Studio を使った SQL Server の基本的な操作方法(1/2) | SQLServer2008虎の巻
コーディングに移りましょう。
検索しても、手とり足取り教えてくれてゴリラでも理解できるような解説ページはいまいち見つからなかったのですが、MSDNの公式ドキュメントが珍しく分かりやすいのでこれで勉強できるんですね。
Visual Studio + C# でデータベースを扱う方法ってたくさんあるんですが、今回はLINQ to SQLです。
これの「チュートリアルによる学習」が丁寧で分かりやすいのでオススメです。
※注)このチュートリアル中、Management Studioは閉じておいてください(理由は後述)。
LINQ to SQL のリファレンスももちろん本当は真面目に読んだほうがいいですが、真面目じゃない人はwhereとselectさえ理解していればたぶん読まなくても大丈夫です(大丈夫とは言っていない)。
実際に使ってみる
実際にプログラムを作るときに気をつけることがありまして、何かというと、データベース接続部分を前のチュートリアル通りに記述するのはやめた方がいいです。
つまり、チュートリアルでは
Northwnd db = new Northwnd(@"c:\linqtest6\northwnd.mdf");
のようにデータベースファイルのファイルパスを渡してインスタンスを生成してますが、実はこの方法だとプログラムが.mdfファイルを専有してしまうので、プログラム実行中、もしくは終了後もManagement Studioでのデータベース閲覧ができなくなります(最悪、SQL Serverプロセスを再起動するまで「復旧待ち」と表示されアクセスできない)。
どうも、SQL Serverから切り離されたデータベースを単独のファイルとして読み込むための方法なんだそうです。
現在のかねのbotのソースコードからそのままコピーしてきた一例ですが、次のように接続文字列と呼ばれるものを指定してインスタンスを生成すれば、きちんとSQL Serverへの接続となり他のプログラムとも同時接続できるようです。こちらの方がいいと思います。
var scsb = new SqlConnectionStringBuilder();
scsb.DataSource = "(ユーザー名)\\SQLEXPRESS";
scsb.AttachDBFilename = @"C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\KanenoBotDB.mdf";
scsb.IntegratedSecurity = true;
scsb.InitialCatalog = "KanenoBotDB";
var db = new KanenoBotDB(scsb.ConnectionString);
チュートリアルを通してデータベース操作に関連するクラスが大体分かってくるので、後は必要に応じてググっていけばそれなりのプログラムが書けると思います。(「必要に応じてググる」のが大切)
かねのbotの話がいつの間にかどこかへ行ってしまいましたが、今こんな感じでデータベース作ってます。
ウインドウに表示されているのはこの前の記事で解説した形態素リストですが、合計で約53万件のレコードの追加も10分程度で終わりました。
リレーションシップを設定することで関連する別テーブルを簡単に参照できるので、その点でもcsvファイルより格段に使い勝手がいいです。
最近は帰ってからこの作業とアイカツの視聴くらいしかしてない