本日のTwitterまとめ

@yasutomo57jpの発言ログ

  • 23:38:27 : 飲み会お疲れさまです~。二次会はなぜかデンエン
  • 18:11:22 : 出かけるまでの残り時間で論文の採録条件をクリアしてやる
  • 18:10:36 : そろそろ出かける準備しないと・・・.
  • 17:52:46 : ISOファイルを光学ドライブとして使える便利グッズ「UMA-ISO」 http://ff.im/f65fS
  • 17:51:46 : GiB ギビバイト は読めたけど, EiBの読み方がわからなかった.調べたら,エクスビバイトだった.HDDの容量の単位は難しい….
  • 17:36:50 : またまた空腹に対してしょうが湯でしのいでみよう.
  • 17:34:18 : 腹減ったー.でも今食べるとなぁ….
  • 17:23:28 : 実験の被験者してきた.
  • 16:18:40 : Texのコンパイルで出たWarningの数だけ腹筋しようか… QT: @nishio: コンパイルエラーの行数だけ腹筋させられる
  • 16:11:40 : 最終的に,積領域,和領域という表記にしました.
  • 16:10:20 : @akira @sealightworking @tanebo 警備員的制度なんでこんなに絶妙なんだろうか.
  • 16:08:28 : いい言葉が見当たらない.別の表現をしよう.
  • 16:04:10 : 領域二つのAND部分を「共通領域」と呼ぶなら,OR部分の「○○領域」はなんという?
  • 15:13:31 : harpiaすごい.グラフィカルにプログラミングした結果,ソースコードを出力してくれる.
  • 14:24:43 : このページ http://bit.ly/csfKpb 見て,自分の複数のリポジトリを統合・整理した.
  • 14:20:01 : iWnnの日本語変換すごすぎる.時間や季節を考慮して変換候補を出してきやがる.
  • 14:18:34 : Wnnの名前の由来:「Watashino Namaeha Nakanodesu」と入力して正しく「私の名前は中野です」と一括変換できるような連文節変換を実現することを目指して開発されたことから、その文字列の頭文字を取ってWnnという名前がつけられた。
  • 14:17:42 : ちょ,スマートフォンHT-03Aの日本語入力はiWnnなのか!
  • 14:14:48 : Google DocsとGoogle Sitesが3月からIE6のサポートを停止 http://ff.im/f5GQI
  • 13:24:52 : TweetDeckで何個かListを表示させたら画面が超でかくなった.
  • 12:39:53 : C++のテンプレートは,traitsを使いこなせるかどうかにかかってる.
  • 12:39:18 : ホームディレクトリの整理.適宜バージョン管理システムにつっこんでいってる.
  • 11:31:03 : いつのまにか,D言語が D2.0 になってる…
  • 10:48:12 : ギター弾いてて気付いたら朝マックの時間終わってるという…。しかたなく松屋
  • 09:32:01 : Pentium 4 , メモリ1GB, 865PEチップセットのマザーボード セットならヤフオクで売れるかな・・・
  • 09:29:08 : Ruby on Railsで遊んでたらこんな時間になってしまった.早くしないと朝マックが終わってしまう.
  • 08:25:53 : 久しぶりに朝マックしたくなった.
  • 08:10:26 : EvernoteのOCRは,文字の回転(というか紙の回転)にも対応してる!
  • 03:47:59 : 前から作ってた自分用のWebベースの論文管理システムがもうちょいで完成しそう.
  • 03:41:51 : もう寝よう・・・明日は早起きして昨日の分頑張る
  • 02:04:54 : proceedingsは会議論文集全体をさし,inproceedingsは会議論文集のうちの1論文をさす.
  • 00:44:56 : お礼なんていいよ~. QT @akchon: ありがとうございます。今度お礼にお菓子買っていきます! QT @yasutomo57jp: じゃあ・・・どうぞ QT @akchon: 大丈夫です! むしろ今日のお昼にKFC食べてしまったことの方が心配です。
  • 00:37:39 : じゃあ・・・どうぞ QT @akchon: 大丈夫です! むしろ今日のお昼にKFC食べてしまったことの方が心配です。 QT @yasutomo57jp: 昨日のだけど大丈夫? QT @akchon: 食べていいですか? ねぇねぇ食べていいですか?
  • 00:33:18 : 昨日のだけど大丈夫? QT @akchon: 食べていいですか? ねぇねぇ食べていいですか? QT @yasutomo57jp: バイオハザードになりかねない QT @akchon: なんと…?! QT @yasutomo57jp: あああ,研究室にからこの唐揚げ忘れてる・・・
  • 00:32:19 : 明日食べても大丈夫かな・・・ QT @akchon: 唐揚げどうするのですか? QT @akchon: なんと…?! QT @yasutomo57jp: あああ,研究室にからこの唐揚げ忘れてる・・・
  • 00:31:04 : バイオハザードになりかねない QT @akchon: なんと…?! QT @yasutomo57jp: あああ,研究室にからこの唐揚げ忘れてる・・・
  • 00:27:48 : あああ,研究室にからこの唐揚げ忘れてる・・・

見て便利・撮られても安心な「変身カメラ」

以前開催したイベント:「体感しよう!あいあいネット」で,大々的に紹介した「変身カメラ」のコンセプトムービーを作っているのですが,とりあえずYoutubeにアップロードしてみました.


D

まだ音無し,カクカク,「※実際の結果とは多少異なります」付きですが….ちなみに映像に映っている人は私です.

このような防犯カメラの映像をインターネットに流す場合,プライバシの侵害が大きな問題となるのですが,この「変身カメラ」ような映像ならば,インターネットに公開してもプライバシ問題を気にする必要はありません.

ちなみに私の研究は,この「変身カメラ」のための「背景画像生成」です.

RubyからSqlite3をさわる

インストールでいつもハマるのでメモ.OSはUbuntuです.

sudo apt-get install ruby-dev

sudo apt-get install rubygems

sudo apt-get install sqlite3

sudo apt-get install libsqlite3-dev

gem install sqlite3-ruby

OpenMPについて

初心者にありがちなミスが,forループしてるところ全部に

#pragma omp parallel for
for(int i=0;i<max;i++){
・・・
}

をつけてしまうこと.

つけまくると各forループでスレッドが生成されて,並列で実行はされるのですが,大きな落とし穴があり,必ずしも高速で実行されるとは限らない.

つまり,イメージとしては

スレッド作って
ループの処理して
(スレッド終わって)
またスレッド作って
ループの処理して
(スレッド終わって)
またスレッド作って
ループの処理して
(スレッド終わって)
・・・

となるわけです.

こういうときには,

#pragma omp parallel
{
#pragma omp for
for(int i=0;i<max;i++){
}
#pragma omp for
for(int i=0;i<max;i++){
}
・・・
}

とすればよい.イメージとしては

スレッド作って
ループの処理して
ループの処理して
ループの処理して
・・・

となる.

こうすることで,スレッド作成が最初のときだけになり,無駄にスレッド生成を繰り返してしまうことがなくなり,高速化する.

AGB65シリーズに接続

浅草ギ研の製品で,AGB65-232Cというボードがあります.これを通すと,AGB65-ADCなどのデバイスをRS-232Cを通じて制御できます.

で,それをLinuxから制御するときのRubyスクリプトがこちら.

require 'rubygems'
require 'serialport'
class AGB65
@@sp=nil
def initialize(port, id)
# 重複して同じものを開くのを防ぐ
@@sp = SerialPort.new(port, 9600, 8, 1, SerialPort::NONE) if @@sp==nil
@id = id
end
def is_open
return true unless @@sp==nil
return false
end
def AGB65.open(port, id)
agb=AGB65.new(port,id)
unless agb.is_open
print "オープンに失敗しました\n"
return nil
end
# ブロックなしの場合はAGB65のインスタンスを返す
return agb unless block_given?
# ブロック付きの場合はブロックを実行
yield agb
# 終了処理
agb.close
end
def setID(id)
@id=id
end
def close
raise "シリアルポートをオープンできていません\n" if @@sp==nil
@@sp.close
@@sp=nil
end
########## 低レベルコマンド
def send(length,cmd)
raise "シリアルポートをオープンできていません\n" if @@sp==nil
# データの配列をC*(unsigned char)に変換して送る
@@sp.write([255, @id, length, cmd].pack("C*"))
end
def recv(n)
raise "シリアルポートをオープンできていません\n" if @@sp==nil
# 受信する文字列
res = ""
# nバイト分繰り返し
n.times{
# 1バイト読み込んでresの後ろに付け足す
res << @@sp.getc
}
# unsigned charの文字列を,数値の配列に戻す
res.unpack("C*")
end
########## 以下は上レベルコマンド
def check
send(254)
recv(4)
end
def setmode(n)
# 12bitモードを明示的に指定したときのみ12bitモードにする
if n == 12
send(100)
else
send(0)
end
end
end

これが,デバイスを制御するクラスで,

#!/usr/bin/ruby
# -*- coding: utf-8 -*-
require 'AGB65.rb'
# 接続開始 デバイス名とIDを指定
agb = AGB65.new("/dev/ttyS0", 120)
begin
# セルフチェック
p agb.check
# コマンドを送信
agb.send(1,1)
# データを受信
p agb.recv(19)
ensure
# 接続終了
agb.close
end
# 実はこんな使い方も(こっちの方がbegin/ensureやcloseが不要な分便利)
AGB65.open("/dev/ttyS0",120) do |agb|
# セルフチェック
agb.check
# コマンドを送信
agb.send(1,1)
# データを受信
p agb.recv(19)
end

こう使います.

このとき,あらかじめ

gem install serialport

でRuby-Serialportをインストールしておきます.

買うモノリスト

  • メモリ(DDR3 PC-10600 1GB×3枚)
  • グラボ(nVIDIA GeForce 9800GT あたり?)
  • 地デジチューナ(PCI接続のやつ)
  • 電源(PCが動かせるくらいのやつ.今持ってる400Wのやつじゃきついか?)

zshrc晒してみる

zshを使うにあたって,まずはプロンプトの設定だろうということで.zshrcを晒します.

変数名は適当です.

local RED=$'%{\e[1;31m%}'
local BLUE2=$'%{\e[1;36m%}'
local GREEN=$'%{\e[1;32m%}'
local YELLOW=$'%{\e[1;33m%}'
local BLUE=$'%{\e[1;34m%}'
local DEFAULT=$'%{\e[1;m%}'
RPROMPT="${BLUE2}%/ ${DEFAULT}"
PROMPT2="${RED}%_%%%{e[m%} "
SPROMPT="%r is correct? [n,y,a,e]: "
[ -n "${REMOTEHOST}${SSH_CONNECTION}" ] && PROMPT="[${YELLOW}%n${DEFAULT}@${RED}%M${DEFAULT}:${BLUE2}%~${DEFAULT}]
%% "
[ -n "${REMOTEHOST}${SSH_CONNECTION}" ] && RPROMPT="$BLUE2%/ ${DEFAULT} [${GREEN}%D{%Y/%m/%d %H:%M}$DEFAULT]"

2010年初エントリ

今年の課題

  • tcshからzshへ乗り換え
  • WindowsノートからMacBookへ乗り換え?
  • (ひょっとしたら)subversionからgitに乗り換え??
  • vimからemacsへ乗り換え

こんな感じでやっていきます.