Docker(17.12.0) 汚せる nodejs 実行環境を作る
そして、自分の用途を考えると、何より色々試せるサンドボックス環境が欲しかったのだ。
ならば作ろうじゃないか Docker で!
自分がよく作るだろう環境を image 化する
という事で、おもむろに Ubuntu イメージからコンテナを作成する。
XXXXXXX:~ azalea$ docker run --name node-ubuntu -it ubuntu /bin/bash root@7404156c11f4:/# apt-get update -y Get:1 http://security.ubuntu.com/ubuntu xenial-security InRelease [102 kB] Get:2 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB] Get:3 http://security.ubuntu.com/ubuntu xenial-security/universe Sources [58.7 kB] Get:4 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [102 kB] 中略 Get:21 http://archive.ubuntu.com/ubuntu xenial-backports/universe amd64 Packages [7172 B] Fetched 24.8 MB in 12s (2009 kB/s) Reading package lists... Done
初っ端は更新から。
そしたら、デフォルトパッケージで nodejs
と npm
をインストールする。
ただしこの時点では node
コマンドは使えなくて nodejs
コマンドというクソっぷり。
root@7404156c11f4:/# apt-get install nodejs npm -y Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: binutils build-essential bzip2 ca-certificates cpp cpp-5 dpkg-dev fakeroot file g++ g++-5 gcc gcc-5 gcc-5-base gyp ifupdown iproute2 isc-dhcp-client isc-dhcp-common javascript-common libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan2 libatm1 libatomic1 libc-dev-bin libc6-dev libcc1-0 libcilkrts5 libdns-export162 libdpkg-perl libexpat1 libfakeroot libffi6 libfile-fcntllock-perl libgcc-5-dev libgdbm3 libgmp10 libgomp1 libicu55 libisc-export160 libisl15 libitm1 libjs-inherits libjs-jquery libjs-node-uuid libjs-underscore liblsan0 libmagic1 libmnl0 libmpc3 libmpfr4 libmpx0 libperl5.22 libpython-stdlib libpython2.7-minimal libpython2.7-stdlib libquadmath0 libsqlite3-0 libssl-dev libssl-doc libssl1.0.0 libstdc++-5-dev libstdc++6 libtsan0 libubsan0 libuv1 libuv1-dev libxtables11 linux-libc-dev make manpages manpages-dev mime-support netbase node-abbrev node-ansi node-ansi-color-table node-archy node-async node-block-stream node-combined-stream node-cookie-jar node-delayed-stream node-forever-agent node-form-data node-fstream node-fstream-ignore node-github-url-from-git node-glob node-graceful-fs node-gyp node-inherits node-ini node-json-stringify-safe node-lockfile node-lru-cache node-mime node-minimatch node-mkdirp node-mute-stream node-node-uuid node-nopt node-normalize-package-data node-npmlog node-once node-osenv node-qs node-read node-read-package-json node-request node-retry node-rimraf node-semver node-sha node-sigmund node-slide node-tar node-tunnel-agent node-underscore node-which nodejs-dev openssl patch perl perl-modules-5.22 python python-minimal python-pkg-resources python2.7 python2.7-minimal rename xz-utils zlib1g-dev 中略 Setting up npm (3.5.2-0ubuntu4) ... Processing triggers for libc-bin (2.23-0ubuntu10) ... Processing triggers for systemd (229-4ubuntu21) ... Processing triggers for ca-certificates (20170717~16.04.1) ... Updating certificates in /etc/ssl/certs... 148 added, 0 removed; done. Running hooks in /etc/ca-certificates/update.d... done.
ここで、npm
を使って n
コマンドをインストールする。
root@7404156c11f4:/# npm cache clean root@7404156c11f4:/# npm install n -g /usr/local/bin/n -> /usr/local/lib/node_modules/n/bin/n /usr/local/lib `-- n@2.1.8
あとは wget なり curl なりをインストールして、n stable
で最新安定板の node を入れてしまう。
root@7404156c11f4:/# apt-get install wget -y Reading package lists... Done Building dependency tree Reading state information... Done 中略 Processing triggers for libc-bin (2.23-0ubuntu10) ... root@7404156c11f4:/# n stable install : node-v9.4.0 mkdir : /usr/local/n/versions/node/9.4.0 fetch : https://nodejs.org/dist/v9.4.0/node-v9.4.0-linux-x64.tar.gz installed : v9.4.0 root@7404156c11f4:/# ln -sf /usr/local/bin/node /usr/bin/node root@7404156c11f4:/# node -v v9.4.0
Ubuntu デフォルトの nodejs とかいらないので削除
root@7404156c11f4:/# apt-get purge -y nodejs npm Reading package lists... Done Building dependency tree Reading state information... Done The following packages were automatically installed and are no longer required: binutils build-essential bzip2 cpp cpp-5 dpkg-dev fakeroot file g++ g++-5 gcc gcc-5 gyp ifupdown iproute2 isc-dhcp-client isc-dhcp-common javascript-common libalgorithm-diff-perl 中略 Removing nodejs (4.2.6~dfsg-1ubuntu4.1) ...
しっかしデフォルトだと nodejs バージョンが古いものである。
まずはこれで、nodejs 用のコンテナができたわけだ。
後はイメージ化しておくと、コンテナ作成が楽でいい
XXXXXXX:~ azalea$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7404156c11f4 ubuntu "/bin/bash" 7 hours ago Exited (0) 20 seconds ago node-ubuntu d44b8f1d3bc2 wordpress "docker-entrypoint.s…" 20 hours ago Exited (137) 20 hours ago web d551c8998080 mysql "docker-entrypoint.s…" 20 hours ago Exited (137) 20 hours ago db ac386b7fd1df hello-world "/hello" 3 days ago Exited (0) 3 days ago clever_aryabhata XXXXXXX:~ azalea$ docker commit --help Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] Create a new image from a container's changes Options: -a, --author string Author (e.g., "John Hannibal Smith <hannibal@a-team.com>") -c, --change list Apply Dockerfile instruction to the created image -m, --message string Commit message -p, --pause Pause container during commit (default true) XXXXXXX:~ azalea$ docker commit 7404156c11f4 nodejs9-sandbox sha256:a93c21a71dade1f0579fa9e9d2ef29cf9f02a79599c740d77bd0e143914954cc XXXXXXX:~ azalea$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE nodejs9-sandbox latest a93c21a71dad 5 seconds ago 529MB wordpress latest ef4787e1820e 8 days ago 410MB ubuntu latest 0458a4468cbc 3 weeks ago 112MB mysql latest f008d8ff927d 4 weeks ago 409MB nginx latest 3f8a4339aadd 7 weeks ago 108MB hello-world latest f2a91732366c 2 months ago 1.85kB XXXXXXX:~ azalea$
後は使いたいときに使えるはずだ。
まずはその検証のために元を削除してみる。
XXXXXXX:~ azalea$ docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7404156c11f4 ubuntu "/bin/bash" 7 hours ago Exited (0) 8 minutes ago node-ubuntu d44b8f1d3bc2 wordpress "docker-entrypoint.s…" 20 hours ago Exited (137) 20 hours ago web d551c8998080 mysql "docker-entrypoint.s…" 21 hours ago Exited (137) 20 hours ago db ac386b7fd1df hello-world "/hello" 3 days ago Exited (0) 3 days ago clever_aryabhata XXXXXXX:~ azalea$ docker rm node-ubuntu node-ubuntu XXXXXXX:~ azalea$ docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d44b8f1d3bc2 wordpress "docker-entrypoint.s…" 20 hours ago Exited (137) 20 hours ago web d551c8998080 mysql "docker-entrypoint.s…" 21 hours ago Exited (137) 20 hours ago db ac386b7fd1df hello-world "/hello" 3 days ago Exited (0) 3 days ago clever_aryabhata XXXXXXX:~ azalea$
そしたらイメージから起動する。
XXXXXXXX:~ azalea$ docker run -it nodejs9-sandbox
root@6cfb7120e148:/#
ひゃっはー。
そして関連コンテナを全て docker rm
で削除した後
XXXXXXX:~ azalea$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE nodejs9-sandbox latest a93c21a71dad About an hour ago 529MB wordpress latest ef4787e1820e 8 days ago 410MB ubuntu latest 0458a4468cbc 3 weeks ago 112MB mysql latest f008d8ff927d 4 weeks ago 409MB nginx latest 3f8a4339aadd 7 weeks ago 108MB hello-world latest f2a91732366c 2 months ago 1.85kB XXXXXXX:~ azalea$ docker image rm a93c21a71dad Untagged: nodejs9-sandbox:latest Deleted: sha256:a93c21a71dade1f0579fa9e9d2ef29cf9f02a79599c740d77bd0e143914954cc Deleted: sha256:ccfc46bb38a596f9d7965ce6aa2f15b905a44227b10c7e6405cde577b24ac586 XXXXXXX:~ azalea$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE wordpress latest ef4787e1820e 8 days ago 410MB ubuntu latest 0458a4468cbc 3 weeks ago 112MB mysql latest f008d8ff927d 4 weeks ago 409MB nginx latest 3f8a4339aadd 7 weeks ago 108MB hello-world latest f2a91732366c 2 months ago 1.85kB
docker image rm イメージ名
でイメージ削除までいける事がわかった。
Docker(17.12.0)で少し遊んで見る
これの続き
Wordpress なんて 11 年前の学生時代に弄ってた OSS を簡単に動かす紹介があったのでやって見た。
XXXXXXX:~ azalea$ docker run -d -e MYSQL_ROOT_PASSWORD=password --name db mysql Unable to find image 'mysql:latest' locally latest: Pulling from library/mysql f49cf87b52c1: Pull complete 78032de49d65: Pull complete 837546b20bc4: Pull complete 9b8316af6cc6: Pull complete 1056cf29b9f1: Pull complete 86f3913b029a: Pull complete f98eea8321ca: Pull complete 3a8e3ebdeaf5: Pull complete 4be06ac1c51e: Pull complete 920c7ffb7747: Pull complete Digest: sha256:7cdb08f30a54d109ddded59525937592cb6852ff635a546626a8960d9ec34c30 Status: Downloaded newer image for mysql:latest 58c04fb86b7ec40664344c91610f1caf0fa20d31238ad69248e61bee0dea4456 XXXXXXX:~ azalea$ XXXXXXX:~ azalea$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 58c04fb86b7e mysql "docker-entrypoint.s…" 16 seconds ago Up 20 seconds 3306/tcp db XXXXXXX:~ azalea$
MySQL を root パスワード password で起動。
ポート番号は MySQL デフォルトポートなんね。
続いて wordpress
XXXXXXXX:~ azalea$ docker run --link db:mysql -p 8080:80 -e WORDPRESS_DB_PASSWORD=password --name web wordpress Unable to find image 'wordpress:latest' locally latest: Pulling from library/wordpress e7bb522d92ff: Already exists 75651f247827: Pull complete dbcf8fd0150f: Pull complete de80263f26f0: Pull complete 65be8ad4c5fd: Pull complete 239d5fed0dda: Pull complete 5ab39b683a9f: Pull complete 4a3f54f2d93a: Pull complete 28c970ad99e9: Pull complete 86b02bcfc0c2: Pull complete a21cb128d1e1: Pull complete 620a1b563498: Pull complete 2b7708d1b98c: Pull complete 0086574a434b: Pull complete 9eb9edc5beda: Pull complete 660c359d962d: Pull complete 7668cac2f2dd: Pull complete 57950765f0c3: Pull complete 25f60226e8a5: Pull complete Digest: sha256:9a6067b6f4d950e4a5fea699d4e9537bdcc2375f651e1ce5c98aa4dc2c61d1b7 Status: Downloaded newer image for wordpress:latest WordPress not found in /var/www/html - copying now... Complete! WordPress has been successfully copied to /var/www/html AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message [Fri Feb 16 13:14:08.132796 2018] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.25 (Debian) PHP/7.2.2 configured -- resuming normal operations [Fri Feb 16 13:14:08.132915 2018] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
うん、起動したので http://localhost:8080 アクセス
2コマンドか…楽になったものだ。
そこでもう一声。
こっちの記述も試してみようと思う。
つまり Network
機能だ。
まずネットワークが現在どうなってるか確認する
XXXXXXX:~ azalea$ docker network ls NETWORK ID NAME DRIVER SCOPE 90f602f39b31 bridge bridge local d405e0672e62 host host local 69b041527ecb none null local
ほむほむ。
Wordpress 用のネットワーク作っちゃうぞー
XXXXXXX:~ azalea$ docker network create wordpress d632af3c1df0adaf37df9f99ac0bac2cc1e4b06dcbf3ac5a473e2655ae2f9383 XXXXXXX:~ azalea$ docker network ls NETWORK ID NAME DRIVER SCOPE 90f602f39b31 bridge bridge local d405e0672e62 host host local 69b041527ecb none null local d632af3c1df0 wordpress bridge local
ならここに所属するように指定して起動すればいいのか
XXXXXXX:~ azalea$ docker run -d -e MYSQL_ROOT_PASSWORD=password --net wordpress --name db mysql ba9ece2b29ea57013671334b5e2de19ed1046154892d0c0790c86ded093c5586 XXXXXXX:~ azalea$ docker run --link db:mysql -p 8080:80 -e WORDPRESS_DB_PASSWORD=password --net wordpress --name web wordpress WordPress not found in /var/www/html - copying now... Complete! WordPress has been successfully copied to /var/www/html AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.3. Set the 'ServerName' directive globally to suppress this message AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.3. Set the 'ServerName' directive globally to suppress this message [Fri Feb 16 13:32:37.914171 2018] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.25 (Debian) PHP/7.2.2 configured -- resuming normal operations [Fri Feb 16 13:32:37.914294 2018] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
ここまでに見たエラー
まずは、docker kill
したやつを同じコマンドで起動しようとして怒られたパターン。
kill
はプロセスを kill するだけで、コンテナに一切の手をつけないって事なのか。
docker start web
で問題なく起動した。
XXXXXXX:~ azalea$ docker run --link db:mysql -p 8080:80 -e WORDPRESS_DB_PASSWORD=password --net wordpress --name web wordpress docker: Error response from daemon: Conflict. The container name "/web" is already in use by container "07627d915bde1df0fa5bbdc11044cf576ce28ed5595ef9e6e2a92d40052ecb54". You have to remove (or rename) that container to be able to reuse that name. See 'docker run --help'. XXXXXXX:~ azalea$ docker rm web web
しかし ubuntu
は毎回 run
でイケるのだが…この差はなんだ?
疑問に思って Kitematic
眺めて見たら、ubuntu
は run するたびに別コンテナが作られてたという…なるほどな(汗
試しに、docker run --name test_ubuntu -it ubuntu /bin/bash
して Ctrl + D
で終了。
そして start からのインタラクティブ指定したら…
XXXXXXX:~ azalea$ docker start test_ubuntu -i root@f42f937734aa:/#
普通にログインできた。
しかも前回起動時のファイルが残ってたよ…なるほどね。
もうひとつは Network 構築後に --link
が省略できないかなと試してみて、エラー吐かれたパターン。
XXXXXXX:~ azalea$ docker run --link mysql -p 8080:80 -e WORDPRESS_DB_PASSWORD=password --net wordpress --name web wordpress WordPress not found in /var/www/html - copying now... Complete! WordPress has been successfully copied to /var/www/html Warning: mysqli::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known in Standard input code on line 22 Warning: mysqli::__construct(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in Standard input code on line 22
ここから見るに、Network はイメージ的には同一のイントラにホスト(コンテナ)を放り込むだけなのに対して、--link
はコンテナ同士を殆どシームレスに繋いでしまう事らしい。
扱い違うのね…
やっと概要掴んで来た。
- image
コンテナ作成の為の元情報。
run 実行するとここを元にコンテナを作る。 - container
実際に動作する単位。
start, stop で起動・停止を行う。
Docker(17.12.0)をもう少し真面目に弄って見た
前回 docker run -it ubuntu /bin/bash
を叩いた後の事。
別シェルを開いて、今度は docker ps
でプロセスを眺めてみた
bash が普通に動いているのが見えるわけだ。
まずはファイルを作成して見る。
別タブで差分を表示してみる。
普通に Ctrl+D
で終了して再起動すると、当然消えてしまい再起動後には存在しない。
それでは続きができないので、現在の状況を保存する。
XXXXXX:~ azalea$ docker commit mystifying_beaver test/changed sha256:8de0aa05cb311ad331dfe64598359e3c927245d247994bc578e65a976854cdcc XXXXXX:~ azalea$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE test/changed latest 8de0aa05cb31 10 seconds ago 112MB ubuntu latest 0458a4468cbc 2 weeks ago 112MB nginx latest 3f8a4339aadd 7 weeks ago 108MB hello-world latest f2a91732366c 2 months ago 1.85kB
ubuntu
イメージをちょこっとだけ変えた test/changed
ができた。
今のシェルを終了して、test/changed
で起動してみる。
root@9f0b92b0e617:/opt# exit XXXXXX:~ azalea$ docker run -it test/changed /bin/bash root@c619799653fe:/# ls /opt/ example.txt root@c619799653fe:/#
これで色々いじりやすくなった。
Docker(17.12.0)をインストールしてみた
事の始まりは先月末の会社の勉強会。
色々別の事をしていて中々手を出せなかった物だけど、使い捨ての実行環境を簡単に作れるという事でやって見ることにした。
教科書はこれ
- 作者: 吉岡恒夫
- 出版社/メーカー: マイナビ出版
- 発売日: 2016/05/30
- メディア: Kindle版
- この商品を含むブログを見る
それまでぶっちゃけ Vagrant + VirtualBox で作ってたのだが、こっちの方が簡易そうだったので(汗
最初に Docker をダウンロード&インストール。
起動まではインストーラにしたがっておけば OK 。
途中で Docker アカウントを作成するかどうか聞かれるので、無視しても作ってもいい。
僕は作った。
あと、起動後のメニューから、Kitematic というアプリもリンクがあるので、それもインストールした。
Docker はサーバクライアント方式のアプリケーションで、サーバ(デーモンとかサービスとかいう奴ら)を裏で起動しておいて、クライアント(コマンドラインや操作インターフェースなど)で弄る形式。
とりあえず Docker コマンドで
docker run hello-world
曰く、docker コマンドでアプリケーションなり環境なりを実行するのだが、ローカル上にその定義がなければ、Dockerhub というリポジトリからダウンロードしてインストールしてくれるのだとか。
そして実行すると、ローカル常にその定義が残る。
これは、Kitematic を起動すると見れる。
この←のメニューダブルクリックで起動できる。
うむ便利。
そして何がいいって、表示されている docker run -it ubuntu bash
コマンド。
これだけで Ubuntu が起動してシェルが叩ける!
マジか?
何がいいって、VM ではなさげなので超軽量に Ununtu が弄れるって事だ。
コマンド叩いてイメージのダウンロードさえ完了すれば、1秒かからない。
本気で開発環境こっちに移行したくなってくる…
Kotlin で SpringBoot (2.0.0.M6) で DI した時のメモ
Java では普通に使ってたのだけど、Kotlin で試して見たメモ。
サンプルは単純に設定を読むだけのコード.
package net.white.azalea.todo.utilities.security import org.springframework.boot.context.properties.ConfigurationProperties import org.springframework.stereotype.Component @Component @ConfigurationProperties(prefix = "crypt") class CryptConfig(var secret: String = "value")
地味にハマったのが下記。
- コンストラクタ引数に初期値を与えないと、なぜか Spring が「引数入りのコンストラクタみつかねーよ」とゴネて落ちる
どうやら Kotlin の生成するコンストラクタをコンストラクタとして認識できない模様。
そのため、初期値を与えてクラスフィールド化してやれば、コンストラクタインジェクションではなく、フィールドインジェクションとして辛うじて認識してくれる。 - 上記がわかると、var も指定してやらないと「setter ねーよ」といってコケる。
- 試した感じ、コンストラクタインジェクションを諦めて、クラス変数に
@Inject
するくらいが一番分かりやすい。
まだまだ kotlin での運用は微妙臭い印象。
個人的に、Kotlin で Spring はやらなくていいかなという気持ち。
わんくま勉強会(109回メモ:終了まで随時更新)
PowerShell とコマンドライン
- はるにゃさん
歴史的な話。
2003 年から開発開始、2006 年公開、Windows10 の Creators Update で Win+R のデフォルトシェルになった。
コマンドプロンプトは、そもそも DOS からずっと動いてた。
拡張されてきたくせに実は仕様書がない(過去の仕様があるにはある)。
バッチファイルの正式には cmd が正しく、bat は下位互換でのこされた…はずがずっと生きてる。
exe/com が実行バイナリだが、com はもう殆ど残ってない。
dir /s /b g:¥Windows¥System32¥*.exe
とかで探す。
- if 文と比較演算が大きく変化
DOS だと基本コマンド(シェル系)と、実行コマンド exe に分かれる。 シェルコマンドは、if - else しか書けない、要するに elseif がないし、利用可能な比較演算子が==, EQU, NEQ,GER, GEQ, LES, LEQ
くらい。
対して、PS だと-eq, -ne, -gt, -ge, -lt, -le
と意味が分かりやすくなった。 - DOS シェルの FOR が死ぬほど分かりづらかったが、PS で foreach (コマンドラインだと For-Each のみ)で書ける。
- pause 消えた
- goto / call / exit この辺りは Function に変わった
call の代わりに Start-Process で扱うなど
ただ、パワーシェルスクリプトは署名がつかないとデフォルトでは実行できない。
Set-ExecutionPolicy
で実行ポリシー指定する事で先ずは実行できる。
パワーシェルは言語寄りなので、細かい事できるようだ。
ただし、起動速度はどうあがいても DOS の方が早い、現状では DOS から PowerShell を呼び出して利用するのがオススメ。
LT
- Marp 紹介
- 5分でわかる MR
MR の定義説明。
RDB と数学
- うづきさん
正規形さえしていない非正規形データとは、以下のような感じ。
- カラムにCSVとか複数の値
なんというか蕁麻疹湧きそうなクソデータである。
(発表が死ぬほど香川推しなんだが(汗)
ここから第四正規形まで…(面倒なので略。知らない人は調べて)
RDB はリレーションによる 1:N 関係のデータを作る。
これは n 項関係という数学モデルとマップできる。
N項関係(二つ以上の直積集合の部分集合)、直積集合(単純列挙)という事らしい。
直積集合 を S1 = (a, b), S2 = (c, d)
として、S1 x S2 = (a, c), (a, d), (b, c), (b, d)
となり、この部分集合 (a, d), (b, c)
N 項関係というらしい。
この条件で見ると
- 第一正規形、様々な種類のデータ(名前と職業等)がごちゃ混ぜとなっているものは、単純値と呼ぶ
ある集合値の特定組み合わせが決まると、他の値も決定できるというような従属性を関数従属性という。
例えば、郵便番号が決定すれば市区町村まで断定できる。要するに郵便番号に対して都道県市区町村名は関数従属なわけだ。
こうした関係が保たれているのが第3正規形。
DB で言えばプライマリキー決まれば、値がが取れると言える。
多値従属性…(時間がない
代数学の話題
- IIJIMAS さん
集合の定義、基本の話から開始。A={x: x: 正整数}
d:X → Y
X に対してただひとつの Y が対応する物を写像。
また、x ≠ z => f(x) ≠ f(z)
の時単射という。
y∈Y
において、f(x) = y
が言える時、 f を X から Y の上への全射という。
直積: X,Y の要素に対して (x,y) という順序づけられた組み合わせ全体の集合を直積(XxY)という。
二項演算:ρ: SxS → S
を二項演算という。
群:含まれる任意 2 要素でいくつかのルールが成り立つ 整数Z、有理数Q、複素数C、実数R
環:足し算で前後可換、乗法で結合律 (ab)c=a(bc)
が成り立つ。分配律a(b+c) = ab+ac
が成り立つ。
…数学記号が入力しきれない…
k-means を紐解く
- XENO@小柴
クラスタリングアルゴリズムのひとつ。
つっても、分かりやすい話は、平面にデータマップして、大まかに「K 個グループあるはずだ!」という想定の元、画面上に K 個の移動可能なポインタをランダムに置く。
で、ポインタと各要素の平均距離を計算していって、ポインタの位置をずらしていき、移動しなくなったら完成。
で、ポインタから見て近い要素は同一グループとみなすと…