2015年12月17日木曜日

Firefox43 がリリースされました

2015年12月16日に Firefox43.0 がリリースされました。

2015年12月18日に Firefox43.0.1 がリリースされました。

2015年12月23日に Firefox43.0.2 がリリースされました。

2015年12月28日に Firefox43.0.3 がリリースされました。

2016年01月06日に Firefox43.0.4 がリリースされました。

デスクトップ版 Firefox のダウンロード
http://www.mozilla.jp/firefox/download/
デスクトップ版 Firefox のリリースノート
http://www.mozilla.jp/firefox/43.0/releasenotes/
http://www.mozilla.jp/firefox/43.0.1/releasenotes/
http://www.mozilla.jp/firefox/43.0.2/releasenotes/
http://www.mozilla.jp/firefox/43.0.3/releasenotes/
http://www.mozilla.jp/firefox/43.0.4/releasenotes/

新機能では

プライベートブラウジングのトラッキング保護機能で使用するブロックリストを変更できるようになりました。デフォルトのトラッキング保護機能では「基本保護リスト」を使用していますが、さらに厳格に保護したい場合は、「厳格保護リスト」に切り替えることができます。

さらに詳しく

ロケーションバーの入力時に、補完リストにマッチした検索候補の一覧を表示するようになりました。

さらに詳しく

そのほかの新機能の詳細はリリースノートをご覧ください。



デスクトップ版 Firefox の開発ツールに追加された機能



インスペクタ

ルールビューの検索条件に「検索キーワードに完全一致」が追加されました。

この機能で検索するには検索キーワードを`バッククォートで囲みます。

例えば検索キーワードに`color` と入力すると、colorに完全一致するプロパティだけをハイライトします。

さらに詳しく


疑似クラスが適用されたすべてのノードをマーク

ルールビューで疑似クラスを設定すると、疑似クラスを適用していることを示す橙色の丸印を マークアップビューの関連するノードに表示します。

さらに詳しく


オーバーライドされたプロパティを簡単に探す機能が追加されました。

この機能を使うにはオーバライドされたプロパティの横の虫眼鏡のアイコンをクリックします。一致するプロパティだけがハイライトされるので、どこでオーバーライドされたのか簡単に確認できます。

さらに詳しく


アニメーションインスペクタのUIが改良されました。


さらに詳しく


選択したノードを変数から参照する機能が追加されました。

この機能を使うには、インスペクタの HTML ペインでノードを選択後、コンテキストメニューの "コンソールで使う" をクリックします。このとき表示されるスプリットコンソールの中で、選択したノードが変数に代入された状態になります。ここでの変数名はtemp0が割り当てられます。この変数名が既に使用中の場合は、変数名の数値部分が連番で付与されます。

つぎの例では、ノード<h1>いまだかつて無いほどに速い</h1>を選択後、変数temp1に代入されたノードのtextContentプロパティを表示しています。再び同じ操作を行なうと、ノードが新しい変数temp2に代入された状態で待機していることがわかります。

さらに詳しく



Webコンソール

ネットワーク項目内のメッセージをクリックするとネットワークモニタに移動します。

ネットワークモニタではメッセージに該当するリクエストの詳細や、レスポンスの情報を表示します。

さらに詳しく


サーバから送信されたメッセージを Web コンソールで表示できるようになりました。

Webコンソールにサーバーログを表示するには、フィルタリングでサーバーをアクティブにします。

さらに詳しく



ツールボックス

開発ツールのオプション設定へのショートカットキーF1が追加されました。

ツールボックスにフォーカスがある状態で、F1キーの押下でツールボックスのオプション設定ペインが開きます。再度F1キーの押下で元のツールペインに戻ることができます。

さらに詳しく



開発ツールバー

screenshotコマンド

開発ツールバーでスクリーンショットを取得する際に、device Pixel Ratio を指定できるようになりました。

コマンドの補完候補に--dpi Dots/inchが表示されますが、実はこのオプションは--dpiではなく、正しくは--dpr 端末のピクセル比(device pixel ratio)の間違いのようです。

Firefox Developer Edition 44.0a2で確認すると--dprの補完候補が表示されます。

実際に Firefox 43 のscreenshot --dpi 1コマンドと、Firefox Developer Edition 44.0a2 のscreenshot --dpr 1コマンドで確認すると、同じサイズの画像を取得できます。


security referrerコマンド

セキュリティコマンドは、Webサイトのセキュリティ情報を表示するコマンドです。
今回追加されたsecurity referrerコマンドはWebサイトのリファラーポリシーを表示します。

さらに詳しく



ネットワークモニタ

リクエストのセキュリティ状態を表すアイコンをドメイン名の先頭に表示します。


さらに詳しく

2015年12月11日金曜日

再発生:Windows UpdateでCPUの使用率が長時間100%になる

windows update スタンドアロンインストーラを使う

月例 Windows Update を行なうと CPU の使用率が長時間 100% になる現象が再発しています。確か 2 年前の今頃も同じような現象が起こった事を思い出しました。今回の発生対象も前回と同様に、シングルコア CPU の PC だけのようです。

2 年前に Windows XP でこの被害を受けた PC は、現在は Windows 7 に入れ替えています。主に軽い処理担当として今でも元気に活躍しているのですが、シングルコアの為 CPU 使用率が長時間 100% になると「とても」使いづらくなります。そこで、前回の記録を参考にして更新プログラムの手動インストールを行なってみました。

手動インストールの手順

今回の使用環境は windows 7 Home 32-bit です。OS バージョンが違う環境では、この方法で改善できないかも知れませんので注意してください。また、OS バージョンが違う環境では、その環境に合わせた更新プログラムが必要であることにも注意してください。

更新プログラムは以前よりも探しやすくなっていますが、以前のように「Internet Explorer 用の累積的なセキュリティ更新プログラム」の手動インストールだけでは解決せず、今回は、「リモートでのコード実行に対処する Microsoft Graphics コンポーネント用のセキュリティ更新プログラム (3104503)」の手動インストールも必要でした。

  1. Windowsの自動更新を無効にする

    自動更新が始まるとSvchost.exeの CPU 使用率が 100% になってしまいます。このままでは操作に支障をきたすため、一時的な措置として Windows の自動更新を無効に設定します。

  2. 更新プログラムを取得

    1. マイクロソフトのセキュリティパッチ情報

      マイクロソフトの セキュリティ TechCenter の web サイトに行き最新セキュリティ情報から、適用する更新プログラムの情報を調べます。項目のタイトル名は、例えば今月(2015年12月)なら「2015 年 12 月のセキュリティ情報」です。

      2015 年 12 月のマイクロソフト セキュリティ情報の概要:
      https://technet.microsoft.com/ja-jp/library/security/ms15-dec.aspx

    2. ページ内の「影響を受けるソフトウェア 」セクションまでスクロールして、「Windows オペレーティング システムとコンポーネント (表 1/2)」一覧表内の自分の使用環境の OS 項目を探します。

      例えば、使用環境が windows 7 32-bit, Internet Explorer 11 の場合、「セキュリティ情報 ID」の「MS15-124」と「MS15-128」のリンクから、それぞれのセキュリティ情報の詳細ページへ移動して更新プログラムを取得します。

    3. セキュリティ情報の詳細ページ内の「影響を受けるソフトウェア」セクションの一覧表の中から、自分の環境に合ったダウンロード対象のリンクを探します。

      例えば、「マイクロソフト セキュリティ情報 MS15-124」では、「Internet Explorer 11」の項目から「Windows 7 for 32-bit Systems Service Pack 1」を探します。

      ここで「Internet Explorer 11 (KB3104002)」のリンクをクリックすると、ダウンロードセンターに移動して更新プログラムを取得できます。

      Windows 7 用 Internet Explorer 11 の累積的なセキュリティ更新プログラム (KB3104002) from Official Microsoft Download Center:
      https://www.microsoft.com/ja-jp/download/details.aspx?id=50346

      私の環境用のダウンロードファイルはIE11-Windows6.1-KB3104002-x86.msuでした。

      つづいて「MS15-128」も同様に取得します。「マイクロソフト セキュリティ情報 MS15-128」では「Windows 7」の項目から「Windows 7 for 32-bit Systems Service Pack 1 (3109094)」を探します。

      ここで「Windows 7 for 32-bit Systems Service Pack 1 (3109094)」のリンクをクリックすると、ダウンロードセンターに移動して更新プログラムを取得できます。

      Windows 7 用セキュリティ更新プログラム (KB3109094) from Official Microsoft Download Center:
      https://www.microsoft.com/ja-jp/download/details.aspx?id=50311

  3. 更新プログラムを手動インストール

    ダウンロード後、ファイルを実行すると 「windows update スタンドアロンインストーラ」が起動して更新プログラムのインストールが始まります。ここでは、更新プログラム毎にファイルを実行してインストールを行ないます。

  4. Windowsの自動更新を有効に戻す。

    更新プログラムをインストール後、PC を再起動します。再起動後に自動更新の設定を有効に戻します。

  5. 自動更新を行う。

    この後、残りの更新プログラムをインストールするため Microsoft Update を実行して通常の自動更新を行います。

少し手間がかかりますが、今月はこの方法でうまくいきました。

2015年12月3日木曜日

Marked.js の GFM table の不具合を修正する

右下の空白セルが表示されない

このようなテーブルを書くと右下のセルが表示されません。


|Header 1|Header 2|Header 3|
|--------|--------|--------|
|1       |2       |        |

Marked.js のコードを見ると GFM テーブルは「両側のパイプ無し」と「パイプ有り」に分けて処理されているようです。

参照: marked.js#L93 | GitHub


/**
 * GFM + Tables Block Grammar
 */

block.tables = merge({}, block.gfm, {
  nptable: /^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,
  table: /^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/
});

上図テストケースでは table1, table2 が「table: パイプ有り」、 table3 が「nptable: 両側のパイプ無し」にマッチします。

右下のセルが欠落する関係箇所は Lexer のtable (gfm)の部分の 388 行目があやしそうです。
参照: marked.js#L388 | GitHub

Firefox の web コンソールで確認


>> "|1       |2       |        |\n".replace(/(?: *\| *)?\n$/, '').split('\n')
<- Array [ "|1       |2       |" ]

これなら良さそう


>> "|1       |2       |        |\n".replace(/\n$/, '').split('\n')
<- Array [ "|1       |2       |        |" ]

これで table1 の表示ができるようになりましたが、右端のパイプを省略する書式の table2 では効果がありません。 table1 と table2 の両方の書式で動作できるようにと、あれやこれやと正規表現と格闘しながら試してみました。

調べてみると、この不具合は atom/markdown-preview の Issue にもあがっていました。

marked の Pull Request にもパッチが投げられているのを見つけました。

このPull Request #357は 2 Mar, 2014 に投げられたものの未だ取り込まれていないようです。テストしてみると table2 の書式の不具合が改善できませんでした。



押してもだめなら引いてみよう

少し発想を転換して 「右端のパイプが無かったら追加すれば良い!」 作戦を試したところうまくいきました。

どのテーブルも正しく描画できています。

修正箇所

marked.js の 380 行目以降の table (gfm) Lexer を修正します。


  // table (gfm)
    if (top && (cap = this.rules.table.exec(src))) {
      src = src.substring(cap[0].length);

      item = {
        type: 'table',
        header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */),
        align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
        cells: cap[3].replace(/\n$/, '').split('\n')
      };

      for (i = 0; i < item.align.length; i++) {
        if (/^ *-+: *$/.test(item.align[i])) {
          item.align[i] = 'right';
        } else if (/^ *:-+: *$/.test(item.align[i])) {
          item.align[i] = 'center';
        } else if (/^ *:-+ *$/.test(item.align[i])) {
          item.align[i] = 'left';
        } else {
          item.align[i] = null;
        }
      }

      for (i = 0; i < item.cells.length; i++) {
        if (!item.cells[i].match(/\|$/)) {
          item.cells[i] = item.cells[i] + "\|";
        }
        item.cells[i] = item.cells[i]
          .replace(/^ *\| *| *\| *$/g, '')
          .split(/ *\| */);
      }

      this.tokens.push(item);

      continue;
    }


--- C:/TW/lib/marked.js Fri Jul 31 02:38:48 2015
+++ C:/TW/new/marked.js Thu Dec 03 02:38:34 2015
@@ -388 +388 @@
-        cells: cap[3].replace(/(?: *\| *)?\n$/, '').split('\n')
+        cells: cap[3].replace(/\n$/, '').split('\n')
@@ -403,0 +404,3 @@
+        if (!item.cells[i].match(/\|$/)) {
+          item.cells[i] = item.cells[i] + "\|";
+        }

本家にパッチを投げてみました。 Fix a bug in does not display of the table cell if it empty. #697