Play FrameworkをVSCodeでリモートデバッグする
はじめに
難しく考えすぎていました。
拡張機能なんていらない!
ググった結果
こんなキーワードで検索していました。
すると、「Remote Development」を入れろとか、「ObjectScript」を入れろとか、
記事の海に飲み込まれていました。
あ、23歳おめでとう。
Eclipseでは簡単にできる
デバッグ構成の「リモート Java アプリケーション」で。
VSCodeもこれぐらい簡単にできないものか。
※リモートデバッグ用のポートを開けている前提です。
ググり直す
Play Frameworkに固執するのはやめて、検索キーワードにSpring Bootを入れてみたら良記事発見。 yomon.hatenablog.com
そうそう、この情報が欲しかったのです。
下記内容のlaunch.jsonを作成するだけでOK。
{ // IntelliSense を使用して利用可能な属性を学べます。 // 既存の属性の説明をホバーして表示します。 // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "java", "name": "Debug (Attach)", "request": "attach", "hostName": "localhost", "port": 9999 } ] }
FastArrayListはforEach()に対応していない
OpenJDK11で、Apache Commons Collections 3系に含まれるFastArrayListに対して、forEach()を行うと処理が行われない。
List<String> list = new FastArrayList(); list.add("aaa"); list.add("bbb"); list.add("ccc"); StringBuilder sb = new StringBuilder(); list.forEach(e -> sb.append(e)); // xxが出力される System.out.println("x" + sb.toString() + "x");
原因
FastArrayListはforEach()をオーバーライドしていないので、親であるArrayListのforEach()が実行される。
@Override public void forEach(Consumer<? super E> action) { Objects.requireNonNull(action); final int expectedModCount = modCount; final Object[] es = elementData; final int size = this.size; for (int i = 0; modCount == expectedModCount && i < size; i++) action.accept(elementAt(es, i)); if (modCount != expectedModCount) throw new ConcurrentModificationException(); }
ループ条件のmodCountはAbstractListで宣言されている。
protected transient int modCount = 0;
また、sizeはArrayListで宣言されている。
private int size;
これらはArrayList#add(E)ではインクリメントされるが、FastArrayList#add(Object)ではインクリメントされない。(sizeはアクセスできないし)
対処
匿名クラスでforEach()をオーバーライドする。
List<String> list = new FastArrayList() { public void forEach(Consumer action) { Objects.requireNonNull(action); for (Object t : this) { action.accept(t); } }; }; list.add("aaa"); list.add("bbb"); list.add("ccc"); StringBuilder sb = new StringBuilder(); list.forEach(e -> sb.append(e)); // xaaabbbcccxが出力される System.out.println("x" + sb.toString() + "x");
Scratchで共同開発する
Scratchの共有プロジェクトとバックパックを使用して、共同開発する方法を教えていただいたので、まとめておきます。
【作成するプロジェクト】
キャッチゲーム
【使用するアカウント】
e_masakun ステージ担当
e_chi_chan リンゴ担当
e_nacchan ボウルおよびマージ・追加開発担当
1. e_masakunでステージを作成し、共有プロジェクトに
2. e_chi_chanでリンゴを作成し、共有プロジェクトに
3. e_nacchanでボウルを作成し、共有プロジェクトに
※以降はe_nacchanで作業します。
4. e_chi_chanの共有プロジェクトの中を見る
5. リンゴのスプライトをバックパックにドラッグ&ドロップ
6. 自分の共有プロジェクトの中を見る
7. バックパックからスプライトにドラッグ&ドロップ
8. e_masakunの共有プロジェクトの中を見る
9. ステージそのものをバックパックに入れることはできないので、ステージのスクリプトをバックパックにドラッグ&ドロップ ※背景も同様
10. 自分の共有プロジェクトに戻り、バックパックからステージのスクリプトと背景をドラッグ&ドロップ
11. ボウルの追加開発
12. リンゴの追加開発
こんな感じで。
今回は1人で複数アカウントを使用していますが、実際にはどのようにして役割分担やマージしていくかが重要と感じました。
Pythonで日本標準時を取得・表示する
※細かいことは考慮していません。
# モジュール読み込み import requests import json from datetime import datetime from time import ctime # NICTの日本標準時をJSONで取得 response = requests.get("http://ntp-b1.nict.go.jp/cgi-bin/json") response.encoding = response.apparent_encoding response_text = response.text # JSONから日本標準時を取得し、日付に変換 response_json = json.loads(response_text) st = response_json["st"] st_ctime = ctime(st) st_datetime = datetime.strptime(st_ctime, "%a %b %d %H:%M:%S %Y") # 表示 print(st_datetime)
実行結果
2018-09-01 21:43:55
{ "id": "ntp-b1.nict.go.jp", "it": 0.000, "st": 1535805835.215, "leap": 36, "next": 1483228800, "step": 1 }
また、ctimeの結果をprintすると下記のようになります。
Sat Sep 1 21:43:55 2018
はてなブログを始めました
不定期にアウトプットしていきます。