サブノート

技術的なトピックが中心の備忘録

[JavaScript][jQuery]要素の追加方法まとめ

要素の追加方法をまとめた。
以下、全て div1 エレメントを中心に追加した結果。

<div id="div0">
  <p></p>
</div>

<!-- $('#div1').before('<p>追加</p>'); -->
<!-- $('<p>追加</p>').insertBefore($('#div1')); -->

<div id="div1">

  <!-- $('#div1').prepend('<p>追加</p>'); -->
  <!-- $('<p>追加</p>').prependTo($('#div1')); -->

  <p></p>
  <div id="div1_1">
    <p>1-1</p>
  </div>
  <div id="div1_2">
    <p>1-2</p>
  </div>

  <!-- $('#div1').append('<p>追加</p>'); -->
  <!-- $('<p>追加</p>').appendTo($('#div1')); -->

</div>

<!-- $('#div1').after('<p>追加</p>'); -->
<!-- $('<p>追加</p>').insertAfter($('#div1')); -->

<div id="div2">
  <p></p>
</div>

[Windows]右クリックのメニューに追加する

右クリックメニューから、指定エディタでファイルを起動させる。
例として vivi を起動させることにする。

  1. Windowsキー+R で「ファイル名を指定して実行」を開く
  2. "regedit" と入力して、レジストリエディタを開く
  3. ツリーから [コンピュータ] → [HKEY_CLASSES_ROOT] → [*] → [shell] を選択する
  4. 右クリックメニューから [新規] → [キー] を選択する
  5. 「新しいキー #1」の名称を「viviで開く」に変更する
  6. [viviで開く]を選択し、右クリックメニューから [新規] → [キー] を選択する
  7. 「新しいキー #1」の名称「command」に変更する
  8. 「command」を選択し、右ペインの [(既定)]を選択する
  9. 右クリックメニューから [修正] を選択し、「文字列の編集」を開く
  10. 値のデータに vivi の実行ファイルと、引数を設定する。ダブルクォーテーションで囲う(例: "C:\Program Files\vivi\VIVI.EXE" "%1")
  11. レジストリエディタを閉じ、右クリックメニューで「viviで開く」が表示されることを確認する


Tips:
右クリックメニューでは、最初の文字がショートカットとなる。
「viviで開く」だと "v" 押下で選択状態になるので、1文字目は重要。
ただし、他の候補と被らなければ一発で起動するので、例えばメニュー名を "zviviで開く" にしておくと、"z" キーのみ(=Enterキー不要)で起動する。

[Eclipse][Tomcat]ThreadPoolExecutor で勝手に止まる

EclipseTomcatを使用する際、勝手にデバッグモードになる。
ThreadPoolExecutor で止まっているよう。
十数秒に一度止まるので煩わしい。

  1. メニューから[ウィンドウ]→[設定]を選択する
  2. ツリーから[Java]→[デバッグ]を選択する
  3. 「キャッチされない例外で実行を中断」のチェックを外す
  4. OKボタンを押下する

をすることで回避する。

[CSS]IE11にのみ対応する

IE11のみCSSのレイアウトが崩れる場合の対処法。

.title {
  padding : 10px 12px;
}

/* IE11 only */
@media all and (-ms-high-contrast:none) {
  *::-ms-backdrop, .title { padding : 10px 12px 6px; } 
}


調べていくと、他にも

.title {
  padding  : 10px 12px;
  padding  : 10px 12px 9px\9; /* IE10以下 */
  *padding : 10px 12px 7px;   /* IE7以下 */
  _padding : 10px 12px 6px;   /* IE6 */
}

という指定方法があるよう。

[Flash][Flex]#2032(ストリームエラー)を回避する

イントラネットサーバに置いたFlashのサイトへのアクセス時、#2032(ストリームエラー)が発生することがある。
発生するPCは全て「外部インターネットにはアクセスできない」のだが、「外部にアクセスできない」PC全てがエラー発生するわけではない。


#2032 の原因は、crossdomain.xml にアクセスするため。

ただし、PC内のキャッシュを使用すると思われる。
そのため、過去にFlashのサイトにアクセスし crossdomain.xml をキャッシュとして保持しているPCはキャッシュを使用するため #2032 エラーは発生しない。


解決策は、


前者は社内運用上難しいこともあるため、以下に後者の方法を記述する。

1. サーバに crossdomain.xml をアップロードする

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM
"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">

<cross-domain-policy>
  <allow-access-from domain="*" secure="false"/>
</cross-domain-policy>

2. そのURLを ./flex_sdk_XX.XX/frameworks/flex-config.xml に記述する

:
:
<runtime-shared-library-path>
  <path-element>libs/WWWWW.swc</path-element>
  <rsl-url>http://fpdownload.adobe.com/pub/swz/XXXXX/Y.Y.Y.YYY/ZZZZZ.swz</rsl-url>
  <!-- <policy-file-url>http://fpdownload.adobe.com/pub/swz/crossdomain.xml</policy-file-url> -->
  <policy-file-url>http://intranet.com/aaaaa/bbbbb/crossdomain.xml</policy-file-url><!-- ← イントラネットURLに書き換える -->
  <rsl-url>VVVVV.swz</rsl-url>
  <policy-file-url></policy-file-url>
</runtime-shared-library-path>
:
:


追記(2015/04/13):
crossdomain.xml 同様、いくつかのSWZファイルも同様にイントラネット上に配備し、そこにアクセスさせる必要がある。
URLは(これも crossdomain.xml 同様に) ./flex_sdk_XX.XX/frameworks/flex-config.xml に記述する。

:
:
<runtime-shared-library-path>
  <path-element>libs/WWWWW.swc</path-element>
  <!-- <rsl-url>http://fpdownload.adobe.com/pub/swz/XXXXX/Y.Y.Y.YYY/ZZZZZ.swz</rsl-url> -->
  <rsl-url>http://intranet.com/aaaaa/bbbbb/ZZZZZ.swz</rsl-url><!-- ← イントラネットURLに書き換える -->
  <policy-file-url>http://intranet.com/aaaaa/bbbbb/crossdomain.xml</policy-file-url>
  <rsl-url>VVVVV.swz</rsl-url>
  <policy-file-url></policy-file-url>
</runtime-shared-library-path>
:
:

[Eclipse]アイコンを表示する

EclipseTomcat起動/停止のアイコンを表示する。

  1. メニューから[ウィンドウ]→[パースペクティブのカスタマイズ]を選択
  2. [コマンド・グループの可用性]タブを選択
  3. Tomcat をチェック
  4. OKボタンを押下

[GAE]メール送信者を設定する

GoogleAppEngineにおいて、デフォルトのメール送信者は管理者のみ。
管理者以外のアドレスを送信者に設定すると、エラーが発生する。

Message message = new Message();

message.setSender("from@gmail.com");  //管理者以外はエラー
message.setTo("to@tmp.com");          //宛先アドレス
message.setSubject("○○○");            //件名
message.setTextBody("△△\n□□□□");    //内容

MailServiceFactory.getMailService().send(message);


送信者を追加登録する場合は、

  1. 管理者コンソールを開く → Google Developers Console
  2. 対象プロジェクトを選び、[権限]を選択する
  3. メンバーを追加する。権限は「閲覧可能」でOK

の操作を行う。

メンバー追加時に招待メールが届き、参加承認確認後に送信者として使用可能となる。

[コマンドプロンプト]フォルダ構成を表示する

コマンドプロンプトで、カレントディレクトリ以下のフォルダ構成(ファイル名込み)を一覧する

> tree /f

フォルダー パスの一覧:  ボリューム XXXXXXXX
ボリューム シリアル番号は 00000000 ABCD:1234 です
C:.
│  test01.psyexp
│  test01_lastrun.py
│
├─condition
│      performance_1.csv
│      performance_2.csv
│      performance_3.csv
│      performance_4.csv
│
├─data
│      id_1.csv
│      id_1.log
│      id_1.psydat
│      id_1.xlsx
│      id_2.csv
│      id_2.log
│      id_2.psydat
│      id_2.xlsx
│      id_2_1.csv
│      id_2_2.csv
│      id_2_3.csv
│      id_2_4.csv
│
└─img
        img_a.png
        img_b.png
        img_c.png
        


ファイルに書き込む時は

> tree /f > tmp.txt

でOK。

[MySQL]FROM句のサブクエリ

レジのデータテーブルから、データを取得する。

table  :register
columns:register_id, waiting, ...

レジ待ちしている人数毎のレジ数を一覧する。

> select waiting, count(*) as cnt from register group by waiting;

+---------+-----+
| waiting | cnt |
+---------+-----+
|       0 | 334 | -> 待ち人数なし
|       1 | 109 | -> 待ち人数1のレジが109個
|       2 |  73 | ->  :
|       3 |  31 | 
|       4 |   9 | 
|       5 |  11 | 
|       6 |   3 | 
|       7 |   3 | 
|       9 |   2 | ->  :
|      12 |   1 | -> 待ち人数12のレジが1個
+---------+-----+



レジ待ち人数の総計を計算する1

> select waiting, count(*) as cnt, waiting * cnt from register group by waiting;

ERROR 1054 (42S22): Unknown column 'cnt' in 'field list'

waiting と cnt を掛けたいのだが、cnt は認識されない。



レジ待ち人数の総計を計算する2

> SELECT waiting * cnt from (select waiting, count(*) as cnt from register group by waiting);

ERROR 1248 (42000): Every derived table must have its own alias

FROM句のサブクエリを使用したが、エイリアスが必要と言われる。



レジ待ち人数の総計を計算する3

> SELECT waiting * cnt from (select waiting, count(*) as cnt from register group by waiting) as t;

+---------------+
| waiting * cnt |
+---------------+
|             0 | 
|           109 | 
|           146 | 
|            93 | 
|            36 | 
|            55 | 
|            18 | 
|            21 | 
|            18 | 
|            12 | 
+---------------+

エイリアス(as t)を追加することで、cnt を使用した計算が可能となった。



レジ待ち人数の総計を計算する4

> SELECT sum(waiting * cnt) as sum from (select waiting, count(*) as cnt from register group by waiting) as t;

+-----+
| sum |
+-----+
| 508 | 
+-----+

sum() で総計を表示する。





追記:

上記「レジ待ち人数の総計を計算する3」は単純に以下でもできた。

> select waiting * count(*) as cnt from register group by waiting;

+-----+
| cnt |
+-----+
|   0 | 
| 109 | 
| 146 | 
|  93 | 
|  36 | 
|  55 | 
|  18 | 
|  21 | 
|  18 | 
|  12 | 
+-----+