raspberry PiとPerlで7セグメントLEDを光らせる。

ダイナミック点灯しようとすると上手くいかなかった。

ダイナミック点灯しようとすると上手くいかなかった。

ずっとやってみたかったRaspberry Piでの電子工作に挑戦してみました。ちなみに(環境上はんだごては部屋で使えない+不器用+それ以前に道具がないので)ハンダ付けはできないし電子部品とかもマジで何買っていいのかわかんないしそもそも電子回路もよくわかんない状態でのスタートだったので、「Raspberry Piをはじめよう」を読みながらぐーぐる先生で検索して何とかしました。
あと、物を全部揃えたつもりだったのに「えっこれもいるの?」「あれもない!」状態で秋月電子さんには実店舗に3回位行きました。事前にちゃんと買うもの確認しとけばよかったです。あまりによくわかってなくてかなり不安でしたが、なんとか光りました。ちなみにブザーもつけたりLEDも光らせたりしてるのですが、何に使うかは決めてません。

回路は下記の記事のものを、そっくりそのまま同じようにつなぎました。
Raspberry Life | Dynamic LED
たまたま秋月電子で同じLEDを買っていたので大変参考になりました。ありがとうございます。LEDのセグメントを制御&どのLEDを光らせるかを選択して光らせるんですね。
プログラムもRaspberry Lifeさんに掲載されているPythonのものをそのまま使えば問題なく光るのですが、Pythonは一行も書けないし、Perlと組み合わせできたほうが嬉しいのでPerlで書くことにしました。

Perlで書くのは下記の記事を参考にしました。(ちなみに使用しているOSはraspbianで、ドライバのインストール等は特に問題なく実行できたのでインストール方法については言及しません。)
彩実験室 – Raspberry PI と GPIOで7セグ

PythonのRPi.GPIOはPin NameでPinを指定するようなのですが、Device::BCM2835はPin Numberで指定するようなので、下記を参照しながら書き換えました。
RPi Low-level peripherals – eLinux.org

スクリプトが思った以上に長くなったので、続きに載せておきます。
(コード自体は彩実験室さんとRaspberry Lifeさんのものをだいぶ参考にしています。)

Continue Reading

既存リスト内のメンバーとフォロワーorフォローしてるひと(フォロイー)の差分をとってリストに突っ込む。

のるるんが想像以上にでかくてびびった。

のるるんが想像以上にでかくてびびった。

TimeLine Copier – Twitterでフォローしてる人をリストにコピーするツール
のるるん先生イベントに行こうとしたらおもくそ寝坊して14時だったので、前からやろうやろうと思っていたlistのコードの整理をしてみました。
リーダブルコードを途中まで読んだので「よっしゃ実践してみよう!」と思ったのですが実際やってみると結構難しくて全然うまく行きませんでした。
あの本読むと不思議と「あれ?めっちゃ簡単にできんじゃね?」って気分になるのがすごいです。
それでも前よりはだいぶすっきりした気がします(前がひどすぎたので相対的に綺麗に見える)。一個の関数に全部ぶち込んでるのは仕様です。
ついでに、既存のリスト内のメンバーとFollowing(or Follower)の差分をとってリストに突っ込む機能を追加しました。
ログ見てると結構高頻度に毎回リスト作り直してる方がいらっしゃるようで、1回1回新しいリスト作るの面倒臭いだろうし既存リストに新しいユーザー追加できたほうがいいだろう、と思って作ったのですが、こういうのもう既にありそうですね。

リストに登録した人と登録に失敗してる人(登録されてない人)の差分を取る関数はこんな感じです。

#$ntはNet::Twitter::Liteのオブジェクト
sub getFaultedMember {
	my $list_id = shift; #リストのID
	my $mem = shift; #比較対象リストのリファレンス

	my $cursor = -1;
	my $list_members = $nt->list_members({list_id => $list_id, cursor => $cursor});

	my @list_mem;
	for my $a (@{$list_members->{users}}){
		push(@list_mem,$a->{id_str});
	}
	$cursor = $list_members->{next_cursor};
	while ($cursor != 0){
		$list_members = $nt->list_members({list_id => $list_id, cursor => $cursor});
		for my $a (@{$list_members->{users}}){
			push(@list_mem,$a->{id_str});
		}
		$cursor = $list_members->{next_cursor};
	}

	my $lc = List::Compare->new($mem, \@list_mem);
	my @only = $lc->get_Lonly; #登録されてないひとリスト
	return @only;
}

あと、増税前にREALFORCE91Uを買って、先日やっと届いたので使っているのですがキー打ってるだけでほんと幸せな気持ちになれます。タッチタイプできないけど。

追記

バグってるのに気づいたので出先でタブレット使って修正してみました。一行くらい修正してホットデプロイするくらいならなんとかなっちゃうんですね。
ついでにメイン処理も関数化したのでだいぶ見通しが良くなりました。