Thunderbirdアドオンの作り方(その6:要素を調べる)

February 15,2018 12:03 AM
Category:[開発]
Tag:[]
Permalink

Thunderbirdアドオンの作り方について解説します。その6は要素の調べ方です。

1.アドオンで機能を追加する場所

アドオンで機能を追加するには、追加する場所の要素名やid属性が必要です。

たとえば先日公開したアドオンでは、ツールバーにボタンを追加しましたが、XULファイルに下記の設定を行うことで実現しています。

<toolbar id="mail-bar3">
  <toolbarbutton id="button-new-reply" label="&replynew.label;" class="toolbarbutton-1" tooltiptext="&replynew.tooltip;" removable="true" oncommand="ReplyNew(this)" />
</toolbar>

この中に含まれる、toolbar要素および、"mail-bar3"というid属性

<toolbar id="mail-bar3">
 :
</toolbar>

を知るには、どうやって調べればいいのでしょうか。

ということで、要素の調べ方を紹介します。

2.要素の調べ方

要素を調べるには、

の2つのアドオンを利用します。

DOM Inspectorだけでも要素の調査は可能ですが、ツリーを展開しないといけないので、選択した要素を直接調査できるInspectorWidgetと連携させる方法がおすすめです。

3.アドオンのインストール

上記URLにある「今すぐダウンロード」をクリックしてアドオンをダウンロード。

今すぐダウンロード

Thunderbirdの「ツール」→「アドオン」をクリック。

アドオン

「ファイルからアドオンをインストール」をクリック。

ファイルからアドオンをインストール

ダウンロードしたxpiファイルを選択して「今すぐインストール」をクリック。

xpiファイルを選択

「今すぐ再起動する」をクリック。

今すぐ再起動する

再起動後、インストールされます。

InspectorWidgetについても同様の手順でインストールしてください。

4.アドオンの設定

続いてInspectorWidgetボタンをThunderbird上に表示させます。

「ツール」→「オプション」→「ツールバーのカスタマイズ」をクリック。

ツールバーのカスタマイズ

「Inspect」と表示されたアイコンをツールバーの任意の位置にドラッグ&ドロップ。

ドラッグ&ドロップ

「Inspect」アイコンが表示されれば準備完了です。

準備完了

5.要素の調査

「Inspect」をクリック。

Inspect

要素を知りたい部分をクリック。ここでは先日のアドオンで追加した「アドレス宛に作成」をクリック。

アドレス宛に作成

DOM Inspector画面が開き、クリックした部分の要素までツリーを展開してくれます。

DOM Inspector画面

左ペインのツリーから追加したボタン(toolbarbox要素)の親要素がtoolbar、id属性値が"mail-bar3"であることが分かります。

ツリー

右ペインには、オーバーレイするXULのNamespaceURIや、追加したボタンの情報が表示されます。

右ペイン

左ペインの任意の位置をクリックすればウィンドウの該当位置が赤枠で点滅されるので、そこから判断することも可能です。

Comments [0] | Trackbacks [0]

Thunderbirdアドオンの作り方(その5:ローカライズ)

February 9,2018 12:03 AM
Category:[開発]
Tag:[Thunderbird]
Permalink

Thunderbirdアドオンの作り方について解説します。その5はローカライズです。

1.設定ファイルの配置

ローカライズのための設定ファイルは、まずロケールプロバイダです。

test@hoge.com
├chrome
│ └ test.manifest★

その2:chrome.manifest」で解説しましたが、再掲しておきます。

test.manifest

locale test ja locale/ja/ locale test en locale/en/

次に「その3:コンテントプロバイダ - XUL」で解説したとおり、XULにロケールを設定します。

test@hoge.com
├chrome
│ ├ content
│ │ ├ test.xul★

<!DOCTYPE overlay SYSTEM "chrome://test/locale/menu.dtd">

この設定により、

chrome/locale/ja/menu.dtd

のファイルが読み込まれます。

最後に、DTDファイルを次のように配置します。

test@hoge.com
├chrome
│ ├ locale
│ │ ├ en
│ │ │ └ menu.dtd★
│ │ └ ja
│ │ └ menu.dtd★

2.ローカライズデータのフォーマット

chrome/locale/ja/menu.dtd

に、ローカライズデータとして下記の1行を記述します。

<!ENTITY test.label "テスト">

フォーマットはDTDに従い、

<!ENTITY 翻訳元データ "[翻訳データ]">

となります。

この場合、"test.label"という表記があれば、"テスト"にローカライズします。

3.ローカライズ

サンプルで行っているローカライズは、赤色で示したボタンのラベル名で、下記の"&test.label;"の部分で行なっています。

  <toolbar id="mail-bar3">
    <toolbarbutton id="button-new-reply" label="&test.label;" class="toolbarbutton-1" tooltiptext="Reply but new" position="3" removable="true" oncommand="foo(this)" />
  </toolbar>

ローカライズしたい部分を"&"と";"で括ります。

"test.label"だけではローカライズされないので注意してください。

4.文字コード

menu.dtdの文字コードは必ずUTF-8にしてください(これに気がつくのにかなり時間を要しました笑)。

5.注意事項

ローカライズが正常に行われない場合、機能自体が動作しなくなるケースがありますので、ローカライズの設定は最後に行うことをおすすめします。

Comments [0] | Trackbacks [0]

小粋空間のプラグイン購入でクレジットカード決済が可能になりました

February 8,2018 12:03 AM
Category:[Paypal]
Tag:[PayPal]
Permalink

小粋空間のプラグインご購入時のお支払にPayPalを利用させてもらってますが、このたびクレジットカードおよびデビッドカード決済も可能になりました。

たとえばWorkflowプラグイン購入のページは、次のようにクレジットカードの表示が加わっています。

CSVDataImExporterプラグインなどはこれまでの表示のままですが、

クリックすれば、PayPalログイン画面の下に「クレジットカードまたはデビッドカードで支払う」が表示されるので、クレジットカードまたはデビッドカードでの決済を行いたい場合はこのリンクをクリック。

クレジットカードまたはデビッドカードで支払う

クレジットカードでの決済画面に切り替わります。

ちなみにクレジットカードが使えるようになったのは、ビジネスアカウントに切り替えたことによるものです。

ビジネスアカウントに切り替えるとクレジットカード決済ができるようになることに気がつかず、しばらく放置してました(笑)。

ちなみにペイパルでの売上高が一定基準に達し、PayPalからビジネスサポートも受けれるようになりました。

ビジネスアカウントの切り替えやクレジットカードを利用可能にする設定の変更でビジネスサポート(メール)を早速利用させてもらったのですが、あまりの神対応に驚きました。

ビジネスサポートが利用可能な方は是非一度使ってみてください。

ということで引き続きよろしくお願い致します。

Comments [0] | Trackbacks [0]

Thunderbirdアドオンの作り方(その4:JavaScript)

February 7,2018 12:03 AM
Category:[開発]
Tag:[Thunderbird]
Permalink

Thunderbirdアドオンの作り方について解説します。その4はJavaScriptです。

これまでと同様、サンプルを使ってファイルの設定内容について解説します。

サンプルは「その1」からダウンロードできます。

1.サンプル

test.jsに次の3行を追加します。

function foo(event) {
    alert("OK");
}

表示されたボタンをクリックすると、JavaScriptのalertが表示されます。

Thunderbirdアドオン

このように、ブラウザと似たような感覚でJavaScriptを動作させることができます。

2.サンプル2(ステータスバーに時計を表示)

もうひとつ、公式サイトのサンプル(ステータスバーに時計を表示)を使って解説します。

Building a Thunderbird extension 6: Adding JavaScript

サンプルのtest.xulのoverlay要素を下記の赤色に書き替えます。

<overlay id="sample" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
  <statusbar id="status-bar">
    <statusbarpanel id="my-panel" label="Date"/>
  </statusbar>
  <script type="application/x-javascript" src="test.js" />
</overlay>

赤色の3行はステータスバーへの追加を行います。

そしてサンプルのtest.jsに下記を追加します。

window.addEventListener("load", function(e) { 
    startup(); 
}, false);
 
window.setInterval(
    function() {
        startup(); 
    }, 1000);
 
function startup() {
    var myPanel = document.getElementById("my-panel");
    var date = new Date();
    var day = date.getDay();
    var dateString = date.getFullYear() + "." + (date.getMonth()+1) + "." + date.getDate() + " " + ('0' + date.getHours()).slice(-2) + ":" + ('0' + date.getMinutes()).slice(-2) + ":" + ('0' + date.getSeconds()).slice(-2);
    myPanel.label = "Date: " + dateString;
}

"window.addEventListener()"はThunderbirdが立ち上がった時点で起動されるイベントハンドラです。

イベントハンドラが起動されることによってstartup()を起動し、現在時刻を取得して表示します。

そのあとはwindow.setIntervalで1000ms周期でstartup()を起動し、時刻を更新します。

これでThunderbirdを再起動すれば、ステータスバーに時計を表示します。

Thunderbirdアドオン

3.その他

Thunderbird上でJavaScriptを動かす感覚は上記のサンプルでお分かりになったと思います。

が、実践的な拡張機能の実装について、これだけの情報では不十分だと思いますので、Thunderbird拡張機能の実装について参考になりそうな情報があれば別記事で紹介したいと思います。

Comments [0] | Trackbacks [0]

Thunderbirdアドオンの作り方(その3:コンテントプロバイダ - XUL)

February 6,2018 12:03 AM
Category:[開発]
Tag:[Thunderbird]
Permalink

Thunderbirdアドオンの作り方について解説します。その3はコンテントプロバイダのXULです。

サンプルでは1つのXULファイルを提供しているので、サンプルを使ってファイルの設定内容について解説します。

サンプルは「その1」からダウンロードできます。

1.XULとは

XUL(ズール:XML User Interface Language)とは「ユーザインタフェースを記述するための言語」です。

サンプルのXULは次のようになっています。

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://test/skin/test.css" type="text/css"?>
<!DOCTYPE overlay SYSTEM "chrome://test/locale/menu.dtd">
<overlay id="sample" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
  <toolbar id="mail-bar3">
    <toolbarbutton id="button-new-reply" label="&test.label;" class="toolbarbutton-1" tooltiptext="Reply but new" position="3" removable="true" oncommand="foo(this)" />
  </toolbar>
  <script type="application/x-javascript" src="test.js" />
</overlay>

ごちゃっとしていて分かりにくいですが、キモとなる部分は下記の4行です。

  <toolbar id="mail-bar3">
    <toolbarbutton id="button-new-reply" label="&test.label;" class="toolbarbutton-1" tooltiptext="Reply but new" position="3" removable="true" oncommand="foo(this)" />
  </toolbar>
  <script type="application/x-javascript" src="test.js" />

この部分でThunderbirdにボタンを表示します。

HTMLを知っている方であればとっつきやすいのではないかと思います。

それでは各要素について解説します。

1.XML宣言

XULはXMLなので、1行目にXML宣言を記載します。

<?xml version="1.0"?>

2.xml-stylesheet宣言

コンテントプロバイダで利用するスタイルシートを設定します。スタイルの設定が必要なければこの行は不要です。

<?xml-stylesheet href="chrome://test/skin/test.css" type="text/css"?>

href属性は"chrome://test/skin/test.css"となっていて、拡張機能のディレクトリ構造に示す、

test@hoge.com
├chrome
│ ├ skin
│ │ ├ test.css★

を指していますが、パスそのものを指定している訳ではなく、

  • test:chrome.manifestに記述したパッケージ名(どのプロバイダのパッケージかはこの時点では不明)
  • skin:スキンプロバイダ

の2つによって、chrome.manifestの

skin test classic/1.0 chrome/skin/

を参照し、href属性の"test/skin"の部分を"chrome/skin/"に変換します。

つまり、

chrome://test/skin/test.css

chrome/skin/test.css

を指していることが分かります。

3.DOCTYPE宣言

ロケールを設定します。ロケールの設定が必要なければこの行は不要です。

<!DOCTYPE overlay SYSTEM "chrome://test/locale/menu.dtd">

"chrome://test/locale/menu.dtd"の部分はさきほどのスキンプロバイダと同様、

  • test:test.manifestに記述したパッケージ名(どのプロバイダのパッケージかはこの時点では不明)
  • locale:ロケールプロバイダ

ですが、ユーザーに最適なローカライズ(ここでは日本語)を行うので、

test.manifest

locale test ja locale/ja/

が読み込まれ、"test/locale"の部分を"locale/ja/"に変換します(1階層上の"chrome"はchrome.manifestから継承)。

つまり、

chrome://test/locale/menu.dtd

chrome/locale/ja/menu.dtd

を指していることが分かります。

4.overlay要素

その2:chrome.manifestで解説したとおり、コンテントプロバイダは「既存のXULにオーバーレイする」ということなので、オーバーレイしたい内容をこの要素で括ります。

<overlay id="sample" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 :
</overlay>

id属性は任意の値、xmlns属性は固定値らしいので、ここに記載された内容をそのまま利用します。

5.toolbar要素

toolbar要素は、Thunderbirdの「受信」「作成」「返信」などのメニューが並んでいるツールバーを指します。

6.toolbarbutton要素

toolbarbutton要素はツールバーの中のボタンを指します。

各属性の意味は次のとおりです。

  • id:任意のid属性値
  • label:ボタン表示のテキスト(&やセミコロンの意味は別途)
  • class:任意のclass属性値
  • tooltiptext:ツールチップ
  • removable:カスタマイズ可否(true:可/false:不可)
  • oncommand:ボタンクリック時に起動する関数

7.script要素

oncommand属性で起動する関数やイベントハンドラなど、動作させるJavaScriptファイルをここに記述します。

  <script type="application/x-javascript" src="test.js" />

8.要素を探す方法

サンプルではツールバーの要素がtoolbarやtoolbarbuttonと分かっている状態で説明しましたが、そもそも機能追加したい部分の要素がわからないと開発できません。

要素を知るには、DOM InspectorとInspectorWidgetをペアで利用することをおすすめします(詳細は割愛)。

あるいは、開発したい部分の他の拡張機能をダウンロードして解析する手もあるでしょう。

ちなみにステータスバーは次のようなXULになります。

<statusbar id="status-bar">
    <statusbarpanel id="my-panel" label="Date"/>
</statusbar>

メニューバーは次のようなXULになります。

<menubar id="mail-menubar">
    <menu label="foo">
        <menupopup id="foo-popup">
            <menuitem label="aaa"/>
            <menuitem label="bbb"/>
            <menuitem label="ccc"/>
        </menupopup>
    </menu>
</menubar>
Comments [0] | Trackbacks [0]

Thunderbirdアドオンの作り方(その2:chrome.manifest)

February 1,2018 12:03 AM
Category:[開発]
Tag:[Thunderbird]
Permalink

Thunderbirdアドオンの作り方について解説します。その2はchrome.manifestです。

簡素なアドオンであればこのファイルには数行しか記述しないのですが、ファイルや記述する内容の意味を理解していれば開発がスムーズに進むと思うので、少し詳しく解説します。

サンプルは「その1」からダウンロードできます。

1.chromeとは

そもそもファイル名に使われている「chrome」とは何でしょうか。

chromeとは、アプリケーションウィンドウのコンテンツ領域の外側にあるユーザインタフェース要素のセットを指します。

たとえば、ツールバー・メニューバー・プログレスバー・タイトルバーなどがchromeのユーザインタフェース要素になります。

Thunderbirdでは、拡張機能をインストールしたあと、拡張機能のルートディレクトリに配置したchrome.manifestを読み込みます。

2.chromeプロバイダ

Thunderbirdのウィンドウに対し、ツールバーに表示する画像やテキストファイルなど、ブラウザに供給する元になるものをchromeプロバイダと呼びます。

chromeプロバイダには下記の3種類があります。

  • コンテントプロバイダ:ウィンドウを記述するための主要なソースファイル(ウィンドウやダイアログを記述するXULやユーザインタフェイスを定義するJavaScript)
  • ロケールプロバイダ:全てのローカライズのための情報(DTDまたはJavaプロパティ)
  • スキンプロバイダ:視覚的な外観を記述するための完全なファイルセット(CSS/画像)

説明がわかりにくいですが、要するに下記のディレクトリ構造に示す★部分にそれぞれが該当するということです。

test@hoge.com
├chrome
│ ├ content★
│ │ ├ test.xul
│ │ └ test.js
│ ├ locale★
│ │ ├ en
│ │ │ └ menu.dtd
│ │ └ ja
│ │ └ menu.dtd
│ ├ skin★
│ │ ├ test.css
│ │ └ test.png
│ └ test.manifest
├ chrome.manifest
└ install.rdf

3.chromeレジストリ

chromeレジストリは、後述するパッケージ名からパッケージのディスク上の物理的な位置へのマッピングを記述したものです。

chromeレジストリには、テキスト形式のマニフェストファイルが使用されます。 これがchrome.manifestです。

3つのプロバイダに対応する、chromeレジストリのフォーマットは次の通りです。

コンテントプロバイダ

content パッケージ名 path/to/files

この行が読み込まれることでコンテントパッケージがThunderbirdに登録されます。

具体的には、chrome://パッケージ名/content/... によって参照された場合にファイルシステム上の場所を解決するための情報が登録されます。

URIは絶対パスか、chrome.manifestからの相対パスを指定します。URIの末尾は"/"で終了します。

サンプルでは

content test chrome/content/

となっており、パッケージ名が「test」、URIは"chrome/content/"となっています。

これで

test@hoge.com
├chrome
│ ├ content★

の位置が登録されます。

ロケールプロバイダ

locale パッケージ名 ロケール名 path/to/files

この行が読み込まれることでロケールパッケージがThunderbirdに登録されます。

具体的には、chrome://パッケージ名/locale/... によって参照されるロケールパッケージを登録します。

ロケール名は、「ja」「en」のように言語だけの識別子か、「ja-JP」「en-US」のような「言語-国」の識別子です。

パッケージに複数のロケールが登録されている場合、chromeレジストリは利用者に最適なロケールを選択して利用します。

サンプルでは後述するmanifestで、

manifest chrome/test.manifest

とし、1階層下にあるtest.manifestで

locale test ja locale/ja/
locale test en locale/en/

としています。

パッケージ名が「test」、ロケールは「ja」「en」、jaのURIは"locale/ja/"、enのURIは"locale/en/"となっています。

これで

test@hoge.com
├chrome
│ ├ locale
│ │ ├ en★
│ │ └ ja★

の位置が登録されます。

chrome.manifestに下記のように直接定義することもできます。

locale test ja chrome/locale/ja/
locale test en chrome/locale/en/

スキンプロバイダ

skin パッケージ名 テーマ名 path/to/files

この行が読み込まれることでスキンパッケージがThunderbirdに登録されます。

具体的には、chrome://パッケージ名/skin/... によって参照されるスキンパッケージを登録します。

サンプルでは

skin test classic/1.0 chrome/skin/

となっており、パッケージ名が「test」、テーマ名が「classic/1.0」、URIは"chrome/skin/"となっています。

これで

test@hoge.com
├chrome
│ ├ skin★

の位置が登録されます。

パッケージに複数のスキンが登録されている場合、利用者に最適なスキンを選択して利用します。

上記プロバイダの他、サンプルでは下記の2種類のレジストリがあります。

XULオーバーレイ

コンテントプロバイダではXULファイルを使ってウィンドウのインタフェース要素(ツールバー・メニューバー・プログレスバー・タイトルバー)を定義しますが、Thunderbirdの既存XULにオーバーレイするという形をとります。

そのためにこのXULオーバーレイの記述が必要になります。

フォーマットは次の通りです。

overlay chrome://オーバーレイが適用されるURI chrome://適用するオーバーレイのURI

サンプルでは、

overlay chrome://messenger/content/messenger.xul chrome://test/content/test.xul

となっており、"chrome://messenger/content/messenger.xul"はThunderbirdのメインウィンドウを指します。

これにより、Thunderbirdがmessenger.xulを読み込んだ際、messenger.xulの中にtest.xulを統合することを伝えます。

XULの種類については下記のURLで確認できます(どのXULがどのウィンドウに対応しているかは不明)。

mailnews - DXR

manifest(追加のマニフェストファイルを読み込み)

前述したロケールプロバイダで利用したレジストリで、フォーマットは次の通りです。

manifest サブディレクトリ /foo.manifest

4.サンプル

ということで、サンプルのchrome.manifestおよび、chromeフォルダ配下のtest.manifestは次のようになります。

chrome.manifest

content test chrome/content/
overlay chrome://messenger/content/messenger.xul chrome://test/content/test.xul
manifest chrome/test.manifest
skin test classic/1.0 chrome/skin/

test.manifest

locale test ja locale/ja/
locale test en locale/en/
Comments [0] | Trackbacks [0]

Thunderbirdアドオンの作り方(その1:概要とinstall.rdf)

January 30,2018 12:03 AM
Category:[開発]
Tag:[Thunderbird]
Permalink

Thunderbirdアドオンの作り方について解説します。その1は概要とinstall.rdfです。

このシリーズでは次のような「テスト」というボタンを表示します。

Thunderbirdアドオン

このボタンをクリックすると、JavaScriptのアラートを表示します。

Thunderbirdアドオン

サンプルは下記のリンクをクリックしてダウンロードしてください。

test@hoge.zip

1.概要

Thunderbirdアドオンは、Thunderbirdに新たな機能を追加するものですが、Thunderbird自体がDOM構造となっており、それらをJavaScriptで制御するイメージです。

またThunderbirdに追加するボタン類などはHTML、見栄えもCSSで作るのでウェブ系のスキルがあれば作ることは可能と思います。

ただ、HTML/CSS/JavaScriptの連携やローカライズのための独特なお作法があります。

それらを実現するため、Thunderbirdアドオンは下記のようなファイル構造になっています。

test@hoge.com
├chrome
│ ├ content
│ │ ├ test.xul
│ │ └ test.js
│ ├ locale
│ │ ├ en
│ │ │ └ menu.dtd
│ │ └ ja
│ │ └ menu.dtd
│ ├ skin
│ │ ├ test.css
│ │ └ test.png
│ └ test.manifest
├ chrome.manifest
└ install.rdf

Windowsの場合、このファイルを

C:\Users\[user]\AppData\Roaming\Thunderbird\Profiles\[profile]\extensions

配下に配置することで、アドオンとして認識してくれます。

各ファイルについて一度にすべてを解説するとわからなくなると思うので、1つずつ解説していきます。

まず最初に、アドオンのインストール時に読み込まれるinstall.rdfについて解説します。

ちなみに、現在のFirefoxやThunderbirdのアドオンを公開している公式サイトに登録するには、ここで紹介するファイル構造では承認されないようですが、キモとなる部分は変わらないと思うので、

2.install.rdf

install.rdfを設定することで、Thunderbirdを起動したときにインストール対象と認識してくれます。

インストール対象

install.rdfのサンプルは次の通りです。

<?xml version="1.0"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#">
   <Description about="urn:mozilla:install-manifest">
 
    <em:id>test@hoge.com</em:id>
    <em:version>1.0.0</em:version>
    <em:type>2</em:type>
 
    <em:targetApplication>
      <Description>
        <em:id>{3550f703-e582-4d05-9a08-453d09bdfdc6}</em:id>
        <em:minVersion>3.0</em:minVersion>
        <em:maxVersion>24.*</em:maxVersion>
      </Description>
    </em:targetApplication>
 
    <em:name>Test Addon</em:name>
    <em:description>This is the test addon for Thunderbird</em:description>
    <em:creator>Yujiro Araki</em:creator>
    <em:homepageURL>http://www.koikikukan.com/</em:homepageURL>
 
    <em:localized>
        <Description>
            <em:locale>ja</em:locale>
            <em:name>テスト</em:name>
            <em:description>テストアドオン</em:description>
            <em:creator>荒木勇次郎</em:creator>
        </Description>
    </em:localized>
 
  </Description>
</RDF>

3行目までは固定です。5行目以降の各項目の意味は次のとおりです。

  • id:アドオンのid。フォーマットは"myextension@mysite.com"になります
  • version:アドオンのバージョン
  • type:"2(拡張機能)"を指定
  • targetApplication:ターゲットのアプリケーション。ここではThunderbirdがターゲットアプリケーションになるので、そのための設定が必要
    • id:"{3550f703-e582-4d05-9a08-453d09bdfdc6}"を固定で設定
    • minVersion:最小バージョン
    • maxVersion:最大バージョン
  • name:アドオンの名称
  • description:アドオンの説明
  • creator:開発者名
  • homepageURL:アドオンのサイト
  • localized:ローカライズ用のデータを指定
    • locale:ロケール。ここではjaを指定
    • 以下省略

他にも設定項目があります。詳細を知りたい方は下記のページをご覧ください。

Install Manifests | MDN

Comments [0] | Trackbacks [0]

リンカスクリプトでシンボル単位にアドレスを指定する方法

January 26,2018 12:03 AM
Category:[C/C++]
Tag:[C/C++]
Permalink

リンカスクリプトでシンボル単位にアドレスを指定する方法を紹介します。

1.問題点

C/C++で下記の簡単なサンプルを作りました。

#include <stdio.h>
 
int a;
int b[10];
char c[10];
 
int main(void) {
    printf("&a:%p\n", &a);
    printf("&b:%p\n", &b);
    printf("&c:%p\n", &c);
 
    a = 100;
    b[0] = 1;
    c[0] = 'x';
 
    printf("a=%d\n", a);
    printf("b[0]=%d\n", b[0]);
    printf("c[0]=%c\n", c[0]);
    return 0;
}

実行結果

% ./a.out
&a:0x10020180
&b:0x10020184
&c:0x10020318
a=100
b[0]=1
c[0]=x

この実行ファイルのマップは次のようになっています(マップを出力するにはgccまたはg++に"-Wl,-M"を設定)。

 .bss           0x0000000010020180      0x1fc /tmp/ccuc7H46.o
                0x0000000010020180                a
                0x0000000010020184                b
                0x0000000010020318                c

このa,b,cの3つのシンボル(変数)について個別にアドレスを指定したいのですが、方法がわかりません。

ということで、リンカスクリプトでシンボル単位にアドレスを指定する方法を紹介します。

2.シンボル単位にアドレスを指定する

シンボル単位にアドレスを指定するには、下記赤色(リンカスクリプト抜粋)の部分を追加します。

  .bss :
  {
   *(.bss)
     a = ABSOLUTE(0);
     b = ABSOLUTE(4);
     c = ABSOLUTE(100);
   *(.dynbss)
   *(.bss .bss.* .gnu.linkonce.b.*)
   *(COMMON)
   /* Align here to ensure that the .bss section occupies space up to
      _end.  Align after .bss to ensure correct alignment even if the
      .bss section disappears because there are no input sections.
      FIXME: Why do we need it? When there is no .bss section, we don't
      pad the .data section.  */
   . = ALIGN(. != 0 ? 64 / 8 : 1);
  }

シンボルにアドレスを指定するフォーマットは次のとおりです。

SECTIONS
{
  <section> :
  { *(<section>)
    <symbol> = ABSOLUTE(<address>);
  }
}

アドレスにはセクション内の相対アドレスを設定します。

今回の設定では、

SECTIONS
{
 :
  .bss :
  {
   *(.bss)
     a = ABSOLUTE(0);
     b = ABSOLUTE(4);
     c = ABSOLUTE(100);
 :
  }
 :
}

という風に、ABSOLUTEに.bssセクションからの相対アドレスを設定することで期待する動作になりました。

aの"0"は、.bssセクションから+0番地、bの"4"は、.bssセクションから+4番地、cの"100"は、.bssセクションから+100番地になります。

実行結果

% ./a.out
&a:0x10020178
&b:0x1002017c
&c:0x100201dc
a=100
b[0]=1
c[0]=x

アドレスはうまく設定されているようですが、マップ上のアドレスは相対指定した値がそのまま入っています。

 .bss           0x000000001002037c        0x0 /usr/lib/gcc/ppc64-redhat-linux/4.8.5/../../../../lib64/crtn.o
                0x0000000000000000                a = 0x0
                0x0000000000000004                b = 0x4
                0x0000000000000064                c = 0x64

nmコマンドではアドレスが割り当てられています。

% nm ./a.out
 :
0000000010020178 B a
000000001002017c B b
0000000010020178 b completed.8008
0000000010020000 W data_start
0000000010020038 d deregister_tm_clones
0000000010020068 d frame_dummy
0000000010020078 D main
                 U printf@@GLIBC_2.4
0000000010020048 d register_tm_clones
00000000100201dc B c
 :

ちなみに下記のように絶対アドレスを設定すると、

SECTIONS
{
 :
  .bss :
  {
   *(.bss)
     a = ABSOLUTE(0x10020178);
     b = ABSOLUTE(0x1002017c);
     c = ABSOLUTE(0x100201dc);
 :
  }
 :
}

ビルドはOKですが、Segmentation faultになります。設定アドレスが.bssセクションのアドレスに加算されてしまうためです。

実行結果

% ./a.out
&a:0x200402f0
&b:0x200402f4
&c:0x20040354
Segmentation fault (コアダンプ)

ということで、シンボルにアドレスを指定する場合は現在のアドレスからの相対アドレスになります。

3.参考サイト

参考サイトは下記です。ありがとうございました。

Comments [0] | Trackbacks [0]

position:relativeを設定すると他の要素がずれる場合の対処

January 25,2018 12:03 AM
Category:[CSS]
Tag:[CSS]
Permalink

position:relativeを設定すると他の要素がずれる場合の対処方法を紹介します。

1.問題点

下記のサンプルを作りました。

<style>
.body {
    width: 300px;
    height: 200px;
    border: 1px solid #000;
    text-align: center;
}
.box {
    width: 100px;
    height: 50px;
    background: #ccc;
    line-height: 50px;
}
.foo {
    text-align: center;
}
</style>
<div class="body">
    <div class="foo box">test1</div>
</div>

このサンプルで、test1を基準にposition:relativeで移動したtest3を追加します。

<style>
 :
.bar {
    position: relative;
    top: 20px;
    left: 150px;
}
</style>
<div class="body">
    <div class="foo box">test1</div>
    <div class="bar box">test3</div>
</div>

上記の例では期待通りの動作になりますが、下記のようにtest2というボックスが存在するものとします。

<div class="body">
    <div class="foo box">test1</div>
    <div class="foo box">test2</div>
</div>

ここにtest3を挿入します。

<div class="body">
    <div class="foo box">test1</div>
    <div class="bar box">test3</div>
    <div class="foo box">test2</div>
</div>

test1とtest2はくっついたままにしたいのですが、test3分の高さがtest1とtest2の間に挿入されてしまいます。

2.対処方法

test3のマークアップ位置を最後に移動し、test2を基準にしたtest3にします。

<div class="body">
    <div class="foo box">test1</div>
    <div class="foo box">test2</div>
    <div class="bar box">test3</div>
</div>

あとはCSSのtopプロパティを変更すればOKです。

.bar {
    position: relative;
    top: -30px;
    left: 150px;
}

3.参考サイト

参考サイトは下記です。ありがとうございました。

Comments [0] | Trackbacks [0]

NHKドラマ「アシガール」が面白い

January 20,2018 12:03 AM
Category:[小品文]
Tag:[NHK]
Permalink

追記:非公式掲示板作りました。

NHKドラマ「アシガール」再放送の宣伝です。

「アシガール」は森本梢子さん作の漫画で、超ざっくりしたあらすじは、平成の高校生がタイムマシンで戦国時代にとばされ、その時代に生きる若君とのラブストーリーが展開する、というものです。

アシガール 1 (マーガレットコミックス)
森本 梢子
集英社 (2012-07-25)
売り上げランキング: 29,752

で、NHKでドラマ化され、2017年9月~12月の土曜夕方の時間帯に放送されてました。

(クリックでアシガールのサイトへ)
アシガール

原作を読んだことはないのですが、NHKを観ることが多いので、私はたまたまこのドラマを見ていました。

最初の数回はさほど何も感じず、正直見逃した回もあったのですが、ストーリーが進むにつれてこのドラマにはまっていきました。

終わったドラマを何回も見直すことは滅多にないのですが、このドラマだけは見逃した回も含めてもう一度見直したいと思い、NHKオンデマンドで正月、一気に全話見ました。

見直した感想は、やっぱり面白かったです。

そして、まだ何回でも見れそうな感じです。

個人差はあると思いますが、なんというか、中毒的な面白さがあります。

どうしてこんなに見直したくなるんだろうと思い、このドラマの公式掲示板をみつけて読み返したところ、同じような症状に陥っている人が大勢いることが分かりました。

毎日見直している人もいるようです。

(クリックでアシガール掲示板のサイトへ)
アシガール

他のドラマも同じような掲示板があるので、いくつか開いてみて投稿数を比べてみました。

結果、終了した番組の掲示板はどこも閑散としているのですが、アシガールの掲示板だけドラマが終わった現在(2018年1月)でもかなりの勢いで投稿が続いていました。

NHKの掲示板はページ分割されていて、アシガールのそれは現在43ページまで進んでいますが、実はその前、130ページ(1ページ30件)くらいまでページ分割されていました。

理由はわかりませんが、1ページの投稿表示数を100件に拡張して、ページ分割数を減らした模様です。

参考までに、似たような時間帯に放送していた「みをつくし料理帖」の掲示板は1ページ30件×31ページなので、アシガール掲示板の投稿数の多さがわかると思います。

投稿にはドラマの感想はもちろんですが、ドラマ終了後は「再放送してほしい」「DVDを発売してほしい」という書き込みが殺到しています。

で、前のスクリーンショットでお分かりのとおり、今回異例の再放送になったようです。

放送予定時間をまとめて掲載しておきます。

2月15日(木)<水曜深夜>
午前0時15分 第1回「見参!戦国女子高生」
午前0時53分 第2回「若君めざして一直線!」
午前1時31分 第3回「若君といざ出陣!」

2月16日(金)<木曜深夜>
午前0時15分 第4回「ドキドキの夜!」
午前0時53分 第5回「走れ!初デート」
午前1時31分 第6回「平成に若君キター!」

2月17日(土)<金曜深夜>
午前0時15分 第7回「待ってます戦国で!」
午前0時53分 第8回「満月よ!もう少しだけ」
午前1時31分 第9回「せつないラストチャンス!」

2月18日(日)<土曜深夜>
午前0時5分 第10回「その結婚ちょっと待った!」
午前0時43分 第11回「走りぬけ!愛のために」
午前1時21分 最終回「若君といつまでも!」

放送時間が変わったら掲示板が炎上しそうな気がします(笑)。

ということで、ドラマの紹介をこのブログで書くことは多分一度もなかったのですが、このドラマだけは紹介しておきたいと思い、エントリーすることにしました。

アシガールロスの方はもちろん、まだ観たことがない方もおすすめです。

また、もし最初の方がつまらなくても全話録画しておくことをおすすめします(掲示板の投稿で、消してしまって後悔している人多数)。つまらなければそのあとで消せばいいので。

とはいえ、個人差はあると思いますので予めご了承ください。

Comments [0] | Trackbacks [0]

Thunderbirdで選択したメールのメールアドレスで新規メッセージを作成するアドオン「ReplyNew」

January 19,2018 12:03 AM
Category:[Thunderbird]
Tag:[Thunderbird]
Permalink

Thunderbirdで選択したメールのメールアドレスで新規メッセージを作成するアドオン「ReplyNew」を公開します。

1.作成の経緯

PCのメーラーはThunderbirdを使っています。

誰かにメールを送信するときにはアドレス帳は一切使わず、別の受信メールのメールアドレスを使うことがほとんどです。

そのメールへの返信であれば、単に「返信」ボタンをクリックすればいいのですが、別の用件で新規メールを作成することもあり、その場合に「返信」を選択すると、元メールのスレッドになってしまうのがあまり好きではありません。

なので、そういう場合は新規メール作成画面に元メールのメールアドレスを手動でコピーするという、結構面倒なことをやっています。

1~2人ならいいのですが、大勢のメンバーにまとめてメールを新規作成するときも同じ要領でメールを作成していて、作業頻度はそれほどないにしても、結構面倒です。

その面倒な手間を解消するために、今回のアドオンを作ってみました。

2.機能

このアドオンをインストールすると「アドレス宛に作成」というボタンを追加します。

アドオンのボタン

任意の受信メールを選択した状態でこのボタンをクリックすれば、選択したメールのメールアドレス(To/From/Cc)をすべて反映した状態で新規メール作成画面を開きます。

下はToに1人、Ccに私含めて12人に送信されたメールのアドレス部分です。

(クリックで拡大、以下同様)
メールのアドレス

このメールを選択して「アドレス宛に作成」をクリックすると、次のような13人のメールアドレス(From+To+Cc-1)を設定したメール作成画面を開いてくれます。"-1"というのは自分です。

メール作成画面

自分のメールアドレスだけでなく、重複しているメールアドレスも削除してくれます。

3.アドオンのインストール

下記のリンクをクリックしてreplynew@koikikukan.com.xpiをダウンロードして任意のファルダに保存。

replynew@koikikukan.com.xpi

Thunderbirdメニューの「アドオン」をクリック。

アドオン

アドオン画面の「ファイルからアドオンをインストール」をクリック。

ファイルからアドオンをインストール

ダウンロードしたreplynew@koikikukan.com.xpiを選択して「今すぐインストール」をクリック。

今すぐインストール

「メールアドレスつき新規メッセージ作成」というアドオンの「今すぐ再起動する」をクリック。

再起動

これでアドオンがインストールされるので、メニューの「オプション」→「ツールバーのカスタマイズ」をクリック。

ツールバーのカスタマイズ

「アドレス宛に作成」のアイコンをツールバーの任意の位置にドラッグ。

アドレス宛に作成

これでアドオンのボタンが追加されました。

アドオンのボタン

アイコンは新規作成と同じものです。手抜きですいません。

4.その他

今回、Thunderbirdのアドオンは全く知らない状態から初めて開発しましたが、ネットで調べまくり、計3日で作り上げました。

実装した機能は次のとおりです。

  • 1日目:アドオン構造の把握/ボタンをツールバーに表示/ボタンをクリックしてメール新規作成画面を開く
  • 2日目:開いた画面にメールアドレスの反映
  • 3日目:すべての操作手順に対応(カスタマイズ化・選択状態によるボタンのアクティブ/非アクティブ・エラーの除去など)、パッケージ化

開発方法は別途ブログで公開したいと思います。

Comments [0] | Trackbacks [0]

WinSCPで「UNCパスはサポートされていません」が表示される場合の対処

January 11,2018 12:03 AM
Category:[Windows]
Tag:[Windows, WinSCP]
Permalink

WinSCPで「UNCパスはサポートされていません」が表示される場合の対処方法を紹介します。

1.問題点

WinSCPのローカル側のパスに、別サーバ(NASなど)のパスを指定します。

そうすると、「UNCパスはサポートされていません」というエラーが表示されます。

WinSCPではローカル側のパスにネットワークドライブが対応していないためです。

そのため、別サーバのファイルをアップロードするには、一旦ローカルドライブに移動しないといけないのですが面倒です。

ということで、「UNCパスはサポートされていません」が表示される場合の対処方法を紹介します。

2.「UNCパスはサポートされていません」が表示される場合の対処

対処方法は、コマンドプロンプトから下記のpushdコマンドを実行します。

C:\>pushd \\[ネットワークドライブのパス]

これで空きのドライブにネットワークドライブのパスが、Zから順に割り当てられます。Zはすでに使っていたのでここではYが割り当てられました。

ドライブを削除するときはpopdコマンドを利用します。

Comments [0] | Trackbacks [0]

Finaleで金管楽器のE管を設定する方法

January 5,2018 2:22 AM
Category:[Finale]
Tag:[Finale]
Permalink

Finaleで金管楽器のE管を設定する方法を紹介します。

上:E管の表記/下:実音表記(クリックで拡大、以下同様)

1.問題点

Finale2012を使っています。

金管楽器にはF管、C管といったいわゆる移調楽器があるのですが、ホルンのE管の楽譜を書く必要が生じました。

Finale2012にはデフォルトでF管とE♭管は用意されていますが、E管はありません。

スコアマネージャ

ということで、Finaleで金管楽器のE管を設定する方法を紹介します。

E管に限らずFinaleのデフォルトで選択できない移調楽器すべてに応用できます。

2.E管を設定する

E管を設定するには、メニューの「ウィンドウ」→「スコアマネージャ」をクリック。

メニュー

移調楽器を選択して「移調楽器」の「その他」をクリック。

スコアマネージャ

「クロマティック」を選択して「その他」をクリック。

移調楽器の設定ダイアログ

「音程」に「6」、「半音の増減」に「-1」を設定して「OK」をクリック。それぞれの設定値の意味については後述します。

音程ダイアログ

前のダイアログも「OK」をクリックして閉じます。

移調楽器の設定ダイアログ

これでE管の設定ができました。

「音程」は、実音よりどの程度高く(または低く)表記するかを決めるためのものです。プラスの数値は楽器の実音よりも高く、マイナスの数値は低く五線譜に表記します。

E管の実音は五線譜の表記より短6度低いので、楽譜の表記は逆に高くする必要があります。したがって「6」を設定して実音より6度高く表記します。

「半音の増減」は調号の修正を加えるためのもので、プラスの数値はシャープを追加(またはフラットを削除)し、マイナスの数値はフラットを追加(またはシャープを削除)します。

ここでは「-1」でシャープを削除します。ちなみに「0」や「1」を設定すると、サンプルのすべての音符にシャープが付与されます。

「0」や「1」を設定

先ほどの画面で選択しなかった「調号」と、選択した「クロマティック」との違いは、「調号」は調号の変更を行い、「クロマティック」は調号の変更を行いません。

移調楽器の設定については公式ページの下記が参考になります。

また、移調楽器については下記が参考になります。

Comments [0] | Trackbacks [0]

PDFに電子署名を追加する方法

December 30,2017 2:22 AM
Category:[Acrobat]
Tag:[Acrobat, PDF]
Permalink

PDFに電子署名を追加する方法を紹介します。

「アドバンスト」→「電子署名」→「署名を作成」 をクリック。

(クリックで拡大)

ダイアログが表示されるので「OK」をクリックして閉じます。

署名を追加するための任意の箇所をドラッグ。

「デジタルIDを追加」ダイアログが表示されるので、「今すぐデジタルIDを新規作成」を選択し「次へ」をクリック。

「新しいPKCS#12デジタルIDファイル」を選択し、「次へ」をクリック(Windowsのみ)。

ID情報を入力し、「次へ」をクリック。

ASCII文字以外の文字を設定すると「」というダイアログが表示されるので、「OK」をクリック。

ASCII文字の入力が求められるので、それぞれ入力。

「参照」をクリックし、デジタルIDの保存場所を指定し、「パスワード」「パスワードの確認」に任意のパスワードを入力して「完了」をクリック。

「文書に署名」ダイアログボックスが表示されるので、「パスワード」にさきほど設定したパスワードを入力し、「署名」をクリック。

ファイルを保存します。

これで電子署名が追加されました。

Comments [0] | Trackbacks [0]

Workflowプラグイン(Movable Type7コンテンツタイプ対応)

December 22,2017 11:55 PM
Category:[ワークフロー]
Tag:[MovableType, Workflow]
Permalink

この記事は Movable Type Advent Calendar 2017 の22日目の記事です。

WorkflowプラグインのMovable Type7対応版を現在開発中(MT-7.0a2での対応はほぼほぼ完了)ですので、本エントリーにて紹介させて頂きます。

1.追加機能

タイトルのとおり、MT7で機能追加されるコンテンツタイプに対応します。

以下、ざっくりですいませんが機能追加後のスクリーンショットです。

ライター・承認者のメニューには、作成したコンテンツタイプに対応するコンテンツデータを表示します。

コンテンツタイプ表示

ステータスフィールドには承認状態を表示します。アイコンはMT7のsvg画像に差し変わるかもしれません。

承認状態

ライターの公開フィールドのプルダウンには「未公開(承認待ち)」を表示します。

公開フィールド

承認者の公開フィールドのプルダウンには「承認」「差し戻し」を表示します。日時指定公開版の場合、最終承認者のプルダウンには「日時指定」も表示します。

公開フィールド

承認依頼(または差し戻し)フィールドやログイン権限のないユーザへのプレビュー依頼フィールドも従来通りです。

承認依頼(または差し戻し)フィールド・プレビュー依頼フィールド

コンテンツタイプ(カテゴリセット含む)向けのワークフロー機能ですが、

  • 承認・差し戻し(多段階含む)
  • プレビュー画面
  • プレビュー画面からの承認/差し戻し
  • メール送信
  • 更新履歴からのデータ差し替え

など、現状のWorkflowプラグインの機能はすべて対応する予定です。

その他、追加機能ではありませんが、記事・およびウェブページもこれまでどおり対応し、管理画面のデザインもあわせました。

たとえば記事一覧画面のアイコンはsvg画像に変更しています。

記事一覧画面

2.Workflowプラグインについて

Workflowプラグインは2011年の発売から、おかげさまで数多くのウェブサイトに導入頂いてます。

現在は多段階承認版に加え、さらに高機能な「多段階承認+グループ・複数承認版」もリリースしています。

多段階承認+グループ・複数承認版は下記の機能を提供します。

  • 最終承認者の日時指定承認が可能です。オプションで日時指定公開状態での承認者による即時公開または差し戻しが可能になります。
  • 同順位承認者の複数承認が可能です。
  • ワークフローグループの設定が可能です。ライターが承認依頼時にワークフローグループを選択し、以降はそのグループに属する承認者のみが記事を承認・差し戻しできます。オプションで公開後の記事についてライターは別のワークフローグループを選択することが可能になります。
  • ライターも上長へのプレビュー依頼が可能です。

機能のイメージは下記のとおりです(クリックで拡大)。

記事一覧画面

ということで、MT7対応版Workflowプラグインはできるだけ早い時期に評価版をリリースする予定です。

コンテンツタイプに対応しても価格は据え置きの予定です。

Comments [0] | Trackbacks [0]
 1  |  2  |  3  |  4  |  5  | All pages