Spring MVC 苦戦中

自分用に Heroku + Spring boot のサンプルをちょこっといじるだけの簡単アプリを作っている。

Herokuへのデプロイは噂通り非常に簡単。問題はSpring!!

Javaが久しぶりなのに加え、最近はFrontは独立させてAPIで対話する形のアプリしか作ってなかったからMVCやりにくい。 あとSpringもまともにやってなかったからアノテーション覚えるの大変。

試した感想として、今プログラミング始めるって人がJavaを選ぶ理由がないよなー特にWebアプリだと。Frontと違いすぎるしFrontの言語はJavaScript/TypeScriptでほぼ確定だからその流れでBackってなるとNode.jsだよね。Expressとか超絶作りにくいけど。Enterprizeはまた事情が違うだろうけどさー。

Java+Springは学習コスト高すぎ。ドキュメントが詳しいけど難しい(最初の一歩の次がない)のも問題だね。

よく忘れる書き方メモ

文字列の連結

リストの値をログに適当に出したいとき用

collection.stream()
            .map( Object::toString )  // ここで書式を整えて
            .collect( Collectors.joining( "," ) );  // この書き方忘れがち

FormでリストPostする

Modelは普通に ListでOK。View側はThymeleafだとこう。

th:field="*{books[__${itemStat.index}__].title}"

参考:https://www.baeldung.com/thymeleaf-list

携帯を換えた

XperiaからXperiaに変えたぞ!!(4年ぶり3回目)

スマホ使い始めてから今までずっとauXperiaフラグシップモデル(無駄にw)を使い続けてて、mineoに変えて以降買い換え先のないまま時間が経ってしまい、今のXperiaさんが割と息も絶え絶え(ってほどではないのはすごいけど非対応のゲームとかある)なので困ってたら、なんとXperiaSIMフリー版が! GlobalモデルじゃなくてちゃんとFelica付き!!! ありがとうSONY!!

というわけで Xperia 1 II を買いました。XZからの乗り換え。

Androidの初期設定は買い換えごとに便利になってると感じる。今回は古いAndroidと通信してアカウント設定などなど丸ごと持ってきてくれた。 必要なのはアプリ入れ直すのと各アプリにログイン&Felicaの移行くらいかな。アプリは前回は勝手にインストールしてくれるてたような気がするけど気のせいだったかセキュリティ的にやめたのか謎。個人的には断捨離のタイミングなので自動インストールじゃなくても特に問題なし。

不満

新しいものは慣れるまで不満だらけになるよね。ってことでメモ。ちなみにまだHomeアプリと設定系しか触ってないw Homeアプリがとにかくものすごく使いにくい。直感的とは正反対。

  • Homeアプリにドロワーボタンがなくなった
    • 前はスワイプで出すかドロワーボタンか選べたようなんだがそのオプションがなくなってる? スワイプ嫌い。
  • アプリの履歴がiPhoneぽくなってて左にスライドが必要になった
    • 1つ前のアプリに切り替えるのは元々アプリの切り替えボタンダブルタップでできてたんだから複数表示されないと意味ないだろ…
    • しかも全部閉じるが一番古いのまでスワイプしないと出なくなった
      • いっぱい開いてるから全部閉じたい訳でして・・・

期待

今までのXperiaになかった機能で使えそうなの。

  • サイドセンスは昔似たようなアプリを入れてた。Androidのオーバーレイの制限で使い物にならなくなったからメーカー側でやってくれるのありがたい
    • いまいちうまく開けないのは操作慣れたら改善するかな? 私のオペレーションの問題だと思う
  • 傾けると起動する
    • 個人的には手に持つだけで画面起動するのはウザいけど時間見るためだけに電源押す必要ないのは良いかも

次回のためのメモ

  • 表示言語を英語にしてしまうと日本語の表示が中国語っぽくなってしまうので、第二言語として日本語を設定するのを忘れないように。

はてなブログにログインできない

はてなブログ を開いても非ログイン状態のメニューになるからログインをクリック したら「はてなIDまたはパスワードが違います」(※認証済みページからのリンクなのでIDもパスワードも入力していない)と表示されて困った話。

解決策

原因はサードパーティーCookieなので有効にしよう。 ChromeならURLの隣の鍵アイコンから Cookies を開いて許可できるよ! *.hatena.ne.jp を許可しろって書いてあった! 残念ながら直らなかったけど!

Cookie許可したくない人は ダッシュボード https://blog.hatena.ne.jp/から投稿できるよ!

セキュリティ難しい

今更ドメインは変えられないという事情はわかるけどセキュリティ設定を甘くしろというのはなんだかなぁ。 とはいえ認証方式変えるのもまた相当な手間だしなー

エラーメッセージ

せめてエラーメッセージがもうちょいまともだったらね。 Cookieが有効かどうかを検知できない(ブログにはメッセージ出せてるから検知できると思うけど)「IDまたはパスワードが違う」わけじゃないので。

メモ帳ではじめてのC#

諸事情によりIDEを使わずに簡単にC#を試したい。
使ったのはメモ帳じゃないけどテキストエディタなので許してほしい。

使うもの

前提環境

ソースコード

// Hello1.cs
public class Hello1
{
   public static void Main()
   {
      System.Console.WriteLine("Hello, World!");
   }
}

コンパイル

Windowsコンパイラが付属している(?)そうなのでそれを利用します!
参考:Visual Studioではなく、Windows付属のcsc.exe だけでC#実行ファイルを作る - Qiita

>C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe Hello.cs

Hello.csと同じフォルダにHello.exeが作られました。早速実行。

実行

>Hello.exe

結果

Hello, World!

やったね!

MacにVagrantを使って仮想環境を作る

まだ何も理解してないけどAWSのアカウントを取ったので使おうと話したらまずはローカルでLinux系の動きに慣れてみたらと言われて紹介されたので入れてみます。単語だけ聞いたので何を入れているのかは多分正しく理解してない!

手順

Mac 上で Vagrant を使って CentOS + Apache をセットアップ - Qiita こちらのサイト様に従って頑張ります!

  1. Vagranthttps://www.vagrantup.com/ からダウンロードしてインストールする。
  2. Vagrant Version確認

    $ vagrant -v
    Vagrant 1.7.4

  3. Virtual Boxを https://www.virtualbox.org/ からダウンロードしてインストールする。
  4. 作業フォルダを作成する。

    $ mkdir CentOS66

  5. 作成したディレクトリに移動しOSのBoxをダウンロードする(ちょっと重い)。

    $ vagrant box add CentOS66 https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.0.0/centos-6.6-x86_64.box

  6. 初期設定(Vagrant fileの作成)する。

    $ vagrant init CentOS66

  7. 作成されたVagrantfileを編集する(コメントアウトされている部分)。SSHでログインするために必要だそう。

    config.vm.network "private_network", ip: "192.168.33.10"

  8. 仮想環境を起動する。

    $ vagrant up

  9. SSHでログインしてみる。

    $ vagrant ssh

ログインできた! とりあえず何もせずにexitで出て行きました笑

(追記)

参考サイト様の手順を最後までやろうと奮闘していたところ、以下のエラーが発生。

default: httpd: Could not open configuration file /etc/httpd/conf/httpd.conf: Permission denied

調べてみるとSELinuxが親切にもファイルアクセスを制御しているということで(恥ずかしながら存在すら知らなかった)一時停止にしてみる。

vagrant$ setenforce 0 setenforce: setenforce() failed

ダメなようだ。もう少し調べてみるとこちらのサイトSELinux の動作状況を確認や設定するを発見。

vagrant$ sudo setenforce 0

こっちは通った。
もう一度Provisionして開くとindex.htmlが開きました。やったね!

$ vagrant provision

$ open http://192.168.33.10

Java EE 7 入門のエラーを解消する2

とりあえずMacNetBeansも使いにくいということを覚えた。

例のJava EE 7 入門 〜 NetBeansで始めるJavaEE7 First Tutorial #javaee7 #jjug #jav…チュートリアルを進めている。
※Createで5件以上登録できない件、>MAXじゃなくて>=MAXにしないとダメだった。メモ。

さてp.154でまたエラー。
こちらのサイトさんで引数なしのコンストラクタがないからだよと書かれていたので修正。
GlassFish: Java EE 7 入門ではまったこと - from The Edge of the (Java) World

元のコードをできるだけ変えないようにするためにこうしてみたら、ちゃんと404が返るようになったけどメッセージが返らなかった。
うーんよく分からない…
とりあえず上記サイトさんのコードの通り@Deprecated外してフィールドのfinal外してsetter作ったらメッセージもちゃんと返るようになりました!

public class ErrorModel {

    private final List<String> errorMessages;

    // 非推奨で引数なしコンストラクタを作る
    @Deprecated
    public ErrorModel() {
        this.errorMessages = null;
    }

    public ErrorModel(List<String> errorMessages) {
        this.errorMessages = errorMessages;
    }

    public List<String> getErrorMessages() {
        return errorMessages;
    }

}

それからp.197でjavax.enterprise.event.Eventが見つからなくてしばらく詰まったけど、これは単純にJavaEEのライブラリが入ってなかっただけだった。
Projectのプロパティからライブラリ追加で参照できるようになりました。
そして無事チュートリアルは完了。
まだまだ理解は追いついていないけど少しずつ覚えていこうと思います。
簡単に手を動かすための資料を作成いただいた作者様に感謝を。

JavaEE 7 入門の最初のエラーを解消する

JavaEE入門チュートリアルをやっている。

www.slideshare.net

問題

p.70でどうしてもエラーになるので試行錯誤してみた。
無事解消したのでメモ。

エラー内容

Unit testをするとエラーがでてしまうのです。

Invalid resource : jdbc/tutorial__pm

無視しても大丈夫な記事も見つかるけどせっかくなので頑張ってみる。

ヒント

この辺を見ると、JDBC resourceが無いんだよって言われてる気がする。
Java, JPA, Glassfish, Invalid resource : jdbc/__default__pm - Stack Overflow

手順

  1. サービスタブからサーバーを選んで管理コンソールを開く。
    f:id:vostochnaya:20150714232505p:plain
  2. JDBC Connection Poolで新規作成する。
    Resource Type:はjavax.sql.DataSourcesでClassnameはorg.apache.derby.jdbc.ClientDataSourceでOK。
    URL、ユーザー名、パスワード、データベース名を入力します。
    URLはjdbc:derby://localhost:1527/tutorial
    ※SecurityMechanismを削除しておかないとログインエラーになりました。
    f:id:vostochnaya:20150714233912p:plain
  3. JDBC Resourceを新規作成する。名前はjdbc/tutorialでOK。
    f:id:vostochnaya:20150714234450p:plain

再テスト

テスト通過!!
f:id:vostochnaya:20150714234658p:plain