TwitterのDMでSSHもどき
この記事は、Aizu Advent Calendarの10日目として書かれました。
昨日 @MiZuKi_Sonoko:
研究補助業務出役確認表の一部を自動生成した話 - ( mizuki | memo )
明日 @TobiasGSmollett:
はじめに
マシンの遠隔操作はしたいけどセキュリティとか無知すぎるので、こういうことは専門でやっている人に任せたいと思った。
そこで、TwitterのDM機能から文字数制限がなくなったって話を思い出した。
どんなに長い実行結果もDM打って返してもらえばいいじゃないか。
ということでDMでコマンド打って結果を返してくれるものを作ってみた。
Secure SHellってなんですか??分かりません。
やりたいこと
自分のTwitterアカウントから、目的の端末上で動いているTwitterのbotにコマンドを送って、実行結果をDMで返してほしい。
そこで、以下の事を実装するときに考える必要があると思った。
送ったコマンドがちゃんとコマンドになっているか。
ls |
みたいなコマンドも実行されちゃわないか。
やったこと
送ったコマンドがちゃんとコマンドになっているか。
syntax error だったら怒ってくれる
逆引きRuby - 例外存在しないコマンド受け取った時どうするか
Rubyで外部コマンドを実行して結果を受け取る方法あれこれ - Qiita
capture3を使った。
o, e, s = Open3.capture3(command)
rubyの誰かが作ったメソッドでcd出来るか。
できなかったのでpwdして取ってきたパスを使ってどうのこうのした。
DMの受信は出来るのか、DMの送信はできるのか。
コード
catとかできてなかったのでちょっと変えたんだけど長期規制中なせいか確認できてないんだ…
cd頑張った。
結果
一応出来てる。
まとめと感想
やってみてはじめて知ったのだが、DMにも規制があるらしい。
ちょっとゆっくりめにってことで3秒毎にリクエストを投げてたにもかかわらずすぐに引っかかってびっくりした。
なのでbegin, rescue使って一応プログラムが止まらないようにしてる。
つまりこれ何も役に立たない! 無駄なものを作ってしまった…
CherryMXキースイッチでストラップを作ろう
はじめに
自分の好きな色の軸をいつでも触りたいよね。じゃあつくろう!
準備
作成
赤軸スイッチの写った写真の青丸の部分が実はいい感じに隙間がある。
ここにニクロム線を通してストラップでいい感じにくっつけると完成。やったね!
完成品1号は青軸。カチカチ音が単品だといい感じ。
スイッチとして使うつもりがなかったら後ろのスイッチとして使うための金属部分は刺さって痛いだけなので曲げたり切ったりしよう。
まとめ
スイッチだけ買えば後は家にあるものだけで作れると思う。180円くらいで素敵ストラップ作れると考えれば作る価値はあると思う。自分的には大変満足の行く出来だった。
スイッチなことを活かして、押したら光らせるようにするとかすると楽しいかも?
他にもいくらでも作りようはあると思うので楽しもう。
感想
ケータイにつけてたのしい!ってできてよかった。緑軸とかで作りたい。
キーキャップの印字とか自分で出来たらもっと楽しそうだなあって思った。
"D","V","O","R","A","K"ってそれぞれ印字された奴持ち歩いたら…だっさいなあ…
iphoneにくっつけてホームボタンとかパワーボタンとかの機能持たせたい。
ネイルアート自慢の次は絶対にキースイッチストラップ自慢が来るね。絶対に来るね。
rubyでループ中に配列の要素を消すと全部見てくれない問題
はじめに
ruby使ってて配列の要素がいらない値だったら消去したいなって思った。
each使ってやったら最終的に配列の中は思ってた値とは違った値が取れてなんだこれってなったので書いた。
コードと動作
gist56ee98442dc747b26f67
このコードで望んだ出力結果は
1 4
だけど実際は
1 3 4
あれ?3消えて無くない??
ちなみに.each
のところを.times
に書き換えても同じ。
原因
[1,2,3,4]
から2
を削除したら[1,3,4]
となる。
だけどカウンタの値は2のまま。次に進んだら新しい配列の3つ目、つまり4を見てしまうためだと思われる。
解決策
.each
が先頭から順に見ていくので、後ろから見ていく.reverse_each
を使えば幸せ。
やったね。
出力結果は
1 4
感想
神の作ったと思っていたruby様も人が作ったものなんだなって感じた。いや、神はこんな書き方をしないから凡人が合わせるしかないのかもしれない。
何はともあれ解決できてよかった。
前の記事の続きのモーターを動かす奴はしばらく触ってない。
DCモーターを制御する
はじめに
DCモーターの回転速度を制御することは出来るのかなと思い、ググってみた。すると出来るっぽいという事がわかったので早速やってみようと思った。どうやってやったっけなってなった時に思い出せる様に書いておく。
使ったもの
TA7267BPについて
モータードライバ。
左のピンから
動作電源電圧範囲 : VCC (opr) = 6~18V、VS (opr) = 0~18V
データシート(http://akizukidenshi.com/download/ta7267bp.pdf)
回路
参考サイト(PIC AVR 工作室別館 ”arduinoの館 - 接続くん DCモーターの接続”)
で書かれていた回路を再現しようとしてこんな感じになりました。
回路分かる人が見たら呆れそう…
コード
動作
参考サイトのコードをコピって分岐書き換えただけ。
スイッチ押してる間は動く。離すと止まる。
速度を書き換えると速さが変わる。そんな感じ。
感想
一応動かす事ができたが理解が浅い。こんな回路作り続けてたら絶対にパーツを壊すと思う。だが何を調べたらいいのか分からないみたいな状態でもある。師匠がほしい…
作りたいものがあるのだがその1歩としてやった。次はブラウザからシリアル通信で回転速度の変更を試す予定。
参考
HHKB Pro2を修理したらキーボードになって幸せな話
はじめに
約1年前に友人にHHKB professional2(以下HHKB Pro2)を頂いた。
HHKB Pro2とは、キーボードにちょっとでも興味があったら知らない人はいないであろう、超有名な超打ちやすいと噂の静電容量無接点式キーボード。
頂いた経緯として、USBコネクタが壊れて使えない状態になってしまい、修理頼むくらいだったら新しいの買うって事になって、捨てるならもらえないか?って感じで頼んだら頂けた。うれしい!
あっさり治せるかと思ったけど意外とそうでもなくて1年放置してたけどふと思い立って昨日直してみたら直ったので手順でも書いておこうと思う。
準備
修理前の状況
HHKBのミニUSB端子が取れてそれを直そうとしたせいで基板の"4"のパターンが剥がれている状況だった。
掃除もしていなかったのでまあ汚い。キーキャップが乗ってる方取り外して水でジャバジャバしたら引いた…
こんな感じでジャンクって言葉が似合う感じの状態だった。
修理した手順
手順といっても単純で、
という感じ。
ついでにキーボードの掃除もしたが、"キーボード 掃除"とかでググって出てきた物を参考にした。
実践
今回取れていたのはUSBコネクタなわけだが、USB端子には5本の線がある。今回完全にどうしようもないところまで壊れていた部分はいわゆる"4"の部分で、"ID"という役割を果たしてる部分だった。
Pin | Function |
---|---|
1 | V_BUS |
2 | D- |
3 | D+ |
4 | ID |
5 | GND |
この端子はどうやらぱそこんを介さないでUSB機器同士でやりとりする場合に使われるものらしくて*1、あれ?今回関係なくないか?て思って完全に無視してそこには半田付けを行わないで他の部分を半田で固定した所、なんか動いた。
端子一つ一つがすごい小さいのでハンダ付け不慣れな手にはなかなかきつかった。
なんて幸せな音なんだ…
まとめ
- ハンダ付けちょっとうまくなった…?
- 写真をちょいちょい撮っておかないとブログで見せられなくて寂しい
- キーボード掃除すると新品みたいになって最高って感じ
- USBのピン4はあまり意味が無い
感想
ゴミとして捨てられていたHHKB Lite2を拾ったのが1年半前で、その何ヶ月か後にジャンクなHHKB Pro2もらって、今使ってるTruly Ergonomic買って、この1年半はキーボードの期間だったなと思う。
余談だが、キーボードの上段のQWERTなんちゃらって行、並び替えると"POWER" と "QUIT" が作れて筋肉配列っぽいのが作れる。"Y"は余る。
QWERTなんちゃら配列が見るのも嫌な人はキーキャップ並び替えて遊ぼう!!!!
おまけ
Truly Ergonomicに慣れすぎて板チョコな配列がめっちゃつらい! エンターとBSとTABが遠くてとてもつらい!!
使えるようになったのはいいけどどうしたもんか…
2015年プログラム書き初め
はじめに
一昨年は書き初めにCで素数を出力するプログラムを作った。60行くらいでできて、役にも立たないあんまり面白くないものだった。
去年は書き初め何にしようか考えてたら2月になってたから書いてない。
それで今年は役に立つものを作ろうと思った。
作業中に動画を流すということをよくやるのだが、某動画サイトを見てる時に一つの動画が終わった後次の動画に変えるために一度作業を中断して、また作業に戻って集中し直す。
これが微妙にめんどくさかった。
なのでこれを、また自動化した。
プログラムの流れ
1. 某動画サイトのURLを入れる
- input site url:
- ここで正しいURLを入れられればちゃんと動く
2. 見たいタイトルを正しく入力する
- input PERFECT title:
- 大文字とか小文字とかの処理をしてないのでこれもまた正しく入力しないと動かない
3. どこからどこまで見るかを決める
- input 1 or 2の部分
- -> 1を入力すると"1から25"
- -> 2を入力すると自分で範囲を決められる
4. 1つの動画が終わったら次の動画に遷移する
5. 最期の動画が終わるとプログラムが終了する
コード
まとめ
感想
人*1の役に立つものを作れる様になったので成長を感じる…
本当は日記帳でも作ろうかなあって思ってたんだけど思ったよりjavascript難しくて1日じゃ絶対終わらないぞっていうことで急遽今回のものになった。
ところで動画見ながら作業ってたぶん絶対はかどらないですよね。
最期に今年の抱負です。
参考
RubyでSeleniumを使ってスクレイピング - Qiita
ruby - Selenium-Webdriver: Get attributes after finding an element - Stack Overflow
*1:自分