のえら

技術備忘とかメモとか.間違いはつっこんでいただきたい所存.アフィリエイトはやっていません.

「BUG! exception in phase 'semantic analysis' in source unit 」と出てしまったときの対応

  • IntelliJ IDEA 2018.1.5 (Ultimate Edition)
  • JRE: 1.8.0_152-release-1136-b39 x86_64
  • JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
  • macOS 10.13.5
  • Groovy 2.14.x

開発中に、アプリケーションを実行しようとしたりテストを実行しようとしたときに、以下のエラーが出てしまい何もできなくなることがしばしばある。

Error:Groovyc: While compiling tests of xxx_test: BUG! exception in phase 'semantic analysis' in source unit '/Users/user.name/IdeaProjects/projectName/xxx/src/test/groovy/jp/co/hoge/foo/controller/api/bar/HogeApiControllerSpec.groovy' sun.reflect.annotation.TypeNotPresentExceptionProxy
(中略)
Caused by: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
(中略)

他のブランチを取り込んだときに gradle の設定にズレが生じて発生する?ちゃんとした原因はよくわからない。。
自分の場合は gradle を再読み込みすると直るので、一旦編集して import gradle するか、メニュー>Build>Rebuild Project する。

Groovy で Scala の zip みたいなことやりたい

def ids = [1, 2, 3]
def names = ['Alice', 'Bella', 'Carol']

[ids, names].transpose()
=> [[1, Alice], [2, Bella], [3, Carol]]

ここからさらに加工したい場合は collect() 使うとかする。

[ids, names].transpose().collect { array ->
    [id: array[0], name: array[1]]
}

=> [[id:1, name:Alice], [id:2, name:Bella], [id:3, name:Carol]]

Gatlingを使ってみる セット編

負荷テストのツール Gatling を使ってみた。
セットアップにごにょごにょしてしまったのでメモライズ

2.1.x は Java のバージョン8でしか使えません、というお話。

公式サイトから本体をDLして、任意のディレクトリに展開する。

Gatling Load and Performance testing - Open-source load and performance testing

展開したディレクトリに移動して、テスト実行スクリプトを呼び出す。
と、バージョンによっては以下のエラーが表示される。

cd gatling-charts-highcharts-bundle-2.1.7
sh bin/gatling.sh

Java9(or 6)

GATLING_HOME is set to /Users/akirasan/work/gatling-charts-highcharts-bundle-2.1.7
intx ThreadPriorityPolicy=42 is outside the allowed range [ 0 ... 1 ]
Improperly specified VM option 'ThreadPriorityPolicy=42'
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

Java7

GATLING_HOME is set to /Users/akirasan/work/gatling-charts-highcharts-bundle-2.1.7
Exception in thread "main" java.lang.UnsupportedClassVersionError: io/gatling/app/Gatling : Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:637)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

java8

起動するとどのシミュレータを実行するか尋ねられるので選択。
*デフォルトでサンプルが6つ入っているので試しに一番を実行

GATLING_HOME is set to /Users/akirasan/work/gatling-charts-highcharts-bundle-2.1.7
Choose a simulation number:
     [0] computerdatabase.BasicSimulation
     [1] computerdatabase.advanced.AdvancedSimulationStep01
     [2] computerdatabase.advanced.AdvancedSimulationStep02
     [3] computerdatabase.advanced.AdvancedSimulationStep03
     [4] computerdatabase.advanced.AdvancedSimulationStep04
     [5] computerdatabase.advanced.AdvancedSimulationStep05
1
Select simulation id (default is 'advancedsimulationstep01'). Accepted characters are a-z, A-Z, 0-9, - and _

Select run description (optional)

Simulation computerdatabase.advanced.AdvancedSimulationStep01 started...

================================================================================
2018-03-09 19:19:12                                           0s elapsed
---- Scenario Name -------------------------------------------------------------
[                                                                          ]  0%
          waiting: 1      / active: 0      / done:0
---- Requests ------------------------------------------------------------------
> Global                                                   (OK=0      KO=0     )

================================================================================


================================================================================
2018-03-09 19:19:16                                           5s elapsed
---- Scenario Name -------------------------------------------------------------
[--------------------------------------------------------------------------]  0%
          waiting: 0      / active: 1      / done:0
---- Requests ------------------------------------------------------------------
> Global                                                   (OK=4      KO=0     )
> Home                                                     (OK=1      KO=0     )
> Home Redirect 1                                          (OK=1      KO=0     )
> Search                                                   (OK=1      KO=0     )
> Select                                                   (OK=1      KO=0     )
================================================================================


================================================================================
2018-03-09 19:19:22                                          10s elapsed
---- Scenario Name -------------------------------------------------------------
[--------------------------------------------------------------------------]  0%
          waiting: 0      / active: 1      / done:0
---- Requests ------------------------------------------------------------------
> Global                                                   (OK=8      KO=0     )
> Home                                                     (OK=2      KO=0     )
> Home Redirect 1                                          (OK=2      KO=0     )
> Search                                                   (OK=1      KO=0     )
> Select                                                   (OK=1      KO=0     )
> Page 1                                                   (OK=1      KO=0     )
> Page 2                                                   (OK=1      KO=0     )
================================================================================


================================================================================
2018-03-09 19:19:27                                          15s elapsed
---- Scenario Name -------------------------------------------------------------
[--------------------------------------------------------------------------]  0%
          waiting: 0      / active: 1      / done:0
---- Requests ------------------------------------------------------------------
> Global                                                   (OK=10     KO=0     )
> Home                                                     (OK=2      KO=0     )
> Home Redirect 1                                          (OK=2      KO=0     )
> Search                                                   (OK=1      KO=0     )
> Select                                                   (OK=1      KO=0     )
> Page 1                                                   (OK=1      KO=0     )
> Page 2                                                   (OK=1      KO=0     )
> Page 3                                                   (OK=1      KO=0     )
> Page 4                                                   (OK=1      KO=0     )
================================================================================


================================================================================
2018-03-09 19:19:31                                          19s elapsed
---- Scenario Name -------------------------------------------------------------
[##########################################################################]100%
          waiting: 0      / active: 0      / done:1
---- Requests ------------------------------------------------------------------
> Global                                                   (OK=13     KO=0     )
> Home                                                     (OK=2      KO=0     )
> Home Redirect 1                                          (OK=2      KO=0     )
> Search                                                   (OK=1      KO=0     )
> Select                                                   (OK=1      KO=0     )
> Page 1                                                   (OK=1      KO=0     )
> Page 2                                                   (OK=1      KO=0     )
> Page 3                                                   (OK=1      KO=0     )
> Page 4                                                   (OK=1      KO=0     )
> Form                                                     (OK=1      KO=0     )
> Post                                                     (OK=1      KO=0     )
> Post Redirect 1                                          (OK=1      KO=0     )
================================================================================

Simulation finished
Parsing log file(s)...
Parsing log file(s) done
Generating reports...

================================================================================
---- Global Information --------------------------------------------------------
> request count                                         13 (OK=13     KO=0     )
> min response time                                    287 (OK=287    KO=-     )
> max response time                                   1121 (OK=1121   KO=-     )
> mean response time                                   452 (OK=452    KO=-     )
> std deviation                                        242 (OK=242    KO=-     )
> response time 50th percentile                        333 (OK=333    KO=-     )
> response time 75th percentile                        540 (OK=540    KO=-     )
> mean requests/sec                                  0.683 (OK=0.683  KO=-     )
---- Response Time Distribution ------------------------------------------------
> t < 800 ms                                            11 ( 85%)
> 800 ms < t < 1200 ms                                   2 ( 15%)
> t > 1200 ms                                            0 (  0%)
> failed                                                 0 (  0%)
================================================================================

Reports generated in 0s.
Please open the following file: results/advancedsimulationstep01-1520590751977/index.html

実行結果は results ディレクトリの配下に保存される。

open results/advancedsimulationstep01-1520590751977/index.html

WordPress で何かアクションがあった時に slack に通知したい

概要

WordPress で何らかのアクション(「投稿」を「公開」したとき、など)に Slack 内の任意のチャンネルに通知する手順。

手順

Slack で Incoming WebHooks URL を生成する

Slack に管理者権限でログインし Incoming WebHooks URL を発行する。

この時、通知先の指定が可能だが、プラグインの設定でも通知先を指定できる。

※この URL に対して POST すると slack に通知が飛ぶので、外部に漏れないよう注意すること( URL を再発行することも可能)

WordPress に Slack プラグインをインストールする

WordPress に管理者権限でログインし、メニュー>プラグイン>新規追加 から、キーワード「slack」で検索、「Rock The Slackbot」をインストールする。

インストール完了後、メニュー>プラグイン>インストール済みプラグイン から、Rock The Slackbot を有効化すると使用できるようになる。

補足:

Rock The Slackbot は git で公開されている。

github.com

プラグインの設定をする

  1. メニュー>ツール>Rock The Slackbot をクリック
  2. 画面中央の「Let's get this party started」をクリック
  3. 通知設定画面が表示されるので、以下の項目を適宜設定、Save Webhook をクリック

設定できる項目は以下の通り。
*ハイフンの部分は確認中

設定名 設定内容
Name of Webhook この通知設定の名前
Name of Slack Account -
Webhook URL Slackで発行した通知用URL
Send To Slack Channel(s) or Direct Message(s) 通知先をwebhookで指定したチャンネル以外に指定したい場合は入力(空白の場合、デフォルトのチャンネルに通知される)
Post Message As Which Slack Username -
Icon Emoji For Message -
Use Custom URL For Message Icon -
The WordPress Icon -
Exclude Post Types From Notifications 指定した投稿タイプを通知対象から除外する
When Slack Notifications Fail 通知が失敗した時に知らせるメールの送信先
Notification Events 何をした時に通知するかを設定する(以下の項目から選択)
Content
When a post is published 投稿が公開
When a post is unpublished 投稿が非公開
When a post is drafted 下書きを作成
When a post is pending review 投稿がレビュー待ち※レビュー待ち・・・権限「寄稿者」が記事を投稿したあと、公開に承認が必要な状態
When a post is scheduled 自動投稿(予約投稿)が作成
When a post's content is updated 投稿内容が更新
When a post is deleted 投稿が削除
When a post is trashed 投稿がゴミ箱へ移動
When a 404 error is thrown 404(Not found)エラーを検知
Comments
When a comment is added コメントを追加
When a comment is unapproved コメントを非承認
When a comment is approved コメントを承認
When a comment is marked as spam コメントがスパム判定された
When a comment is trashed コメントを削除(ゴミ箱)
Menus
When a menu item is deleted メニューアイテムを削除
Media
When media is added メディアを追加
When media is edited メディアを編集
When media is deleted メディアを削除
Users
When a user is added ユーザーを追加
When a user is deleted ユーザーを削除
When a user's role has changed ユーザーの権限を変更
Updates
When a WordPress core update is available WordPress 本体のアップデートが利用可能
When WordPress core is updated WordPress 本体がアップデートされた
When a plugin update is available プラグインのアップデートが利用可能
When a plugin is updated プラグインがアップデートされた
When a theme update is available テーマのアップデートが利用可能
When a theme is updated テーマがアップデートされた
Deactivate チェックすると、設定は残したまま、このwebhookを無効にする

その他

  • Slack に通知される情報の中には旧ステータスなどの内容も含まれるので、削除したい場合はプラグインPHP を直接いじる必要がありそう。
  • 通知のフックは複数登録ができるため、上記投稿通知とは別に、例えば「コメントが追加された」「テーマのアップデートが利用可能」という管理者向けのイベントをまとめて slack の任意のユーザへと通知することも可能。

チャレンジ失敗の原因と攻略「猫の品種を認識する Cat Rescue アプリケーションの構築」編 その2

プロジェクト「猫の品種を認識する Cat Rescue アプリケーションの構築」の単元「Einstein Vision Apex ラッパーのインストール」から。 

trailhead.salesforce.com

チャレンジ失敗メッセージは以下の通り。

Challenge Not yet complete... here's what's wrong: 
Could not authorise with Einstein Vision. Please validate your credentials.

まず、一つ前の単元「Einstein プラットフォームアカウントの作成 」にそって Einstein アカウントを作成・認証証明書を登録・ファイルをアップロードする。 ここでのチャレンジは成功しているので、手順はOKだと思う。

セクション「未管理パッケージをインストールする」で Trailhead の Playground に入れていることを確認済み。

ので、おそらく問題は次のセクション「Einstein 認証ユーザを設定する」にあるっぽい。

  1. [Setup (設定)] の [Home (ホーム)] タブから、[Quick Find (クイック検索)] ボックスに「Custom Settings」(カスタム設定) と入力し、[Custom Settings (カスタム設定)] を選択します。
  2. [Einstein AI Settings (Einstein AI 設定)] の横の [Manage (管理)] をクリックします。
  3. [Default Organizational Level Value (デフォルトの組織レベルの値)] の上の [New (新規)] をクリックします。
  4. [Einstein EMail (Einstein メール)] 項目に、Einstein プラットフォームアカウントにサンアップしたときに使用したメールアドレスを入力します。
  5. [Save (保存)] をクリックします。

4のメールアドレスには Playground のアカウントで Einstein のアカウントを作成したので、ユーザ名@playful-hoge-nnnnnn.com を入力していたが、組織で使用しているメールアドレスを入力したら解決。 メールアドレスを入れるべきところに Playground のユーザ名を入力していたことが原因でした。

チャレンジ失敗の原因と攻略「猫の品種を認識する Cat Rescue アプリケーションの構築」編

今回はプロジェクト「猫の品種を認識する Cat Rescue アプリケーションの構築」の単元「Lightning アプリケーションとカスタムオブジェクトの作成」から。

trailhead.salesforce.com

カスタムオブジェクトを作成後、セクション「猫と人のレコードを作成する」の手順に沿って、サンプルデータを登録する。

  1. [Cats (猫)] タブを選択して、[New (新規)] をクリックします。
  2. [Cat Name (猫の名前)] に「Elvis」と入力します。
  3. [Save & New (保存 & 新規)] をクリックします。
  4. [Cat Name (猫の名前)] に「Amanda」と入力します。
  5. [Save & New (保存 & 新規)] をクリックします。
  6. [Cat Name (猫の名前)] に「Amanda」と入力します。
  7. [Save (保存)] をクリックします。

ステップを確認すると、以下のメッセージが。

Challenge Not yet complete... here's what's wrong:
Please validate that three cats exist with the names 'Elvis', 'Marissa', and 'Amanda'.

サンプルデータの登録で'Amanda'が2つ登場しているが、1つは'Amanda'ではなく'Marissa'で登録しましょう。

Trailhead は日本語訳が怪しかったり、チャレンジのテキストに誤りがあったり、ちょいちょい本筋とは関係ないところにもハマりどころがあるので、細かいところでも、今後の自分のためにメモしておくことにします。

SQL PowerArchitect を MacOS で使う

概要

プロジェクトで ER 図を見るのに PowerArchitect を使用しているのだけども古いバージョンの Java が必要だったのでメモ

環境

MacOS: High Sierra(10.13.3)

手順

ここからダウンロード、インストールする https://code.google.com/archive/p/power-architect/

開くと、以下のメッセージが表示される。

"PowerArchitect"を開くには、以前のJava SE 6 ランタイムをインストールする必要があります。

→「詳しい情報」をクリックすると Java ランタイムの DL ページに遷移する

MacOS 用 java6 ランタイム https://support.apple.com/kb/DL1572?locale=ja_JP

ページ上部の「ダウンロード」からダウンロード→インストール

f:id:noterr0001:20180322144555p:plain