TeamViewer for Raspberry Pi

この記事は次のブログに引っ越しました。

Raspbian8.0(Jessie)で動作する公式のTeamViewer ■公式 TeamViewer for Raspberry Piのダウンロード https://pages.teamviewer.com/published/raspberrypi/debファイルのインストール・コマンド pi@raspberrypi:~ $ sudo dpkg -i teamviewer-host_armhf.deb 遠隔操作のアプリではダントツの使いやすさを誇るTeamViewer。ルータの設定でポートなどを空ける必要もなく、MacOSWindowsLinuxAndroidiOSiPadiPhone)と環境を選ばないため遠隔でサーバーやパソコンのメンテナンスを行うのにも重宝します。 お客様先へ技術サポートのために遠隔ツールを導入(インストール)する際に、「知らぬ間に覗かれるのではないか」と、仕組みがよくわからず導入を懸念される方でも、基本的にワンタイム・パスワード制なため導入しやすく、かつ使いやすい大変すぐれたアプリです。 個人利用の場合は無料ですが、会社で導入する価値は十分にあり、チャット・音声通話・ホワイトボード・録画機能など機能が多い割には安いと思います。 さて、RaspberryPiを設置して遠隔でメンテナンスを行いたいという場合、さまざまな方法があります。しかし、ラズパイの設置先が自宅でない場合ポートを勝手にあけられなかったり、あれこれとアプリケーションを入れないといけなかったりと知識も必要なため、勉強にはなりますがRaspberryPi(LINUX)を始めたばかりの方にはハードルが高い可能性もあります。 Linux版TeamViewerもありますがIntel入ってる系が前提でARM対応のものを探さないといけないなど、やはり公式にRaspbianOS対応しているTeamViewerをダウンロードして入れるのがいいと思います。(日本語サイトでは対応が遅く、検索しても出てきません) 注意点 注意というより、まだ始まったばかりなためRasPi版TeamViewerはVPN接続に対応していません。 E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the probrem. 上記エラーが出た場合は、下記コマンドで最適化してみてください。 pi@raspberrypi:~ $ sudo dpkg --configure -a

Wordpressで”_wp_scripts_maybe_doing_it_wrong”エラー

この記事は次のブログに引っ越しました。

WPで"Fatal error: Call to undefined function _wp_scripts_maybe_doing_it_wrong() in..."エラーが発生する ■エラー内容 Fatal error: Call to undefined function _wp_scripts_maybe_doing_it_wrong() in /home/xxxx/wordpress/wp-includes/functions.wp-styles.php on line 154 Wordpressファイルの転送に失敗しているか、ファイルが壊れています。 "wp-config.php"ファイルと"wp-content"フォルダをバックアップして、Wordpressを再ダウンロード&転送後、バックアップをもとに戻してください。 ■所感 最近体調を崩して休んでいる中、原点回帰の電子ブロックを頻繁に思い出していて、外にも出れないのでアマゾンで買い物をした勢いでRaspberryPiを買いました。 Pythonの勉強も始めて色々触っていたらラズパイは色々な用途に使えることがわかったので、持ち運べるサーバやIoTを考えてもWebベースの環境は入れないと、でもWeb関係ならPHPの方が慣れているしWordpressも入れちゃえ、DBもローカルで使うだけなので同じく慣れているSQLiteで動かしちゃえ、という。 そのため、Debian,OSX,Windowsを触る頻度が1:1:1になってきたのですが、WindowsFFFTP+さくらエディタの組み合わせに匹敵するMac環境を模索していました。 最終的にmacOS X sierraでも動く、FTPSSH・ターミナル・MySQL管理などが1つで出来るテキスト・エディタの"Coda2"にたどり着き、大変便利。9,800円と、ちょっと高めだけど有料なだけあって購入してよかったと思う。 ただ、Coda2の場合、ファイルやフォルダを転送(ドラッグ&ドロップ)すると終了するまで裏で動いていて進捗がわからない。せっかちなアチキは、ついつい他の作業を行ってしまうので転送に失敗したもよう。

PHPでRaspberryPiをリブートする

この記事は次のブログに引っ越しました。

PHPでRaspberryPi3 B+を再起動する <?php $bReboot = ($_GET['reboot'] == 'yes' ) ? true : false; if( $bReboot ){ print( "Now rebooting..." ); exec( 'sudo reboot now', $result ); print_r( $result ); } else { print( "Not rebooting" ); } ※再起動できずにエラーが出る場合、実行スクリプトのアクセス権に問題がある可能性があります。 ■所感 自宅のRaspberryPiに、GrovePiを使って温度や湿度を測ってtwitterなどに呟けるようになったり、YoutubeLiveのストリーミングなどは出来るようになったのですが、PureDataAsteriskなど色々遊ぶうちに長時間放置しておくとSSHでログインできなくなるようになりました。 厳密に言うと、SSHでログインは出来る(パスワードが通るところまでは出来る)のですが、その後の入力コンソールの表示待ちになってしまいます。 TeamViewer for Raspbianも入れているのですが、そちらからもパスワードが通ってから画面が出る前のタイミングで固まってしまいます。 どちらの方法も、再起動するとログイン出来て普通に使えるので、遊んでいるうちの何かがオーバーフローしているのかもしれません。 以前のRaspbianで、モニタを外していると省エネモードに入ってしまいWiFiが使えなくなる現象はあったみたいですが、ログインできない状態でもWiFi経由でApache(httpサーバー)が動いているのを確認できているので、これが原因ではないと思われます。 OSを入れ直すのが早いのかもしれませんが、ちょっと面倒なのと、今後YoutubeLiveのストリーミング機や土壌センサーによる水撒きとか、ガイガーカウンター値を呟くとか、色々やってみたい際に、外部から困った時の再起動を行うこともあるんだよなぁと思った次第です。 余談ですが、温度・湿度・放射能値などの気象観測で得た数値を発表する場合、とくに災害防止などのために測定したものは気象業務法第6条に触れるため、気象庁に届け出をしないといけないそうです。届けても認可が降りるのは認定済みの(高い)機器で測定したものに限るらい。災害防止目的以外でも、農業や施設内利用といった免除対象以外は公開するのに届けが必要で、測定結果に対しての文字情報ならOKで、数値だけの発表はNGらしいです。 閑話休題。さて、プログラム的には上記がベースになっているのですが、具体的な仕組みとして、 外部にあるサーバー(Lolipop)に再起動を促すフラグを記載したjsonファイルを置く(PHPjsonデータを返しても良い) RaspberryPiからcronで定期的に(1)をチェックしにいく フラグが立っていたらフラグを下ろすリクエストを(1)の外部サーバに送る(フラグを下ろすURLにアクセスする) 外部サーバはフラグが降りたら、その結果をjson形式で返す 無事フラグが降りたのを確認したら、RaspberryPiは再起動を行う 以下はそのサンプルの一部です。 <?php $host = "http://yourHostServer.com/"; $check = "checkRebootStatus.php"; //再起動フラグを確認 $reset = "checkRebootStatus.php?flag=off"; //再起動フラグを下ろす。下ろした結果がjsonで返ってくる。 $reboot = "checkRebootStatus.php?flag=on"; //再起動フラグを立てる。 $aResult = json_decode( file_get_contents( $host . $check ), true ); if( $aResult['reboot'] ){ $sUrl = $host . $reset; $aResult = json_decode( file_get_contents( $sUrl ), true ); if ( $aResult['reboot'] ){ echo "Can not reset reboot flag at : {$sUrl}"; } else { echo "Now rebooting..."; exec( 'sudo reboot now', $result ); //exec( 'python ./reboot.py 2>&1', $result ); Print_r( $result ); } } else { //フラグが立っていない場合、その旨とフラグを立てるリンクを表示。 echo "<p>no change</p>"; echo "<p><a href='{$host}{$reboot}'>Turn on reboot flag.</a></p>"; echo "<p>Go to the link above and comeback to this page.</p>"; }

PureDataでprependオブジェクトが作れない

この記事は次のブログに引っ越しました。

PureData(Pd)でprependオブジェクトを作成すると点線枠のままで作成できない "prepend"オブジェクトは、PD-extendedに含まれるオブジェクトです。(オブジェクト一覧) PureData(Pd)で、空オブジェクトを置いてprintオブジェクトにすることはできるのに、prependオブジェクトにしようとすると入力端子や出力端子が表示されず点線枠のままで、コンソールに"... couldn't create"エラーが表示される場合、バニラのままである可能性があります。 Pd-extendedを探して利用するか、バニラのPd 0.47.0から利用可能になったdekenを使って必要なものだけ拡張します。 PureData Vanillaを拡張する Pd-extendedは、PureDataに予めよく使うパッケージを組み込んだ拡張版で、PureDataチュートリアルや参考書などはPd-extendedを前提に説明されているものが多いのですが、Pd-extendedは2013年以降メンテナンスが長いことされておらず、放置されすぎということで本家(puredata.info)ではダウンロードできなくなりました。 SourceForgeからはPd-extendedもダウンロードできますが、バージョンが0.43.4とバージョンだけでなくインターフェースも古くMacOSのバージョンによっては起動しなかったり不安定になったりするため、おすすめしません。(私のmacOS 10.12 Sierra環境では起動したらすぐに落ちてしまいました。別途入れているWineが原因かもしれませんが。PureData Vanilla 0.47.1は起動します。) 上記の理由からPd-extendedを使う代わりに、Pd Vanilla 0.47.0から"deken"という、プラグイン・プログラム(任意のPdのライブラリ(externals)を選択して追加・管理できるプログラム)が利用可能になりました。 PureDataの"Help"から"Find externals"を選んで使いたいパッケージやライブラリを検索し、一番色が濃い(グレーアウトしていない)項目を選択後、再起動すると使えるようになります。(libdir,Gem,cyclone)timeオブジェクトはzexyライブラリ 詳しくは、下記参考リンクを参照してください。 dekenを使ってインストールしたライブラリやパッケージによっては、PureDataの設定(Preferences)の"Startup..."で起動時に読み込むライブラリを追加する必要がります。("New..."でパッケージ名を追加) 参考:http://puredatajapan.info/?p=2073 参考:http://puredatajapan.info/?p=2062 オブジェクトライブラリ timezexy invertmarkex 参考: http://blog.joehahn.ws/list-puredata-objects-and-extended-objects

Youtube再生リストのiframe埋め込みのURLをjQueryで取得する

この記事は次のブログに引っ越しました。

Youtubeの埋め込みプレイリストのiframe内の動画URLをjQueryで取得する(Youtube JavaScript APIYoutubeでは作成した再生リスト(プレイリスト)を自分のWebサイトに埋め込めるようにできるのですが、現在どの動画が再生されているのかを調べたい事があると思います。 例えば、お店やイベント会場などで再生リストをプレイしながら動画に合わせた情報を表示したい場合などです。色々な方法があると思いますが、Youtubeのiframe内のURLを取得する方法として本記事を参考にしてもらえればと思います。 一般的には(特にモダンブラウザでは)frameやiframe内に別ドメインのページを表示している場合、 親ページから子ページ(iframe内)のURLを取得することはできません。 ■jQueryで別ドメインへの参照を行った場合のエラー Uncaught DOMException: Failed to read the 'contentDocument' property from 'HTMLIFrameElement': Blocked a frame with origin "http://yourdomain.com" from accessing a cross-origin frame これは、Same-Origin Policyのセキュリティ制限によるもので、実際に参照すると上記のようなブラウザのエラーを確認できると思いますが、iframe内の子ページ側で関数を用意してあげれば可能になり、YouTubeAPIでは専用の関数(メソッド)が用意されています。 ■主なポイント YouTube IFrame APIを使ってYT.PlayerオブジェクトのgetVideoUrl()メソッドを使って、対象のプレーヤーで動画のURLを取得する 下記の34行目に作成した再生リストのID(再生リストを再生した際のURLクエリ内にある"list="の値)を書き換えるだけで、動作するサンプルです。 再生を続けてリストの次の動画が再生されると、URLや動画ID欄も更新されるのを確認してください。 この動画IDをもとに、動画に関する情報や紐付けた情報を表示する事ができます。

Amazonのチェックアウト・ワークフローとは

この記事は次のブログに引っ越しました。

Amazon ログイン& ペイメント インテグレーションガイドにあるチェックアウトとは アマゾン・ペイメントを導入しようと、提供された導入ガイドを読んでみると大変わかりにくい。その原因となっている1つは、使用する用語が古いものと新しいものを混在して記載していることです。その最たる用語が「チェックアウト」です。 選択したインテグレーションボタンのオプションに応じて、購入者はセラーのサイトでチェックアウトプロセスを開始する前、開始中、または開始した後に認証できます。 購入者が住所と支払いをそれぞれのウィジェットから選択したことを確認するまで、チェックアウトワークフローを無効にすることをお勧めします。 上記のような記載があるのですが、ガイドを1つ1つこなしていくと「ん?ん?」となってしまいます。 これは「チェックアウト」とは何かの説明もないまま話が進んでしまうからです。 プログラマからしてみると、バージョン管理システムなどで使われるチェックアウト的な何かと思ってしまうわけですが、どうにもピンとこない。 チェックアウトとは 結局、米アマゾンのサイトに行って探してみたところ、「チェックアウト」とは"CBA"(Checkout by Amazon)と呼ばれる2017年4月1日に廃止予定の「Amazonログイン&ペイメントの前出のサービス」由来の用語でした。 「チェックアウト」はホテルを出る時のチェックアウトと考えるとわかりやすいと思います。つまりAmazon決済で(ホテルを)チェックアウトして精算するイメージです。「お会計お願いします」を英語言うと"Check(out) please."というのとも同じです。ここはプログラム用語のチェックアウトが理解の邪魔をしていたところでした。 しかし、ネーミングの分かりづらさ、対応する国を増やす際の決済に関する法務的な理由、より汎用的な導入(インテグレーション)方法の採用と言った理由などから、名前を変え別のサービスとして再スタートさせたものが「Amazon ログイン&ペイメント」のようです。 どちらも「販売している物理的・電子的商品をAmazonアカウントでの決済手段」と、サービス内容は同じなのですが提供機能は別であるためセラー(出品者)はアカウントを別途セラー・セントラルよりアマゾン・ペイメントのサービスに登録しないといけません。 つまり、完全に仕切り直しなサービスなわけですが、提供されるガイドは「アマゾン・チェックアウト」から「アマゾン・ペイメント」への移行ガイドをベースにしているためか、新規に始める人には「??」となるわけです。 基本的にはガイドの随所で言われる「チェックアウト」を「Amazonペイメント決済」と読み替えると若干わかりやすくなります。 前述の表記を自分なりに噛み砕いて書いてみると以下のようになるのですが、いかがでしょう。 選択したインテグレーションボタンのオプションに応じて、購入者はセラーのサイトでチェックアウトプロセスを開始する前、開始中、または開始した後に認証できます。 ↓ 導入(インテグレーション)を行う際に、指定したボタンのオプションに応じてAmazonにログインする認証のタイミングを決められます。ログインのタイミングは、購入者がセラー(出品者)のサイトでAmazonペイメントによる決済を開始する前、開始中、開始した後の3パターンで認証を行わせることができます。 購入者が住所と支払いをそれぞれのウィジェットから選択したことを確認するまで、チェックアウトワークフローを無効にすることをお勧めします。 ↓ 購入者が住所と支払いをそれぞれのウィジェットから選択したことを確認するまで、Amazonペイメントの決済手順を行わないことをお勧めします。 ちなみに、インテグレーション・ガイドに記載されているプログラムも間違いが多く、プログラムをよくわからない人が翻訳やチェックを行っていると感じました。(クラスからオブジェクトを作成する際に"new"がないなど) GoogleAPIもしかりですが、APIを提供する側はもう少しユーザー・フレンドリーになれないものでしょうか。確かに英語がわかる方がいいとは思うのですが、それはマニュアル人間うんぬんとは別の話だと思います。