パワーポイントでノート部分のテキストを読み上げて自動的にスライド送りする

知り合いが「パワーポイントでノート部分のテキストを読み上げて自動的にスライド送りする」マクロ(VBA)を作成したいんだけど・・・うまくいかない。という相談にのりました。

1枚目のスライドには処理開始ボタンを配置する。

2枚目以降のスライドのノート部分には読み上げるテキストを記述。

1枚目の処理開始ボタンクリックで読み上げ+スライド送りを自動実行という仕様。

こんな感じで作成してみました。かなり適当です。

’ このサブがボタンクリック時にコールされるように実装してください。
Sub startSlide()
    Dim n           As Long
    sn = ActivePresentation.Slides.Count
    Debug.Print sn
    
    'ActivePresentation.SlideShowSettings.Run
    
    With ActivePresentation.SlideShowSettings
        .RangeType = ppShowSlideRange
        .StartingSlide = 2
        .Run
    End With
    
    ' 1枚目のスライドは開始ボタン用ページなので、2枚目のスライドから開始
    For p = 2 To sn
        'スライド表示と読み上げ開始が若干ずれるので、ウェイトをいれてます。。。
        lag = 2
        start = Timer        
        While Timer < start + lag
            DoEvents
        Wend
        Application.SlideShowWindows(1).View.Next        '次のページ
        n = Application.SlideShowWindows(1).View.CurrentShowPosition
        ret = readText(n)
        
    Next
    
    ' 終わったらスライド1から始まるように初期化
    With ActivePresentation.SlideShowSettings
        .RangeType = ppShowSlideRange
        .StartingSlide = 1
    End With
    
End Sub

’ ノートのテキストを読み上げるファンクション。win10ようなので、ご注意ください。
Function readText(n     As Long) As Boolean
    
    '' ノート欄の文字列を取得
    Dim strNote     As String
    strNote = ActivePresentation.Slides(n).NotesPage.Shapes.Placeholders(2).TextFrame.TextRange.Text
    
    'スライド表示と読み上げ開始が若干ずれるので、ウェイトをいれてます。。。
    lag = 2
    start = Timer
    While Timer < start + lag
        DoEvents
    Wend
    
    '' ノート欄が空の場合は,読み上げ処理を行わずに終了
    If strNote = "" Then
        read = FALSE
    End If
    
    '' 音声合成エンジンを取得
    Dim sv          As Object
    Set sv = CreateObject("SAPI.SpVoice")
    
    '' インストールされている音声合成エンジンのうち、最初に見つかった日本語のものを選択
    For i = 0 To sv.GetVoices.Count - 1
        If InStr(sv.GetVoices.Item(i).GetDescription, "Japanese") Then
            Set sv.Voice = sv.GetVoices.Item(i)
            Exit For
        End If
    Next
    '' 日本語のエンジンが見つからなかった場合
    If InStr(sv.Voice.GetDescription, "Japanese") < 1 Then
        '' 発見に失敗した旨をメッセージボックスで通知
        MsgBox "日本語のエンジンが見つかりませんでした。" &amp; vbCrLf &amp; _
        "現在の設定 : " &amp; sv.Voice.GetDescription
        read = FALSE
    End If
    
    '' 音声合成実行
    sv.Speak strNote
    
    '' 音声合成エンジンを開放
    Set sv = Nothing
    
    read = TRUE
    
End Function


ssh経由でjconsoleを利用する

tomcatの起動オプションに以下のパラメータを追加する。setenv.shを設定しているなら、以下のように記載するとオッケー

# setenv.shに追加
# JMX
CATALINA_OPTS="$CATALINA_OPTS -Djava.rmi.server.hostname=localhost "
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote "
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote=true "
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.port=8686 "
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.rmi.port=8686 "
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.authenticate=false "
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.ssl=false "
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.local.only=false "

次にクライアントからjconsoleでつなぐために、sshのポートフォワーディングを立ち上げる

# この場合は7777のポートで待ち受けしてmyoreserverにアクセスするということになります。
$ ssh -fND 7777 oreore@myoreserver

そして、jconsoleを以下のコマンド、パラメータで起動する。

$ jconsole -J-DsocksProxyHost=localhost -J-DsocksProxyPort=7777 service:jmx:rmi:///jndi/rmi://127.0.0.1:8686/jmxrmi -J-DsocksNonProxyHosts=
#JDK 8u60 +からは-J-DsocksNonProxyHosts=オプションを使用

これでJVMの状態が知覚的にバッチリ確認できます!!

自宅でマインクラフトサーバを立ち上げる!

マイクラやってみたい!ということでサーバを立ち上げてみました。

サーバのセットアップ環境は以下の通り
OS:Ubuntu 18.04.4 LTS
JDK:openjdk version “11.0.6”


まず、マインクラフトサーバ本体を入手します。
https://www.minecraft.net/ja-jp/download/server/ から minecraft_server.1.15.2.jar をダウンロードします。ダウンロード直後はserver.jarであるため、minecraft_server.1.15.2.jarにリネームします。

server.propertiesのonline-modeをfalseをしないと本家のアカウント認証に接続してしまうので、修正しておきます。

https://minecraft-ja.gamepedia.com/チュートリアル/サーバーのセットアップ
を参考にセットアップします。私はminecraftというユーザを作成し、/home/minecraft/minecraft_serverディレクトリにサーバ関連のファイルを配置しました。

サービスとして起動できるように、起動シェルとユニットファイルを作成し、サービスとして起動します。

# cat /home/minecraft/minecraft_server/mcStartup.sh
#!/bin/bash
/usr/bin/java -Xmx1024M -Xms1024M -jar /home/minecraft/minecraft_server/minecraft_server.1.15.2.jar nogui
# cat minecraft_server.service
[Unit]
Description=Minecraft Server
After=network-online.target

[Service]
ExecStart=/bin/bash /home/minecraft/minecraft_server/mcStartup.sh
WorkingDirectory=/home/minecraft/minecraft_server
Restart=always
User=minecraft
Group=minecraft

[Install]
WantedBy=multi-user.target

サーバができたところで、マイクラのクライアントを入手し、ランチャー(https://mc-launcher.com/ や https://mcleaks.net/authenticator)も用意します。

ランチャーからマイクラを起動します。
マイクラランチャーマイクラクライアント
マルチプレイを選択し、起動しているサーバをクリック!

動きました!

com.apple.warmdを無効にするよ!

ぼくのmacはSSDを利用していないので、com.apple.warmdを無効にするよ!

まず、command+Rで起動します。

その後、レスキュー画面が表示されるので、メニューバーからコンソールを起動します。

コンソールで、
csrutil disable
とします。これで、SIP(System Integrity Protection)が無効化されます。
その後、再起動します。

再起動後、
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.warmd.plist
と打って、com.apple.warmdを無効にします。

もう一度、再起動して、warmdというプロセスが存在しなければ、無効化完了です。
再度、command+Rで起動で起動し、
csrutil enable
でSIP(System Integrity Protection)を有効にしておきましょう。

めでたし、めでたし。

Ubuntu16.04LTSにClamAV0.102.1を入れてon access scanning も有効にする

なかなかon access scanning が有効にならず手こずりました。

1.インストールする
sudo apt install clamav clamav-daemon

2./etc/clamav/clamd.conf を修正
ClamAV0.102.1になってから、ScanOnAccess trueというオプションは無効になっているようです。https://www.clamav.net/documents/on-access-scanning
以下を追加します。

OnAccessIncludePath /home/user/Downloads
OnAccessExcludeUname clamav ## versions >= 0.102
OnAccessPrevention yes
OnAccessDisableDDD yes

3. サービスを起動
sudo systemctl enable clamav-freshclam
sudo systemctl enable clamav-daemon
sudo systemctl start clamav-freshclam
sudo systemctl start clamav-daemon

でさらに
sudo clamonacc
しないと、on access scanning が有効になりません。マシンの自動起動時にsudo clamonaccが動くように設定しておきましょう。

稼働中のwin7をまるごとVirtualBoxに移行する

稼働中のwindows7をまるごとVirtualBoxに移行できないものかとググってみると、方法があったので、実践してみました。

1.Disk2vhdをダウンロードする。
これは、現在稼働中のOSをvhd形式に変換するツールでMSからDLできました。
http://download.sysinternals.com/files/disk2vhd.zip

2.vhdに変換する
disk2vhd.zipを展開後、exeを実行します。下記の画面が表示されますが、VirtualBoxで利用するため、useVhdxのチェックは外してCreateボタンを押します。

3.MacOS上のVirtualBoxに持ってきて起動してみる。
できたvhdファイルが起動できるか、MacOS上のVirtualBoxに置いて起動してみます。

普通に起動できました!

Apache Cordova環境を作成する

isoのプロトタイプアプリを作成するために、macにcordova環境を作成します。

利用環境は以下の通り
– MacOS Mojave(10.14.5)
– Node.js(10.16.0)
– Xcode(10.2.1)

Node.jsのインストール
ここからNode.jsダウンロードし、インストールします。

Xcodeのインストール
AppStoreから「Xcode」を検索し、インストールします。

Cordovaのインストール
Node.jsのnpmを用いて、Cordovaをインストールします。
「ターミナル」から以下のコマンドを実行します。
$ sudo npm install -g cordova
インストールが完了したら、バージョンを確認してみます。
$ cordova -v
9.0.0 (cordova-lib@9.0.1)

Cordovaプロジェクトの作成
Cordovaのプロジェクトを作成します。
私は/Users/[ユーザー名]/Documents/srcフォルダ内に作成します。
srcフォルダ移動後、以下のコマンドを実行します。
# cordova create ディレクトリー 識別子 アプリ名
$ cordova create SampleCordova com.example.SampleCordova SampleCordova
これでSampleCordovaのプロジェクトを作成しました。

プロジェクトフォルダに移動します。
$ cd SampleCordova

プラットフォームの追加
SampleCordovaで使用するプラットフォーム(iOSやAndroid、WindowsPhoneなど)を追加します。ここではiOSのみを追加します。
$ cordova platform add ios

利用するプラグイン等々を追加します。
$ cordova plugin add cordova-plugin-add-swift-support --save
$ cordova plugin add cordova-plugin-qrscanner
$ cordova plugin add cordova-plugin-inappbrowser
$ cordova plugin add cordova-plugin-dialogs

iOS Simulatorのインストール
実行させるためのSimulatorをインストールします
$ sudo npm install -g ios-sim

プロジェクトのビルド
Simulatorで実行できるようにプロジェクトのビルドをします。
$ cordova build

Simulatorの実行
Simulatorを実行します。
$ cordova emulate ios
Simulatorが起動し、Cordovaのアプリが表示されます。

Xcodeプロジェクト
プラットフォームにiOSを追加するとXcodeのプロジェクトファイルが生成されます。/Users/[ユーザー名]/Documents/src/SampleCordova/platforms/iosのフォルダに格納されているため、Xcodeを用いてビルド、Simulatorの起動等も行えます。

ですが、Xcode10.2.1ではSwift3以前がサポートされていないようで、Cordovaで生成したソースがビルドできません。そのため、プロジェクトフォルダにあるconfig.xmlやXcodeのビルド設定を見直します。
/Users/[ユーザー名]/Documents/src/SampleCordova/config.xml
<platform name=”ios”>記載部分に以下のように追加します。

<platform name="ios">
    <allow-intent href="itms:*" />
    <allow-intent href="itms-apps:*" />
    <preference name="UseLegacySwiftLanguageVersion" value="true" />
    <preference name="UseSwiftLanguageVersion" value="5" />
</platform>

次に、Xcodeのビルド設定を見直します。/Users/[ユーザー名]/Documents/src/SampleCordova/platforms/ios/SampleCordova.xcodeprojをクリックしてXcodeを起動します。そのあと、プロジェクトを選択し、TARGETS -> Build Settings -> Swift Compiler -> Swift Language Version を 4.2に変更します。

あとは、Xcodeからビルドし、エミュレータ実行が可能になります。

htmlページ内の利用していないclassを抽出する!

クラスを抽出!

今回、html内で利用していないclassを探して、htmlをキレイにする企画があり、大量の膨大なhtmlをチェックする為、shellでチェック処理を作成してみました。

#!/bin/bash

outputFile="./notUsedClassName.result"

echo "" > ${outputFile}

for file in `\find . -name "*.html" -type f`; do
    # TODO
    echo "[${file}]" >> ${outputFile}
    pathName=$(dirname ${file})

    # そのページで読み込んでいるclassを抽出
    classArray=($(egrep -o -i -h "class=\".*?\"" "${file}" | sed -e 's/[^"]*"\([^"]*\)".*/\1/' | sort | uniq | tr '\n' ' '))
    delClassArray=${classArray[@]}
    echo "class -> [${delClassArray[@]}]" >> ${outputFile}

    # そのページで読み込んでいるCSSを抽出
    cssFileArray=($(egrep -o -i -h "href=\".*?\.css\"" "${file}" | sed -e 's/[^"]*"\([^"]*\)".*/\1/' | tr '\n' ' '))

    for i in ${classArray[@]}
    do
      classUsed=0

      for j in ${cssFileArray[@]}
      do

        if [[ ${j} =~ ^/ ]]; then
          tmp=.${j}
        else
          tmp=${pathName}/${j}
        fi

        echo "${j} ${i} ${tmp}"

        dummy=$(grep -o -i ${i} ${tmp})
        ret=$?

        echo ${i} ${j} ${ret}

        if [ ${ret} = 0 ]; then
          classUsed=1
          break
        fi

      done
      if [ ${classUsed} = 0 ]; then
        echo "class not used ${i}" >> ${outputFile}
      fi
    done


done

結果後にhtmlの置換などの処理を入れたげれば、一括置換処理にも利用できるかと思います。ご自由にご利用ください。