2014年9月21日日曜日

はてなブログに移行する(多分)

こっちはMarkdownがいつまでたっても使えるようにならないから,はてなに行こうと思う

まあもともとブログ書いてなかったけど,行っても何も書かないかもだけど

2014年7月3日木曜日

RasPi買った


クラブの先輩がArchがいいと言っていたのでArch Linuxを入れた
確かに扱いやすかったり先進的だと感じるところはある(主にパッケージマネジャー・レポジトリ関連)が,新しいことを覚えなければならないのがめんどくさい(

dlnaサーバー・クライアントにしたりバックアップ鯖にしたりlxqt入れたりGPIOで遊んだりQt動かしたりGPUガンガン使ったりしたい

しかしこいつ,いつも使ってるvimの設定とかzshの設定入れたらそいつらを起動するだけで数秒かかったりするし,ロードアベレージがいつも1より大だし…なかなか低スペ(分かってたけど

raspiでGPIOを使ってみる 〜LEDでLoad Average〜

green

GPIO with raspi第一回(?)

ロードアベレージの高さに応じてLEDを点灯させる

  • ロードアベレージが低い[0,2)→緑
  • ちょっとしんどい[2,5)→黄
  • しんどい[5,∞)→赤

閾値は適当

LED基板を作る

用意するもの: 赤,緑,黄のLED(色なんでもいい),ジャンパー線(メス―メス),基板につけるオス端子,100Ω抵抗

抵抗について.抵抗は270Ωがいいと他サイトにあるが,暗くなるので抵抗値を小さくした.RasPiのGPIOの出力電流 には限界があるらしく,全部で50mAを超えるといけないようだが,今回同時に点灯させるLEDは一つで,13mAほどしか 通ってないはずなので大丈夫だと思っている.

led

写真見れば分かるだろで済みそうな単純な基板だけど一応

GPIO0 → 緑のLED ➘ 
GPIO1 → 黄のLED → 100Ω → 0V(GND)
GPIO2 → 赤のLED ➚

GPIOを操作

WiringPiを使う.Archならalarm/wiringpiをpacmanでインストール. これを使うとgpio write PIN 0/1で出力オンオフができる.とても素敵.

#!/bin/bash

# GPIO0: green
# GPIO1: yellow
# GPIO2: red

# set mode
gpio mode 0 out
gpio mode 1 out
gpio mode 2 out

while true; do
    # load avarage per min
    load=`uptime | cut -d, -f3 | cut -d' ' -f5`

    if [ `echo "$load >= 5.00"|bc` -eq 1 ]; then
        # set red
        gpio write 0 0
        gpio write 1 0
        gpio write 2 1
    elif [ `echo "$load >= 2.00"|bc` -eq 1 ]; then
        # set yellow
        gpio write 0 0
        gpio write 1 1
        gpio write 2 0
    else
        # set green
        gpio write 0 1
        gpio write 1 0
        gpio write 2 0
    fi

    sleep 30
done

uptimeコマンドの結果から1分のロードアベレージを取り出して,値を比較した結果に基づきLEDに電圧をかけるだけ. こんな感じでシェルスクリプトを書くだけでシステムの状態に合わせてGPIOを操作できる.素敵.

スクリプトを実行して動作確認.

systemdに自動起動してもらう

しすてむでぃー分かんないから適当に書いた.依存関係とか気にしてない.

[Unit]
Description=GPIO LED

[Service]
ExecStart=/usr/local/bin/gpio-led.sh

[Install]
WantedBy=multi-user.target

/etc/systemd/system/gpio-led.serviceとして配置.

sudo systemctl enable gpio-led # システム起動時に起動
sudo systemctl start gpio-led
view raw gistfile1.md hosted with ❤ by GitHub

2014年6月14日土曜日

QMLで射影変換を利用してプロジェクションマッピングができる(多分)実装

/QMLQuadWarp



README.mdにあるみたいに長方形を変形できる.例では画像('Image')エレメントを利用しているが,`Item`から派生したコンポーネントであれば画像でなくてもソースとして利用できるはず.多分.

機会があればこれでプロジェクションマッピングしたい.

2014年6月2日月曜日

niconicoからあらかじめ取ってきたjsonをパースして必要な情報を表示するだけのスクリプト

#!/usr/bin/env python3
"""nicovideo.py: parse json and show video info"""
__author__ = "Yuto Tokunaga"
import sys
import os
import glob
import json
def print_usage():
usage = "usage: nicovideo.py [option] [file/directory]\n" +\
"\n" +\
" options list: list files\n" +\
" show: show file desctiption\n" +\
"\n"
print(usage)
def list_files(dirname):
files = glob.glob(dirname + '/*.json')
for f in files:
jsonfile = open(f)
jsondata = json.load(jsonfile)
print("{0}: {1}".format(f.split('/')[-1].rstrip('.json'), jsondata['videoTitle']))
print("\t{0}".format(jsondata['thumbDescription']))
jsonfile.close()
def show_file(file):
filename = ""
if os.path.exists(file):
if file.split('.')[-1] != 'json':
print("file is not JSON file")
return
filename = file
elif os.path.exists(file + '.json'):
filename = file + '.json'
else:
print("file not exists!")
return
jsonfile = open(filename)
jsondata = json.load(jsonfile)
print("{0}: {1}".format(filename.split('/')[-1].rstrip('.json'), jsondata['videoTitle']))
print("\t{0}".format(jsondata['description']))
print("")
"""parse tag"""
tagstr = jsondata['tagList'].strip('/')
tagdatas = json.loads(tagstr)
taglist = []
for tag in tagdatas:
taglist.append(tag['tag'])
print(taglist)
if __name__ == '__main__':
if len(sys.argv) < 2:
print_usage()
elif sys.argv[1] == 'list':
if len(sys.argv) < 3:
list_files('.')
else:
list_files(sys.argv[2])
elif sys.argv[1] == 'show':
if len(sys.argv) < 3:
print("invalid format!")
else:
show_file(sys.argv[2])
else:
print("invalid format!")
view raw nicovideo.py hosted with ❤ by GitHub



Python楽しい✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌

Qt 勉強会 #2 @Osakaに参加した

作りかけのものでも発表しようという気に現地でなって,QMLの話聞きながら即席プレゼン資料作った



QMLのお話はQUIt Codingというサイトで公開されているFive In a Rowというゲームを題材にされていたが,このなかの`Flickable``transform``Rotation`を用いて3Dっぽい表示をするというのがとても面白かった

あとで見つけた資料
Qt Quick Game Programming
これのP.30

結構長いこと記事書いてない

Twitterの比率を減らしてブログを書くようにしようと思い始めている
文章をまとめるのはめんどくさいから適当に書く

2014年1月26日日曜日

MitakaをVS2013でビルドする (失敗)



Step1. ソースをDL
4次元デジタル宇宙プロジェクトのページからソースを見つけてDL

Step2. VSで開く
slnファイルがついてないのでVSでプロジェクトを作成
ソリューション名をMitaka、プロジェクト名をMitakaとした場合、VSのソリューションディレクトリ/Mitaka/Mitaka/にソースのZIPを展開して出てきたcommon/,README.txt,Mitaka/を移動
こういう名前の付け方すると結果的にMitakaが三層重なることになるけど気にしない
そして移したファイルをVSのソリューションエクスプローラーにドラッグアンドドロップしてやるとヘッダ、ソースが登録される

Step3. 依存ライブラリ
DirectXのライブラリはWindows SDK8.1入れれば大丈夫?
Readmeに書いてある以外でWindows SDK7.1も必要になるので入れる
入れるときに多分失敗するのでここ見る
http://www.projectgroup.info/tips/Others/comm_0004.html
めんどくせえ…

libjpeg,libpng,zlibのソースを頑張ってDLする
zlibはwindows用のバイナリが公開されてるが(14/01/26現在)libpngのビルド時にソースが必要になる
libjpegビルド時にnmakeしたらwin32.makが見つからないとか言われてンンンってなるから
C:\Program Files\Microsoft SDKs\Windows\v7.0\Include\Win32.Makを
C:\Program Files(x86)\Microsoft Visual Studio 12.0\VC\includeにコピーしとく
なんでこんな作業が必要なんだ
でlibjpegをここらへん見ながらビルド
マルチスレッドとかなんとかいうのは知らない
http://oshiro.bpe.es.osaka-u.ac.jp/people/staff/imura/products/JpegFileIO

libpngは↑こ↓こ
http://xeo.sakura.ne.jp/wordpress/201202/program/361/

Step3. 依存ライブラリをプロジェクトから参照
さっきビルドできたやつをプロジェクトから見えるようにする
http://blog.livedoor.jp/tmako123-programming/archives/22001972.html
zlibはバイナリで配布してあるやつがそれっぽい階層になってるからいいとして
libjpeg、libpngはどのファイルを移動すればいいかパッとわからない
不親切だ
とりあえずlib/には.libを、include/には.hを全部入れとけばいいかな?

Step4. ソース修正
これでやっとビルドできるかというとそうではない
VSでビルド→プロジェクトのビルド してやるとエラーいっぱい吐くので修正してやる

まずM_PIが見つからないやつ
http://www.atinfinity.info/blog/archives/14
編集→検索と置換→フォルダーを指定して検索
でプロジェクト内で"#define _USE_MATH_DEFINES
を追記追記追記

minが見つからないやつ
#include <algorithm.h>
を追記

_CRT_SECURE_NO_WARNINGS
http://forums.codeguru.com/showthread.php?509615-How-to-use-define-_CRT_SECURE_NO_DEPRECATE&p=2001735#post2001735
_CRT_SECURE_NO_WARNINGSをプロジェクトのプロパティ→C/C++→プリプロセッサ→プリプロセッサの定義 に追加
何の根本的解決にもなってない気がするがとりあえずこれで

error C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _stricmp.
stricmpを_stricmpに書き換える


error C2065: 'Z_BEST_COMPRESSION' : 定義されていない識別子です。
#include  <zlib.h>

error C1083: include ファイルを開けません。'gl/wglext.h'
http://www.opengl.org/registry/#headers から4ファイルをダウンロードし
C:\Program Files (x86)\Windows Kits\8.1\Include\um\gl
に移動

cannot open include file 'afxres.h'

未解決の外部シンボルなんちゃら
プロジェクトのプロパティ→リンカー→入力→追加の依存ファイル
glu32.lib
opengl32.lib
libjpeg.lib
libpng.lib
を追記


……まだまだエラーが出る
そろそろ諦める_(:3」 ∠)_