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 に移行しました。
エクスプローラーのフォルダー上で 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\command
と HKEY_CLASSES_ROOT\Directory\Background\shell\Powershell\command
とで少し異なりました。具体的には HKEY_CLASSES_ROOT\Directory\shell\Powershell\command
のほうでは -literalPath
オプションを使っていなかったのですが、いつの間にか修正したようです。
PowerShell では、ファイルやディレクトリの名前に使える [ と ] を、複数のパスをまとめて指定するための特別な意味を持つ文字として使えるため、これによる意図しない動作を防ぐためには、-literalPath
を使うべきだといえそうです。
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
の代わりに 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>
url()
関数の要不要textPath
要素は、xlink:href
属性に path
要素の id
を指定します(XLink の名前空間接頭辞を “xlink” としています)。このときは、xlink:href="#path"
のように、# に続けて id
を記述すれば正しく解釈されます。一方、何らかの要素にグラデーションを掛けるなどの目的で、fill
属性に linearGradient
要素などの id
を指定するときは、fill="url(#grad)"
のように url()
関数を使う必要があります。xlink:href
が XLink の仕様であるのに対し、fill
は SVG の仕様なので、このような違いがあるのでしょうか。
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においてデータストアを使用する場合、以下のようなクラスを作成し、そのインスタンスを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);
全てのエンティティーについて、新しい型の値をプロパティーに設定し、データストアへの保存を行えば完了です。