サイトのセキュリティ強化

e在京白堊会のサイトを念願の常時SSLに対応できるように、引っ越しと移植を
実施しました。Topページには、こっそり「47ML」へのリンクも貼っています。
ついでに、テーマのカストマイズで保守性を犠牲にしていた「子テーマ」設置と
MyFunctionとした私的関数の維持管理の知恵をメモしておきます。

1)子テーマの設置
  twentyten-child として次のstyle.css を設置(他のCSS値も置換できる)
/*
Theme Name: Twenty Ten Child
Theme URI: https://wordpress.org/themes/twentyten-child/
Description: The 2010 theme for WordPress is stylish, customizable, simple, and readable -- make it yours with a custom menu, header image, and background. Twenty Ten supports six widgetized areas (two in the sidebar, four in the footer) and featured images (thumbnails for gallery posts and custom header images for posts and pages). It includes stylesheets for print and the admin Visual Editor, special styles for posts in the "Asides" and "Gallery" categories, and has an optional one-column page template that removes the sidebar.
Author: the WordPress team
Author URI: https://wordpress.org/
Template: twentyten
Version: 1.0.0
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: blog, two-columns, custom-header, custom-background, threaded-comments, sticky-post, translation-ready, microformats, rtl-language-support, editor-style, custom-menu, flexible-header, featured-images, footer-widgets, featured-image-header
Text Domain: twenty-ten-child
*/
2)MyFunctionのinclude方法   childのfunction.php には、次の記述を実施した。
add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' );
function theme_enqueue_styles() {
    wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
    wp_enqueue_style( 'child-style', get_stylesheet_directory_uri() . '/style.css', array('parent-style'));
}
//ここから自由インクルード
function Include_my_php($params = array()) {
    extract(shortcode_atts(array(
        'file' => 'default'
    ), $params));
    ob_start();
    include(get_stylesheet_directory() ."/$file.php");
    return ob_get_clean();
}
add_shortcode('myphp', 'Include_my_php');
Include_my_php(array('file'=>'myFunction'));
//ここまで
これで、テーマ「twentyten」の更新があっても、全く影響が出ない。
カテゴリー: お知らせ | 3件のコメント

Raspberry Pi 4で スマスピ動作

(RaspbianOS 2020-02-05版では、Debian向けのAIYインストールを使って楽になったので、コメント4に投稿)

Raspberry Pi 4でAIY Voice Kit を動作させ、「ね~グーグル」の呼びかけができたので、
備忘録とする。RasPi3でも勿論動作する。
更に、14)のcheck_audio.pyを飛ばせば、AIY Voice Kit が無くても動作したので驚いた。Pulseaudioでマイク・スピーカーを切り替えることで自由に構築・運用ができる。
(下記原稿中、「–ダッシュ2個」の表現が全角文字置換されているので要注意)

【新規SDカードに書き込む場合】
1)MicroSDの初期化
  PCにてExplorerがすべて閉じた状態でディスク管理を開いて
  SDドライブのパーティションをすべてボリューム削除する
2)Win32DiskImager等でMicroSDに最新RaspbianOSを書き込む
  https://downloads.raspberrypi.org/raspbian_full_latest
  2019-09-26-raspbian-buster-full.img(Busterバージョン)
3)bootのconfig.txtに次の追記をする
  dtoverlay=googlevoicehat-soundcard
  また次をコメントアウトする
  #dtparam=audio=on
  なお、ミニLCDを使う場合は、次の追記も必要になることが多い。
  7Inch 1024×600だと、config.txtに次の追加を指示されている。
max_usb_current=1
hdmi_force_hotplug=1
config_hdmi_boost=7
hdmi_group=2
hdmi_mode=87
hdmi_cvt 1024 600 60 6 0 0 0
4)bootのトップにsshダミーファイルをおく

5)RasPiにMicroSDを入れ、電源をオンにして起動する
  (もしRasPi4だった場合は、まだgooglevoicehat-soundcardの
  ボードをドッキングさせずに電源を入れる)
6)RaspberryPiの設定誘導に対し、Password,Locale,Time zoneを適切に
  変更し、WiFiのPassKeyを設定する(スマホのGoogleツールで
  デバイス設定するとき、同一AP配下となる様に考慮)
  updateはここではskipする
7)PCからSSHツールにてraspberrypi.localに接続する
  SSHで時々の休止が気になるときは、次のコマンドで省エネを停止できる
  sudo iw dev wlan0 set power_save off
8)ダウンロードリストを拡張して、UPGRADEを実施する
  echo “deb https://dl.google.com/aiyprojects/deb stable main” | sudo tee /etc/apt/sources.list.d/aiyprojects.list
  wget -q -O – https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add –
  sudo apt-get update
  sudo apt-get -y upgrade
  sudo reboot する
  (RasPi4については、ここで画面出力を2Kに確定し、Shutdown
   してgooglevoicehat-soundcardのボードをドッキングさせる)

9)仮置きとしてAIY V2のインストールをする
  sudo apt install –fix-missing dkms
  sudo apt-get install -y aiy-voicebonnet-soundcard-dkms aiy-dkms
  処理中に–configureのエラーが発生するが、無視する:
   aiy-dkms
   aiy-voicebonnet-soundcard-dkms

10)AIYのadcとi2cの変更
  sudo cp /usr/src/aiy-1.1/aiy/iio/adc/aiy-adc.c /usr/src/aiy-1.1/aiy/iio/adc/aiy-adc.c.org
  sudo vi +138 /usr/src/aiy-1.1/aiy/iio/adc/aiy-adc.c
   該当1行の削除
  sudo cp /usr/src/aiy-1.1/aiy/mfd/aiy-io-i2c.c /usr/src/aiy-1.1/aiy/mfd/aiy-io-i2c.c.org
  sudo vi /usr/src/aiy-1.1/aiy/mfd/aiy-io-i2c.c
   2か所のi2c_lock_adapter(i2c->adapter);をi2c_lock_bus(i2c->adapter, I2C_LOCK_ROOT_ADAPTER);に変更
   2か所のi2c_unlock_adapter(i2c->adapter);をi2c_unlock_bus(i2c->adapter, I2C_LOCK_ROOT_ADAPTER);に変更
  インストールする
   sudo dkms install aiy/1.1
  sudo dkms remove aiy-voicebonnet-soundcard/1.0 –all
  sudo reboot する
11)Audioのインストール
  sudo apt-get update
  sudo apt-get install -y pulseaudio pavucontrol
  タイムアウトだったら、上手く行くまでinstallを再試行する。
  処理中のaiy-voicebonnet-soundcardに関するエラーは無視する。
   sudo mkdir /etc/pulse/daemon.conf.d/
  echo “default-sample-rate = 48000” | sudo tee /etc/pulse/daemon.conf.d/aiy.conf
  sudo apt-get install -y aiy-python-wheels
  処理中にlinux_armv6lと–configureのエラーが発生するが、無視する:
   aiy-python-wheels
   aiy-voicebonnet-soundcard-dkms

  また、VLCのHDMIからの音声出力を選択したいならば、
  #dtparam=audio=on
  のコメントを外し、カード番号を入れ替え、さらに次の
  定義を、/etc/asound.conf に追加する。
  <AIY VoiceKITのサウンドカードの人は、次のように設定>
options snd_rpi_googlevoicehat_soundcard index=0
pcm.softvol {
    type softvol
   slave.pcm dmix
        control {
        name Master
        card 0
    }
}
pcm.micboost {
    type route
    slave.pcm dsnoop
    ttable {
        0.0 30.0
        1.1 30.0
    }
}
pcm.!default {
    type asym
    playback.pcm “plug:softvol”
    capture.pcm “plug:micboost”
}
ctl.!default {
    type hw
    card 0
}
  <カード番号の入れ替え>/etc/modprobe.d/alsa-base.conf
  options snd slots=snd_rpi_googlevoicehat_soundcard,snd_bcm2835
  options snd_rpi_googlevoicehat_soundcard index=0
  options snd_bcm2835 index=1

12)protobufのインストール
  cd Downloads
  pip3 download protobuf
  pip3 install ./protobuf-3.11.2-py2.py3-none-any.whl
   (3.11.2の部分は、最新Vnoを使う)
  sudo vi +7 /var/lib/dpkg/info/aiy-python-wheels.postinst
   7-8行をコメントアウトする
  sudo dpkg –configure –force-overwrite –force-overwrite-dir -a
  処理中に–configureのエラーが発生するが、無視する:
   aiy-voicebonnet-soundcard-dkms
  sudo reboot する

13)実行準備
  git clone https://github.com/google/aiyprojects-raspbian.git AIY-projects-python
  sudo mv AIY-projects-python /opt/aiy/projects-python
  ln -s /opt/aiy/projects-python AIY-projects-python
  ln -s /home/pi/AIY-projects-python AIY-voice-kit-python
  sudo pip3 install -e AIY-projects-python

  THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE.
   このエラーが出たとしても無視する。

  sudo cp /opt/aiy/projects-python/src/aiy/assistant/auth_helpers.py \
                  /opt/aiy/projects-python/src/aiy/assistant/auth_helpers.py.org
  sudo vi +75 /opt/aiy/projects-python/src/aiy/assistant/auth_helpers.py
   この行末カッコ内の最後のパラメタ’,-1’を削除する
  pip3 install google-assistant-library==1.0.0
#  (Segmentation Fault防止のため、1.0.1を推奨するメッセージを
   無視して1.0.0をPre設置)
  pip3 install google-assistant-library
  pip3 install google-auth-oauthlib
  sudo pip3 install grpcio
  AIYプロジェクト内の日本語対応が不完全なところを修正する。
   vi +214 /home/pi/.local/lib/python3.7/site-packages/google/assistant/library/assistant.py
   の.encode(‘ASCII’) を.encode(‘utf-8’) にする。
  AIYボードの初期化のために、命令を追加する。
   vi +284 /home/pi/AIY-voice-kit-python/src/aiy/board.py
   に、GPIO.setwarnings(False) を行追加する。
14)次の確認を実施する
  amixer sset Master 50% で、音量を半分にしておく
  export PYTHONPATH=”/home/pi/AIY-voice-kit-python/src”
  /home/pi/AIY-voice-kit-python/checkpoints/check_audio.py

15)次のURLに基づき、アカウント登録をする
  https://tech.nikkeibp.co.jp/atcl/nxt/column/18/00255/042600011/?P=4
  assistant.json ファイルを /home/piに置く
16)サンプルコードの実行
  export PYTHONPATH=”/home/pi/AIY-voice-kit-python/src”
$PYTHONPATH/examples/voice/assistant_library_with_button_demo.py
   初回のスクリプト実行時にURLが表示され、ブラウザでアクセスする
  ことで認証文字列が返される。
  それをスクリプト実行中の質問に貼り付ける。
17)デバイスの登録
  サンプルコードの実行でしばらく放置し、スマホのHomeアプリの設定・詳細設定の
  「アシスタント」に出現した新たなデバイス(Voice Kit)の言語を
  日本語に設定し、属性参照を許可する。

以下は、SmartTV(PX-W3U4,PX-Q3U4使用)に変身させるときの追加作業
18)TVチューナーサポートシステムのインストール
  curl –silent https://mori1-hakua.tokyo/test/TVget.sh | sh

19)N2TTS,youtube-dl,mojimojiのインストール
  このURLに従う:https://support.kddi-research.jp/n2/service.html
  (wget -O n2-linux-foc.tgz https://support.kddi-research.jp/n2/download.php?type=5)
  sudo -H pip install youtube-dl
  pip3 install mojimoji
  pip3 install –upgrade google-api-python-client

【RasPi4に対応させ、multiTV.shから aiyTV.shを用意】
  MPEG2に対するプレーヤーとして、OMXからVLCメディアプレーヤに
  切り替えるため、
  source ~/.biling
  if [ “$BILING” = “yes” ]; then
   MPG2 =`vcgencmd codec_enabled MPG2`
   if [ “$MPG2” = “MPG2 disabled” ]; then
   BILING=sel
   fi
  fi
  とし、
  elif [ “$BILING” = “sel” ]; then
   (recdvb –dev ${DEV} –b25 –strip –http 8080 ${LCH}; exit) &
   (sleep 2) &
   cvlc -f –no-video-title-show http://localhost:8080/${CH}/
  fi
  と、プレーヤーを取り換える。
  VLCはマルチスレッドではブロックノイズが出やすいため、スレッドを
  シングルに切り替える。
  <sayJ関数の追加>
  vi $PYTHONPATH/aiy/voice/tts.py
<pre>
def sayJ(text, asynch=0, lang=’ja-JP’, volume=60, pitch=130, speed=100, device=’sysdefault:CARD=ALSA’):

    logging.info(text)
    with tempfile.NamedTemporaryFile(suffix='.wav', dir=RUN_DIR) as f:
       cmd = 'n2tts -p VOLUME=%s -o %s "%s" && aplay -q -D %s %s' % \
             (volume, f.name, text, device, f.name)
       if asynch==0: subprocess.check_call(cmd, shell=True)
       else: subprocess.Popen(cmd, shell=True)
</pre>

以上

カテゴリー: RaspberryPi, お知らせ | 5件のコメント

コマンドプロンプトからファイル数


Windowsのコマンドプロンプトから、 フォルダ(ディレクトリ)配下の全ファイル数、全フォルダ数を取得するコマンドのメモ

——————–

ファイル数

dir /A-D /S /B | find /c /v “”

——————–

フォルダ数

dir /AD /S /B | find /c /v “”

——————–

dir /A-D は、ディレクトリ以外

dir /AD は、ディレクトリのみ

dir /S /B は、サブフォルダも含めて、配下のファイル名/フォルダ名のみ

出力

find /c /v “” は、行数を出力

カテゴリー: お知らせ | コメントする

2019年もよろしく

カテゴリー: お知らせ | コメントする

AIY Voice KIT にAlexaとGoogleAssistantを同居

3月26日のOSアップグレードで、少しインタフェースが変わったため、確実な同居方法を
メモした。また、04-13版のレベルダウンへも対応追記。

1.AIYプロジェクトのVoice Kit SD imageをダウンロード
 aiyprojects-2018-04-13.img.xz
 https://dl.google.com/dl/aiyprojects/aiyprojects-latest.img.xz
2.MicroSDに書き込み、インストール
 aiyprojects-2018-04-13.img.xzを解凍し、書き込みする
 参照:https://aiyprojects.withgoogle.com/voice/#assembly-guide-5-2–boot-the-device
2.1 Audio音量関数の修正
 2018-04-13.imgにはレベルダウンがあり、AIY-project*/src/aiy/audio.py を修正する。
 113行 db_range = -60.0 – (-60.0 * (volume / 100.0)) を
     db_range = -6.6 – (-6.6 * (volume / 100.0)) に書き換え。
3.AIYでの日本語動作確認
 PulseAudioの初期値が未設定なので、/etc/pulse/default.pa を編集します。
 バックエンドドライバーをロードする行を探してアンコメント(#削除)し、
 以下のように device パラメータを追加してください。
 さらに autodetect モジュールをロードする行をコメントアウトしてください。
 load-module module-alsa-sink device=dmix
 load-module module-alsa-source device=dsnoop
 # load-module module-udev-detect
 # load-module module-detect
 再起動
 amixer sset Master 50%  (初期音量を変更したい)
 参照:https://kureuetan.com/web/raspberrypi/4998/#OS
 ~/bin/AIY-projects-shell.sh
 src/examples/voice/assistant_grpc_demo.py
 この後、GoogleAssistantアプリで、デバイスVoiceKitの言語選択を日本語に設定してください。
4.RasPi用Snowboyのインストール
 参照:https://github.com/wanleg/snowboyPi
4.1 事前準備
 sudo apt update && sudo apt -y upgrade && sudo apt-get -y auto-remove && sudo reboot
 OSのバージョンは、3月末で、次のようになります。
  Linux raspberrypi 4.14.30-v7+ #1102 SMP Mon Mar 26 16:45:49 BST 2018 armv7l GNU/Linux
 sudo apt -y install python-pyaudio python3-pyaudio sox python3-pip python-pip libatlas-base-dev
 sudo pip3 install pyaudio
 sudo cp ~/.asoundrc /root/
4.2 Snowboyの準備
 wget https://s3-us-west-2.amazonaws.com/snowboy/snowboy-releases/rpi-arm-raspbian-8.0-1.1.1.tar.bz2
tar xvf rpi-arm-raspbian-8.0-1.1.1.tar.bz2
mv rpi-arm-raspbian-8.0-1.1.1 snowboy
4.3 サウンドテスト
  speaker-test -c 2
  arecord -d 3 test.wav
  aplay test.wav
4.4 Hotwordの作成
 pip install requests
 cd snowboy
 wget https://github.com/wanleg/snowboyPi/raw/master/training_service.py
https://snowboy.kitt.ai にログインし、Profile settings をクリック、
 作成された API token をコピーしてメモする。
 training_service.pyの次のパラメタを設定する
 ############# MODIFY THE FOLLOWING #############
 token = “コピーしてメモしたAPI token”
 hotword_name = “ホットワードの名前”
 language = “jp”
 age_group = “30_39”
 gender = “M”
 microphone = “usb microphone”
 ############### END OF MODIFY ##################

 rec -r 16000 -c 1 -b 16 -e signed-integer 1.wav
 rec -r 16000 -c 1 -b 16 -e signed-integer 2.wav
 rec -r 16000 -c 1 -b 16 -e signed-integer 3.wav
 python training_service.py 1.wav 2.wav 3.wav NeGoogle.pmdl
 cp NeGoogle.pmdl resources/NeGoogle.pmdl
4.5 Hotwordのテスト
 python3 demo.py ~/snowboy/resources/NeGoogle.pmdl

 startAlexa.sh,assistant_grpc_snow_demo.pyのダウンロードと走行確認
 wget -O startAlexa.sh https://mori1-hakua.tokyo/test/startAlexa.txt
 wget -O _snowboydetect.so https://mori1-hakua.tokyo/test/_snowboydetect.so
 wget -O assistant_grpc_snow_demo.py https://mori1-hakua.tokyo/test/snow_demo.txt
 python3 assistant_grpc_snow_demo.py

5. Alexaのインストール
 参照:https://github.com/alexa/avs-device-sdk/wiki/Raspberry-Pi-Quick-Start-Guide-with-Script

cd
    wget https://raw.githubusercontent.com/alexa/avs-device-sdk/master/tools/Install/setup.sh
    wget https://raw.githubusercontent.com/alexa/avs-device-sdk/master/tools/Install/config.txt
    wget https://raw.githubusercontent.com/alexa/avs-device-sdk/master/tools/Install/pi.sh
    vi setup.sh で次の変更を実施
       en-US を ja-JP
    vi config.txtで次の設定を実施
       Client ID, Client Secret, and Product IDの設定
   vi avs-device-sdk/build/BuildDefaults.cmake で include(KeywordDetector) をコメント化
  
   sudo bash setup.sh config.txt
    sudo bash startauth.sh の起動後、http://localhost:3000をアクセス
    sudo cp ~/.asoundrc /root/
  sudo bash startsample.sh を実行し、c、1、6と入力して日本語モードにする

6. AlexaとGoogleAssistantの同時実行
  cd ~/snowboy
  python3 assistant_grpc_snow_demo.py NeGoogle.pmdl
  この他、
  python3 assistant_grpc_snow_demo.py snowboy.umdl も試せます。

カテゴリー: RaspberryPi, お知らせ | 4件のコメント

岩手日報webnews、大幅改装で追随大変!

//      $body = mb_convert_encoding ($response['body'],"utf-8","Shift_JIS");
      $body = $response['body'];
    }
    $pos = 10000;
    $table = ""; // mb_substr($body,$pos,$pos2-$pos);
	$pos = mb_strpos($body,$from,$pos);
	 if ($pos === false) { return($table.$body); }
	$pos2 = mb_strpos($body,$to,$pos+30);
	 if ($pos2 === false) print "<br>strpos2がfalseを返しました。<br>";
	if (substr($ton,0,1)=="+") {
		$pos2 += mb_strlen($to);
		if (strlen($ton)>1) $pos2 += substr($ton,1);
	}
	else $pos2 += $ton;
    $body1 = mb_substr($body,$pos,$pos2-$pos);
    if ($url=="") return ($body1);
    return (div_cut($body1));
}
function div_cut($str) {
    global $time;
	if ($str=="") return "";
	$pos = strpos($str,'<article>',0);
	if ($pos === false) return "";
	$pos2 = strpos($str,'<div class="outer">',$pos);
	if ($pos2 === false) return $str;
	$pos3 = strpos($str,'</h1>',$pos2);
	$time1 = substr($str,$pos3+24,19);
	if (strcmp($time,$time1)<0) $time = $time1;
	return str_replace("<a href=","<a target='_NEW' href=",substr($str,$pos,$pos2-$pos))."&nbsp;".
        substr($str,$pos2+36,$pos3-$pos2-36)."</a></article>".div_cut(substr($str,$pos3));  
// <div class="outer"><dl><dt><div><h1>

カテゴリー: お知らせ | コメントする

スマートスピーカー自作に挑戦!

FaceBookに投稿を始めている。
Amazon Alexa もRasPiで実現!

カテゴリー: RaspberryPi, お知らせ | 3件のコメント

メールでの投稿について

このWordPressへの投稿は、電子メール(写メ)でできます。
まず、あなたのメールIDを管理者に申請しておいてください。
投稿は、次のURLの説明通りですが、発信宛先を、
hakua.bukatsu+47hakua@gmail.com
とします。
投稿方法

よろしくお願いします。

カテゴリー: HELP | 1件のコメント

同期・黄川田議員お疲れ様でした

カテゴリー: お知らせ | コメントする

Micro:bitがやって来た

Facebookでの投稿へのリンクを、散逸しないように固めておく。

マイクロビットとは
MINTIAケースに入れてみた
ここまで出来た!

カテゴリー: Micro:bit | 1件のコメント