2024年1月23日火曜日

miniDV、DV、HDVテープから無料で取り込める(キャプチャー)ソフト

2024年1月21日時点の情報です。

もはや i-Link (IEEE1394、FireWire)を繋げられる環境、そしてまともに動作するビデオカメラが有ること自体希少かと思いますが、そこに加えてカムコーダーから DV をキャプチャーできるソフトも軒並み消えていっています。

このページでは執筆時点で無料で利用できたソフトを紹介します。

PowerDirector 364 無料体験版

しょっぱなから胡散臭くなりましたがw
実は mpeg 取り込みだけなら PowerDirector 364 の無料体験版で可能です。
もちろん mpeg 取り込みだけならウォーターマークや制限などはありません。

キャプチャー方法が少しわかりにくいので解説します。(ドキュメントにも書かれてない感じだし……)

まず、メディア画面の「録画/録音」ボタンを押し、出てきたメニューから「Web カメラから録画」を選択します。(一見間違っているようですがこれが正解ですw)

すると各種デバイスからの取り込み画面が開くので「DV カムコーダーからの取り込み」または「HDV カムコーダーからの取り込み」のボタンを選択してください。(あ、もちろんカメラがすでに接続されて電源ONである必要があります)

あとはまぁなんとなくやり方は分かるかと思いますので頑張ってください(酷)

2024年1月21日日曜日

磁気浮上:ネオジム磁石を回転させるだけで擬似ピン止め効果

まずはこちらの動画をご覧ください

回転するネオジム磁石に、別のネオジム磁石を近づけるとピン止め効果のように保持させることができるようです。

用意するもの

ほとんど100均(DAISO)で入手できます。
  • ネオジム磁石
    • フローター(浮く側)用の磁石
      • 例:100均のネオジム磁石:サイズ:直径0.6×0.3cm
    • ローター(回転する側)用の磁石
      • 例:0.6cm×0.6cm×0.6cm
  • ルーター(ハンドグラインダー・リューターとも言う)
  • DCモーター
    • 100均の電動字消しを分解して用意した
      • 他にも100均のおもちゃやカプチーノミキサーやハンドミキサーなどからも取れると思う。
  • セロハンテープ

やり方

  • ハンドグラインダー(リューター・ルーターとも言う)にネオジム磁石を取り付けて回転させる方法が一般的。
  • ローター(回転する側の磁石)の向きが重要。
  • フローター(浮く側の磁石)はN極側が保持される。S極側では遠のくだけ。回転方向によるのだろうか?
    • ローター側をほんのわずかに傾斜させることが重要だった。
      • 傾斜していないと保持できず、傾斜させすぎると弾いてしまう。回転数に合った角度があるのかも。
      • 傾斜させた結果、フローター側に近い極によって保持される側の極が決まると思われる。
  • フローターをアルミの上に置くと、過電流により振動が軽減され保持されやすくなる。

参考

2021年12月4日土曜日

OracleCloud に Node-RED をインスールして無料で使い倒す方法

OracleCloud の太っ腹すぎる Always Free Cloud Services(期間の制限なく使用できるサービス)で構築した VM へ Node-RED をインストールする方法です。

さも自分で考えたかのような書き出しですが、ほとんど公式ブログの手順に沿って作業しただけです🤤

Installing Node-RED In An Always Free VM On Oracle Cloud (えいご)

2019年の記事なので、今(2021年)とは少し異なる部分もありますがやることは同じです。

そのため基本的には、指示通り設定すれば OK なのですが、私が実際にやってみて、気がついた点がいくつかあるので、ここにメモしておきます。

あと、ついでに HTTPS 化ポート転送もやります。

ちゃんと Oracle Linux を選びましょう。

ついつい見知った Ubuntu を使いたくなるかもしれませんが、指示通り(?)Oracle Linux を選択しましょう。

もし Ubuntu を選択した場合、以降の手順が色々と変わってきてしまいます。
もし Ubuntu でないと残尿感があるという方は、Ubuntu で構築した方もいらっしゃるようなので、そちらを参考にしてください↓

NODE-REDをORACLEの無料VPSサービスで使う

インストールスクリプトの違いに注意!

Oracle Linux に Node-RED をインストールする際に使用するインストールスクリプトは、Ubuntu や Raspberry Pi OS(旧 Raspbian)へインストールする際に利用するインストールスクリプトとは、パスが違う点に注意してください。

ブログの指示通りに、

bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/rpm/update-nodejs-and-nodered)

を使用しましょう。

一見、Debian 系と同じに見えますが、微妙にパスが異なります
Oracle Linux は Red Hat ベースなので、Debian 系のインストールスクリプトは使えません。

インストールスクリプトについては公式の「Linux Installers for Node-RED」をご覧ください。
あと公式の「ローカルでNode-REDを実行する」も見たらいいかも。

もし外部から繋がらなかったらポート設定してみて。

これはもしかしたらやらなくても良い手順なのかもしれないのですが、指示には書いてないのに私はうっかりやっちゃったので、一応書いておきます。

なお、Oracle Linux 7では、デフォルトのファイアウォール・ユーティリティは firewalld (firewall-cmd)です。(参考:Oracle® Linux 7セキュリティ・ガイド
iptables では無いので注意!

VM インスタンスに対して、

sudo firewall-cmd --permanent --add-port=1880/tcp

した後、

sudo firewall-cmd --reload

して、ポート 1880 を有効にしました。

このドキュメント「Free Tier: Install Node Express on an Oracle Linux Instance」の「4. Create a Node Express Application + Install and Set up Node Express」を参考にしました。

てか、https 化する手順でも 80 番に対して同じようなことしてるので、やっぱ必要な手順だと思う。

リンクされている https 化の手順は古い

このページね。

Free SSL Certificates In The Oracle Cloud Using CertBot And Let's Encrypt

certbot-auto はもうサポートされていません。

ポート 80 番を開放する方法以外は参考にしていない。

は?んじゃどーすんのさ。

私が勘で行った方法でよければどうぞ↓

Oracle Linux で動いている Node-RED の HTTPS 化手順

※ そもそもドメイン側の設定は別途済ませておきます。
※ Certbot で Let's Encrypt から証明書を発行してもらう想定です。

まず snap をインストールします。
参考にしたのはこちらのページ「Installing snap on Red Hat Enterprise Linux (RHEL)

sudo rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

sudo yum update

なんか指示が出たので、それに従って再度 update

sudo yum update --skip-broken

何度か確認させられるけど、Complete! した。

sudo yum install snapd

インストールできた。

sudo systemctl enable --now snapd.socket

sudo ln -s /var/lib/snapd/snap /snap

必要なのか分からないけどページの指示に従いやった。
そして再起動。

ここからは、Certbot の設定。

参考にしたのは「Web Hosting Product on CentOS 7」の組み合わせ。

sudo snap install core; sudo snap refresh core

コアなんて無いとかエラー出る。まぁ無視して次。

sudo snap install --classic certbot

インストールできた。

sudo ln -s /snap/bin/certbot /usr/bin/certbot

必要ない気もしたけど指示に従ってやった。

sudo certbot certonly --standalone

メールアドレス入力、利用規約に同意、メール送っていいかの確認、ドメインの入力をやった。

sudo certbot renew --dry-run

テストも成功した。

ここからは Node-RED の設定。

いつもの、

~/.node-red/settings.js

を編集します。
具体的な方法は「セキュリティ」のページを参照。

/** Option 1: static object */
https: {
  key: require("fs").readFileSync('/etc/letsencrypt/live/[ドメイン]/privkey.pem'),
  cert: require("fs").readFileSync('/etc/letsencrypt/live/[ドメイン]/cert.pem')
},

の項目のコメントを外して、秘密鍵と証明書へのパスを入力して有効にします。

[2024年4月8日追記:ここから]cert.pem (サーバー証明書のみ)では証明書チェーン(認証パス)が不完全なのでルート証明書、中間CA証明書、サーバー証明書が全部含まれている fullchain.pem を指定するほうが確実です。
例えば私の場合、cert.pem では Android 11 以降の端末から WebSocket 通信ができないなどの問題が発生しましたが fullchain.pem に変更することで解決することができました。[2024年4月8日追記:ここまで]

ただし、

/etc/letsencrypt/live/
/etc/letsencrypt/archive/

のパーミッションは、0700 になっていて Node-RED が読めません。
なので、

sudo chmod 0755 /etc/letsencrypt/live/

sudo chmod 0755 /etc/letsencrypt/archive/

して、さらに所有グループも自分(opc)に変更して↓

sudo chgrp opc /etc/letsencrypt/live/[ドメイン]/privkey.pem /etc/letsencrypt/live/[ドメイン]/cert.pem

Node-RED が読めるようにする必要があります。

以上でサーバーを再起動すれば、HTTP 化も完了です。

おしまい🤤

[2021年12月6日追記]

ポート 443(HTTPS)から 1880 へ転送したい

「https://ドメイン:1880/」ではなく「https://ドメイン」でアクセスしたいんじゃ!という場合の手順です。

まず今までの手順同様、ポートの設定をおこないます。

次に、firewalld で 443 へのアクセスを 1880 へ転送するようにします。

sudo firewall-cmd --permanent --add-forward-port=port=443:proto=tcp:toport=1880

そしたらリロードします。

sudo firewall-cmd --reload

これで :1880 なしでもアクセスできるようになります👍

めでたしめでたし🤤

2020年7月19日日曜日

Node-RED での CORS 対応まとめ(IBM Cloud版も対応)

CORS とはブラウザに「No 'Access-Control-Allow-Origin' header」とか言われちゃうアレです。
まず普通に GET とか multipart/form-data での POST なら

msg.headers = {};
msg.headers["Access-Control-Allow-Origin"] ="*";

って function ノードに書いてレスポンスすれば OK!👍

でも、application/json を POST したいんじゃ!ってなるとプリフライトリクエストが発生して、上記だけでは「No 'Access-Control-Allow-Origin' header」って言われちゃいます。
しかも、Node-RED 上ではリクエストが来ているのかも確認できません。

この場合は POST のレスポンスに Access-Control-Allow-Origin を付与するのではなく、POST の前に発生する OPTIONS メソッドに対して Access-Control-Allow-Origin を付与させる必要があります。

でも、Node-RED の HTTP in ノードには OPTIONS はありません。
なのでエディター上ではリクエストが確認できません。

これに対応するには、Node-RED の設定ファイル(setting.js)を修正する必要があります。
ちなみに、Node-RED IBM Cloud Starter Application の場合は、bluemix-setting.js です。

そのファイル内にコメントアウトされている httpNodeCors という記述があるので、それをコメント解除します。
IBM Cloud で bluemix-setting.js の場合はそもそも記述がないので、

var settings = module.exports = {…(略)…}
の中に

httpNodeCors:{
  origin:"*",
  methods:"GET,POST,PUT,DELETE"
},

とか追記しときゃ OK です。(methods に OPTIONS は無くていい)
まぁ Continuous Delivery 利用するか CLI でなんやかんやして push とかしないとダメなんでめんどいですが。
もしかしたら Cloudant 内の settings ドキュメントの編集でも対応できるかもしれませんので、誰かチャレンジしてみてくださいw

修正したら再起動して解決ですヤッタネ☆

CORS とかプリフライトリクエストについて詳しく知りたい方はこちら。

2020年6月30日火曜日

itch.io で日本語に対応しているゲームの検索方法

itch.io で日本語対応のゲームを検索したいときは、検索画面の URL の最後に /lang-ja を追加すれば OK ですヽ(=´▽`=)ノ
例えばこんな感じ。

検索画面の絞り込みで操作できるといいんですけどねぇ…
今のところその機能はないようです。

2019年11月21日木曜日

GDevelop 5 でゲームを作ってみた感想

GDevelop に関する記事をまとめた別ブログを用意しました。
GDevelop に関する情報をまとめたブログ
最新情報などはこっち↑を見てね。

以下は、かなり古いバージョン(2019年頃)の情報です。

GDevelop 5 を使ってみて、気が付いた点の備忘録。
こんなゲームを作りました ⇒ BomBomDig

地味便利機能
  1. プレビューボタンを右クリックすると表示されるメニューから、開始シーンを固定できる。
  2. イベントのグループやコメントは右クリックから Edit で色を変えることができる。
  3. 「条件を追加」「アクションを追加」を右クリックするとショートカットメニューが表示される。

Pi (円周率)が無い!
Else が無い!
これタイルマップじゃない!ただのタイリングだ!
反転できない。エフェクトにフリップはあるが判定やポイントは反転しない。(ベータ版では対策済み)解決済み

条件でオブジェクトを絞り込んでも、そのアクションがオブジェクトの数だけ繰り返されるわけではない。
例えば対象を3つに絞り込んで、アクションで score + 1 としても結果は3ではなく1。

条件というより対象の絞り込みだと考える必要がある。
マスクオブジェクトが上に乗っていないボタンに限定したい場合、
Not mouse on マスクオブジェクト
and
mouse on ボタン
では、マウスが乗っていないマスクオブジェクトとマウスが乗っているボタンに絞り込まれるだけなので意味がない。

衝突マスクのないスプライトを消そうとすると止まる。

シーンエディタ上でオブジェクト変数を変更した直後に、別のオブジェクトを選択すると変更が反映されない。一度何もないところをクリックする必要がある。

Tweenが機能しない。
1つもステージに配置されていないオブジェクトを複製してTweenを設定しても機能しない。

1つもステージに配置されていないオブジェクトをマウスオン判定しようとしても機能しない。

テキストの幅指定ができないので一行だと右寄せ・中央寄せの意味がない。
エディターと実行環境で文字の位置がずれる(フォントによるかもしれん)

Android アプリのバージョンコードはバージョン番号が変換される。
1.0.1⇒10001

SubStr()は他の言語のように開始位置をマイナスにして末尾から数える方法は使えない。

シーンタイマーなどは一時停止するだけで生成される。
条件で確認するだけでも生成されるっぽい。 

Center Point を変更すると、当たり判定がおかしくなる。
報告済みだが対応されている気配なし。

条件の「& および」で反転条件にしても効果がない?

条件の「ではない」を利用すると対象のオブジェクトが存在しないのに実行されるイベントを作成することができてしまう。

三角関数(三角比)の翻訳がゴミ
正弦(サイン sine)、式は sin()
余弦(コサイン cosine)、式は cos()
正接(タンジェント tangent)、式は tan()
余接(コタンジェント cotangent)、式は cot()
正割(セカント secant)、式は sec()
余割(コセカント cosecant)、式は csc()

イベントの検索は繰り返しの設定箇所にはヒットしない。

Z Order が同じ値の場合、あとから生成されたインスタンスが下になる。
エディター上では、あとから生成したインスタンスが上になるが、再生時には下になる。

エクスポートされた Windows (自動インストーラーファイル)は、実行すると問答無用で
C:\Users\[ユーザー]\AppData\Local\Programs\
にインストールする凶悪仕様。

BB テキストのワードラップは半角スペースの箇所でのみ有効。
日本語や全角スペースでは改行しない。

オリジナルの衝突マスクと独自の衝突マスクが重なるとエラーになる?

2019年4月8日月曜日

ドラッグ&ドロップ(ノンプログラミング)でアプリが作れるサービス2019年まとめ

ビジュアルプログラミングでアプリが作れるサービスをまとめてみました。
いずれもドラッグアンドドロップで、画面設計からプログラミングまでできるので、とても簡単(?)にスマホアプリが作れます。
Monaka に挫折した方や、Buildy、Yappli、アプスタ、BRAND などでは実現できないアプリを構築したい方向けです。

なお、2019年4月8日時点での評価です。

Thunkable

https://thunkable.com/
iPhone と Android の両方で機能するアプリを作ることができます。
無料版だと作成しているもの(プロジェクト)が Thunkable Public Gallery に公開されるという変った料金体系です。
つまり無料版で作られたものは、誰でも自由にプレビューしたりコピーしたりできます。
あまりパーツの種類は多くないですが、基本的なことから Firebase との連携、マネタイズは一通り可能です。

ただ、コミュニティーが、新しい Thunkable X(上記)と古い Thunkable Classic の記事が混在していて(タグ分けはされている)ちょっと混乱します。
個人的にアイコンフォントの利用が、まだできない点が残念です。(Classic だとできる)

AppyBuilder

MIT App Inventor の派生サービス。そのため Android のみです。
その分、利用できるパーツの種類が多く、画面設計や機能の自由度は高いです。
さらに Firebase との連携やマネタイズなども一通り可能な上に、完全に無料という点が驚きです。
ただちょっと全体的に古臭いw

Kodular

こちらも MIT App Inventor の派生サービス。やっぱり Android のみです。
AppyBuilder とできることに大差はありませんが、2017年にスタートしたサービスなので流行りの(?)画面構成などが作りやすいです。
当然のように無料で逆に怖いw

Composer 3

https://www.appgyver.com/
旧 AppArchitect かつ旧 Composer という、ややこしい過去を持つサービスです。
iPhone と Android の両方に向けたアプリを出力できるようですが、正直、利用できるパーツの種類が少なく、上記のサービスに比べると機能面で劣ります。
また、無料試用では実機テストができないようです。というかドキュメントが古い、または不足している印象です。
チャットでお話を伺ったところ、B2E(従業員向け)アプリにフォーカスしていて、最新版がリリース間近とのことです。

stencyl

http://www.stencyl.com/
これは2Dゲーム作成ソフトウェアです。
無料版では Flash や HTML5 での出力が可能です。
スマホアプリとして出力するには年間契約の購入が必要です。
ゲーム作成に特化していますが、それ以外のアプリを作ることも可能です。
ただ、文字入力や日本語表示に難ありw

Ionic Creator

既に完全に放置されているサービスです。おすすめできません。
なお、本家の Ionic フレームワークそのものは順調に進化しているようですw

その他

諸々の理由で評価はしていませんが、以下のようなサービスもあります。

buildfire

店舗向けのアプリ作成サービス。国内サービスを利用したほうが良い。

yapp

基本有料。国内の yapp.li というサービスとは別物。

Appy Pie

主に店舗向けのアプリ作成サービス。機能を選択するだけで作れたりする。

appery.io

基本有料。全然ノンプログラミングじゃないw

applican

今回紹介する唯一の国内サービス。全然ノンプログラミングじゃないw

以上!

おしまーい。

2019年1月28日月曜日

Node-RED v0.19.5 の file ノードで日本語を出力すると文字化けする

まるで v0.19.5 が悪いかのようなタイトルですが、何が原因かは分かってません(ぉぃ)

AWS 上の Node-RED v0.19.4 なら大丈夫なのに Azure 上の Node-RED v0.19.5 だと file ノードで日本語を含むテキストを出力すると、ガッツリ文字化けします。
ちな、どちらも Ubuntu です。

しょうがないので Azure 上の Node-RED v0.19.5 では exec ノードを使ってテキストファイル書き出してます。

こーいうのどこに聞けば良いのかなー?(´・ω・`)

【2019/01/30追記】
Raspberry Pi (Raspbian) の Node-RED v0.19.5 でも文字化けしました。
えー、ダウングレードってどうやるーん?(´・ω・`)

【2019/02/12追記】
一度 npm で削除してから v0.19.4 を再インストールしたら文字化けしなくなりました。
ちなみに v0.20.0-beta.4 では化けました。ぬー…

2019年1月21日月曜日

Node-RED を 80番ポート(port 80)でアクセスできるようにする方法

Node-RED は通常 1880 番 port を使用しますが、ブラウザ(HTTP)でアクセスしたときに使用される標準の 80 番 port でアクセスできるようにする方法です。

なお、環境は Linux (Ubuntu)です。

Node-RED の設定は変更しなくて OK

さて、そもそも Node-RED の setting.js には uiPort という設定項目があるので、そこを変えればいいのかと思いきや、1024 以下のポートは root の権限が必要になるので、その方法では  Node-RED を root で実行しなければならなくなります。
しかし、それはセキュリティ的に良くないので、一般的には 80 番ポートへのアクセスを 1880 番へ転送する、という手法が取られます。

なので、uiPort の設定を変更する必要はありません。

80 番ポートから 1880 番ポートへリダイレクトする設定

では、具体的にどのようにリダイレクトさせるのかというと、Linux に標準でインストールされている iptables というツールを利用します。
iptables はパケットフィルタリングや NAT などの設定を管理することができるツールですが、詳細についてはググってくださいw

とにかく手順だけ説明しますw
次のコマンドを実行することで、1880 番ポートから 80 番ポートへ転送されるようになります。
sudo iptables -A PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-port 1880
ただし iptables は設定をメモリ上に記憶しているだけなので Linux が再起動すると設定が消えてしまいます。

iptables の設定を保存・永続化する

そこで、多くの場合は iptables-save と iptables-restore というコマンドを利用して、iptables の設定をファイルに書き出して、システム再起動時に読み込ませるという手法が取られています。

しかしここではより手軽に、インストールするだけで設定を永続化できる iptables-persistent というツールを利用することにします。
下記コマンドでインストールします。
sudo apt install iptables-persistent
インストール中に現在の設定で IPv4 と IPv6 の設定ファイルを作成するか聞かれるので、どちらも Yes を選択します。
これだけで、再起動しても iptables の設定が有効なままになります。わー便利!

ちなみに、設定ファイルは以下の場所にあります。
/etc/iptables/rules.v4
/etc/iptables/rules.v6

また、任意のタイミングで保存や読み込みをさせたい場合は、以下のコマンドを用いるようです。(動作未確認)
sudo netfilter-persistent save
sudo netfilter-persistent reload
おしまいヽ(=´▽`=)ノ

2018年12月20日木曜日

VirtualBox の使い方まとめ 2019年

自分用のメモなので、断片的だけど何かの役には立つかも。
VirtualBox のバージョンは 5.2.22
ホスト OS は win10
ゲストは win7 とか ubuntu とか CentOS7 とかです。

VirtualBox で 64bit の OS が選択できない時の対処法

VirtualBox へ 64 bit 版の OS をインストールしようと思ったのに、Windows7(32bit) とか Ubuntu(32bit) とかしか選択肢に表示されなくて困っていたら、どうやら BIOS設定 で CPU の 仮想化支援を有効(Enable)にする必要があるようです。

Intel 製 CPU なら Intel Virtualization Technolog (IntelVT)、AMD の場合は AMD Virtualization (AMD-V) という機能です。
なお、AMD-V の場合は BIOS設定で無効になるようなことはないそうなので、そもそも 64bit CPU なのに 32bit しか選べない、なんてことはないみたい。

環境によって BIOS の画面って違いますが、私の hp パソコンでは何故か Security の欄にありました。
頑張って探してくださいw

VirtualBox で VM VirtualBox Extension Pack がダブルクリックでインストールできない時の対処法

なんか落とした Extension Pack のファイルをダブルクリックすれば、VirtualBox 立ち上がってインストールできるらしいですが、私の環境(Windows10)の VirtualBox だと、立ち上がるだけで何もしてくれなかったので、以下のように手動(?)でインストールしましたとさ。
  1. VirtualBox マネージャーの環境設定を開く
  2. 拡張機能を選択
  3. なんか追加するっぽいボタンをクリック
  4. ダウンロードしておいた Extension Pack のファイルを選択
  5. おしまい

外付け USB ハードディスク を使いたい

そもそも USB を使うには上記 Extension Pack をインストールしておく必要があります。
なんで最初から組み込まれていないのか知らんけど、おそらくライセンスが違うからだと思います。仕事で使う時は注意です。
で、HDD の場合はさらに以下のような設定も必要です。
  1. VirtualBox マネージャーから当該仮想マシンの設定を開く
  2. 設定メニュー「USB」で USB コントローラを有効化して USB 3.0 とかを選択
  3. 続けて「USB デバイスフィルター」に利用したい HDD を追加すれば OK
  4. 仮想マシンを起動し直すのも忘れずに

ゲスト OS へネット経由でアクセスしたい

何も設定しないとゲスト OS は NAT でネットに接続されている状態なので、これだと外部からはポートフォワーディングしないと見えません。
サクッとアクセスしたい場合は以下の設定をするのです。
  1. VirtualBox マネージャーから当該仮想マシンの設定を開く
  2. 設定メニュー「ネットワーク」で「割り当て」を「ブリッジアダプター」にする
  3. 仮想マシンを起動!
  4. わーい
ブリッジアダプター以外の項目については
が分かりやすいでした。

ゲスト OS とフォルダ共有したい

ゲスト側に Guest Addition を入れると設定から簡単に共有できるようになります。
  1. ゲスト OS のウインドウメニュー「デバイス」から「Guest Additions CD イメージの挿入」を選択
  2. 指示に従い Guest Additions をインストール
  3. ゲスト OS をシャットダウン(再起動では以降の設定が反映されない)
  4. VirtualBox マネージャーから当該仮想マシンの設定を開く
  5. 設定メニュー「共有フォルダー」でホスト OS の共有したいフォルダを追加する
  6. 設定のオプション「自動マウント」を ON にしておけば、ゲスト OS を起動するだけで自動的にマウントされるので楽ちん
  7. ばんざい

2018年11月14日水曜日

redir コマンドでポートフォワードする方法

普通は iptables で転送するところを、わざわざ redir をインストールして実現する意図がよくわからない方法の備忘録。
なお、Raspberry Pi (Raspbian) で動作を確認。

使い方は
https://github.com/troglobit/redir
を参照。

そもそもインストールされていないので、まずはインストールする。
んで、ドキュメントに倣い以下のように実行。
sudo redir :80 127.0.0.1:8080
ポート番号は適宜変更しましょう。
例えば 1880 番の Node-RED に 80 番でアクセスできるようにするには
sudo redir :80 127.0.0.1:1880
です。

たぶん再起動のたびに実行しないとダメだよねコレ。
(ドキュメントに /etc/inetd.conf への追記サンプルあり)

2018年11月7日水曜日

Node-RED で簡単に Crypto を利用する方法(LINE の Bot とかで)

下記のノードを追加するだけで Crypto モジュールが使えるようになります。
settings.js(bluemix-settings.js)を書き換える必要はないです。

node-red-contrib-crypto-js

HMAC の MD5 とか SHA-2 とか使いたいぜ!ってときにサッと使えて便利です。(Encode と Decode が使い難いけどw)

LINE の X-Line-Signature 検証での利用例

そもそも必須じゃない処理を意地でも Node-RED でやろうという奇特な方向けの情報ですw
※LINE WORKSだと「X-WORKS-Signature」

LINE の改ざん検証用署名「X-Line-Signature」の検証方法

ニッチなので雑ですが、これでいけます↓
意地でもノードを使うの図
function ノードを使えばもっと簡単にできるところを、あえてノードを駆使してみましたw
ポイントは decode ノードの設定を Hex にしておくことです。
それ以外だと異なる値になります。

JSON 貼ると化けるブログなので、上の図を参考に各々頑張ってくださいw

settings.js を書き換える方法

ちなみに下記のようにすることで、function ノード内で crypto を利用することも可能になります。

1.settings.js の functionGlobalContext に追記
functionGlobalContext: {
  crypto: require( "crypto" )
},
2.Node-RED 再起動
3.function ノードで利用
const crypto = global.get('crypto');
上記ノードには含まれていない機能を利用したいときは、この方法にしましょう。

2018年10月19日金曜日

Oculus GO アプリ内で WebView (ブラウザ)を表示する方法

Oculus GO のアプリ内で WebView みたいにブラウザ機能を利用できると一気に便利なるので、なんかいい方法はないか調べてみました。(試してみたとは言っていないw)
先に言っておきます「まともなものはない」と。

なお、Unity を利用することが前提です。
また、空間上にブラウザを配置(テクスチャとして利用)できることが条件です。

以下、2019年4月追記。

3D WebView for Android

超高いが Oculus GO にも対応している様子。
$200

以下、2018年10月以前の情報

Mobile Web View (Android, iOS)

https://assetstore.unity.com/packages/tools/gui/mobile-web-view-82142
ほぼ理想通りの機能を提供してくれるアセット!
でもレビューを見る限りかなりビミョーな様子……
$45 で人柱になれます。

UniWebView 3

Android にも対応しているけど、最前面に表示されるタイプなので残念ながら無理のようです。
$25

Embedded Browser

https://assetstore.unity.com/packages/tools/gui/embedded-browser-55459
一見 VR にも対応しているようだが、これは PC プラットフォームの VR に対してであり、Android がベースの Oculus GO には対応していない様子。
お値段が高いので試せないw
$80

WWebView

Windows のみ!
$20

unity-webview

gree のやつです。
残念ながら VR 非対応。

Popup Webview Android Ios

なんか見た感じダメっぽい。
$5

In-App Web Browser

全画面のみっぽい。
$5

Android Webview Texture (VR compatible)

検索するとよく出てくるし、いい感じなんだけど提供終了みたい。

ULiteWebView

情報少なすぎ。
$5

OculusGoWebView

まさにそのものズバリな名称だけど開発中なのかな…


あれ?もしかして無理なんじゃね?(爆)
神アセット待ちかなー。

2018年10月17日水曜日

Ubuntu 上の Dropbox フォルダを Windows と共有する方法

やる意味がわからないと思いますが、そういうシチュエーションもあるんですよ。
(Windows 側に空き容量がないとかね)

せっかく Ubuntu 入れてるんだから可能な限りコマンドは使わない方向でやります。
ちなみに Ubuntu 18.04.1 LTS でやりました。

なお、まるで熟知しているかのような書きっぷりですが、カンで作業した結果を書いてるだけなので、嘘、大げさ、紛らわしい可能性があることをご了承ください。

フォルダを右クリックして「プロパティ」でひらくやつ。
この画像は設定前の状態です。

まず素直に GUI 上で「ローカルネットワーク共有」を設定してみましたが、これでは Windows からの書き込みと Ubuntu での書き込みではユーザーが異なり権限(パーミッション)を変更しないと相互に上書きできない状態になってしまいました。

鍵がついちゃう

それではめんどいので、「ローカルネットワーク共有」ではなく samba をインストールして設定してみました。

注)以降の作業を行う前に全ての「ローカルネットワーク共有」の「このフォルダーを共有する」はチェック解除しておきましょう。
(もしくはそもそも触らない)

samba は「Ubuntu ソフトウェア」を起動して「samba」って検索すれば出てくるので、それをインストールします。

これをインストールする

しかし残念なことに、samba の設定画面はスーパーユーザー(管理者みたいなもん)でなければ開くことができません。
つまりマウスぽちぽちでは起動できません。
そのため「端末」アプリでコマンドを入力する必要があります。

CLI は説明不足の典型例w

そのコマンドは以下のとおりなのですが、
sudo system-config-samba
いきなりこれを入力してエンターキーを押しても、英語で「/etc/libuser.conf が無いよ」って言われてしまいます。
そこで、最初だけ次のコマンドを実行しておく必要があります。
(二回目移行は必要ありません)
sudo touch /etc/libuser.conf
上記コマンドで空のファイルが作れます。
このコマンドを実行するとパスワードを聞かれるので入力します。(何も表示されませんが入力されてます)
コマンドについて詳しく知りたい方は「sudo」コマンドと「touch」コマンドをググればいいと思います。
ファイルを作った上で再度
sudo system-config-samba
と入力しパスワードを入力すれば設定画面が開きます。
+ボタンで共有フォルダを追加したりなんやかんや設定しましょう(爆)

ちなみに当初の上書きできない問題については、プリファレンス > サーバー設定 > セキュリティのゲストアカウントを自分のアカウントにすることで、相互に上書き保存ができるようになります。

ゲストアカウントを自分にすることで解決
まぁセキュリティがザルになりますがねw
ちゃんとする場合は samba のユーザーも設定しておきましょう。

設定が終わり設定画面を閉じたら samba を再起動する必要があります。
以下のコマンドを実行します。
sudo systemctl restart smbd
あとは windows のネットワークから見られるかと、ちゃんと Dropbox が同期できてるかをチェックしましょう。

なお、共有しているフォルダ側もちゃんと自分にしておかないと意味ないので注意。

変えておけば以降は設定に準ずるはず
いつになったら Ubuntu は CLI 使わなくても良くなるんっすかねー。

2018年7月17日火曜日

Unity で地面のテクスチャがボケる時の正しい対処法

テクスチャ画像の Inspector の Generate Mip Maps を OFF にする方法ではパフォーマンスが犠牲になるようなので Aniso Level を変更するほうが良い。


実際にはここまで値を上げる必要はない
Aniso Level は「急角度から見たときのテスクチャの品質を向上します。床や地面のテクスチャに適しています。」とのこと。
この数値を上げることによる弊害は知らんw

2018年7月3日火曜日

xismo から Unity へ obj 書き出しする時の設定

デフォだと UV 変になったりしちゃったので、以下のようにするとうまくいった。
倍率は xismo は cm のつもりで作ってるので、100分の1にした。
X軸を反転にチェック。
UVのV座標を反転にチェック。これをしないと変になる。
面を表裏反転はオフに。これをオンにしてると左右が反転しちゃう。
モディファイアと表示ノードのみはお好きにどーぞ。

あとは出力された .obj と .mtl と テクスチャを Unity へわたしてあげればOK。

2018年6月25日月曜日

アップロードされたファイルを Node-RED で受け取る方法

例えば画像を Node-RED へアップロードしたい、とかの時です。
下のフロー図は、ファイルを送信できるアップロードページと、送られてきたファイルを鯖上に保存するフローのサンプルです。
フローの JSON コード貼ると化けちゃうブログなので、下記の説明を読んで各自で自作してくださいw

ただし環境によっては file ノード(ファイル作成ノード)がない場合もあります。(IBM Cloud のボイラーテンプレートで用意された Node-RED とか)
その場合は file ノードの代わりに、データベースなどへの保存の処理を行う必要があるわけですが、それはまた別のお話……

では、個々のノードについてザッと説明します。

アップロードページのフロー

まずは動作確認のためにも、ファイルをアップロードするためのページを用意します。

「[get] /upload」http 入力ノード

Node-RED 鯖の /upload に GET でアクセス(単にブラウザでアクセス)されたときのフローがここからスタート。

「HTML」template ノード

ここでファイルをアップロードできる HTML を msg.payload にぶち込みます。
HTML はこんな感じ。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>アップロード</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
<input name="file" type="file" id="file"><br>
<input type="submit" value="アップロード">
</form>
</body>
</html>
ちゃんと form 要素の method属性は post に、enctype 属性は multipart/form-data に設定しましょう。

http 出力ノード

上記の HTML をここで返します。
それにより無事、アクセスしてきたブラウザにはアップロードページが表示されます。
特に何も設定しなくてもデフォで Content-Type: text/html として返してくれるので楽ちん。

ファイルを受け取ったときのフロー

こっからが本題。
先のページからファイルがアップされた時のフローです。

「[post] /upload」http 入力ノード

アップロードページと同じ URL だけど、POST だった場合はこっちがスタートします。
ファイルがアップされるはずなので、ノード編集画面の「ファイルのアップロード」にチェックを入れましょう。
チェック入れておかないと msg.payload にバイナリバッファが入っちゃって意味不明になります。
入れておくことでファイルは msg.req.files に格納され、msg.payload には HTML の form の各値が格納された状態になります。

「処理」function ノード

ここでは簡単なエラーチェックをしつつ、応答のフローとファイル保存のフローに分けています。
出力数は 2 にして、return の [0] は応答のフローへ、return の [1] はファイル保存のフローへ分かれるようにしました。
コードは以下の通り。
let files = msg.req.files;
if (files.length === 0) {
msg.payload = "ファイルが添付されてないよ";
return [msg, null];
}
msg.payload = "たぶん保存したよ";
//
let msg2 = {};
msg2.payload = files[0].buffer;
msg2.filename = "/home/user/" + files[0].originalname;
return [msg, msg2];
まず、msg.req.files の数を見て、ちゃんとファイルが含まれているかをチェックしています。
もしファイルが含まれていなかったら、ファイル保存のフローへは null を返すことで、フローが進まないようにしています。
他にも必要であれば msg.req.files[0].mimetype などを確認して、想定外のファイル形式を弾いたりしても良いでしょう。

で、問題がなかった場合、新たにファイル保存フロー用のオブジェクト msg2 をこしらえます。
そして次の「ファイル作成」ノードのために、msg2.payload にファイルのバイナリバッファを入れます。
あと、保存先とファイル名もここで設定してしまいます。
サンプルでは鯖上の /home/user/ へ元のファイル名のまま保存するようにしました。

「HTML」template ノード その2

応答フローの template ノードです。
ここでは応答用の HTML を作成して msg.payload に入れています。
予め先の「処理」function ノードで msg.payload にはメッセージが入れられているので、Mustache タグを利用して payload の内容を HTML に差し込んでいます。
↓こんな感じ。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>結果</title>
</head>
<body>
<p>{{payload}}</p>
</body>
</html>
ヒゲ便利w

http 出力ノード

応答フローでも先の http 出力ノードを再利用。えこえこ。

「ファイル作成」file ノード

鯖上にファイルを保存します。
ノード編集画面で「動作」を「ファイルを上書き」にして「メッセージの入力のたびに改行を追加」のチェックは外しておきましょう。
「ファイル名」は先の「処理」function ノードで設定済みなので、ここでは空にしておきます。
(以前は何か入力されていても、msg 側が優先されてたけど、最近 msg 側で設定済みなのにノード編集画面でも何か入力されてると警告されるようになったっぽぃ)

以上、個々のノードの説明でした。
実際に /upload へブラウザでアクセスしてみて、動作を確認してみましょう!
そして何か間違えている場合、またはもっといい方法がある場合は教えてくださいw

おしまーいヽ(=´▽`=)ノ


2018年6月21日木曜日

Node-RED で base64 エンコードとかデコードしたい時

Node-RED は受信した画像とかローカルのファイルとかをバイナリバッファでやり取りするけど、Google さんの Cloud Vision API に画像送りたい時とかには base64 エンコードして送らなきゃいけなかったりするときのなんやかんや。

方法1:node-red-node-base64ノードを使う。

超楽ちん。
https://flows.nodered.org/node/node-red-node-base64
こいつをメニュー「パレットの管理」から追加して使うだけ。
msg.payload がバイナリバッファなら base64 にしてくれて、逆に base64 だったらバイナリバッファにしてくれます。

方法2:Node.js の Buffer クラスを利用する。

下記、new Buffer() は非推奨になりました。
今後は変わりに Buffer.from() を使いましょう。

https://nodejs.org/api/buffer.html

function ノードで
let buffer = new Buffer(msg.payload);
msg.payload = buffer.toString('base64');
return msg;
とかすれば base64 に変換できます。
これも楽ちん。
逆にバイナリバッファにデコードしたいときは
msg.payload = new Buffer(msg.payload, 'base64');
return msg;
てな感じ。

おしまい。

2018年5月21日月曜日

Vcc、Vee、Vbb、Vdd、Vss、Vgg、V+、V-、GND、の違いとは?

トランジスタの歴史的な経緯により、異なる表記になったようです。
とりあえず Vcc、Vdd は入力電圧。
Vee、Vss は出力電圧ないしは GND と思っておけば OK と思われます。(すごいマサカリ飛んできそうですがw)

具体的には回路の内部構造が TTL なのか CMOS なのかによって使い分けられているようです。

TTL なら
Vcc:コレクター
Vee:エミッター
Vbb:ベース

CMOS なら
Vdd:ドレイン
Vss:ソース
Vgg:ゲート

ってことらしいよ。
でも TTL と CMOS が混在している回路も増えてきて、人類の見通しの甘さを露呈しているらしいよw

2018年5月2日水曜日

Arduino の使い方(初心者向け)2018年版

Arduino 互換ボードを買ったので自分用の初心者向け基礎知識な備忘録。
いつものごとく間違っていることも自信満々に書いてるぞ☆
[書き始め2018年5月/飽きるまで随時更新]

以下、Arduino UNO 互換ボードと NANO 互換ボードでの話だよ。
Arduino は、いろいろな種類があって特にハード面ではかなり異なるので、しっかり確認してから使う。(電源とか)

Arduino とは?

マイコンの動作に必要なものをボードにまとめたもの。
つまりマイコンを簡単に使えるようにしたもの。
Arduino の種類によって乗っているマイコンが異なり、当然仕様や機能なども変わってくる。
ハード自体がオープンソースなので、色々と派生したり亜種があったりする。

ちな、Raspberry Pi とは違って OS はない。

スケッチ?

プログラムのこと。

便利なサイト

Web Editor とかある。

Tinkercad Circuits

ブレッドボード図(回路図)作成から、シミュレーション、スケッチ作成までできるちょっと凄すぎる Web サービス。
Fritzing ほど部品はないけど、基本的なものは揃っているし、なによりシミュレーションできるのが助かりすぎる!
提供元は 3DCG ソフトウェアで有名な Autodesk 。要 Chrome か Firefox。

Circuit Simulator Applet
Webブラウザ上で動く回路シミュレータ。
ちょっと癖のある使い勝手だけど、ショートカットキーを覚えるとすごく早く回路が組める。
Arduino に繋ぐ回路のテストに便利。

開発環境(IDE)

やっぱ今どきは Web IDE っしょ。
Arduino Create
互換ボードでもOK。
【要確認】Arduino 以外のマイコンは、Libraries で検索して Favorites からzipダウンロードして Custom に上げれば使えるっぽい?

電源

電源スイッチはない。PC じゃないから電ブチOK。

UNO

動作電圧:5V
DCジャックの入力電圧(推奨):7-12V

給電は USB から DCジャックから VIN ピンからのいずれか。
ただし VIN は直でマイコンにつながっているので、5V 以外繋いだらイカン。(5.5V くらいまでらしいよ)

NANO

動作電圧:5V
VIN の入力電圧(推奨):7-12V

給電は USB から VIN から 5V ピンからのいずれか。
UNO とは異なり VIN はレギュレータに繋がっているので、7~12V を繋げられる。
また、5V ピンからも給電できるが、これは安定した 5V を繋げる必要がある。

(アナログ・デジタル)I/O ピン

I / Oピンあたりの扱える推奨DC電流は 20mA まで。
いくつかのピンをまとめて出力 150mA 入力 100mA の制限もあるけど、1ピン 20mA を制限としていれば問題ない。はず。(さすがに 10 本のピンで 20mA 出したら壊れるそうです;)

5Vピンは200mA。
3.3Vピンは50mA。

PWM 出力ができるのは、UNO の場合はボードに~が描かれているピンのみ。
NANO の場合は D3,D5,D6,D9,D10,D11 ピンが対応。
アナログ出力(PWM)のためにデジタルピンを使うという点がややこい。

13番のピン

13番は内蔵 LED と連動している。
プログラムの定数「LED_BUILTIN」がこれ。

UNO と NANO のマイコン

ATmega328P
スケッチ済みのマイコンを Arduino から取り外してブレッドボード上で動作させるなんてことも可能。
まぁ互換ボードは殆どマイコン取り外せないけどなw
よく商品説明とか名称に「SMD」とか書いてあるけど、それは表面実装(Surface Mount Device)されてるから(結果的に)マイコン取れないぞってことらしいよ。

マイコンのタイマー

割り込みとは?

SPI、I2Cとは?

どちらもシリアル通信の規格。
マスター(親機・Arduinoなど)とスレーブ(子機・センサーなど)の通信に利用される。
SPI は線が多くなるけど比較的高速に通信できる。
I2C は線は少なくて済むけど比較的低速な通信になる、といった違いがある。
どちらも複数のデバイスを接続できる。
デバイスの電源電圧に注意。