【GAS】シートをDBのテーブルっぽく使う

最近、GoogleAppsScriptにハマり始めた
GASはjsのバージョンが古くて好きじゃなかったけど、開発環境のセットアップが不要で気軽に始められるのが良い
で、いろいろ作ってるとスプレッドシートをDBのように扱いたくなるのでライブラリ化した

シートをDB化できると結構夢が広がる
例えば大量データのバッチ処理がしたい場合、通常はGASの処理時間制限にかかって処理できない
そこでシートをキューみたいに使って処理を分割すればこの制限を回避できる
しかもGASはWebAPIも作れるから、ちょっとしたサンプルアプリなら普通に作れそう

とりあえずGithubAPIを使って遊んでみようかと考え中
projectsのバーンダウンチャート作るとか、API仕様書(swagger)やDB仕様書のビュワー作るとか
楽しみだ

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人くらい
  • 塾自体はずっと前からあったが、私は塾長をやったことがなかったので今回引き受けてみた
続きを読む