メモ代わり。てきとーに。 いや、ですからてきとーですって。 2年前ぐらいにPythonあたりでメールくれた方、ごめんなさい。メール紛失してしまい無視した形になってしまいました。。。

2008年12月27日土曜日

[work][OpenOffice][SDK][java] Professional UNO読み中(8) Services

http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/ProUNO/Services
を読む。

Service
interfaceは多重継承できる。
実装する人がいらいらするんで、Serviceはインタフェースで分類されたメソッドコールを通して利用するらしい?

Referencing Interfaces
サービスの定義中のインタフェースへのリファレンスはサービスがインタフェースを実装しなければならないことをあらわす。
[optional]フラグが付いている場合には、可能であれば実装する。

で、その例。


service TextDocument
{
...

interface com::sun::star::text::XTextDocument;
interface com::sun::star::util::XSearchable;
interface com::sun::star::util::XRefreshable;
[optional] interface com::sun::star::text::XFootnotesSupplier;
[optional] interface com::sun::star::text::XEndnotesSupplier;

...
};
 

XTextDocument、XSearchable、XRefreshableは実装しなきゃならない。
で、XFootnotesSupplierとXEndnotesSupplierは「可能であれば」実装する。


Service Constructors

新スタイルサービスではコンストラクタも記述できる。
戻り値は書かない。

でその例。

service SomeService: XSomeInterface {
create1();
create2([in] long arg1, [in] string arg2);
create3([in] any... rest);
};
 


create1、create2、create3がコンストラクタ。

raises (Exception1, ...)
 

ってな感じで書いておけば、例外も記述できる。

典型的なサービスのコンストラクタは"create"だそうで。


Including Properties

Propertyというのはオブジェクトのデータ。
一般的なインタフェース、getPropertyValue()とsetPropertyValue()を通して
提供される。

で、プロパティ定義の例

service TextContent
{
interface com::sun::star::text::XTextContent;
[optional, property] com::sun::star::text::TextContentAnchorType AnchorType;
[optional, readonly, property] sequence AnchorTypes;
[optional, property] com::sun::star::text::WrapTextMode TextWrap;
};

TextContetサービスは、1つのインタフェースと、3つのオプショナルなプロパティを持つ。

プロパティを記述するときに使えるフラグは以下のとおり。
[optional]
実装時に必ずしも実装しなくても良いプロパティ。
[readonly]

プロパティの値はcom.sun.star.beans.XPropertySetで値を変えることができない。
[bound]

プロパティ値の変更はXPropertyChangeListenerへ伝達される。
ただし、com.sun.star.beans.XPropertySetで何か登録されてれば。

[constrained]

そのプロパティ値が変更される前にイベント起こす。
そのイベントリスナーは値の変更を拒否できる。
[maybeambiguous]

場合によりプロパティ値を決められないもの?
[maybedefault]

オブジェクトそのものの代わりにスタイルシートとか環境とかに保存されるかもしれない?
[maybevoid]

プロパティタイプの範囲によっては空になりうる。データベースのnull値に似てる。
[removable]

削除可能。ダイナミックプロパティなるものに使われる。
[transient]

オブジェクトがシリアライズされてればプロパティは保存されない?



Referencing other Services

old-styleサービスは他のold-styleサービスを含めることができる。
[optional]も指定可能。

service Paragraph
{
service com::sun::star::text::TextContent;
[optional] service com::sun::star::text::TextTable;
[optional] service com::sun::star::style::ParagraphProperties;
[optional] service com::sun::star::style::CharacterProperties;
[optional] service com::sun::star::style::CharacterPropertiesAsian;
[optional] service com::sun::star::style::CharacterPropertiesComplex;

...
};
 


ふーん。


Service Implementations in Components
コンポーネントは、共有ライブラリかJavaの1つ以上のサービスのある言語バインディング実装を含むアーカイブ。
UNOランタイムに登録しなきゃならない。

ふーーん。
.

[work][OpenOffice][SDK][java] Professional UNO読み中(7) Interfaces

http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/ProUNO/Interfaces
を読む。

Interface

UNOオブジェクト間通信はInterfaceなるものに基づいている。
Interfaceっつーのは、外側から見れば、そのオブジェクトを理解せずに使うことが
できるようになるものを提供する。
内側から、もしくはUNOインタフェースを実装する人から見れば、
Interfaceは抽象的な仕様である。

便利でしょと。

UNOではInterfaceなオブジェクトはinterface型というもの使う。
慣例でInterfaceなオブジェクトの先頭は'X'で始まると。
で、全てのInterfaceはcom.sun.star.uno.XInterfaceを継承しなきゃならん。
InterfaceはUNOオブジェクトへのアクセスを提供するために、メソッドを定義する。
exceptionを定義してもいいらしい。

なにも定義しないとRuntimeExceptionをスローするみたい。


で、載ってたサンプル。


// base interface for all UNO interfaces
interface XInterface
{
any queryInterface( [in] type aType );
[oneway] void acquire();
[oneway] void release();

};

// fragment of the Interface com.sun.star.io.XInputStream

interface XInputStream: com::sun::star::uno::XInterface
{
long readBytes( [out] sequence aData,
[in] long nBytesToRead )
raises( com::sun::star::io::NotConnectedException,
com::sun::star::io::BufferSizeExceededException,
com::sun::star::io::IOException);
...
};
 

Javaそっくりなんだけど、[]で囲まれたやつがなんじゃこりゃ。

[oneway]

非同期に実行するものを示すフラグ。

[in]

入力パラメータを示すフラグ

[out]

出力パラメータを示すフラグ

[inout]
入出力パラメータを示すフラグ。


.

[work][OpenOffice][SDK][java] Professional UNO読み中(6)

http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/ProUNO/The_Any_Type

を読む。

Any型

全てのほかの型をあらわせるらしい。
各プログラミング言語バインディングでは特別な扱いをしなきゃならない。
JavaにはAnyConverterというのがあるらしい。
C++には特別なoperatorが用意されるらしい。

.

[work][OpenOffice][SDK][java] Professional UNO読み中(5)

http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/ProUNO/Simple_Types
を読む。


UNOの型説明
void
boolean真偽値。trueかfalse
byte符号付き8ビット整数型(-128から127)
short符号付16ビット整数型(−32768から32767)
unsigned short符号なし16ビット整数型(deprecated)
long符号付き32ビット整数型(−2147483648から2147483647)
unsigned long符号なし32ビット整数型(deprecated)
hyper符号付き64ビット整数型(−9223372036854775808から9223372036854775807)
unsigned hyper符号なし64ビット整数型(deprecated)
floatIEC 60559(IEEE 754)単精度浮動小数点型
doubleIEC 60559(IEEE 754)倍精度浮動小数点型
char個々のUnicode文字を表現する型(正確にはUTF-16だそうで)
stringUnicode文字列(正確には「strings of Unicode scalar values」)
typeUNOの全てのタイプを記述しているメタ型
any他の全ての値を表すことができる特別な型


うーん。
ま、型ですな。

.

[work][OpenOffice][SDK][java] Professional UNO読み中(4) Data Types

http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/ProUNO/Data_Types
を読む。

Data Types

APIリファレンスのデータタイプはUNOタイプ。
UNOタイプは各プログラミング言語にマップされ、APIで使用する。
FirstStepで触れたinterfaceとかpropertieとかserviceのほかにも、

  1. special flag
  2. condition
  3. relationship
っつーのがあるんだって。
で、UNOをプロフェッショナルレベルで使いたいなら、知っときたいだろうって。
で、その辺説明すっぺ。


だとさ。
.

[work][OpenOffice][SDK][java] Professional UNO読み中(3) APIConcepts

http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/ProUNO/API_Concepts
を読む。

API コンセプト
OpenOffice.orgの機能へのアプローチに依存しないAPI。

API のゴール

  1. OpenOffice.orgの機能にアクセスするためのAPIの提供
  2. OpenOffice.orgの機能を拡張できるようにすること
  3. 内部の実装を交換可能にすること

で、長期的ロードマップとして今あるOpenOffice.orgをぶった切ってちっちゃい
コンポーネントにしていると。
で、これが完成すると、OpenOfficeは単なるOfficeスイートでなくなるよ
ってことが書いてあるかもしれない。

ほほー。

.

[work][OpenOffice][SDK][java] Professional UNO読み中(2)

http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/ProUNO/Introduction

を読む。

UNOのゴール
プラットフォームやプログラミング言語を超えて「ネットワークオブジェクト」の環境を提供すること。

UNOゴールKPA

  1. UNOオブジェクトはメタ言語(UNOIDL)で指定。CORBAのIDLみたいなやつ。
  2. サービスマネージャというFactory機構を使ってnewする。
  3. オブジェクト間通信、プロセス間通信にブリッジを提供。(URPというプロトコルを使う)
  4. 大抵のOpenOffice.orgのオブジェクトをUNO環境で通信できるようにする

といった感じかもしれない。

.

[work][OpenOffice][SDK][java] Professional UNO読み中(1)

http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/ProUNO/Professional_UNO

を読む。


「Professional UNO」では、
UNOの詳細な情報といろんなプログラミング言語でUNOを使う情報を提供するらしい。

まず、
概念な感じの大枠から見てって、
APIの概念、その背景的なのを見てって、
UNOの概念、仕組みなぞを見てって、
UNOの各言語バインディングを詳しく見てったりする。
らしい。

ふうーん。
.

2008年12月26日金曜日

[work][OpenOffice][SDK][java] とりあえずfirstStep終了

やっとこさっとこ、FirstStep読み終えた。。

雑感としてはとっても面倒。
しょうがないとは思うけど。


次はProfessional UNOでインターネットのゴミを生産します。
.

[work][OpenOffice][SDK][java] FirstStepメモ(8) Shape

図形の位置、サイズなどを扱うのがShape。

com.sun.star.drawing.XShapeっつーインタフェースが定義されている。

OpenOfficeでは11個もある基本を成す図形があるそうだ。
特性を反映するプロパティ群を保持する6つ。

  1. com.sun.star.drawing.EllipseShape(円とか楕円とか).
  2. com.sun.star.drawing.RectangleShape(矩形).
  3. com.sun.star.drawing.TextShape(テキストボックス).
  4. com.sun.star.drawing.CaptionShape(ラベリングって何?).
  5. com.sun.star.drawing.MeasureShape(計量???)
  6. com.sun.star.drawing.ConnectorShape(図形同士をつなげたりする線)
独自のプロパティを持ってない5つ。
  1. com.sun.star.drawing.LineShape(線とか矢印とか)
  2. com.sun.star.drawing.PolyLineShape(まっすぐな感じの線)
  3. com.sun.star.drawing.PolyPolygonShape(多角形)
  4. com.sun.star.drawing.ClosedBezierShape(ベジェ曲線とか??)
  5. com.sun.star.drawing.PolyPolygonBezierShape(もはや意味不明・・・)
でもって、全てのShapeは以下のプロパティを使うよ。
  1. com.sun.star.drawing.Shape(全てのShapeの基本的プロパティ)
  2. com.sun.star.drawing.LineProperties(線はどんな感じにする?っていうプロパティ)
  3. com.sun.star.drawing.Text(こいつはプロパティを持っていないけど、以下を含むって。)
  4. com.sun.star.drawing.TextProperties(付番、テキストアラインなど)
  5. com.sun.star.style.ParagraphProperties(段落整形など)
  6. com.sun.star.style.CharacterProperties(文字の形式など)
  7. com.sun.star.drawing.ShadowProperties(図形の影を扱う)
  8. com.sun.star.drawing.RotationDescriptor(ローテイト関連)
  9. com.sun.star.drawing.FillProperties(どんな感じで塗りつぶす?)
  10. com.sun.star.presentation.Shape(はて?)

うーん。

とりあえず、やりたいことはこの辺でできそうだけど。。。
.

[work][OpenOffice][SDK][java] FirstStepメモ(7) Table

Table。

そもそもTableって何?
Cellのことかと思いきやそれだけじゃないみたい。良くわからない。

で、
XCellRangeインタフェースというのが提供されているんで、
こいつを使用してXCellを取得できる。
XCellを取得したら、そのXCellに式や値を設定できるんだそうだ。

Tableのプロパティを扱う場合には、スプレッドシートのテーブルか、テキストのテーブルかで
扱い方が異なる。

CellのプロパティはCellPropertiesを使う。
TextTableはcom.sun.star.text.TextTableを使う。

カーソルというものもある。

TextTableの場合にはcom.sun.star.text.TextTableCursorで、
スプレッドテーブルの場合にはcom.sun.star.sheet.SheetCellCursorだそうだ。

うーん。良く分からん。
.

[work][OpenOffice][SDK][java] FirstStepメモ(6) Text

共通で扱えることを強調したいんで、共通のインタフェース、プロパティからはじめるよってさ。んでもって、あとで違いを示しまっせと。

Textインタフェース

Textインタフェースは、com.sun.star.text.XTextだとのこと。
単一の文字列をセットしたりゲットしたりTextを置く場所を指定できるよ。
で、com.sun.star.text.XSimpleTextを継承してて、さらにcom.sun.star.text.XSimpleTextは
com.sun.star.text.XTextRangeを継承してるよ。
XTextは

  1. insertTextContent()
  2. removeTextContent()
メソッドを通して操作する。

テキストフォーマットは、
  1. com.sun.star.style.ParagraphProperties
  2. com.sun.star.style.CharacterProperties
を通してやりますよ?

で、シートに貼り付けるのはどうするんだろ。
.

[work][OpenOffice][SDK][java] FirstStepメモ(5) Text、Table、Shape

いよいよ、Text、Table、Shapeを扱ってみるところまできた。

Text、Table、Shapeの共通的な部分をざっくりやるらしい。
それらはScalc、Writer、Draw/Impressのどれでも同じように扱えるらしい。

ほほー。

.

[Haskell] HoogleとHayoo

知らなかった。

そんなのあるのね。

HoogleはGoogle、HayooはYahooって感じだけど、

読みはなんだろうー。

ほーぐる



はよー?

.

[work][OpenOffice][SDK][java] FirstStepメモ(4) サンプル

リモートのサービスマネージャからDesktopオブジェクトもらって
そいつのloadComponentFromURL()メソッド使って新しいスプレッドシートでも作ってみて、
そいつにシートつけて、そのシートのA1、A2、A3に値を入れるてみるサンプルらしい。

A3はA1とA2の合計値。


で、今回のきもっぽいところだけ。

1) 例のbootstrap()便利関数で、officeの起動とかやってもらって、リモートコンテキストを
取得する。


xRemoteContext = com.sun.star.comp.helper.Bootstrap.bootstrap();
 


2) 取得したリモートコンテキスト使ってサービスマネージャを取得する。

xRemoteServiceManager = xRemoteContext.getServiceManager();
 


3) サービスマネージャのcreateInstanceWithContext()メソッド使ってDesktopオブジェクト
を取得する。


Object desktop = xRemoteServiceManager.createInstanceWithContext(
"com.sun.star.frame.Desktop", xRemoteContext);
 


4) queryする。

XComponentLoader xComponentLoader = (XComponentLoader)UnoRuntime.queryInterface(
XComponentLoader.class, desktop);
 


5) xComponentLoader.loadComponentFromURLメソッド使ってスプレッドシートコンポーネントを
取得。

XComponent xSpreadsheetComponent = xComponentLoader.loadComponentFromURL(
"private:factory/scalc", "_blank", 0, loadProps);
 

loadPropsにはプロパティがセットされるらしい。
"private:factory/scalc"って指定するとスプレッドシートコンポーネントが取得できるっぽい。

6) queryしてXSpredsheetDocument取得。

XSpreadsheetDocument xSpreadsheetDocument = (XSpreadsheetDocument)UnoRuntime.queryInterface(
XSpreadsheetDocument.class, xSpreadsheetComponent);
 



7) スプレッドシートコンテナなるものを取得。

XSpreadsheets xSpreadsheets = xSpreadsheetDocument.getSheets();
 


8) 新しいシート作成。


xSpreadsheets.insertNewByName("MySheet", (short)0);
 


9) 新しいシートを操作したいので、新しいシート"MySheet"を取得。

Object sheet = xSpreadsheets.getByName("MySheet");
XSpreadsheet xSpreadsheet = (XSpreadsheet)UnoRuntime.queryInterface(
XSpreadsheet.class, sheet);
 

うーん。面倒くさい。。
取得・クエリーはいつもセット??


10) そしたら、各セルに値をセット。A1は(0,0)、A2は(0,1)、A3は(0.2)らしい。

XCell xCell = xSpreadsheet.getCellByPosition(0, 0);
xCell.setValue(21);

xCell = xSpreadsheet.getCellByPosition(0, 1);
xCell.setValue(21);

xCell = xSpreadsheet.getCellByPosition(0, 2);
xCell.setFormula("=sum(A1:A2)");
 


11) その他いろいろプロパティセット。



--
今のところ、毎回queryするのが面倒。
これはこれで言語非依存のインタフェースを実現するにはやむ負えないのかもしれないけど。

.

2008年12月25日木曜日

[work][OpenOffice][SDK][java] FirstStepメモ(3) com.sun.star.beans.XPropertySet

オブジェクトはオブジェクト自身のプロパティをインタフェースを通して、
提供しなければならないとのこと。

インタフェースは以下の2つ。


com.sun.star.beans.XPropertySet
 



com.sun.star.beans.XMultiPropertySet
 

の2つ。

で、どちらも一回のコールで、複数のプロパティを設定、取得できる。


XPropertySetの方はすべてのサービスで提供される。
プロパティを扱うメソッドは、

void setPropertyValue(String propertyName, Object propertyValue)
Object getPropertyValue(String propertyName)
 

の2つ。アクセサー。

で、使っているサンプル。

// query the XPropertySet interface from cell object
XPropertySet xCellProps = (XPropertySet)UnoRuntime.queryInterfac(XPropertySet.class, xCell);

// set the CellStyle property
xCellProps.setPropertyValue("CellStyle", "Result");
 

上は、queryInterfaceを使用して、xCellのプロパティを取得している。
下は、上で取得したXPropertySetで、特定のプロパティに値を設定している。
もちろんポインタなので、xCellのプロパティが変更される。

.

[work][OpenOffice][SDK][java] FirstStepメモ(2) queryInterface()

queryInterface()には2つの定義がある。


java.lang.Object UnoRuntime.queryInterface(java.lang.Class targetInterface, Object sourceObject)
 



java.lang.Object UnoRuntime.queryInterface(com.sun.star.uno.Type targetInterface, Object sourceObject)
 

の2つ。

どちらも戻り値はjava.lang.Objectなので、明示的にキャストが必要。

もし、指定したターゲット(targetInterface)がとれない場合はnullが返される。

.

[work][OpenOffice][SDK][java] FirstStepメモ中(1)

UNOのすべてのオブジェクトはinterfaceで操作するとのこと。

で、オブジェクトのメソッドを呼びたい場合には、事前に適切な型にCastすると。

うげ。

実行時にチェックしないと、ClassCastExceptionですか。。
ここはとっても面倒そう。。


と思いきや、JavaのUNOにはqueryInterface()というメソッドが用意されていると。

いい感じにオブジェクトを取得して、いい感じにCastしたりしてくれると。

ほほー。

で、以下queryInterfaceメソッドを利用して、
DesktopオブジェクトからXComponentLoaderオブジェクトを取得する例。


Object desktop = xRemoteServiceManager.createInstanceWithContext(
"com.sun.star.frame.Desktop", xRemoteContext);

XComponentLoader xComponentLoader = (XComponentLoader)
UnoRuntime.queryInterface(XComponentLoader.class, desktop);
 

ほほー。
タイプ量が多いっす。。

で、XMultiComponentFactory.createInstanceWithContext()
を使用して、com.sum.star.frame.Desktopサービスを生成。
createInstanceWithContextは、

Object createInstanceWithContext(String serviceName, XComponentContext context)
 

と定義されている。
で、返されたObjectをqueryInterfaceを使用してCastやらなにやらして、XComponentLoaderを取得と。

すぐに慣れるらしい。

.

2008年12月24日水曜日

[work][OpenOffice][SDK][java] InterfaceとService

OpenOfficeでは、

  1. 仕様と実装を分けたい
  2. 実クラス名ではなく、仕様上のインタフェース名、サービス名で、newしたい
から、IDLみたいなので定義されているらしい。


module com { module sun { module star { module bridge {
serviceUnoUrlResolver: XUnoUrlResolver;
}; }; }; };
 

こんな感じで。

ふーん。
.

[work][OpenOffice][SDK][java] オブジェクト取得の方法

引き続きFirstStep中メモ。

OpenOffice中のオブジェクトを取得するには、

  1. serviceManagerからDesktopオブジェクトを取得する。
  2. 取得したDesktopオブジェクトからDocumentオブジェクトを取得する。
とするらしい。

Desktopオブジェクトはwindowやドキュメントのロードを担当、
DocumentオブジェクトはOpenOfficeで開かれたファイルを表している。

で、OpenOfficeのオブジェクトたちは、保持するオブジェクトを
他のオブジェクトたちに大きく2つの方法で渡すことができる。
  1. integralなgetメソッド群
  2. universalなプロパティ
の2つ。

getメソッド群はgetText()とかそういうの。
プロパティというのは、
getPropertyValue(propertyName)っていう特殊はメソッドで取得するやつ。

普段はgetメソッド群を使えばよいらしいが、たまに、オブジェクト固有の要素があったりするんで、
プロパティ経由でアクセスしなきゃならんよ、って書いてあった気がする。

ふーん。

.

[work][OpenOffice][SDK][java] とりあえずOpenOfficeのUNOポートに接続してみた

http://wiki.services.openoffice.org/wiki/Documentation/DevGuide
のとおり、FirstStep中。


# apt-get install openoffice.org openoffice.org-dev
 

でインストール。

FirstStepに書かれてあるbuild.xmlを参考に、ここで必要なjarは、、、、

/usr/lib/openoffice/program/classes/{jurt.jar,unoil.jar,ridl.jar,juh.jar}
 

だけ。

あと、CLASSPATHに入れておかなければいけないのは、、、

/usr/lib/openoffice/sdk/com/sun/star/lib/loader/*.class
 

らしい。

で、FirstStepのとおりのコードを書き・・・、ant。で、ant run。
おぉー。接続した。

X-Serverに接続しに行くので、Xも起動しておかないとダメ。
X-Serverなしでできないかと探してみたけど、OpenOfficeのメーリングリストで、
without X-Serverは非対応だって言っていた。
残念。

で、動かしたソースは、

public class FirstUnoContact {
public static void main(String[] args) {
try {
// get the remote office component context
com.sun.star.uno.XComponentContext xContext =
com.sun.star.comp.helper.Bootstrap.bootstrap();

System.out.println("Connected to a running office ...");

com.sun.star.lang.XMultiComponentFactory xMCF =
xContext.getServiceManager();

String available = (xMCF != null ? "available" : "not available");
System.out.println( "remote ServiceManager is " + available );
}
catch (java.lang.Exception e){
e.printStackTrace();
}
finally {
System.exit(0);
}
}
}
 

。。。
FirstStepのまんまでした。

OpenOffice の UNO APIを使用するには、
  1. クライアントでUNOの初期化
  2. サーバからコンポーネントコンテキスト取得
をしなきゃならないらしい。
内部的には、
  1. ServiceManagerを初期化して、
  2. OpenOffice.orgサーバとの接続を確立して、(サーバが居なければ立ち上げる)
  3. OpenOffice.orgサーバからコンポーネントコンテキストを取得する
だそうで。

FirstStepでは、この辺の面倒なところを、

com.sun.star.comp.helper.Bootstrap.bootstrap()

がやってくれているらしい。

次に、

xContext.getServiceManager();

がコールされ、serviceManagerを取得している。
OpenOffice.orgのUNO APIではこのserviceManagerが肝なんだってさ。

ふーん。


ついでに、OpenOffice.orgを事前にサーバとして立ち上げておく場合と
サーバとして立ち上げておかない場合でやってみたら、どちらもうまくうごく(もちろんそうだ。。)

が、やっぱり事前にサーバとして立ち上げておかないと重いねー。
.

2008年12月23日火曜日

[work][OpenOffice][SDK][java] サーバとして起動する

OpenOfficeをUNOポートソケット付きで起動するメモ。
UNOはUniversal Network Objectの略だそうで。
UNOポートソケット付きで機動すると、このポート経由でOpenOfficeを扱えるようになる、
らしい。

で、起動方法。


$ soffice '-accept=socket,port=8100;urp;' -display 127.0.0.1:1 -headless
 

意味は今のところ不明(後で追記予定)。
.

[git] コミット前に任意のworking tree中の1ファイルをリポジトリの状態に戻す

間違って編集してしまったあるファイルをローカルリポジトリの状態に戻すに は、、、



$ git checkout あるファイル
 


でオーケー。

.

[その他] ガソリン価格が100円台

今日も出社がてら近所のガソリンスタンドの価格を拝見。

レギュラーで、とうとう110円を割って108円でした。

というか、ニュースを見る限り、近所のガソリンスタンドは若干安いことが判明。

へー。
.