EL式(JSP)とnullについて理解したかった(反実仮想)
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を使います。
- javax.servlet.jsp.el.ExpressionEvaluatorクラスのevaluateメソッド
- javax.servlet.jsp.el.Expressionクラスのevaluateメソッド
この辺りを調べたらいいのかな?
ほかに見てた資料
- EL式の歴史 - Qiita
- 「
sun developer connection 2004 EL式
」で検索して http://otn.oracle.co.jp/technology/global/jp/sdn/java/j2ee/techtips/2004/private/ett0126.html
を見てたようだけど現在 404
【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がエラー吐いて死んでるので調べてみました。
環境はこんな感じ
吐いてたログメッセージとかダイアログとか保存しとくの忘れたのですが()
確かこれ↓と同じメッセージで、
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使おうとしたらめちゃくちゃハマった話