2018年5月11日金曜日

第1回 CHUNITHMスライダー作り 〜計画編〜

こんにちは。みずこーひーと言います。
いきなりですが、少し前にCHUNITHMのスライダーを自作したんですが、あまりに低クオリティで個人的に納得行かなかったので2代目を作ろうと思い、少しずつ計画していました。

この度ようやくまとまってきたので、制作を開始する事にしました。
前回のスライダーとは打って変わって最終的に簡単な筐体まで作ろうと思っています。

作業を生放送したり、進捗をブログにあげたりと今回はオープンに作っていきたいです。

尚、このブログでは前回作ったものをgen1、今回作るものをgen2と表記します。


============================================================

プロジェクトの流れ


  1. パーツ選定&テスト
  2. 基板設計&基板作成
  3. パーツ取り付け
  4. コーディング
  5. 筐体組み立て
と言った感じになると思います。

============================================================

スライダーの仕組み

私の作るスライダーはgen1、gen2の両方を赤外線遮断方式で作っています。
アーケードゲームだと、REFLEC BEAT等と同じ仕組みです。

============================================================

1. パーツ選定&テスト

ここで一番大切なのはセンサーの高さを如何に低くするか、です。
gen1はごく一般的な5mmφの赤外線LEDとフォトトランジスタを使っていたので、結構プレイしづらい物になっていました。

そこで、gen2では高さ1.5mmというとても背の低いフォトトランジスタが使えないかと考えています。
赤外線LEDの方も、表面実装部品にして出来る限り高さを抑える設計にする予定です。

そのテストをするのが最初にすることになります。

============================================================

2. 基板設計&基板作成

続いて、基板を作っていきます。
スライダーの長さ(約45cm)の基板を手に入れるのはかなり難しいもので、外部に発注してしまうと凄い金額になってしまいます。
そこでレーザープリンタを用いたエッチングをして、簡単なプリント基板を作ろうと考えています。

作り方は省略しますが、安くである程度の精度で基板が作れるので、結構重宝しています。

ここで作るパーツは大体下の図通り、6つに分かれています。
出来る限り機能毎に分けたいなーって感じです。

ちなみに、スライダー部は上ははみ出さないようにしないといけませんが、下は機械に埋め込んじゃうのでそれなりに余裕あります。

なのでトランジスタアレイでなく普通のトランジスタを使うかもしれません。この辺の調整をここで纏めたいです。

============================================================

3. パーツ取り付け

まあ...はんだ付けですね。
ハンダゴテはHAKKOを使いましょうね。圧倒的に持ちが良いです。

============================================================

4. コーディング

とりあえず一通り基板が完成した所でコーディングをする予定です。
随時、動作テストはしていきますが、筐体に埋め込んでしまうと面倒くさい部分が色々あるのでここできちんと動く状態に持っていっておきたいですね。

============================================================

5. 筐体組み立て

最後に筐体としての組み立てです。
家に"出荷時点で"3フレーム位送れるバグのあるテレビがあるんですがそのテレビがちょうど32インチでCHUNITHMと同じなんでそれを使います(一時的に直す裏技がある)

筐体は
大体こんなイメージです。上のカバーとかは付けません。
お金を入れるのは気まぐれで付けるかもくらいですね。
中にデスクトップPCを置いておきます。スペック的にはSeaurchinがちゃんと動く程度です。A10-7890Kの10GBです。

ちなみに筐体自体は木製です。原材料が安いので...
四角にしっかりとした支柱を立てて薄い板を付けていく感じの予定です。ハリボテですね。
但し、台及びスライダーは安定性が命なのでそれなりにしっかりした支柱にします。
あと筺体下が斜めになっていないので、空洞を空けて足を入れられるようにするつもりです。

============================================================

最後に

勢い良く書きなぐりましたがまあこんな感じでつくってみますって話です。
いろいろすることが立て込んでるので時間がかかりそうですがのんびりやってみたいと思います。

2018年1月10日水曜日

室温を常に20±5℃にしたい

こんちは。
最近LTOメディアを導入した水珈琲です。
こいつ、アーカイブ目的の場合保管環境が20±5℃らしいんですよ。
一般家庭には結構ハードじゃないっすか。

っつーわけで、運がよく温度とかあんまり気にしないで良いラボがあるのでそこの温度を常に20±5℃に保とうと思います。

方針

1. 室内温度と外気温を監視
2. 室内温度が24℃以上の時、外気温が24℃以上の場合冷房を付ける
3. 室内温度が16℃以下の時、外気温が16℃以下の場合暖房を付ける
4. 冷房が付いている時、室内温度が17℃を下回った場合冷房を切る
4. 暖房が付いている時、室内温度が23℃を上回った場合冷房を切る


ミソ

外気温が目標温度寄りな場合は自然の温度を使う。
ていうかそうしないと暖房と冷房を無限ループすることになる。不憫。


実践

まだしてない(センサーが足りない)
どうかな〜...

2017年12月20日水曜日

CH◯NITHMのシミュレーターを作ったお話

こんにちは。水珈琲です。ごっちゃんです。

さて、Twitterを見てる人は知ってるかも知れませんが僕はCH◯NITHMのスライダーを作ってます。
少し前はシミュレーターも作ってましたが面倒くさくなったのでkb10uy氏のSeaurchinをお借りしてます。

今回作ったスライダーの仕組みとか、これからの方針とか、その辺りを書きたいな〜と思いつつ最初の部分を書いてます。


始まり


事の発端は友達でした。
僕は田舎に住んでいたんですが、友達がウニがやりてえ!って言うので車で1時間掛けて行ったんです。そしたら自分がドハマリしました。

しかし当時僕の住んでる市にはCH◯NITHMなんて無くて(リフレクビートとかユビとか弐寺はあった)悲しい状態だったのですが、何を血迷ったのか無ければ作ればいいじゃない!と自作に取り掛かり始めました。

まずアクリル板に手を出しました。
それっぽいのが出来そうだったからです。
今考えても一番適してる素材だと思います。

結局300mm x 450mmのアクリル板を長い方向に3枚に切って重ねることでいい感じにしました。
触った感じはかなり近いと思います。


センサー


スライダーはタッチパネルなので何かしらのセンサーを付ける必要がありました。
色々検討した結果、自分は赤外線遮断方式を採用することにしました。
一番のメリットは、タッチした感じが本家に近く、手袋でも反応する事です。
デメリットは上下の判定が出来ないことですかね。

このあたり詳しくまとめたページを作ってあるので興味がある方は是非。

これで設計が大体固まったので作業を進めるんですが、なんといっても田舎。
部品を注文して届くまでに時間がかかるのと、1回辺り500円の送料がかかるのです。

悪戦苦闘しながらなんだかんだ作った結果が、
こんな感じです。


ソフトウェア


スライダーが完成した辺りからシミュ作るのむずくね???ってなってきます。
susの解析は作ったもののレンダリングを放置してます...

まあ結局互換的にもあるもの使ったほうがいいよね的な理論でkb10uy氏のSeaurchinに対応するためのコンバータを書いて遊んでます。

AIR系判定が付いてないですが
こんな風に遊べます。

創作譜面が遊べるのでめちゃ楽しいです。(映像が下手なのが画面が小さすぎて手が動かなかったから)

まあCH◯NITHMをしたことがある人はわかると思いますが、映像の通りプレイ中はスライダーなんて見ません。
Seaurchinが対応してないのでスライダーを光らせてないですが、正直十分です。。。
かなり苦労して部品を作ったのに結局光らせないで遊んでるのなんだか...


最後に


もし、自分も作りたい!って方がいらっしゃいましたら、そこそこの覚悟を持ってやってみてください。
是非とも新しいスライダーを作り上げてほしいですね...!
プレイするだけなら光らせる機能は必要ないです。ほんと。

本当に最後になりますが、この度(前と比べて)都会に引っ越しました。
なんと引っ越す5日前に常々入れてくれと言っていた近所のゲーセンにCH◯NITHMが導入されました。
なんでこんなに運が無いんだ...と思いつつ引っ越した先でこの記事を書いてます。(向こうではめっちゃCH◯NITHMが流行ってるらしい)

こんな適当な僕ですが、スライダー第二弾を計画してます。
次は(光らせる機能ももちろん付けて)手袋にも上下判定にも対応できたらなぁ...と計画してるので、また何か出来たら記事を書きたいですね...

というわけで締め方が分からなくなってしまいましたが、今回の記事はこんな感じで終わらせていただきたいと思います。
最後まで読んでいただいてありがとうございました!



【宣伝枠】
締めたばっかりなのに速攻宣伝で申し訳ないんですが、Twitterのフォローをバックアップするサービスやってます。
17年の夏ごろからTwitterのアカウント凍結が相次いでるのでその予防になれば幸いです。

2017年12月19日火曜日

Cent OS7でBitZenyマイニング環境インストール

こんにちは。
BitZenyのマイニング機を増やしてます。

今回は1発でインストールする方法をまとめていきます。
全てrootユーザでの実行を想定しています。
環境に応じてsudoを付与してあげて下さい。



yum install git wget curl autoconf libcurl-devel jansson-devel openssl openssl-devel gcc gawk automake libtool
git clone https://github.com/bitzeny/cpuminer.git
cd cpuminer
./autogen.sh
./configure CLFLAGS=" -Ofast -flto -march=native"
make
make install

2017年12月17日日曜日

Bitzenyマイニング覚書

こんちは。水珈琲です。

なんかTwitterでCPUで掘れるBitzenyってのが流行ってるので色々やってます。
あいにく価値が上がってからのマイニングなのであれなんですが出来る限り効率アップを目指してます。

HTは使うべきか

先駆者さんの検証では

Windowsは無効の方が若干早い。Linuxは有効の方が若干早い。

らしいです。
うちの環境(Linux)で試しに無効にしてみましたが確かに遅くなりました。

ので、まあ...両方試して早い方でいいんじゃないですかね。

プールは使うべきか、プールはどれが良い

基本的に使うべきです。
1人だと効率が悪すぎます。
ただ、見つけた時には沢山のBitzenyが手に入るというメリットもあります。ごく稀ですが。
プールの選び方は、大規模なプールだと数分毎に誰かが見つけるので頻繁に手に入ります。ただし、皆で分けるので1度にもらえる量は少しになってしまいます。
小規模なプールだと、頻度は数時間に1度程度ですが、1度見つかるとそこそこの量が手に入ります。

個人的にはがっつり手に入るのが気持ち良い気がするので小規模プールを使ってますが、好みで選んで大丈夫だと思います。

採掘機は何が良い

手元にある機材で少し試しました。
Xeon2枚積んだラックサーバーも試してはみました。

R120b-1(ラック鯖) Xeon-E5630(2CPU8C16T(合計)) 4kH/s 215W
ThinkPad X230 i5-3320m(1CPU2C4T) 1.2kH/s 20W(画面最小輝度/バッテリー抜き)
MacbookPro MF839J/A i5-5257U(1CPU2C4T) 1.2kH/s 30W (画面最小輝度)
自作PC A10-7890K(1CPU2C4T) 1.6kH/s 150W


...電力消費量を見るとThinkPadを4台動かして80Wで4.8kH/s掘る方が圧倒的に高コスパなのでは...

思いの外、新しいノートパソコンは掘れます。(新しいと言っても3世代モバイルCore iシリーズとかで十分ですが)
きちんと冷却してメンテナンスするならば、ノートパソコンで掘るのはかなりありだと思います。
(故障率を計算に入れてないので鵜呑みにするのは良くないですが)

最後に

なんか思った事があれば追記します。。。
その辺に転がってるPCで掘れる仮想通貨はなかなか貴重なのでこれからも続く...?かも?

面白い通貨なので是非掘ってみたら良いと思います。
デスクトップPCで24時間30日掘ると電気代が数千円上がるので気をつけて下さいね。

2017年8月7日月曜日

Android Studioでビルドと実行がズレたお話

最初に

この問題の解決策を教えて頂いた @kimukou2628 様本当にありがとうございます...!
凄く助かりました...

状況

  1. Aを編集してBuild&Runしても反映されず,もう一度Build&Runすると反映される.
  2. Aを編集してBuild&Runしても反映されず,Bを編集してBuild&RunするとAが反映される.Cを編集してBuild&RunするとBが反映される(以下無限ループ)

試した事

  • ProjectのClean
  • ProjectのRebuild
  • StudioのInvalidate Caches / Restart
  • InstantRunの無効化
  • .gradleの削除&再実行
これらはどれもうちの環境では効果がありませんでした.

解決方法

  • *.imlファイルの削除(リネーム)
  • *.ideaフォルダの削除(リネーム)
あっさり解決してしまいました...ホントびっくりです...!

2017年7月22日土曜日

Android開発初心者の壁レイアウト、そしてWeight

Androidアプリ開発を初めてしているほとんどの方はこう思うはずです。
Androidのレイアウトって難しい。
では何故こう感じるか、そしてレイアウトの考え方のお話をします。

まずAndroidはiPhoneと大きく違う所があります。
それは画面サイズです。iPhoneはAppleだけが製造しているためサイズも数種類しかありません(最近増えてますが...笑)
一方Androidは各メーカーが自由に設計、製造しているため画面サイズ、解像度がまちまちなんです。

そのため絶対座標でレイアウトを作ると小さい端末でははみ出て、大きい端末では余白が出来てしまいます。

この問題を解決するためにAndroidではWeight(重み)という概念を使います。簡単に言い換えるとです。

まず最初にlayout_widthとlayout_heightについて理解する必要があります。

layout_widthは横幅、layout_heightは縦幅です。

これらに代入出来る内容は同じで数種類あります。

match_parent 親のサイズに合わせる
wrap_content 自分を表示できる最小サイズ
fill_parent 親のサイズに合わせる
Xdp

この4つです。
fill_parentは過去の遺産なので忘れましょう。意味としてはmatch_parentと一緒です

Androidのレイアウトは親子関係があります。
画面幅が100、中にあるLinearLayoutの幅が50でその中のボタンをmatch_parentにした場合ボタンのサイズは50になります。
XdpはXに数字が入ります。上のバー(アクションバーって言います)は48dpといったように色々決まってます。ここの数字はあまり使わない...はずです。
というか必要最低限に抑えるようにすると良いです。



では本題であるWeightについてです。
まず、前提としてWeightを使うときのみLinearLayoutの向きに応じて幅を0dpにします。

horizontalまたは未指定の場合はlayout_width
verticalの場合はlayout_height

を0dpにします。
0dpにしない使い方もありますがここでは省略します。

あと、最近のAndroidStudioはConstraintLayoutというのが標準になってしまっているので
android.support.constraint.ConstraintLayout

LinearLayout 
に書き換えた上でapp:から始まる行を全て消しましょう。
これらはConstraintLayout専用のパラメータなので大丈夫です。
ついでにLinearLayoutの中に
android:orientation="vertical"
を追記しておきます。

条件

  • ルート(一番親)はLinearLayoutでvertical指定
  • その下にLinearLayoutを置いてhorizontal(水色に設定してあります)
  • 全てのボタンはwidthが0dp
  • ボタンの数字は設定しているWeightの数値

この図を見たら分かる事が色々あると思います。
1つだけ設置してweightを1にするとmatch-parentと同じ動きをします。
2つ設置して両方1にすると半々になります。同じ重さの物は同じサイズになります。3、4と増えていっても同じく同じサイズです。

Weightが1の物2つ = Weightが2の物1つ (上から5,6つ目の画像)

ちなみにWeightは100分率の考え方も出来ます。
80:20だったら両辺10で割って8と2にすれば画面幅80%と20%に別れます。(80と20でも大丈夫)

片方を85%,もう片方を15%にしたいならそれぞれその数字を入力すればOK。

最低限これだけが分かっていればAndroidのレイアウトはなんとでもなります。

つまるところ、そのViewのWeight/Viewが入ってるLinearLayoutの中のView達のWeightの総和の画面幅になるってことです。

豆知識として画面右と画面左(上下も可)に表示したい時はボタンをwrap_contentで2つ置いた後2つの隙間にSpaceを置いてSpaceだけWeightを1にすると左右にボタンが設置されます。
Weight未指定は0なので表示されない気がしますがwrap_contentが優先されるので、ボタンが最低限表示できる幅を保持したままSpaceが最大化されるためです。

とりあえずはこの知識があればAndroidのレイアウトは結構出来ます。
是非マスターしてみて下さい!
分からない事があれば質問していただければ分かる範囲で答えたいと思います。