HDMIをDisplayPortに変換するのは難しい

やられた。自分が無知ということを思い知らされた。会社ではノートパソコンを使用していて、外置きのモニタにVGAで拡張表示をしている。パソコンを買い替えて新しいパソコンはモニタを2台まで拡張できるということが書いてあった。ちょうど、モニタがもう一台余っているので接続すれば試すことができそうだ。ノートパソコンはHDMI出力が余っているが、モニタ側はVGAとDisplayPortしかない。何でディスクトップ用のモニタはHDMIが無いのだろう。
どうしても複数台接続を試したくてネットでケーブルを探したら、DisplayPort HDMI変換ケーブルを見つけた。値段も1000円弱なのでそんなに高くない。

Qtuo 金メッキ DisplayPort to HDMIケーブル ディスプレイポートto HDMI アダプター【逆に転換不能】DPケーブル フルハイビジョン(1080p) 1.8M -ブラック

購入し早速試してみたら、モニタに何も現れない。デバイスマネージャーを見ても特にドライバに問題があるわけでもなさそうだ。何度か抜き差しをやってみたけれど、うんともすんとも言わなかった。仕方が無いから諦めた。よくよく取説を見ると、パソコン側にDisplayPortをつないでモニタ側にHDMIをつなぐと書いてある。購入したページを見ると「DisplayPort to HDMIケーブル ディスプレイポートto HDMI アダプター【逆に転換不能】」と書いてあった。何を見てるんだ。
そもそも、HDMIとDisplayPortは同じデジタル処理とは言えど、信号が全然違うらしい。当たり前か。なぜDisplayPortからHDMIへ信号を送れるかというと、DisplayPortがHDMIやDVIに採用されているTMDSという伝送方式に対応しているからだ。このことについて書かれているサイトがいくつかあった。

DisplayPortからHDMIに変換できるのは何故?

なぜ DVI や HDMI から DisplayPort へ変換するアダプターは見られないのか

2つのディスプレイI/F規格、勝者はいずれに:DisplayPort vs. HDMI

HDMIからDisplayPortへ送るには信号変換が必要ということだ。そういう機器は数は少ないがあることはある。5000円ぐらいするので、ただ試したいだけに買うには勿体無い。変換ICも売られているし、開発ボードも売っているが自作というレベルでは無い。

Digi-key MegaChips Technology America Corporation RD4-2600


HDMIからDisplayPortい変換するのは諦めて、HDMIからVGAに変換するものを買うことにした。

Wake On Lanについていろいろ試してみた

テレビをリモートで操作する方法を調べていたら、Wake On Lanにかかれているサイトに出会った。恥ずかしながら今までWake On Lanという言葉を知らなかった。文字通りLan 経由で起動するということだが、マジックパケットと呼ばれる方式で通信をすると、電源がOFFが状態から起動するということらしい。

まずはXYCベアボーンで試そうと思った。WindowsデバイスマネージャーのLANカードオプションからWake On Lanを設定。これは問題なかった。次にBIOSの設定しようとしたら項目が出て来なかった。おそらくマザーボードがWake On Lanに対応していないということだろう。それでも、スリープ状態から起動することができた。

起動する側で試したのはRaspberry piでetherwakeというソフト。次にMacbookでwakeonlanというソフト使い方は次の通り

Raspberry pi
$ sudo aptinstall etherwake
$ sudo etherwake 01:02:03:04:05:06

Mac
$ brew install wakeonlan
$ wakeonlan -i 192.168.1.255 -p 9 01:02:03:04:05:06

Wake On Lanをきっかけはテレビだが、そのサイトもうちと同じソニーのブラビアなので一応試してみた。家のほうがずっと古いがダメ元で、一応Lanポートもついているし。

試してみるとうんともすんとも言わなかった。インターネットで調べると。Wake On Lanには対応していませんと明記されていた。

このまま、試すことが出来ないで終わってしまうのか。と思っていたところ、会社で使っているDell 製のDesktopパソコンで試すことにした。このPCはやり方の手順がのった例までのっているサイトがあったのでできることは間違えなし。Windowsの設定とBiosの設定をやったらできるようになった。

今回わかった事はWake On Lanができる状態では、電源を切った状態でもLan接続している部分のランプが点滅すること。でなきゃ、パソコンの電源を落とした状態で、マジックパケットを受け取ることができるわけがないから。

そもそもWake On Lanがどんな動きをするかわからなかったので、正解までたどり着けてよかった。

参考にしたサイト

Raspberry Piで自宅内のWindows機を起動させる (Wake-on-LAN)
Wake Other Computers from Mac OSX
Windows10でWOL(Wake on LAN)の設定を行う
最近のDELL OptiplexでWOL(Wake on LAN)をするには?

翻訳はスプレッドシートを使った処理に変えた

前回はGAS スクリプトのLanguageApp.translate 関数を使い、回数制限に引っかかってしまったので、別の方法を考えてみた。それはスプレッドシートにコメントを貼り付けて、その横にTranslate関数をコピーしていくという方法だ。何度か試してみたら、回数制限に引っかからなさそうだ。

処理がうまくきいきそうなので、Webページから処理できるようにした。
ローカルフォルダからファイルをドラッグ&ドロップすると読み込まれてスプレッドシートにコピーしていく。そしてTranslate関数を貼り付けていく。
ドラッグ&ドロップはHTML5のFILE APIがそのまま使用できる。スプレッドシートへコピーはGASへデータを渡し、スプレッドシートへコピーする流れだ。

しかし、Translateが全て終わったかどうかがわからないのが問題だ。実際にスプレッドシートを見ると処理中はLoading…と表示される。これをどうやったらプログラムで判定させればよいのだろう。全然わからなかった。
(サンプルのような数なら、すぐ終わるが、何千・何万項目あると、時間がかかる。)

本当は、一気にコメントファイル出力までやりたかった。しかし、今回はあきらめて別々に処理することに。半自動でやることにした。
手順は以下の通り

  1. ファイルをマウスでドラッグし、Webのテキストボックスの上で離す。
  2. 変換ボタンを押してスプレッドシートへデータを送り、翻訳処理を開始
  3. スプレッドシートを見て翻訳が終わったことを確認
  4. Webページへコメントをコピー
  5. CSVに整形してCSVファイルへ出力する

このような流れにした。自分で使うからこれでいいだろう。
今回は1〜3を作成した。

Google Apps Script (GAS)で試そうとしたら失敗に終わった

前回は出力したCSVファイルをスプレッドシートへ貼り付けて、またコピーしテキストエディタに貼り付け、整形し保存といった手順を一つずつやっていたので、自動化したいと思った。なんなら翻訳Webアプリを作って公開しようかと思った。

GX-Works2のコメント翻訳WebアプリをGoogle App Scripts で作成しようとしたらつまずいた。 GASの制限だった。

GASでの翻訳命令は下記の通り
LanguageApp.translate(comment, "ja", "En")
翻訳関数自体は苦労する余地もない。

csvファイルをGoogleドライブのフォルダに置いて、ファイルをよび出す部分も作成した。ファイルからの読み出し自体はインターネットで検索すればすぐに例が出てくる。三菱コメントの使用どおりUFT-16で読み出せた。これも苦労しなかった。

csvファイルをタブで区切って変数に配列に入れてコメントの部分だけループで翻訳関数にかける。ここからつまずき始めた。

一つは短い時間に使用する回数。translate命令を実行してもう一度命令をするまでの時間が短すぎると、エラーになってしまう。これはタイマーを入れてtranslate命令を使う間隔を1秒待つことで回避できた。

Utilities.sleep(1000)

しかし次は1日の実行回数で引っかかった。おそらく一日でtranslate関数を使うことができる数に制限があるとのことだ。特にGmailと違って特に翻訳関数には記載が無いのに。一回のテストに付きループでtrans関数を何百回とかけていたから、すぐにエラーが出た。おそらく2000回ぐらい使うとなるのだと思う。テストの段階で制限回数に引っかかるなんて・・・。Webアプリにするつもりなら絶対に使えない。違う方法を探さなくては。

コードは以下の通り。

翻訳した後、コメントファイルへインポートが難しかった

Googleスプレッドシートで翻訳するところまでは簡単だったが、翻訳したデータをGX Works2コメントファイルへインポートするところで苦労した。文字数を少なくするために、スペースを無くし単語の先頭は大文字に変換し、セミコロンやタブを入れた。

Notepad++を使用し、以下のような手順で処理した。

  1. CSVファイルをNotepad++で開く
  2. Ctrl+A Alt+Shift+U 全て選択
  3. 編集 →大文字/小文字変換→語頭は大文字、他は小文字(Proper Case)
  4. 半角スペースを空文字に置換。
  5. 先頭文字にセミコロンをつける。
  6. カンマを”\t”(セミコロン タブ セミコロン)に置換
  7. エンコード → UCS LE BOMへ変換
  8. 編集 → 改行コード変換 →Unix(LF)
  9. 名前を付けてCSVファイルに保存する。

CSVファイルについては取説を見ると以下のように定義されている。


下記に,CSV ファイルの詳細な形式について示します。
• ファイル形式はUnicode(UTF-16 Little Endian BOM あり)です。
• 項目間の区切りはタブ( \t) です。
• 各項目はダブルクォーテーション(“) で囲みます。
• 項目内にダブルクォーテーション(“) を含む場合,項目内のダブルクォーテーション(“) はダブル
クォーテーション2個(“”) で表します。
• 行の最後は改行を設定します。
改行コードはCR+LF です。
• 空白は通常文字として扱います

 

コメント一括翻訳について考えてみたらGoogle スプレッドシートが良かった

いきさつ

仕事の話。アメリカへ納入した装置のPLCコメントを1週間で英語にしてほしいと連絡があった。しかし、コメント数は重複があるが約6万行ある。あまりに膨大な量なので気が遠くなった。三菱PLCのグローバルコメントをCSV出力したので、ファイルはCSV形式。1コメント約1分。重複行は置換して行くとしても、普通に訳して入力していけばおそらく2ヶ月はかかるだろう思った。

解決策

Googleスプレッドシートには翻訳関数があることを発見した。コメントをスプレッドシートへ貼り付け。そしてコメントの右側に翻訳関数を入力。
=GOOGLETRANSLATE(A1,”ja”,”en”)
これは上記はセル”A1”を日本語から英語に翻訳せよという意味。

あとはこれを他のコメントの横にコピーする。簡単なやり方はセルを一度クリックして、右下の部分をしたに引っ張っていくだけ。

結果

翻訳の部分だけなら1時間もかからずに終了することができた。処理中は”Loading…”と表示される。コメント数が多いので少し時間がかかる。

ただしコメント文字数制限である32文字を越えてしまう部分もあるので、PLCコメントにした時に文字が切れてしまう。
翻訳が会っているかは信じるしか無い。もっともコメントは社内の人にしか伝わらないような専門用語もあるので、日本人に日本語のコメントを渡しても全部が理解できるとは思えない。お客さんにはGoogle翻訳を使って訳しましたと宣言することにした。また、操作パネルで表示している言葉と表現が違ってしまう単語もあるので、これも了承していただく必要がある。

今後

スプレッドシートの翻訳関数が非常に使えることが分かった。
翻訳したコメントはCSVファイルにして、CSVデータに戻す作業をするのだが、ここでだいぶ苦労した。