20200122のdockerに関する記事は18件です。

Macのlocalhost上で動作しているサービスへDocker内部から接続する方法

Docker Container内部で動作している環境からMac上で動作しているサービスへ接続することが出来ずハマったので、その解決方法をメモしておきます。
よくあるMacからDocker上のサービスへ接続するのとは接続方向が逆になりますのでご注意ください。

背景

VirtualBox上にNAT network interface1つを接続した状態で仮想Ubuntuサーバを立ち上げ、
そこへPostgreSQL(ポート番号:5432)を立ち上げました。
その後、VirtualBoxのPort Forwarding機能でHost:5432 Guest:5432 でForwardする設定をしました。
この状態であれば、MacへPostgreSQLクライアントをインストールして、localhost:5432 へ接続することで仮想マシンで動作しているPostgreSQLへ接続可能です。
ところが、Mac環境をなるべく汚したくない私はpsqlコマンドをローカルにインストールすることを嫌い、PostgreSQLのDockerイメージを使って確認することにしました。
その際に接続できなくてハマりました。

解決方法

docker run -it --rm postgres psql -U root -h host.docker.internal

はい、結論から書くとこれが答えになります。
ポイントは、接続先をlocalhost:5432にするのではなく、host.docker.internal:5432にすることです。
どうやら、Docker Container上から見てローカル環境(Mac)のIPアドレスは、localhostと指定するのでは接続できず(おそらくDocker Containerそのものを指定してしまう?)、 host.docker.internal を指定する必要があるようです。
DockerはMac上の1プロセスとして動作するという理解をしているので、psqlコマンドを単体で実行するのと同じようなイメージでlocalhostを指定していたのでハマってしまいました。

参考情報など

公式: https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds
I WANT TO CONNECT FROM A CONTAINER TO A SERVICE ON THE HOST

StackOverFlow: https://stackoverflow.com/questions/24319662/from-inside-of-a-docker-container-how-do-i-connect-to-the-localhost-of-the-mach
Edit: If you are using Docker-for-mac or Docker-for-Windows 18.03+, just connect to your mysql service using the host host.docker.internal.

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

docker-compose で Cloud Datastore Emulatorを立ち上げpythonアプリと連携する

背景

サービスでdatastoreを使う事になり、開発環境やCIでのテストをどうするか試行錯誤した。 :thinking:
AWSと比較して情報が少ないので、まとめた。 :grinning:

要点

  • flaskアプリとCloud Datastore Emulatorをコンテナを作る
  • docker-composeでサービス連携を行う
  • datastoreの初期データ投入
  • flaskアプリから、Cloud Datastore Emulatorを操作する

ディレクトリ構成

.
├── app
│   ├── Dockerfile
│   └── src
│       ├── main.py
│       └── requirements.txt
├── datastore
│   ├── Dockerfile
│   ├── entrypoint
│   └── import
│       ├── 2020-01-21.overall_export_metadata
│       ├── default_namespace
│       │   └── kind_test_data
│       │       ├── default_namespace_kind_test_data.export_metadata
│       │       └── output-0
│       └── run.sh
└──  docker-compose.yaml

Cloud Datastore Emulator コンテナ構築

datastore/Dockerfile

公式のSDKイメージから最小限で作成。
エミュレータ起動用shell、データ投入用shellに実行権限付与。

FROM google/cloud-sdk:alpine

RUN apk add --update --no-cache openjdk8-jre \
  && gcloud components install cloud-datastore-emulator beta --quiet

COPY . /datastore/

WORKDIR /datastore

RUN chmod +x ./entrypoint
RUN chmod +x ./import/run.sh

ENTRYPOINT ["./entrypoint"]

datastore/entrypoint

docker-compose downした際にも、データを維持するために、/datastore/.data/ディレクトリにデータをためる。

オプションなしで起動すると、コンテナ内でしかアクセスできないので、--host-port=0.0.0.0:8081 として起動する。
環境変数から、プロジェクト名と一緒に流し込む。

#!/usr/bin/env bash

gcloud config set project ${DATASTORE_PROJECT_ID}

gcloud beta emulators datastore start \
  --data-dir=/datastore/.data \
  --host-port=${DATASTORE_LISTEN_ADDRESS}

データ投入のdatastore/import/run.sh

サーバー起動後、下記のエンドポイントにdump済みのデータの保存パスを投げるとデータがインポートできる。

export DATASTORE_PROJECT_ID

curl -X POST localhost:8081/v1/projects/${DATASTORE_PROJECT_ID}:import \
    -H 'Content-Type: application/json' \
    -d '{"input_url":"/datastore/import/2020-01-21.overall_export_metadata"}'

datastore/importのメタデータ

今回は、gcp のコンソールから、gcsにダンプしたデータをディレクトリ丸ごとdatastore/import配下に持ってきた。
sdkデータを直接生成してもよい。

python アプリ コンテナ構築

サンプル用にペラペラのアプリ構築する。

app/Dockerfile

FROM python:3.7-slim-buster

ENV HOME /api/

ADD ./ ${HOME}

WORKDIR ${HOME}

RUN pip install --upgrade pip \
    && pip install --no-cache-dir -r ${HOME}src/requirements.txt

ENTRYPOINT ["python", "src/main.py"]

app/main.py

ちょっと適当すぎる気がするが、データを保存して取り出すだけのエンドポイントを作成。 :thinking:

認証情報は、ダミーの認証をかませる。

from flask import Flask, jsonify
from google.auth.credentials import AnonymousCredentials
from google.cloud import datastore
from os import getenv

client = datastore.Client(
    credentials=AnonymousCredentials(),
    project=getenv('PROJECT_ID')
)

app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False


@app.route('/')
def index():
    key = client.key('EntityKind', 1234)
    entity = datastore.Entity(key=key)
    entity.update({
        'foo': u'bar'
    })
    client.put(entity)
    result = client.get(key)
    return jsonify(result)


if __name__ == '__main__':
    app.run(host='0.0.0.0')

app/requirements.txt

Flask==1.1.1
google-auth==1.6.2
google-cloud-datastore==1.8.0

docker-compose.yaml

datastoreのポートは、ホスト側にも開けておくと、GUIツールで見ることができて便利

https://github.com/GabiAxel/google-cloud-gui

version: '3.7'

x-custom:
  gcp:
    - &gcp_project_id "dummy"

services:
  app:
    build: "./app/"
    volumes:
      - "./app/:/app/"
    environment:
      FLASK_APP: dev
      DATASTORE_HOST: "http://datastore:8081"
      DATASTORE_EMULATOR_HOST: "datastore:8081"
      PROJECT_ID: *gcp_project_id
      TZ: Asia/Tokyo
    ports:
      - "5000:5000"
    depends_on:
      - datastore
  datastore:
    build: "./datastore"
    volumes:
      - "./datastore/.data:/datastore/.data"
    environment:
      DATASTORE_PROJECT_ID: *gcp_project_id
      DATASTORE_LISTEN_ADDRESS: 0.0.0.0:8081
    ports:
      - "18081:8081"

起動

docker-compose up 

ブラウザやcurlで、http://localhost:5000にアクセスすると{"foo": "bar"}と表示されるはず。

ログ

下記にデータが貯められてるのがわかる

/datastore/.data/WEB-INF/appengine-generated/local_db.bin

datastore_1  | Updated property [core/project].
datastore_1  | WARNING: Reusing existing data in [/datastore/.data].
datastore_1  | Executing: /google-cloud-sdk/platform/cloud-datastore-emulator/cloud_datastore_emulator start --host=0.0.0.0 --port=8081 --store_on_disk=True --consistency=0.9 --allow_remote_shutdown /datastore/.data
app_1        |  * Serving Flask app "main" (lazy loading)
app_1        |  * Environment: production
app_1        |    WARNING: This is a development server. Do not use it in a production deployment.
app_1        |    Use a production WSGI server instead.
app_1        |  * Debug mode: off
app_1        |  * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
datastore_1  | [datastore] Jan 22, 2020 6:22:00 AM com.google.cloud.datastore.emulator.CloudDatastore$FakeDatastoreAction$9 apply
datastore_1  | [datastore] INFO: Provided --allow_remote_shutdown to start command which is no longer necessary.
datastore_1  | [datastore] Jan 22, 2020 6:22:01 AM com.google.cloud.datastore.emulator.impl.LocalDatastoreFileStub <init>
datastore_1  | [datastore] INFO: Local Datastore initialized:
datastore_1  | [datastore]      Type: High Replication
datastore_1  | [datastore]      Storage: /datastore/.data/WEB-INF/appengine-generated/local_db.bin
datastore_1  | [datastore] Jan 22, 2020 6:22:02 AM com.google.cloud.datastore.emulator.impl.LocalDatastoreFileStub load
datastore_1  | [datastore] INFO: Time to load datastore: 218 ms
datastore_1  | [datastore] API endpoint: http://0.0.0.0:8081
datastore_1  | [datastore] If you are using a library that supports the DATASTORE_EMULATOR_HOST environment variable, run:
datastore_1  | [datastore] 
datastore_1  | [datastore]   export DATASTORE_EMULATOR_HOST=0.0.0.0:8081
datastore_1  | [datastore] 
datastore_1  | [datastore] Dev App Server is now running.
datastore_1  | [datastore] 
datastore_1  | [datastore] The previous line was printed for backwards compatibility only.
datastore_1  | [datastore] If your tests rely on it to confirm emulator startup,
datastore_1  | [datastore] please migrate to the emulator health check endpoint (/). Thank you!
datastore_1  | [datastore] The health check endpoint for this emulator instance is http://0.0.0.0:8081/Jan 22, 2020 6:22:11 AM io.gapi.emulators.grpc.GrpcServer$3 operationComplete
datastore_1  | [datastore] INFO: Adding handler(s) to newly registered Channel.
datastore_1  | [datastore] Jan 22, 2020 6:22:11 AM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead
datastore_1  | [datastore] INFO: Detected HTTP/2 connection.

データ投入

エミュレータのエンドポイントに、リクエストを投げてあげれば、ダンプデータも取り込める

docker-compose exec datastore bash ./import/run.sh

参考

下記のサイトを参考にさせていただきました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

外部からGCE上のDockerコンテナ内のMySQLへ接続

やりたいこと

GCE上にDockerを使ってWebとDBのサーバーを動作させている。

image.png

アプリケーションは、お馴染みのWordPressとする。

手元のPCから、直接MySQLにログインしたい。

現状

手元のPCからMySQLにログインするには、以下の3ステップが必要。

  1. GCEへSSHログイン
  2. DB Serverとして起動しているDockerコンテナへログイン
  3. MySQLへログイン

image.png

この1~3を一発で行いたい。

1. SSHログイン

SSH鍵が未作成なら、以下コマンドで作成

(外部PC)$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

cf. お前らのSSH Keysの作り方は間違っている - Qiita

公開鍵を登録

手元のSSH鍵でサーバーへログインできるように登録する必要がある。
以下の操作を、権限のある人に依頼する。

Compute Engine > Metadata > SSH Keys
で上の公開鍵を追加する。
(メールアドレスの @より前がユーザー名。)

SSH接続確認

(外部PC)$ ssh -i ~/.ssh/id_rsa [username]@[IP]

ログインできたらOK。

2. Dockerコンテナへログイン

まずはDockerでWordPressが起動していることを確認する。
以下はWordPress公式のdocker-compose.yml

docker-compose.yml
version: '3.1'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
    volumes:
      - wordpress:/var/www/html

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - db:/var/lib/mysql

volumes:
  wordpress:
  db:

起動できた。
image.png

コンテナへのログインはこのコマンド。

(GCE)$ docker exec -it [コンテナID] bash
root@[コンテナID]:/var/www/html#

ログインできた。(プロンプトが切り替わってる)

(Ctrl + C でログアウトしておく。)

3. MySQLへログイン

(GCE)$ docker exec -it [コンテナID] mysql -u exampleuser -pexamplepass
mysql>

cf. Docker上でMySQLにログインする - Qiita

ログインできた。

実行してみる

DB接続は、Sequel Proというツールを使っている。
image.png

接続失敗!

ログを見てみると、SSHログインできているけど、 127.0.0.1 port 3306 への接続で失敗しているみたい。

...
debug1: Connection established.
...
debug1: Authentication succeeded (publickey).
...
debug1: Connection to port 53983 forwarding to 127.0.0.1 port 3306 requested.
...
open failed: connect failed: Connection refused

原因はPort

MySQLが動作しているのは、Dockerコンテナ内の3306番ポート。
アクセスしようとしていたのは、GCEの3306番ポート。
この2つを繋ぐ必要があった。
cf. Dockerでポートフォワーディング解説 - Qiita

以下のように修正。

docker-compose.yml
version: '3.1'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
    volumes:
      - wordpress:/var/www/html

  db:
    image: mysql:5.7
    restart: always
    ports:
      - 3306:3306 # 追加した
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - db:/var/lib/mysql

volumes:
  wordpress:
  db:

再起動させる。

(GCE)$ docker-compose down
(GCE)$ docker-compose up

プロセスを表示すると、Portsの表示が変わった。
0.0.0.0:3306->3306/tcp になってる。

変更前
(GCE)$ docker-compose ps
      Name                    Command               State          Ports
--------------------------------------------------------------------------------
test_db_1          docker-entrypoint.sh mysqld      Up      3306/tcp, 33060/tcp
test_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:8080->80/tcp
変更後
(GCE)$ docker-compose ps
      Name                    Command               State                 Ports
---------------------------------------------------------------------------------------------
test_db_1          docker-entrypoint.sh mysqld      Up      0.0.0.0:3306->3306/tcp, 33060/tcp
test_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:8080->80/tcp

再実行

接続できた!?

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

外部からGCE上のDockerコンポーネント内のMySQLへ接続

やりたいこと

GCE上にDockerを使ってWebとDBのサーバーを動作させている。
image.png

アプリケーションは、お馴染みのWordPressとする。

手元のPCから、直接MySQLにログインしたい。

現状

手元のPCからMySQLにログインするには、以下の3ステップが必要。

  1. GCEへSSHログイン
  2. DB Serverとして起動しているDockerコンポーネントへログイン
  3. MySQLへログイン

image.png

この1~3を一発で行いたい。

1. SSHログイン

SSH鍵が未作成なら、以下コマンドで作成

(外部PC)$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

cf. https://qiita.com/suthio/items/2760e4cff0e185fe2db9

公開鍵を登録

手元のSSH鍵でサーバーへログインできるように登録する必要がある。
以下の操作を、権限のある人に依頼する。

Compute Engine > Metadata > SSH Keys
で上の公開鍵を追加する。
(メールアドレスの @より前がユーザー名。)

SSH接続確認

(外部PC)$ ssh -i ~/.ssh/id_rsa [username]@[IP]

ログインできたらOK。

2. Dockerコンポーネントへログイン

まずはDockerでWordPressが起動していることを確認する。
以下はWordPress公式のdocker-compose.yml

docker-compose.yml
version: '3.1'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
    volumes:
      - wordpress:/var/www/html

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - db:/var/lib/mysql

volumes:
  wordpress:
  db:

起動できた。
image.png

コンテナへのログインはこのコマンド。

(GCE)$ docker exec -it [コンテナID] bash
root@[コンテナID]:/var/www/html#

ログインできた。(プロンプトが切り替わってる)

(Ctrl + C でログアウトしておく。)

3. MySQLへログイン

(GCE)$ docker exec -it [コンテナID] mysql -u exampleuser -pexamplepass
mysql>

cf. https://qiita.com/ymstshinichiro/items/01f6a4c299fdb4b832a2

ログインできた。

実行

DB接続は、Sequel Proというツールを使っています。
image.png

接続失敗!

ログを見てみると、SSHログインできているけど、 127.0.0.1 port 3306 への接続で失敗しているみたい。

...
debug1: Connection established.
...
debug1: Authentication succeeded (publickey).
...
debug1: Connection to port 53983 forwarding to 127.0.0.1 port 3306 requested.
...
open failed: connect failed: Connection refused

原因はPort

MySQLが動作しているのは、Dockerコンポーネント内の3306番ポート。
アクセスしようとしていたのは、GCEの3306番ポート。
この2つを繋ぐ必要があった。

以下のように修正。

docker-compose.yml
version: '3.1'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
    volumes:
      - wordpress:/var/www/html

  db:
    image: mysql:5.7
    restart: always
    ports:
      - 3306:3306 # 追加した
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - db:/var/lib/mysql

volumes:
  wordpress:
  db:

再起動させる。

(GCE)$ docker-compose down
(GCE)$ docker-compose up

プロセスを表示すると、Portsの表示が変わった。
0.0.0.0:3306->3306/tcp になってる。

変更前
(GCE)$ docker-compose ps
      Name                    Command               State          Ports
--------------------------------------------------------------------------------
test_db_1          docker-entrypoint.sh mysqld      Up      3306/tcp, 33060/tcp
test_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:8080->80/tcp
変更後
(GCE)$ docker-compose ps
      Name                    Command               State                 Ports
---------------------------------------------------------------------------------------------
test_db_1          docker-entrypoint.sh mysqld      Up      0.0.0.0:3306->3306/tcp, 33060/tcp
test_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:8080->80/tcp

再実行

接続できた!?

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LaravelのDockerでX-debugを有効にする

Enable X-debug on Docker for Laravel


始める前に

dockerを使用してx-debugを設定するさまざまな方法に関するチュートリアルがたくさんあります。一部は時代遅れで、一部は他のテクニックを使用します。

Before starting

There are a lot of tutorials on different ways to configure x-debug using docker, some are outdated, some use other techniques, this tutorial is on the configuration that works for me, but I don´t guarantee that it will work for you.


APIの作成方法の前のチュートリアルに従ってください

Follow previous tutorial on how to make an API

nginx.confを編集します

nginx.confファイルにはserver_nameが必要です

the nginx.conf file needs a server_name

server {
  listen 80;
  server_name localhost;
Dockerfileを編集

Dockerfileを編集して、x-debugプラグインのインストールを追加し、docker-pluginを有効にします

Edit the Dockerfile to add x-debug plugin install and enable the docker-plugin

RUN pecl install xdebug && docker-php-ext-enable xdebug

#COPY xdebug.ini /etc/php/7.3/mods-available/xdebug.ini
RUN echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
     && echo "xdebug.remote_autostart=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
     && echo "xdebug.remote_connect_back = 1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
     && echo "xdebug.profiler_enable = 1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
     && echo "xdebug.remote_port=9000" >>  /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
docker-compose.yml編集

app-serverコンテナ内のdocker-composeファイルでx-debugを有効にします

Enable x-debug on docker-compose file, in the app-server container

services:
  app-server:
    build: .cloud/docker
    image: laravel-api #name of the image
    environment:
      PHP_XDEBUG_ENABLED: 1
    depends_on:
PHP Stormを構成する

PHP設定内で、プロパティを次のように設定します。

Inside the PHP settings, set the properties as follow

サーバーをセットアップする

右上のメニューから新しい構成をセットアップします

Setup a new configuration, from the upper right menu

次のウィンドウで、セットアップ新しいPHPのウェブサイト、左上隅からの+記号をクリックして、

In the next window, setup a new PHP web site, by clickin the + sign from the upper left corner

サーバーリストから[...]ボタンをクリックして、新しいサーバーを作成します。

create a new server, by clicking the [...] button from the server list.

localhostアドレスを追加し、プロジェクトをdockerサーバー(この場合は/ applicationディレクトリ)にマップします。

Add the localhost address, and map the project to the docker server, in our case, the /application directory.

これにより、PHPStormで受信したリクエストをデバッグできます。

With this, you will be able to debug incoming request on PHPStorm.

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

DockerイメージをECRにpushする

Docker イメージを Amazon ECR リポジトリにプッシュするには

・aws cliでログインしてあること
・プッシュ先となるリポジトリにイメージリポジトリが存在しない場合は、作成してくれます

ECRにログイン

以下のコマンドを打って表示されるコマンドをコピペしてそのまま実行

aws ecr get-login --no-include-email  --region ap-northeast-1

ECRにpushする

docker push ******.dkr.ecr.ap-northeast-1.amazonaws.com/イメージ名/:latest

これでおしまい

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS CLIを使ってDockerイメージをECRにpushする

Docker イメージを Amazon ECR リポジトリにプッシュするには

イメージのプッシュするになるAmazon ECRレジストリにDockerクライアント認証をする。
認証トークンは使用するレジストリごとに取得する必要があり、有効期限は12時間です。

レジストリ認証

以下のコマンドを実行して出力されたコマンドをコピペしてそのまま実行

aws ecr get-login --no-include-email --region ap-northeast-1

タグ付け

使用する ECR レジストリ、リポジトリ、オプションのイメージタグ名の組み合わせによってイメージをタグ付けします。レジストリ形式は aws_account_id.dkr.ecr.region.amazonaws.com です。
リポジトリ名は、イメージ用に作成したリポジトリ名と一致する必要があります。

docker tag イメージID aws_account_id.dkr.ecr.region.amazonaws.com/my-web-app

ECRにpushする

docker push コマンドを使用してイメージをプッシュします。

docker push aws_account_id.dkr.ecr.region.amazonaws.com/my-web-app

これでおしまい

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

今日のpython error: killed

『フカシギの数え方』 おねえさんといっしょ:組み合わせ爆発の凄さ
https://qiita.com/kaizen_nagoya/items/f309b0c2bb015bbc71c3

gra10.py
# https://qiita.com/cabernet_rock/items/50f955afc16287244154
# https://qiita.com/kaizen_nagoya/items/f309b0c2bb015bbc71c3
# https://qiita.com/kaizen_nagoya/items/3a8d89f095489b6e1f56
# https://qiita.com/kaizen_nagoya/items/819f10124ec453b7ef27

# 必要なモジュールのインポート
from graphillion import GraphSet
import graphillion.tutorial as tl
import time              # 計算時間を調べる。
# グリッドのサイズを指定
universe = tl.grid(2, 2)
GraphSet.set_universe(universe)
tl.draw(universe)
start = 1 # スタート位置
goal = 9 # ゴールの位置
paths = GraphSet.paths(start, goal)
print (len(paths))
#
key = 4        # 1箇所目
treasure = 2   # 2箇所目
paths_to_key = GraphSet.paths(start, key).excluding(treasure)
treasure_paths = paths.including(paths_to_key).including(treasure)
print (len(treasure_paths))
#
universe = tl.grid(9, 9) # 9×9のグリッド
GraphSet.set_universe(universe)
start = 1
goal = 100
s = time.time()          # 計算開始時刻
paths = GraphSet.paths(start, goal)
print (time.time() - s )# 計算時間

9X9が12時間たっても答えが出なかった。

graat.sh
#!/bin/bash
# https://qiita.com/kaizen_nagoya/items/f309b0c2bb015bbc71c3

date
python3 gra10.py
date

仕事ができないので、別の機材をdocker 12G Bにして、上記script実行。

Wed Jan 22 02:44:58 UTC 2020
12
2
./graat.sh: line 4:    22 Killed                  python3 gra10.py
Wed Jan 22 02:47:29 UTC 2020

14G Bにして

Wed Jan 22 03:03:49 UTC 2020
12
2
./graat.sh: line 4:    14 Killed                  python3 gra10.py
Wed Jan 22 03:08:19 UTC 2020

dockerの版が違うからかと思い、元の機材でやり直したら、昨日は12時間以上動いて停止してないのに、
今日は数分でkilled。理由不明。

文書履歴(document history)

ver. 0.01 初稿 20200122午前
ver. 0.02 script 追記 20200122 昼
ver. 0.03 python 追記 20200122 午後

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Docker DesktopのGUIにダッシュボード機能が搭載されてコンテナやボリュームがわかりやすくなったぞ

本日Docker Desktopの新バージョン2.2.0.0がリリースされましたが、今まで設定画面しかなかったGUIに新しくダッシュボード画面が追加されて作成しているコンテナやボリュームがわかりやすくなっています。(個人的にはCLI使うのでいらんのですが)

詳細は丸投げ → https://docs.docker.com/docker-for-windows/dashboard/

設定画面の「Settings」のタイトルの右にある「×」(ウインドウを閉じるではない方)をクリックするとダッシュボード画面に移動します。まあタスクトレイのメニューに「Dashbord」ってあるんですけどね。新しくなった設定画面に注目してる思ってると気づきにくいかなーと思ったので。

あと、Windows側のドライブのマウントにCIFSではなくgRPC FUSE(なにそれ?)というのを使うようになったみたいです。Linux inotifyに対応したようだから、Auto Reloadとか動くようになってるのかな?(参考 https://www.docker.com/blog/new-filesharing-implementation-in-docker-desktop-windows/)

それだけです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Docker DesktopのGUIにダッシュボードが搭載されてコンテナやボリュームがわかりやすくなったぞ

本日Docker Desktopの新バージョン2.2.0.0がリリースされましたが、今まで設定画面しかなかったGUIに新しくダッシュボード画面が追加されて作成しているコンテナやボリュームがわかりやすくなっています。(個人的にはCLI使うのでいらんのですが・・・ん?イメージの情報がないぞ!こっちのほうが使いたい)

詳細は丸投げ → https://docs.docker.com/docker-for-windows/dashboard/

設定画面の「Settings」のタイトルの右にある「×」(ウインドウを閉じるではない方)をクリックするとダッシュボード画面に移動します。まあタスクトレイのメニューに「Dashbord」ってあるんですけどね。新しくなった設定画面に注目してると気づきにくいかなーと思ったので。

あと、Windows側のドライブのマウントにCIFSではなくgRPC FUSE(なにそれ?)というのを使うようになったみたいです。Linux inotifyに対応したようだから、Auto Reloadとか動くようになってるのかな?

参考
New Filesharing Implementation in Docker Desktop Windows Improves Developer Inner Loop UX
Deep Dive Into the New Docker Desktop filesharing Implementation Using FUSE

それだけです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

docker-compose up出でるエラー

概要

いつものようにDocker-compose upするとサーバーが立ち上がらない。

具体的には、↓こんな感じでエラーが出ている。

スクリーンショット 2020-01-11 23.34.02.png

〈注意すべきポイント〉
bundler: failed to load command: rails (/usr/local/bundle/bin/rails)
Bundler::GemNotFound: Could not find ast-2.4.0 in any of the sources

解決策

docker-compose build
で解決!!

原因(ここ重要!)

原因によっては対処法が変わってくる。
今回の場合は、前回このアプリを利用した時にgemを追加して
bundle install
したあとに、サーバーの立ち上げしていなかった。

参考サイト

https://techracho.bpsinc.jp/ebi/2017_05_25/40438

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

2020年の開発者が知っておくべき11の必須技能(回答編)

2020年の開発者が知っておくべき11の必須スキル
https://qiita.com/rana_kualu/items/c79a16ff503c86b27483

11 Essential Skills Software Developers should Learn in 2020
https://dev.to/javinpaul/11-essential-skills-software-developers-should-learn-in-2020-1bio

Top 11 Essentials Skills for Software Developers in 2020
1) Containers (Docker and Kubernetes)
2) Cloud Platform (AWS, GCP, or Azure)
3) Data Structure and Algorithm
4) A Version Control Tool (Git)
5) One Text Editors (VIM)
6) IDEs (VSCode or IntelliJIDEA)
7) Database and SQL
8) UNIX (Linux)
9) An OOP Programming language (C++, Java or Python)
10) Networking basics
11) One Scripting language

11の技能を自己評価してみる。

0:知らない、触ったことがない
1:知ってる。使ったことがあるかもしれない。
2:誰かに相談できれば仕事で使える。
3:仕事に使っている。
4:改良に取り組んでいる。

点数を書いたら、その数だけURLを示す。

category と examplesに分けてみると、見出しにやや整合性がない。
下記表では、適当に補足・補正してみる。

category examples value
Containers Docker and Kubernetes 3
Cloud Platform AWS, GCP, or Azure 3
Data Structure and Algorithm Machine Learning or Quantum Computing 3
A Version Control Tool git 3
One Text Editors vim or Eclipse 4
IDEs VSCode or IntelliJIDEA 3
Database and SQL Oracle, SQL Server or MySQL 2
Unix or Linux Ubuntu, Raspbian or Debian 4
An OOP Programming language C++, Java or JavaScript 3
Networking basics TCP/IP and Wi-Fi 4
One Scripting language Python or Ruby 3

大事なのはでこぼこ。他よりよいのが1つ以上、他より悪いのを1つ以上書くこと。

私の場合は、Networkが専門で、BSDを対抗試験にDebian(linux)でコンパイルしてきた。エディタは作業の要。
苦手なのはDB、リレーショナルDBの概念と実装の隙間の大きさに戸惑う。

下記の一部の記事は、失敗だったり、未完だったり、これから該当する技術を書く予定のものがあります。
暖かいご指導のほどお願いいたします。

1) Containers (Docker and Kubernetes):3

docker(18) なぜdockerで機械学習するか 書籍・ソース一覧作成中 (目標100)
https://qiita.com/kaizen_nagoya/items/ddd12477544bf5ba85e2

docker(1)利用を勧める17の理由
https://qiita.com/kaizen_nagoya/items/c4e5075142bf5e11ddbe

docker(0) 資料集
https://qiita.com/kaizen_nagoya/items/45699eefd62677f69c1d

2) Cloud Platform (AWS, GCP, or Azure):3

「Qiitaのいろいろランキング2019」への感謝と提案
https://qiita.com/kaizen_nagoya/items/40b8557a20e8d75d62b5

日鉄ソリューションズのプライベートクラウドは、顧客満足度1位になっているほか、データサイエンティストの行事でDataRobotより上位の2位になっていることを記載。

転職(2) 転職者による、転職者のための、転職者の履歴、業績、面接
https://qiita.com/kaizen_nagoya/items/162fbb954deb886464bf

クラウドを利用するにあたってdockerを利用しているとよい点を記載。

製造業における機械学習
https://qiita.com/kaizen_nagoya/items/fbe846de16f74bea1d6f

製造業における機械学習でクラウド利用について記載。

3) Data Structure and Algorithm:3

機械学習をここに入れてもいいかもしれない。機械学習は、データ構造化

『フカシギの数え方』 おねえさんといっしょ:組み合わせ爆発の凄さ
https://qiita.com/kaizen_nagoya/items/f309b0c2bb015bbc71c3

仮説・検証(153)成功体験は語っても、成功体験に頼らないために。清水吉男・田中伸明
https://qiita.com/kaizen_nagoya/items/d32adfaf7b2568bfd9d2

データ中心設計で田中伸明さんと連名で安全工学シンポジウム等で発表させていただいているのは光栄。

仮説・検証(122)分析と設計
https://qiita.com/kaizen_nagoya/items/d7341c407026af61f216

4) A Version Control Tool (Git):3

仮説・検証(51)公開算譜は機敏だ(open source is agile)GitHub and docker
https://qiita.com/kaizen_nagoya/items/5dd49a046b5991af3a5e

卒業論文、修士論文、博士論文は github/gitlab/bitbacketのprivate利用をお勧め
https://qiita.com/kaizen_nagoya/items/eb9945a2649f6f3eabd0

現在努力中
https://github.com/kaizen-nagoya

5) One Text Editors (VIM):4

VZエディタ移植(porting)に当たって実施したことと成果
https://qiita.com/kaizen_nagoya/items/5551be98dcbed8f41949

「アセンブラへの道」組立語(assembler)・機械語(machine language)・CPU
https://qiita.com/kaizen_nagoya/items/46f2333c2647b0e692b2

令和で成果を出す予定のソフトウェア・プログラミング・IT(一部、平成のコピー)
https://qiita.com/kaizen_nagoya/items/d7eae2ca3229eda72f88

仮説・検証(139)新人(学生)を指導するよりも新人(学生)に指導してもらった方が効率的
https://qiita.com/kaizen_nagoya/items/db993b1536055029f7c8

6) IDEs (VSCode or IntelliJIDEA):3

docker(39) Cコンパイラ3種をdockerで
https://qiita.com/kaizen_nagoya/items/77184cf005490d7579e6

g++, clang++ and vscode++ をdockerで(まだエラー中)
https://qiita.com/kaizen_nagoya/items/825e9bcb017925e0fc5a

docker and vscode not visual studio code
https://qiita.com/kaizen_nagoya/items/165a281570a8c62ca50a

7) Database and SQL:2

仮説・検証(163)生産縮小、規模縮小、人員縮小時には自動化道具を増強
https://qiita.com/kaizen_nagoya/items/8df1dc7d3a5c7869d3c2

Python で SQL
https://qiita.com/kaizen_nagoya/items/1a210fd10efaead88f68

8) UNIX (Linux):4

Posix Test Suite docker downloads, tar, install
https://qiita.com/kaizen_nagoya/items/f1e24be04a2405ede00f

xtUMLを導入する(linux編)
https://qiita.com/kaizen_nagoya/items/297097cc47a6487d9f20

仮説・検証(165)40年でソフトウェア開発の景色はどのぐらい変わったのか?
https://qiita.com/kaizen_nagoya/items/54c17cf751894eef56f8

Raspberry Pi(SDカード付き)開封から起動までの時間測定
https://qiita.com/kaizen_nagoya/items/8cde74c07848ec413f7b

9) An OOP Programming language (C++, Java or Python):3

Object Oriented Programmingは、物をよく分析してプログラムすればいいだけだと思えば良い。
抽象データ型に対応している言語ならどれでもよい。
Classによる体系化は一手法で、C++によるTemplateの方がいいかもしれない。

見出しはわすれば、例の言語を操れればいいと思うとよい。

Autosar Guidelines C++14 example code compile list(1-169)
https://qiita.com/kaizen_nagoya/items/8ccbf6675c3494d57a76#_reference-6bf86e567f8b9d0a1028

仮説・検証(89)インド、インドネシアとJava、Javascript:接尾辞がついて別物と言うが共通点は多い。
https://qiita.com/kaizen_nagoya/items/2c331ff6654d41d5e157

dockerで機械学習(87) with JAVA(1)「Machine Learning: End-to-End guide for Java developers」 By Richard Reese, Jennifer Reese, Bostjan Kaluza, Uday Kamath, Krishna Choppella

10) Networking basics:4

無線網(Wi-Fi)空中線(antenna)(0) 記事一覧(122/300目標)
https://qiita.com/kaizen_nagoya/items/5e5464ac2b24bd4cd001

情報処理技術者試験 ネットワークスペシャリストに合格 
https://qiita.com/kaizen_nagoya/items/407857392ca5c5677ee4

「基礎からわかるTCP/IP JAVAネットワークプログラミング」Eclipseでコンパイル。Wiresharkでデバッグ。
https://qiita.com/kaizen_nagoya/items/14519536b827fdadb32e

通信エミュレータの移植
https://qiita.com/kaizen_nagoya/items/ce505bbea4229b83e93b

11) One Scripting language:3

shellでもいいかも。自動実行できればいい。

Windows(M.S.)にPython3(Anaconda3)を導入する(7つの罠)
https://qiita.com/kaizen_nagoya/items/7bfd7ecdc4e8edcbd679

docker(19) 言語処理100本ノックをdockerで。python覚えるのに最適。
https://qiita.com/kaizen_nagoya/items/7e7eb7c543e0c18438c4

転職(16) 65歳からのプログラミング入門
https://qiita.com/kaizen_nagoya/items/1561f910c275b22d7c9f

並べ替え

11の項目を、自分が大事だと思う順番に並び替えるのも良い。

4) A Version Control Tool (Git)
1) Containers (Docker and Kubernetes)
2) Cloud Platform (AWS, GCP, or Azure)
3) Data Structure and Algorithm

5) One Text Editors (VIM)
6) IDEs (VSCode or IntelliJIDEA)
7) Database and SQL
8) UNIX (Linux)
9) An OOP Programming language (C++, Java or Python)
10) Networking basics
11) One Scripting language

参考資料(reference)

一覧の一覧 a directory of directories of mine.
https://qiita.com/kaizen_nagoya/items/7eb0e006543886138f39

docker(59) Githubとdocker
https://qiita.com/kaizen_nagoya/items/f7e142cd283a1c314234

プログラマが知っているとよい色使い(JIS安全色)
https://qiita.com/kaizen_nagoya/items/cb7eb3199b0b98904a35

参考文献駆動執筆(references driven writing)・デンソークリエイト編
https://qiita.com/kaizen_nagoya/items/b27b3f58b8bf265a5cd1

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

2020年の開発者が知っておくべき11の必須技能→回答編 → 並べ替え→項目合併

2020年の開発者が知っておくべき11の必須スキル
https://qiita.com/rana_kualu/items/c79a16ff503c86b27483

11 Essential Skills Software Developers should Learn in 2020
https://dev.to/javinpaul/11-essential-skills-software-developers-should-learn-in-2020-1bio

Top 11 Essentials Skills for Software Developers in 2020
1) Containers (Docker and Kubernetes)
2) Cloud Platform (AWS, GCP, or Azure)
3) Data Structure and Algorithm
4) A Version Control Tool (Git)
5) One Text Editors (VIM)
6) IDEs (VSCode or IntelliJIDEA)
7) Database and SQL
8) UNIX (Linux)
9) An OOP Programming language (C++, Java or Python)
10) Networking basics
11) One Scripting language

11の技能を自己評価してみる。

0:知らない、触ったことがない
1:知ってる。使ったことがあるかもしれない。
2:誰かに相談できれば仕事で使える。
3:仕事に使っている。
4:改良に取り組んでいる。

点数を書いたら、その数だけURLを示す。

各みだしを category と examplesに分けてみる。見出しにやや整合性がない気がした。
下記表では、適当に補足・補正してみた。一番右の列が自己評価。

category examples value
Containers Docker and Kubernetes 3
Cloud Platform AWS, GCP, or Azure 3
Data Structure and Algorithm Machine Learning or Quantum Computing 3
A Version Control Tool git 3
One Text Editors vim or Eclipse 4
IDEs VSCode or IntelliJIDEA 3
Database and SQL Oracle, SQL Server or MySQL 2
Unix or Linux Ubuntu, Raspbian or Debian 4
An OOP Programming language C++, Java or JavaScript 3
Networking basics TCP/IP and Wi-Fi 4
One Scripting language Python or Ruby 3

大事なのはでこぼこ。他よりよいのが1つ以上、他より悪いのを1つ以上書くこと。
全部同じ値は役に立たない。

私の場合は、Networkが専門で、BSDを対抗試験にDebian(linux)でコンパイルしてきた。エディタは作業の要。
苦手なのはDB、リレーショナルDBの概念と実装の隙間の大きさに戸惑う。

下記の一部の記事は、失敗だったり、未完だったり、これから該当する技術を書く予定のものがあります。
うまく行っていないもので解決する方法、誤字、誤解などにお気づきになられましたら、暖かいご指導のほどお願いいたします。

1) Containers (Docker and Kubernetes):3

これまで、色々な版での試験をするのに、全部別々のdockerを作ってhubに登録しとけば、いつでも必要な版をすぐに取り出せて便利。pythonでも、各版ごとにdocker作っておくとか。

docker(18) なぜdockerで機械学習するか 書籍・ソース一覧作成中 (目標100)
https://qiita.com/kaizen_nagoya/items/ddd12477544bf5ba85e2

docker(1)利用を勧める17の理由
https://qiita.com/kaizen_nagoya/items/c4e5075142bf5e11ddbe

docker(0) 資料集
https://qiita.com/kaizen_nagoya/items/45699eefd62677f69c1d

2) Cloud Platform (AWS, GCP, or Azure):3

いろいろなcloudの違いに依存されないためには、dockerで作ったものがそのままうごくサービスに限定して基本的な構造を設計するとよいかもというのが経験則。

「Qiitaのいろいろランキング2019」への感謝と提案
https://qiita.com/kaizen_nagoya/items/40b8557a20e8d75d62b5

日鉄ソリューションズのプライベートクラウドは、顧客満足度1位になっているほか、データサイエンティストの行事でDataRobotより上位の2位になっていることを記載。

転職(2) 転職者による、転職者のための、転職者の履歴、業績、面接
https://qiita.com/kaizen_nagoya/items/162fbb954deb886464bf

クラウドを利用するにあたってdockerを利用しているとよい点を記載。

製造業における機械学習
https://qiita.com/kaizen_nagoya/items/fbe846de16f74bea1d6f

製造業における機械学習でクラウド利用について記載。

3) Data Structure and Algorithm:3

機械学習をここに入れてもいいかもしれない。機械学習は、データ構造化と算法が鍵かも。

『フカシギの数え方』 おねえさんといっしょ:組み合わせ爆発の凄さ
https://qiita.com/kaizen_nagoya/items/f309b0c2bb015bbc71c3

仮説・検証(153)成功体験は語っても、成功体験に頼らないために。清水吉男・田中伸明
https://qiita.com/kaizen_nagoya/items/d32adfaf7b2568bfd9d2

データ中心設計で田中伸明さんと連名で安全工学シンポジウム等で発表させていただいているのは光栄。

仮説・検証(122)分析と設計
https://qiita.com/kaizen_nagoya/items/d7341c407026af61f216

4) A Version Control Tool (Git):3

版管理がこんなに楽になるなんて。

仮説・検証(51)公開算譜は機敏だ(open source is agile)GitHub and docker
https://qiita.com/kaizen_nagoya/items/5dd49a046b5991af3a5e

卒業論文、修士論文、博士論文は github/gitlab/bitbacketのprivate利用をお勧め
https://qiita.com/kaizen_nagoya/items/eb9945a2649f6f3eabd0

現在努力中
https://github.com/kaizen-nagoya

5) One Text Editors (VIM):4

VZエディタ移植(porting)に当たって実施したことと成果
https://qiita.com/kaizen_nagoya/items/5551be98dcbed8f41949

「アセンブラへの道」組立語(assembler)・機械語(machine language)・CPU
https://qiita.com/kaizen_nagoya/items/46f2333c2647b0e692b2

令和で成果を出す予定のソフトウェア・プログラミング・IT(一部、平成のコピー)
https://qiita.com/kaizen_nagoya/items/d7eae2ca3229eda72f88

仮説・検証(139)新人(学生)を指導するよりも新人(学生)に指導してもらった方が効率的
https://qiita.com/kaizen_nagoya/items/db993b1536055029f7c8

6) IDEs (VSCode or IntelliJIDEA):3

docker(39) Cコンパイラ3種をdockerで
https://qiita.com/kaizen_nagoya/items/77184cf005490d7579e6

g++, clang++ and vscode++ をdockerで(まだエラー中)
https://qiita.com/kaizen_nagoya/items/825e9bcb017925e0fc5a

docker and vscode not visual studio code
https://qiita.com/kaizen_nagoya/items/165a281570a8c62ca50a

7) Database and SQL:2

仮説・検証(163)生産縮小、規模縮小、人員縮小時には自動化道具を増強
https://qiita.com/kaizen_nagoya/items/8df1dc7d3a5c7869d3c2

Python で SQL
https://qiita.com/kaizen_nagoya/items/1a210fd10efaead88f68

8) UNIX (Linux):4

Posix Test Suite docker downloads, tar, install
https://qiita.com/kaizen_nagoya/items/f1e24be04a2405ede00f

xtUMLを導入する(linux編)
https://qiita.com/kaizen_nagoya/items/297097cc47a6487d9f20

仮説・検証(165)40年でソフトウェア開発の景色はどのぐらい変わったのか?
https://qiita.com/kaizen_nagoya/items/54c17cf751894eef56f8

Raspberry Pi(SDカード付き)開封から起動までの時間測定
https://qiita.com/kaizen_nagoya/items/8cde74c07848ec413f7b

9) An OOP Programming language (C++, Java or Python):3

Object Oriented Programmingは、物をよく分析してプログラムすればいいだけだと思えば良い。
プログラミング言語をよく知らないうちなら理解可能な概念。
特定の言語を知ってしまうと、その言語での解決策の案に囚われて、すごく狭い理解しかしない人たちがいるかもしれない。抽象データ型に対応している言語ならどれでもよい。
Classによる体系化は一手法でお勧めできない。C++ならTemplateを駆使したり、拡張するといいかもしれない。

見出しは忘れて、一つの言語を操れればいいと思うとよい。

Autosar Guidelines C++14 example code compile list(1-169)
https://qiita.com/kaizen_nagoya/items/8ccbf6675c3494d57a76#_reference-6bf86e567f8b9d0a1028

仮説・検証(89)インド、インドネシアとJava、Javascript:接尾辞がついて別物と言うが共通点は多い。
https://qiita.com/kaizen_nagoya/items/2c331ff6654d41d5e157

dockerで機械学習(87) with JAVA(1)「Machine Learning: End-to-End guide for Java developers」 By Richard Reese, Jennifer Reese, Bostjan Kaluza, Uday Kamath, Krishna Choppella

10) Networking basics:4

無線網(Wi-Fi)空中線(antenna)(0) 記事一覧(122/300目標)
https://qiita.com/kaizen_nagoya/items/5e5464ac2b24bd4cd001

情報処理技術者試験 ネットワークスペシャリストに合格 
https://qiita.com/kaizen_nagoya/items/407857392ca5c5677ee4

「基礎からわかるTCP/IP JAVAネットワークプログラミング」Eclipseでコンパイル。Wiresharkでデバッグ。
https://qiita.com/kaizen_nagoya/items/14519536b827fdadb32e

通信エミュレータの移植
https://qiita.com/kaizen_nagoya/items/ce505bbea4229b83e93b

11) One Scripting language:3

shellでもいいかも。自動実行できればいい。

Windows(M.S.)にPython3(Anaconda3)を導入する(7つの罠)
https://qiita.com/kaizen_nagoya/items/7bfd7ecdc4e8edcbd679

docker(19) 言語処理100本ノックをdockerで。python覚えるのに最適。
https://qiita.com/kaizen_nagoya/items/7e7eb7c543e0c18438c4

転職(16) 65歳からのプログラミング入門
https://qiita.com/kaizen_nagoya/items/1561f910c275b22d7c9f

並べ替え(re sort)

11の項目を、自分が大事だと思う順番に並び替えるのも良い。

K J category examples value
1 4 A Version Control Tool git 3
2 1 Containers Docker and Kubernetes 3
3 3 Data Structure and Algorithm Machine Learning or Quantum Computing 3
4 5 One Text Editors vim or Eclipse 4
5 6 IDEs VSCode or IntelliJIDEA 3
6 10 Networking basics TCP/IP and Wi-Fi 4
7 8 Unix or Linux Ubuntu, Raspbian or Debian 4
8 11 One Scripting language Python or Ruby 3
9 9 An OOP Programming language C++, Java or JavaScript 3
10 7 Database and SQL Oracle, SQL Server or MySQL 2
11 2 Cloud Platform AWS, GCP, or Azure 3

自分が得意な分野が真ん中にある。この並べ替えは、一つの意見。他の分野が得意な人は、他の並び方になるだろう。Jは原著者のJavinpaul, kは@kaizen_nagoya

cloud platformが低いのは、もっと便利になる物が生き残るだろうという想定から。
cloud platformを作るプログラマがもっと頑張ると良い。
Database が低いのも同じ理由。
Unix/Linuxがどんどん便利になって、Raspbianやubuntuのように普及して使いやすくなるともっと上にするかも。

項目合併(merge)

IDEにエディタは含むこともあり、One Text Editors とIDEは一つの項目でも良いかもしれない。
UNIXがTCP/IPとともに普及してきたことを考えると、Networking basics と Unix or Linuxも一つの項目でも良いかもしれない。
言語はOOPかどうかはどっちゃでも良くて、One Scripting language と An OOP Programming language もpythonかJavascriptで良いので一つの項目で良いかもしれない。

私版「開発者が知っておくべき8の必須技能」に縮退。ただし、Web Serverがないので、Databeseと合体して1項目にした。Data Structure and Algorithmと合体するかどうかは悩んだ。
A version control toolにはissuとwikiも合わせたdocument toolに拡張した。

K J category examples value
1 4 A Version Control and document Tool GitHub, gitlab or bitbucket 3
2 1 Containers Docker and Kubernetes 3
3 3 Data Structure and Algorithm Machine Learning or Quantum Computing 3
4 5+6 One Text Editors and IDEs vim, Eclipse, VSCode or IntelliJIDEA 4
5 10+8 Networking and Unix(Linux) TCP/IP, Wi-Fi and Ubuntu, Raspbian or Debian 4
6 11+9 One Scripting or Programming llanguage Python, Ruby, C++, Java or JavaScript 3
7 7 Web and Database Apache or Nginx and Oracle, SQL Server or MySQL 2
8 2 Cloud Platform AWS, GCP, or Azure 3

おお、重複感が減りすっきりした。

どんな資料も、プログラマは再計画(re programming)すると良いかも。

参考資料(reference)

一覧の一覧 a directory of directories of mine.
https://qiita.com/kaizen_nagoya/items/7eb0e006543886138f39

docker(59) Githubとdocker
https://qiita.com/kaizen_nagoya/items/f7e142cd283a1c314234

プログラマが知っているとよい色使い(JIS安全色)
https://qiita.com/kaizen_nagoya/items/cb7eb3199b0b98904a35

参考文献駆動執筆(references driven writing)・デンソークリエイト編
https://qiita.com/kaizen_nagoya/items/b27b3f58b8bf265a5cd1

「平成のうちにやめたかった『ITの7つの無意味な習慣』」に付け加えたかったこと。
https://qiita.com/kaizen_nagoya/items/e6f9c2e0afbf8ab4181c

仮説・検証(54)プログラムは音楽だ (A program is a music.)
https://qiita.com/kaizen_nagoya/items/33c9f33581e6886f8ad8

文書履歴(document history)

ver. 0.01 初稿 20200122 午前
ver. 0.02 順番並べ替え 20200122 昼
ver. 0.03 項目縮退 20200122 午後1時
ver. 0.04 Web追記 20200122 午後2時
ver. 0.05 参考資料追記 20200122 午後3時
ver. 0.06 表記補正、誤記訂正 20200122 午後4時

このエントリーをはてなブックマークに追加

https://b.hatena.ne.jp/guide/bbutton

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

2020年の開発者が知っておくべき11の必須技能→回答編 → 並べ替え→項目合併(8項目)

2020年の開発者が知っておくべき11の必須スキル
https://qiita.com/rana_kualu/items/c79a16ff503c86b27483

11 Essential Skills Software Developers should Learn in 2020
https://dev.to/javinpaul/11-essential-skills-software-developers-should-learn-in-2020-1bio

Top 11 Essentials Skills for Software Developers in 2020
1) Containers (Docker and Kubernetes)
2) Cloud Platform (AWS, GCP, or Azure)
3) Data Structure and Algorithm
4) A Version Control Tool (Git)
5) One Text Editors (VIM)
6) IDEs (VSCode or IntelliJIDEA)
7) Database and SQL
8) UNIX (Linux)
9) An OOP Programming language (C++, Java or Python)
10) Networking basics
11) One Scripting language

回答編

11の技能を自己評価してみる。

0:知らない、触ったことがない
1:知ってる。使ったことがあるかもしれない。
2:誰かに相談できれば仕事で使える。
3:仕事に使っている。
4:改良に取り組んでいる。

点数を書いたら、その数だけURLを示す。

みだし補正

各みだしを category と examplesに分けてみる。見出しにやや整合性がない気がした。
下記表では、適当に補足・補正してみた。一番右の列が自己評価。

category examples value
Containers Docker and Kubernetes 3
Cloud Platform AWS, GCP, or Azure 3
Data Structure and Algorithm Machine Learning or Quantum Computing 3
A Version Control Tool git 3
One Text Editors vim, Emacs or Eclipse 4
IDEs VSCode or IntelliJIDEA 3
Database and SQL Oracle, SQL Server or MySQL 2
Unix or Linux Ubuntu, Raspbian or Debian 4
An OOP Programming language C++, Java or JavaScript 3
Networking basics TCP/IP and Wi-Fi 4
One Scripting language Python or Ruby 3

大事なのはでこぼこ。他よりよいのが1つ以上、他より悪いのを1つ以上書くこと。
全部同じ値は役に立たない。

私の場合は、Networkが専門で、BSDを対抗試験にDebian(linux)でコンパイルしてきた。エディタは作業の要。
苦手なのはDB、リレーショナルDBの概念と実装の隙間の大きさに戸惑う。

下記の一部の記事は、失敗だったり、未完だったり、これから該当する技術を書く予定のものがあります。
うまく行っていないもので解決する方法、誤字、誤解などにお気づきになられましたら、暖かいご指導のほどお願いいたします。

回答一覧

1) Containers (Docker and Kubernetes):3

これまで、色々な版での試験をするのに、全部別々のdockerを作ってhubに登録しとけば、いつでも必要な版をすぐに取り出せて便利。pythonでも、各版ごとにdocker作っておくとか。

docker(18) なぜdockerで機械学習するか 書籍・ソース一覧作成中 (目標100)
https://qiita.com/kaizen_nagoya/items/ddd12477544bf5ba85e2

docker(1)利用を勧める17の理由
https://qiita.com/kaizen_nagoya/items/c4e5075142bf5e11ddbe

docker(0) 資料集
https://qiita.com/kaizen_nagoya/items/45699eefd62677f69c1d

2) Cloud Platform (AWS, GCP, or Azure):3

いろいろなcloudの違いに依存されないためには、dockerで作ったものがそのままうごくサービスに限定して基本的な構造を設計するとよいかもというのが経験則。

「Qiitaのいろいろランキング2019」への感謝と提案
https://qiita.com/kaizen_nagoya/items/40b8557a20e8d75d62b5

日鉄ソリューションズのプライベートクラウドは、顧客満足度1位になっているほか、データサイエンティストの行事でDataRobotより上位の2位になっていることを記載。

転職(2) 転職者による、転職者のための、転職者の履歴、業績、面接
https://qiita.com/kaizen_nagoya/items/162fbb954deb886464bf

クラウドを利用するにあたってdockerを利用しているとよい点を記載。

製造業における機械学習
https://qiita.com/kaizen_nagoya/items/fbe846de16f74bea1d6f

製造業における機械学習でクラウド利用について記載。

3) Data Structure and Algorithm:3

機械学習をここに入れてもいいかもしれない。機械学習は、データ構造化と算法が鍵かも。

『フカシギの数え方』 おねえさんといっしょ:組み合わせ爆発の凄さ
https://qiita.com/kaizen_nagoya/items/f309b0c2bb015bbc71c3

仮説・検証(153)成功体験は語っても、成功体験に頼らないために。清水吉男・田中伸明
https://qiita.com/kaizen_nagoya/items/d32adfaf7b2568bfd9d2

データ中心設計で田中伸明さんと連名で安全工学シンポジウム等で発表させていただいているのは光栄。

仮説・検証(122)分析と設計
https://qiita.com/kaizen_nagoya/items/d7341c407026af61f216

4) A Version Control Tool (Git):3

版管理がこんなに楽になるなんて。

仮説・検証(51)公開算譜は機敏だ(open source is agile)GitHub and docker
https://qiita.com/kaizen_nagoya/items/5dd49a046b5991af3a5e

卒業論文、修士論文、博士論文は github/gitlab/bitbacketのprivate利用をお勧め
https://qiita.com/kaizen_nagoya/items/eb9945a2649f6f3eabd0

現在努力中
https://github.com/kaizen-nagoya

5) One Text Editors (VIM):4

VZエディタ移植(porting)に当たって実施したことと成果
https://qiita.com/kaizen_nagoya/items/5551be98dcbed8f41949

「アセンブラへの道」組立語(assembler)・機械語(machine language)・CPU
https://qiita.com/kaizen_nagoya/items/46f2333c2647b0e692b2

令和で成果を出す予定のソフトウェア・プログラミング・IT(一部、平成のコピー)
https://qiita.com/kaizen_nagoya/items/d7eae2ca3229eda72f88

仮説・検証(139)新人(学生)を指導するよりも新人(学生)に指導してもらった方が効率的
https://qiita.com/kaizen_nagoya/items/db993b1536055029f7c8

6) IDEs (VSCode or IntelliJIDEA):3

docker(39) Cコンパイラ3種をdockerで
https://qiita.com/kaizen_nagoya/items/77184cf005490d7579e6

g++, clang++ and vscode++ をdockerで(まだエラー中)
https://qiita.com/kaizen_nagoya/items/825e9bcb017925e0fc5a

docker and vscode not visual studio code
https://qiita.com/kaizen_nagoya/items/165a281570a8c62ca50a

7) Database and SQL:2

仮説・検証(163)生産縮小、規模縮小、人員縮小時には自動化道具を増強
https://qiita.com/kaizen_nagoya/items/8df1dc7d3a5c7869d3c2

Python で SQL
https://qiita.com/kaizen_nagoya/items/1a210fd10efaead88f68

8) UNIX (Linux):4

Posix Test Suite docker downloads, tar, install
https://qiita.com/kaizen_nagoya/items/f1e24be04a2405ede00f

xtUMLを導入する(linux編)
https://qiita.com/kaizen_nagoya/items/297097cc47a6487d9f20

仮説・検証(165)40年でソフトウェア開発の景色はどのぐらい変わったのか?
https://qiita.com/kaizen_nagoya/items/54c17cf751894eef56f8

Raspberry Pi(SDカード付き)開封から起動までの時間測定
https://qiita.com/kaizen_nagoya/items/8cde74c07848ec413f7b

9) An OOP Programming language (C++, Java or Python):3

Object Oriented Programmingは、物をよく分析してプログラムすればいいだけだと思えば良い。
プログラミング言語をよく知らないうちなら理解可能な概念。
特定の言語を知ってしまうと、その言語での解決策の案に囚われて、すごく狭い理解しかしない人たちがいるかもしれない。抽象データ型に対応している言語ならどれでもよい。
COBOLは、元々Object Orientedな言語で、OOCOBOLでなくてもよいかも。機械語がいちばんのObject Oriented Languageだとずっと主張しつづけてきた。
Classによる体系化はOOPの一手法かもしれないがお勧めできない。C++ならTemplateを駆使したり、拡張するといいかもしれない。

見出しは忘れて、一つの言語を操れればいいと思うとよいかも。

Autosar Guidelines C++14 example code compile list(1-169)
https://qiita.com/kaizen_nagoya/items/8ccbf6675c3494d57a76#_reference-6bf86e567f8b9d0a1028

仮説・検証(89)インド、インドネシアとJava、Javascript:接尾辞がついて別物と言うが共通点は多い。
https://qiita.com/kaizen_nagoya/items/2c331ff6654d41d5e157

dockerで機械学習(87) with JAVA(1)「Machine Learning: End-to-End guide for Java developers」 By Richard Reese, Jennifer Reese, Bostjan Kaluza, Uday Kamath, Krishna Choppella
https://qiita.com/kaizen_nagoya/items/2d3a4f168b4c9a28b32e

10) Networking basics:4

TCP/IPを基本としてWi-Fiまで幅広く網羅してもらえると嬉しい。

無線網(Wi-Fi)空中線(antenna)(0) 記事一覧(122/300目標)
https://qiita.com/kaizen_nagoya/items/5e5464ac2b24bd4cd001

情報処理技術者試験 ネットワークスペシャリストに合格 
https://qiita.com/kaizen_nagoya/items/407857392ca5c5677ee4

「基礎からわかるTCP/IP JAVAネットワークプログラミング」Eclipseでコンパイル。Wiresharkでデバッグ。
https://qiita.com/kaizen_nagoya/items/14519536b827fdadb32e

通信エミュレータの移植
https://qiita.com/kaizen_nagoya/items/ce505bbea4229b83e93b

11) One Scripting language:3

shellでもいいかも。自動実行できればいい。

Windows(M.S.)にPython3(Anaconda3)を導入する(7つの罠)
https://qiita.com/kaizen_nagoya/items/7bfd7ecdc4e8edcbd679

docker(19) 言語処理100本ノックをdockerで。python覚えるのに最適。
https://qiita.com/kaizen_nagoya/items/7e7eb7c543e0c18438c4

転職(16) 65歳からのプログラミング入門
https://qiita.com/kaizen_nagoya/items/1561f910c275b22d7c9f

並べ替え(re sort)

11の項目を、自分が大事だと思う順番に並び替えるのも良い。

K J category examples value
1 4 A Version Control Tool git 3
2 1 Containers Docker and Kubernetes 3
3 3 Data Structure and Algorithm Machine Learning or Quantum Computing 3
4 5 One Text Editors vim, Emacs or Eclipse 4
5 6 IDEs VSCode or IntelliJIDEA 3
6 10 Networking basics TCP/IP and Wi-Fi 4
7 8 Unix or Linux Ubuntu, Raspbian or Debian 4
8 11 One Scripting language Python or Ruby 3
9 9 An OOP Programming language C++, Java or JavaScript 3
10 7 Database and SQL Oracle, SQL Server or MySQL 2
11 2 Cloud Platform AWS, GCP, or Azure 3

自分が得意な分野が真ん中にある。この並べ替えは、一つの意見。他の分野が得意な人は、他の並び方になるだろう。Jは原著者のJavinpaul, kは@kaizen_nagoya

cloud platformが低いのは、もっと便利になる物が生き残るだろうという想定から。
cloud platformを作るプログラマがもっと頑張ると良い。
Database が低いのも同じ理由。
Unix/Linuxがどんどん便利になって、Raspbianやubuntuのように普及して使いやすくなるともっと上にするかも。

項目合併(merge)

IDEにエディタは含むこともあり、One Text Editors とIDEは一つの項目でも良いかもしれない。
UNIXがTCP/IPとともに普及してきたことを考えると、Networking basics と Unix or Linuxも一つの項目でも良いかもしれない。
言語はOOPかどうかはどっちゃでも良くて、One Scripting language と An OOP Programming language もpythonかJavascriptで良いので一つの項目で良いかもしれない。

私版「開発者が知っておくべき8の必須技能」に縮退。

K J category examples value
1 4 A Version Control git 3
2 1 Containers Docker and Kubernetes 3
3 3 Data Structure and Algorithm Machine Learning or Quantum Computing 3
4 5+6 One Text Editors and IDEs vim, Emacs, Eclipse, VSCode or IntelliJIDEA 4
5 10+8 Networking and Unix(Linux) TCP/IP, Wi-Fi and Ubuntu, Raspbian or Debian 4
6 11+9 One Scripting or Programming llanguage Python, Ruby, C++, Java or JavaScript 3
7 7 Database Oracle, SQL Server or MySQL 2
8 2 Cloud Platform AWS, GCP, or Azure 3

おお、重複感が減りすっきりした。もちろん、他の統合方法もいっぱいあると思う。
自分なりに整理すると仕事で役立つかも。

どんな資料も、再利用可能な方法で再計画(re programming)するのがprogrammer流かも。

内容追加(addition)

A version control toolにはissuとwikiも合わせたdocument toolに拡張した。
Web Serverがないので、Databeseと合体して1項目にした。Data Structure and Algorithmと合体するかどうかは悩んだ。

K J category examples value
1 4 A Version Control and document Tool GitHub, gitlab or bitbucket 3
2 1 Containers Docker and Kubernetes 3
3 3 Data Structure and Algorithm Machine Learning or Quantum Computing 3
4 5+6 One Text Editors and IDEs vim, Emacs, Eclipse, VSCode or IntelliJIDEA 4
5 10+8 Networking and Unix(Linux) TCP/IP, Wi-Fi and Ubuntu, Raspbian or Debian 4
6 11+9 One Scripting or Programming llanguage Python, Ruby, C++, Java or JavaScript 3
7 7 Web and Database Apache or Nginx and Oracle, SQL Server or MySQL 2
8 2 Cloud Platform AWS, GCP, or Azure 3

参考資料(reference)

一覧の一覧 a directory of directories of mine.
https://qiita.com/kaizen_nagoya/items/7eb0e006543886138f39

docker(59) Githubとdocker
https://qiita.com/kaizen_nagoya/items/f7e142cd283a1c314234

プログラマが知っているとよい色使い(JIS安全色)
https://qiita.com/kaizen_nagoya/items/cb7eb3199b0b98904a35

参考文献駆動執筆(references driven writing)・デンソークリエイト編
https://qiita.com/kaizen_nagoya/items/b27b3f58b8bf265a5cd1

「平成のうちにやめたかった『ITの7つの無意味な習慣』」に付け加えたかったこと。
https://qiita.com/kaizen_nagoya/items/e6f9c2e0afbf8ab4181c

仮説・検証(54)プログラムは音楽だ (A program is a music.)
https://qiita.com/kaizen_nagoya/items/33c9f33581e6886f8ad8

文書履歴(document history)

ver. 0.01 初稿 20200122 午前
ver. 0.02 順番並べ替え 20200122 昼
ver. 0.03 項目縮退 20200122 午後1時
ver. 0.04 Web追記 20200122 午後2時
ver. 0.05 参考資料追記 20200122 午後3時
ver. 0.06 表記補正、誤記訂正、Emacs追記 20200122 午後4時
ver. 0.07 構造見直し 20200122 午後5時
ver. 0.08 抜け漏れ補正 20200122 夜
ver. 0.09 内容追加(addition)追記 20200123

このエントリーをはてなブックマークに追加

https://b.hatena.ne.jp/guide/bbutton

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

2020年の開発者が知っておくべき11の必須技能→回答編 → 並べ替え→項目合併(8項目)→内容追記

2020年の開発者が知っておくべき11の必須スキル
https://qiita.com/rana_kualu/items/c79a16ff503c86b27483

11 Essential Skills Software Developers should Learn in 2020
https://dev.to/javinpaul/11-essential-skills-software-developers-should-learn-in-2020-1bio

Top 11 Essentials Skills for Software Developers in 2020
1) Containers (Docker and Kubernetes)
2) Cloud Platform (AWS, GCP, or Azure)
3) Data Structure and Algorithm
4) A Version Control Tool (Git)
5) One Text Editors (VIM)
6) IDEs (VSCode or IntelliJIDEA)
7) Database and SQL
8) UNIX (Linux)
9) An OOP Programming language (C++, Java or Python)
10) Networking basics
11) One Scripting language

回答編

11の技能を自己評価してみる。

0:知らない、触ったことがない
1:知ってる。使ったことがあるかもしれない。
2:誰かに相談できれば仕事で使える。
3:仕事に使っている。
4:改良に取り組んでいる。

点数を書いたら、その数だけURLを示す。

みだし補正

各みだしを category と examplesに分けてみる。見出しにやや整合性がない気がした。
下記表では、適当に補足・補正してみた。一番右の列が自己評価。

category examples value
Containers Docker and Kubernetes 3
Cloud Platform AWS, GCP, or Azure 3
Data Structure and Algorithm Machine Learning or Quantum Computing 3
A Version Control Tool git 3
One Text Editors vim, Emacs or Eclipse 4
IDEs VSCode or IntelliJIDEA 3
Database and SQL Oracle, SQL Server or MySQL 2
Unix or Linux Ubuntu, Raspbian or Debian 4
An OOP Programming language C++, Java or JavaScript 3
Networking basics TCP/IP and Wi-Fi 4
One Scripting language Python or Ruby 3

大事なのはでこぼこ。他よりよいのが1つ以上、他より悪いのを1つ以上書くこと。
全部同じ値は役に立たない。

私の場合は、Networkが専門で、BSDを対抗試験にDebian(linux)でコンパイルしてきた。エディタは作業の要。
苦手なのはDB、リレーショナルDBの概念と実装の隙間の大きさに戸惑う。

下記の一部の記事は、失敗だったり、未完だったり、これから該当する技術を書く予定のものがあります。
うまく行っていないもので解決する方法、誤字、誤解などにお気づきになられましたら、暖かいご指導のほどお願いいたします。

回答一覧

1) Containers (Docker and Kubernetes):3

これまで、色々な版での試験をするのに、全部別々のdockerを作ってhubに登録しとけば、いつでも必要な版をすぐに取り出せて便利。pythonでも、各版ごとにdocker作っておくとか。

docker(18) なぜdockerで機械学習するか 書籍・ソース一覧作成中 (目標100)
https://qiita.com/kaizen_nagoya/items/ddd12477544bf5ba85e2

docker(1)利用を勧める17の理由
https://qiita.com/kaizen_nagoya/items/c4e5075142bf5e11ddbe

docker(0) 資料集
https://qiita.com/kaizen_nagoya/items/45699eefd62677f69c1d

2) Cloud Platform (AWS, GCP, or Azure):3

いろいろなcloudの違いに依存されないためには、dockerで作ったものがそのままうごくサービスに限定して基本的な構造を設計するとよいかもというのが経験則。

「Qiitaのいろいろランキング2019」への感謝と提案
https://qiita.com/kaizen_nagoya/items/40b8557a20e8d75d62b5

日鉄ソリューションズのプライベートクラウドは、顧客満足度1位になっているほか、データサイエンティストの行事でDataRobotより上位の2位になっていることを記載。

転職(2) 転職者による、転職者のための、転職者の履歴、業績、面接
https://qiita.com/kaizen_nagoya/items/162fbb954deb886464bf

クラウドを利用するにあたってdockerを利用しているとよい点を記載。

製造業における機械学習
https://qiita.com/kaizen_nagoya/items/fbe846de16f74bea1d6f

製造業における機械学習でクラウド利用について記載。

3) Data Structure and Algorithm:3

機械学習をここに入れてもいいかもしれない。機械学習は、データ構造化と算法が鍵かも。

『フカシギの数え方』 おねえさんといっしょ:組み合わせ爆発の凄さ
https://qiita.com/kaizen_nagoya/items/f309b0c2bb015bbc71c3

仮説・検証(153)成功体験は語っても、成功体験に頼らないために。清水吉男・田中伸明
https://qiita.com/kaizen_nagoya/items/d32adfaf7b2568bfd9d2

データ中心設計で田中伸明さんと連名で安全工学シンポジウム等で発表させていただいているのは光栄。

仮説・検証(122)分析と設計
https://qiita.com/kaizen_nagoya/items/d7341c407026af61f216

4) A Version Control Tool (Git):3

版管理がこんなに楽になるなんて。

仮説・検証(51)公開算譜は機敏だ(open source is agile)GitHub and docker
https://qiita.com/kaizen_nagoya/items/5dd49a046b5991af3a5e

卒業論文、修士論文、博士論文は github/gitlab/bitbacketのprivate利用をお勧め
https://qiita.com/kaizen_nagoya/items/eb9945a2649f6f3eabd0

現在努力中
https://github.com/kaizen-nagoya

5) One Text Editors (VIM):4

VZエディタ移植(porting)に当たって実施したことと成果
https://qiita.com/kaizen_nagoya/items/5551be98dcbed8f41949

「アセンブラへの道」組立語(assembler)・機械語(machine language)・CPU
https://qiita.com/kaizen_nagoya/items/46f2333c2647b0e692b2

令和で成果を出す予定のソフトウェア・プログラミング・IT(一部、平成のコピー)
https://qiita.com/kaizen_nagoya/items/d7eae2ca3229eda72f88

仮説・検証(139)新人(学生)を指導するよりも新人(学生)に指導してもらった方が効率的
https://qiita.com/kaizen_nagoya/items/db993b1536055029f7c8

6) IDEs (VSCode or IntelliJIDEA):3

docker(39) Cコンパイラ3種をdockerで
https://qiita.com/kaizen_nagoya/items/77184cf005490d7579e6

g++, clang++ and vscode++ をdockerで(まだエラー中)
https://qiita.com/kaizen_nagoya/items/825e9bcb017925e0fc5a

docker and vscode not visual studio code
https://qiita.com/kaizen_nagoya/items/165a281570a8c62ca50a

7) Database and SQL:2

仮説・検証(163)生産縮小、規模縮小、人員縮小時には自動化道具を増強
https://qiita.com/kaizen_nagoya/items/8df1dc7d3a5c7869d3c2

Python で SQL
https://qiita.com/kaizen_nagoya/items/1a210fd10efaead88f68

8) UNIX (Linux):4

Posix Test Suite docker downloads, tar, install
https://qiita.com/kaizen_nagoya/items/f1e24be04a2405ede00f

xtUMLを導入する(linux編)
https://qiita.com/kaizen_nagoya/items/297097cc47a6487d9f20

仮説・検証(165)40年でソフトウェア開発の景色はどのぐらい変わったのか?
https://qiita.com/kaizen_nagoya/items/54c17cf751894eef56f8

Raspberry Pi(SDカード付き)開封から起動までの時間測定
https://qiita.com/kaizen_nagoya/items/8cde74c07848ec413f7b

9) An OOP Programming language (C++, Java or Python):3

Object Oriented Programmingは、物をよく分析してプログラムすればいいだけだと思えば良い。
プログラミング言語をよく知らないうちなら理解可能な概念。
特定の言語を知ってしまうと、その言語での解決策の案に囚われて、すごく狭い理解しかしない人たちがいるかもしれない。抽象データ型に対応している言語ならどれでもよい。
COBOLは、元々Object Orientedな言語で、OOCOBOLでなくてもよいかも。機械語がいちばんのObject Oriented Languageだとずっと主張しつづけてきた。
Classによる体系化はOOPの一手法かもしれないがお勧めできない。C++ならTemplateを駆使したり、拡張するといいかもしれない。

見出しは忘れて、一つの言語を操れればいいと思うとよいかも。

Autosar Guidelines C++14 example code compile list(1-169)
https://qiita.com/kaizen_nagoya/items/8ccbf6675c3494d57a76#_reference-6bf86e567f8b9d0a1028

仮説・検証(89)インド、インドネシアとJava、Javascript:接尾辞がついて別物と言うが共通点は多い。
https://qiita.com/kaizen_nagoya/items/2c331ff6654d41d5e157

dockerで機械学習(87) with JAVA(1)「Machine Learning: End-to-End guide for Java developers」 By Richard Reese, Jennifer Reese, Bostjan Kaluza, Uday Kamath, Krishna Choppella
https://qiita.com/kaizen_nagoya/items/2d3a4f168b4c9a28b32e

10) Networking basics:4

TCP/IPを基本としてWi-Fiまで幅広く網羅してもらえると嬉しい。

無線網(Wi-Fi)空中線(antenna)(0) 記事一覧(122/300目標)
https://qiita.com/kaizen_nagoya/items/5e5464ac2b24bd4cd001

情報処理技術者試験 ネットワークスペシャリストに合格 
https://qiita.com/kaizen_nagoya/items/407857392ca5c5677ee4

「基礎からわかるTCP/IP JAVAネットワークプログラミング」Eclipseでコンパイル。Wiresharkでデバッグ。
https://qiita.com/kaizen_nagoya/items/14519536b827fdadb32e

通信エミュレータの移植
https://qiita.com/kaizen_nagoya/items/ce505bbea4229b83e93b

11) One Scripting language:3

shellでもいいかも。自動実行できればいい。

Windows(M.S.)にPython3(Anaconda3)を導入する(7つの罠)
https://qiita.com/kaizen_nagoya/items/7bfd7ecdc4e8edcbd679

docker(19) 言語処理100本ノックをdockerで。python覚えるのに最適。
https://qiita.com/kaizen_nagoya/items/7e7eb7c543e0c18438c4

転職(16) 65歳からのプログラミング入門
https://qiita.com/kaizen_nagoya/items/1561f910c275b22d7c9f

並べ替え(re sort)

11の項目を、自分が大事だと思う順番に並び替えるのも良い。

K J category examples value
1 4 A Version Control Tool git 3
2 1 Containers Docker and Kubernetes 3
3 3 Data Structure and Algorithm Machine Learning or Quantum Computing 3
4 5 One Text Editors vim, Emacs or Eclipse 4
5 6 IDEs VSCode or IntelliJIDEA 3
6 10 Networking basics TCP/IP and Wi-Fi 4
7 8 Unix or Linux Ubuntu, Raspbian or Debian 4
8 11 One Scripting language Python or Ruby 3
9 9 An OOP Programming language C++, Java or JavaScript 3
10 7 Database and SQL Oracle, SQL Server or MySQL 2
11 2 Cloud Platform AWS, GCP, or Azure 3

自分が得意な分野が真ん中にある。この並べ替えは、一つの意見。他の分野が得意な人は、他の並び方になるだろう。Jは原著者のJavinpaul, kは@kaizen_nagoya

cloud platformが低いのは、もっと便利になる物が生き残るだろうという想定から。
cloud platformを作るプログラマがもっと頑張ると良い。
Database が低いのも同じ理由。
Unix/Linuxがどんどん便利になって、Raspbianやubuntuのように普及して使いやすくなるともっと上にするかも。

項目合併(merge)

IDEにエディタは含むこともあり、One Text Editors とIDEは一つの項目でも良いかもしれない。
UNIXがTCP/IPとともに普及してきたことを考えると、Networking basics と Unix or Linuxも一つの項目でも良いかもしれない。
言語はOOPかどうかはどっちゃでも良くて、One Scripting language と An OOP Programming language もpythonかJavascriptで良いので一つの項目で良いかもしれない。

私版「開発者が知っておくべき8の必須技能」に縮退。

K J category examples value
1 4 A Version Control git 3
2 1 Containers Docker and Kubernetes 3
3 3 Data Structure and Algorithm Machine Learning or Quantum Computing 3
4 5+6 One Text Editors and IDEs vim, Emacs, Eclipse, VSCode or IntelliJIDEA 4
5 10+8 Networking and Unix(Linux) TCP/IP, Wi-Fi and Ubuntu, Raspbian or Debian 4
6 11+9 One Scripting or Programming llanguage Python, Ruby, C++, Java or JavaScript 3
7 7 Database Oracle, SQL Server or MySQL 2
8 2 Cloud Platform AWS, GCP, or Azure 3

おお、重複感が減りすっきりした。もちろん、他の統合方法もいっぱいあると思う。
自分なりに整理すると仕事で役立つかも。

どんな資料も、再利用可能な方法で再計画(re programming)するのがprogrammer流かも。

内容追加(addition)

A version control toolにはissuとwikiも合わせたdocument toolに拡張した。
Web Serverがないので、Databeseと合体して1項目にした。Data Structure and Algorithmと合体するかどうかは悩んだ。

K J category examples value
1 4 A Version Control and document Tool GitHub, gitlab or bitbucket 3
2 1 Containers Docker and Kubernetes 3
3 3 Data Structure and Algorithm Machine Learning or Quantum Computing 3
4 5+6 One Text Editors and IDEs vim, Emacs, Eclipse, VSCode or IntelliJIDEA 4
5 10+8 Networking and Unix(Linux) TCP/IP, Wi-Fi and Ubuntu, Raspbian or Debian 4
6 11+9 One Scripting or Programming llanguage Python, Ruby, C++, Java or JavaScript 3
7 7 Web and Database Apache or Nginx and Oracle, SQL Server or MySQL 2
8 2 Cloud Platform AWS, GCP, or Azure 3

参考資料(reference)

一覧の一覧 a directory of directories of mine.
https://qiita.com/kaizen_nagoya/items/7eb0e006543886138f39

docker(59) Githubとdocker
https://qiita.com/kaizen_nagoya/items/f7e142cd283a1c314234

プログラマが知っているとよい色使い(JIS安全色)
https://qiita.com/kaizen_nagoya/items/cb7eb3199b0b98904a35

参考文献駆動執筆(references driven writing)・デンソークリエイト編
https://qiita.com/kaizen_nagoya/items/b27b3f58b8bf265a5cd1

「平成のうちにやめたかった『ITの7つの無意味な習慣』」に付け加えたかったこと。
https://qiita.com/kaizen_nagoya/items/e6f9c2e0afbf8ab4181c

仮説・検証(54)プログラムは音楽だ (A program is a music.)
https://qiita.com/kaizen_nagoya/items/33c9f33581e6886f8ad8

文書履歴(document history)

ver. 0.01 初稿 20200122 午前
ver. 0.02 順番並べ替え 20200122 昼
ver. 0.03 項目縮退 20200122 午後1時
ver. 0.04 Web追記 20200122 午後2時
ver. 0.05 参考資料追記 20200122 午後3時
ver. 0.06 表記補正、誤記訂正、Emacs追記 20200122 午後4時
ver. 0.07 構造見直し 20200122 午後5時
ver. 0.08 抜け漏れ補正 20200122 夜
ver. 0.09 内容追加(addition)追記 20200123

このエントリーをはてなブックマークに追加

https://b.hatena.ne.jp/guide/bbutton

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Dockerを使って簡単にローカルtomcat環境を作る

はじめに

対象者

  • eclipseを使ったJavaの開発はしたことはある
  • あまりサーバーサイド知らない
  • Docker使ったことない or なんとなく手順で使い方は見た。

やること

あまり手間をかけずにローカルにtomcatのサーバー環境を構築する。

tomcatをそのままローカルにインストールしてもいいのですが、
サーバーはLinux環境であることが多く、環境差異による問題も多いです。

全く同じとは言えませんが、なるべく本番に近い環境を構築したいと思います。

Dockerとは

この記事を参考にしてください。
https://qiita.com/hikaruright/items/0908df7d1101498e4a58

前提条件

Windows10 ProまたはMacを使っている

How To Setup

今回は、Dockerを使って環境を構築してみましょう。

Dockerのインストール

以下のサイトにアクセスし、Dockerをインストールします。
既にインストール済みの場合にはスキップしてください。

https://hub.docker.com/?overlay=onboarding

なお、Windowsをお使いの場合にはHyper-Vの有効化が必要ですのでご注意ください。
以下の公式ドキュメントを参考に有効化を行います。

Hyper-Vの有効化

Docker Composeによる起動

Dockerを使っていると、コンテナの管理が若干面倒です。

特に、一つのアプリケーションを作成するために複数のコンテナを起動する必要がある場合には
Docker Composeという機能を利用します。

簡単に説明すると、dockerのコンテナを起動させるための設定をひとまとめにした設定ファイルを作成します。

その設定ファイルがdocker-compose.ymlです。

今回はtomcatが起動する単一のコンテナを実行するための設定ファイルを作成します。

ファイルの作成

任意のフォルダを作成し、以下のファイルを作成します。

docker-compose.yml
version: '3'

services:
  app:
    container_name: tomcat
    image: tomcat:8.5-jdk8-adoptopenjdk-openj9
    ports:
      - 8080:8080
    volumes:
      - ./webapps:/usr/local/tomcat/webapps

これで、containerという名前のコンテナが起動されます。
それぞれの設定内容を解説していきましょう。

container_name

起動するコンテナ名です。
docker上で一意となるように指定します。

image

イメージ名を指定します。

ports

ポートフォワーディングを指定します。
この例では8080のアクセスをコンテナの8080ポートに転送しています。

例えば、ホストOSの8080が既に使用されている場合には、

- 8090:8080

とすることで、ホストOSの8090をコンテナの8080ポートに転送することができます。

volumes

ホストOSのフォルダまたはファイルをdockerコンテナのOSにマウントします。
この例の場合には、webappsフォルダをコンテナの/usr/local/tomcat/webappsにマウントしています。

Webappsフォルダの作成

作成したdocker-compose.ymlと同じフォルダに、「webapps」というフォルダを作成し、
作成したフォルダに配備したいwarファイルを置きます。

最終的に、以下のようなフォルダ構成になります。

 /tomcat
   ┣ docker-compose.yml
   ┗ /webapps
      ┗ warファイル

実行

ターミナル、またはコマンドプロンプトを開き、
docker-compose.ymlのあるフォルダに移動します。

移動したら、以下のコマンドを実行します。

$ docker-compose up -d

これで、ローカルでtomcatが実行されました。

ログの確認

tomcatの起動ログをみたい場合には、以下のコマンドを実行します。

$ docker logs tomcat

以下のコマンドを実行することで、追従したログを表示できます。

$ docker logs -f tomcat

動作確認

ブラウザを開き

http://localhost:8080/xxx (xxxはwarのファイル)

にアクセスします。

特に問題なくデプロイされていればページが表示されます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

DockerのVOLUMEを理解してdocker,docker-compose on WSLのパス問題をエレガントに解決しよう

TL;DR

Q. docker、docker-composeのボリューム指定がWSLで上手く動かないんだけど?
A. シンボリックリンクを作ればいいよ。ほれっ↓(→ え?どこに作ってるの?)

(試す場合は自己責任で)

# WSL上で実行する または .bashrc などに書く
docker run -i --rm -v /:/WSL alpine ln -snf /c /WSL/mnt/c

# 参考 WSL上の /home/$USER/directory から /mnt/c/Users/ユーザー名/directory に
# シンボリックリンクを貼るという使い方をしてる人
docker run -i --rm -v /:/WSL alpine ln -snf /c/Users/ユーザー名 /WSL/home/$USER

この記事の方法を使うとdockerでもdocker-composeでもLinuxとまったく同じようにボリュームのパス指定ができて、シンボリックリンクが絡んだディレクトリでも問題なく動きます(さすがにWindowsから見えないWSL上のディレクトリは無理ですが)。さらにWSLの設定は変えません。他では見かけない新しいやり方・・・かどうかは知りませんが、少なくとも私が考えた方法です。

おまけでDockerのボリュームの雑な解説記事になってます。(おまけなので正確性は求めないでください。)

長い解説

VOLUMEの仕組み

Dockerのボリュームってわかりづらくないでしょうか?データを永続化する仕組み?指定したディレクトリをコンテナ内にマウントしている?これは間違ってはおらずボリュームで一番多い使い方だと思いますが、ここを出発点とすると逆に理解するのが難しくなると思います。

思いっきり適当ですが、次の順番で理解していきましょう。(前提としてDockerはクライアントサーバーモデルというのは知っていますよね?)

  1. ボリュームとはDockerサーバーがコンテナに割り当てるストレージ領域である。
  2. (DockerfileでVOLUMEが定義されてる)コンテナを作成するとそのコンテナ専用にストレージが割り当てられる。
  3. このストレージの保存ディレクトリの場所はDockerサーバーが勝手に決める。 (当然サーバー上のディレクトリ)
  4. コンテナを削除してもボリュームは残り続けるので後からでもデータを回収できる。(少しめんどくさいですが)
  5. コンテナを作らずにボリュームだけを作成することもできる。そのときに任意の名前をつけることもできる。
  6. コンテナを起動するときに既存のボリュームを割り当てることができる。(docker runの-vオプション)
  7. Dockerサーバーが作ったどこかのディレクトリのボリュームの代わりに、ユーザーが指定した(サーバー上の)ディレクトリをボリュームとして利用(代用?)できる。

普段よく使われてる(?)使い方は最後の7.のパターンというわけです。

VOLUMEはサーバー上のディレクトリをマウントしている

(この記事で散々、ボリューム=ディレクトリのような書き方をしていますがファイルも指定できます。)

さて本題の前に、VOLUMEで勘違いされそうな点を明確にしておきます。それはクライアントのディレクトリの中身をサーバーに送り込んでいるのではないということです。ボリュームはクライアントにはありません。サーバー上にあります。

1.png
2.png

docker buildコマンドがクライアントにあるファイルをサーバーに送り込んでビルドしているのとは異なり、ボリュームではパスだけを渡してます。

Linuxではどう見えるか

Linuxでは一般的にDockerクライアントもDockerサーバーも同一のマシン上にあって(仮想マシンも使いません)クライアントのディレクトリのパスも、サーバーのディレクトリのパスも同じパスで同じ場所を指しています。サーバー上のディレクトリを指定すると言っても結局はクライアントのディレクトリを指定しているのと変わりません。

3.png

Windowsではどう見えるか

さてWindowsではどうなっているのでしょうか?WindowsではDockerを使う場合、一般的にDocker Desktop for Windowsを使います。実態はHyperV上のLinux仮想マシンです。このLinux仮想マシンにはホストOSであるWindows上のドライブがCIFSDocker Desktop Community 2.2.0.0 から)gRPC FUSE (grpcfuse)でマウントされています。マウント場所は/host_mnt/cですが/host_mnt/cを指す/cというシンボリックリンクも作成されています。つまりLinux仮想マシンは/cで始まるパスでWindous上のファイルにアクセスできる仕組みになっています。

興味がある人のために、このLinux仮想マシン(DockerDesktopVM)の中身の調べ方を紹介します。

$ docker run -it --rm -v /:/vm alpine chroot /vm

DockerDesktopVM上の/ディレクトリをalpineコンテナの/vmに一旦マウントしてから、/vm/chrootしているだけです。ボリュームはサーバー上のディレクトリをマウントしているということがわかれば、なぜこれで中身が見れるのかもわかると思います。

さてそれではWindowsではどのようしてパスを処理しているのでしょうか?少し想像が入っていますが、DockerDesktopVMはWindows形式のパスを検出すると以下のようにLinuxのパスへの変換を行っているのだと思います。(WSL所のLinux版DockerクライアントでもWindows形式のパスが使えたのでクライアント側で変換してるのではないようです。)

4.png

WSL上で使うのはLinux形式のパスなのでそのような変換は行われません。例えば/mnt/c/Users/my-name/projectというパスはそのままサーバー上のパスとして扱われます。こんなパスはサーバー上にはないので、当然DockerサーバーはWindows上のファイルにはアクセス出来ません。

解決方法

よく見かける解決方法

DockerサーバーがWindows上のファイルにはアクセスできないのは要するにパスの不一致が原因なので合わせてやれば良いのです。その解決法の一つがWSLのWindows上のディレクトリの場所をデフォルトの/mntではなく/に変更する方法です。

/etc/wsl.conf
[automount]
root = /
options = "metadata"

こうすることでWSL上に/c以下にCドライブがマウントされ、クライアント側とサーバー側のパスが一致するので同じパスでDockerサーバーはWindows上のファイルを参照できるようになります。

冒頭の解決方法

ところで/mnt/c/Users/my-name/projectって長いですよね?私はよく使うディレクトリに素早くアクセスできるようにWSL上のホームディレクトリにシンボリックリンクを作成しています。例えば/home/koichi/workspaceというシンボリックリンクのリンク先は/mnt/c/Users/koichi/workspaceです。

さて、では/home/koichi/workspace/projectにいるときにdocker run -it -v $PWD/data:/data debianと実行したらどうなるでしょうか?カレントディレクトリ意味する$PWDの中身を展開すると/home/koichi/workspace/project/dataとなります。こんなディレクトリはDockerDesktopVM上にはありません。そのためWindows上のディレクトリにはアクセスできません。

docker-composeの場合は相対パスで指定できてシンボリックリンクは/mnt/c/以下のパスに解決されて渡されるようですが、dockerコマンドは絶対パスでしか指定ができずシンボリックリンクも解決されません。そこで冒頭の解決方法です。

(DockerDesktopVM上に)パスがないなら作ればいいじゃない?

もう分かったと思いますが、WSL側のパスを変えるのではなく、WSL上で使われているのと同じパスでアクセスできるようにDockerDesktopVMの中にシンボリックリンクを作っています。具体的にはWSL上で/mnt/c以下を参照するのでDockerDesktopVM上にも同じ/mnt/cという名前のシンボリックリンクを作成しています。このリンク先は/cです。(/cもシンボリックリンクなので最終的には/host_mnt/cにつながります。)同様に私は必要なので/home/koichiというシンボリックリンクを作成して、/c/Users/koichiにつなげています。

どのような使い方をしているかで作成すべきシンボリックリンクは変わりますが仕組みを理解すれば何を作成すれば良いかもわかると思います。

この方法のデメリット

まずDockerDesktopVMに作成したシンボリックリンクはDockerDesktopVMを再起動すると消えます。DockerDesktopVMに乗り込んでファイルシステムを見ればわかりますが/var/lib以外永続化されていません。そのためどこかの時点で再作成する必要があります。(例えば.bashrcで作成するなど。DockerDesktopVM再起動などのタイミングに仕込めれば良いのですが)

もう一つはDockerDesktopVMに変更を加えているところです。利用実績もないので何か気づいていない問題が発生するかもしれません。(例えばDocker Desktopのアップデート時など)なのでこの方法を使う場合は自己責任でお願いします。なにか問題があればコメントいただけると助かります。(実はWindows上でボリュームの扱いが面倒だったので、ボリュームを避けた使い方をしているので気づかない可能性が高いのです。)

あとこの方法によるデメリットというわけでは無いのですが、ボリュームのパスを間違えるとDockerDesktopVM上にディレクトリが作成されてしまいます。そしてそのディレクトリに後からシンボリックリンクを作成しようとするとエラーになりますので気をつけてください。普通はDockerDesktopVMを再起動すれば消えるはずですが。

以上、VOLUMEの解説とパス問題の解決法でした。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Giteaでhttps接続

Gitea v1.10(コンテナ)をHTTPS接続で使う - Qiita
の通りでした。(圧倒的感謝)

docker-compose.yml
version: '3'
services:
  gitea-server:
    image: gitea/gitea:1.10.3
    volumes:
      - ./gitea-data:/data
      - ./ssl-data:/ssl
    ports:
      - 3000:3000
      - 10022:10022
    environment:
      - SSH_DOMAIN=${MY_DOMAIN}
      - SSH_PORT=10022
      - USER_UID=1000
      - USER_GID=1000
      - ROOT_URL=http://${MY_DOMAIN}:3000
    restart: always

サーバーのIP or ドメインを.envに入れる。

$ echo MY_DOMAIN=www.example.com > .env

letsencryptで作成されたファイルをコピーしておく。

# mkdir ssl-data
# cp /etc/letsencrypt/live/www.example.com/fullchain.pem ssl-data/
# cp /etc/letsencrypt/live/www.example.com/privkey.pem ssl-data/

一度起動して落とす

# docker-compose up
# docker-compose down

ROOT_URLをhttpsから始まるよう変更してPROTOCOLCERT_FILEKEY_FILEの行を追加する。

$ vi gitea-data/gitea/conf/app.ini
# ROOT_URL         = http://www.example.com:3000
ROOT_URL         = https://www.example.com:3000
PROTOCOL         = https
CERT_FILE        = /ssl/fullchain.pem
KEY_FILE         = /ssl/privkey.pem

起動してhttps://www.example.comから登録ボタンから設定を行う。
Gitea環境をdocker-composeで作ってみる - Qiita参照

# docker-compose up
# docker-compose down

Gitea v1.10(コンテナ)をHTTPS接続で使う - Qiita

なお、わざわざapp.iniをここで編集せずとも環境変数で最初から反映できるんじゃないの?
ということは当然いわれそうであるが、やってみて反映できなかったのでこのようにvolumeにあるiniを
編集するような手順としている。

niiku-y氏も書かれているがdocker-compose.ymlの環境変数から入れてくれそうなものだが、giteaの現在の動きでは手動編集が必要なようだ。

使用法:HTTPSセットアップ-ドキュメント

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む