Category: 技術的なこと

Windowsの環境構築メモ

基本ソフトウェア

Ninute ※pythonはうまく入らないので別途
Chocolatey
MinGW or Cygwin

参考:開発者がSurfacePro3を買ったらまずやること

 

Python(Windows上)

python本体のインストール時にパスを通す設定にチェックをつけること.
pipは自動で入るが,NumPy,SciPy,matplotlibあたりはうまく入らないので手動で入れる.
matplotlibが必要とする,python-dateutil, pytz, pyparsing, sixはpipで入れる.

追加したライブラリはそれぞれのPythonのバージョンごとのフォルダ下に置かれるので,そこにPYTHONPATHを通す.

参考:Python for Windows インストールメモ

CygwinのPythonを使っても良いが,Windowsとは別環境なので,環境変数の設定やライブラリの追加ははじめからやる必要がある.CygwinからWinのPythonを叩く方法もあるが,あんまりうまくいかないみたい.

apt-cygでガバガバになったパッケージを手動でremoveする

手元のpython3.2を3.4に更新しようとremove→installしたが,正しくinstallされず,removeもできなくなった.
既にありますよとか言われてしまう.

 

①removeできないのをなんとかしよう.apt-cygの更新を行った.最新版はgithubから入手.

https://github.com/transcode-open/apt-cyg
解決せず.

②手動でremoveする.

インスール済みのパッケージは(cygwin)\ets\setup\installed.db に記述されているっぽいので,中を見て書き換える.
python3っぽいものをリストから消す.
.db-saveとかいうのもいるけど,これは.dbのバックアップっぽい.

③手動removeできたぞ(ちゃんとパッケージが無いことになってる)

[Prily@ASAGI] $ apt-cyg remove python3                                                [~]
Package python3 is not installed, skipping
 

④install しなおす

[Prily@ASAGI] $ apt-cyg install python3                                               [~]
Installing python3
--2015-05-24 00:16:40--  http://cygwin.cybermirror.org//x86/release/python3/python3-3.4.3-1.tar.xz
cygwin.cybermirror.org (cygwin.cybermirror.org) をDNSに問いあわせています... 80.83.126.34
cygwin.cybermirror.org (cygwin.cybermirror.org)|80.83.126.34|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 6893432 (6.6M) [application/x-xz]
`python3-3.4.3-1.tar.xz' に保存中

100%[================================================>] 6,893,432    191K/s 時間 42s

2015-05-24 00:17:23 (159 KB/s) - `python3-3.4.3-1.tar.xz' へ保存完了 [6893432/6893432]

python3-3.4.3-1.tar.xz: 完了
Unpacking...
Package python3 requires the following packages, installing:
bash crypt cygwin cygwin-devel libbz2_1 libexpat1 libffi6 libgcc1 libgdbm4 libintl-devel libintl8 liblzma5 libncursesw10 libopenssl100 libreadline7 libsqlite3_0 zlib0 binutils libuuid-devel
Package bash is already installed, skipping
Package crypt is already installed, skipping
Package cygwin is already installed, skipping
Package cygwin-devel is already installed, skipping
Package libbz2_1 is already installed, skipping
Package libexpat1 is already installed, skipping
Package libffi6 is already installed, skipping
Package libgcc1 is already installed, skipping
Package libgdbm4 is already installed, skipping
Package libintl-devel is already installed, skipping
Package libintl8 is already installed, skipping
Package liblzma5 is already installed, skipping
Package libncursesw10 is already installed, skipping
Package libopenssl100 is already installed, skipping
Package libreadline7 is already installed, skipping
Package libsqlite3_0 is already installed, skipping
Package zlib0 is already installed, skipping
Package binutils is already installed, skipping
Package libuuid-devel is already installed, skipping
Package python3 installed
apt-cyg install python3  3.70s user 3.64s system 11% cpu 1:02.64 total
 

⑤removeはできたけどpythonちゃん動いてないじゃん.結局またremoveもできないし.

[Prily@ASAGI] $ python3                                                               [~]
[Prily@ASAGI] $ apt-cyg remove python3                                                [~]
gzip: invalid option -- 'k'
Try `gzip --help' for more information.
awk: コマンドライン:4: 致命的: ファイル `setup/python3.lst' を読み込み用に開けません (No such file or directory)
rm: `setup/python3.lst' を削除できません: No such file or directory
[Prily@ASAGI] $                                                                       [~]

 

⑥不具合の原因を調べる

1. gzipの invalid option – ‘k’ が謎.apt-cygのソースコードを読んでみた感じではgzipのバージョンが古くてオプションをサポートしていないっぽい.(-kはkeep)

→手元のは1.4,最新は1.6だった.

2.pythonが立ち上がらないので直接exeを叩いてみると,__cxa_atexit が cygwin1.dll の中に無いとか言って落ちていた. cygwin自体のバージョンが古いのでは.

→手元のは1.7,最新は2.0だった.

 

⑦公式から最新のcygwinを落とす

apt-cygもpython3.4もcygwinのバージョンが古くて動いていない可能性.

→cygwin+基礎パッケージを適当な場所にインストールして,bin以下をまるごとコピった.

 

⑧動いた.

 

cygwin不自由すぎてとてもつらい.windows使うのがつらい.てかapt-cyg,upgradeサポートしてくれ.

ちなみにお仕事の方もwindowsです.こちらはさすがにcygwin使わずcmder+chocolateyですが,cmderもbashでヒストリ漁った時に出力の表示位置がずれるんだよなあ.なんなんだあれ.

 

あとLive Writerがバグだらけなのでブログを書くのがツライです.そもそも2012年からメンテされてないし.

WordPressの表示も気に喰わないけど直す時間もない.はてなに乗り換えるのありだ…てかMarkdownで書かせてくれ…

 

とにかく1行もコード書いてないのにとてもつかれました.ねます.

gnuplotでアンダーバーが下付き文字になる

gnuplotがV4.2から拡張テキストモードをサポートしたらしい.アンダーバー(_)やキャレット(^)が下付き文字や上付き文字になる.
その他についてはここが詳しい. http://www.ecs.shimane-u.ac.jp/~stamura/gnuplot.html

拡張テキストモードを使わない場合は以下のようにする.

set termoption [no]enhanced

僕の環境では,デフォルトでこの拡張モード有効になっていて,アンダーバーがおかしな表示になっていたが解決した.

参考:http://www.bersch.net/gnuplot-doc/enhanced-text-mode.html

Maxとjs

maxの中でのjsの書き方まとめ.これだけわかっていればだいたい書ける.
ちゃんとしたリファレンスが無いのがつらい.

 

入力/出力ポート数の定義

inlets = 1
outlets = 1

 

入力によって呼ばれる関数

function msg_int(){} //入力がintの時
function msg_float(){} //入力がfloatの時
function bang(){} //入力がbangの時
function anything(){} //入力がそれ以外の時

 

入力された値へのアクセス

方法1:引数

function msg_int(in){
  post(in)
}

方法2:arguments (packされたのを受信する時などに使う)

function msg_int(){
  post(auguments[0])
}

備考:インレットが複数ある場合

function msg_int(){
  if (inlet==0){
    //
  }else if (inlet==1){
    //
  }
}

入力時に呼ばれる関数(例えばmsg_intとか)は,入力がどのinletポートから行われたとしても呼ばれるため,こういう書き方になる.効率悪いように見えるがこれしか無いっぽい.

 

出力

outlet ( outlet_number, value )
outlet ( outlet_number, [val1,val2] ) //配列で返す時.勿論unpackして取り出せる

 

send出力

glob = new Global(“hoge”) // グローバルオブジェクトを宣言
glob.tag_name = value // グローバルオブジェクトにデータを入れる
glob.sendnamed ( receive_object_name , tag_name) // それをreceiveオブジェクトに渡す

maxpat内で使うsendと同じようにreceiveオブジェクトに値を送れる.
直接値は送れない仕様らしく,グローバルオブジェクトを使って間接的にreceiveオブジェクトに値を渡す感じで書く.

 

maxobjへのアクセスと値の設定/取得

maxpat内のオブジェクトを取得できる.
下はScripting Nameを使ってmaxobjを取得する例.Scripting Nameはmaxpatのインスペクタ上で設定できる

var something_maxobj = patcher.getnamed(“scripting_name”)

something_maxobj.set ( value )

var hoge = something_maxobj.getvalueof()

とても便利.jsオブジェクトとmaxpat上のuiオブジェクトの値を同期させるのに使える.
http://qiita.com/okupara/items/b70dc76332dd69be0ab5

パッチャーウィンドウ制御

まだ使ったことがない.

 

デバッグ

post()

 

おまけ:jsの自動更新

autowatch = 1

セーブされるとjsオブジェクトがスクリプトを自動で読み込み直す.これを書かないとセーブするたびにopenしなくてはいけなくて不便だった,が,max7からは自動でautowatchする設定になっている気がする.

ZYBOをアカデミックで買ってみた

お手軽価格のZynq-7000評価ボード「ZYBO」を、Digilentから直接購入した。

https://www.digilentinc.com/Products/Detail.cfm?Prod=ZYBO

20150325_055336059_iOS

 

ZYBOはDigilentだとアカデミック価格が125ドル(15k円)で、とてもお手頃で個人もつ評価ボードとしては最適な製品だ。
しかし日本で買おうとすると結構高くなってしまうのと、Vivado用のバウチャーやステッカーの注文ができないという問題がある。
・秋月では勿論アカデミックの取り扱いはしていなくて、25kくらい。
http://akizukidenshi.com/catalog/g/gM-07740/
・日本の商社さんでアカデミックで注文できるところを探して見積もりを取ってもらったが、27kだった。

 

なんとかDigilentから購入できないかなと、PolicyのPricing – Academic and Student Pricingの項を読むと、
・USの学術機関の学生じゃないとダメ
・生徒一人あたり1台
・学術目的に限る
みたいなことが書いてある。
https://www.digilentinc.com/NavTop/AboutUs.cfm#academicpricing

 

やはりダメかなとは思いつつ、まぁ物は試しということでダメ元注文してみた。

購入時に研究室や大学の情報を記入して、2台クレカで購入した。

23日の夜注文 → 即自動返信メールが届く → 24日の朝Shipping開始のメールが届く → 25日昼過ぎにボードが届いた。

はやい。FedEx最高。

なお、シッピングは55ドル。
バウチャー+周辺機器の20ドルをあわせると200ドル(24k円)で、あんまり安くならないけれど、それでも周辺機器がついて秋月より安いし早く届くので、学生の人はガンガン利用しよう。

 

アカデミック購入だと、普通は精査してから商品を送るので、1週間くらいたってから「売れません」みたいなメールが届くあたりが関の山かと思っていたけど、このスピード感よ。逆に怖い。
まぁとりあえず、以前作った回路を動かせるようにしてみようと思う。

ちなみにZYBO、思ってたよりけっこう小さかった。

20150325_055804126_iOS

Thinkpad X220のHDDを換装した

ディスク節約しながら280GBのを3年くらい使っていたのだけど、とうとう足りなくなったので1Tくらいのに換装した。

 

準備

HDDを買う

Thinkpad X220のHDDは2.5インチ7mmなので、その規格のものを購入した。
(”2.5インチ”と記載してあるものの多くは9mmなのでX220には入らない。)
7mmで1TBのものは回転数が5400rpmのものしかなかったのでそれを購入。

接続する

メイン機(デスクトップ)に旧HDDと新HDDを両方接続した。

 

ディスクをクローンする

EaseUS Partition Master を使ってディスクのクローンを行う。
・パーティションの再設定/拡張が行える。(システム|メイン|バックアップ)と並んでいるのでメインの部分を拡張する形で再設定。
・クローン後、同ツール上でMBRを再設定する。(ブートマネージャは再設定されないので修復が必要。後述)
・旧HDD、新HDDはレコードの衝突を避けるためにシステムに自動的にオフラインにされていた。MBRを再設定するため、OS起動後にwindowsのディスク管理ツールからディスクをオンラインにした。

 

新HDDで起動する

0xc000025というエラーが出てwindowsが起動できない。 : BIOS→MBR→winブートローダー(ここで死ぬ)
①でMBRの再設定がうまく出来ないとそもそもブートローダーまで行かない(BIOS→真っ暗画面)

 

インストールディスクを使って修復する

動いた。

 

余談

EaseUS Disk copyを使う手段もある。CDディスクに焼いて利用する形式。
MBRごとディスクをクローンできるため、インストールディスクを使った修復等の必要は無いが、パーティションの再設定は行えなえずそのままコピーするだけ。

パーティションを後から再設定する場合、ディスクタイプに気をつける必要がある。
windowsのディスクタイプにはベーシック・ディスクとダイナミック・ディスクの二種類があり、ベーシック・ディスクのボリュームからでなければwindowsは起動できない(上位エディションは可能)。
そしてベーシック・ディスクには、隣あった領域しか拡張できないという制約がある。
今回のケースでは
(システム|メイン|バックアップ)
と並んでいるので、Disk Copyでのクローンを行うと
(システム|メイン|バックアップ|未定義)
と並ぶことになる。未定義をメインに含めて拡張を行いたい場合、にはバックアップを消してからパーティションを拡張し、その後バックアップを再度設定する必要がある。

言語ごとの要点備忘録

つまみ食いが好きなので色々な言語を触ってちょっとだけコードを書く、みたいなことをいつもしているんですが、
たまに使おうとすると結構忘れていて同じ所で引っかかったりします。
復習すると忘れないだろうというのと、忘れた時に見返せる&書き足せるので、ブログにまとめることに。
なお、この記事は書いているうちになかのひとが疲れてしまったので書きかけです。


C++

まずここを引く癖をつけよう。 https://msdn.microsoft.com/ja-jp/library/dtefa218.aspx

static

・静的ローカル変数(関数内で定義) : 関数が呼ばれ終わっても残る。
・静的メンバ変数&関数(クラス内で定義) : クラスの全てのインスタンスで共有する変数,関数。クラス名::でアクセスする。インスタンスがなくても使える。また、静的メンバ関数からは静的メンバ変数にしかアクセス出来ない。
・静的グローバル変数(グローバルスコープで定義) : ファイルの中でしか使えなくなるグローバル変数。

auto

型推論。関数内でしか使えない。

継承

class Female : (アクセス修飾子) Human {};
アクセス修飾子はpublic, protected(自身と派生クラスからアクセス), public

virtual

抽象クラスを作りたいときに。virtualをつけると仮想関数になる。
class Humanを継承したclass Femaleと class Male のインスタンスをHuman型の配列に入れて、それぞれ継承したメソッドgrowup()を順番に呼びたい時とする。
virtualしないとHumanのgrowup()を読んでしまうが、virtualしておけばそれぞれのメソッドを呼びに行ってくれる。

条件コンパイル

ヘッダに書いて宣言が重複するのを防ぐ。

#ifndef HOGEHOGE 
#define HOGEHOGE 
(header source code) 
#endif

オーバーロードとオーバーライド

オーバーロード : 同じ名前だが引数の型が違う関数 を 複数定義

オーバーライド : 同じ名前で引数の型も同じ関数 を 上書き定義

ラムダ式

[](){}(); 引数:()は省略可能

http://kaworu.jpn.org/cpp/%E3%83%A9%E3%83%A0%E3%83%80%E5%BC%8F

参照クラス

C++/CXのみで使う。参照クラスはWindows Runtimeによって管理される(GCの対象になる)。参照カウンタを使って自動的にデストラクタが呼ばれるのでべんり

宣言 : ref

インスタンス化 : ref new

ポインタ : ^(キャレット、ハンドル) ポインタと同様に使えるがポインタではない。

リングバッファ

STL::dequeでもいいけど、ビットマスクを使うとスマートにかける。


Ruby

ここを引け http://miyamae.github.io/rubydoc-ja/

ruby、便利だが覚えることが多くて書くたび忘れるのでこれからはpythonを使うようにしたい

i++ みたいなインクリメントはできない

毎回確実にハマる

Math

requireしなくても含まれてる

コメントアウト

#か=begin =end

 


Python

勉強中。

ディレクトリ

import os 
os.listdir

標準入出力

import subprocess 
subprocess.call(cmd,shell=True)

コメントアウト

# 複数行は””” ””” だが文字列として扱っているだけで公式な方法ではない

 


js

prototype

var classname = function(arg1) { 
this.arg1 = arg1 
}

classname.prototype =  { 
method1 : function(){}, 
method2 : function(){} 
}

 


Max on js

I/O port

入力ポートの数 : inlets

出力ポートの数 : outlets

I/O

inlet : にどのポートからの入力か(0~)

augument : 実際に来た値。packされてる場合添字アクセスで取り出せる。

msg_int() とかであれば引数に変数名を指定してその名前で使える。

 


Verilog

まだ忘れていないことが多いのでこの項目はありません。

 


git

.gitignore

ホワイトリスト方式で!を使って書く時の注意。

!で無視を取り消すファイルはgitignoreから見える場所にある必要がある。一度無視してしまったフォルダの中身はgitignoreから見えないので、まず①無視してしまったフォルダをホワイトリストに入れる②フォルダの下を全て無視に加える③無視したくないファイルのみを!で否定する のようにする。

/* 
/.* 
!/dir/ 
/dir/* 
!/dir/hoge.txt

 


VBA+Excel

なんでVBなんで書かないといけないんだろう。でもExcelのゴミみたいなグラフ描画機能をなんとかするためには

使わないといけないこともある。前回手探りで書いたけど全然わからない。

よくわからないメソッドがたくさんあるのでデバッグモードでオブジェクトを調べながら書くと良い。

条件分岐

If 条件式 Then 
ElseIf 条件式 Then 
Else 
End If

関数

Sub hoge() 
End Sub

変数

Dim 変数名 As 型 型は省略可能

with

一時的なnamespaceを作っているような感じ…? Withの中では主語(対象)を省略して書ける。

With 対象 
.メソッド 
End With

シート中の要素へのアクセス

AciveSheet, ChartObjects, Chart, とか、

Interior とか、

全ての要素にアクセス?

SeriesCollection

複数のパラメータ

まだよくわかっていないのだけど、グラフの色を決定するプロパティが二つあったりしてややこしい。

どちらが優先されるのかもよくわからない。

色の要素を持つ別々のオブジェクトを継承していたりして、Interior.ColorでもLineナンチャラ.Colorみたいなのでも色が設定できたりする。わけがわからない。

コメントアウト



DOSコマンド

バッチファイルなんて書きたくない、シェルスクリプトを書かせろ

ラベルとgoto

:START 
(処理) 
PAUSE 
GOTO START

 

 


実際、いろいろ書いていると頭がこんがらがってくるので書く言語を絞ったほうが良いのかもしれない。

仕事でやってるわけでもないので継続的に一つの言語扱うのは稀だし、ぱーっと書いてぱーっと忘れる……

Verilogの演算ルール、文法まとめ

(この記事は書きかけです。書き終わるまで参考にしないでください)

 

最近、HDLを勉強していて、1年くらいの勉強の成果としてFPGAでシンセ制作にチャレンジしています。

ソフトウェア言語の場合、計算をするときにいちいち値の範囲とかは考えませんが、verilogだと全ての変数(レジスタ)と途中の式についてunsignedなのかsignedなのか、ビット幅はどれくらいなのか、を決めて、そして把握して書いていかないと容易に意図しない計算結果を出してしまいます。あわわ。

毎回混乱するので、今回はverilogHDL(2001)の計算の時のルールを自分用メモとしてまとめました。
なおLHSはLeft Hand Sideの略で、式の左側(代入される側)を指します。RHSも同様に式の右側。

 

参考にしたサイト

デジタル・デザイン・ノート デジタル回路を設計する際に考慮すべきポイントがとてもわかりやすくまとまってる良サイト。

Verilogチュートリアル Veritakの開発者のページ。Veriogの文法仕様について詳しく乗っています。一読すべき。

 

符号と評価の基本

次のように評価します。

  1. 式の評価前にLHSとRHSの中で最大のビット幅のものを探す。これが計算時のビット幅になる。
  2. RHSが全てsignedの場合、符号付きで計算する。一つでもunsignedを含む場合、符号なしで計算する。
  3. RHSでの演算結果をLHSに代入する。乗算などでRHSのビット幅がLHSを超えている場合はMSB側を切り捨てて代入する。

算術シフト(>>>)

  • unsigned : 論理シフト(>>)になる。ゼロ拡張される。(上位ビットは0で埋まる)
  • signed : 算術シフト(>>>)になり、符号拡張される。(上位ビットはMSBの符号で埋まる)
  • LHS(Left Hand Side = 式の左側)には依存しない。
  • シフト後もビット幅は変わらない。
  • <<<は<<と同じ。同様にビット幅は変わらない(シフト後も幅拡張はされない)。

 

パートセレクト(hoge[3:0]),連接演算({a,b})

unsignedになる! signedで計算したい時、これを気にしてないととんでもないことになる。

  • 解決方法1 : 自動の幅拡張が起こらないよう、LHSとRHSのビット幅を揃えておく。
  • 解決方法2 : $signed()をつかってキャストする。

 

デシマル表現(単なる1とか、0とか)

signedになる。幅指定していないので、幅はverilogのルールに則り32bitだと解釈される。
ちなみにマイナスを付ける場合は -2’b1 みたいに書く。

 

演算いろいろ

計算後に確保しておきたいビット幅

  • 足し算 : 大きい方のビット幅+1
  • 乗算 : 両方のビット幅を足したもの

こういうのってQiitaとかにpostしたほうがいいんかな…?

Max7 備忘録

よく忘れたりごっちゃになったりすることをメモ(書きかけ)

 

  1. プレゼンテーションモードで開始
    Ctrl+Shift+Iでパッチのインスペクタを開く → Open in Presentation にチェック
    exeで書きだす時とか。
  2. Jitterで扱うMatrixの構造
    http://www.s-musiclab.jp/mmj_docs/max5/jitter/jitter_tutorial/j17_jttu_matrix.html
  3. presetが消える
    presetオブジェクトに登録されたデータはパッチを開き直すと消えるので,メッセージを使って.maxpresetの形で保存しておく必要がある.
  4. メッセージの順序
    右から左,下から上

Max7 64bit Windows いろいろ

Max7 64bit Windowsを使っています。困ることが多い。

  • CNMATのライブラリ(OSC-routeとか、netreceive~,netsend~、ビートトラッキング各種)はだいたい64bit非対応
  • かといってもちろん32bitを使うと4Gのメモリ上限にぶち当たる。VJするには非常に致命的。
  • 少し題からそれるけどAviraにMax.exeがトロイの木馬扱いされる。感染ではなく誤検出……

Tips:netreceive~ netsend~ 便利です。TCP/IPかUDPを使ってwifi経由でシグナルデータのストリーミングができる。家の中で使っている分には遅延もノイズもほとんどなし。
http://www.remu.fr/sound-delta/netsend~/?page_id=7 からダウンロードできます