読者です 読者をやめる 読者になる 読者になる

Rubyで自己複製するスクリプトを書いてみた

Ruby

はじめに

スクリプトを実行して出力されたスクリプトを実行して出力されたスクリプトを実行して…的な物を作って見たいなって思い立って考えてみた。

調べてみたらクワインって名前が付いてるらしい。

クワイン (プログラミング) - Wikipedia

ルール

出力するコードと出力されるコードが同じになること。
短ければ短いほど偉い。

結果

gist34f5c095a742183b2605

まとめ

  • %記法ってのがあって'とか"とかの代わりに使えて応用が効く。
  • いかにしてループモリモリさせないかみたいな

感想

考え始めて3日たった。%記法を知らなかったので「'」をどうにかするのだけが課題だった。調べたらそのまま出てきてRubyすごい!!ってなった。楽しかった。
こういうの考えてると頭だけで考えきれなくて堂々巡りになっちゃって頭の悪さを思い知る。

前立ち読みで見たけど「あなたの知らない超絶技巧プログラミングの世界」が今回のクワインをものすごくパワーアップさせてスーパーにすごいことをする超キモイプログラムがいっぱい載ってたので見てみると楽しいかも。

TwitterのDMでSSHもどき

Twitter ruby ssh

f:id:panchiga:20151223054456p:plain

www.adventar.org

この記事は、Aizu Advent Calendarの10日目として書かれました。

昨日 @MiZuKi_Sonoko:

研究補助業務出役確認表の一部を自動生成した話 - ( mizuki | memo )

明日 @TobiasGSmollett:

Scala - 日常系のゆるふわな何か - Qiita

はじめに

マシンの遠隔操作はしたいけどセキュリティとか無知すぎるので、こういうことは専門でやっている人に任せたいと思った。
そこで、TwitterのDM機能から文字数制限がなくなったって話を思い出した。
どんなに長い実行結果もDM打って返してもらえばいいじゃないか。
ということでDMでコマンド打って結果を返してくれるものを作ってみた。

Secure SHellってなんですか??分かりません。

やりたいこと

自分のTwitterアカウントから、目的の端末上で動いているTwitterbotにコマンドを送って、実行結果をDMで返してほしい。
そこで、以下の事を実装するときに考える必要があると思った。

  1. 送ったコマンドがちゃんとコマンドになっているか。

    ls |

みたいなコマンドも実行されちゃわないか。

  1. 存在しないコマンド受け取った時どうするか

    aeua

    みたいなコマンド打っちゃった時はどうするか

  2. rubyの誰かが作ったメソッドでcd出来るか。
  3. DMの受信は出来るのか、DMの送信はできるのか。

やったこと

  1. 送ったコマンドがちゃんとコマンドになっているか。

    syntax error だったら怒ってくれる
    逆引きRuby - 例外

  2. 存在しないコマンド受け取った時どうするか

    Rubyで外部コマンドを実行して結果を受け取る方法あれこれ - Qiita

    capture3を使った。

    o, e, s = Open3.capture3(command)

  3. rubyの誰かが作ったメソッドでcd出来るか。

    できなかったのでpwdして取ってきたパスを使ってどうのこうのした。

  4. DMの受信は出来るのか、DMの送信はできるのか。

    rubyからtwitter APIを利用してbotを作る

コード

catとかできてなかったのでちょっと変えたんだけど長期規制中なせいか確認できてないんだ…

gist9be6ccaa5d75a4b70ff6

cd頑張った。

結果

f:id:panchiga:20151223054558p:plain

一応出来てる。

まとめと感想

やってみてはじめて知ったのだが、DMにも規制があるらしい。
ちょっとゆっくりめにってことで3秒毎にリクエストを投げてたにもかかわらずすぐに引っかかってびっくりした。
なのでbegin, rescue使って一応プログラムが止まらないようにしてる。

つまりこれ何も役に立たない! 無駄なものを作ってしまった…

Arduino使ってパタポン2を半自動化した話

Arduino Pataon Python

はじめに

パタポンっていうゲームがある。 どんなゲームか簡単に言うと、リズムに合わせてコマンドを打って蛮族を操作する2Dリズムアクションゲーム

(パタポン PV)

パタポンは楽しくて好きなんだけどこのゲームの大きな特徴の、"リズムにあわせてコマンドを打つ"っていうのがすっごく下手でゲームを楽しめない!!

なので電子工作の力を借りて 楽をする Pataponを簡略化するものを作った!

f:id:panchiga:20150728023950j:plain

続きを読む

CherryMXキースイッチでストラップを作ろう

Cherry

はじめに

自分の好きな色の軸をいつでも触りたいよね。じゃあつくろう!f:id:panchiga:20150601222313j:plain

準備

  • ストラップのひもから金具の部分(なかったらいらないストラップからむしる)
  • 好きな色の軸(千石電商でバラ売りしてる)
  • ニクロム
  • はんだごて
  • はんだ

作成

赤軸スイッチの写った写真の青丸の部分が実はいい感じに隙間がある。 f:id:panchiga:20150601230416j:plain

ここにニクロム線を通してストラップでいい感じにくっつけると完成。やったね!

完成品1号は青軸。カチカチ音が単品だといい感じ。 f:id:panchiga:20150531223742j:plain

スイッチとして使うつもりがなかったら後ろのスイッチとして使うための金属部分は刺さって痛いだけなので曲げたり切ったりしよう。

まとめ

スイッチだけ買えば後は家にあるものだけで作れると思う。180円くらいで素敵ストラップ作れると考えれば作る価値はあると思う。自分的には大変満足の行く出来だった。

スイッチなことを活かして、押したら光らせるようにするとかすると楽しいかも?

他にもいくらでも作りようはあると思うので楽しもう。

感想

ケータイにつけてたのしい!ってできてよかった。緑軸とかで作りたい。

キーキャップの印字とか自分で出来たらもっと楽しそうだなあって思った。

"D","V","O","R","A","K"ってそれぞれ印字された奴持ち歩いたら…だっさいなあ…

iphoneにくっつけてホームボタンとかパワーボタンとかの機能持たせたい。

ネイルアート自慢の次は絶対にキースイッチストラップ自慢が来るね。絶対に来るね。

rubyでループ中に配列の要素を消すと全部見てくれない問題

ruby each delete

f:id:panchiga:20150531002115p:plain

はじめに

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を使えば幸せ。

やったね。

gist78fc964f3e034b8b0d81

出力結果は

1 4 

感想

神の作ったと思っていたruby様も人が作ったものなんだなって感じた。いや、神はこんな書き方をしないから凡人が合わせるしかないのかもしれない。

何はともあれ解決できてよかった。

前の記事の続きのモーターを動かす奴はしばらく触ってない。

DCモーターを制御する

f:id:panchiga:20150415001316p:plain

はじめに

DCモーターの回転速度を制御することは出来るのかなと思い、ググってみた。すると出来るっぽいという事がわかったので早速やってみようと思った。どうやってやったっけなってなった時に思い出せる様に書いておく。

 

使ったもの

TA7267BPについて

f:id:panchiga:20110428133509j:plain

モータードライバ。

左のピンから

  1. in1 (Arduinoのanalog出力その1)
  2. in2 (Arduinoのanalog出力その2)
  3. out1 (DCモータの+か-)
  4. GND
  5. out2 (DCモータの-か+)
  6. Vs
  7. Vcc

 

動作電源電圧範囲 : VCC (opr) = 6~18V、VS (opr) = 0~18V

データシート(http://akizukidenshi.com/download/ta7267bp.pdf)

 

回路

f:id:panchiga:20150414235609p:plain

 

参考サイト(PIC AVR 工作室別館 ”arduinoの館 - 接続くん DCモーターの接続”)

で書かれていた回路を再現しようとしてこんな感じになりました。

回路分かる人が見たら呆れそう…

 

コード

gist14db2c4a99707a511026

 

動作

参考サイトのコードをコピって分岐書き換えただけ。

スイッチ押してる間は動く。離すと止まる。

速度を書き換えると速さが変わる。そんな感じ。

 

感想

一応動かす事ができたが理解が浅い。こんな回路作り続けてたら絶対にパーツを壊すと思う。だが何を調べたらいいのか分からないみたいな状態でもある。師匠がほしい…

 

作りたいものがあるのだがその1歩としてやった。次はブラウザからシリアル通信で回転速度の変更を試す予定。

参考

nekosan0.bake-neko.net

 

 

HHKB Pro2を修理したらキーボードになって幸せな話

はじめに

約1年前に友人にHHKB professional2(以下HHKB Pro2)を頂いた。

HHKB Pro2とは、キーボードにちょっとでも興味があったら知らない人はいないであろう、超有名な超打ちやすいと噂の静電容量無接点式キーボード。

f:id:panchiga:20150226022625j:plain

PFU Happy Hacking Keyboard Professional2 墨 英語配列 静電容量無接点 USBキーボード Nキーロールオーバー UNIX配列 WINDOWS/MAC両対応 ブラック PD-KB400B

 

頂いた経緯として、USBコネクタが壊れて使えない状態になってしまい、修理頼むくらいだったら新しいの買うって事になって、捨てるならもらえないか?って感じで頼んだら頂けた。うれしい!

あっさり治せるかと思ったけど意外とそうでもなくて1年放置してたけどふと思い立って昨日直してみたら直ったので手順でも書いておこうと思う。

 

準備

 

修理前の状況

HHKBのミニUSB端子が取れてそれを直そうとしたせいで基板の"4"のパターンが剥がれている状況だった。

f:id:panchiga:20131022141334j:plain

掃除もしていなかったのでまあ汚い。キーキャップが乗ってる方取り外して水でジャバジャバしたら引いた…

こんな感じでジャンクって言葉が似合う感じの状態だった。

 

修理した手順

手順といっても単純で、

  1. HHKBをドライバーでバラす
  2. USBコネクタの刺さってる(刺さっていた)基板を取り外す
  3. 新たなUSBコネクタをくっつける
  4. 直った!やったぜ!

という感じ。

ついでにキーボードの掃除もしたが、"キーボード 掃除"とかでググって出てきた物を参考にした。

 

実践

今回取れていたのはUSBコネクタなわけだが、USB端子には5本の線がある。今回完全にどうしようもないところまで壊れていた部分はいわゆる"4"の部分で、"ID"という役割を果たしてる部分だった。

 

PinFunction
1V_BUS
2D-
3D+
4ID
5GND

f:id:panchiga:20150226145418j:plain

 

この端子はどうやらぱそこんを介さないでUSB機器同士でやりとりする場合に使われるものらしくて*1、あれ?今回関係なくないか?て思って完全に無視してそこには半田付けを行わないで他の部分を半田で固定した所、なんか動いた

 

f:id:panchiga:20150225160753j:plain

端子一つ一つがすごい小さいのでハンダ付け不慣れな手にはなかなかきつかった。

 

 なんて幸せな音なんだ…

 

まとめ

  • ハンダ付けちょっとうまくなった…?
  • 写真をちょいちょい撮っておかないとブログで見せられなくて寂しい
  • キーボード掃除すると新品みたいになって最高って感じ
  • USBのピン4はあまり意味が無い

 

感想

ゴミとして捨てられていたHHKB Lite2を拾ったのが1年半前で、その何ヶ月か後にジャンクなHHKB Pro2もらって、今使ってるTruly Ergonomic買って、この1年半はキーボードの期間だったなと思う。

余談だが、キーボードの上段のQWERTなんちゃらって行、並び替えると"POWER" と "QUIT" が作れて筋肉配列っぽいのが作れる。"Y"は余る。

QWERTなんちゃら配列が見るのも嫌な人はキーキャップ並び替えて遊ぼう!!!!

 

おまけ

Truly Ergonomicに慣れすぎて板チョコな配列がめっちゃつらい! エンターとBSとTABが遠くてとてもつらい!!

使えるようになったのはいいけどどうしたもんか…