トップページへ
最終更新
2024年3月9日 16時33分

リートルード

HTML など Web 標準の技術を実際に試したくて作成した、基本的には実験サイトです。

2007年12月20日に、Google Page Creator を使って公開した「リートルード」は、Google Page Creator のサービス終了により、2009年11月29日に消滅しました。その後、一部の内容は Google Sites で公開していましたが、2010年1月8日に Yahoo!ジオシティーズに移行しました。

その Yahoo!ジオシティーズも、2019年3月31日に終了することが決まったため、2018年10月31日、「リートルード」は GitHub Pages に移行しました。

「PowerShell ウィンドウをここに開く」のコマンド

エクスプローラーのフォルダー上で Shift+右クリックすると、「PowerShell ウィンドウをここに開く」という項目が表れます。何も選択していないときに何もない所で Shift+右クリックした場合も、同様の項目が表れます。これを選択したとき、どのようなコマンドで PowerShell が起動するのか検索しました。

コマンドは、レジストリの HKEY_CLASSES_ROOT\Directory\shell\Powershell\command または HKEY_CLASSES_ROOT\Directory\Background\shell\Powershell\command に保存されていることが分かりました。前者がフォルダー上で Shift+右クリックしたとき、後者が何も選択していないときに何もない所で Shift+右クリックしたときだと思います。

その値は次のようになっていました。

powershell.exe -noexit -command Set-Location -literalPath '%V'

コマンド中に現れる %V という文字列については、Which special variables are available when writing a shell command for a context menu に記述を見つけました。このページ、およびさらにリンク先のページによると、%v は基本的に「動詞」を表し、それが無いときは作業ディレクトリを表すようです。これによって、上記コマンドは「powershell.exe を起動し、Set-Location コマンドで作業ディレクトリに移動し、そのまま実行を継続する」ということを実現しているようです。

以前の Windows では、保存されているコマンドが HKEY_CLASSES_ROOT\Directory\shell\Powershell\commandHKEY_CLASSES_ROOT\Directory\Background\shell\Powershell\command とで少し異なりました。具体的には HKEY_CLASSES_ROOT\Directory\shell\Powershell\command のほうでは -literalPath オプションを使っていなかったのですが、いつの間にか修正したようです。

PowerShell では、ファイルやディレクトリの名前に使える [] を、複数のパスをまとめて指定するための特別な意味を持つ文字として使えるため、これによる意図しない動作を防ぐためには、-literalPath を使うべきだといえそうです。

ブックマークレット

MS Pゴシックに 除外検索 (Google) 除外検索 (Bing)

SVG の話

水平 line のグラデーション

Firefox は、バージョン88.0.1現在、SVG の line 要素や polyline 要素が水平または垂直の場合、stroke 属性にグラデーション要素を指定すると、なぜか描画されません。例えば、以下に示すグラデーションを指定した水平の line は描画されません。わずかでも斜めなら描画されます。

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 35" width="400">
    <defs>
        <linearGradient id="grad">
            <stop stop-color="red" offset="50%" />
            <stop stop-color="black" offset="100%" />
        </linearGradient>
    </defs>
    <text x="0" y="8" font-size="4">グラデーションを指定しない水平の line</text>
    <line x1="0" y1="10" x2="100" y2="10" stroke="red" stroke-width="2" />
    <text x="0" y="18" font-size="4">グラデーションを指定した水平の line(描画されない)</text>
    <line x1="0" y1="20" x2="100" y2="20" stroke="url(#grad)" stroke-width="2" />
    <text x="0" y="28" font-size="4">グラデーションを指定した斜めの line</text>
    <line x1="0" y1="30" x2="100" y2="30.1" stroke="url(#grad)" stroke-width="2" />
</svg>
グラデーションを指定しない水平の line グラデーションを指定した水平の line(描画されない) グラデーションを指定した斜めの line

線を斜めにする以外の方法で描画されるようにするならば、line の代わりに rect を使うか、あるいはグラデーション要素の gradientUnits 属性を、userSpaceOnUse にします。

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 25" width="400">
    <defs>
        <linearGradient id="grad">
            <stop stop-color="red" offset="50%" />
            <stop stop-color="black" offset="100%" />
        </linearGradient>
        <linearGradient id="grad2" gradientUnits="userSpaceOnUse">
            <stop stop-color="red" offset="50%" />
            <stop stop-color="black" offset="100%" />
        </linearGradient>
    </defs>
    <text x="0" y="8" font-size="4">rect 要素を使う</text>
    <rect x="0" y="9" width="100" height="2" fill="url(#grad)" />
    <text x="0" y="18" font-size="4">gradientUnits 属性を userSpaceOnUse にする</text>
    <line x1="0" y1="20" x2="100" y2="20" stroke="url(#grad2)" stroke-width="2" />
</svg>
rect 要素を使う gradientUnits 属性を userSpaceOnUse にする

url() 関数の要不要

textPath 要素は、xlink:href 属性に path 要素の id を指定します(XLink の名前空間接頭辞を “xlink” としています)。このときは、xlink:href="#path" のように、# に続けて id を記述すれば正しく解釈されます。一方、何らかの要素にグラデーションを掛けるなどの目的で、fill 属性に linearGradient 要素などの id を指定するときは、fill="url(#grad)" のように url() 関数を使う必要があります。xlink:href が XLink の仕様であるのに対し、fill は SVG の仕様なので、このような違いがあるのでしょうか。

CSSのz-indexプロパティーの話

Webページでは、通常、HTMLで後に記述された要素ほど前面に描画されます。

しかし、positionプロパティーにstatic以外を指定した要素は、そうでない要素(positionプロパティーがstaticの要素)より前面に描画されます。positionプロパティーを特に指定しなかったときの既定値はstaticです。したがって、positionプロパティーにstatic以外を指定するだけで、他の要素より前面に描画させることができます。z-indexを指定する必要はありません。

positionプロパティーにstatic以外を指定した要素が複数ある場合、それらの要素の間では、HTMLで後に記述されている要素ほど前面に描画されます。この重なり順序を、z-indexプロパティーで変更することができます。

positionプロパティーを指定していない要素にz-indexプロパティーを指定しても、意味はありません。

Google App Engine for Javaで、データストアに保存したプロパティーの型の変更法

Google App Engine for Javaにおいてデータストアを使用する場合、以下のようなクラスを作成し、そのインスタンスをPersistenceManagerクラスのmakePersistentメソッドに渡します。

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Data {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id;

    @Persistent
    private String name;

    @Persistent
    private String content;

	(以下略)

このクラスでは、contentプロパティーはString型としています。この型を後からcom.google.appengine.api.datastore.Textに変更したい場合などは、低レベルAPIを使用します。

まずDatastoreService実装を取得します。

DatastoreService service = DatastoreServiceFactory.getDatastoreService();

取得したDatastoreService実装のgetメソッドで、データストアに保存したエンティティーを取得します。getメソッドの引数にはKeyオブジェクトを指定します。KeyオブジェクトはKeyFactoryクラスのcreateKeyメソッドで作成します。createKeyメソッドの引数には、親のKey(親を持つKeyを作成する場合)と、データストアに永続化したオブジェクトのクラス名と、各エンティティーのIDの値を指定します。IDは、Google App Engineのアプリケーション管理ページの、Datastore Viewerで確認することができます。

Key key = KeyFactory.createKey("Data", 1);
Entity entity = service.get(key);

取得したエンティティーから、getPropertyメソッドで型を変更したいプロパティーの値を取得します。その値を使って変更したい型で値を作り、setPropertyメソッドでその新しい値をエンティティーに設定します。

String str = (String)entity.getProperty("content");
Text text = new Text(str);
entity.setProperty("content", text);

後は、DatastoreServiceクラスのputメソッドで変更したエンティティーをデータストアに保存します。

service.put(entity);

全てのエンティティーについて、新しい型の値をプロパティーに設定し、データストアへの保存を行えば完了です。