カテゴリー別アーカイブ: IT

jQueryの初心者がselectタグの選択結果がページ内の特定の要素の表示・非常時を切り替えてみた

jQueryを使って気づいたことのメモ。

まずjQueryを使って書いたJavaScriptは、別ファイルmyscript.jsとして作成し、該当のHTMLファイルから読み込むようにする。

JavaScriptとHTMLはファイルを分けたほうがメンテナンスがしやすいため。両社が同じフォルダ内にある場合は”./~.js”という具合に指定。

<script src=”./myscript.js” type=”text/javascript”></script>

以下、セレクタについて。

class名はドット始まり。id名は#始まり。

// classが class_name という名前の要素すべて
$(“.class_name”)

// idが id_name という名前の要素すべて
$(“#id_name”)

さらに属性で絞り込みたい場合は [属性名1=’値1′][属性名2=’値2′]… とつなげればよい。

$(“.class_name[attribute1=’val1′][attribute2=’val2′]”)
$(“#id_name[attribute1=’val1′][attribute2=’val2′]”)

これらの絞り込みが想定しているのは、下記のようなHTML。

<div id=”id_name” attribute1=”val1″ attribute2=”val2″>
here goes some html
</div>

この要素はidが id_name で attribute1 が val1 で attribute2 が val2。

したがって

$(“#id_name[attribute1=’val1′][attribute2=’val2′]”)

と書けばピンポイントでこの要素に絞りこめる。

ある要素の配下にある、特定のclassやidで絞り込みたい場合は[class=’クラス名’] [id=’id名’]とすればよい。

つまり、class名もid名も、セレクタで絞り込むときには属性と同等にあつかえる。

$(“.class_name[id=’id_name’]”)
$(“#id_name[class=’class_name’]”)

これらは以下のように書いても同じ。

$(“.class_name #id_name”)
$(“#id_name .class_name”)

ここまで、属性の絞り込みには等号「=」を使っているが、この等号にはバリエーションがある。

参考:jQueryリファレンス Selectors:セレクタ

あくまで値を文字列として扱う前提。

=:等しい
^=:~で始まる
$=:~で終わる
*=:~を含む

以上の方法で絞りこめるようにするために、PHPなどでHTMLを出力する時は、絞り込みたい要素に属性値をたくさんつけておくとよい。

そうすると、複数の属性値の組み合わせで、柔軟に要素の絞り込みができる。

<div id=”id_name” attribute1=”val1″ attribute2=”val2″>
here goes some html
</div>

確実にページ内の特定の部分に存在するclassやidだけを絞り込みたい場合は、その部分全体を、あらかじめclassやidで囲んでおく。

<div class=”container1″>
<div id=”id_name” attribute1=”val1″ attribute2=”val2″>
here goes some html
</div>
</div>

その上でセレクタで絞り込むとよい。

上記の要素は以下のセレクタでピンポイントで絞りこめる。

$(“.container1 #id_name[attribute1=’val1′][attribute2=’val2′]”)

セレクタで絞り込んだ要素だけを表示したい場合は、全要素をいったん非表示にしてから、絞り込んだ要素だけを表示する。

非表示にする:スタイルシートのdisplayをnoneにする。
表示する:スタイルシートのdisplayをblockにする。

// いったん特定のクラスの全要素を非表示にしてから…
$(“.container1 .class_name”).css(“display”, “none”);

// 絞り込んだ要素だけを表示する
$(“.container1 .class_name[attribute1=’val1′][attribute2=’val2′]”).css(“display”, “block”);

以上のような要素の絞り込みと、表示・非常時の切り替えを、selectタグで何かの値を選択したときに実行したいとする。

ページ全体のいずれかの要素のクリックや選択などのイベントを拾うには、以下のように記述すればいい。

$(function() {

……

});

名前のない関数は、最初は非常に気持ち悪いが、慣れればよい。

例えばidがselect1というselectタグがあったとする。

<select id=”select1″>
<option value=”val1″>選択肢1</option&g;
<option value=”val2″>選択肢2</option&g;
</select>

このselectタグの選択値が変更されたときの処理は以下のように書く。

$(function() {

$(“#select1”).change(function() {
……
});

});

$(“#select1″)で、そのページの中でidがselect1である要素に絞りこめる。

選択値が変更されたときの処理を書きたい場合は、その要素のchange()という関数を呼び出す。

具体的にどういう処理をしたいかは、change()関数の中に、また名前のない関数function() { …… } を書いて …… の部分に記述する。

……の部分には、ふつうにJavaScriptやjQueryで書けるロジックは何でも書ける。

……の部分で、その処理のきっかけになった <select id=”select1”> 自体を参照したい場合は $(this) と書く。「自分自身」の意味だと思えばいい。

選択した値を読み取りたい場合は $(this).val(); と書けばいい。

ちなみに、デバッグしながらコードを書きたい場合は、console.log(~); の「~」の部分に、その時点の値を確認したい変数を書けばいい。

console.log(); で書き出したログは、たとえばGoogle Chromeなら[Ctrl]+[Shift]+[i]キーを押して、[Console]というタブを選べば、確認できる。

$(function() {

$(“#select1”).change(function() {
console.log($(this).val());
});

});

このように書いておいて、該当のページでselectタグで例えば「選択肢2」という項目を選択すると、その瞬間、以下のログが書き出される。

val2

ここまでにやったことを組み合せると、attribute1という属性が、selectタグで選択した値と同じである要素だけを表示する、といったことができる。

$(function() {

$(“#select1”).change(function() {
var selected_val = $(this).val();
$(“#id_name”).css(“display”, “none”);
$(“#id_name[attribute1='” + selected_val + “‘]”).css(“display”, “block”);
});

});

selectで選択した値を、分かりやすくするためにいったん selected_val という変数に代入している。

そしてそのselected_valを使ってセレクタ文字列を組み立てる。

例えばそのページの中でidが id_name である要素すべてを、まずいったん非表示にする。

$(“#id_name”).css(“display”, “none”);

その後、そのページの中でidが id_name であり、かつ、attribute1が選択した値である要素だけは表示させる。

$(“#id_name[attribute1='” + selected_val + “‘]”).css(“display”, “block”);

セレクタの文字列の組み立て部分は、以下のようなしくみ。

選択した値が「val1」だったとすると

“#id_name[attribute1='” + selected_val + “‘]”

この文字列の計算結果は

“#id_name[attribute1=’val1’]”

となる。つまり、idがid_nameである要素のうち、attribute1がval1のものという意味になり、下記のidがid_nameである要素がいったんすべて非表示になり、いちばん上の要素だけが表示される。

<div id=”id_name” attribute1=”val1″>表示したい要素の1つ目
</div>
<div id=”id_name” attribute1=”val2″>表示したい要素の2つ目
</div>
<div id=”id_name” attribute1=”val3″>表示したい要素の3つ目
</div>

企業向けモバイル端末管理製品2017年版「マジック・クアドラント」公開

毎年6月前後に公開されている、企業向けモバイル端末管理製品(Enterprise Mobility Management)の「マジック・クアドラント」2017年版が公開された。

今まで「リーダー」だった5強のうち、AirWatch(VMware社)、Mobileiron、MaaS360(IBM社)、BlackBerryは安泰だが、Citrix社だけが「ビジョナリー」に事実上の格下げになった。

各社の「強み」と「注意点」は以下のとおり。以下の要約はあくまで単なる参考であり、正確な内容については必ず原文を参照のこと。

VMware AirWatch

「強み」
・垂直統合型市場のほとんどで大規模導入実績あり。
・OS新バージョンの即日サポート、管理対象外端末に対する独自のソリューションについて技術革新を継続推進。
・これまでのEMMのみの導入に対して「Workspace One」が対象機能範囲を大きく拡張、競争力のある位置づけ。

「注意点」
・顧客企業から、テクニカル・アカウント・マネージャー(TAM)に直接コンタクトがとれないとの不満を継続して受けている。TAMオプション購入済み企業からは問題の報告なし。大規模導入についてVMware社は「pods」と呼ばれる直接サポートを追加。
・旧版のAirWatch Inboxをまだ利用している顧客企業が機能面と安定性の面で問題を報告している。Boxerの新機能S/MIMEサポートの品質が現時点で検証されていない。
・AirWatchのコード品質について継続的に報告を受けており、広範な互換性を提供しようとしている結果と思われる。

Mobileiron

「強み」
・昨年、顧客サポートの全般的な改善が報告されている。オンプレミス導入の顧客企業にも最新のパッチ適用を積極的に促し、クラウドユーザには定期保守によるサービス停止を適時に通知している。
・セキュリティと使いやすさの両立に焦点を当てている。各種法規制に対応、企業アプリストアやEmail+などの使いやすさも改善。
・クラウド版が、10万端末以上の大規模顧客にも導入されている。

「注意点」
・専業EMMベンダーとして、広範な製品を持つベンダーの競争力からプレッシャーを受けており、長期的に顧客が同社製品の適用範囲を縮小する脅威がある。
・導入直後からすぐ使えるレポーティングや分析機能が管理画面に組み込まれていない。
・AppConnect機能を利用しているユーザ企業が機能制限を考慮しなければならない。Android用AppConnectはiOS同様のSDKをサポートしていない。AndroidのAppConnectはラッパーにしか対応していない。

IBM MaaS360

「強み」
・システム管理者に便利な端末状況把握の機能を提供している。例えばポリシー違反や組織がさらされている脅威情報のダッシュボードなど。
・Windows 7、8、10、macOSに従来のクライアント管理ツールだけでなくEMM機能も提供している。
・この数年間、導入企業から他の製品よりMaaS360は導入が簡単という報告を受けている。

「注意点」
・SaaSのみでオンプレミスの提供がない。ただしメールやその他アプリケーションについてオンプレミスとのゲートウェイは提供している。
・WindowsやmacOSの高度な管理機能は、BigFixと組み合せる必要があり、完全統合されていない。
・MaaS360のiOSアプリは96MBもあり、他のEMM製品のiOSアプリよりかなりサイズが大きい。インターネット回線の遅いユーザは導入時に困難がある。

BlackBerry

「強み」
・個人情報管理(PIM)アプリは依然として強力で、セキュリティや遵法対応のPIMが必要な企業・組織では、EMM製品の中で最も多く採用されている。
・BlackBerry、WatchDox、Goodの歴史的経緯、社会的評価、セキュリティ機能から、セキュリティ重視の企業・組織にとって強力な製品である。
・BlackBerry Dynamicsは機能が豊富、サードパーティーアプリに対して機能が豊富で、セキュアで汎用的なSDKを提供しており、社内でアプリ開発をする企業・組織はSDK方式に価値を見出している。

「注意点」
・PCやMacの管理機能の実績がほとんど報告されていない。報告されている反応はおおむねプラス評価だが、少数の事例では、全般的なテストやパイロット展開を計画したいとしている。
・アプリ・ラッピング機能の提供を停止したが、Appdomeとして継続提供される。モバイルアプリ管理を計画している場合、この点を考慮する必要がある。
・IDaaSなどサードパーティーの認証サービスやアクセス管理のサポートは限定的。導入済みのIDaaSと互換性があるか確認が必要。

最後に、参考までにMicrosoftとCitrixの評価も見てみる。両社はEMM分野で2016年5月に広範な提携を発表しているため、その経緯の部分も含める。

Citrix XenMobile

2017年、XenMobileを独立した製品として提供しつつ、Microsoft Intuneの移行を検討している企業や導入済み企業にXenMobileを販売するため、Microsoftと大規模な提携をした。このシナリオでXenMobileは、Intuneが端末登録(entrollment)なし設定の場合の追加ツールと位置づけられる。Citrix社のコンテナ化アプリはIntuneのMAM機能でも管理できる。

「強み」
・Microsoft Intuneの影響力拡大に対応するため、XenMobileとの連携戦略をとることで、防御的なスタンスを取っている。
・Citrix Secure Mailはいくつかの競合他社製品の追加機能と比べてプラス評価を得ている。
・NetScalerのネットワーク管理、ShareFileのデータ処理とデータ保護と密に統合され、Citrixのアプリ仮想化、デスクトップ仮想化との統合で強い製品戦略を示している。

「注意点」
・iOS 10.xとAndroidをサポートする機能に現時点でギャップがある。
・とくに小さな組織でサポート問題が指摘されている。サポートや機能要望に同社経営層との直接連絡が必要になることがあるため。
・仮想化によりデスクトップやデスクトップアプリへの接続機能は強力だが、端末管理機能は他製品より弱い。

Microsoft
2016年に、同社EMS製品への注目が大きく拡大し、機能拡張にともない導入事例も増加。”Intune in Azure Portal Preview”としてAzureへの移行が2016年12月から始まり、2017年5月には一般提供開始。これが過去の同製品の弱みに対処するマイルストーンとなった。EA契約締結ずみの組織や同社を戦略的パートナーとする組織にはよく適合する製品で、Office 365導入組織、Azure AD導入済・導入予定組織に適している。

「強み」
・Office 365モバイルアプリと独自連携が可能、同アプリデータ漏えい保護機能を直接管理可能。
・250ユーザ以上の組織でEA契約が広がっており、Intuneはライセンス面で非常に魅力的。
・Azure ADとAdvanced Threat Protectionとの強力な統合で、豊富な遠隔セキュリティ監視が利用可能。

「注意点」
・初期設定とIntuneインストールの難しさが継続して報告されているため、Microsoft FastTrackから直接支援を受けることが推奨される。
・サードパーティーのIAM製品導入済みの場合、Intuneは現時点でAzure ADの統合のみをサポートしている点に注意が必要。
・Intuneはクラウドサービスとしてのみ利用可能で、オンプレミスやハイブリットのローカルアクセス機能はない。ローカルアクセスの必要な企業は他製品の検討が必要。

オンライン生放送の悪い音質をリアルタイム・エフェクトで無理やり高音質っぽくする

上海SNH48の姉妹グループ広州GNZ48の劇場公演オンライン生放送の音質が非常に悪くて、ほぼモノラルにしか聞こえない。

そこでソフトウェア的に左右の音振りを大きくして、さらにリバーブを掛けられないかと思ってグーグル検索すると、VSTHostというものを見つけた。

VSTHost

要するにパソコンの音声入力と音声出力の間に、このVSTHostを噛ませ、このVSTHostにエフェクトを追加することで、パソコンの音声出力にエフェクトがかかった状態にするソフト。

パソコンの音声入力⇒VSTHostの音声入力⇒VSTHosのエフェクト⇒VSTHostの音声出力⇒パソコンの音声出力

筆者はWindows 10 64bitなので、上記VSTHostのダウンロードページからdvsthostx64.zipをダウンロードし、C:ドライブの適当な場所に解凍。

日本語の使い方説明はこちらの「VSTHost と ASIO4ALL で PC の音声出力に対してリアルタイムにイコライザーをかける」(『すぐに忘れる脳みそのためのメモ』2011/01/23)にある。

筆者のパソコンのCPUはIntel Core i7-6700Kのせいか、動画と音声にズレが起こることはなく、リアルタイムで正常にエフェクトがかかった。

VSTHostに追加したエフェクトはこちらの無償のMo’Verbというリバーブ・エフェクタ

ダウンロードしたZIPファイルのうち、DLLファイルだけを、先ほどVSTHostを解凍したフォルダ内にコピー。どこに置いてもいいのだが、分かりやすいようにVSTHostのフォルダ内に置いたというだけ。

そして筆者はYAMAHAの簡易ミキサーAG03をパソコンにUSB接続して、AG03のモニターからイヤホンで聴いているという特殊な環境だが、それでも問題なし。

VSTHostのメニュー[Devices]==>[Wave]の[Select Wave Devices]画面で以下の設定をする。

Input port MME: ライン(AG06/AG03)
Output port MME: ライン(AG06/AG03)
Sample Rateは44100のまま
Bufferはよく分からなかったが4410 samplesにしてみた。

次にメニュー[File]==>[New Plugin…]をクリックして、先ほどのMo’VerbのDLLファイルを開く。

これだけで即、リバーブがかかった音がパソコンから返ってくるようになる。

あとは中央のエフェクトの小さなウィンドウにあるダイヤルアイコンをクリックして、各種パラメータを調節するだけ。

リバーブはとりあえず[WET level]のレベルの大小が重要。あとはネットでReverbの解説を調べて下さい(汗)。

Mo’Verbのプリセットはメニュー[PlugIn]==>[Program0-15]や[Program16-31]や[Program32-47]から選べる。

自分で設定した状態の保存はメニュー[PlugIn]==>[Save Program As…]で適当なファイル名をつけて保存できる。

リバーブの前に低音を強調するためのイコライザーを追加したくなったので、LinearPhaseGraphicEQ 2をダウンロード。

同様にVSTHost配下のサブフォルダとして解凍。メニュー[File]==>[New PlugIn…]からダウンロードしたLPGEQ2_1.dllを開く。

このままでは、パソコン音声出力に、イコライザーの出力と、リバーブの出力が両方入るという奇妙な設定になる。

いちばん右にあるパソコンの音声出力の小さなウィンドウの左上隅にあるチェーンのアイコンをクリック。

Mo Verbだけを緑色のチェックマークをつけて有効にし、他の[Engine Input]、[LPGEQ2.1]のチェックマークを外す。

これでパソコンの音声出力に入力されるのはリバーブだけになる。

次にリバーブの小さなウィンドウの左上隅にあるチェーンのアイコンをクリック。

[LPGEG2.1]だけに緑色のチェックマークをつけて、入力をイコライザーだけにする。

最後にイコライザーの小さなウィンドウの左上隅にあるチェーンのアイコンをクリック。

[Engine Input]だけしか緑色のチェックマークで選択できないはずだが、念のため確認する。

以上で、パソコンの音声入力==>イコライザー==>リバーブ==>パソコンの音声出力という順になる。

イコライザーのパラメータ変更も、イコライザーの小さなウィンドウの小さなダイヤルのアイコンをクリックすればOK。

こちらもメニュー[PlugIn]==>[Save Program As…]で自分の設定を保存できる。

VirtualDubでmpeg4ファイルを開く方法

何の脈絡もなくいきなりの内容の記事ですが、動画編集ソフトVirtualDubは本来AVIファルしか開けないが、最近よく使われるmp4コンテナの動画を読み込めるようにする方法を、自分自身の備忘のために記事にしておく。

VirtualDub本体はこちらのSourceForgeのプロジェクトサイトからダウンロード可能

そしてmp4を読み込めるようにするプラグイン FFInputDriver は下記のサイトからダウンロード可能。
この記事を書いている時点ではVersion 1.8.4.8が最新。

http://codecpack.co/download/FFInputDriver.html

このFFInputDriverのStandalone版をダウンロード、解凍。

VirtualDubが32bit版なら解凍したフォルダ内のplugin32フォルダ、64bit版ならplugin64フォルダ内のファイルを、VirtualDubをインストールしたフォルダ配下のplugin32またはplugin64フォルダ内にコピーすればよい。

参考にしたページ: How to open .MP4 files in virtualdub? (i want to sharpen mp4 – VideoHelp Forum

VitrualDubからMP4を出力するためのCodecは下記ページからダウンロードできる。

http://www.xvidmovies.com/codec/

VirtualDubでASS形式の字幕ファイルを読み込むためのVideo Filterファイルtestsub.vdfはこちら。
正式なダウンロードサイトが不明だったため、このブログ自体にアップロードしておいた。

testsub.vdf

このファイルはVirtualDubのpluginまたはplugin32フォルダ内に単にコピーするだけで、VirtualDub起動時に自動的に字幕処理フィルタとして認識される。

ちなみに何をやろうとしているのかと言えば、下記のリンクです(汗)。

Aegisubでカラオケ字幕作成

テキスト字幕ファイル(SRT, SSA, ASS)の利用方法

Aegisubで作成したassファイルをVirtualDubに読み込ませて、最終的にavi形式で書き出す方法は下記のとおり。

1) VirtualDubを起動し、File->Open video fileでAegisubで字幕をつけるのに使った動画を開く。

2) Video->Filtersを開き「Add…」で「TextSub」フィルターを追加。「ファイルを開く」ダイアログが出るので、作成しておいたassファイルを選択。

3) VirtualDubの左下隅にある右向き三角に数字の「0」があるボタンで、完成後の字幕付き動画をプレビューできる。

4) File->Save as AVI…でファイル名を付けて保存すると、エンコードが始まるので、終わるまで待つ。

以上

Windows 10で特定フォルダ間のドラッグ・アンド・ドロップが不可能になった場合の解決法

Windows 10で少し前から奇妙な現象に多少イライラさせられていた。

たとえば自分のユーザーフォルダ配下のPicturesフォルダ内に、フォルダAとフォルダBを作成したとする。

そのフォルダAからフォルダBへ、任意の画像ファイルをカット・アンド・ペーストによる移動はできるのに、マウスのドラッグ・アンド・ドロップによる移動はできない。

その解決方法が書いてあるページが見つかった。

No drag and drop in Windows Explorer (and other oddities)
(Windows Ten Forums)

このページのGammelsmurfという人の2016/10のエントリーがその解決方法。

レジストリをいじったうえに、エクスプローラーのオプションを変更して、エクスプローラーのプロセスを再起動するという、非常に面倒なことをやって、やっとドラッグ・アンド・ドロップができるようになった。

以下、レジストリの変更は自己責任で。

簡単に翻訳すると、シェルのドラッグ・アンド・ドロップ・ヘルパーのレジストリキーは、Windows 10のレジストリの下記の位置にある。
HKEY_CLASSES_ROOT\CLSID\{4657278A-411B-11d2-839A-00C04FD918D0}

この{4657278A-411B-11d2-839A-00C04FD918D0}というキーを、ディレクトリとフォルダのシェル拡張機能で有効にすれば、ディレクトリとフォルダでドラッグ・アンド・ドロップができるようになるはず。

ということで、以下の2つのレジストリキーを追加する。キーを追加するだけでよく、値は追加する必要はない。

HKEY_CLASSES_ROOT\Directory\shellex\DragDropHandlers\{4657278A-411B-11d2-839A-00C04FD918D0}

HKEY_CLASSES_ROOT\Folder\shellex\DragDropHandlers\{4657278A-411B-11d2-839A-00C04FD918D0}

さらにエクスプローラーのクイックアクセス機能をレジストリで無効化している場合は、復活させる必要がある。

HKEY_CLASSES_ROOT\CLSID\{679f85cb-0220-4080-b29b-5540cc05aab6}\ShellFolder

このレジストリキーにあるAttributesというREG_DWORD型の値を、a0600000から初期値のa0100000に戻す。

以上のレジストリキーの追加と値の変更が終わったら、エクスプローラーを開いて、フォルダオプションを開く。

そして「全般」タブの「プライバシー」欄の「最近使ったファイルをクイックアクセスに表示する」のチェックマークをONにして、クイックアクセスをいったん有効にし、OKボタンをクリックする。

ここまでやってPCを再起動するか、タスクマネージャーからエクスプローラーのプロセスだけを再起動する。

以上、どうしてクイックアクセスを無効にしたら、同一フォルダ配下のサブフォルダ間でドラッグ・アンド・ドロップが不可能になるなんていう変なことになるのか、Windows 10の仕様が全く理解できないが、マイクロソフト製品というのは昔からそんなものなので仕方ない。