最後のカンマ

配列への要素の追加

Rでは、配列を定義するときに、最後の要素の後にコンマをつけるとエラーになる。一方、rubyやpythonでは、

ary=[
1,2,
3,4,
]

としても問題無い。このような書き方は、配列にあとから要素を加えて行くときに便利なので、Rでも使いたいのだが、前述のようにエラーになって出来ないのである。 そこで考えたのが次のような書き方である。

ary<-head(c(
1,2,
3,4,
0),-1)
最後の要素を無駄に加えておいて、それを取り除くという感じなのだが、似たような書き方を実現することができる。今後使って行こうと思う。
Read more...

heicからjpg

iphoneの画像形式
heic形式の画像をjpgに変換してと頼まれたのだが、一応できたので、その記録をしておく。heicというのは初めて聞いたのだが、最近は圧縮率の良い画像形式がいろいろと出てきている。しばらく前にはwebpというのがあることを知ったが、これは標準のviewerでは表示できなかったものの、browserで表示できた。 ubuntuで変換を行ったが、libheif-examplesというパッケージを入れて、heif-convert test.heic test.jpgという感じで変換するだけである。ファイルがいくつもあったので、シェルスクリプトを書いて変換することができた。

Read more...

標準以外のソフトのインストール

debian10(buster)でlibpng12

OSを入れ替えたときに問題になるのが、普段使っているソフトが動かなくなることである。大半のソフトは、debianの標準的なものなので、大丈夫なのだが、それ以外のソフトが動かないときがある。libpng12を使っているソフトがあり、そのインストールに少し苦労したので、メモをしておく。

libpng12は、debian9のときにはlibpng12-0_1.2.50-2+deb8u3_amd64.debを入れたら動いたのだが、debian10ではエラーが出てこれを入れることが出来なかった。その代わりに、libpng12-0_1.2.49-4ubuntu1_amd64.debを入れることで問題を解決できた。まず、このファイルをdownloadする必要があるが、launchpad.netというところにあり、これがubuntuの開発が行われているサイトだと最初は知らなくて、downloadするのを躊躇してしまった。ファイルが取れたら、

sudo apt install ./libpng12-0_1.2.49-4ubuntu1_amd64.deb
sudo apt-mark hold libpng12-0

としたら、libpng12が使えるようになった。

debianのdebを入れるほうがsimpleだと思ったが、ubuntuのdebでしか動かないので、仕方が無いだろう。

Read more...

ようやくdebian10に

ソフトを動かすために
あるソフトをlinuxで動かそうと思ったら、それに必要なプログラムのversionが古かったので、OSを新しくすることにした。debian10が出てからしばらく経っているので、そろそろ安定した頃だという判断もその後押しをした。ちなみに、以前はdebianのversionを愛称で覚えていたが、そろそろ限界になって来たので、数字で区別することにした。10はbusterらしいが。 インストールはnetinstをusbに入れて、そこからlxdeを選択した。downloadや展開に時間はかかったが、特に問題無く完了した。動かそうと思っていたソフトも、少し工夫したら動くようになった。 しかし、そのソフトのネットワーク関係の設定に非常に手間取った。ユーティリティを使おうかとも思ったが、汎用性がなくなりそうに感じたので、それは止めることにした。結局、汎用のソフトを使って工夫したら、なんとかなった。 debian10であるが、debian9との大きな違いは今の所あまり感じていない。lxterminalがうメニューからうまく起動できない点も同じである。まだバグが取れていないようだ。

Read more...

行列計算

maximaを使って
行列のexpを計算をする必要があったのだが、これを手で計算するのは面倒である。これまで、行列の計算はRにさせることがあったが、Rでexpを処理しようとすると、対角化してexpを計算して、元の座標系に戻すという手法で計算していた。しかし、Rの場合には数値計算はしてくれるが、数式の変形はしてくれない。数式変形をするときには、maximaが便利だが、行列のexpも扱えることを知った。例えば以下のような感じである。

my:matrix([0,-1],[1,0])*%i/2;
matrixexp(t*%i*my);
demoivre(%);
trigreduce(%);

最後の二行は、数式を三角関数で表して、簡略化している。指数関数や三角関数は、期待するように計算するのが、少し面倒で、trigexpandやfactorなども使って処理する必要がある場合もある。まだ、maximaには慣れていないが、数式変形の時に、使おうと思う。

Read more...

ryzenの問題

debianとAMD
debian10が7/10にreleaseされていた。三ヶ月以上たったし、そろそろmainのPCのOSをupdateしようかと思っています。しかし、debian9でも全く困っていないし、もうしばらくこのままで良いかなと思っています。 そのPCのCPUはAMDのものを使っている。intelかAMDの選択肢がある場合には、後者の方がコストパフォーマンスが良いので、AMDを選ぶようにしている。 AMDからRyzenというCPUが出て、興味があったのだが、LINUXとの相性が良くないというニュースを聞いた。もうしばらくしたら、問題が解消されないかな。

Read more...

rubyとRの使い分け

Rのみでのデータ処理
測定データの処理には、rubyとRを使っている。Rは文字列の操作が苦手なので、測定データの保存されたファイルから、必要なデータを抽出して、簡単なデータ処理をするためにはrubyを主に使っている。例えば、必要な列を取り出したり、質量から物質量に変換したりする処理などである。そして、plotやfittingなどにRを用いるという具合である。しかし、ニ段階の処理が必要で面倒なので、Rだけでデータ処理をしてしまうと楽に感じられる。 Rですべての処理をする場合に問題になるのが、データファイルのヘッダ部分の処理である。Rでファイルを読み取るコマンドとしては、通常read.tableを使っている。skipオプションを指定すれば、ヘッダを飛ばすことはできるが、ヘッダの情報を読み取ることができなくなる。ヘッダの情報を取り込むには、readLinesを使う方が良いだろう。そして、ヘッダと本体の境目を探して、両者を分離して、ヘッダから必要な情報を抽出して、本体をデータフレームにして、といろいろな処理を書く必要がある。 こういったことを考えると、もうしばらくは今のままで良いかと思ってしまう。

Read more...

ubuntuのwindows共有

mount場所
ubuntuでwindows共有を使って、windowのファイルにアクセスすることができる。sambaやcifsを使ってコマンドでマウントする場合には、マウントする場所を指定するので、linuxから見たときに、そのファイルがどこにあるのかは自明である。しかし、ubuntuのファイラーからwindows共有に接続したときには、実際にはそのファイルがどこにmountされているかはよく分からなかった。調べてみたら、ユーザーの.gvfsというフォルダの下にあった。rubyからそこを指定すると、無事に読むこともできた。もう少し、分かりやすい場所にmountして欲しい気がする。

Read more...

USB-MIDI

stm32を使って
AVRを使ってUSB-MIDIを変換するものとしては、例えばMOCOというものがあり、作成記事などもいくつかある。しかし、部品集めや半田付けが面倒である。 一方STM32を使ったものの記事は少ないようである。Blue Pillなどを使えば、ほとんど半田付けなどもほとんど必要無い。まず見つけてのが、USBMidiKliK4x4というものである。ここにある、Blue Pill用のbinを書き込んで、LinuxのPCにUSBに接続してみたが、何かerrorだ出て、うまく認識できなかった。次に見つけたのがSTM32F1_MIDI_Serial_Bridgeである。binは無かったので、サイトの情報に従ってコンパイルして、binを書き込んだ。このとき、usbmidi.cのボーレートを31250に変更する必要がある。USBに接続してみたところ、正しく認識出来ているようだし、オシロでそれっぽい信号も出力していることが確認できたので、うまく動いているようである。 Blue Pillを使って作ることができれば、安いしほとんど半田付けも不要である。AVRで作るよりも簡単そうだが、なんで情報が少ないのかな。

Read more...

MIDIとRS232Cの違い

マイコンかUSB-RS232C変換ICか
昔からデジタル音楽機器がMIDIという通信規格を持っていることは知っていたが、詳しくは知らなかったので、調べてみた。基本的には、シリアル通信で、スタートビットやストップビットがある点では、RS232Cとそっくりである。違いは、MIDIの場合は電圧が5Vで、ボーレートが31250baudという点である。USB-MIDI変換をする場合には、マイコンでやる方法以外に、USB-RS232C変換ICを使う方法もあるようである。しかし、RS232Cの場合の近いボーレートが38400baudであるので、これを変更できるようにする必要があるらしい。マイコンでプログラムを流し込むのが面倒だと思うか、変換ICでボーレートを変更する方が面倒と思うかの、どちらだろうか。

Read more...