Ubuntu14.04でpycudaを使えるようにした際のメモ

Ubuntuのバージョンなどは以下の通り.

$ cat /etc/lsb-release

 

DISTRIB_ID=Ubuntu

DISTRIB_RELEASE=14.04

DISTRIB_CODENAME=trusty

DISTRIB_DESCRIPTION="Ubuntu 14.04.5 LTS"

 

$ uname -a

 

Linux ubuntu-XXXXX 3.13.0-24-generic #47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014 x8664 x8664 x86_64 GNU/Linux

基本的には下記のサイトを参考にインストールを実施.

Installing PyCUDA on Ubuntu Linux

1.必要なライブラリ群をインストール

$ sudo apt-get install build-essential python-dev python-setuptools libboost-python-dev libboost-thread-dev -y

2.pycudaのダウンロードとインストール

執筆時点での最新版をダウンロードしてくる.pycuda 2016.1.2

$ wget https://pypi.python.org/packages/e8/3d/4b6b622d8a22cace237abad661a85b289c6f0803ccfa3d2386103307713c/pycuda-2016.1.2.tar.gz#md5=e2a4fb3d304fc20b24aeb9414b8af303

$ tar xzvf pycuda-2016.1.2.tar.gz

$ cd pycuda-2016.1.2/

今回利用するのはPython2.xなので

$ ./configure.py --cuda-root=/usr/local/cuda --cudadrv-lib-dir=/usr/lib/x8664-linux-gnu --boost-inc-dir=/usr/include --boost-lib-dir=/usr/lib --boost-python-libname=boostpython --boost-thread-libname=boost_thread --no-use-shipped-boost

$ sudo python setup.py install

$ sudo pip install .

3.エラーが出たら・・・

./configure.pyの実行時に下記のようなエラーが出た.

ImportError: No module named packaging.version

調べてみると,pipも動かない

$pip --version

Traceback (most recent call last):

File "/usr/bin/pip", line 5, in

from pkg_resources import load_entry_point

File "/usr/local/lib/python2.7/dist-packages/pkg_resources/init.py", line 70, in

import packaging.version

ImportError: No module named 'packaging'

調べてみると最近流行ってるようなエラーだったので,下記サイトの記述を参考に対処してみる.

setuptools-34.0 fails with 'ImportError: No module named packaging.version' #937

$ apt-get purge -y python-pip

$ wget https://bootstrap.pypa.io/get-pip.py

$ python ./get-pip.py

$ apt-get install python-pip

上記の処置によりpipが復活した.

$ pip --version
pip 1.5.4 from /usr/lib/python2.7/dist-packages (python 2.7)

4.サンプルを動かしてみる

下記からソースコード持ってきて実行してみる.

PyCuda/Examples/SimpleSpeedTest

$ python SimpleSpeedTest.py

Using nbr_values == 8192

Calculating 100000 iterations

SourceModule time and first three results:

0.018592s, [ 0.005477 0.005477 0.005477]

Elementwise time and first three results:

2.536487s, [ 0.005477 0.005477 0.005477]

Elementwise Python looping time and first three results:

3.282005s, [ 0.005477 0.005477 0.005477]

GPUArray time and first three results:

6.638698s, [ 0.005477 0.005477 0.005477]

CPU time and first three results:

3.707684s, [ 0.005477 0.005477 0.005477]

動いた気がする.

MapReduce Word Count with GPUs using Pycuda

hadoopからこの辺りの処理移管したい

[ubuntu] apache2+postgresqlのインストールと設定

まずは何も考えずに.

$ sudo apt-get install postgresql

$ sudo apt-get install apache2

postgresqlのロールの設定

$ sudo su postgres

$ cd

$ sql

postgres=# \du

postgres=# CREATE ROLE pguser LOGIN CREATEDB PASSWORD 'password';

postgresqlにDBを作ってみる

postgres=# CREATE DATABASE pguserdb OWNER pguser;

CREATE DATABASE

postgres=# \l

リモートアクセスの設定

$ sudo vi /etc/postgresql/9.5/main/pg_hba.conf

ローカルのサーバなのでこんな感じの設定にした

local all postgres peer

# TYPE DATABASE USER ADDRESS METHOD

# "local" is for Unix domain socket connections only

local all all password

# IPv4 local connections:

host all all 127.0.0.1/32 trust

host all all 192.168.11.0/8 trust

# IPv6 local connections:

host all all ::1/128 trust

# Allow replication connections from localhost, by a user with the

# replication privilege.

#local replication postgres trust

#host replication postgres 127.0.0.1/32 trust

#host replication postgres ::1/128 trust

CNC3020を買ったのでいろいろ揃えてみた

中華CNCを買ってみたので消耗品を揃えたい.

CNC3020という機種で,aliexpressなどでは400~900USD程度で購入できますが,
中国語や英語に不安があるので,ちょっと高めですがヤフオクで購入しました.


シャンク径は3.17mm,コレットナットはER11のものだった.
また,付属していたエンドミルは3mmのものとVカッターが4本だった.


モノタロウで消耗品を探してみるも,結構お値段が張るのでAmazonで色々探してみた.
付属のエンドミルが3mmと少し太すぎるのと,はじめはエンドミルもたくさん折りそうなので安価なものを色々買ってみたので紹介.


コレットナット コレット締付ナット コレットチャック スレッドスプリングクランプナットER11
コレットナット,付属のスプリングコレットが簡単に外れなさそうなので,念のため一つ買っておく.


スプリングコレット
スプリングコレットの11個セット.様々な径のエンドミルに対応できる.

エンドミル 1.5mm
エンドミル 1.0mm
エンドミル 0.2mm
各種エンドミル.

高さ自由クランプ
様々なワークに対応できるよう,厚みが調整できるクランプ.
削り出して作れるんだろうけど,とりあえず買っておく.

[ubuntu] スタティックなIPアドレスを設定しようとしてハマる

下記の通り設定して再起動

$ sudo vi /etc/network/interfaces

auto ens32

iface ens32 inet static

address 192.168.11.XXX

netmask 255.255.255.0

gateway 192.168.11.1

dns-servers 192.168.11.1

$ sudo reboot

再起動後,IPアドレスは設定したものに変わっていたが名前解決ができなくなっているようだった.

ubuntuではnameserverを下記のbaseというファイルに記述する必要があるとのことで確認してみる.ちなみになにも設定されていないとcatしても何もでてこない.

$ cat /etc/resolvconf/resolv.conf.d/base

設定を書き込む

$ sudo vi /etc/resolvconf/resolv.conf.d/base

nameserver 192.168.11.1

設定を適用する

$ sudo resolvconf -u

resolv.confに設定が反映されていることを確認して対応完了

$ cat /etc/resolv.conf

Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)

DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN

nameserver 192.168.11.1

GTX TITAN Xを買ったので,cuDNNをインストールする

cuDNNその前に

ここまでの段取りは下記に記してある

TITAN Xを買ったので,CUDAをセットアップしてみる その1

TITAN Xを買ったので,CUDAをセットアップしてみる その2

cuDNNのインストール

 ダウンロードサイトからダウンロードが可能ですが,その前にデベロッパープログラムへの参加が必要

 幾つかのアンケートに答えてダウンロードする.

cuDNN v5.1 Library for Linux

tar xzf cudnn-7.5-linux-x64-v5.1.tgz

sudo cp cuda/inclide/cudnn.h /usr/local/cuda-7.5/include

sudo cp cuda/lib64/* /usr/local/cuda-7.5/lib64

cuDNN v5.1 Runtime Library for Linux (Deb)のインストール

sudo dpkg -i libcudnn55.1.3-1+cuda7.5amd64.deb

パスの設定

vi .bashrc

export CUDA_HOME=/usr/local/cuda
export PATH=${CUDA_HOME}/bin:${PATH}
export LD_LIBRARY_PATH=${CUDA_HOME}/lib64:${LD_LIBRARY_PATH}

source .bashrc

GTX TITAN Xを買ったので,chainerを使ってみるまでの話

## 諸々のセットアップ

環境やらドライバ,CUDAのセットアップはこの辺りにまとめてあります

TITAN Xを買ったので,CUDAをセットアップしてみる その1

TITAN Xを買ったので,CUDAをセットアップしてみる その1

GTX TITAN Xを買ったので,cuDNNをインストールする

sudo apt-get install python-pip

sudo apt-get install python-dev

sudo pip install chainer

python-devが入っていないと,こんな感じの警告が出るはず

fatal error: Python.h: そのようなファイルやディレクトリはありません

chainerのソース入手

sudo apt-get install git

https://github.com/pfnet/chainer.git

git clone https://github.com/pfnet/chainer.git

chainerの実行

python chainer/examples/mnist/train_mnist.py -g 0

実行時に下記のエラーが出た場合はcuDNN入れてない,パスが通っていなくて探せてない.などが考えられる.

cuda.py:87: UserWarning: cuDNN is not enabled.

cuDNN v5.1 Runtime Library for Linux (Deb)のインストール

dpkg -i libcudnn55.1.3-1+cuda7.5amd64-deb

補足

 chainerのインストール前にcuDNNをインストールしていなかったなどで下記のエラーがでた場合,chainerを再インストールして対処する.

cuda.py:87: UserWarning: cuDNN is not enabled.

sudo pip uninstall chainer

sudo pip install chainer

python

import cupy

import cupy.cudnn

エラーが出なければ使えるはず

TITAN Xを買ったので,CUDAをセットアップしてみる その2

TITAN Xを買ったので,CUDAをセットアップしてみる その1からの続き

6.CUDAのインストール

この時点でGUIが起動しないので,予め入れておいたSSHから入って作業を行う.

CUDAのダウンロードサイトからドライバを取ってくる.

今回はCUDA7.5をダウンロードした.1.9GB程度あるので暫し待つ.

wget http://developer.download.nvidia.com/compute/cuda/7.5/Prod/localinstallers/cuda-repo-ubuntu1404-7-5-local7.5-18_amd64.deb

sudo dpkg -i cuda-repo-ubuntu14047.5-18amd64.deb

sudo apt-get update

sudo apt-get install cuda

7.インストール後の状態を確認する

作業が粗いけどdeviceQueryしてみる

cd /usr/local/cuda-7.5/samples/1_Utilities/deviceQuery

sudo make

sudo ./deviceQuery

./deviceQuery Starting...

 CUDA Device Query (Runtime API) version (CUDART static linking)

Detected 1 CUDA Capable device(s)

Device 0: "GeForce GTX TITAN X"
  CUDA Driver Version / Runtime Version          7.5 / 7.5
  CUDA Capability Major/Minor version number:    5.2
  Total amount of global memory:                 12288 MBytes (12884705280 bytes)
  (24) Multiprocessors, (128) CUDA Cores/MP:     3072 CUDA Cores
  GPU Max Clock rate:                            1076 MHz (1.08 GHz)
  Memory Clock rate:                             3505 Mhz
  Memory Bus Width:                              384-bit
  L2 Cache Size:                                 3145728 bytes
  Maximum Texture Dimension Size (x,y,z)         1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
  Maximum Layered 1D Texture Size, (num) layers  1D=(16384), 2048 layers
  Maximum Layered 2D Texture Size, (num) layers  2D=(16384, 16384), 2048 layers
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       49152 bytes
  Total number of registers available per block: 65536
  Warp size:                                     32
  Maximum number of threads per multiprocessor:  2048
  Maximum number of threads per block:           1024
  Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
  Max dimension size of a grid size    (x,y,z): (2147483647, 65535, 65535)
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             512 bytes
  Concurrent copy and kernel execution:          Yes with 2 copy engine(s)
  Run time limit on kernels:                     No
  Integrated GPU sharing Host Memory:            No
  Support host page-locked memory mapping:       Yes
  Alignment requirement for Surfaces:            Yes
  Device has ECC support:                        Disabled
  Device supports Unified Addressing (UVA):      Yes
  Device PCI Domain ID / Bus ID / location ID:   0 / 1 / 0
  Compute Mode:
     < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 7.5, CUDA Runtime Version = 7.5, NumDevs = 1, Device0 = GeForce GTX TITAN X
Result = PASS

TITAN Xを買ったので,CUDAをセットアップしてみる その1

1.環境

今回使った環境はこんな感じ

・PC:ASUS M51AC

・電源:[玄人志向 800W PLATINUM](http://www.kuroutoshikou.com/product/power/atx/krpw-pt800w_92_rev2_0/)

・ZOTAC GTX TITAN X

2.BIOSの設定

爆熱グラボなので,殆ど使わないモニタ出力にリソースを使うこともあるまいと思い,BIOSの設定からiGPUを有効にしておいてオンボードでモニタ出力する.

3.Linuxのインストール

今回はubuntu 14.04をインストール ここからubuntu-ja-14.04-desktop-amd64.isoをダウンロードする

DVDに焼いて起動すると,デスクトップにインストールアイコンがあるので,クリックしたらあとはウィザードに従うだけ.

4.SSHのインストール

sudo apt-get install ssh

5.グラフィックボードドライバの更新

5.1 既存のドライバの停止

nouveauというドライバが使われているようなので確認する.これを使いながらnVidiaの純正ドライバを入れてしまうとハマるらしい.

lsmod | grep nouveau

nouveau              1097199  0                                                                                                                        
mxm_wmi                13021  1 nouveau                                                                                                                
ttm                    85115  1 nouveau                                                                                                                
wmi                    19177  3 mxm_wmi,nouveau,asus_wmi                                                                                               
drm_kms_helper         52758  2 i915,nouveau                                                                                                           
drm                   302817  6 ttm,i915,drm_kms_helper,nouveau                                                                                        
i2c_algo_bit           13413  2 i915,nouveau                                                                                                           
video                  19476  3 i915,nouveau,asus_wmi

ブラックリストに入れて立ち上がらないようにする

sudo vi /etc/modprobe.d/blacklist-nouveau.conf

下記を書き込んでおく.

blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off

sudo vi /etc/modprobe.d/nouveau-kms.conf

options nouveau modeset=0

終わったら忘れず再起動する

sudo update-initramfs -u

sudo reboot

再起動して再度lsmod叩いたら何も出てこないはず.

5.2 nVidiaのドライバをインストールする

ダウンロードサイトから下記のものをダウンロードした

製品のタイプ:     GeForce
製品シリーズ:   GeForce 900 Series
製品ファミリー:  GeForce GTX TITAN X
オペレーティングシステム:   Linux 64-bit
言語:      Japanese

困ったときに役に立ちそうなので,今回ダウンロードしたドライバを書き留めておく.

LINUX X64 (AMD64/EM64T) DISPLAY DRIVER
バージョン:    367.44
リリース日:    2016.8.23
オペレーティングシステム:   Linux 64-bit
言語: Japanese
ファイルサイズ:  71.56 MB

ダウンロード

wget http://jp.download.nvidia.com/XFree86/Linux-x8664/367.44/NVIDIA-Linux-x8664-367.44.run

インストールする

sudo sh NVIDIA-Linux-x86_64-367.44.run -a --disable-nouveau

sudo reboot

この時点でXが走ってると怒られる.

less /var/log/nvidia-installer.log

nvidia-installer log file '/var/log/nvidia-installer.log'
creation time: Sun Sep  4 16:58:07 2016
installer version: 367.44

PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

nvidia-installer command line:
  ./nvidia-installer
  -a
  --disable-nouveau

Unable to load: nvidia-installer ncurses v6 user interface

Using: nvidia-installer ncurses user interface
-> Detected 8 CPUs online; setting concurrency level to 8.
-> The file '/tmp/.X0-lock' exists and appears to contain the process ID '1174' of a runnning X server.
ERROR: You appear to be running an X server; please exit X before installing.  For further details, please see the section INSTALLING THE NVIDIA DRIVER in the README available on the Linux driver download page at www.nvidia.com.
ERROR: Installation has failed.  Please see the file '/var/log/nvidia-installer.log' for details.  You may find suggestions on fixing installation problems in the README available on the Linux driver download page at www.nvidia.com.

service --status-all

[ + ]  acpid
[ - ]  anacron
[ - ]  apparmor
[ ? ]  apport
[ + ]  avahi-daemon
[ + ]  bluetooth
[ - ]  brltty
[ ? ]  console-setup
[ + ]  cron
[ + ]  cups
[ + ]  cups-browsed
[ - ]  dbus
[ ? ]  dns-clean
[ + ]  friendly-recovery
[ - ]  grub-common
[ ? ]  irqbalance
[ + ]  kerneloops
[ ? ]  killprocs
[ ? ]  kmod
[ ? ]  lightdm
[ ? ]  networking
[ ? ]  ondemand
[ ? ]  pppd-dns
[ - ]  procps
[ - ]  pulseaudio
[ ? ]  rc.local
[ + ]  resolvconf
[ - ]  rsync
[ + ]  rsyslog
[ + ]  saned
[ ? ]  sendsigs
[ ? ]  speech-dispatcher
[ - ]  ssh
[ - ]  sudo
[ - ]  udev
[ ? ]  umountfs
[ ? ]  umountnfs.sh
[ ? ]  umountroot
[ - ]  unattended-upgrades
[ - ]  urandom
[ - ]  x11-common

Xを落とす

sudo service lightdm stop

なんかいろいろ怒られてもインストールを強行すればOK   終わったらとりあえず再起動

sudo reboot

その2へ続く

matplotlibで$DISPLAYが未定義の際に怒られた場合の対応

ssh経由でリモートログインしていて,matplotlibを使った可視化のスクリプトを実行した際に下記のエラーが出た

_tkinter.TclError: no display name and no $DISPLAY environment variable

今回はプロットした結果をGUIを出すコードではなく,ファイルに出力するコードだったのだが関係なく出るらしい.

対策 その1

/etc/matplotlibrc で以下のように変更する

- backend : TkAgg

+ backend : Agg

これによりmatplotlibのデフォルトバックエンドがTkAggから変更される

対策 その2

matplotlibrc はユーザーディレクトリにもある模様

おそらくファイルが存在してないので作る

vi ~/.config/matplotlib/matplotlibrc

backend : Agg #この行を追記

今回はこれで解決

対策 その3(未検証)

調べたらソースに書き加える方法もある模様

import matplotlib

Force matplotlib to not use any Xwindows backend.

matplotlib.use('Agg')

(参考)エラー全文

$ python plot3d.py

/usr/local/lib/python2.7/dist-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.
warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')
Traceback (most recent call last):
File "plot3d.py", line 55, in <module>
  Plot()
File "plot3d.py", line 31, in Plot
  fig = plt.figure()
File "/usr/local/lib/python2.7/dist-packages/matplotlib/pyplot.py", line 527, in figure
  **kwargs)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/backends/backend_tkagg.py", line 84, in new_figure_manager
  return new_figure_manager_given_figure(num, figure)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/backends/backend_tkagg.py", line 92, in new_figure_manager_given_figure
  window = Tk.Tk()
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1767, in __init__
  self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable

[python]ubuntuにmatplotlibを入れようとしてハマる

ubuntuでmatplotlibを使いたい

正面切ってインストールしてみる

$ sudo pip install scipy

下記のようなエラーが出る

raise NotFoundError('no lapack/blas resources found') numpy.distutils.system_info.NotFoundError: no lapack/blas resources found

lapackがないと怒られたが,この辺の依存関係を自分で解決しなきゃならないのかなと思うと荷が重い.

そこで調べてみるとpipでなく,apt-getでもインストールができる模様なので,この際よく使うものをまとめてインストールしておいた.なお,必要ならpython-devを入れておくとともに,依存関係ありそうなものも合わせてインストールした.

$ sudo apt-get install python python-dev

$ sudo apt-get install libpng-dev libjpeg8-dev libfreetype6-dev

$ sudo apt-get install python-numpy python-scipy python-matplotlib

# さらにハマる apt-getで入れてみたけど下記のエラーが出た

NameError: global name 'matplotlib' is not defined

そこでもう一度pipで入れてみる

$ sudo pip install matplotlib

The directory '/home/(user)/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag. The directory '/home/(user)/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag. Requirement already satisfied (use --upgrade to upgrade): matplotlib in /usr/local/lib/python2.7/dist-packages Requirement already satisfied (use --upgrade to upgrade): python-dateutil in /usr/local/lib/python2.7/dist-packages (from matplotlib) Requirement already satisfied (use --upgrade to upgrade): numpy>=1.6 in /usr/local/lib/python2.7/dist-packages (from matplotlib) Requirement already satisfied (use --upgrade to upgrade): pytz in /usr/local/lib/python2.7/dist-packages (from matplotlib) Requirement already satisfied (use --upgrade to upgrade): pyparsing!=2.0.0,!=2.0.4,!=2.1.2,>=1.5.6 in /usr/local/lib/python2.7/dist-packages (from matplotlib) Requirement already satisfied (use --upgrade to upgrade): cycler in /usr/local/lib/python2.7/dist-packages (from matplotlib) Requirement already satisfied (use --upgrade to upgrade): six>=1.5 in /usr/local/lib/python2.7/dist-packages (from python-dateutil->matplotlib) /usr/local/lib/python2.7/dist-packages/pip/vendor/requests/packages/urllib3/util/ssl.py:318: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#snimissingwarning. SNIMissingWarning /usr/local/lib/python2.7/dist-packages/pip/vendor/requests/packages/urllib3/util/ssl.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.

言われるがままにオプションつけてみる

$ sudo -H pip install matplotlib

Requirement already satisfied (use --upgrade to upgrade): matplotlib in /usr/local/lib/python2.7/dist-packages Requirement already satisfied (use --upgrade to upgrade): python-dateutil in /usr/local/lib/python2.7/dist-packages (from matplotlib) Requirement already satisfied (use --upgrade to upgrade): numpy>=1.6 in /usr/local/lib/python2.7/dist-packages (from matplotlib) Requirement already satisfied (use --upgrade to upgrade): pytz in /usr/local/lib/python2.7/dist-packages (from matplotlib) Requirement already satisfied (use --upgrade to upgrade): pyparsing!=2.0.0,!=2.0.4,!=2.1.2,>=1.5.6 in /usr/local/lib/python2.7/dist-packages (from matplotlib) Requirement already satisfied (use --upgrade to upgrade): cycler in /usr/local/lib/python2.7/dist-packages (from matplotlib) Requirement already satisfied (use --upgrade to upgrade): six>=1.5 in /usr/local/lib/python2.7/dist-packages (from python-dateutil->matplotlib)

エラーは減った気がするので一旦ここでアンインストール

$ sudo -H pip uninstall matplotlib

アンインストールできたようなので再インストール

$ sudo -H pip install matplotlib

ログの内容は変わったけどSuccessfullyの文字が見えない

Requirement already satisfied (use --upgrade to upgrade): matplotlib in /usr/lib/pymodules/python2.7 Requirement already satisfied (use --upgrade to upgrade): numpy>=1.5 in /usr/local/lib/python2.7/dist-packages (from matplotlib) Requirement already satisfied (use --upgrade to upgrade): python-dateutil in /usr/local/lib/python2.7/dist-packages (from matplotlib) Collecting tornado (from matplotlib) /usr/local/lib/python2.7/dist-packages/pip/vendor/requests/packages/urllib3/util/ssl.py:318: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#snimissingwarning. SNIMissingWarning /usr/local/lib/python2.7/dist-packages/pip/vendor/requests/packages/urllib3/util/ssl.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning. InsecurePlatformWarning Downloading tornado-4.4.1.tar.gz (456kB) 100% |████████████████████████████████| 460kB 744kB/s Requirement already satisfied (use --upgrade to upgrade): pyparsing>=1.5.6 in /usr/local/lib/python2.7/dist-packages (from matplotlib) Requirement already satisfied (use --upgrade to upgrade): nose in /usr/local/lib/python2.7/dist-packages (from matplotlib) Requirement already satisfied (use --upgrade to upgrade): six>=1.5 in /usr/local/lib/python2.7/dist-packages (from python-dateutil->matplotlib) Collecting backports.sslmatchhostname (from tornado->matplotlib) Downloading backports.sslmatchhostname-3.5.0.1.tar.gz Collecting singledispatch (from tornado->matplotlib) Downloading singledispatch-3.4.0.3-py2.py3-none-any.whl Collecting certifi (from tornado->matplotlib) Downloading certifi-2016.8.8-py2.py3-none-any.whl (384kB) 100% |████████████████████████████████| 389kB 686kB/s Collecting backportsabc>=0.4 (from tornado->matplotlib) Downloading backportsabc-0.4-py2.py3-none-any.whl Building wheels for collected packages: tornado, backports.ssl-match-hostname Running setup.py bdistwheel for tornado ... done Stored in directory: /root/.cache/pip/wheels/c2/65/99/727ea73b981e0ef1fb8ab678ecf86f39c809230f5301ac3a40 Running setup.py bdistwheel for backports.ssl-match-hostname ... done Stored in directory: /root/.cache/pip/wheels/5d/72/36/b2a31507b613967b728edc33378a5ff2ada0f62855b93c5ae1 Successfully built tornado backports.ssl-match-hostname Installing collected packages: backports.ssl-match-hostname, singledispatch, certifi, backports-abc, tornado Successfully installed backports-abc-0.4 backports.ssl-match-hostname-3.5.0.1 certifi-2016.8.8 singledispatch-3.4.0.3 tornado-4.4.1

実行してみるとやっぱり参照できてない旨のエラーが出る

NameError: global name 'matplotlib' is not defined

困ったので再度apt-getでupgradeかけてみる

sudo apt-get upgrade python-matplotlib

もう全部再インストールしたれ

sudo -H pip install numpy python-dateutil pytz pyparsing six --force-reinstall --upgrade sudo -H pip install matplotlib --force-reinstall --upgrade

Collecting matplotlib /usr/local/lib/python2.7/dist-packages/pip/vendor/requests/packages/urllib3/util/ssl.py:318: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#snimissingwarning. SNIMissingWarning /usr/local/lib/python2.7/dist-packages/pip/vendor/requests/packages/urllib3/util/ssl.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning. InsecurePlatformWarning Downloading matplotlib-1.5.2-cp27-cp27mu-manylinux1i686.whl (13.4MB) 100% |████████████████████████████████| 13.4MB 56kB/s Collecting python-dateutil (from matplotlib) Using cached pythondateutil-2.5.3-py2.py3-none-any.whl Collecting numpy>=1.6 (from matplotlib) Using cached numpy-1.11.1-cp27-cp27mu-manylinux1_i686.whl Collecting pytz (from matplotlib) Using cached pytz-2016.6.1-py2.py3-none-any.whl Collecting pyparsing!=2.0.0,!=2.0.4,!=2.1.2,>=1.5.6 (from matplotlib) Using cached pyparsing-2.1.8-py2.py3-none-any.whl Collecting cycler (from matplotlib) Downloading cycler-0.10.0-py2.py3-none-any.whl Collecting six>=1.5 (from python-dateutil->matplotlib) Using cached six-1.10.0-py2.py3-none-any.whl Installing collected packages: six, python-dateutil, numpy, pytz, pyparsing, cycler, matplotlib Found existing installation: six 1.10.0 Uninstalling six-1.10.0: Successfully uninstalled six-1.10.0 Found existing installation: python-dateutil 2.5.3 Uninstalling python-dateutil-2.5.3: Successfully uninstalled python-dateutil-2.5.3 Found existing installation: numpy 1.11.1 Uninstalling numpy-1.11.1: Successfully uninstalled numpy-1.11.1 Found existing installation: pytz 2016.6.1 Uninstalling pytz-2016.6.1: Successfully uninstalled pytz-2016.6.1 Found existing installation: pyparsing 2.1.8 Uninstalling pyparsing-2.1.8: Successfully uninstalled pyparsing-2.1.8 Found existing installation: cycler 0.10.0 Uninstalling cycler-0.10.0: Successfully uninstalled cycler-0.10.0 Successfully installed cycler-0.10.0 matplotlib-1.5.2 numpy-1.11.1 pyparsing-2.1.8 python-dateutil-2.5.3 pytz-2016.6.1 six-1.10.0

"Successfully installed" が出たので,試してみるにimportはできるのでインストールはできた模様

python import matplotlib

今度は実行時のエラーが出る

$ python plot3d.py /usr/local/lib/python2.7/dist-packages/matplotlib/fontmanager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment. warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.') Traceback (most recent call last): File "plot3d.py", line 55, in Plot() File "plot3d.py", line 31, in Plot fig = plt.figure() File "/usr/local/lib/python2.7/dist-packages/matplotlib/pyplot.py", line 527, in figure **kwargs) File "/usr/local/lib/python2.7/dist-packages/matplotlib/backends/backendtkagg.py", line 84, in newfiguremanager return newfiguremanagergivenfigure(num, figure) File "/usr/local/lib/python2.7/dist-packages/matplotlib/backends/backendtkagg.py", line 92, in newfiguremanagergiven_figure window = Tk.Tk() File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1767, in init self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use) _tkinter.TclError: no display name and no $DISPLAY environment variable

ひとまずインストールはできて,実行時のエラーは別の問題の模様なので終了→matplotlibで$DISPLAYが未定義の際に怒られた場合の対応

[python] pip installしたのにImportErrorが出る場合の対応

環境;MacOS X 10.10

python-pipは便利

pip install hoge

でも時々こんなエラーを目にする.

ImportError: No module named hove

PYTHONPATHでインストールしたディレクトリを参照していないのが原因

echo $PYTHONPATH

で参照して,

/Library/Python/2.7/site-packages/ /usr/local/lib/python2.7/site-packages/

あたりが入っているか確認.なければ下記の通り~/.bashrcに追加する

export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages/```

[python] ImportError: No module named cv2を解決する

$ python                                                                                             
Python 2.7.6 (default, Jun 22 2015, 17:53:06) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named cv2


$ sudo apt-get install python-opencv

UbuntuにSubversionをインストールする

ソースを書く仕事が多くなってきて,管理に困ってきたのでちょっと対策しようと思い立ったので書き留めておく.

ubuntu 14.40上に構築した.

実現したいこと

  • リポジトリには「http://(ホストのIP)/svn/(リポジトリ)」でアクセスしたい

  • サーバー側のディレクトリは「/var/svn/(リポジトリ)」に配置

  • リポジトリの作成やメンテナンスはリモートからSSHで入って行う前提とする

インストール

sudo apt-get update
sudo apt-get install subversion
sudo apt-get install libapache2-svn

リポジトリの保存場所の準備

とりあえず「projectA」と「projectB」というレポジトリを作ってみる

mkdir /var/svn/
sudo svnadmin create /var/svn/project_A
sudo svnadmin create /var/svn/project_B
sudo chown -R www-data:www-data project_A  #www-data は Ubuntu の Apache ユーザ
sudo chown -R www-data:www-data project_B

apatch2の設定

vi /etc/apache2/mods-enabled/dav_svn.conf

<Location /svn>
   DAV svn
   SVNParentPath /var/svn
   #AuthType Digest
   #AuthName "realm"
   #AuthUserFile /etc/apache2/.htdigest
   #Require valid-user
</Location>

※今回ローカルなので特に認証などは入れない

sudo service apache2 restart

この時点でWebブラウザから当該ディレクトリを見れるか試してみる

http://(ホストのIP)/svn/project_A/

にアクセスすればリポジトリらしきものができているはず

WebSVNの設定

リポジトリの閲覧ができるだけ.

非開発者には便利だけどリポジトリの作成やメンテはできないので注意.

sudo apt-get install websvn

※インストールされたディレクトリが公開ディレクトリと異なるはずなのでコピーする
sudo cp -r /usr/share/websvn/ /var/www

Ubuntuでsamba使ってファイル共有したけどMacから接続できない

複数のUbuntuマシンとMacならびにWindows間でファイル共有したくって,/etc/samba/smb.confを既にsamba稼働中の他のUbuntuマシンから流用して書き換えた.
その際,あるubuntuマシンだけでWindowsからは接続可能なのに,Macから接続するとエラーになる事象があった.

sambaのバージョンを調べてみると,Macから接続できないUbuntuマシンだけsambaが4.3.8だった.

sambaのアップグレードしたら接続できるようになった.
一体何だったんだろう

$ samba --version
Version 4.3.8-Ubuntu

$ sudo apt-get install samba

$ samba --version
Version 4.3.9-Ubuntu

VMwarePlayerで「パワーオン中にエラーが発生しました」と表示された時

Windows7上のVMwarePlayerで仮想マシンを立ち上げた際,こんなエラーが表示された

VMwarePlayer.png

パワーオン中にエラーが発生しました: Transport (VMDB) error -44: Message.

The VMware Authorization Service is not running。


解決方法


「コントロールパネル」→「管理ツール」→「サービス」で「VMAuthdService」が起動しているか調べる.
起動していなければ起動する.

自動起動になってるはずなんだけど,どうして止まっちゃったんだろう・・・

UbuntuでTeXを使う

メインPCにTeX入れて持ち歩くほど論文書かないし(←),けっこうサイズも大きくて邪魔なので,仮想マシンにTexを入れてsambaで共有かけてドキュメントを作る環境を構築することにした.
# リポジトリを追加
$ sudo apt-add-repository ppa:texlive-backports/ppa

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install texlive-lang-cjk

$ which platex
$ which dvipdfmx
$ which evince

# dviとpdfの生成
$ platex sample.tex
$ dvipdfmx sample

# 閲覧
$ evince sample.pdf


sambaでファイル共有するにはこちらの記事を参照
Raspberry Piでsambaを使う

SNMPサーバーのセットアップ

最近NASやらサーバやら増えてきたので,SNMPを使ってログだけ集めておこうと思い始めた.

止まってても困るようなサーバーはそう多くないが,特にHDDは心配なのでSMARTの情報なんかはあげれないだろうかと思い,サーバ(監視側)をセットアップしてみた


環境

・CentOS7 x_64 minimal(仮想マシン)

手順

(1) 仮想マシンへのCentOSのインストール
(2) net-toolsのインストール
 CentOS7のminimalにはifconfigが入ってないため
(3) net-snmpのインストール

$ yum -y install net-snmp
$ yum -y install net-snmp-utils

# 設定
#ドキュメント:http://www.suzu841.com/snmp.html
$ vi /etc/snmp/snmpd.conf

#
# ---------------------------------------
# com2sec (ネットワーク範囲とコミュニティ名)
# group (セキュリティについて設定)
# view (snmpにて参照可能な情報範囲の指定)
# access (アクセスコントロールの設定)
# ---------------------------------------
# あたりの設定を行う
#
# com2sec セキュリティ名 ソースアドレス コミュニティ名
# デフォルト設定を例にすると、セキュリティ名「notConfigUser」は全てのアドレスから、「public」というコミュニティ名で接続を許可するという設定になる.
# とりあえずデフォルト設定にしておくため,下記の行がコメントアウトされて記述されていることを確認する

com2sec notConfigUser default public


# 起動
$ systemctl start snmpd
$ systemctl enable snmpd
Created symlink from /etc/systemd/system/multi-user.target.wants/snmpd.service to /usr/lib/systemd/system/snmpd.service.

# 動作確認
$ snmpwalk -v 2c -c public localhost

Jetson TK1でSSDブートする(失敗)

事前準備

・ubuntu 14.04 x64版の動作するPC(今回はVMwarePlayerで動作する仮想マシン)
・ext4にフォーマット済みのSSD
・JetPack L4Tでrootfsの構築まで済ませておく


今回は/home/(ユーザー名)/JetPack-L4T-2.1/TK1/Linux_for_Tegra_tk1/rootfsをコピーする


SSD/dev/sdb1と認識されている前提で記述

$ sudo mount /dev/sdb1 /mnt
$ cd /home/(ユーザー名)/JetPack-L4T-2.1/TK1/Linux_for_Tegra_tk1/rootfs
$ sudo cp -a * /mnt 
$ sync
$ sudo umount /mnt

$ sudo ./flash.sh jetson-tk1 sda1

起動しても画面は黒いまま・・・

どうやらこの方法ではSSDブートできないらしい.(つづく・・・かも)

Jetson TK1 に L4T を手動で書き込む

前回,L4Tのセットアップからのインストールを試みたが,フラッシュへの転送が進まないようだった.(1時間ほど待っても終わらず)


そこで,SDカードへの書き込みも兼ねてリカバリを行ってみた.

※ちなみに今回,母艦側ではホームディレクトリ直下のJetPack-L4T-2.1に開発キットのインストールを実施している

事前にTK1はリカバリモードでUSB接続しておく.


$ chmod +x JetPack-L4T-2.1-linux-x64.run

$ cd /home/(ユーザー名)/JetPack-L4T-2.1/TK1/Linux_for_Tegra_tk

$sudo ./flash.sh jetson-tk1 mmcblk0p1 #内蔵フラッシュへの書き込み

#sudo ./flash.sh jetson-tk1 mmcblk1p1 #SDカードへの書き込み

#sudo ./flash.sh jetson-tk1 sda1 #USBドライブやSATAデバイス?(未検証)
以下,実行時のログ
$ sudo ./flash.sh jetson-tk1 mmcblk0p1
[sudo] password for (ユーザー名): 
copying bctfile(/home/(ユーザー名)/JetPack-L4T-2.1/TK1/Linux_for_Tegra_tk1/bootloader/ardbeg/BCT/PM375_Hynix_2GB_H5TC4G63AFR_RDA_924MHz.cfg)... done.
copying bootloader(/home/(ユーザー名)/JetPack-L4T-2.1/TK1/Linux_for_Tegra_tk1/bootloader/ardbeg/u-boot.bin)... done.
        populating kernel to rootfs... done.
        populating jetson-tk1_extlinux.conf.emmc to rootfs... done.
done.
Making system.img... 
        populating rootfs from /home/(ユーザー名)/JetPack-L4T-2.1/TK1/Linux_for_Tegra_tk1/rootfs ...


これでもやっぱり止まった

気を取り直して再挑戦するもやっぱり止まる

copying flasher(/home/(ユーザー名)/JetPack-L4T-2.1/TK1/Linux_for_Tegra_tk1/bootloader/ardbeg/fastboot.bin)... done.
Existing flashapp(/home/(ユーザー名)/JetPack-L4T-2.1/TK1/Linux_for_Tegra_tk1/bootloader/nvflash) reused.
*** Flashing target device started. ***
./nvflash  --bct PM375_Hynix_2GB_H5TC4G63AFR_RDA_924MHz.cfg --setbct --configfile flash.cfg  --create --bl fastboot.bin --odmdata 0x6009C000 --go
Nvflash 4.13.0000 started
BR_CID: 0x340010017410b1022000000009058380

何が原因なんだろう・・・
http://tessy.org/wiki/index.php?Jetson%20TK1

この辺も試してみたいとおもうところだけど,ホストマシンがVMwareのESXiだからダメなのかなと思いはじめた.


そこで,ホストマシンをOVAにエクスポートしたのち,Windows7上で走るVMwarePlayerにてインポートして起動.

試しにTK1に接続したext4にフォーマット済みのSSDに書き込みしてみたところ難なく下記のログ.

ubuntu@ubuntu-x64-jetson:~/JetPack-L4T-2.1/TK1/Linux_for_Tegra_tk1$ sudo ./flash.sh jetson-tk1 sda1
[sudo] password for ubuntu: 
copying bctfile(/home/ubuntu/JetPack-L4T-2.1/TK1/Linux_for_Tegra_tk1/bootloader/ardbeg/BCT/PM375_Hynix_2GB_H5TC4G63AFR_RDA_924MHz.cfg)... done.
copying bootloader(/home/ubuntu/JetPack-L4T-2.1/TK1/Linux_for_Tegra_tk1/bootloader/ardbeg/u-boot.bin)... done.
	populating kernel to rootfs... done.
	populating jetson-tk1_extlinux.conf.usb to rootfs... done.
done.
copying dtbfile(/home/ubuntu/JetPack-L4T-2.1/TK1/Linux_for_Tegra_tk1/kernel/dtb/tegra124-jetson_tk1-pm375-000-c00-00.dtb)... done.
copying cfgfile(/home/ubuntu/JetPack-L4T-2.1/TK1/Linux_for_Tegra_tk1/bootloader/ardbeg/cfg/gnu_linux_fastboot_emmc_full.cfg) to flash.cfg... done.
creating gpt(ppt.img)... 

*** GPT Parameters ***
Device Sector Size ------- 512
device size -------------- 15766388736
bootpart size ------------ 8388608
userpart size ------------ 15758000128
Erase Block Size --------- 2097152
FS Buffer size ----------- 4096
Partition Config file ---- flash.cfg
Visible partition flag --- GP1
Primary GPT output ------- PPT->ppt.img
Secondary GPT output ----- GPT->gpt.img
Target device name ------- none

*** PARTITION LAYOUT(20 partitions) ***
[     BCT] BH            0        16383       8.0MiB 
[     PPT] UH            0         4095       2.0MiB ppt.img
[      PT] UH         4096         8191       2.0MiB 
[     EBT] UH         8192        16383       4.0MiB u-boot.bin
[     LNX] UH        16384        49151      16.0MiB 
[     SOS] UH        49152        61439       6.0MiB 
[     NVC] UH        61440        65535       2.0MiB 
[     MPB] UH        65536        77823       6.0MiB 
[     MBP] UH        77824        90111       6.0MiB 
[     GP1] UH        90112        94207       2.0MiB 
[     APP] UV        94208     29454335   14336.0MiB 
[     DTB] UV     29454336     29462527       4.0MiB tegra124-jetson_tk1-pm375-000-c00-00.dtb
[     EFI] UV     29462528     29593599      64.0MiB 
[     USP] UV     29593600     29601791       4.0MiB 
[     TP1] UV     29601792     29609983       4.0MiB 
[     TP2] UV     29609984     29618175       4.0MiB 
[     TP3] UV     29618176     29626367       4.0MiB 
[     WB0] UV     29626368     29630463       2.0MiB 
[     UDA] UV     29630464     30773247     558.0MiB 
[     GPT] UH     30773248     30777343       2.0MiB gpt.img
copying flasher(/home/ubuntu/JetPack-L4T-2.1/TK1/Linux_for_Tegra_tk1/bootloader/ardbeg/fastboot.bin)... done.
Existing flashapp(/home/ubuntu/JetPack-L4T-2.1/TK1/Linux_for_Tegra_tk1/bootloader/nvflash) reused.
*** Flashing target device started. ***
./nvflash  --bct PM375_Hynix_2GB_H5TC4G63AFR_RDA_924MHz.cfg --setbct --configfile flash.cfg  --create --bl fastboot.bin --odmdata 0x6009C000 --go
Nvflash 4.13.0000 started
BR_CID: 0x340010017410b1022000000009058380
rcm version 0X400001
Skipping BoardID read at miniloader level
System Information:
   chip name: unknown
   chip id: 0x40 major: 1 minor: 1
   chip sku: 0x0
   chip uid: 0x000000017410b1022000000009058380
   macrovision: disabled
   hdcp: disabled
   jtag: disabled
   sbk burned: false
   board id: 0
   warranty fuse: 0
   dk burned: false
   boot device: emmc
   operating mode: 3
   device config strap: 0
   device config fuse: 0
   sdram config strap: 0

RCM communication completed
BCT sent successfully
sending file: tegra124-jetson_tk1-pm375-000-c00-00.dtb
- 59637/59637 bytes sent
tegra124-jetson_tk1-pm375-000-c00-00.dtb sent successfully
odm data: 0x6009c000
downloading bootloader -- load address: 0x83d88000 entry point: 0x83d88000
sending file: fastboot.bin
- 594363/594363 bytes sent
fastboot.bin sent successfully
waiting for bootloader to initialize
bootloader downloaded successfully
ML execution and Cpu Handover took 2 Secs
Partition backup took 0 Secs
setting device: 2 3
deleting device partitions
creating partition: BCT
creating partition: PPT
creating partition: PT
creating partition: EBT
creating partition: LNX
creating partition: SOS
creating partition: NVC
creating partition: MPB
creating partition: MBP
creating partition: GP1
creating partition: APP
creating partition: DTB
creating partition: EFI
creating partition: USP
creating partition: TP1
creating partition: TP2
creating partition: TP3
creating partition: WB0
creating partition: UDA
creating partition: GPT
sending file: ppt.img
\ 2097152/2097152 bytes sent
ppt.img sent successfully
padded 12 bytes to bootloader
sending file: u-boot.bin
- 440016/440016 bytes sent
u-boot.bin sent successfully
sending file: tegra124-jetson_tk1-pm375-000-c00-00.dtb
- 59637/59637 bytes sent
tegra124-jetson_tk1-pm375-000-c00-00.dtb sent successfully
sending file: gpt.img
\ 2097152/2097152 bytes sent
gpt.img sent successfully
Create, format and download  took 14 Secs
Time taken for flashing 17 Secs
*** The target ardbeg has been flashed successfully. ***
Make the target filesystem available to the device and reset the board to boot from external sda1.

eMMCやSDなどへの書き込みは,どこ見ても30分程度はかかると書いてあるにもかかわらず,今回は爆速で書けたけど,SSDだからだろうかと心配になって起動するもやっぱり起動せずに画面真っ暗なまま

きっとブートローダの書き込みだけで,rootfsの書き込みは自分でやらなきゃダメなんだな.もう一息

参考:http://demotomohiro.github.io/hardware/jetson_tk1/setup/external_storage.html

JetPack-L4T-2.1のインストール

なんだかんだでJetson TK1 Development Pack (JetPack) 1.2のインストールがうまくいかないので諦めた.



方針を変えて,最新のJetPack for L4T 2.1からイメージをSDカードからブートして使えれば良いやというところに落ち着けることにした
(ただし,このページの手順で進めると内蔵フラッシュへのインストールになる)


ここから,JetPack for L4Tをダウンロードする(要ユーザー登録)

https://developer.nvidia.com/embedded/jetpack

ダウンロードしたら実行権限を与えて起動する

$ chmod +x JetPack-L4T-2.1-linux-x64.run

$ ./JetPack-L4T-2.1-linux-x64.run

として起動し,ウィザードに沿ってインストールを進めていく.

インストールパッケージの選択ではFull Packageを選択し,ターゲットは"Jetson TK1"を選択. JetPack for L4T_000.jpg
途中,GameWorks Samplesのインストール中に,依存関係でコケた.


JetPack for L4T_001.jpg

以下,_installer/logs/install_gameworks_compilers.log の内容

パッケージリストを読み込んでいます...
依存関係ツリーを作成しています...
状態情報を読み取っています...
g++-arm-linux-gnueabihf はすでに最新版です。
gcc-arm-linux-gnueabihf はすでに最新版です。
以下の問題を解決するために 'apt-get -f install' を実行する必要があるかもしれません:
以下のパッケージには満たせない依存関係があります:
 libstdc++-4.8-dev-armhf-cross : 依存: libstdc++6-armhf-cross (>= 4.8.4-2ubuntu1~14.04.1cross0.11.1) しかし、インストールされようとして
いません
E: 未解決の依存関係です。'apt-get -f install' を実行してみてください (または解法を明示してください)。


「Automatically resolve dependency conflict」にチェックを入れて再挑戦するも同様のエラーでコケた.


libstdc++6-armhf-crossあたりの依存関係を解決できなかったようにも見える.
ここでopenssh-serverを入れてローカルからsshでファイル見ようとしたんだけど,なんとこの後他のパッケージインストールする際にもlibstdc++6-armhf-crossの依存関係を解決できなかった旨のメッセージが出てapt-getが使えなくなった


apt-get -f installでも解決できなかったため,何か良からぬことをやったような気がしてgoogleで検索したら,下記のような対処方法があったのでやってみた.

$ sudo apt-get clean

$ sudo apt-get -o Dpkg::Options::="--force-overwrite" install -f

$ sudo apt-get install openssh-server #単に入れたかっただけなので,やらなくてもいいかも

#参考:https://bugs.launchpad.net/ubuntu/+source/gcc-4.8-armhf-cross/+bug/1557205


上記の措置を実行後,ウィザード上で「Next」を押下してインストールを続けたところ,GameWorks Samplesのインストールは無事完了した


以降のインストールは順調に進んで100%に達した.

このあとはネットワークの設定ウィザードに進んだ

JetPack for L4T_002.jpg


JetPack for L4T_003.jpg


JetPack for L4T_004.jpg


JetPack for L4T_005.jpg

コンソールが読みにくいけど,おそらく実機をUSBリカバリモードでつなげと言われているようなので,繋いでみた.

接続時にlsusb叩くと,デバイスは「NVidia Corp.」と表示されていた.
JetPack for L4T_006.jpg

このまま進めると内蔵Flashへの書き込みになることに気がついたが,とりあえず起動するまでやってみることにした.

JetPack for L4T_007.jpg


しばらくするとコンソールにずらずらと文字が表示されて,上記の画面になる.
ここから何事も起こらず,ウィザードのNextもBackもアクティブにならず
内蔵フラッシュへの書き込みというだけで,取り返しのつかないことをやっているような気がして気が気じゃないが待つ.


1時間ほど経過し,なんだかいつまで終わらないので,こちらの手順で直接内蔵フラッシュに書き込んでみることにした

Jetson TK1をUSBリカバリモードで起動する

1.TK1の電源が入っている場合は切る

2.電源を投入(ACアダプタを接続)し,「RECOVERY」ボタンを押しながら「RESET」ボタンを押す
(HDMI接続でモニタなどを接続している場合に,モニタへの表示が出なければリカバリーモードでの起動に成功)

3.母艦側でUSBデバイスとして認識されれば成功


参考:
http://demotomohiro.github.io/hardware/jetson_tk1/setup/recovery_mode.html
http://tyokotabb.blogspot.jp/2014/06/jetson-tk1.html

ubuntuへのVMware Toolsのインストールの際にkernel headerが見つからない場合の対応

jetson用にubuntu 14.04 x64を使う事があり,仮想マシンをセットアップした.

VMware Toolsのインストールの際にkernel headerが見つからない旨のメッセージが出たので書き記しておく


$ uname -a
Linux ubuntu-x86-jetson 3.13.0-83-generic #127-Ubuntu SMP Fri Mar 11 00:25:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

$ ls /usr/src/
linux-headers-3.13.0-24          linux-headers-3.13.0-83
linux-headers-3.13.0-24-generic  linux-headers-3.13.0-83-generic

$ ls /usr/src/linux-headers-3.13.0-83-generic/include/linux/version.h
ls: /usr/src/linux-headers-3.13.0-83-generic/include/linux/version.h にアクセスできません: そのようなファイルやディレクトリはありません

$ sudo ln -s /usr/src/linux-headers-$(uname -r)/include/generated/uapi/linux/version.h /usr/src/linux-headers-$(uname -r)/include/linux/version.h

$ ls /usr/src/linux-headers-3.13.0-83-generic/include/linux/version.h
/usr/src/linux-headers-3.13.0-83-generic/include/linux/version.h



/usr/src/linux-headers-3.13.0-83-generic/include/generated/uapi/linux/version.h



/usr/src/linux-headers-3.13.0-83-generic/include/linux/

に存在しないのが問題な模様なのでシンボリックリンクを貼っておくことで解決



参考:http://yuyakaido.hatenablog.com/entry/2013/10/19/232512

Jetson TK1を使ってみる ~アップデート編(1)~

Jetson TK1 DevKitでchainer使ってみたいと思い立ってやってみました.

事前にやっておくこと

  • ・ubuntu x64版のマシン(母艦)を用意しておく(今回はubuntu_14.04_x64の仮想マシンで作業した)
  • アップデート


    下記のURLからJetson TK1 Development Pack (JetPack TK1)をダウンロードする.(今回はv1.2をダウンロードした)

    https://developer.nvidia.com/jetson-tk1-development-pack

    ダウンロードしたフォルダに移動して,ダウンロードしたファイルのアクセス権限を変更する(実行可能にする)

    $ chmod +x jetpack-${VERSION}.run
    

    次に,ファイルブラウザからダウンロードしたファイルを開く.
    セットアップが起動する

    tk1_setup_000.jpg
    色々出てくるが「Next>」を押し進めて行く.
    ダウンロードが始まるので2,30分待つ


    インストールの準備が整ったところ.
    tk1_setup_001.jpg

    「Next>」を押下してインストールを進めていくと,途中コンソールが開いてパスワードを要求さたり,使用許諾への同意,インストールパスの選択など聞かれるのでそれぞれ入力する

    tk1_setup_002.jpg
    途中,何かがない旨のエラーが出た.


    Failed to install one or more packages on host. Please manually run command, "sudo apt-get install g++-arm-linux-gnueabihf gcc-arm-linux-gnueabihf cuda-toolkit-6-5 cuda-cross-armhf-6-5 libgomp1-armhf-cross", in a terminal to check the reason. After they are correctly installed, click Next button to continue.
    一旦セットアップをキャンセルして,apt-get走らせるも依存関係でコケた


    強行して,下記の画面が出たらJetsonをリカバリモードにして仮想マシンに接続した.

    tk1_setup_003.jpg
    参考:Jetson TK1をUSBリカバリモードで起動する
    http://nc30mtd.oops.jp/blog/2016/03/jetson-tk1usb.html


    tk1_setup_004.jpg

    つづく

    Visual Studio Community 2013を日本語化する

    Visual Studio Community 2013をインストールしたのだけども,英語版だった.

    1.Visual Studio 2013 Language Packをダウンロードする.

    ダウンロード | Visual Studio

    VisualStudioCommunity2013_DL.jpg


    インストール完了後,VS2013を起動する.
    まだ日本語表示になっていないはずなので,[TOOLS]メニューの[Options...]ダイアログを開き、[Environment]の[International Settings]にてLanguageを「English」から「日本語」へ変更し、Visual Studioを再起動する.

    VisualStudioCommunity2013_JP.jpg

    Intel® EdisonにBLEデバイスを接続する(CC2650 SensorTag)

    環境:
    ---------
    ---------


    事前にEdison内のパッケージを最新にしておく
    https://nonnoise.github.io/Edison/Setup/03.html#id3


    ---------
    root@edison: cd ~
    root@edison: wget https://www.kernel.org/pub/linux/bluetooth/bluez-5.24.tar.xz
    root@edison: tar -xf bluez-5.24.tar.xz
    root@edison: cd bluez-5.24
    root@edison: ./configure --disable-systemd -disable-udev
    root@edison: make
    root@edison: make install
    ---------

    configureでエラーが出ていないことを確認し,makeしてから30分ほど放置しておく.

    Intel® Edisonを無線LANに接続する

    環境はこんな感じ.

    ---------
    root@edison:~# uname -a
    Linux edison 3.10.17-poky-edison+ #1 SMP PREEMPT Wed Aug 20 16:09:18 CEST 2014 i686 GNU/Linux
    ---------


    下記のコマンドでWifiの設定をする.
    ---------
    root@edison:~# configure_edison --wifi
    ---------

    ちなみに我が家のWifiルーターは下記のような設定

  • 無線LANの暗号化方法:WPA-パーソナル

  • ステルスモード

  • SSID:XXXXXXXXXX
  • ---------------
    Configure Edison: WiFi Connection

    Scanning: 1 seconds left

    0 : Rescan for networks
    1 : Manually input a hidden SSID

    Enter 0 to rescan for networks.
    Enter 1 to input a hidden network SSID: 1
    Please enter the hidden network SSID: XXXXXXXXXX
    Is XXXXXXXXXX correct? [Y or N]: y

    0: OPEN
    1: WEP
    2: WPA-Personal(PSK)
    3: WPA-Enterprise (EAP)

    Select the type of security [0 to 3]: 2
    What is the network password?: ********
    Initiating connection to XXXXXXXXXX...
    Done. Network access should be available shortly, please check 'wpa_cli status'.
    Connected. Please go to 192.168.YY.YY in your browser to check if this is correct.
    root@mtd_edison:~#
    ---------------

    1.ステルスモードなので,スキャン後に「1」をタイプしてSSIDを入れる.
    2.暗号化方式を選択する.今回は「2」
    3.パスワードの入力を求められるので入力する.
    4.IPアドレスが表示されたら成功.終わったら「ifconfig」叩いたりping打ってみたりする


    ----
    root@edison:~# ifconfig
    lo Link encap:Local Loopback
    inet addr:127.0.0.1 Mask:255.0.0.0
    inet6 addr: ::1/128 Scope:Host
    UP LOOPBACK RUNNING MTU:65536 Metric:1
    RX packets:0 errors:0 dropped:0 overruns:0 frame:0
    TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:0
    RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

    usb0 Link encap:Ethernet HWaddr 66:a8:99:5a:90:34
    inet addr:192.168.2.15 Bcast:192.168.2.255 Mask:255.255.255.0
    inet6 addr: fe80::64a8:99ff:fe5a:9034/64 Scope:Link
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    RX packets:678 errors:0 dropped:0 overruns:0 frame:0
    TX packets:128 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:101128 (98.7 KiB) TX bytes:28376 (27.7 KiB)

    wlan0 Link encap:Ethernet HWaddr
    inet addr:192.168.YY.YY Bcast:0.0.0.0 Mask:255.255.255.0
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    RX packets:192 errors:0 dropped:0 overruns:0 frame:0
    TX packets:63 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:17507 (17.0 KiB) TX bytes:8472 (8.2 KiB)
    ----

    ブラウザからhttp://192.168.YY.YYを叩くと下記のようなページが表示されるはず.

    edison03.jpg

    Intel® Edisonを使ってみる(セットアップ編)

    スイッチサイエンスさんでベースボード付きIntel® Edisonを買ってみました

    Intel Edison Breakout Board Kit
    https://www.switch-science.com/catalog/1957/

    用意するもの

  • Windows PC
  • micro USBケーブル
  • Intel® Edison Board Software Release 2.1 Firmware
    https://software.intel.com/en-us/iot/library/edison-getting-started


    ドライバのインストール

    ここからセットアップ用ソフトウェアをダウンロードします.
    Windows 64-bit Integrated Installer

    edison01.jpg

    microUSBポートが2つ装備されています.
    写真下側をPCと接続してセットアップを起動すると,ドライバのインストールが進んでいきます.

    edison02.jpg

    ファームウェアのアップデート

    2つあるmicroUSBケーブルの下側を電源に,上側をPCとのシリアルケーブルとして接続します.

    ログインしてみる

    2つあるmicroUSBケーブルの下側を電源に,上側をPCとのシリアルケーブルとして接続します. PCからシリアルコンソールでログインしてみる.

    ----------
    Poky (Yocto Project Reference Distro) 1.6 edison ttyMFD2

    edison login: root
    [ 81.646744] systemd-fsck[233]: /dev/mmcblk0p10: clean, 13/152608 files, 26868/610299 blocks
    root@edison:~#
    ----------

    Intel® Edisonのパードウェアについて

    Intel® Edison Breakout Board Hardware Guide (PDF)

    Raspberry Pi 2に無線LANのUSBアダプタをつける

    WLI-UC-GNMがあったので使ってみることにした.


    挿しこんでlsusbすると認識はしている模様
    $ lsusb
    Bus 001 Device 006: ID 0789:0168 Logitec Corp. LAN-W150N/U2 Wireless LAN Adapter
    


    wpa_passphraseコマンドを用いてSSIDとPassphraseを入力する

    $wpa_passphrase SSID Passphrase
    network={
            ssid="SSID"
            #psk="Passphrase"
            psk=XXXXXXXXXXXXXXXXXXXXXXXXXXXX
    }
    


    wpa_passphraseコマンドの出力をコピペして設定を打ち込む.
    WPA2-PSK/TKIPの場合の設定は以下のとおり.
    ステルスモードなのでscan_ssid=1も追記する

    $ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
    ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
    update_config=1
    network={
            ssid="SSID" #wpa_passphraseのコピペ
            #psk="Passphrase"
            psk=XXXXXXXXXXXXXXXXXXXXXXXXXXXX
    
            key_mgmt=WPA-PSK
            proto=WPA WPA2
            pairwise=CCMP TKIP
            group=CCMP TKIP
            scan_ssid=1
    }
    

    /etc/network/interfacesを編集
    $ sudo vi /etc/network/interfaces
    auto lo
    iface lo inet loopback
    
    #iface eth0 inet manual
    iface eth0 inet dhcp
    
    auto wlan0
    allow-hotplug wlan0
    iface wlan0 inet dhcp
    #IPアドレスを手動で割り当てる場合
    #iface wlan0 inet static
    #address 192.168.0.121
    #netmask 255.255.255.0
    #gateway 192.168.0.1
    
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
    iface default inet dhcp
    
    sudo ifup wlan0で立ち上げる

    pythonでファイルのインポートを行う

    import {.pyを除いたファイル名}
    

    インポート対象ファイルの探索順序

    (1)実行中のファイルと同じフォルダ
    (2)カレントフォルダ
    (3)環境変数「PYTHONPATH」に列挙したフォルダ
    (4)sys.pathに登録してあるフォルダ

    sys.pathに登録してあるフォルダを確認する

    $ python
    >>> import sys
    >>> print sys.path
    

    sys.pathにフォルダを登録する

    $ python
    >>> import sys
    >>> sys.path.append('/path/to/dir')
    

    『MMMソーシャル金融ネットワーク』ってなんぞや

    LINEで突然友達でもないんですが,謎のアカウントからメッセージ.

    どこぞの大企業の名前に似ているURLですが,「ああ,『post-it』売ってるところね」と思ったら大間違い.

    NONAMEという名前もさることながら,見るからに振り込め詐欺とネズミ講をまぜるな危険な雰囲気がやばくてURL踏むの怖い.


    IMG_6599.PNG
    IMG_6600.PNG
    IMG_6601.PNG
    ドメインの情報を検索してみると作成日は2015年12月21日の模様.
    3m-japan.org
    
    Domain Name: 3M-JAPAN.ORG
    Domain ID: D178939976-LROR
    WHOIS Server:
    Referral URL: www.internet.bs
    Updated Date: 2015-12-23T13:30:21Z
    Creation Date: 2015-12-21T23:31:11Z
    Registry Expiry Date: 2018-12-21T23:31:11Z
    Sponsoring Registrar: Internet Domain Service BS Corp
    Sponsoring Registrar IANA ID: 2487
    Domain Status: clientTransferProhibited https://www.icann.org/epp#clientTransferProhibited
    Domain Status: serverTransferProhibited https://www.icann.org/epp#serverTransferProhibited
    Registrant ID: INTExug3ximv6nip
    Registrant Name: Domain Admin
    Registrant Organization: Whois Privacy Corp.
    Registrant Street: Ocean Centre, Montagu Foreshore
    Registrant Street: East Bay Street
    Registrant City: Nassau
    Registrant State/Province: New Providence
    Registrant Postal Code: 0000
    Registrant Country: BS
    Registrant Phone: +1.5163872248
    Registrant Phone Ext:
    Registrant Fax:
    Registrant Fax Ext:
    Registrant Email: 3m-japan.org-owner@customers.whoisprivacycorp.com
    Admin ID: INTE9th96nislrg5
    Admin Name: Domain Admin
    Admin Organization: Whois Privacy Corp.
    Admin Street: Ocean Centre, Montagu Foreshore
    Admin Street: East Bay Street
    Admin City: Nassau
    Admin State/Province: New Providence
    Admin Postal Code: 0000
    Admin Country: BS
    Admin Phone: +1.5163872248
    Admin Phone Ext:
    Admin Fax:
    Admin Fax Ext:
    Admin Email: 3m-japan.org-admin@customers.whoisprivacycorp.com
    Tech ID: INTEeo24yu1bls9q
    Tech Name: Domain Admin
    Tech Organization: Whois Privacy Corp.
    Tech Street: Ocean Centre, Montagu Foreshore
    Tech Street: East Bay Street
    Tech City: Nassau
    Tech State/Province: New Providence
    Tech Postal Code: 0000
    Tech Country: BS
    Tech Phone: +1.5163872248
    Tech Phone Ext:
    Tech Fax:
    Tech Fax Ext:
    Tech Email: 3m-japan.org-tech@customers.whoisprivacycorp.com
    Name Server: PAUL.NS.CLOUDFLARE.COM
    Name Server: PAT.NS.CLOUDFLARE.COM
    DNSSEC: unsigned
    >>> Last update of WHOIS database: 2015-12-27T03:19:52Z <<<
    
    "For more information on Whois status codes, please visit https://icann.org/epp"
    
    Access to Public Interest Registry WHOIS information is provided to assist persons in determining
    the contents of a domain name registration record in the Public Interest Registry registry database.
    The data in this record is provided by Public Interest Registry for informational purposes only, and
    Public Interest Registry does not guarantee its accuracy. This service is intended only for
    query-based access. You agree that you will use this data only for lawful purposes and that, under
    no circumstances will you use this data to(a) allow, enable, or otherwise support the transmission
    by e-mail, telephone, or facsimile of mass unsolicited, commercial advertising or solicitations to
    entities other than the data recipient's own existing customers; or (b) enable high volume,
    automated, electronic processes that send queries or data to the systems of Registry Operator, a
    Registrar, or Afilias except as reasonably necessary to register domain names or modify existing
    registrations. All rights reserved. Public Interest Registry reserves the right to modify these
    terms at any time. By submitting this query, you agree to abide by this policy.
    
     
    最終取得 2015/12/28 18:34
    

    ハイパス・ローパスフィルタ

    性状がよくわからない波形に対してハイパスフィルタやローパスフィルタをかけて検証したいことがありますが,そんなときに「なんとなく」フィルタをかけれるTips

    ローパスフィルタ(LPF:Low Pass Filter)

    移動平均・積分の考え方と同じ.
    x[i] = a*x[i] + (1.0-a)*x[i-1]
    


    x[i] = (x[i-1] + x[i] + x[i+1]) / 3
    


    各データのサンプリング周期と,移動平均幅によりカットオフ周波数を決められた気がしたけど,計算方法をすっかり忘れてしまった.
    結果だけならキーエンスの資料に載ってた気がしたけどすっかりなくしてしまって見つからない.

    結局は積分・移動平均なので,原波形からの位相遅れが生まれる

    ハイパスフィルタ(HPF:High Pass Filter)

    xt = x[i]
    x[i] = a*x[i] + (1.0-a)*x[i-1]
    y[i] = xt - x[i]
    

    xt = x[i]
    x[i] = (x[i-1] + x[i] + x[i+1]) / 3
    y[i] = xt - x[i]
    


    結局は積分・移動平均したものを原波形から差し引くものなので,やっぱり原波形からの位相遅れが生まれる


    このあたり知ってると,Excelなんかでもなんとなく波形を眺められて便利.

    sambaのサービス名変わった?

    いつもの感じでsambaを起動したら警告が出た.
    サービス名が変わったのかも
    $ sudo service samba restart
    Failed to start samba.service : Unit samba.service is masked.
    
    #サービス名変わった?
    $ sudo service samba-ad-dc start
    

    Chainerをインストールしてみる

    --------------------------
    ■実施した環境
      ・Ubuntu 15.10 64bit版(仮想マシン上に構築)
    --------------------------

    例によってGPUは使いません

    cythonとlibhdf5-devがないとchainerのインストールに失敗する模様.
    先にインストールを済ませておく.

    $ sudo apt-get install python-pip python-dev python-virtualenv
    $ pip install cython
    $ sudo apt-get install libhdf5-dev
    $ pip install chainer
    

    インストールが終わったら試してみる.

    $ wget https://github.com/pfnet/chainer/archive/v1.5.1.tar.gz
    $ tar xzf v1.5.1.tar.gz
    $ python chainer-1.5.1/examples/mnist/train_mnist.py
    

    以降,数時間待つと終わる.

    TensorFlowを使ってみた(2)

    前回インストールしたTensorFlowを使ってみようと,下記のようにMNISTのサンプルで実行してみたところ,ファイルそのものが見つからない模様.

    $ python tensorflow/tensorflow/g3doc/tutorials/mnist/fully_connected_feed.py                       
    -bash: /home/XXXXX/tensorflow/bin/python: そのようなファイルやディレクトリはありません
    
    $ ls tensorflow/tensorflow/g3doc/tutorials/mnist/
    beginners  download  pros  tf
    


    2015年11月時点の記事を参考にしてもディレクトリ配置が変わってしまったようなので,この辺りの対応も含めて記す.
    検索をかけると,どうやらfully_connected_feed.pyは
    /tensorflow/g3doc/tutorials/mnist/
    

    でなく
    tensorflow/examples/tutorials/mnist/
    

    に入っている模様.

    fully_connected_feed.py を見つけて実行してみると下記のエラーが出た

    $ python tensorflow/examples/tutorials/mnist/fully_connected_feed.py 
    Traceback (most recent call last):
      File "tensorflow/examples/tutorials/mnist/fully_connected_feed.py", line 30, in 
        from tensorflow.examples.tutorials.mnist import input_data
    ImportError: No module named examples.tutorials.mnist
    


    fully_connected_feed.py の30行目近辺を書き換え


    from tensorflow.examples.tutorials.mnist import input_data
    from tensorflow.examples.tutorials.mnist import mnist
    ↓
    import input_data
    import mnist
    

    下記のようなメッセージが出てきたら成功
    $ python tensorflow/examples/tutorials/mnist/fully_connected_feed.py                    
    Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.
    Extracting data/train-images-idx3-ubyte.gz
    Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.
    Extracting data/train-labels-idx1-ubyte.gz
    Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.
    Extracting data/t10k-images-idx3-ubyte.gz
    Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.
    Extracting data/t10k-labels-idx1-ubyte.gz
    I tensorflow/core/common_runtime/local_device.cc:25] Local device intra op parallelism threads: 1
    I tensorflow/core/common_runtime/local_session.cc:45] Local session inter op parallelism threads: 1
    Step 0: loss = 2.31 (0.131 sec)
    Step 100: loss = 2.18 (0.006 sec)
    Step 200: loss = 1.97 (0.006 sec)
    Step 300: loss = 1.71 (0.006 sec)
    Step 400: loss = 1.34 (0.006 sec)
    Step 500: loss = 0.97 (0.006 sec)
    Step 600: loss = 0.77 (0.006 sec)
    Step 700: loss = 0.65 (0.006 sec)
    Step 800: loss = 0.69 (0.007 sec)
    Step 900: loss = 0.54 (0.007 sec)
    Training Data Eval:
      Num examples: 55000  Num correct: 47410  Precision @ 1: 0.8620
    Validation Data Eval:
      Num examples: 5000  Num correct: 4340  Precision @ 1: 0.8680
    Test Data Eval:
      Num examples: 10000  Num correct: 8681  Precision @ 1: 0.8681
    Step 1000: loss = 0.74 (0.021 sec)
    Step 1100: loss = 0.45 (0.250 sec)
    Step 1200: loss = 0.41 (0.006 sec)
    Step 1300: loss = 0.44 (0.006 sec)
    Step 1400: loss = 0.49 (0.006 sec)
    Step 1500: loss = 0.41 (0.006 sec)
    Step 1600: loss = 0.54 (0.006 sec)
    Step 1700: loss = 0.34 (0.006 sec)
    Step 1800: loss = 0.29 (0.006 sec)
    Step 1900: loss = 0.40 (0.006 sec)
    Training Data Eval:
      Num examples: 55000  Num correct: 49130  Precision @ 1: 0.8933
    Validation Data Eval:
      Num examples: 5000  Num correct: 4497  Precision @ 1: 0.8994
    Test Data Eval:
      Num examples: 10000  Num correct: 8959  Precision @ 1: 0.8959
    


    成功したら結果をチャートで確かめる.
    TensorBoardを使えばブラウザ上で学習状況がみれるのでこれを試す.
    下記のコマンドを実行.

    tensorboard --logdir=/home/XXXXX/tensorflow/data
    


    するとwebサーバーが立ち上がるので,ブラウザから
    http://localhost:6006/ 
    


    に接続するとチャートが確認できる.
    tensorboard.jpg





    縦軸の学習誤差が次第に下がっているのが見て取れる.

    TensorFlowを使ってみた(1)

    TensorFlowはGoogleが提供する機械学習ライブラリで,Linux版とMacOSX版がある模様.
    今回はubuntuで使ってみようと思う.

    --------------------------
    ■実施した環境
      ・Ubuntu 15.10 64bit版
    --------------------------

    仮想マシン上に構築して味見してみるまでが当面の目標.

    本記事では特に上記環境でのセットアップ方法をまとめる.

    ちなみに,Linux版だとCUDAを用いてGPUを使った学習を併用できるようだが,今回は仮想マシン上なのでパス.

    (1)pythonのインストール

    python2.7系がインストール済みか確認する.
    公式サイトにはpython2.7に対応している旨の記載があるが,3系への対応状況はよくわからない.
    $ python
    Python 2.7.6 (default, Jun 22 2015, 18:00:18) 
    [GCC 4.8.2] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> 
    

    上記のようにバージョンが出て来ればインストール済み.
    Ctrl-Dでコンソール画面に戻れます

    もしコマンドが見つからない旨のメッセージが出てきたらインストールする.
    $sudo apt-get install python
    

    (2)virtualenのインストールと設定

    $ sudo apt-get install python-pip python-dev python-virtualenv
    $ virtualenv --system-site-packages ~/tensorflow
    $ cd ~/tensorflow/
    $ source bin/activate
    

    (3)TensorFlowのインストールと設定

    (tensorflow)$  # Your prompt should change
    
    # Ubuntu/Linux 64-bit, CPU only:
    (tensorflow)$ pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl
    
    # Ubuntu/Linux 64-bit, GPU enabled:
    (tensorflow)$ pip install --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl
    
    # Mac OS X, CPU only:
    (tensorflow)$ pip install --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.5.0-py2-none-any.whl
    


    今回は「# Ubuntu/Linux 64-bit, CPU only」の場合のコマンドを実行して暫し待つ.

    # Ubuntu/Linux 64-bit, CPU only:
    (tensorflow)$ pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl
    


    以上でインストールは完了.
    次回はとりあえず使ってみます.

    TensorFlowを使ってみた(1)

    RN4020 Bluetooth Low Energy PICtail/PICtail Plusを使ってみた

    BLEをいじってみたくなって,RN4020ボードを買いました.

    マイクロチップ Bluetooth Low Energy PICtail/PICtail Plus(¥6,700 秋月電子通商)

    付属のUSBケーブルをPCに繋いだ際にドライバがインストール出来ない旨のメッセージが出たので

    Microchip社のボードのページからドライバを落としてきてインストールする.


    pictail.jpg

    ドライバのインストール後は無事にCOMポートとして認識された.


    このボード,シリアルポート経由で設定を行うだけで動作してしまうボードなんですが,シリアルポート接続のデフォルト設定値は以下の通り.(※コマンドリスト19ページ参照)
    通信速度:115200bps
    データビット長:8ビット
    パリティ:なし
    ストップビット:1ビット
    フロー制御:なし
    

    TeXを任意のディレクトリにインストールする(CentOS版)

    大学院生もやってまして,普段仕事しながら研究して論文書いてます.

    論文執筆の際にはTeXを使っておりまして,Macで行っていたのですが,最近El CapitanにアップデートしたらTeX使えなくなるなどのトラブルに遭いまして,はじめてTimeMachineのお世話になりました.


    便利ですね,TimeMachine.
    今回のトラブルからTimeMachine専用HDDを用意するに至りました.

    さて,こんな感じで色々悩まされるTeXなんですが,「もう面倒なのでクラウドにすればいいじゃない!」なんて思ったのが発端なんですが,もうそういうサービスがありそうです.→https://cloudlatex.io/ja#

    とはいえなんだか外の環境で自分の論文アップロードしながら作業するのも少々気兼ねする部分がありますので(別にすごいことやってるからというわけでもなく,共著者の目とか),VM上にtexliveをインストールして持ち歩くことにしましたのでその記録.


    訳あって任意のディレクトリにインストールしたかったので,helpを見てみると下記の記述
    ENVIRONMENT VARIABLES
           For ease in scripting and debugging, "install-tl" will look for the
           following environment variables.  They are not of interest in normal
           user installations.
    
           "TEXLIVE_INSTALL_ENV_NOCHECK"
               Omit the check for environment variables containing the string
               "tex".  People developing TeX‐related software are likely to have
               many such variables.
    
           "TEXLIVE_INSTALL_NO_CONTEXT_CACHE"
               Omit creating the ConTeXt cache.  This is useful for redistribu‐
               tors.
    
           "TEXLIVE_INSTALL_PREFIX"
           "TEXLIVE_INSTALL_TEXDIR"
           "TEXLIVE_INSTALL_TEXMFCONFIG"
           "TEXLIVE_INSTALL_TEXMFHOME"
           "TEXLIVE_INSTALL_TEXMFLOCAL"
           "TEXLIVE_INSTALL_TEXMFSYSCONFIG"
           "TEXLIVE_INSTALL_TEXMFSYSVAR"
           "TEXLIVE_INSTALL_TEXMFVAR"
               Specify the respective directories.  "TEXLIVE_INSTALL_PREFIX"
               defaults to "/usr/local/texlive", while "TEXLIVE_INSTALL_TEXDIR"
               defaults to the release directory within that prefix, e.g.,
               "/usr/local/texlive/2014".  All the defaults can be seen by running
               the installer interactively and then typing "D" for the directory
               menu.
    
           "NOPERLDOC"
               Don't try to run the "--help" message through "perldoc".
    

    「TEXLIVE_INSTALL_PREFIX=」でディレクトリ指定するだけのようですね
    wget http://www.ring.gr.jp/pub/text/CTAN/systems/texlive/tlnet/install-tl-unx.tar.gz
    tar -xzf install-tl-unx.tar.gz
    cd install-tl-XXXXXXXX
    mkdir $HOME/texlive
    TEXLIVE_INSTALL_PREFIX=$HOME/texlive ./install-tl --repository http://www.ring.gr.jp/pub/text/CTAN/systems/texlive/tlnet/
    
    こんな感じ.30分ほど待つと終わります.
    しかし,TeXってサイズがでかいですね.

    ドライブレコーダ

    広角レンズでの動画撮影に加えて,GPSをNMEAで吐き出してくれたり便利です.


    「国内正規販売品」「安心日本語対応」PAPAGO(パパゴ)ドライブレコーダー 前方衝突警報 車線逸脱警報 ブルー GoSafe P3 BL P3-BL-32G

    マウントも一緒に買ってみた



    「国内正規販売品」「安心日本語対応」PAPAGO(パパゴ) Pシリーズ・ドライブレコーダー専用吸盤式マウント吸盤式マウント A-PPG-P01


    フラッシュメモリは入ってますが,動画の記録もするので適当なSDカードも一緒に購入.


    【Amazon.co.jp限定】Transcend SDHCカード 32GB Class10 (無期限保証) TS32GSDHC10E (FFP)

    IPアドレスが有効かどうか判定する

    C#でIPアドレスの入力を判定する方法としては思いつく限り2通り。

    (1)正規表現を利用する
    (2)System.Net.IPAddress.TryParseメソッドを利用する


    なお、IPアドレスの桁の先頭に「0」が入った場合、10進ではなく、16進で識別されるらしい。
    つまり、0埋めしてしまうと全く違う意味を持つことになる。

    これは勉強になった。


    参考:【C#】IPアドレスの有効性チェックと注意すべき点
    http://kuroeveryday.blogspot.jp/2014/08/Check-IPAddress.html


    C#でOpenGLを使ってみる ー OpenTK編(1)

    DirectXよりもOpenGLのほうがなんとなく慣れているのもあって、

    これまで、C#フォームアプリケーションでOpenGLを利用したい場合にはtao Frameworkを利用していたんですが、どうやらOpenTKに組み込まれた模様。

    taoFrameworkは現在も入手できるようですが、OpenTKにバンドルされているものを使い、Windows7、VS2012の環境での利用する方法に関してまとめておきます。



    • (1)OpenTKのダウンロードとインストール

    • The Open Toolkit libraryから、opentk-{yyyy}-{mm}-{dd}.exeをダウンロードしてくる。

      なお、執筆時点でのバージョンは、1.1.0-stable。

      ダウンロードしたらインストールする。

      特に設定を要する項目はないが、インストールする項目を選ぶ際に「NShader plugin」のチェックが外れている。

      チェックつけておくと後で幸せになるかもしれない程度。


    • (2)他のプロジェクトから参照する


    • インストール時に、特に設定を行っていない場合、

      C:\Users\{username}\Documents\OpenTK

      あたりにインストールされているはずなので、

      C:\Users\{username}\Documents\OpenTK\1.1\Binaries\OpenTK\Release

      あたりを覗いてみると下記の2つのDLLが存在することを確認する。
      OpenTK.GLControl.dll
      OpenTK.dll


      次に、参照したいプロジェクトの「ソリューションエクスプローラ」から「参照の追加」を選択。

      OpenTK_01.png
      「参照マネージャ」ウィンドウが開くので、「参照」ボタンを押して上記2つのDLLを参照に追加する。
      OpenTK_02.png

      これらのDLLを参照したいプロジェクトに指定する。


      ※OpenTK.Compatibility.dllも入ってるが、おそらく下位互換のためのラッパーか何かと察するところなので参照には追加しないでおく。



      次に、ツールボックスにWindowsフォーム用のコンポーネントを追加します。

      「ツール」メニューから「ツールボックスアイテムの選択」を選択。


      OpenTK.GLControl.dllを参照して、チェックを入れておく。


      OpenTK_03.png

      ツールボックスにGLControlが追加されているので、フォームにドラッグして追加する。
      OpenTK_05.png

    • (3)コードを実装する


    • OpenTK_06.pngのサムネイル画像


      ※ここでOpenTK.Compatibility.dllを入れていると、同じ名前のクラス(OpenTK.Graphics.GLとOpenTK.Graphics.OpenGL.GLあたりとか)が複数の名前空間に存在していて、エラーが山積みなはず。

    VisualStudio2012でプロジェクトが作れない

    Windows 8にVisual Studio 2012をインストール後、Windows Updateを実行
    その後、Visual Studio 2012を起動して、フォームアプリケーションプロジェクトを新規作成しようとすると下記のようなエラーメッセージが出た

    ----
    制約 ContractName
    Microsoft.VisualStudio.Text.ITextDocumentFactoryService
    RequiredTypeIdentity
    Microsoft.VisualStudio.Text.ITextDocumentFactoryService に一致するエクスポートが見つかりませんでした
    ----

    Microsoft Connectにもバグとして報告が上がっている模様。

    Error message when attempting to create a new Visual Studio Express 2012 Project.

    "No exports were found that match the constraint" Error creating a new project

    どうやらWindows Updateが原因らしく、解決方法は以下のとおり。

  • "ComponentModelCache"ディレクトリを削除する。

  • Windows Update実行後の発生であれば、Visual Studio 2012のインストーラーを再実行する。
  • そういえばWindows Updateかけたな・・・

    ComponentModelCacheディレクトリは下記にあるので、
    ディレクトリをまるごと削除してしまう。

    ----
    C:\Users\{ユーザー名}\AppData\Local\Microsoft\VisualStudio\11.0\ComponentModelCache
    ----

    隠しフォルダなんかになってる場合は、パス直打ちでアクセスしてみよう。

    参考:http://backyard.hatenablog.com/entry/20131002/1380722795

    演算子一覧

    組み込みではよくビット演算子使いますが,
    よく忘れるのでメモ

    ビット演算子
    演算子効果
     &ビットごとの AND
     |ビットごとの OR
     ^ビットごとの XOR
     ~ビットごとの反転(1 の補数)
     <<左シフト
     >>右シフト

    算術演算子
    記号効果
    +加算
    -減算(マイナス符号)
    *乗算
    /除算
    %余り
    **累乗
    .文字列結合

    代入演算子
    記号効果
    =代入
    +=加算して代入
    -=減算して代入
    *=乗算して代入
    /=除算して代入
    %=乗余して代入
    **=累乗して代入
    .=文字列として結合(追加)

    等価比較演算子
    記号効果
     ==値が等しければtrue
     !=値が等しくなければtrue
     >値が大きければtrue
     <値が小さければtrue
     >=値が同じか大きければtrue
     <=値が同じが小さければtrue
     eq文字列として等しければtrue
     ne文字列として等しくなければture
     lt文字コードが大きければtrue
     gt文字コードが小さければtrue
     le文字コードが同じか大きければtrue
     ge文字コードが同じか小さければture
     cmp大きければ-1、等しければ0、小さければ1
     =~ 正規表現。指定文字列があればtrue
     !~ 正規表現。指定文字列がなければtrue
     !否定。真のとき偽、偽のとき真
     <=>値が大きければ-1、等しければ0、小さければ1

    短終論理演算子
    記号効果
     &&条件が両方成立すればtrue (AND)
     ||どちらかの条件が成立すればtrue (OR)

    論理演算子
    記号効果
    &ANDを返す
    |ORを返す
    ^XORを返す
    (&,|,^)=指定論理を抽出して代入

    その他
    <<ヒア演算子。指定キーワードまでの文字列を代入
    ++インクリメント演算子
    --デクリメント演算子

    Raspberry PiでHDMI液晶を使う

    aitendoでHDMI液晶キットを買ってみたので,Raspberry Piにつないでみるにあたり,解像度設定まわりのメモ.

    http://www.aitendo.com/product/9048


    800x480の7インチ液晶とセットになった自作キットを購入したが,ここを見ても800x480設定がない模様.
    使っている人が居ないわけではなさそうなので調べてみたのでメモ。

    /boot/config.txtをいじるので,設定ミスしても復旧できるように,sshでのログインを可能にしておいた.
    当然ながら設定ファイルのバックアップ取って作業を行う.

    #設定ファイルのバックアップして,sshでのログインを推奨
    #sudo vi /boot/config.txt
    
    # uncomment to force a specific HDMI mode (here we are forcing 800x480!)
    hdmi_group=2
    hdmi_mode=1
    hdmi_mode=87
    hdmi_cvt 800 480 60 6 0 0 0
    
    sudo reboot
    



    最上段がズレて最下段に来ているような気がする.

    参考:https://learn.adafruit.com/adafruit-5-800x480-tft-hdmi-monitor-touchscreen-backpack/raspberry-pi-config

    RaspbianでWebカメラを使ってみる(uvccaptureとかmotion)

    RaspbianにUVC対応のWebCAMをUSB接続すれば、概ね苦労なく認識してくれるはず.

    最近のWebカメラはUVC対応多いと思うけど,ちょっと古かったりするとそうもいかないので注意.

    昔々beagleboard使ってた頃にはよくやったもんですが,チップ調べて入手してドライバ入手してカーネル再構築とかきっと大変だと思うのでやりたくないですし,カメラ選んだほうが早いです

    #/dev/videoXが存在することを確認しておく.
    #何も出てこないとデバイス認識されてないと思った方がいい.
    #X:0から始まるキャプチャデバイス
    ls /dev/video*
    
    #uvccaptureのインストール
    sudo apt-get -y install uvccapture
    
    #この辺りのオプションで叩いてみる
    #解像度は対応してなければ自動で設定してくれる模様.
    uvccapture -v -o/var/tmp/output.jpg -d/dev/video0 -x640 -y480 -q75 -m
    
    #motionのインストール
    sudo apt-get -y install motion
    
    #とりあえず起動してみる
    sudo motion
    
    ブラウザからhttp://localhost:8081にアクセスすれば画像が見られる.はず
    elecomのCAM-DLG200シリーズなどではuvccaptureで画像の取得ができなかったが,motionではうまくいった.
    しかしこのUCAMシリーズ.明るい場所に弱い模様.
    ucam.jpg
    夕方の日が沈む前後でほぼ同じ場所を撮った画像だが,左は白潰れしていてほぼ何かわからない.右は日が沈んできて空が暗くなってきたあたり.
    UCAMさんの名誉のために言っておくと,本当に比較したいなら別のカメラで同じ場所を同じ時間に撮っておくべきではあったし,暗がりではなかなか頑張ってくれるカメラと思える.

    日中,日の当たる部屋なんかを撮っていても白潰れする.
    監視カメラや屋外を撮る用途には向かないかも.


    顔やらなんやら室内で取るWebカメラだろうから,その辺り狙って作っててお外の監視に向きませんてのはあるのかもね,


    参考:
    http://linux.yebisu.jp/memo/800
    http://itkobo-z.jp/wp/archives/490
    http://yamaryu0508.hatenablog.com/entry/2014/08/16/232106

    Raspberry Piでsambaを使う

    raspberry piにraspbianを入れて,監視カメラ代わりにしてたんですが

    定期的にファイルを吸い上げないと不安なのでsambaで共有かけることにした.


    /tmp/motionを共有かけるにあたって設定したことを記す.
    #sambaのインストール
    sudo apt-get update
    sudo apt-get install samba
    
    ----
    sudo vi /etc/samba/smb.conf
    #viでカーソルキー押すと「ABCD」が入るときは
    #コマンドモードで「:set nocompatible」
    
    #変更したところを記載します。
    [global]
       workgroup = WORKGROUP
       interfaces = 192.168.1. 127.0.0.0/8 eth0
      
    [public]
       comment = Public
       path = /tmp/motion
       public = yes
       read only = no
       browsable = yes
       force user = your_username
    
    #sambaをリスタート
    sudo service samba restart
    
    注意

    interfaces = 192.168.1. 127.0.0.0/8 eth0
    の部分は適宜環境により書き換えのこと.

    また,your_usernameはraspberry piにログインして操作しているユーザー名を入れる.


    もしも,下記のような警告が出たら→sambaのサービス名変わった?
    $ sudo service samba restart
    Failed to start samba.service : Unit samba.service is masked.
    
    
    
    
        
    
    
    
    

    viエディタで改行を削除する

    viを使っていると、改行を削除できなくて困ったことがある。

    具体的に例を挙げるとこんな時。

    ------
    今日は仕事に
    行きたくない
    ------

    ↓改行を削除

    ------
    今日は仕事に行きたくない
    ------


    これをGUIのテキストエディタで行うのはBackSpace押すだけで簡単なんですが、
    viでは同じ操作でできません。

    これまではこういう事態に陥らないようにこまめにSaveして書き込んでたんですが、
    どうやらコマンドモードでカーソルを改行を削除したい行末に移動させて「J」キー押下することでできるようです。
    (コマンドモードはESCキー押したらなるやつ)

    勉強になった

    WiiのBluetoothモジュールを流用する

    http://petit-noise.net/blog/zaurus-%E7%94%A8-bluetooth-%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E4%BD%9C%E3%81%A3%E3%81%A1%E3%82%83%E3%81%86%E3%81%9E-%E5%A4%B1%E6%95%97-%E3%81%9D%E3%81%AE1/

    キャラクタ液晶を使う

    ピンアサイン
    http://nanoappli.com/blog/archives/5363

    参考回路図
    http://hp.hana-neko.com/electro/electro/pic/16f84lcd.htm

    SDカードのピンアサイン

    SDカードを利用するにあたり、ピンアサインを調べたので書き留めておく。

    ピンアサイン

    SD.png

    SDモードの場合
    PinNameMode:SD
    1DAT3DataLine 3
    2CMDCommand Line
    3VSS1Ground
    4VDDSupply Voltage
    5CLKClock
    6VSS2Ground
    7DAT0DataLine 0
    8DAT1DataLine 1
    9DAT2DataLine 2

    SPIモードの場合
    PinNameMode:SPI
    1CSChip Select / Slave Select (SS)
    2DIMaster Out Slave In (MOSI)
    3VSS1Ground
    4VDDSupply Voltage
    5CLKClock (SCK)
    6VSS2Ground
    7DOMaster In Slave Out (MISO)
    8IRQNC / IRQ
    9NCNC

    [iOS]自作アプリで連絡先のデータを利用する

    自作アプリで連絡先にアクセスする際は,ユーザーの許可が必要

    //連絡先へのアクセス許可の有無を確認する方法
    ABAuthorizationStatus status = ABAddressBookGetAuthorizationStatus();
    
    if(status != kABAuthorizationStatusAuthorized)
    {
        //ユーザーの許可がない場合の処理
        ABAddressBookRequestAccessWithCompletion(NULL, NULL);
    }
    

    [iPhone] アドレス帳からデータを取ってきました
    http://ameblo.jp/k-power2/entry-10501681615.html

    ABPerson Reference
    https://developer.apple.com/library/ios/documentation/AddressBook/Reference/ABPersonRef_iPhoneOS/#//apple_ref/doc/constant_group/Phone_Number_Property

    iOS Address Bookプログラミングガイド
    https://developer.apple.com/jp/documentation/AddressBookProgrammingGuideforiPhone.pdf

    [iOS]自作アプリから連絡先を参照・利用する

    iOS 6 で連絡先へのアクセス許可を取得する
    http://program.station.ez-net.jp/special/handbook/objective-c/iphone/grant/address-book.asp

    iOSアプリでアドレスブックを利用する
    http://kesin.hatenablog.com/entry/20120909/1347199324

    iOSでABAddressBookを使って連絡先情報を取得する
    http://www.aguuu.com/archives/2012/06/abaddressbook/

    [iOS]自作アプリから電話をかける

    自作アプリから電話をかける時のコード.

        NSString *str = @"tel:";
        NSString *header = @"tel:";
        NSURL* url = [NSURL URLWithString:[header stringByAppendingString:str]];
    
        // tel:で電話アプリが起動
        [[UIApplication sharedApplication] openURL:url];    
    

    PSoC 4200 Prototyping Kitを使ってみる(Lチカ編)

    IOの自由度が高いPSoCを使ってみることにしました。

    まずは調達。
    チップとデバッガを買ってバリバリ使うつもりでないならば、USB接続で書き込みできるキットがおすすめです。

    -----
    PSoC5LPのキット
    基板付き体験編 ARM PSoCで作るMyスペシャル・マイコン
    ※通販などで入手できる5LPキットはこれだけかも?

    product_PMB1.jpg

    -----
    PSoC4シリーズのキット
    サイプレス CY8CKIT-049-42xx PSoC 4200 プロトタイピングキット

    PSoC 4200 Prototyping Kit: マイコン関連 秋月電子通商

    PSoC 4200 Prototyping Kit - スイッチサイエンス

    CY8CKit-049_full_img.jpg
    -----
    ちなみに、2015年上半期に5LP搭載のPrototyping Kitが出るようです。
    Cypress、PSoC 5LPプロトタイピングキットの提供を開始(マイナビ)
    -----


    他にもあるようですが、安価に入手可能なPSoC 4200 Prototyping Kitを利用してみることにしました。

    こちらは見ての通りUSB端子に挿さるボードになっていて,LEDなんかも実装済みで手っ取り早く試すにはお手頃なキットです.


    それではお約束のLチカを試してみます・・・・といっても実はこのPrototypingKit,はじめからLチカが入っています...
    電源入れて終わりでは面白く無いので,今回はサンプルを使いながら周期を変更してみようと思います.


    PSoC Creatorのインストール


    cypressのサイトから,統合開発環境であるPSoC® Creatorをダウンロードしてインストールします.
    http://japan.cypress.com/psoccreator/

    ドライバのインストール

    PSoC 4200 Prototyping KitはUSBポートに差し込んでプログラムしますので 事前にUSB-Serialドライバのインストールを行っておきます.

    ブラウザでhttp://www.cypress.com/?rID=83110にアクセスし、「USB-Serial SDK Windows Installer & Configuration Utility」をダウンロードしてインストールします。
    インストール後にボードをUSBポートに差し込むと認識されることを確認します。

    ※デバイスマネージャ上でCOMポート番号を確認し、COMポートの番号が2桁(10番以降)であれば9以下にしておく。

    プロジェクトのダウンロード

    サンプルプロジェクトをダウンロードします.

    http://www.cypress.com/?docID=47827

    回答する際はパス名に日本語が入らないようにしたほうがいいかもしれません.

    フォルダを解凍したらSCB_Bootloader.cywrkを開くとPSoC Creatorが起動します.

    既にPSoC Creatorが入ってる人

    開いた時にコンポーネントの置換えを行う旨のダイアログが出るかもしれません. 置き換えの際にArchiveするかどうか聞かれますので,適宜進めてください.

    プロジェクトをいじってみる

    Workspace Explorerを見てみるとプロジェクトが2種類入っています.

    20150324_05.jpg

    「Bootloadable Blinking LED」がLチカのプロジェクト,「UART_Bootloader」はUSB経由でプログラムを行うためのプロジェクトになります.
    PrototypingKitでは後者のプロジェクトがあるためデバッガなしでUSB経由で書き込めますが,こちらが壊れてしまった時はデバッガが必要になるようです
    デバッガ高いので新しもの買ったほうが安価かも・・・


    さて,LEDの点滅間隔を変えてみましょう.

    TopDesign.cyschタブが開いていますが,ボード上でLEDを光らせるためのブロック図が表示されています.
    PSoC Creatorを使うと,ゴリゴリソースを書いたりしなくても,コンポーネントつなげて設定するだけで動きます.

    このプロジェクトではPWMコンポーネントを使ってパルスを出力し,LEDの点滅を行っています.

    PWMコンポーネントをクリックすると,プロパティが表示されます.

    20150324_08.jpg

    細かいクロックの設定などはさておき,このプロジェクトでは
    -----
    パルスの周期:Period=2000
    点灯時間:Compare=1000
    -----
    とすることで1秒ごとの点滅が行えます.

    上記の設定を適用した後,ビルドを行います.

    20150324_09.jpg

    outputウィンドウに「Build Succeeded」が出れば成功です.
    次に書込みを行います.

    書込み

    ボードを書き込みモードにします. 下図のSW01を押しながらボードをUSBポートに差し込みます.

    CY8CKit-049_sw01.jpg

    青色LEDが早い周期で点滅していれば,書き換えモードになっています.

    toolメニューから「Bootloader Host」を選択すると書き込みツールが開きます.

    20150324_10.jpg

    書込するファイルを選択します.
    今回のサンプルプロジェクトの場合,書込するファイルは下記の通り.

    COMポートを選択し,書き込み速度を変更して書き込みます(ツールバーの矢印ボタン).
    ※この例ではCOM2

    20150324_11.jpg

    Programming Finished Successfullyが出れば成功です.

    LEDが1秒毎に点滅していると思います.

    次回はサンプルいじって他のIOの制御なんかをやってみようと思います.

    Facebookがオープンソース化したDeepLearningのフレームワーク

    ちょっと出遅れましたが,そのうち使ってみたいのでひとまず資料集めから.

    website
    touch

    記事
    Facebook AI Research、ディープラーニングに最適化したフレームワーク「Torch」向けモジュールをOSSで公開(codezine)

    技術資料
    FAIR open sources deep-learning modules for Torch
    Fast Convolutional Nets With fbfft: A GPU Performance Evaluation

    Facebook's extensions to torch/cunn.
    https://github.com/facebook/fbcunn

    MPLAB X IDEで日本語が文字化けする

    MPLAB X IDEでソース描いて保存した後、

    再度開くと日本語が全て「?」になっていた。

    保存の際の文字エンコーディングを設定できるようなので書き留めておく。

    ①プロジェクトで右クリックし、Propertiesを選択する
    ②Generalを選択する
    ③EncodingをISO-2022-JPやSHIFT_JISなどに設定する。

    mplabxide20150203.jpg

    OpenCvSharpでのIplImageとBitmapの相互変換

    OpenCvShapのバージョン:2.4.10.20141111
    (現時点でNuGetで導入可能だったパッケージ)

    using OpenCvSharp;
    using OpenCvSharp.Extensions;
    
    // Bitmap to IplImage
    IplImage iplOriginal = (OpenCvSharp.IplImage)BitmapConverter.ToIplImage(beforeBitmap);
     
    // IplImage to Bitmap
    Bitmap afterBitmap = BitmapConverter.ToBitmap(iplOriginal);
    
    <補足>
    IplImage image;
    pictureBox1.Image = image.ToBitmap();
    
    なんて書いた際に
    「'OpenCvSharp.IplImage' に 'ToBitmap' の定義が含まれておらず、型 'OpenCvSharp.IplImage' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。 」
    「一体何を参照したらいいんだ!」という場合は「using OpenCvSharp.Extensions;」をおまじないで追加することで解決できる.
    BitmapConverterはOpenCvSharp.Extensionsにいるようなので補足メモ

    C#でCSVファイルをdouble型Listに読み込む

    ファイルから読み込む際には,System.IO.Fileを利用する

    帰り値はdouble型のリストとした.

    以下は,カンマ区切りのCSVファイルから,特定のカラムをdouble型のListに読み込みを行うもので,ダブルクォートがあっても識別しない.

    タイトル行も認識しないので,必要な場合は2行目から読むなどで回避のこと.

    /// 
    /// CSVファイルを読み込むメソッド
    /// 
    /// 読み出すCSVファイル(フルパス推奨)
    /// 読み出すデータカラムのCSVファイル内でのインデックス
    /// doubleのList
    List ReadFromCsv(string csvFile, int columnIndex)
    {
        List retArray = new List();
    
        //文字コードはExcelなどで読み込めるshift_jisを想定
        string[] lines = File.ReadAllLines(csvFile, Encoding.GetEncoding("shift_jis"));
    
        for (int i = 0; i < lines.Length; i++)
        {
            string[] item = lines[i].Split(',');
            retArray.Add(Convert.ToDouble(item[columnIndex]));
        }
        return retArray;
    }
    

    C#でZIPファイルを扱う

    Webサイトから時系列データなんかを集めてきて、

    解凍して格納する場合の自動化で便利


    ---

    要求される.NET Framework :
    4.5.2、4.5.1、4.5

    主に参照加えなければならないコンポーネント:
    System.IO.CompressionとSystem.IO.Compression.FileSystem


            public void main()
            {
                string searchDir = @"XX:\HistoricalData\";
                string[] zipFileList = Directory.GetFiles(searchDir, "USDJPY*.zip");
    
                string extractDir = "USDJPY";
    
                if (!Directory.Exists(searchDir + extractDir))
                {
                    Directory.CreateDirectory(searchDir + extractDir);
                }
                else
                {
                    Directory.Delete(searchDir + extractDir,true);
                    Directory.CreateDirectory(searchDir + extractDir);
                }
    
                for (int i = 0; i < zipFileList.Length; i++)
                {
                    ZipArchive tempArchive = ZipFile.OpenRead(zipFileList[i]);
                    for (int j = 0; j < tempArchive.Entries.Count; j++)
                    {
                        ZipArchiveEntry tempArchiveEntry = tempArchive.Entries[j];
                        tempArchiveEntry.ExtractToFile(searchDir + extractDir + @"\" + tempArchiveEntry.Name);
                    }
                    tempArchive.Dispose();
                }
            }
    

    iPhoneアプリの実機デバッグ

    久々にiPhoneアプリを作ろうとしたらこんな警告が出た.

    "No signed Identity found
    Xcode can request a new iOS Development signing identity for you."

    Nosigningidentityfound.png

    母艦:Mac book Air'11 MacOS10.9.5
    端末:iPhone4S iOS8.0.2
    Xcode6.1.1

    訳してみると
    「署名IDが見つかりません.Xcodeはあなたのあたら新しい開発署名をリクエストすることが出来ます」

    よくわからないが,端末のiOSとxcode変えたあとなので証明書の入れ替えとかうまく行ってないんだろうかと勘ぐってみたが,Xcodeがリクエストできますと言っているので「Fix Issue」で押してみるも,今度は「No matching signing identity found」と出た.
    またよくわからないけど,「Fix Issue」が出てたので押してみたら動いた.

    何か手順を忘れてたのだろうか.
    アプリを実機開発する場合って,なんか必要だったっけ・・・?

    viで方向キーを押すとABCDが出る

    Raspberry Piでviを使おうと思ったら,方向キーを入力した時にABCDが入る.

    困ったので対策する.

    【方法1】
    Viを起動した後にノーマルモードで、
    -----
    :set nocompatible
    -----


    【方法2】
    ホームディレクトリに.vimrcを作成する
    .vimrcに下記の一行を記載する


    ----
    set nocompatible
    ----


    ----
    .vimrcに設定しておくと便利な項目

    設定 意味
    set number 行番号を表示
    set backspace=indent,eol,start バックスペースキーの挙動
    set autoindent 自動インデント
    set smartindent C言語の構文を読み取って自動インデント
    set tabstop=4 タブ幅をスペース4つ分に
    set shiftwidth=4 自動インデントの幅
    「syntax enable」という構文強調

    Raspberry PiへのOS(Raspbian)インストール

    Raspberry Piを買ったが,Arduinoと一緒に積まれてるだけなので,そろそろ使ってみようと思う.


    とはいえいちいちモニタつないだり周辺機器探してくるのがめんどくさい.

    ここを参考にセットアップしてみる

    イメージをダウンロードしてくる

    http://www.raspberrypi.org/downloads/ からイメージをダウンロードする。
    「NOOBS」ではなく、「OPERATING SYSTEM IMAGES」を取ってくる。

    2014-10-19-01.png

    SDカードにイメージを書き込む

    今回はWindowsで行っているので、win32diskimagerを使って、SDカードにイメージを書き込む。

    2014-10-19-02.png

    この例では、Kドライブとして認識されているSDカードに、Jドライブ上においてあるイメージを書込しているところ。

    ※MacやLinuxを使ってる場合は、ddコマンドで事足りるかも。

    Raspberry PiにSDカードを刺して起動する

    起動後にSSHでログインするので、自分の場合はルーターにログインしてDHCPクライアントを監視。

    電源ケーブル(USBケーブル)を挿したら起動する。

    暫し待つとクライアントが追加されるので、IPアドレスを覚えておく。


    以下のソフトを使っても、IPアドレス調べられるかも知れない。
    http://www.forest.impress.co.jp/library/software/netenum/
    ※自分の環境では、このソフト使ってもどれがRaspberry Piなのか分かる情報は取得できなかった。

    sshでログイン

    前項で覚えておいたIPアドレスにsshでログインする。

    なお、

    ----
    id:pi
    pass:raspberry
    ----

    でログインが可能。


    sshでログイン出来ない時
    IPアドレスは合っている様子だがログインできなかった。
    渋々モニタを繋ぐと起動時にエラーが出ていたようだった。

    ファイルシステム関連のエラーに見えたので、
    SDカードを変えて再度イメージ書込したら解決した。


    vncをインストールしておく


    sshでログインできたら、TightVNCをRaspberry Piに導入した。

    pi@raspberrypi ~ $ sudo apt-get install tightvncserver

    インストールが完了したら起動します。

    pi@raspberrypi ~ $ tightvncserver

    なお、この際にパスワードを要求されますので入力する。

    viewerからはをポート5901を指定して起動する。

    AndroidでHTTPGETしたら落ちる

    ググったらすぐ出てくるこの時代素晴らしい.

    メインスレッドでHTTPGETをすると怒られて例外吐くとのこと.

    【参考】
    http://shirusu-ni-tarazu.hatenablog.jp/entry/2013/01/20/033030
    http://www115.sakura.ne.jp/~byunbyun/android1/android25.html

    AsyncTaskを利用すると解決できるようです.

    別スレッドの非同期処理を行うようですが...
    データダウンロードして,処理したものに応じて起動するようなアプリケーションの場合はまた色々考えなきゃならないんだろうか...

    AndroidStudio使ってみたらいきなりエラーが出た件

    「Eclipseセットアップするより早いだろう」

    Androidアプリで試してみたいことがあったので,さくっとコード書いて走らせたいが環境がない.
    でもEclipseを0からセットアップするのめんどくさい.

    なんて思って,AndroidStudioをダウンロードして使ってみたら色々ハマったので忘れ防止にメモ


    1.なんだかよくわからん(というか詳細忘れた)がエラーが出た!


    【症状】
    (たしかビルドした時だったと思うんだけど)実行できなくなった。
    その際下記メッセージが表示される。

    ----
    Failed to complete Gradle execution
    Cause:
    A fatal exception has occurred. Program will exit
    ----

    【対策】
    Gradleの設定を変更したら直った。

    File -> Settings -> Gradle
    "Gradle VM options:"に-XX:MaxHeapSize=256m -Xmx256mと入力する。

    2.SDK Managerからツールのインストールが出来ない

    【症状】
    SDK Managerからツールをインストールしようとしたが,進まない.

    【対策】
    「SDK Manager.exe」を「Program Files」に置いていたため発生した模様.Windows VISTA/7ユーザーは「SDK Manager.exe」を単独で右クリックし「管理者として実行」する.AndroidStudioから起動する場合(※Android SDK Managerのメニューから[Tools]→[Android AVDs]の順でAndroid AVDの呼出しは可能)はAndroidStudio自体を「管理者として実行」で起動すると解決.
    AndroidStudioというか,Windowsでハマったのかも.

    3.Galaxy Nexusで実機デバッグが出来ない.
    【症状】
    端末側で「USBデバッグモードに接続」,「提供元不明のアプリをインストールする」のチェック入れているにも関わらずデバッグしてもAttachされない.というかOSでデバイス見つけられていない事に気づいてGoogle製ドライバをインストールするも,ドライバのインストールが出来ない

    【対策】
    ここを参考に対策.
    なんだかよくわからないけど,INFファイルをいじってやらないとドライバインストールが出来ない模様.

    ドライバinfの場所:
    (C:)⇒android-sdk-windows⇒extras⇒google⇒usb_driver⇒android_winusb.inf

    android_winusb.infを開いて
    [Google.NTx86]と[Google.NTamd64]に追記。

    --
    ;Google GalaxyNexus
    %SingleAdbInterface% = USB_Install, USB\VID_XXXX&PID_XXXX
    %SingleBootLoaderInterface% = USB_Install, USB\VID_XXXX&PID_XXXX
    %CompositeAdbInterface% = USB_Install, USB\VID_XXXX&PID_XXXX&REV_0100
    --

    XXXXの部分に接続している端末のVIDとPIDを入れる.
    なお,VIDとPIDは端末ごとで違うのでデバイスマネージャで確認すること
    ※デバイスの「プロパティ」→「詳細」タブ→「デバイスインスタンス」から確認可能.

    しかも繋ぎ直すと時々VIDとかPID変わって認識しなくなっている模様.
    これはめんどくさい!

    FTDI USB・シリアル変換ケーブル(TTL-232R-5V)のピンアサイン

    よく使うのでメモ


    秋月電子通販サイト
    FTDI USB・シリアル変換ケーブル(5V)[TTL-232R-5V]
    FTDI USB・シリアル変換ケーブル(3.3V)[TTL-232R-3V3]

    仕様
    ・電源:5V(最大75mA供給可能)
    ・信号レベル:TTL 5V
    ・ケーブル長:1.8m
    ・コネクタ仕様:6ピン ピンソケット(2.54mmピッチ)

    ピン配置
     黒 :GND
     茶 :CTS
     赤 :VCC(5V 最大75mA出力)
     橙 :TXD
     黄 :RXD
     緑 :RTS

    ttl-232r_pin.jpg

    参考資料
    TTL-232Rシリーズ参考資料.pdf

    テキストを3Dモデルにする

    3Dプリンタを持ってると、何でもいいから出力してみたくなるもの。


    blenderを用いて文字列を3Dモデルに出力するまでの段取りを書き留めておきます。

    クリップボード01.jpg

    クリップボード02.jpg

    クリップボード04.jpg

    クリップボード05.jpg

    クリップボード06.jpg

    クリップボード07.jpg

    クリップボード08.jpg

    クリップボード09.jpg

    クリップボード10.jpg

    クリップボード11.jpg

    クリップボード12.jpg

    クリップボード13.jpg

    クリップボード14.jpg

    クリップボード15.jpg

    クリップボード16.jpg

    クリップボード17.jpg

    10295561_839605779386953_8862134802459999022_o.jpg

    DataTable.Select() で日付を指定する


    C#のDataTableでSelect()する際に、日付型を指定する際にはこんなかんじに記述するらしいのでメモ。

    DataTable table = ...GetData();
    // ...
    DataRow[] rows = table.Select(string.Format(
    	"[{0}] = #{1}#",
    	"DATE_COLUMN_NAME", DateTime.Today));
    


    範囲で指定する場合はこんな感じ。

    DataRow[] rows = table.Select(string.Format(
    	"#{1}# <= [{0}] AND [{0}] <= #{2}#",
    	"DATE_COLUMN_NAME", DateTime.Today, DateTime.Today.AddDays(1)));
    

    PICでBluetoothを使ってみる(1)

    PIC24FJ64GB002というUSBホストコントローラ内蔵のPICがあるようです。


    BluetoothのドングルをPICにUSB接続すればBluetoothを使えるとのことでして、

    4.0LEのものも使えるライブラリも存在するようです。


    輸入品のBluetooth開発ボードとかって、

    なんだかちょっとお高い&技適の問題とか考えると手が出せなかったのですが

    (大して安くはないけど)ワンチップに魅せられて使ってみることにしました。


    マイコンにはPIC24FJ64GB002を使用する.

    以前は秋月では売ってなかったので共立エレショップで購入したが,

    最近では秋月でも売ってる模様.

    値段がぜんぜん違う...

    ----------
    1.開発環境とかのセットアップ

    MPLABR X統合開発環境(IDE)のダウンロード
    http://www.microchip.com/pagehandler/ja-jp/family/mplabx/

    XC16コンパイラのダウンロード
    http://www.microchip.com/pagehandler/ja-jp/devtools/mplabxc/

    PICkit 2 Development Programmer/Debugger
    http://www.microchip.com/DevelopmentTools/ProductDetails.aspx?PartNO=pg164120

    今回は手元にあるPicKit2を使うことにしたので、

    PICkit 2 v2.61
    PICkit 2 Firmware V2.32
    をダウンロードしてインストール

    ----------
    2.回路図とか

    今回はペアリングして何らかのデータをマイコンからPCに投げ込めればいいとのことで、

    こんな感じで設計。

    ----------
    3.ライブラリのビルド
    btstackをダウンロードしてきて、XIDEにプロジェクトをインポートする。

    ビルドすると何事も無く通るようなので気にせず書き込みした。

    困ったときのhdfsフォーマット

    rm -rf /var/lib/hadoop-hdfs/cache/*
    rm -rf /var/log/hadoop-hdfs/*

    $ su
    $ su hdfs
    $ hdfs namenode -format
    $ exit
    $ service hadoop-hdfs-namenode start
    $ service hadoop-hdfs-datanode start
    $ service hadoop-hdfs-secondarynamenode start
    $ su hdfs
    $ hadoop fs -mkdir /user
    $ hadoop fs -mkdir /[使用するユーザーのディレクトリ]

    参考:http://d.hatena.ne.jp/mmitou/20121201/1354355874

    Autoforexiteでエラーが出たので

    久しぶりにAutoforexiteを使おうとしたら「no strings now」と出て処理が進んでいるように見えない


    アプリケーション側のエラーなのかサイトの構成変わったからなのかよくわからんのだが、

    今日明日のものでバージョンアップするとは思えなかったのでなんとかしてみた。

    HTMLのソースから日付+リンクの情報を引っこ抜こうとするも、このサイトはフレームの中身だけ叩こうとするとトップにリダイレクトされるようだ。

    ファイルを直接叩いてみると行けるみたいだったので日付総当たりで取得してみた。

    ただし当然ながら、存在しないファイルを叩きに行くと当然エラーページを吐く。

    ダウンロードした時点でzipファイルなのかエラーページなのかを判定するよりも解凍時に中身の有無で判定したほうがめんどくさくないかも。

    ということで作ってみた。


    DL後の通貨毎の仕分け処理が遅いですが、試用版ということで公開してみることにします。

    ダウンロード

    mahoutでRandom Forestを使ってみるまでのメモ

    windows機に入れたPoderosaからセットアップを進めることにした。
    セットアップされるのはESXiに入れたCentOS6.5 x64
    sshでログインするためにすくなくともyum install opensshをしておくこと。

    以下、rootで作業する

    ※これだけ見たらなんとなくすっきりする人のためにhistoryを貼っておく
    4 rpm -ivh jdk-8u5-linux-i586.rpm
    5 ls
    6 wget http://archive.cloudera.com/cdh4/one-click-install/redhat/6/i386/cloudera-cdh-4-0.i386.rpm
    7 yum --nogpgcheck localinstall cloudera-cdh-4-0.i386.rpm
    8 yum ls
    9 ls
    10 rpm --import http://archive.cloudera.com/cdh4/redhat/6/i386/cdh/RPM-GPG-KEY-cloudera
    11 yum install hadoop
    12 ls
    13 hadoop fs -ls
    14 yum install mahout
    15 yum install hadoop-conf-pseudo

    jdkのインストール
    http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
    からダウンロードする。
    パラメータの変わるURLからダウンロードさせられるので
    実機でブラウザ使ってダウンロードしない場合ちょっとコツがいる。

    (試した方法)
    Chromeでダウンロード初めてすぐキャンセル。

    「ダウンロード」からリンクアドレスをコピーしてコンソールに貼り付け

    wget http://download.oracle.com/otn-pub/java/jdk/8u5-b13/jdk-8u5-linux-i586.rpm?AuthParam=XXXXXXXXXX_YYYYYYYYYYYYYYYYY

    ダウンロードが終わったらファイル名がjdk-8u5-linux-i586.rpm?AuthParam=XXXXXXXXXX_YYYYYYYYYYYYYYYYY
    となっているのでリネームしておく

    rootになって
    rpm -ivh jdk-8u5-linux-x64.rpm

    cdh4のリポジトリをインストール
    yum --nogpgcheck localinstall cloudera-cdh-4-0.x86_64.rpm
    rpm --import http://archive.cloudera.com/cdh4/redhat/6/x86_64/cdh/RPM-GPG-KEY-cloudera

    yumでhadoopのインストール
    yum install hadoop

    続いてyumでmahoutのインストール
    yum install mahout

    hadoop用設定ファイルのインストール

    yum install hadoop-conf-pseudo

    使う機体の構成
    centos-vm01 CentOS 6.5 64ビット版 namenode/datanode
    centos-note01 CentOS 6.5 32ビット版 datanode
    centos-note02 CentOS 6.5 32ビット版 datanode
    centos-note03 CentOS 6.5 32ビット版 datanode

    iptables,hostsの設定

    /etc/rc.d/init.d/iptables stop
    chkconfig iptables off
    chkconfig --list iptables

    設定ファイルをslaveにばらまく
    scp 192.168.11.XXX:/etc/hosts /etc/hosts
    scp 192.168.11.XXX:/etc/hosts /etc/hosts
    scp 192.168.11.XXX:/etc/hosts /etc/hosts

    sudo reboot

    [/var/log/hadoop-hdfs/hadoop-hdfs-datanode-vagrant-centos65.vagrantup.com.log]
    2014-02-18 16:09:55,500 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for block pool Block pool BP-
    862701839-192.168.33.10-1392739729485 (storage id DS-674077449-192.168.33.10-50010-1392578724409) service to localhost/127.0.0.1:8
    020
    java.io.IOException: Incompatible clusterIDs in /var/lib/hadoop-hdfs/cache/hdfs/dfs/data: namenode clusterID = CID-a578ba1f-9779-4
    eff-9b51-a0cd3093acb2; datanode clusterID = CID-26399fe0-9d4c-4690-834e-427d7cd8d36d
    NameNode のメタファイルが初期化されるため、NameNode が管理していないデータとなってしまう
    DataNode の対象ディレクトリを削除し、DataNode を起動し直せば良い
    対象ディレクトリは /etc/hadoop/conf/hdfs-site.xml で確認できる

    わけわからなくなったら,必要なデータをローカルに写すなりバックアップとってから力技.
    rm -rf /var/lib/hadoop-hdfs/cache/*

    このあと各サービスを再起動する.

    複数のスレッドから単一のログファイルへ書き出しを行う

    似たような処理をパラメータ変えて複数のスレッドで実行して処理時間を短縮してみようと試みて、

    各々のスレッドの処理結果は単一のログファイルに追記し、Excelで開けるように考えてました。

    File.AppendAllTextなんかを使って、いざ複数のスレッドから書き込んでみるとIO.Exceptionが発生。

    「別のプロセスから開いてますよ」って当然か。

    FileShare.ReadWriteにすることでIO.Exceptionを回避できるようで、下記のコードでログ追記メソッドを実装した。

    private void Logging(string logFullPath , string logstr)
    {
    	FileStream fs = new FileStream(logFullPath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
    	StreamWriter sw = new StreamWriter(fs, Encoding.GetEncoding("Shift_JIS"));
    	TextWriter tw = TextWriter.Synchronized(sw);
    	tw.Write(logstr);
    	tw.Flush();
    	fs.Close();
    }
    

    排他処理...になるのかな?

    SQLiteでテーブルの一覧を取得するためのクエリ

    SQLiteのファイルが大きくなってくるとデータベースブラウザなんだかで開くのが時間かかって来る。

    クエリ書く時に「テーブル名なんだっけ?」なんて時に下記のクエリでリストが取得できる

    ----
    select name from sqlite_master where type='table' order by name;
    ----

    SyntaxHighlighterのbrushの種類

    各言語ごとのbrushと指定方法は以下のとおり

    Brush name Brush aliases File name
    ActionScript3 as3, actionscript3 shBrushAS3.js
    Bash/shell bash, shell shBrushBash.js
    C# c-sharp, csharp shBrushCSharp.js
    C++ cpp, c shBrushCpp.js
    CSS css shBrushCss.js
    Delphi delphi, pas, pascal shBrushDelphi.js
    Diff diff, patch shBrushDiff.js
    Groovy groovy shBrushGroovy.js
    JavaScript js, jscript, javascript shBrushJScript.js
    Java java shBrushJava.js
    JavaFX jfx, javafx shBrushJavaFX.js
    Perl perl, pl shBrushPerl.js
    PHP php shBrushPhp.js
    Plain Text plain, text shBrushPlain.js
    PowerShell ps, powershell shBrushPowerShell.js
    Python py, python shBrushPython.js
    Ruby rails, ror, ruby shBrushRuby.js
    Scala scala shBrushScala.js
    SQL sql shBrushSql.js
    Visual Basic vb, vbnet shBrushVb.js
    XML xml, xhtml, xslt, html, xhtml shBrushXml.js

    int型配列をcsvファイルに書き出しする

    // int型の配列
    int[] intArray = { 1, 2, 3, 4, 5, 6 };
    
    // string型の配列に変換
    string[] stringArray = Array.ConvertAll(intArray, delegate(int value)
    {
        return value.ToString();
    });
    
    // 配列をCSV文字列に変換
    string csvString = string.Join(",", stringArray); 
    

    Microsoft.Jet.OLEDB.4.0 プロバイダはローカルのコンピュータに登録されていません

    WinXP/VS2010 で作ったプロジェクトをWin7/VS2012に持ってきて実行した際、下記の例外が発生した。

    System.InvalidOperationException
    Microsoft.Jet.OLEDB.4.0 プロバイダはローカルのコンピュータに登録されていません

    何かが足りないのかと思いつつ下記のページを参照。

    http://www.microsoft.com/ja-jp/download/confirmation.aspx?id=21373

    VSのプロジェクトの設定で 「ビルド」→「プラットフォームターゲット」の設定を確認するに、「Any CPU」になっていたので「x86」に変更して実行すると解決した。

    Kinectをvmware上で使おうとしたら

    Kinectを買った.

    MacBook AirのVMware fusion(win7 64bit)上にKinect for windows SDKを入れてセットアップし,

    Kinect Fusion(D2D)起動してみたところ,

    ステータスバーに「no match found kinect」の文字が・・・


    http://msdn.microsoft.com/en-us/library/jj663795.aspx

    を読むにVMware上でも動くようですが,

    >Only the Kinect for Windows sensor will work on a virtual machine. Kinect for Xbox sensors are not supported.

    kinect for windowsはVMware上で動くけど,Kinect for Xboxは動かない・・・?

    そもそもKinectにそんな種類ってあったべか

    ↓もってるのはこっちで
    Xbox-360-Kinect-センサー

    ↓なんだかよくわからないけど高いKinectがいたってほうはこっち
    【商業用】Kinect for Windows センサー L6M-00020

    なんだか商用利用版だかしらんけど2種類いた模様.

    なんだよ,仮想環境じゃ使えないのかよ

    Kinect for Windows SDK v1.7 の KinectFusionを使ってみる(C#)
    http://www.naturalsoftware.jp/blog/8222

    mahoutを使ってみる(1)

    Hadoopのセットアップが終ってある程度使える環境が整いましたので,
    ここで,次はmahoutを使ってみることにしました.

    まずはインストール.

    yum install mahout
    

    以上で完了.かんたん!

    ちなみに,Hadoopをインストールした際に入れたclouderaのレポジトリから取ってきた様子.バージョンは0.5の模様.

    第3回 Mahoutの環境構築とFP-Growthによるマーケットバスケット分析を参考に,fpgを使ってみることにします.

    まずは使用するデータのダウンロードして,いきなり実行

    mahout fpg -i /path/gihyo-mahout-fpg-sample.csv -o /path/output/gihyo-mahout-fpg-sample --method mapreduce
    Error: JAVA_HOME is not set.
    

    エラーを吐くので,/usr/bin/mahoutに直書き.

    -----------
    vi bin/mahout

    # 上の方の行に、この記述を追加
    MAHOUT_JAVA_HOME=/path/jvm
    (/path/jvmのところにJVMのパスを入れる.自分の環境では/usr/java/jdk1.8.0だった.)
    -----------


    これで再度実行すると処理が始まりました.

    ちなみにオプションで「--method mapreduce」を指定したが,これはHDFS上で実行するものである.
    実行後の出力ファイルはバイナリで書かれているので,ローカルに持ってくるついでにテキストに変換する.

    mahout seqdumper -s output/gihyo-mahout-fpg-sample/frequentpatterns/part-r-00000 -o result.txt

    ローカルに「result.txt」ができる.
    --------
    Input Path: output/gihyo-mahout-fpg-sample/frequentpatterns/part-r-00000
    Key class: class org.apache.hadoop.io.Text Value Class: class org.apache.mahout.fpm.pfpgrowth.convertors.string.TopKStringPatterns
    Key: 1: Value: ([1],113), ([1, 19],4), ([1, 401],3), ([1, 107],3)
    Key: 10: Value: ([10],98), ([10, 303],4), ([10, 176],4)
    Key: 100: Value: ([100],94)
    Key: 1000: Value: ([1000],102), ([1000, 415],3), ([1000, 371],3)
    Key: 101: Value: ([101],121), ([101, 905],7), ([101, 163],6), ([90, 101],5), ([101, 45],5), ([101, 356],5), ([101, 137],5), ([63, 101],4), ([101, 984],4), ([101, 934],4), ([101, 861],4), ([101, 844],4), ([101, 668],4), ([101, 633],4), ([101, 564],4), ([101, 452],4), ([101, 419],4), ([101, 411],4), ([101, 397],4), ([101, 360],4), ([101, 347],4), ([101, 331],4), ([101, 290],4), ([101, 257],4), ([101, 230],4), ([101, 197],4), ([841, 101],3), ([827, 101],3), ([77, 101],3), ([74, 101],3), ([731, 101],3), ([699, 101],3), ([319, 101],3), ([273, 101],3), ([122, 101],3), ([117, 101],3), ([104, 101],3), ([101, 995],3), ([101, 964],3), ([101, 955],3), ([101, 911],3), ([101, 902],3), ([101, 878],3), ([101, 862],3), ([101, 847],3), ([101, 845],3), ([101, 746],3), ([101, 730],3), ([101, 651],3), ([101, 644],3)
    Key: 102: Value: ([102],103)
    Key: 103: Value: ([103],100)

    (以下略)
    --------

    ひとまず,使えたようです.
    次は活用に関して考えてみようと思います.

    今日はここまで.

    necomimi買ってきた(2)

    先日購入してきた脳波で動くnecomimiですが,

    通常の遊び方でひと通り遊んでみたんですが,なんだかうまいこと使えずじまい・・・・




    というわけで,とりあえず分解してみました.やむなし.

    10154006_830598373621027_4577072759731908661_n.jpg


    肝心の脳波を拾うボードはNeuroSky社のThinkGearAMモジュールを利用している模様.
    http://www.switch-science.com/catalog/978/

    このnecomimiですが,スイッチサイエンスで5000円のボードに電極とサーボ付きで3980円だったとかんがえると,非常にいいお買い物だったかも.

    ボードのピンアサインはTGAM1_pin.pdfの通り.

    TGAM1は制御用のボードとハンダ付けで接続してありますが,無理やりRx,Tx,GNDをハンダ付けして配線取り出しして組み直しました.
    (よく考えたら,データ取りたいだけならRxは要らなかったかも)

    10259735_830755953605269_6752533262536503947_n.jpg

    ボードと外部との通信はUART(57600 baud、8ビット、パリティ無し、 1 ストップビット)とのことなので,秋月のTTL-232R-5Vを使ってPCと接続し,ThinkGearNETで波形を見てみた.

    ※オシロでTxから出てくる波形を見てみると動作電圧は3.3Vなんだけど,今回は5Vのケーブルでも使えたみたいな気がする.

    10298875_830807496933448_9215633704382054685_n.jpg

    rawデータとα,β,γのデータを取り出してみた.

    ThinkGearNETはC#で記述したが,データの入っているクラスを覗いてみると,
    下記の通りセンサからの信号にα,β,γ波(あとθ波ってのもある模様)が2種類づつあった.

    using System;
    
    namespace ThinkGearNET
    {
        public class ThinkGearState
        {
            public float Alpha1;
            public float Alpha2;
            public float Attention;
            public float Battery;
            public float Beta1;
            public float Beta2;
            public float BlinkStrength;
            public float Delta;
            public bool Error;
            public float Gamma1;
            public float Gamma2;
            public float Meditation;
            public int PacketsRead;
            public float PoorSignal;
            public float Raw;
            public float Theta;
            public int Version;
    
            public ThinkGearState();
    
            public override string ToString();
        }
    }


    とりあえず描画はしてみたもののこいつらは一体何なんだろうか.

    rawデータに比べてα,β,γ波のデータの更新間隔がだいぶ遅いことを考えると,内部でFFTでもかけてから出してるんだろうかなどと想像していたが,この先はきっと色々読み込まなきゃ使えなさそうだ.

    しかし,真値がわからないというのもなんとも難しい.
    装着の仕方によってかわらんのかとか,皮膚の電導率が云々とかいろいろ考えると気になるけど,
    4000円ほどのお買い物でここまで遊べそうなおもちゃはお買い得でした.


    きょうはひとまずここまで.



    ちなみに,似たような事やってらっしゃる方々がいたようです.

    西尾泰和のはてなダイアリー
    http://d.hatena.ne.jp/nishiohirokazu/20130819/1376891440

    necomimiの分解と改造と綾波脳波
    http://www.kako.com/neta/2013-019/2013-019.html

    工作と小物のがらくた部屋
    http://junkroom2cyberrobotics.blogspot.jp/2013/06/necomimi.html

    necomimi買ってきた(1)

    薄給でなかなか買えなかったのですが

    すごくお値段がこなれてきていたので買ってしまいました.necomimi.

    耳はサーボモータのようでキュインキュイン鳴ってるんですが,

    改造して生信号とか取れたらすごく面白い気がする

    necomimi

    Hadoopのjobを停止する

    $ hadoop job -list
    1 jobs currently running
    JobId State StartTime UserName Priority SchedulingInfo
    job_201112051437_394566 1 1324883408684 hoge NORMAL NA

    下記のコマンドで停止

    $ hadoop job -kill job_201112051437_394566

    Name node is in safe mode.と出たら

    HDFSにあるファイルやディレクトリを削除しようとした際

    「Name node is in safe mode.」

    というメッセージが出て、ファイル操作ができなくなる事がある。

    hadoop-0.20 dfsadmin -safemode leave

    CNCの構想

    3Dプリンタを手に入れると,あまりにプラスチック部品が簡単に作れてしまうので

    今度は削り出しができる装置が欲しくなってきた.

    自由に使えるマニピュレータはあるので,

    ハンディルーターなんかで削り出しをやろうかと画策中.


    ただし,マニピュレータには位置か電流指令値を入れてやらないといけない.

    3Dプリンタ用に作ったSTLデータをGコードに落とした上で
    PyCAMあたり?
    Gコードを読んで位置指令値に持っていくコードを書く事になりそうだ.


    さてどうしたもんか.


    Windowsの共有フォルダをLinuxでマウントして使用する方法

    よく忘れるので書き留める。


    # su
    # mount -t cifs -o user=win_name,password= //192.168.0.5/share /mnt/samba

      Windows機のユーザー名   「win_name」
      パスワード        「設定していない」
      Windows機のIPアドレス   「192.168.0.5」
      Windows機の共有フォルダ名 「share」

    予め作っておいた/mnt/sabmaに共有フォルダをマウントできる

    いまさらながらHadoopを使ってみた

    CentOS 6.5にHadoopをインストールして使ってみた記録

    (1)CentOSのインストール
    インストール構成を選ぶ画面で「Software Development Workstation」を選んだ以外はほぼでフォルトでインストール。
    これで初回起動時にJavaがインストール済み。

    JAVA_HOMEのパスを通しておく。/etc/profileのいちばん下に追記する。
    export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk.x86_64
    export PATH=$PATH:$JAVA_HOME/bin
    export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar

    ↑実を言うとこれではサービスを起動したときにJAVAのパスが通ってない旨のメッセージが出た。
    +======================================================================+
    | Error: JAVA_HOME is not set and Java could not be found |
    +----------------------------------------------------------------------+
    | Please download the latest Sun JDK from the Sun Java web site |
    | > http://java.sun.com/javase/downloads/ < |
    | |
    | Hadoop requires Java 1.6 or later. |
    | NOTE: This script will find Sun Java whether you install using the |
    | binary or the RPM based installer. |
    +======================================================================+
    +======================================================================+
    | Error: JAVA_HOME is not set and Java could not be found |
    +----------------------------------------------------------------------+
    | Please download the latest Sun JDK from the Sun Java web site |
    | > http://java.sun.com/javase/downloads/ < |
    | |
    | Hadoop requires Java 1.6 or later. |
    | NOTE: This script will find Sun Java whether you install using the |
    | binary or the RPM based installer. |
    +======================================================================+
    +======================================================================+
    | Error: JAVA_HOME is not set and Java could not be found |
    +----------------------------------------------------------------------+
    | Please download the latest Sun JDK from the Sun Java web site |
    | > http://java.sun.com/javase/downloads/ < |
    | |
    | Hadoop requires Java 1.6 or later. |
    | NOTE: This script will find Sun Java whether you install using the |
    | binary or the RPM based installer. |
    +======================================================================+
    +======================================================================+
    | Error: JAVA_HOME is not set and Java could not be found |
    +----------------------------------------------------------------------+
    | Please download the latest Sun JDK from the Sun Java web site |
    | > http://java.sun.com/javase/downloads/ < |
    | |
    | Hadoop requires Java 1.6 or later. |
    | NOTE: This script will find Sun Java whether you install using the |
    | binary or the RPM based installer. |
    +======================================================================+

    そんなわけで,jdk-8-linux-i586.rpm を取ってきて
    rpm -ivh jdk-8-linux-i586.rpm

    (2)Hadoopのインストール
    cd /etc/yum.repos.d
    wget http://archive.cloudera.com/redhat/cdh/cloudera-cdh3.repo
    yum install hadoop-0.20

    このあたりもインストールしておく。
    hadoop-0.20-jobtracker.noarch 0:0.20.2+923.97-1
    hadoop-0.20-secondarynamenode.noarch 0:0.20.2+923.97-1
    hadoop-0.20-namenode.noarch 0:0.20.2+923.97-1
    hadoop-0.20-datanode.noarch 0:0.20.2+923.97-1
    hadoop-0.20-tasktracker.noarch 0:0.20.2+923.97-1

    スレーブの場合、datanodeとtasktrackerだけでいいのかも。


    (3)Hadoopの設定ファイル一式を作成
    cp -r /etc/hadoop-0.20/conf.empty /etc/hadoop-0.20/conf.test1
    alternatives --install /etc/hadoop-0.20/conf hadoop-0.20-conf /etc/hadoop-0.20/conf.test1 20
    alternatives --display hadoop-0.20-conf

    (4)service-start.shとか作っておいて起動する
    service hadoop-0.20-namenode restart
    service hadoop-0.20-jobtracker restart
    service hadoop-0.20-datanode restart
    service hadoop-0.20-tasktracker restart

    (5)SELinuxおよびiptableの無効化

    $vi /etc/selinux/config と
    $vi /etc/sysconfig/selinux で
    SELinuxを有効にする場合はSELINUX=enforcing
    SELinuxを無効にする場合はSELINUX=disabled

    $ /etc/rc.d/init.d/iptables stop
    $ chkconfig iptables off
    $ chkconfig --list iptables
    iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off

    1台構成のHadoopを30分で試してみる(CentOS + Cloudera)
    http://saburi380.blogspot.jp/2009/11/301hadoopcentos-cloudera.html

    4台構成のHadoopを100分で試してみる(CentOS + Cloudera)
    http://saburi380.blogspot.jp/2009/11/1004hadoopcentos-cloudera.html

    mecab関連
    http://mitsuakikawamorita.com/blog/?p=671
    http://lxyuma.hatenablog.com/entry/20121128/1354107593

    3Dプリンタ(2)

    ちょくちょくプリンタで遊んでます.

    積層痕が気になったので,
    アセトンにフィラメントやプリント失敗したゴミを入れて溶かして表面に塗布し
    ヤスリがけして仕上げてみました.


    処理.jpg

    割れや積層痕も結構消えそうです.

    これにサーフェイサーをかければ結構な仕上がりになりそうです.

    細かな部分にはパワーもあるルーターがおすすめです.

    RYOBI ホビールータ HR-100

    レーザー加工機が欲しい

    紙とかMDFを切れるようなレーザー加工機が欲しくなりました.

    アクリルなんかも切れたり彫刻できたらいいな.

    以下,ほしい物リスト

    赤色レーザー発光モジュール(円筒型) LM-101-A2

    白色LED点灯キット チャージ・ポンプ方式

    可変三端子レギュレーター 1.2~37V1.5A LM317T(ST製)

    メタルクラッド抵抗10Ω10W

    UpTex+TexMakerの環境を整えてみた

    1.ダウンロードする
     (1)Drag & Drop UpTeX
     (2)ESP Ghostscript 7.07.1
     (3)Texmaker

    2.展開する
     (1)UpTex.appを「アプリケーション」フォルダにドラッグ
     (2)ESPGhostscript.pkgを実行してインストール
     (3)TexMaker.appを「アプリケーション」フォルダにドラッグ

    3.設定する
     TexMaker.appを起動して,「texmaker」→「Preference」を開く.
     「Commands」の各項目のコマンドを書き換える

     例えば「/user/share/bin/latex」等が記入されているので,今回インストールしたUptex.app(実体はフォルダ)内のlatexを使うように書き換える.

     ↓具体的にはこんな感じ
     「/Applications/UpTeX.app/teTeX/bin/platex」

     DviPdfmの項目の部分には下記の通り入れておいた.
     日本語を使うので,dvipdfmでなくdvipdfmxにするついでに
     フォントも埋め込みにしておく
     「"/Applications/UpTeX.app/teTeX/bin/dvipdfmx" -f "/Applications/UpTeX.app/teTeX/share/texmf/fonts/map/dvipdfm/hiragino.map" %.dvi」


    4.プレビューの設定
     同じく「Commands」の中の項目に,「PDF Viewer」という項目がある.
     「External Viewer」にチェックを入れる.
     さらにプレビューを使いたいので下記の通り変更
     「open -a Preview.app %.pdf」

     ついでに,Buildのたびに新たなタスク開かないように,
     「Quick Build」項目の
     「Don't launch a new instance of the viewer if the dvi/ps/pdf file is already opened」
     にチェックを入れておく.

    5.QuickBuildの設定
     同じく「Quick Build」項目内にあるQuick Build Command内で
     「LaTex + dvipdfm + View PDF」ラジオボタンを選択しておく.
     

    この辺りの設定で,Quick BuildからPDFが生成されてプレビューが開くはず.

    ビルドインのプレビューツールとかでそれなりに詰まったけど,
    書き下してみると非常にお手軽でした.
    これで論文書ける.

    XC8コンパイラでdelayを使う

    下記コードのニーズが高いようなので

    先に成果物だけ貼っておく


    #define _XTAL_FREQ 32000000    //  delay用に必要(クロック32MHzを指定)
    
    
    #define __delay(x) _delay((unsigned long)((x)))
    #define __delay_us(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000000UL)))
    #define __delay_ms(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000UL)))
    
    // 指定した時間(num x o.1ms)だけウエイトを行う処理関数
    void Wait(unsigned int num)
    {
        int i ;
        // numで指定した回数だけ繰り返す
        for (i=0 ; i<num ; i++) 
        {
            __delay_us(100);    // 100usプログラムの一時停止
        }
    }
    


    PIC16F648Aが遊休品で転がっていたので,先日回路図書いたステッピングモータドライバのコントローラ代わりに使ってみようと画策している.


    PICなんていじるのは5年ぶり.
    大学4年の実習授業でやりすぎライントレーサーを作って以来.

    開発環境を整えるところから始めたわけだが,
    5年前からはいろいろ様変わりしていてCコンパイラが出ているようだ.

    MPLABR XC: Compiler
    http://www.microchip.com/pagehandler/en-us/devtools/mplabxc/

    MPLAB X IDEを入れてXC8コンパイラをインストールする.

    新規プロジェクトを作成する際に,使用するマイコンとコンパイラを選択できるようになるので648AとXC8を選択する.

    (※インストールの仕方に関しては様々な解説サイトがあるようなので割愛)


    早速4層の1-2相励磁プログラムを書いてみることにしたが,
    PICではアセンブラしか使ったことがないのでいろいろわからないことばかり.

    新しいものを学ぶときはコピペから始める習慣があるのだが早速詰まった.

    cf)http://www.geocities.jp/zattouka/GarageHouse/micon/Motor/Stepping2.htm

    ----
    // 指定した時間(num x o.1ms)だけウエイトを行う処理関数
    void Wait(unsigned int num)
    {
    int i ;
    // numで指定した回数だけ繰り返す
    for (i=0 ; i<num ; i++)
    {
    __delay_us(100); // 100usプログラムの一時停止
    }
    }
    -----


    __delay_us()が見つからないとのエラーが消えない.
    コンソールには「BUILD SUCCESSFUL」とは表示されているんだが・・・

    HelpからLibrary Functionを調べてみた.

    引用)MPLAB XC8 C Compiler Help Library Functions : __DELAY_MS, __DELAY_US, __delaywdt_us, __delaywdt_Ms


    -------
    __DELAY_MS, __DELAY_US, __delaywdt_us, __delaywdt_Ms
    Synopsis

    __delay_ms(x) // request a delay in milliseconds
    __delay_us(x) // request a delay in microseconds
    __delaywdt_ms(x) // request a delay in milliseconds
    __delaywdt_us(x) // request a delay in microseconds

    Description

    It is often more convenient to request a delay in time-based terms, than in cycle counts. The macros
    __delay_ms(x) and __delay_us(x) are provided to meet this need. These macros convert the time-based request into instruction cycles that can be used with _delay(n). In order to achieve this, these macros require the prior definition of preprocessor symbol _XTAL_FREQ, which indicates the system frequency. This symbol should equate to the oscillator frequency (in hertz) used by the system.
    On PIC18 devices only, you can use the alternate WDT-form of these functions, which uses the
    CLRWDT instruction as part of the delay code. See the _delay function.
    An error will result if these macros are used without defining the oscillator frequency -symbol or if the delay period requested is too large.

    See also
    _delay()
    -------

    そのまま_delay()を読んでみる.

    -------
    _DELAY() , _delaywdt

    Synopsis
    #include <xc.h>

    void _delay(unsigned long cycles);
    void _delaywdt(unsigned long cycles);

    Description
    This is an in-line function that is expanded by the code generator. When called, this routine expands to an in-line assembly delay sequence. The sequence will consist of code that delays for the number of instruction cycles that is specified as the argument. The argument must be a literal constant.
    The
    _delay in-line function can use loops and the NOP instruction to implement the delay. On PIC18 devices only, the _delaywdt in-line function performs the same task, but can use the CLRWDT instruction, as well as loops to achieve the specified delay.
    An error will result if the delay period requested is too large (approximately 179,200 for PIC18 devices, and 50,659,000 instructions for other 8-bit PIC devices). For very large delays, call this function multiple times.
    Example
    #include <xc.h>
    ?
    void
    main (void)
    {
    control |= 0x80;
    _delay(10); // delay for 10 cycles
    control &= 0x7F;
    }
    See Also
    _delay3(), __delay_us()
    , __delay_ms()
    -------

    というわけで_delay()を使用して自分で定義すればエラーが消えるようだ.
    ただし,__delay_ms()に関してもビルドは通るようだし,使えそうな気もする.

    とかいう話を後輩としていると「こんなん定義しとけばエラー消えますよ」なんて教えてくれた.

    素晴らしいノウハウである.

    ----
    #define _XTAL_FREQ 32000000 // delay用に必要(クロック32MHzを指定)


    #define __delay(x) _delay((unsigned long)((x)))
    #define __delay_us(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000000UL)))
    #define __delay_ms(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000UL)))
    ----


    明日辺りには実機に書き込みしたいところである.

    PICkit2のピンアサイン

    久々にPICを使おうとおもってPICkit2を出してきたんですが,
    すっかり使い方を忘れてしまって調べ直す羽目になったのでメモ

    ピンカテゴリ 備考
    1 VPP/#MCLR VPP/GP3 VDDから10KΩ程度のプルアップ ▲
    2 VDD Target VDD  
    3 VSS (GND) VSS  
    4 ICSPDAT(PGD) RB7/GP0 PICkit2の黒ボタン仕様では4.7kΩプルダウン必要
    5 ICSPCLK(PGC) RB6/GP1
    6 AUX(拡張端子) -  

    買いものリスト(NAS2号機)

    NAS1号機はAtomが出始めた頃に組んでみたものなんですが、
    ファンが爆音&HDD6大搭載なので少々うるさい
    つけっぱなしだと電気代も気になる上、
    容量が少々心もとなくなってきた。そんなわけで2号機を画策中です。

    NETGEAR Inc. ReadyNAS 104

    HGST 日立グローバルストレージテクノロジーズ Deskstar パッケージ版 3.5inch 4TB 32MB Coolspin 0S03361

    WESTERN DIGITAL 3.5インチ内蔵HDD 4TB SATA6.0Gb/s IntelliPower 64MB WD40EZRX

    Seagate DESKTOP HDD 3.5インチ SATA3.0 4TB 64MBキャッシュ 5900rpm ST4000DM000

    買いものリスト(ラインレーザー)

    あけましておめでとうございます.
    冬休みの自由研究(?)にラインレーザーを作ってみようかと思っています.

    買い物忘れそうなのでメモ

    赤色レーザー発光モジュール(薄型) LM-102-B

    ボタン電池基板取付用ホルダー CR2032用(小型タイプ)

    低損失レギュレーター 3.3V2A PQ3RD23(2個入)

    熱伝導両面テープ(シール) 40x40mm

    放熱器(ヒートシンク)16x25x16mm

    あとアクリル丸棒

    c.f.)http://csl.no-ip.org/cslsoftware/laserart/kougen.php

    The parameter '{0}' cannot be an empty string.

    あるウェブサイトにログイン後にファイルをダウンロードしようと画策していた.

    WebRequestでごにょごにょやるのではなく,
    ログイン操作のみWebBrowserコントロールを用いて行い,
    あとからWebBrowserコントロールの中のCookieを引っ張りだして来ることにした.


    コードはこんな感じ.

    cookieContainer = new CookieContainer();
    cookieContainer.Add(new Cookie(name,tag));
    

    実行してみたところ
    cookieContainer.Add
    の部分で例外が発生.

    System.ArgumentException: The parameter '{0}' cannot be an empty string. Parameter name: cookie.Domain
    

    Domainを空にしてはいけないとのことなので,

    Webbrowser内に入っているDomainをそのまま拝借

    wc.CookieContainer.Add(new Cookie(name,tag){Domain = webBrowser1.Document.Domain});

    こういう書き方もできるんですね.

    以上
    解決

    ※似たようなエントリがあった.
    http://stackoverflow.com/questions/18667931/httpwebrequest-add-cookie-to-cookiecontainer-argumentexception-parameternam

    型または名前空間名 'Script' は名前空間 'System.Web' に存在しません。アセンブリ参照が不足しています。

    using System.Web.Script.Serialization;
    と名前空間を宣言しようとすると 'Script' に波下線が出て
    「型または名前空間名 'Script' は名前空間 'System.Web' に存在しません。アセンブリ参照が不足しています。」
    というエラーが出てしまい、参照の追加(プロジェクトまたは参照設定右クリック)をしようにも 'System.Web.Script' が存在しない。

    解決法はというと 'System.Web.Extensions.dll' を参照に追加。
    C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5 (WinXP)
    とかそのあたりにあるはず。Win7は多分(x86)の方。
    .NET Framework 4.0 を使っててもv3.5のフォルダにあるものでOK。
    ただし下記フォルダのではダメ。
    C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0

    どんどん話すための瞬間英作文トレーニング(1)

    どんどん話すための瞬間英作文トレーニング (CD BOOK) [単行本]

    仕事帰りに大きな本屋に寄って帰ってこれる幸せを噛み締めながら買ってきました.

    中学校1〜3年程度の簡単な和訳を行いながら読み進める本です.

    「中学生(笑)」なんて半分バカにしながら買ってみたけど読んでびっくり.
    意外と・・・というか全然英訳できない.バカは私でした.

    1冊真剣に読み進めてみて,どれだけ英語が出てくるようになるのか...

    この本,期待です.

    ウェブマスターツールを使ってみた

    googleのウェブマスターツールを使ってみた。

    サイトの表示回数やら検索語句などが見られて、自分のサイトがどのようなニーズで見られているのかを客観的に把握できるとおもう。

    表示回数とクリック数も出るので取り出してみた。

    クリップボード01.png


    歩留まりが悪いようにみえるのだがどうだろうか。

    今後、検証してみよう。

    Rで3次元散布図を描く

    Rでも3次元プロットできるんだよ!

    ってことで書き方をまとめておく。

    > chooseCRANmirror()
    > install.packages("rgl")
    > install.packages("scatterplot3d")
    > library(rgl)
    > library(scatterplot3d)
    > data<-read.csv("C:/Book1.csv")
    > scatterplot3d(x = data$X, y =data$Y , z = data$Z )
    > plot3d(x = data$X, y =data$Y , z = data$Z)
    

    plot3dの結果

    scatterplot3dの結果


    ぐりぐり動かせるplot3dのほうが好き。

    そういえばこれって色分けできるだろうか。

    3Dプリンタ(1)

    1-P1130640.jpg

    届きました。

    3D PRINTER REPRAP MENDEL Evolution

    ひと通り組み立て調整は完了した状態で届くので、電源入れれば動いてしまう完成品です。

    梱包外して、リミットスイッチとベルトの締め直しを行いました。

    ロジックの検討(2)

    前回の記事にてロジックの検討をしたが、パラメータ変えた他のロジックも増やしてシミュレーションしてみた。

    なお、使用したデータは前回と同様のデータで、

    判定ロジックを変えて同じデータでシミュレーション。

    縦軸MDD、横軸RRとした散布図上において、

    平べったい点群が得られるようなロジックを欲していたが未だ得られず。

    一旦振り戻して、過去のデータからランダムに切り出した区間に対してシミュシミュレーションして結果を見てみようと思う。


    本当はロジックに使う指標の有効性を検討(PCAとか?)してから取り掛かるところなんでしょうが、今回はトップダウン的な手法と割り切っているので言及しない方針で...

    RR_MDD2.png

    データマイニングで使われるトップ10アルゴリズム

    ちょっと古い記事ですが、抜粋。

    1. C4.5

    C4.5はCLSやID3といったアルゴリズムを改良してできたもので、決定木を使って分類器を作ります。決定木といえばCARTが良く使われますが、CARTとの違いは以下のとおりです。

    • CARTは2分岐しかできないがC4.5は3分岐以上もできる
    • CARTジニ係数を分割の指標にするがC4.5は情報ベースの基準を使っている
    • CARTは木の剪定をクロスバリデーションによって行うため時間がかかるがC4.5は二項信頼限界を使うため一方行でできる

    C4.5は1997年に商用のSee5/C5.0に改善され、以下のような変更点がありました(詳細はこちら)。



    2. k-meansアルゴリズム

    k-meansアルゴリズムは言わずと知れたクラスタリングの方法ですね。こちらのブログがとても視覚的に分かりやすかったので紹介させて頂きます(画像を使わせて頂いております)。

    f:id:isseing333:20111123175556p:image


    この画像の例では、2次元に分布しているデータを5つのクラスターに分けています。手法としては、次の2ステップを反復して計算します。

     Step 1. データの割り振り(一番近い中心に割りつける)

     Step 2. 平均値の計算(クラスター毎の平均値を計算する)

    実用的には、「いくつのクラスターに分類するか」というkを事前に決定する必要があります。データから最適なkを推定する方法もいくつか提案されています(GAP推定量など)。



    3. サポートベクターマシン

    サポートベクターマシンSVM)は機械学習の分野で最も代表的な手法です。SVMを学んだ際のに感じる主な疑問は「SVMの結果を解釈できるか?」と「SVMを連続値の予測に応用できるか?」の2ではないでしょうか。個人的にはSVMの結果の解釈は難しいと感じています。ただ、数%の予測精度の改善で売上が数千万も変わるようなビジネスの現場では、「結果の可読性」よりも「予測精度」を求められることも多いと思います。この2つはトレードオフの関係にありますので。また、SVMは連続値に容易に応用できます。パッケージによっては、特に指定しなくても連続変数を認識してそのようにモデルを作るものもあるでしょう。

     SVMに関してもう1つ気になるのは、学習(パラメータの予測)にかかる時間です。特にデータが数万を超えると、顕著に計算時間が増大します。これに関しては、core-vector machineという手法が提案されており、とても早く計算できるようです。



    4. アプリオリアルゴリズム

    アソシエイションルールの分析によって、高頻度のトランザクションを見つける際に最も良く使われる手法です。「土曜はビールとおむつがペアで買われる」というアレですね。以前みかけた記事によると、これはどうやら都市伝説みたいです。どこかの店舗でたまたま発見されたルールがインパクトがあったので広まってしまったが、全体のデータで試したらそんなルールは出なかったとか(web上の記事で読みました)。「部分集団で発見されたルールが全体には適応できない」という現象は分析をしていると良くある話です。

     アプリオリアルゴリズムは強力な結果を得ることができる割に、実装は他の手法に比べて難しくありません。ですのでデータマイナーにとっては最初に実装することのできる手法でしょう。近年アプリオリアルゴリズムの顕著な発展は、FP-growth(frequent pattern growth、頻出パターン成長)という手法です。以下のようにデータベースをスキャンすることでルールを作成できます。データベースを2回しかスキャンしないので、アプリオリアルゴリズムよりも格段に早い手法です。

     Step 1. データベースを、全ての重要な情報を持つFP-treeという構造に圧縮する

     Step 2. 圧縮されたデータベースを、高頻度セットに関連する条件付きデータベースに分割し、それぞれをマイニングする

     他にも様々なトピックがあり、(1)分類学の組み込み、(2)インクレメンタルマイニング、(3)アイテムの連続変数の利用、(4)頻度ではない指標の利用、(5)アイテムセットよりリッチな表現(ツリーグラフによる表現)、(5)閉じたアイテムセットなどがあります。



    5. EMアルゴリズム

    様々なモデルでパラメータ推定する際に使われるアルゴリズムです。モデル式が複雑になると数式展開では解を求めることができないので、EMアルゴリズムのような数値計算による最適化によってパラメータを求めます。論文では混合分布のモデルが紹介されています(なのでEMアルゴリズムというより混合モデルが良く使われるということでしょう)。

     混合分布がいくつのクラスター正規分布)から出来ているかを決める必要がありますが、この最適な数を推定する方法がいくつかあります。BICを利用したり、尤度比検定を行ったりします。BICを使った最適化を組み込んだものに、MFclust関数という手法があります(以前、この記事で紹介しました)。EMアルゴリズムの説明のときは、k-means法と混合分布の話が良く出てきます。未確認ですが、正規分布を仮定すると、k-means法は混合モデルに帰着するのかもしれません。



    6. ページランク

    ページランクは1998年にSergeyによって提案されたサーチランキングを付ける方法です。そのアルゴリズムを元にサーチエンジンを開発したGoogleは大成功を収めました。本質的には、ハイパーリンクを投票のように解釈しています。しかし単純に投票数だけを見ているのではなくて、投票元のページも分析し、重みを付けています。

     様々な改善方法が論文で提案されており、より進んだトピックはこの2冊の本に紹介されています。

    Web Data Mining: Exploring Hyperlinks, Contents, and Usage Data (Data-Centric Systems and Applications)

    Web Data Mining: Exploring Hyperlinks, Contents, and Usage Data (Data-Centric Systems and Applications)

    Google's PageRank and beyond: the science of search engine rankings.



    7. アダブースト

    1997年に提案された、アンサンブル学習と呼ばれる手法の1つです。いくつかの学習器を組み合わせることで、強力な予測性能を得ることができます。また実装も難しくありません(たった10行程度のコード)。

     多くの研究によればアダブーストは過学習しにくいことがわかっています。つまり、訓練データでエラーが0であっても、テストデータのエラーも減少できるという結果が出ています。どうしてこのような現象が起こるのか、ということについての研究もされています。Schapireらはこの論文マージンを基にした説明を試みており、この説明が成功するとアダブーストとSVMの関連性が見つかることになります。

     現実に得られるデータは変数の次元がとても大きいことが多いです。このようなときは、次元縮約と変数選択(特徴選択)2つのアプローチがあります。次元縮約は数理的な意味づけはできますが、縮約後の変数は解釈をしにくいものになります(主成分分析など)。それに対して変数選択は解釈はしやすいものの、経験的に行われることが多いため数理的な基盤はありません。しかし、アダブーストは数理的な意味合いを持たせたまま、変数選択に利用できるのではないかという研究があります(論文)。画像の分野で主に研究されていますが、アダブーストを変数選択に応用することはとても重要なトピックでしょう(xboxkinectによる認識技術も、アダブーストと類似のランダムフォレストで行われていると記憶しています)。



    8. k-近傍分類

    全ての訓練データを記憶してクラスタリングを行う、「まる暗記」型の分類器です。あるデータを、最も近いk個のデータの最多数のクラスに分類します。実装も理解するのも簡単ですが、訓練データを全て記録しておかなくてはならないのでコストが大きく、計算にも時間がかかります。

     分野によってはSVMのような高度な手法よりも性能が良いことがあります(遺伝子分野の論文)。進んだトピックとしては、精度を落とさないまま訓練データを減らす方法(condensing)、訓練データは減らすが精度が高くなる方法(editing)、近接グラフへの応用ファジーアプローチなどがあります。



    9. ナイーブベイズ

    ナイーブベイズもクラスを予測するための手法です。構築するのが簡単で、パラメータ推定するために複雑な繰り返し計算が必要ありません。そのため大きなデータに対しても適用することができます。解釈もしやすく、性能もとても高いです。

     ナイーブベイズは簡潔であり、エレガントであり、ロバストであることから様々な分野で応用されています。最も古い手法であり、形も単純であるに関わらず、性能はとても高いです。テキスト分類やスパムフィルタリングで広く利用されています。また統計データマイニング機械学習パターン認識の分野で様々な応用や改良がされています。ベイジアンネットワークboostedナイーブベイズのように進んだトピックもあります。



    10. CART

    1984年に出たこの本で提案されたCARTが、人工知能機械学習、ノンパラメトリック統計学データマイニングの分野でのマイルストーンになった。

    Classification and Regression Trees

    Classification and Regression Trees

     CART(Classification and Regression Trees、分類と回帰木)は2分岐の決定木によってクラス、連続値、生存時間を予測する手法です。決定木に関しては以前この記事で概要を書きました。欠測値もカテゴリとして扱うことで、欠測のあるデータをそのままアルゴリズムに突っ込むことができることも利点の一つです。



    読み終わっての感想など

    以上です。正直言ってC4.5が1番に紹介されているのが意外でした。ブースティングを組み込んだC5.0がそれだけ強力なのでしょうか。しかしそれだとランダムフォレストも同じくらい強力な気もしますが、どうなのでしょうか。何年か前のKDDコンテストで優勝した人もアンサンブル学習を使っていたみたいですし、過去10年から今後10年くらいはアンサンブル学習が最も強力なのかもしれません。

     こうして改めて勉強してみると、自分がどこまで理解しているのか分かって良いですね。「k-means法と混合分布モデルの違いは?」「アダブーストとランダムフォレストの違いは?」「ナイーブベイズベイジアンネットワークの違いは?」など、もうちょっと勉強しなきゃいけないかなと。

     今やRでどの手法も手軽に利用できますが、歴史を考えると感慨深いものがあります。むしろこんなに簡単にできちゃって良いのかと思うくらいです。これからは先人達の偉業を噛み締めながら利用することにしましょう。そして次の革新的な手法も提案していきたいところですね。

     あとは、回帰モデルや判別分析などのような、古典的な統計手法は入っていませんでしたね。これらの手法はモデルの可読性に重点を置いているので、機械学習のように性能を追求する分野ではあまり使わないのかもしれません。データを解釈するときには良いのですが、実際にシステムに組み込むときには性能不足なのでしょう。また決定木は、回帰モデルよりもさらに可読性が高いので、人気があるのかなと思います。


    おまけ

    gihyo.jpというサイトの機械学習に関する連載がとても良いです。私もこれから時間を見つけて読んでみようと思います。


    http://d.hatena.ne.jp/isseing333/20111123/1322053940


    http://www.msi.co.jp/splus/ueda/gokui/download.html

    実行中のマクロの中止方法


    マクロで繰り返し計算実行中に中止したい場合は、以下の方法あり。

    1)Ctrl + Break [11/08/24追記:または、Fn + Break]

    2)Escキー1回で止まらない場合、連打)

    3)最悪、「Ctrl+Alt+Del」で、Excelを止める

    注:マクロを再開したい場合に、エラーで開始できない場合あり。この時は、マクロが「中断」状態なので、マクロの画面で、リセットボタンをクリック。

    [参考サイト]
    http://office.microsoft.com/ja-jp/excel/HP052030751041.aspx
    マクロの実行を中止する

    http://support.microsoft.com/kb/883020/ja
    実行中のマクロを中断するには

    -------------------------------------------------------
    2013/01/16追記]

    1)Breakキーがない場合:私のDellのキーボード(KM632 ワイヤレスキーボード)には、Pause/Breakキーが(さらに、FnキーもScrollLockキーも)ない。この場合の対応策は、別途記載。

    2)Escキーで表示される画面
      (a)通常http://support.microsoft.com/kb/883020/jaにあるように、[Microsoft Visual Basic]ダイアログボックスが表示され、[継続][終了]が選択可能で、[終了]でマクロ終了する。

      (b)Solver使用時Solverの中断メッセージである[試行状況の表示] ダイアログ ボックスが表示され、[継続][中止]が選択可能だが、[中止]クリックしてもSolverが中断されるだけで、必ずしもマクロは終了しない。

     

    ロジックの検討

    思いついた4通りのロジック(A、A'、B、C)を実装して、

    同じ期間、同じデータを用いて売買シミュレーションしてみた。


    RR_MDD.png


    S_PF.png


    P-L.png

    Cの方法だけ妙に売買回数が多いように見えるが、
    平均の勝率は5割を切っているように見える。
    ドローダウンも最も大きい。

    A、A'はそれほど変わらないが、他と顕著に差が出たのがBの方法に見える。


    1つ目の図において、
    Bの方法を用いてMDDをある値までに落ち着けながら、
    リスク・リターン率を右にずらす、
    或いは+の領域に切り分けられるような方法はないだろうか。

    ひとまず、この中では最も陽の目をみそうなBの方法を用いることにして

    次はパラメータをいじってみようと思う。

    file was built for archive which is not the architecture being linked (armv7s)

    SchemeをiPadSimulatorにしているとビルドが通るのに,実機にするとリンクされない・・・?なんぞこれ

    ld: warning: ignoring file /Users/XXXX/Library/Developer/Xcode/DerivedData/XXXXX/Build/Products/Debug-iphoneos/libZXingWidget.a, file was built for archive which is not the architecture being linked (armv7s): /Users/XXXX/Library/Developer/Xcode/DerivedData/XXXXX/Build/Products/Debug-iphoneos/libZXingWidget.a

    他いろいろ出てくるけどどうやらarmv7s関連のコードがライブラリの中にないと言っている様子。
    でもライブラリのプロジェクト設定[Valid Architecture]はarmv7とarmv7sと設定ある。

    (解決方法)
    プロジェクトのTARGETSの[Build Settings]-[Architectures]-[Build Active Architecture Only]でデフォルトDebug版ではYESになっているためにいくらビルドしてもarmv7のライブラリしか出来なかったらしい。これをNOにすると2つのアーキテクチャが生成されて実行ファイル側もビルドが通るようになった.

    private field 'cached_y_' is not used

    zxing/BinaryBitmap.h:33:7: Private field 'cached_y_' is not used

    その他にもこんなエラーなど.

    Private field 'bits_' is not used
    Private field 'cached_row_num_' is not used
    Private field 'dataHeight_' is not used

    エラー出るほどのことでもない気がするけど
    ZXingWidget target -> Build Settings -> Other Warning Flags

    「-Wno-unused-private-field」
    を追記すると消えた.

    http://stackoverflow.com/questions/14593291/xcode-4-6-zxing-compile-error-after-xcode-update-4h127

    iOSシミュレータで扱うアプリケーションの実際のファイルパス

    iOSシミュレータで扱うアプリケーションの実際のファイルパスは、
    /Users/xxx/Library/Application Support/iPhone Simulator/6.1/Applications/XXXXXX-XXXX-XXXX-XXXX-XXXXXXX/hogehoge.app/
    のようになり、バンドルリソースもこの下にあります。(OS X Lion, XCode 4.6, Simulator 6.1)
iOSバージョンが変われば当該のディレクトリも変わるけど、iPhone/iPad それぞれのシミュレータでは共用らしい。
    で、このディレクトリ、シミュレータ上でアプリをアンインストールしたり、メニューから「コンテンツと設定をリセット」したときは消えるのだけど、アプリを上書きでシミュレータをスタートさせるときには同じディレクトリに上書きとなるので、たとえばバンドルリソースファイルが削除されていても、シミュレータ上には古いリソースが残っていたりします。フォルダリファレンスとして登録されたバンドルリソースのディレクトリ内容を手動で変更したときにありがち。
    また、たとえば XCode プロジェクトのフォルダをまるっとコピーして、別の開発リソースとして作業をしていても、プロジェクト名(BundleID)が同じものは、シミュレータ上のバンドルリソースも同じディレクトリになります(シミュレータ上同じアプリなんだから当たり前ですが)。
    以上は実機でも同じです。上書きのときに古いバンドルリソースは OR を取る形で残っている。
    なので、XCode プロジェクトを成果物としてリリースする場合、固めたリリース物を再度解凍して別ディレクトリで最終テスト。。なんてやってるつもりが、XCode 上には存在しないリソースが実は手元のデバイスやシミュレータには残っていて、「おい動かねーぞ」「あほかこっちでは動くわ」なんてやり取りをするハメになったりします。というかなった。反省した。
    最終テストはクリーンな環境でやりましょう。。という、ごく当たり前のお話でした。
     
    あと、シミュレータアプリのディレクトリをうっかり手動で削除したりすると、
    error: failed to attach to process ID 0
    というエラーで上書きできなくなったりします。このときにも、素直にシミュレータ上のアプリを長押ししてアンインストールしましょう。

    C#でOpenGL

    【参考】☆PROJECT ASURA☆ [OpenGL] 『C#でOpenGL』
    http://asura.iaigiri.com/OpenGL/gl55.html 3. Tao Frameworkを用意する
     まずは,Tao Frameworkをダウンロードしましょう。http://www.taoframework.com/にアクセスします。
     すると,画面上部のメニューにDownloadという項目があるので,クリックします。
     ページが切り替わると,URLが書いてあるので,クリックします。



    すると,再びページが移動します。移動すると下のような画面が出てくると思うので,Downloadをクリックします。



    すると,またまたページが変わると思うので,Downloadをクリックします。
    ページが変わると,いくつかのダウンロード形式が出てくるので,exe形式のものをダウンロードします。



    ダウンロードが完了したら,ダウンロードした「taoframework-(ダウンロードしたバージョン)-setup.exe」をクリックします。このとき,注意してほしいのは,古いバージョンが既にインストールされている場合は,古いバージョンをアンインストールする必要があることです。
    exeファイルをクリックすると,セットアップ画面が出てくるので,画面に従ってセットアップします。設定は基本デフォルトのままで良いと思います。



    後は,プログラムを実行するのにDLLが必要になります。C:\Program Files\TaoFramework\libの中にDLLが入っています。いちいちプログラムと同じディクレトリに入れるのが面倒くさくて嫌なので,自分は,libファイルの中にあるDLLファイルをC:\Windows\System32にコピーしました。
     これで,一応Tao Frameworkの準備が完了したはずです。


    4. コードを組む
     いよいよC#を立ち上げて,プログラムを組んでみます。
    まずはVisual Studioを起動して,メニューから「ファイル→新規作成→プロジェクト」を選択します。「新しいプロジェクト」というダイアログがでてくるので,左側の「プロジェクトの種類」から「Visual C#→Windows」を選択。Visual Studioにインストールされたテンプレートの項目の中から「空のプロジェクト」を選択します。選択したらプロジェクト名を入力して,OKボタンを押します。



    次に,ソリューションエクスプローラーで作成したプロジェクトを右クリックし,「追加→新しい項目」を選択します。すると,「新しい項目の追加」というダイアログが出てくるので,「コードファイル」を選択し,ファイル名を指定して,追加ボタンを押します。これで,コードファイルが追加できました。
     空のプロジェクトを作成したので,アプリケーションの種類がデフォルトではコンソールアプリケーションになっているので,Windowsアプリケーションに変更します。
     ソリューションエクスプローラーで,作成したプロジェクトを右クリックし,「プロパティ」を選択します。すると,下のような画面が出てくると思います。



     「アプリケーションの種類」という欄があるので,「Windowsアプリケーション」に変更します。これでWindowsアプリケーションが作成できます。
    あとは,参照設定を設定します。ソリューションエクスプローラーで,参照設定を右クリック。「参照の追加」を選択します。下のような,ダイアログが出てくると思います。



    ダイアログの「.NET」のタブを選択して,上の画像のように以下の3つの参照を追加します。
    ・System
    ・Tao Framework OpenGL Binding For .NET
    ・Tao Framework FreeGLUT Binding For .NET
    
    追加すると,ソリューションエクスプローラーが下のようになると思います。




    これで,設定が完了です。ようやくコードを打ち込む準備が整いました。
    C#使っていれば,GLUTなんて必要ないんですが...,まぁ~慣れているのでGLUTを使っていくことにします。
    簡単なコードということで,下のコードを打ち込んで,ビルドしてみてください。
    00011:  #region Using Statements
    00012:  //
    00013:  // Using Statements
    00014:  //
    00015:  using System;
    00016:  using Tao.FreeGlut;
    00017:  using Tao.OpenGl;
    00018:  #endregion
    00019:  
    00020:  
    00021:  public class SampleProgram
    00022:  {
    00023:  	#region Fields
    00024:  	//
    00025:  	// Fields
    00026:  	//
    00027:  
    00028:  	private static int width = 800;
    00029:  	private static int height = 600;
    00030:  
    00031:  	#endregion
    00032:  
    00033:  	/// <summary>
    00034:  	/// エントリーポイント
    00035:  	/// </summary>
    00036:  	/// <param name="args">コマンドライン引数</param>
    00037:  	public static void Main( string[] args )
    00038:  	{
    00039:  		Run();
    00040:  	}
    00041:  
    00042:  	[STAThread]
    00043:  	public static void Run()
    00044:  	{
    00045:  		Glut.glutInit();
    00046:  		Glut.glutInitWindowSize(width, height);
    00047:  		Glut.glutInitDisplayMode(Glut.GLUT_DEPTH | Glut.GLUT_DOUBLE | Glut.GLUT_RGB);
    00048:  		Glut.glutInitWindowPosition(50, 50);
    00049:  		Glut.glutCreateWindow("サンプルプログラム");
    00050:  
    00051:  		Glut.glutDisplayFunc(new Glut.DisplayCallback(DisplayFunc));
    00052:  		Glut.glutKeyboardFunc(new Glut.KeyboardCallback(KeyboardFunc));
    00053:  		Glut.glutMouseFunc(new Glut.MouseCallback(MouseFunc));
    00054:  		Glut.glutReshapeFunc(new Glut.ReshapeCallback(ReshapeFunc));
    00055:  
    00056:  		Initialize();
    00057:  
    00058:  		Glut.glutMainLoop();
    00059:  	}
    00060:  
    00061:  	/// <summary>
    00062:  	/// 初期化処理
    00063:  	/// </summary>
    00064:  	private static void Initialize()
    00065:  	{
    00066:  		Gl.glClearColor(0.3f, 0.3f, 1.0f, 1.0f);
    00067:  		Gl.glEnable(Gl.GL_DEPTH_TEST);
    00068:  		Gl.glDepthFunc(Gl.GL_LEQUAL);
    00069:  
    00070:  		Gl.glShadeModel(Gl.GL_SMOOTH);
    00071:  	}
    00072:  
    00073:  	/// <summary>
    00074:  	/// ウィンドウに描画
    00075:  	/// </summary>
    00076:  	private static void DisplayFunc()
    00077:  	{
    00078:  		//バッファをクリア
    00079:  		Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
    00080:  
    00081:  		//モデルビュー行列の設定
    00082:  		Gl.glMatrixMode(Gl.GL_MODELVIEW);
    00083:  		Gl.glLoadIdentity();
    00084:  
    00085:  		//三角形を描画
    00086:  		Gl.glColor3b(255, 125, 0);
    00087:  		Gl.glBegin(Gl.GL_TRIANGLES);
    00088:  		Gl.glVertex3d(-0.5f, -0.5f, 0.0f);
    00089:  		Gl.glVertex3d(0.0f, 0.5f, 0.0f);
    00090:  		Gl.glVertex3d(0.5f, -0.5f, 0.0f);
    00091:  		Gl.glEnd();
    00092:  
    00093:  		//ダブルバッファリング
    00094:  		Glut.glutSwapBuffers();
    00095:  	}
    00096:  
    00097:  	/// <summary>
    00098:  	/// ウィンドウのサイズ変更処理
    00099:  	/// </summary>
    00100:  	/// <param name="w">ウィンドウの幅</param>
    00101:  	/// <param name="h">ウィンドウの高さ</param>
    00102:  	private static void ReshapeFunc(int w, int h)
    00103:  	{
    00104:  		width = (w > 1 ? w : 1);
    00105:  		height = (h > 1 ? h : 1);
    00106:  		Gl.glViewport(0, 0, width, height);
    00107:  
    00108:  		Gl.glMatrixMode(Gl.GL_PROJECTION);
    00109:  		Gl.glLoadIdentity();
    00110:  	}
    00111:  
    00112:  	/// <summary>
    00113:  	/// マウスの入力処理
    00114:  	/// </summary>
    00115:  	/// <param name="button">マウスのボタン</param>
    00116:  	/// <param name="state">ボタンの状態</param>
    00117:  	/// <param name="x">マウスカーソルのx座標値</param>
    00118:  	/// <param name="y">マウスカーソルのy座標値</param>
    00119:  	private static void MouseFunc(int button, int state, int x, int y)
    00120:  	{
    00121:  	}
    00122:  
    00123:  	/// <summary>
    00124:  	/// キーボードが押された時の処理
    00125:  	/// </summary>
    00126:  	/// <param name="key">押されたキー</param>
    00127:  	/// <param name="x">マウスカーソルのx座標値</param>
    00128:  	/// <param name="y">マウスカーソルのy座標値</param>
    00129:  	private static void KeyboardFunc(byte key, int x, int y)
    00130:  	{
    00131:  		switch ( key )
    00132:  		{
    00133:  			case 27:
    00134:  				Environment.Exit(0);
    00135:  				break;
    00136:  		}
    00137:  	}
    00138:  }
    
    
    書き方のお作法が若干違うだけで,やっていることは理解できると思います。普通に画面をクリアして,三角形を書いているだけです。
    とりあえず,C#でOpenGLをいじってみました。もともとC#の使い方がよく分かっていなかったので,ずっとやらなかったんですが,最近少しずつ分かるようになってきたので,C#をメインにプログラムを書いていこうかなって思います。

    サーバー エラーが増えています

    googleのウェブマスターツールから題目のようなメールが飛んできた。

    調べてみるとクローラが鬼のようにmt-search.cgiを叩いている模様。

    クローラってこういうこともするんですね。

    ということで対策を考えてみた。


    (1)クローラからmt-search.cgiを叩けないようにする。
     サーバーのrobots.txtで、クローラーからは検索CGIを叩けないように設定。 

     (Google・Yahoo!、Bingは公式で、robots.txtに従いますよ、という話になっているはずなので)


     以下のように、robots.txtを変更して
     ルートディレクトリに置く。

     User-Agent: *
     Disallow: /cgi-bin/mt-cgi/mt-search.cgi

     これで大手のクローラーは排除できるものの、
     海外からの悪質なクローラーはrobots.txtには従わないものもある。


    (2)Googleのサイトマップ検索使う

    (3)mt-search.cgiの代替を使う
     mt-search.cgiの代替プログラム。
     mt-search.cgiを捨てて簡単メタサーチにしてみよう
     MTLiteSearch(mt-search.cgiの代替プログラム)。
     Fast Search - PHP Fulltext Search Plugin
     mt-search.cgiの代わりの検索プログラムを作ってみた。

    GAPI.NETを使ってみた

    GoogleのAPIを.NETから簡単に使えるライブラリがあったので使ってみた.


    Gapi.NET .NET (C#) wrapper for Google AJAX API http://gapidotnet.codeplex.com/


    using System;
    using Gapi.Search;
    using Gapi.Language;
    
    namespace GapiTest
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                //
                // Web検索を試してみる.
                // 
                SearchResults results = Searcher.Search(SearchType.Web, "検索語句");
    
                foreach (SearchResult result in results.Items)
                {
                    Console.WriteLine("TITLE:{0}, URL={1}", result.Title, result.Url);
                }
    
                Console.WriteLine("");
    
                //
                // 翻訳を試してみる.
                // 
                string translate = Translator.Translate("Gapi is very useful", Language.English, Language.Japanese);
                Console.WriteLine("Gapi is very useful={0}", translate);
    
                Console.WriteLine("\nPress any key to exit...");
                Console.ReadLine();
            }
        }
    }
    

    ※注意
     Client-Profileではコンパイルエラーが出るのでskuを.NET Framework 4.0に切り替える
    画像検索や翻訳もSearchTypeで設定できるので非常に便利

    Movable Typeでsitemap.xmlを自動出力するための手順

    コピペで抜粋

    デザイン>>テンプレート>>インデックステンプレート
    インデックステンプレートを作成
    テンプレート名、sitemap
    下記の「インデックステンプレートに貼り付ける内容」を挿入
    テンプレートの設定>>出力ファイル名>>sitemap.xmlと入力
    保存⇒再構築を行なう
    インデックステンプレートに貼り付ける内容
    
    
    
    <$MTBlogURL encode_xml="1"$>
    1.0
    
    
    
    <$MTCategoryArchiveLink encode_xml="1"$>
    
    
    
    
    <$MTEntryPermalink encode_xml="1"$>
    <$MTEntryModifiedDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$>
    
    
    ウェブページ
    
    
    <$MTPagePermalink encode_xml="1"$>
    <$MTPageModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$>
    weekly
    0.5
    
    
    
    
    robots.txtにsitemap.xmlへのパスを書いておけば、検索エンジンがクロールした際に、sitemap.xmlを読み込んでくれます。

    robots.txtの内容

    User-agent: *
    Sitemap: ○○○○○/sitemap.xml
    Disallow:
    〇〇〇〇〇にはサイトのURLを記入します。当ブログであれば

    http://nc30mtd.oops.jp/blog/sitemap.xml

    kmeansのテストコード

    #include <iostream>
    #include <eigen3/Eigen/Core>
    #include <opencv2/core/core.hpp>
    #include <opencv2/flann/flann.hpp>
    
    int main() {
    	int point_num = 100;
    	cv::Mat points = cv::Mat::zeros(point_num, 1, CV_32FC2);
    	for(int i=0 ; i<point_num ; ++i) {
    		Eigen::Vector2f pt = Eigen::Vector2f::Random();
    		points.at<cv::Vec2f>(0, i)[0] = pt.coeff(0);
    		points.at<cv::Vec2f>(0, i)[1] = pt.coeff(1);
    	}
    
    	int cluster_num = 10;
    	cv::Mat_<int> clusters(points.size(), CV_32SC1);
    	cv::Mat centers;
    	cv::kmeans(points, cluster_num, clusters, cvTermCriteria(CV_TERMCRIT_EPS|CV_TERMCRIT_ITER, 10, 1.0), 1, cv::KMEANS_PP_CENTERS, centers);
    	std::cout << clusters >> std::endl;
    	return 0;
    }
    
    OpenCVを用いたk-meansクラスタリングの実行例 (参考URL opencv 2.2 documentation) OpenCVのmatrix.cppにkmeansのコードがあるので, そこを書き換えれば距離尺度を変えられる.
          #include <opencv2/opencv.hpp>
          
          int main(int argc, char** argv){
            cv::Mat_<float> samples(cv::Size(10, 1000));
            cv::Mat_<float> centroids;
            cv::Mat_<int> labels;
            cv::TermCriteria cri(cv::TermCriteria::MAX_ITER+cv::TermCriteria::EPS, 50, FLT_EPSILON);
            int clusterNum = 50;
            double compactness;
            
            /* samplesにデータを格納 */
    
            /* k-means++を使用 */
            compactness = cv::kmeans(samples, clusterNum, labels, cri, 1, cv::KMEANS_PP_CENTERS, centroids);
    
            /* 自分でラベルを初期化してk-measを実行 */
            compactness = cv::kmeans(samples, clusterNum, labels, cri, 1, cv::KMEANS_USE_INITIAL_LABELS, centroids);
    
            return 0;
          }
        
    4行:
    10次元のデータを1000個用意 (1行が1データに対応).
    5行:
    クラスタ中心のデータを格納するインスタンス.
    6行:
    クラスタリングの結果 (各データのラベル)を格納するインスタンス (1000行1列のデータで, 各行の値が各データのラベルに対応).
    7行:
    アルゴリズムの停止条件で, ここでは最大50イテレーションで終了する.
    8行:
    生成するクラスタの数で, ここでは1000個のデータを50クラスタに分ける.
    9行:
    cv::kmeansの戻り値である"クラスタリング結果のコンパクトさ"を格納する変数.

    iijmioのSIMでインターネット共有が使えなくなった時の対策

    実家に居候しているんですが,
    週末は親御さんのお買い物に車出し要員として付き合わされる事が多く
    待ち時間が暇なので,MacBookをお供に出かけるわけでしたが,
    ネット環境はiijmioのSIM+SIMフリーiPhone4Sでインターネット共有を使っていました.

    (ちなみにiOS 6.1.3)

    ところがある日,急にインターネット共有が使えなくなった.
    そんな時のための対処.

    IMG_2078.png

    IMG_2079.png

    IIJmio 高速モバイル/D iOS APN構成プロファイル
    http://techlog.iij.ad.jp/sp/miolte/

    より設定プロファイルをダウンロード,
    プロファイルのインストールをすると無事使えるようになった.

    声が大きな人間をあまり信用しないほうがいい

    「Never listen to those who speak loudest.」

    夜の事務所で1人過勤務しながら
    XYLISHの箱の裏に書いてあったものを見つけてふと思ったこと。

    「常に新卒」みたいな人生を送ってる中よく見るパターン。

    特に上司の場合、上を見て都合いい事言ってるのか、
    下を見て負け戦に出て行くのかで相当印象はかわる。

    ①上を見て都合のいい事言う人に限って、
     ・声量も主張もでかい
     ・けれども丸投げ常習犯。
      というか大抵自分ではできない事が多い。
     ・さらに相手の仕事のフローがわからない。
      なので自分で噛み砕けない。
     ・相手のことを魔法使いと勘違いしてぶっ飛んだことを平気で言う。
     ・部下が何やってるか知らない。
     ・仕事溢れてても気にしない。
     ・でも、俺の想いを読んでどの通りにやれ(要エスパースキル)
     ・自分の仕事に付加価値を付けられない。
     ・思い通りに弾込めてもらえないと怒る。
      けれども自分ではどうしようもないので仕方なしに飲み込む。
     ・褒められたとかで機嫌よく帰ってくる。
      この感情の起伏が不愉快。

    ②下を庇って負け戦をする人に限って
     ・人にものを頼むのは苦手。
     ・なぜならできないことを振ってもお互い幸せにならないから。
     ・「手間暇かかるから」と噛み砕こうと1人で抱え込んで火の車。
     ・どこかになにか常人離れした、意外な趣味特技を持っている。
     ・でもプライドは低い
     ・完結すれば語り継がれるいい仕事が多い。
     ・でも色々部下から心配される。
     ・温和と無気力の2極化
     ・いつも責められてる
      けれども周りに人は集まる(善悪問わず)。
     ・庇ったつもりだったのにかえって下の仕事を増やしてる

    完全に後者は中間管理職。 
    でも、後者のほうが好き。

    声のでかい中間管理職になるのがいいんだね。 
    どこ行ってもこういう人はいるんだなという感じるけど、
    仕事は選べても上司は選べない。

    3Dプリンタを作ってみる

    手元にあった12線8相ステッピングモータを興味本位で回しているうちにものづくり熱に火がついてきた.

    そんなわけで3Dプリンタの製作に着手してしまおうと思う.

    <ルール>
     ・予算は5万円程度
     ・組み立てキットは買わない.
     ・「組み立てキット買ったほうが安かった」は自明なので禁句
     ・出来る限りホームセンターで買えるもので作る

    そんなこんなでひたすら読みふけったWebページ集

    約4万5000円でゲットできる安価な3Dプリンター「RoBo3D」
    RepRap DIY 3DPrinter 備忘録
    みら太な日々

    Xcode4.6.1へのアップデート後のビルド時にZXingがエラーを吐く現象と対策

    以前のXcodeでビルドできていたのに,
    アップデート後にエラーが出てZXingがビルドできなくなった.

    エラー:
    BinaryBitmap.h:33:7: Private field 'cached_y_' is not used
    

    対策:
    プロジェクトの設定の中の「Other Warning Flag」から
    -Werror
    -Wno-unused-parameter
    を削除する.

    MacBookAirでBluetoothが使用不可になる件

    MacBookにOSX10.8.3アップデート適用したんですが,
    アップデート完了後,起動してみるとBluetoothが使用不可になってしまった.

    PRAMリセットしても改善せず.
    ひとまずノートブックなおかげでキーボードもマウスもついてるから
    周辺機器で困っているわけではないが,何かと不便である.

    どーなってんの

    unordered_mapが見つからない

    OpenCVのopencv_haartraining_engineをXcode4.5.1でビルドした際にこんなエラーに遭遇したのでメモ.

    lsh_table.h:136:18: No type named 'unordered_map' in namespace 'std'
    

    どうやらstdではなく,tr1名前空間にあるのが原因らしいとのことで,
    下記のようにlsh_table.hを修正した.

    変更前 #include <unordered_map>
    変更後 #include <tr1/unordered_map>
    
    加えて.下記のエラーに関しては言われたとおりに修正.

    lsh_table.h:137:18: No template named 'unordered_map' in namespace 'std'; did you mean '::std::tr1::unordered_map'?
    

    変更前 std::unordered_map
    変更後 std::tr1::unordered_map
    



    何度かみる下記エラーに関しては,C++ Standard Libraryの変更で対応.

    (null): "cv::Exception::Exception(int, std::__1::basic_string, std::__1::allocator > const&, std::__1::basic_string, std::__1::allocator > const&, std::__1::basic_string, std::__1::allocator > const&, int)", 
    


    変更前 libc++
    変更後 libstd++
    

    混合モード アセンブリはバージョン...(Visual Studio 2010)

    「混合モード アセンブリはバージョン 'v2.0.50727' のランタイムに対して作成されており、追加の構成情報がないと 4.0 ランタイムでは読み込めません。」

    Exception.png

    VS2008で作ったプロジェクトをVS2010で開いて実行したら例外が出た.
    原因は、Framework2.0で作られたDLLのようで,
    今回はSystem.Data.SQLiteで引っかかった模様

    対処方法としては以下の通り.

    (1) Framework2.0など古いフレームワークで作られたDLLを使わない
    (2) 使用するFrameworkのバージョンを落とす
    (3) App.configを以下のように設定する(無ければ新たにファイル作成して追加する)

    
    
    
    
    
    
    

    <?xml version='1.0' encoding='utf-8'?>
    <configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
    </startup>
    </configuration>

    NSString↔NSIntegerの変換

    //NSString→NSInteger変換
     NSString *str = @"123";
     NSInteger i = [str intValue];
    
    //NSInteger→NSString変換
    NSInteger i = 123;
    NSString *str = [NSString stringWithFormat:@"%d", i];
    

    ブログにログ書ければいいのに構想(1)


    ----
    家とかどこぞのVMで走ってるプログラムのログをどこにいても見れないかな.

    Webにアップロードすればいい.

    PHP+C#で組めそう.

    組んではみたけど画像のアップロードとかどうしよう.

    しかもいざ見るときにデータ検索するのが面倒くさい.

    だったらどうせチラシの裏なんだからブログに投稿してしまえばいい.
    ----

    こんなことを考えて探した結果行き着いたのが

    XML-RPC.NET
    http://xml-rpc.net/

    正座して待っていても見つからないだろうし,
    このブログにがしがし書き込む目的で以下のページを参考に作ってみる.


    .NET(C#)でXML-RPCを使ってブログに投稿する
    http://www.moonmile.net/blog/archives/1284

    ↑サンプル通り試してみるも,何故かタイトルを指定できないため以下を試す.


    XML-RPC.NETを使ってカスタムフィールドを設定
    http://www.moonmile.net/blog/archives/1409

    ↑タイトルも指定できて一段落.
    画像のアップロードに関しては以下を参考にして試行錯誤中.

    wordpres に XML-RPC で画像を投稿する
    http://www.moonmile.net/blog/archives/1717

    太陽光発電システム(2)

    間が開いてしまったが,買い揃えた機材で発電してみた.

    パネルも設置してないのでベランダに出して配線するところからであるが,

    昼過ぎまで寝過ごしてしまったおかげで7日の14時頃から使用開始.


    表示

    ログファイルの日時が何故かずれているが,日没と共に出力が下がっていくのも見て取れる.


    北海道電力でも計画停電の噂が聞こえる昨今,

    計画停電を想定してバッテリーから電力供給して暮らしてみた.

    図中青線が積算Ahであるが,この様子だと真っ暗な中で不安な思いをすることも無さそうである.

    ひとまず試運転はこれにて終了してパネルを設置してしまおうと思う


    今日はここまで

    無瞬断切替器構想(1)

    試運転を完了した太陽光発電システムの使い方に関して考えている.

    独立型太陽光発電システムとはその名の通り,
    住宅内の配線と繋がっていないシステムのことを指すが,
    それはそれで使い勝手が悪そうに見える.

    接続された負荷は独立系のバッテリーが切れると動作しない.
    負荷がテレビだの照明だの,一旦OFFして商用系統に切替えても問題ないようなものならいいが,
    PCなどの電源を落とすと色々と面倒なものだと無瞬断で切り替えたい.

    かと言ってパワーコンディショナーみたいな高価なもの入れたくない.
    グリッド・タイ・インバータだと逆潮流が怖い.

    そういうわけで開閉器で断路して切り替えればいいじゃないかとのことで考えてみた.

    現在の構成↓

    IMG_20120610_163235.jpg

    バッテリーの電圧低下で動作する開閉器をつけるとこうなる↓

    IMG_20120610_163242.jpg

    ただし,これだと切り替えする手間はなくとも,
    負荷側は瞬断しそうなので困った.

    そういうわけで,バッテリーの放電を監視して動く開閉器があるとして考えてみる↓

    IMG_20120610_163256.jpg

    入力側にパネルからの入力がなくなったらACアダプターから給電し,
    バッテリーに充電するという考え方.
    開閉器の制御電源をAC100Vとした場合に,
    例えば全停電の場合どうなるんだろうかだとか,そういったことを考えると非常に面倒.

    常時インバータ方式の無瞬断UPSを持ってきて
    ・常用に独立系発電システム
    ・非常用に商用電源
    といった感じで接続出来れば楽なんだが・・・

    もう少し練ろうかと思う.
    今日はここまで.

    太陽光発電システム(1)

    20120609_2.JPG

    Amazonで100W出力の太陽光発電パネル 【ET-PR100A】を買ってみました.

    届いたものを開封すると,樹脂製の端子BOXに割れがあったり,
    中に何故か「ヒル」が何匹もいたりであんまりいい印象はなかったです・・・・
    マーケットプレイスでの買い物は要注意だと知った.

    ただし,機能的には問題なし.
    端子BOXの割れの部分は,屋外設置する際にコーキングすることで気持ちを収めることとする.
    優良顧客です.

    コントローラにはMorningstar社製 SS-MPPT-15Lを使用した.
    輸入品なのが心配でしたが,国内メーカーが販売しているがどうみてもOEMっぽいものを2倍の値段で買うのもどうも気が乗らず輸入品を買ってみた.

    接続は至極簡単.
    コントローラには6端子が用意されており,

    ---------------------
    パネル 2端子(P/N)
    バッテリ 2端子(P/N)
    負荷 2端子(P/N)
    ---------------------

    と,接続するだけ.
    負荷には300Wの矩形波インバータを選択.
    バッテリーには車のバッテリー外してきて試運転をおこなってみた.
    (鉛蓄電池を使わないで放置しておくのも嫌だし・・・・)
    20120609_1.jpg

    驚くほど簡単に使えてびっくりしましたが,
    使い方を全く考えていなかったので負荷試運転まで完了して解体.
    使い方を考えないと・・・・

    ちなみにこの手のパネルは見たこと無い形のケーブルコネクタでした.
    そんなもん手元に無いので,今回は600V CV 3.5sqを端末処理して端子上げしましたが,
    美しく作るのなら予めケーブルの用意も必要なようです.
     
    今日はここまで.