Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

Difference of Invoke-Expression and '&' in PowerShell

# Command Result
1 Invoke-Expression 'Get-Process' OK
2 & 'Get-Process' OK
3 Invoke-Expression 'Get-Process explorer' OK
4 & 'Get-Process explorer' NG

#4 causes the following error:

& : 用語 'Get-Process explorer' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認
識されません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試
行してください。
発生場所 行:1 文字:3
+ & 'Get-Process explorer'
+   ~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Get-Process explorer:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

新幹線の「〇〇新聞ニュース」

新幹線のドアの下に流れてる「〇〇新聞ニュース」が、同じ内容を2度流すのは、

  • (A) 一度目に流れていた内容を途中から読んだ人でも、そのまま見続けていれば読めなかった内容が読めるから。
  • (B) 文字の流れが速すぎて、一度では読めないから。

(A)とばかり思ってたんだけど、(B)と感じる人は思ってるより多いのかも。だったら単純に文字が流れる速度を変えるよねぇ、と思うんだけど、実は二度流すことで(A)と(B)の両方を解決してる可能性もあるな。

普段着と寝間着の出番

- (A) (B) (C)
かしこまった席で着る服 よそいき よそいき よそいき
学校などの日常的な場で着る服 普段着 普段着 普段着
外出しない日中に着る服 普段着 寝間着 部屋着
寝るときに着る服 寝間着 寝間着 寝間着

この「部屋着」という文化がいつ、どこから来たのか謎なんだよなぁ。

あと「よそいき」も謎。学校行事で「子供は汚れてもいい服装で来てください」と言われても、それは「動きやすい服装で来てください」と同じ意味で、汚れちゃいけない服を子供に着せるというのは意味不明だった。それに、私の小学校の卒業式(1994年)では、いわゆる「よそいき」を着ている人は少数派だった。現在の卒業式の風景は、やはりスタジオアリスの作り上げた文化なのか?

rsyncでページキャッシュを汚さない方法

rsyncは大量のファイルを走査するため、普通に実行するとページキャッシュに乗ったファイルが追い出されてしまう。 Linuxの場合、nocacheコマンド*1を利用することでページキャッシュを汚さずにrsyncを実行できる。リモートでもrsyncが実行されるので、以下のように実行する必要がある。

nocache rsync -aiv --rsync-patch='nocache rsync' some-host:/src/ /dest/

参考: https://stackoverflow.com/questions/10105203/how-can-i-limit-the-cache-used-by-copying-so-there-is-still-memory-available-for

ただし、nocacheコマンドはDebianUbuntuであればaptで取ってこれるが、CentOSRHELリポジトリにはないみたい*2。 そのため、RHELrsyncでページキャッシュを汚さないためには、nocacheをソースで取ってきてmake installするしかない模様。

なお、rsync本体に対してページキャッシュを汚さないためのオプション --drop-cache が提案されたことがあるが、Linux-specificすぎるとのことでWONTFIXになっている*3。それに伴い、RHELリポジトリでもWONTFIXになっている(RHELrsyncのみパッチが当たっているとかいうことはない)*4

Gotchas in Eclipse JET (JET2)

No uniq()

There are no XPath functions to uniq the result of XPath (e.g. text element). If you want to uniq something, you have to implement control break with <c:iterate> like:

<c:setVariable select="''" var="control" />
<c:iterate select="XPath to list text elements" var="item" >
  <c:if test=“$item!=‘${$control}’”>
    DO SOMETHING WITH $item
    <c:setVariable select="${$item}" var="control" />
  </c:if>
</c:iterate> 

No String.join() equivalent

There are no XPath functions to join strings. You have to implement string join logic with <c:iterate> like:

<%-- join strings with "+" --%>
<c:setVariable select="''" var="control" />
<c:iterate select="XPath to list text elements" var="item" >
  <c:choose>
    <c:when test="$control=''">
      <c:setVariable select="string('X')" var="control" />
    </c:when>
    <c:otherwise>
      + 
    </c:otherwise>
  </c:choose>
  WRITE $item
</c:iterate> 

Can’t count numbers

There are no way to implement loop with index like for (int i=0; i<N; i++) in ordinal programming language. It would be better to implement loops in the generated Java source, rather than in JET templates.

Almost everything is XPath

<c:setVariable select="''" var="item" />

is OK. But

<c:setVariable select="'A'" var="item" />

will cause runtime error, because the content of value attribute is considered as XPath (there is no such a XML element in scope). You have to write like this:

<c:setVariable select="string('A')" var="item" />