Scalaで既存のListの末尾に値を追加する

Scalaで既存のListの末尾に値を追加するのにハマった。
一応解決したけど、それが正しいやりかたかもわからん。

リストを宣言して、
scala> var list = List(1, 2, 3)
list: List[Int] = List(1, 2, 3)

::で末尾に追加しようとして怒られる。
scala> list = list :: 4
<console>:8: error: value :: is not a member of Int
list = list :: 4

::でリストの先頭に追加するのは問題なく通る。
scala> list = 4 :: list
list: List[Int] = List(4, 1, 2, 3)

新しいリストを作って:::でつなげると、一応リストの末尾に追加できた。
scala> list = list ::: List(5)
list: List[Int] = List(4, 1, 2, 3, 5)

うーん、めんどい。
そういえば、昔Lispで同じような経験をしたような…
まぁ動くし、これでいっか。

Spring Bootでwarファイルを生成してTomcatで動かす雛形

Spring Bootでwarファイルを生成して、Tomcatで実行するための雛形ファイルを公開します.

http://www.loxsols.com/files/src/misc/loxsolsboot_004_war.zip
動作条件
・JDK 1.7
・Tomcat 8.5.16
・Spring Boot 1.5.4

※ tomcat 6では動かないので要注意です。

warファイルをデプロイして下記のURLを開くとjspファイルの内容が返却されるはずです。
http://localhost:8080/loxsolsboot/hello-jsp

手っ取り早く、JSPが使えるSpring Bootのwarファイルを生成したい人は活用ください。

 

 

 

 

 

Loxsols Twitter Analyzerをリリースしました。

Loxsols Twitter Analyzerは筆者のTwitterのタイムラインを形態素解析するツールです。

Loxsols Twitter Analyzer
http://www.loxsols.com/pukiwiki/index.php?Loxsols%20Twitter%20Analyzer

単語を抽出して出現頻度でソートした結果を取り出せます。
(それが何の役に立つかは(ry… )

Twitter 4JとYahoo形態素解析のAPIを使っています。

 

SpringBootServletInitializerのパッケージ構成が変更されている件

Spring Bootでjarファイルではなく、warファイルを生成してアプリケーション・サーバーにデプロイする時にSpringBootServletInitializerクラスを継承することになる。

このSpringBootServletInitializerクラスのパッケージ構成が曲者で、バージョンによっては正しくないimport文を参照することになる。

筆者の環境は以下のimport文の違いがあった。

正 : org.springframework.boot.web.support.SpringBootServletInitializer
誤 : org.springframework.boot.context.web.SpringBootServletInitializer

これのせいで、30分ほどコンパイルエラーの画面と格闘した。
例のごとく、Stack overflowが参考になった。
Spring Boot: SpringBootServletInitializer is deprecated
https://stackoverflow.com/questions/38843015/spring-boot-springbootservletinitializer-is-deprecated

springも一度リリースしたパッケージ構成をさらっと変えないでほしいな。

 

Loxols OCR翻訳 LINE BOT をリリースしました.

Loxols OCR翻訳 LINE BOTをリリースしました.
http://www.loxsols.com/pukiwiki/index.php?Loxols%20OCR%E7%BF%BB%E8%A8%B3%20LINE%20BOT

ls-ocr-tl-000
Loxols OCR翻訳 LINE BOTは、画像データの翻訳に対応したLINEの翻訳BOTです。
日本語と多言語の翻訳に対応しています。
入力した文字列が日本語の場合は、英語へ翻訳します。
日本語以外の文字列を入力した場合は、日本語へ翻訳します。

ls-ocr-tl-005

画像データを受け付けた場合は、BOT内部でOCR処理を行い、テキストデータを抽出して翻訳します。
ls-ocr-tl-003
※本サービスの運営には費用がかかるため、一定期間公開して利用者が少ないようであれば公開を停止します。予めご了承ください。

 

 

 

 

 

 

Spring Bootでapplication.propertiesに定義した独自の値を読み取る方法

Spring Bootで、application.propertiesには色々な魔法のキーワードを打ち込むけど、独自にキーと値を設定することも出来る。

んで、このapplication.propertiesに設定した値が読めなくて2時間ほどハマった。
日本語の資料を探そうとして見つからず、リソースリーダーとか触りだしてハマった。

こういうときは素直に英語でググりましょう。
Spring Boot application.properties read っと。
初っ端からヒットしました。

How to access a value defined in the application.properties file in Spring Boot
https://stackoverflow.com/questions/30528255/how-to-access-a-value-defined-in-the-application-properties-file-in-spring-boot

application.propertiesで下記のよう記載した場合、

userBucket.path=${HOME}/bucket

クラスでは下記のようにコーディングする。

@Value("${userBucket.path}")
private String userBucketPath;

 

さすが、StackOverFlowでした。

 

JavaでSimpleDateFormatで英単語の月や曜日をparseしてハマった話

HTTPのlast-modifiedは下記のような書式で提供される。
“Fri, 31 Mar 2017 13:32:24 GMT”

これをSimpleDateFormatでパースするには下記のフォーマットで出来る。
“EEE, dd MMM yyyy HH:mm:ss zzz”

…はずだった。
何故か、パースしてもjava.text.ParseException例外が発生するため、1時間以上悩んだ。

結果、下記のようにロケールを指定する必要があるらしい。

SimpleDateFormat format= new SimpleDateFormat(dateFormat, Locale.ENGLISH);

知らんがなwww
この情報は下記のサイトで入手しました。

SimpleDateFormatクラスparseメソッドのLocaleに注意

 

最近、作業が停滞しがちだなー。