遠き君へ

〜インターネットの最果てで自分語りを垂れ流したり垂れ流さなかったりするブログ〜

EL式(JSP)とnullについて理解したかった(反実仮想)

  • JSP:JavaServer Pages
  • JSTL: JavaServer Pages Standard Tag Library
  • EL式(Expression Langage)

JSTLの再入門 - Qiita

2017年1月頃?に調べかけたものの残骸を供養


  • test="null" は false
  • test="!null" は true

<c:out>使用時にデフォルト値を指定できる(エルビス演算子的というか)
JSTLリファレンス:<c:out>

http://javazuki.blog.jp/archives/31392899.html
※現在は404。下記は多分ここから引用したんだと思うけど間違ってるかも

nullは空白になる
nullのものを出力しようとした場合は空白になる。
また、途中のオブジェクトがnullであっても例外にはならずに空白になる。
ただし、存在しないものを指定した場合や、例外が発生した場合、例外になる。

以下に関しては間違ってない?バージョンの違い?

empty
ELでは「null」というリテラルがないので、nullを条件として評価したいときはemptyを使います。

JSP 2.0仕様で追加,変更された仕様についての注意事項

JSP 2.0仕様では,EL式の構文解析と評価をするAPIとして次のAPIが提供されます。

  • javax.servlet.jsp.el.ExpressionEvaluatorクラスのevaluateメソッド
  • javax.servlet.jsp.el.Expressionクラスのevaluateメソッド

この辺りを調べたらいいのかな?


ほかに見てた資料

【Excel】「上のセルと同じ値なら空白」スタイルのExcel

以前Qiitaで書いた以下の記事を移行したものです。

【Excel】「上のセルと同じ値なら空白」スタイルのExcel - Qiita


心あるエンジニアには嫌われていますが、
「上のセルと同じ値なら空白」という書き方をするExcelに遭遇することがあります。

あるいは、「空欄だったら上方向で一番近い値とみなす」Excelと言えばいいでしょうか。

具体的には、以下のようなExcelを、

A B
1 大分類 小分類
2 交通費 電車
3 交通費 バス
4 交通費 タクシー
5 広告宣伝費 チラシ
6 広告宣伝費 新聞広告
7 広告宣伝費 インターネット広告

以下のように書く場合があります。

A B
1 大分類 小分類
2 交通費 電車
3 バス
4 タクシー
5 広告宣伝費 チラシ
6 新聞広告
7 インターネット広告

こういうタイプのExcelを扱う方法について書きます。

環境

以下の環境で確認しました

「上のセルと同じ値なら空白」スタイルの列から値が全部埋まってる列を生成

以下の式でできます。(オートフィル使えます)

=LOOKUP(1,0/(A$2:A2<>""),A$2:A2)

  • A$2: 「上のセルと同じ値なら空白」スタイルの列の一番上のセル
  • A2: 「上のセルと同じ値なら空白」スタイルの列の自分の行のセル

具体的には、以下のような式を書くと、

A B C D
1 大分類 小分類
2 交通費 電車 =LOOKUP(1,0/(A$2:A2<>""),A$2:A2) =LOOKUP(1,0/(A$2:A2<>""),A$2:A2)&" - "&B2
3 バス =LOOKUP(1,0/(A$2:A3<>""),A$2:A3) =LOOKUP(1,0/(A$2:A3<>""),A$2:A3)&" - "&B3
4 タクシー =LOOKUP(1,0/(A$2:A4<>""),A$2:A4) =LOOKUP(1,0/(A$2:A4<>""),A$2:A4)&" - "&B4
5 広告宣伝費 チラシ =LOOKUP(1,0/(A$2:A5<>""),A$2:A5) =LOOKUP(1,0/(A$2:A5<>""),A$2:A5)&" - "&B5
6 新聞広告 =LOOKUP(1,0/(A$2:A6<>""),A$2:A6) =LOOKUP(1,0/(A$2:A6<>""),A$2:A6)&" - "&B6
7 インターネット広告 =LOOKUP(1,0/(A$2:A7<>""),A$2:A7) =LOOKUP(1,0/(A$2:A7<>""),A$2:A7)&" - "&B7

以下のように表示されます。

A B C D
1 大分類 小分類
2 交通費 電車 交通費 交通費 - 電車
3 バス 交通費 交通費 - バス
4 タクシー 交通費 交通費 - タクシー
5 広告宣伝費 チラシ 広告宣伝費 広告宣伝費 - チラシ
6 新聞広告 広告宣伝費 広告宣伝費 - 新聞広告
7 インターネット広告 広告宣伝費 広告宣伝費 - インターネット広告

逆に全部埋まってる列から「上のセルと同じ値なら空白」スタイルの列を生成

求められてる形式が「上のセルと同じ値なら空白」スタイルというだけなら、表示用の列を用意する方が簡単かもですね。

その場合は以下の式でできます。(オートフィル使えます)

=IF(A2<>A1,A2,"")

  • A2: 参照する値が入っている列の自分の行のセル
  • A1: 「参照する値が入っている列の自分の行のセル」の一つ上のセル

具体的には、以下のような式を書くと、

A B
1 大分類(値) 大分類(表示用)
2 交通費 =IF(A2<>A1,A2,"")
3 交通費 =IF(A3<>A2,A3,"")
4 交通費 =IF(A4<>A3,A4,"")
5 広告宣伝費 =IF(A5<>A4,A5,"")
6 広告宣伝費 =IF(A6<>A5,A6,"")
7 広告宣伝費 =IF(A7<>A6,A7,"")

以下のように表示されます。

A B
1 大分類(値) 大分類(表示用)
2 交通費 交通費
3 交通費
4 交通費
5 広告宣伝費 広告宣伝費
6 広告宣伝費
7 広告宣伝費

発想を転換して、条件付き書式で見た目だけ変える

条件付き書式で見た目だけ「上のセルと同じ値なら空白」スタイルにするという手もあります。 ただしこちらの方法は残念ながらExcel Online(無料版)では使えないようです。

リボンを
 条件付き書式 > 新しいルール > 数式を使用して、書式設定するセルを決定
と辿っていき、条件として以下の式を指定します。

=IF(A2=A1,1)

  • A2: 参照する値が入っている列の自分の行のセル
  • A1: 「参照する値が入っている列の自分の行のセル」の一つ上のセル

参考

p4mergeをhomebrewでインストールするときの名前が変わってた

マルチプラットフォーム対応なGUI diffツール P4Merge(Helix Merge and Diffツール(P4Merge) | Perforce)。
3-way mergeができる優れものです。

が、新Macに移行しようとするとインストールできませんでした💦

brew cask install p4merge
# -> Error: Cask 'p4merge' is unavailable: No Cask with this name exists.

あれあれ?と思ってググるとこういうことのようで…… Cannot cask install p4merge on Mac · Issue #56105 · Homebrew/homebrew-cask · GitHub

以下のようにすると問題なく入りました✌️

brew cask install p4v
# -> 🍺  p4v was successfully installed!

which p4merge
# -> /usr/local/bin/p4merge

DockerのJenkinsのジョブでGroovy使おうとしたらめちゃくちゃハマった話

Dockerコンテナって便利だけど、ハマったら切り分けとか、使ってる技術が多くて大変ですね……


目次

  • ハマりその1:Docker Desktopが起動しない
  • ハマりその2:自動インストールの設定が反映されない
  • ハマりその3:直接コンテナにgroovyをインストールしようとしたら、zipコマンドがないしapt-getもできない
  • ハマりその4:rootでapt-getしてもzipが入らない
  • ハマりその5:rootでgroovyを入れたらjenkinsユーザーで使えなさそう
  • ハマりその6:Groovy Versionが(Default)だとダメ
  • ハマり番外編:Jenkins上で実行するシェルスクリプトのPATHが通らない
  • 最後に

ハマりその1:Docker Desktopが起動しない

こちらは前回の記事(MacでDocker Desktopが起動しない - 遠き君へ)で書いた通りです。

ハマりその2:自動インストールの設定が反映されない

Dockerは起動するようになったので、気を取り直して、以下のJenkinsコンテナを立ち上げます。
GitHub - jenkinsci/docker: Docker official jenkins repo

docker run -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts

で、いつも通りウィザードに従って設定を完了させて、今回の目的のGroovy plugin - Jenkins - Jenkins Wikiをインストールします。

プラグインの説明通り、
Jenkinsの管理(/manage) > Global Tool Configuration(/configureTools/) > Groovy
で実行に使うGroovyの設定をして、テスト用のジョブを作成して実行したのですが……

FATAL: command execution failed
java.io.IOException: Cannot run program "groovy" (in directory "/var/jenkins_home/workspace/test1"): error=2, No such file or directory

あれーー?

続きを読む

MacでDocker Desktopが起動しない

なんかしばらく前からDocker Desktopがエラー吐いて死んでるので調べてみました。

環境はこんな感じ

  • MacmacOS Mojave 10.14.3
  • Docker Desktop: Version 2.0.0.3 (31259)

吐いてたログメッセージとかダイアログとか保存しとくの忘れたのですが()
確かこれ↓と同じメッセージで、
Unable to start Docker · Issue #3454 · docker/for-mac · GitHub
少なくとも以下は表示されてました。(検索履歴やコピペ履歴から抽出……)

docker 2019/06/21 12:27:47 Failed to listen on AF_HVSOCK AF_HVSOCK not supported on this kernel (kernel too new?)

Issue立てた人は容量不足?とかですけど、自分の環境はそんな感じもしないので、
いろいろ調べた結果、以下の人がいうようにリセットするのが早いな……という結論に達しました。

macOS SierraにアップグレードしたらDocker for Macが起動しないときの対処方法 | DevelopersIO

ということで、Docker Desktopのエラーダイアログにある「Reset to factory defaults」を押してあとはダイアログに従って操作していくと、
無事Dockerが動くようになりました 🎉

いやーやっぱリセットと再起動がサイキョー……


しかしまだまだ問題が続くのであった……
続き→ DockerのJenkinsのジョブでGroovy使おうとしたらめちゃくちゃハマった話

background image is created by Niellyn & bhsav.