嚥下障害~水分補給~

水400ccにとろみ剤大さじ4杯を溶いて、タッパーウェアに詰めて持って行きます。

当初、保冷剤を冷凍してしまい、クーラーバッグに入らなくなってしまいました。

変形しなくなっちゃうもんね。

美味しいとは言い難いけれど、「涼を楽しんで貰えれば」と考えています。

f:id:S_E_Hyphen:20170531144310j:plain

GMTでニュース見出しをグラフ化する

以前からMYSQLに取り込んでいたニュースの見出しをグラフ形式で出力してみました。

描画には復活したGMTを使用しています。

X軸の単位を時間にすることもできるのですね。また、漢字も使ってみました。


 #!/bin/bash
. gmt_path_set
gmtset HEADER_FONT=GothicBBB-Medium-UniJIS-UTF8-H
gmtset HEADER_FONT_SIZE=16p
gmtset PLOT_CLOCK_FORMAT=hh:mm

date=`getparstr $# "$*" "date"`
if [ -z $date ]
then
 exit
fi

psfile=nhk_news.ps
mysql -h 192.168.0.16 life_log -N << _SQL_ > temp
 select date( pubDate ),time( pubDate ),date( insertDate ),time( insertDate ),title
  from nhk_main
  where date( pubDate )="$date" and effect=1 order by pubDate;
_SQL_

date2=`date -d "$date 1 days" +'%Y-%m-%d'`
psbasemap -JX8c/15c -R0/8/-50/0 -Ba1/a1g1:"":nwes -K > $psfile
cat temp |\
 awk -F "\t" '{printf "0 -%f 8 0 40 BL \"%s\"\n",NR,$5}' |\
 pstext -J -R -O -K /dev/stdin >> $psfile
psbasemap -JX17cT/15c -R${ date }T00:00:00/${ date2 }T06:00:00/-50/0 \
  -Ba6Hf1H/g1:."${ date }のニュース":Nwes -O -K -X8c >> $psfile
cat temp |\
 awk -F "\t" '{printf "%sT%s -%f %sT%s -%f\n",$1,$2,NR-0.5,$3,$4,NR-0.5}' |\
 while read x1 y1 x2 y2
 do
  printf "%s %s\n%s %s\n" $x1 $y1 $x2 $y2 |\
  psxy -J -R -W1/0/0/0 -SS0.1 -O -K /dev/stdin >> $psfile
  printf "%s %s\n%s %s\n" $x1 $y1 $x2 $y2 |\
  psxy -J -R -W5/0/0/0 -O -K /dev/stdin >> $psfile
 done
echo "${ date2 }T06:00:00 -50 6 0 40 BR $date" |\
 pstext -J -R -O /dev/stdin >> $psfile
rm temp

 

ライフタイムの長いニュースと短いニュースが見分けられるようになりました。

f:id:S_E_Hyphen:20170530083132j:plain

GMTが使えない

先日まで機嫌よく動いていたGMT4.5.13が突然

psbasemap: error while loading shared libraries: libnetcdf.so.6: cannot open shared object file: No such file or directory

と、動かなくなりました。

whereis libnetcdf.so.6

で libnetcdf.so.6を調べると、

libnetcdf.so.5とlibnetcdf.so.7は/usr/libの下に存在するけれど6は有りませんでした。

GMTのソースディレクトリに戻って

sudo ./install_gmt4.sh

を叩いたら、何とか復旧しました。

そろそろGMTのバージョンを上げて置く方がよいかも知れません。

 

 

 

USB2-HUB4XA-BKについて

 システムトークスのSUGOI HUB4Xシリーズ という凄いネーミングのUSBハブを使ってみました。

 うたい文句は安定した高出力の電源供給ということですが、実はソフトによってパソコンから電源オンオフができるというのも特徴です。

 http://www.gniibe.org/oitoite/ac-power-control-by-USB-hub/hub-ctrl.c

を入手してコンパイルすると、

 「usb.hがありません」

と文句を言われました。

 ふむふむ、usb.h は libusb-dev パッケージに含まれているとな…。

 sudo apt-get install libusb-dev で無事入手しました。

 さて再度コンパイルすると、

/tmp/ccEdGPrr.o: 関数 `hub_port_status' 内:
hub-ctrl.c:(.text+0xb1): `usb_control_msg' に対する定義されていない参照です
/tmp/ccEdGPrr.o: 関数 `usb_find_hubs' 内:
hub-ctrl.c:(.text+0x37a): `usb_get_busses' に対する定義されていない参照です
hub-ctrl.c:(.text+0x459): `usb_open' に対する定義されていない参照です
hub-ctrl.c:(.text+0x4b4): `usb_control_msg' に対する定義されていない参照です
hub-ctrl.c:(.text+0x639): `usb_close' に対する定義されていない参照です
hub-ctrl.c:(.text+0x769): `usb_close' に対する定義されていない参照です
/tmp/ccEdGPrr.o: 関数 `main' 内:
hub-ctrl.c:(.text+0xb67): `usb_init' に対する定義されていない参照です
hub-ctrl.c:(.text+0xb6c): `usb_find_busses' に対する定義されていない参照です
hub-ctrl.c:(.text+0xb71): `usb_find_devices' に対する定義されていない参照です
hub-ctrl.c:(.text+0xc13): `usb_open' に対する定義されていない参照です
hub-ctrl.c:(.text+0xce4): `usb_control_msg' に対する定義されていない参照です
hub-ctrl.c:(.text+0xd38): `usb_close' に対する定義されていない参照です
collect2: error: ld returned 1 exit status

 なんだか更に一杯怒られました。結構時間を掛けて調べたところ、libusb.aなどが/user/libの下ではなく、/usr/lib/x86_64-linux-gnu の下に落とされていたことが判明し、ようやく解決です。

 適切なbus番号を$ bus、device番号を$ deviceとすると、

sudo ./hub-ctrl -b ${ bus } -d ${ device }  -P 1 -p 0

 で1番ポート(左端のダウンストリームポート)の電源が遮断されました。

なるほど、これはスゴイかも知れません。

 

 ところで、hub-ctrl.cを公開してくれているのは、システムトークスともNECとも関係なさそうな方ですね。ということは一般にUSBハブに対して hub-ctrl.c を使用すると、電源のオンオフが可能になるのではないでしょうか。

 と考えて十年来使用している ArvelのH428-GNというハブでも同じことを試してみましたが、結果は全くの不発でした。上手くゆく製品とそうでない製品があるということなのでしょうね。

 

 

 

xmlのmysqlへの登録

前回、取得したRSSxml形式でした。

xmlならばxpathコマンドで個々の要素に分解することができます。

具体的には

 title=`\
  cat $file |\
   xpath -q -e "//item[${item}]" 2>/dev/null |\
   xpath -e "//title/text()"  2>/dev/null `

 で変数titleに上から$item番目の見出しを代入することができます。

データベース名life_logにテーブルを作成しました。フィールドは

title 見出し、link 記事本文のURL、guid 同左、pubDate 配信日時、description 記事概要、insertDate データベース登録日時

としました。

MYSQLにinsertで登録した後、

select title,min(pubDate),max(insertDate) from nhk_main group by title order by max(insertDate)-min(pubDate) desc limit 20;

で過去24時間のうちに長い時間掲載されていたニュース上位20を検索してみました。

インドネシアオラウータンの話題が、最も長い時間掲載されていたみたいです。

 

  見出し 配信開始日時 掲載終了
1 珍しい白いオランウータン保護 インドネシア 2017-05-16 22:05:00 2017-05-17 09:00:00
2 眞子さま 同級生とご婚約へ 2017-05-16 19:01:00 2017-05-17 05:00:00
3 自衛隊機墜落 発見の4人は自衛隊員 全員死亡 2017-05-16 18:21:00 2017-05-17 04:00:00
4 文科省の審議会 新設獣医学部に「課題あり」と報告 2017-05-16 21:32:00 2017-05-17 04:00:00
5 複数ワクチン混ぜる誤った方法で乳幼児に予防接種 2017-05-16 18:42:00 2017-05-17 01:00:00
6 テニス不正監視団体 日本の元プロテニス選手を永久資格停止 2017-05-16 22:58:00 2017-05-17 04:00:00
7 北朝鮮 安保理声明に反発「全面的に排撃する」 2017-05-16 22:03:00 2017-05-17 01:00:00
8 眞子さまご婚約へ ゆかりの人から祝福の声 2017-05-17 05:06:00 2017-05-17 11:00:00
9 眞子さまご婚約へ 小室さん「時期来たら改めて説明」 2017-05-17 10:17:00 2017-05-17 15:00:00
10 野党4党 金田法相の不信任決議案を提出 2017-05-17 10:18:00 2017-05-17 15:00:00
11 高浜原発4号機 きょう 再稼働へ 2017-05-17 06:28:00 2017-05-17 11:00:00
12 「大学入学共通テスト」最終案まとまる 記述式も 2017-05-16 11:43:00 2017-05-16 16:00:00
13 トランプ大統領がロシアに機密情報漏えいか 米紙報道 2017-05-16 11:49:00 2017-05-16 16:00:00
14 大規模サイバー攻撃 北朝鮮ハッカー集団使用のソフトと類似 2017-05-16 13:53:00 2017-05-16 18:00:00
15 「乃木坂46」ファンの教師が偽造学生証を提示か 2017-05-16 12:00:00 2017-05-16 16:00:00
16 自民 二階幹事長 中国 習主席と会談 北朝鮮問題で連携を 2017-05-16 14:05:00 2017-05-16 18:00:00
17 国連安保理 北朝鮮ミサイル発射で緊急会合へ 2017-05-17 01:10:00 2017-05-17 05:00:00
18 「テロ等準備罪」野党4党が法相不信任決議案提出へ 2017-05-17 05:11:00 2017-05-17 09:00:00
19 トランプ大統領 ロシアに情報で与党からも問題視する意見 2017-05-17 06:16:00 2017-05-17 10:00:00
20 自衛隊機墜落 ボイスレコーダー発見急ぎ事故原因究明へ 2017-05-17 07:23:00 2017-05-17 11:00:00

 このスクリプトも前回のcrontabに登録してしまうと、1時間に1回自動的にRSSを取得してMYSQLに登録してくれるようになります。

#!/bin/bash
mysql << _SQL_
 create database if not exists life_log default character set utf8;
 use life_log;
 create table if not exists nhk_main(
  title varchar(200),
  link varchar(100),
  guid varchar(100),
  pubDate datetime,
  description varchar(1500),
  insertDate datetime,
  effect int default 1,
  comment varchar(20)
 );
_SQL_

echo `date -d "$date"` の配信です
   
file=~/nhk/`date -d "$date" '+%m%d%H%M'`.xml
num_item=`cat $file | grep \<item\> | wc -l`
for ( ( item=1; item<=${num_item}; item++ ) )
do
 title=`\
  cat $file |\
   xpath -q -e "//item[${item}]" 2>/dev/null |\
   xpath -e "//title/text()"  2>/dev/null |\
   nkf `
 link=`\
  cat $file |\
   xpath -q -e "//item[${item}]" 2>/dev/null |\
   xpath -e "//link/text()"  2>/dev/null `
 guid=`\
  cat $file |\
   xpath -q -e "//item[${item}]" 2>/dev/null |\
   xpath -e "//guid/text()"  2>/dev/null `
 pubDate=`\
  cat $file |\
   xpath -q -e "//item[${item}]" 2>/dev/null |\
   xpath -e "//pubDate/text()"  2>/dev/null `
 pubDate=`date -d "${pubDate}" +"%Y-%m-%d %H:%M"`
 description=`\
  cat $file |\
   xpath -q -e "//item[${item}]" 2>/dev/null |\
   xpath -e "//description/text()"  2>/dev/null `
 mysql life_log << _SQL_
  insert into nhk_main(title,link,guid,pubDate,description,insertDate)
  value("${title}","${link}","${guid}","${pubDate}","${description}","${date}");
_SQL_
done

RSSの取得

多くのニュースサイトはRSSも配信しています。

フリーのRSSリーダーなんかで取得することもできますが、色々加工してみたいので、直接取りにゆくことを試みました。

NHKオンラインのニュースを使わせてもらいました。

#!/bin/bash
<<_NHKニュース_
cat0    NHKニュース 主要ニュース
cat1    NHKニュース 社会
cat3    NHKニュース 科学・医療
cat4    NHKニュース 政治
cat5    NHKニュース 経済
cat6    NHKニュース 国際
cat7    NHKニュース スポーツ
cat2    NHKニュース 文化・エンタメ
cat-live    NHKニュース LIVEニュース
_NHKニュース_

cate=cat0
file=`date "+%m%d%H%M"`.xml
wget  http://www3.nhk.or.jp/rss/news/${cate}.xml -O- > ~/nhk/$file
 

 実行すると、実行時刻に応じたファイル名($file)を付けて所望のフォルダーに保存されます。

恥ずかしながらRSSって下図のようなxml形式で書かれているというのは、今回初めて知りました。

f:id:S_E_Hyphen:20170516145601p:plain

 

# m h dom mon dow command
*/10 * * * * /home/user/bin/getrss_NHK >/dev/null 2>&1

上記のコマンドを平のユーザーでcrontabに登録すれば(sudoである必要はない)、10分毎のRSSが自動的に取得されてファイルに保存されます。

 

中間層ふたたび

1段目のノード数は0
2段目のノード数は0
3段目のノード数は2
トレーニングを10000回繰り返すと誤差関数は302.798157となりました
<matplotlib.collections.PathCollection at 0x6af2b10>

これは手も足も出ませんね。

 


 

1段目のノード数は0
2段目のノード数は2
3段目のノード数は2
トレーニングを10000回繰り返すと誤差関数は255.961716となりました
<matplotlib.collections.PathCollection at 0x70a8d90>

中間層を2段にしましたが、イマイチです。

 


 

1段目のノード数は0
2段目のノード数は2
3段目のノード数は10
トレーニングを10000回繰り返すと誤差関数は36.078690となりました
<matplotlib.collections.PathCollection at 0x6ccdc50>

最終の中間層のノード数を増やすと結構良くなりました。

 


 

1段目のノード数は2
2段目のノード数は2
3段目のノード数は10
トレーニングを10000回繰り返すと誤差関数は32.553638となりました
<matplotlib.collections.PathCollection at 0x6de0f90>

中間層を3段にすると悪化しました。

 

1段目のノード数は0
2段目のノード数は0
3段目のノード数は25
トレーニングを10000回繰り返すと誤差関数は28.560705となりました
<matplotlib.collections.PathCollection at 0x7c49ad0>

なぁんだ。これでもいけるんじゃん。