カットフルーツとしてイチゴが売られていました。
イチゴ70グラムを水分調整して100グラムとし、
ビタミンCを1包と
とろみ剤大さじ1を加えて
ミキサーで撹拌しました。
イチゴのサッパリとした甘味と酸味を味わうことができます。
カットフルーツとしてイチゴが売られていました。
イチゴ70グラムを水分調整して100グラムとし、
ビタミンCを1包と
とろみ剤大さじ1を加えて
ミキサーで撹拌しました。
イチゴのサッパリとした甘味と酸味を味わうことができます。
土井善晴先生のテレビ番組を参考にして、ひじきの煮物を作ってみました。
材料は
ひじき 7グラム
ニンジン 1/4本
薄揚げ 半枚
しょうが 20グラム
です。
ひじきは15分程度水で戻します。薄揚げは油抜きをしておきました。しょうが、ニンジン、薄揚げを千切りし、フライパンに掛けます。ひじきを加えたら約100ccの水で煮込みます。ある程度煮立ってきたら、かえし醤油(20cc)を加えて煮汁が無くなるまで火を入れました。
ブリの照り焼き と同様に、やはり25分程度かかりました。
味は思っていたものよりも、ずいぶんと薄味でしたが、何かアレンジが期待できそうな感じとなっています。
MYSQLを使用した「らじる☆らじる」の録音と再生 で紹介していた録音が先週の早朝(2018年1月24日午前6時過ぎ)に突然動作しなくなりました。
そのような時刻に何か設定変更をしているはずもなく、停電などによるサーバー停止なども確認できませんでした。
色々原因を探っていたところ、どうやらMYSQLのinto dumfile 文とload_file()関数が期待通りの挙動をしなくなっていたことが先日わかりました。
具体的には、
select sound into dumpfile "$file" from t_sound;
で、secure_file_priv で指定されたディレクトリにファイルを作成すると、所有者が通常とは異なるユーザ(ユーザー名:mysql)となってしまうのです。このため、作成したファイル$fileが消去も含めてアドミニストレータ権限でないとできなくなっていたのです。
同様に、load_file()関数も所有者がmysqlであるファイルでないと、NULL値となってしまっていました。
時間帯を考慮すると、おそらく自動アップデートによりレビジョンアップが行われたのだと推測できます。この動作は「ファイルはすべてのユーザーから読み取り可能」「上記の条件が満たされていないために、ファイルを読み取ることができない場合、この関数は NULL
を返します。」というload_file()関数の仕様を満たしています。しかし、私が期待していた「ゆるい」動作ではなくなってしまったということです。
MYSQLでのバイナリデータの取り扱いを更に増やしてゆこうと考えていたところだったので困っています。バイナリを使わない下記のような方法も考えてみましたが、mysqldへの負担が半端ではなかったため、現在停止させています。
登録側
#!/bin/bash mysql nhkradio << _SQL_ create table if not exists t_sound( seq int, estimate datetime, sub_seq int, sound int, INDEX(estimate) ); create table if not exists t_volume( seq int primary key auto_increment, DLdate datetime, estimate datetime, number int, fullname varchar(100), rms double, INDEX(estimate) ); _SQL_ if [ -z $num ] ; then echo "num が不明";exit;fi if [ -z "$estimate" ] ; then echo "推定時刻が空白";exit;fi if [ -z "$fullname" ] ; then echo "URL が不明";exit;fi if [ -z "$rms" ] ; then echo "音量 が不明";exit;fi if [ ! -e $num.raw ]; then echo "rawファイルがない";exit;fi seq=`\ mysql nhkradio -N << _SQL_ insert into t_volume(DLdate,estimate,number,fullname,rms) value(now(),"$estimate",$num,"$fullname",$rms); delete from t_sound where estimate <now() - interval 48 hour; delete from t_volume where estimate <now() - interval 48 hour; select last_insert_id(); _SQL_` cat $num.raw |\ od -w2 -t d2 -v -An |\ awk -v seq="$seq" -v estimate="$estimate" \ '{OFS=","}{print seq,estimate,NR,$1}' > loadfile.txt mysql nhkradio << _SQL_ load data local infile "loadfile.txt" into table t_sound fields terminated by "," (seq,estimate,sub_seq,sound); _SQL_ rm loadfile.txt
再生側
#!/bin/bash date1=`getparstr $# "$*" "date1"` date2=`getparstr $# "$*" "date2"` temp=`mktemp ./XXXX` mysql nhkradio -N << _SQL_ > $temp select sound from t_sound where "$date1"<=estimate and estimate<="$date2" order by seq,sub_seq; _SQL_ scilab -nw << _SCILAB_ fd=mopen('$temp','r'); a=mfscanf(-1,fd,'%d'); mclose(fd); y=a/(2^15); wavwrite(y, 8000, 'playback.wav'); _SCILAB_ #sox -r 8000 -c 1 -b 16 -e signed-integer playback.raw playback.wav aplay playback.wav rm $temp playback.wav
scilabでコンボリューションを実施するときは、c=convol(b,a)を使います。
しかし信号処理の場合、周期Tをもって無限に繰り返し循環する「継続時間が無限大」の関数とみなして取り扱いたいことがあります。具体的には波の終端に始点がつながっているとします。
このようなとき、
[c,e]=convol(b,a); [d,e]=convol(b,a,e);
とすると、2回目のconvolの結果は尻尾と頭がつながっているとしてオーバーラップ加算を実施してくれます。
図中の黒線がオリジナルの例題波です。これにconvol を用いて [1/3 1/3 1/3] という3要素分の移動平均を実施した例です。
青線ではオーバーラップ加算を考慮していません。始点の青丸は1と2の平均ですから、ほとんどゼロです。一方赤線はオーバーラップ加算を考慮しているため、1の前に16の要素があります。ですから、その平均値は12.33となっています。
2から15に関しては、前後に最低1個以上要素がありますので、オーバーラップ加算を考慮しても、しなくても同じ値となります。
ハニングやハミングウィンドウによるスペクトルの平滑化を行う場合、このオーバーラップ加算は役に立つものと思います。
#!/bin/bash gmt gmtset FONT_ANNOT_PRIMARY 8p,GothicBBB-Medium-UniJIS-UTF8-H,black gmt gmtset FONT_LABEL 10p,GothicBBB-Medium-UniJIS-UTF8-H,black gmt gmtset FONT_TITLE 10p,GothicBBB-Medium-UniJIS-UTF8-H,black scilab -nw << _SCILAB_ a=[38 -33 -19 -10 1 -8 -20 10 -1 4 11 -1 -7 -2 5 32 ]; b=[1/3 1/3 1/3]; rot=(size(b,'*')-1)/2; [c,e0]=convol(b,a); [d,e1]=convol(b,a,e0); c=[c(rot+1:16) c(1:rot)]; d=[d(rot+1:16) d(1:rot)]; fd=mopen('smoothed.txt','w'); for i=1:16, mfprintf(fd,'%d %f %f %f\n',i,a(i),c(i),d(i)); end, mclose(fd); _SCILAB_ cat smoothed.txt |\ awk '{print $1,$2}' |\ gmt psxy -JX20c/4c -R0/17/-40/40 -BnSeW+t"b=3⊿t" -Bxa1+l'pt' \ -Bya20g100 -W1p,black -K > convol_test.ps cat smoothed.txt |\ awk '{print $1,$3}' |\ gmt psxy -J -R -B -W1p,blue -O -K >> convol_test.ps cat smoothed.txt |\ awk '{print $1,$4}' |\ gmt psxy -J -R -B -W2p,red -O >> convol_test.ps
なおコンボリューションの性質上、38*1/3+(-33)*1/3+(-19)*1/3 の結果が第一要素に入ってしまいますが、これを第二要素として取り扱いたいという要求が有ります。このためc=[c(rot+1:16) c(1:rot)];という、やや巧妙な(小狡い?)ことを行っています。変数rotはbの要素数を考慮して1が入るようになっています。
嚥下障害 ~みかん~ では普通のみかん、いわゆる温州ミカンを使いましたが、今回は大玉の伊予柑を使用してみました。
伊予柑くらいになると、薄皮を剥くのも比較的容易です。
偶々ですが、半個(4房)でちょうど100グラムとなったので、とろみ剤大さじ1杯を加えて、水分調整もせずにそのままミキサーで撹拌しました。
思っていたよりも甘味が強く、また薄皮由来の雑味も有りません。ビタミンCの添加も必要ありませんでした。
自画自賛になりますが、予想外のヒットかも知れません。
GMT ver.5で、緯度経度がわかっている複数の点を全て地図中にプロットしようと思います。メルカトル図法を使用するならば、例えば
gmt psxy -JM20c -Rwest/east/south/north -B
のように地図の幅を20cmとして描画することができます。ただし地図の高さが何センチメートルになるかは指定できません。緯度と経度は縮尺を介して従属関係にあるので当然と言えば当然ですが、この為にしばしば図-1のように思いもよらない縦長の絵になってしまうことがあります。
画面では余り気になりませんが、A4ランドスケープで描画した場合は図面の上半が切れてしまいます。そこで、図の幅と高さを指定して緯度経度の範囲を再決定するシェルスクリプトを作成してみました。リスト-1に示します。
指定した緯度経度では、所望のアスペクト比よりも縦長になる場合、東西に範囲を広げて自動的に指定したアスペクト比となるようにします(図-2の例)。逆に横長になってしまった場合は、南北に範囲を拡張します。
メルカトル図法以外には対応していませんし、 緯度・経度の比を求めるのに球面近似を使用しているなど不十分な点はありますが、とりあえず見れる図面を描くためには便利なツールだと思っています。
#!/bin/bash sdoc=\ " gmt_rangeset - 図面の大きさから\n"\ " 緯度経度の範囲を\n"\ " を設定する \n"\ " ※メルカトル図法(-JMオプション)\n"\ " に対応します \n"\ " \n"\ " [ require] \n"\ " width 地図の幅(単位:cm) \n"\ " height 地図の高さ(単位:cm) \n"\ " range 経度・緯度の最大最小値 \n"\ " -Rwest/east/south/northで指定\n"\ " \n"\ " [ 出力 ] \n"\ " -JM{width}c -Rw/e/s/n \n"\ " 図の高さがheight(cm)より小さい\n"\ " ことが予想される場合は \n"\ " n=north+α s=south+α して \n"\ " 図の高さをheight(cm)になるよう\n"\ " 調節する \n"\ " 逆に大きくなる場合は \n"\ " e=east+α w=west-α とする \n"\ " \n" export sdoc width=`getparstr $# "$*" "width"` height=`getparstr $# "$*" "height"` range=`getparstr $# "$*" "range"` if [ -z $width ]; then usage;exit; fi if [ -z $height ]; then usage;exit; fi if [ -z $range ]; then usage;exit; fi if [ `echo $range | cut -c1-2` != "-R" ]; then usage;exit; fi xmin=`echo $range | sed -e "s/-R//g" | awk -F"/" '{print $1}'` xmax=`echo $range | sed -e "s/-R//g" | awk -F"/" '{print $2}'` ymin=`echo $range | sed -e "s/-R//g" | awk -F"/" '{print $3}'` ymax=`echo $range | sed -e "s/-R//g" | awk -F"/" '{print $4}'` ymean=`echo $range | sed -e "s/-R//g" | awk -F"/" '{print 0.5*($3+$4)}'` prjx=$width prjy=$height temp=temp.txt scilab -nw << _SCI_ xmin=${xmin};xmax=${xmax};ymin=${ymin};ymax=${ymax}; height=1/cos($ymean*%pi/180)*(ymax-ymin)/(xmax-xmin) * $prjx; ratio=height/$prjy; fd=mopen('$temp','w'); if ratio<1, ymax=$ymean+($ymax-$ymin)/ratio/2; ymin=$ymean-($ymax-$ymin)/ratio/2; mfprintf(fd,'-JM%sc ',"${prjx}"); mfprintf(fd,'-R%f/%f/%f/%f\n',xmin,xmax,ymin,ymax); else xmin=0.5*$xmin*(1+ratio)+0.5*$xmax*(1-ratio); xmax=0.5*$xmin*(1-ratio)+0.5*$xmax*(1+ratio); mfprintf(fd,'-JM%sc ',"${prjx}"); mfprintf(fd,'-R%f/%f/%f/%f\n',xmin,xmax,ymin,ymax); end mclose(fd); _SCI_ cat $temp; rm $temp
#!/bin/bash cat <<+ > GPSsite.txt 利尻 960501 45.1377 141.1671
滝上 960504 44.1919 143.0768
愛別 960506 43.9084 142.5777
旭川 960508 43.7385 142.4096
北竜 960509 43.7408 141.8738
上川 960510 43.7714 142.9030
富良野 960514 43.3363 142.3953
三笠 960516 43.2484 141.8909
小樽2 960517 43.2095 140.8606
新得 960518 43.1655 142.8097
江別 960520 43.0776 141.5401
帯広 960521 42.9389 143.1706
恵庭 960522 42.8844 141.5774
千歳 960523 42.7732 141.4071
虻田 960525 42.5514 140.7676
伊達 960526 42.4739 140.8764
奥尻2 960527 42.0605 139.4462
砂原 960528 42.1231 140.6669
七飯 960529 41.9767 140.7154
上ノ国 960530 41.8030 140.0712
+ proj=-JM10c range=`\ cat GPSsite.txt |\ awk '{print $4,$3}' |\ gmtinfo -I0.5/0.5 ` range=`gmt_rangeset width=20 height=15 range=$range | awk '{print $1,$2}'` proj="" echo $proj $range gmt psbasemap $proj $range -Baf -K > map.ps gmt pscoast -J -R -B -Ggray -Df -O -K >> map.ps cat GPSsite.txt |\ awk '{print $4,$3}' |\ gmt psxy -J -R -B -Ss0.5 -Gred -O -K >> map.ps cat GPSsite.txt |\ awk '{print $4,$3,$1}' |\ gmt pstext -J -R -O -F+jMR+a0.0+f12p,GothicBBB-Medium-UniJIS-UTF8-H,0/0/0 -Dj0.25c >> map.ps