vscode上のplantumlでマインドマップを書く

plantumlでマインドマップが書けるらしい。 シンタックスはこんな感じ

@startmindmap
* Debian
** Ubuntu
*** Linux Mint
*** Kubuntu
*** Lubuntu
*** KDE Neon
** LMDE
** SolydXK
** SteamOS
** Raspbian with a very long name
*** <s>Raspmbc</s> => OSMC
*** <s>Raspyfi</s> => Volumio
@endmindmap

http://plantuml.com/ja/mindmap-diagram

このコードをplantumlのプラグインをインストールしたvscodeに貼ると...エラー...
たぶんplantumlのバージョンが古い
なので自力でバージョンを上げてvscode上でマインドマップが書けるようにします

前提条件

vscodeにPlantUMLプラグインがインストールされていてクラス図等が書ける

最新のjarをDLする

下記リンクから最新版のjarをDLして任意の場所に置く
ダウンロードのページ

vscodeに設定する

  1. cmd + ,
  2. 設定の検索にplantuml jarと入力
  3. ヒットした中からPlantuml: Jarを探す
  4. 入力欄に先ほどDLしたjarのパスを書く

確認

さっきエラーになったコードをプレビューすると、ちゃんと表示されました。

まとめ

vscodeに最新のplantumlを適用してマインドマップが書けるようになりました
最新のplantumlはマインドマップ以外にもガントチャートWBSが書けるっぽいから使ってみよう。

適当にmybatis用テンプレつくーる

風邪をひきました
そんな中コードを書いたらミスしまくりでイライラした
特にミスが多かったのがmybatis用に書くSQL
1つのテーブルにINSERTしたりSELECTしたりするだけなんだけど。。 テストが全然通らない
カンマが多いだの、少ないだの、そんなカラム名ねぇ〜よだの、型違うだの
うぜーー

てことでCreateTable文から適当にmybatis用のテンプレを作ってくれるやつ作った

https://naosim.sakura.ne.jp/app/mybatistool/

相当テキトーだから自分のプロジェクトの書き方じゃないと動かないと思う
とりあえず雰囲気だけお楽しみください

javaのStream#map()とjsのArray#map()は実行順が違う

java8から追加されたmap
他の言語にも似た機能はありますが実行順が違うので備忘録的なメモ

javaのmap

Stream.of(1, 2, 3, 4, 5)
        .map(v -> {
            System.out.printf("%dに1を加える\n", v);
            return v + 1;
        })
        .map(v -> {
            System.out.printf("%dを2倍する\n", v);
            return v * 2;
        }).forEach(v -> System.out.println(v));

jsのmap

[1, 2, 3, 4, 5]
        .map(v => {
            console.log(`${v}に1を加える`);
            return v + 1;
        })
        .map(v => {
            console.log(`${v}を2倍する`);
            return v * 2;
        })
        .forEach(v => console.log(v));

パっと見、まったく同じに見えますが実行してみると結果が違います

javaの実行結果

1に1を加える
2を2倍する
4
2に1を加える
3を2倍する
6
3に1を加える
4を2倍する
8
4に1を加える
5を2倍する
10
5に1を加える
6を2倍する
12

jsの実行結果

1に1を加える
2に1を加える
3に1を加える
4に1を加える
5に1を加える
2を2倍する
3を2倍する
4を2倍する
5を2倍する
6を2倍する
4
6
8
10
12

結果的に生成されるリストは同じですが実行順が違います
気をつけないと間違えそうですね

carloでHTTP通信してみる

  • carloとは
  • 疑問 クロスドメインなサイトにajaxでHTTP通信できるの?
  • 1. hello world
    • setup
    • htmlを作る
    • index.jsでhtmlを読み込む
    • 起動
  • 2. UIからnodeを呼ぶ
    • index.jsに呼ばれる側を作る
    • htmlからnodeを呼ぶ
    • 実行
  • 3. node-fetchで通信する
    • node-fetchのインストール
    • nodeに通信部分を実装する
    • UIから呼び出す
    • 実行
  • まとめ
  • 追記
    • index.js
    • inde.html
    • セキュリティには気をつけろ

carloとは

github.com

githubの説明文をgoogleで翻訳しました。

Carloは、ノードアプリケーションにGoogle Chromeレンダリング機能を提供し、Puppeteerプロジェクトを使用してローカルにインストールされたブラウザインスタンスと通信し、ノードとブラウザ間の通信のためのリモート呼び出しインフラストラクチャを実装します。

ポイントは「ローカルにインストールされたブラウザインスタンスと通信」の部分。 ローカルのchromeを使うから必然的にバイナリサイズが小さくなる。

続きを読む

ドメイン駆動設計なエンジニアの育成プログラムを作った

この記事は Engineering Manager vol.2 Advent Calendar 2018 - Qiita の16日目の記事です。

今の会社にはチームにジョインした方に対してドメイン駆動設計での開発ができるように育成するプログラムがあります。
「プログラムがある」と言っても有志で持ち回りでやってるちょっと真面目な勉強会のようなものです。
それを私がやることになったので、今日はその時に考えたことを書きます。
身の回りに勉強会等開いてくれる人がいたら「あの人はこんな感じのことを考えてるのかー」と思ってもらえたら幸いです。

誰?

  • 名前: なおしむ
  • ISPでエンジニアをしている
  • 最近は新しく来た人の育成もしている

背景

DDDスタート塾とは?

  • 新しく来た人が最初に入る塾
  • 塾の講師は「塾長」と呼ばれる
  • チャットルームのアイコンはこれ
    • f:id:naosim:20181215011116p:plain
  • 塾の期間はだいたい4週間
  • 塾の受講者はだいたい4人くらい
  • 塾自体はずっと前からあったが、私は塾長をやったことがなかったので今回引き受けてみた
続きを読む

【問題】キャメルケースの英語を日本語に変える

仕様書が日本語でプログラムは英語だと単語のマッピング表が欲しくなりますね。
今日はそんな問題です。

TODOの部分を実装し、下部の期待する振る舞いをするようにせよ。

<!DOCTYPE html>
<script>
function convertToJpName(camelCaseText) {
    // TODO 実装
}

// 期待する振る舞い
console.log(convertToJpName("engagementId"));        // => 契約ID
console.log(convertToJpName("engagementStartDate")); // => 契約開始日
console.log(convertToJpName("engagementEndDate"));   // => 契約終了日
console.log(convertToJpName("updateDateTime"));      // => 更新日時
</script>

とりあえずif文を4つ書けば解けますね。
けどもっと汎用的にしたいですねー。
例えば"engagementUpdateDate"が入力されたらプログラムを修正しなくても"契約更新日"になってくれるとか。