新米データエンジニアがPGConf.ASIA に初参加してきた

PostgreSQL Advent Calendar 2017 の過ぎてしまった14日目の記事です。

データ分析や集計処理で使っている(&使えそうな?)クエリについて紹介しようとしていたのですが、色々アレヤコレヤがあって、察してくれという事で、路線変更。

うちの部署ではデータ分析基盤を新規改装中で、ようやくRDMBSをちゃんと使い始め(まぁもろもろ大変でした)、データ分析向きでお安く始められるけど、素敵なPostgreSQLを使っています(他にもperl、embulk、kuroko2とか色々ありますがこれはまた別の機会に)。
なので、データエンジニアとしては、身銭切ってでも(色々あって会社からサポート取れなかった)行きたいって事で参加してきました。

f:id:yassan0627:20171212062306p:plain

PGConf.ASIA 2017 は、アジア最大のPostgreSQLコミュニティイベントで、12月4日〜12月6日の期間で実施されました。 私が参加したのは、Day1とDay2の2日間です。

各セッションの説明や一部スライドは以下から確認出来ます。

また、当日のツイートまとめは以下

PGCONF.Asia 2017 ツイートまとめ - Togetter

気になった話題としては、以下がありました。

  • PostgreSQL 10の説明やそれ以降、どのように変わっていくか
  • ロジカルレプリケーション、パラレルクエリ、パーティショニング、シャーディング、HAなどの紹介や制限事項
  • SQLクエリの最適化、ウィンドウ関数などのPostgreSQLでのSQLの話
  • PostgreSQLの活用事例紹介
  • SCRAM認証やDB自身の暗号化といったセキュリティ面

まぁ、全方位って感じですね。

データ分析屋さんとしては、パラレルクエリやロジカルレプリケーション、SCRAM認証やDBの暗号化などは使ってみたいところではあるけど、機能面や周辺のミドルウェアやライブラリの対応などがまだ整っていないので本番で使うには色々悩みどころです。
今後の予定からすると、Pg12辺りにはなんとかなりそう(?)

印象としては、バージョン重ねるたびに、Hadoopに近寄っている感がすごくするのは私だけかなぁ。

では、改めて、本題。聴いた講演の中から印象に残ったいくつかを紹介。

PostgreSQL universal database

スライド

Oleg Bartunov さんによる、「PostgreSQLを使うのがいかに良い選択肢なのか」って事が良く分かるお話でした。

歴史を振り返りながら、PostgreSQLの魅力がふんだんに紹介されていました。

スライドpp13(Case 2: NoSQL Postgres)で、NoSQLとしての対応について述べらてていたのですが、2018には SQL:2016 - wikipedia に対応し、 2019頃?には、それを拡張して、Custom typeのサポートや、インデックスの改善?、JSONの更新、削除にも対応するらしい。

詳しいSQL:2016については、 What's New in SQL:2016 を見ると良いかと。 データ分析をする際に、Rawデータを扱う際にスキーマレスにしたいって事が多々あるので、この辺りの対応はとてもうれしい。

ただ、JSON便利なのだけど、データサイズが大きくなるので、PostgreSQLの仕様上、TOASTが発生してパフォーマンスが落ちる問題がある。 TOASTについては、 TOASTメカニズム - KaiGaiの俺メモ がとても参考になります。

また、ご自身の関わるお仕事(宇宙しゅごい話)も熱かった。内容も濃いのだけど、扱っているDBサイズがトータル100TBって、、そこまで行けるんですね。

PostgreSQL Strengthen Our Country

Julyanto Sutandang さんによる、インドネシアでのPostgreSQLの利用について。 「某赤い商用RDBMSなどの外国製のプロプライエタリな製品を使わずにPostgreSQLを使う事で、国レベルで輸入額を減らす。」
なるほどって思いました。また、見ている視野が違う。やり手なんだろうなぁって感じの人でした。
また、様々な金融系の利用事例を見ているとインドネシア国内の大手銀行でも当たり前に使っているようです。

Postgresパーティーをバリでどう?ってバリ島押しが面白かった。一度、行ったことがありますが、ご飯も美味しいし、景色も良いし、バリ良いよバリ。

QAで、Oracle RACPostgreSQLで置き換えに関して、HAに関する質問だったのだけど、RACとしての機能をどう補完したのかってところには触れられず。。

What’s new in PostgreSQL 10

スライド

Magnus HaganderさんによるPosgreSQL10の話。

互換性のなくなる話がちらほら。移管の際には参考になりそう。 クライアント認証をよりセキュアにするSCRAM認証をサポートしたとの事。この辺は、クライアントアプリやドライバやライブラリとかがサポートしているかしっかり確認してから使わないと事故りそうだ。

モニアリング面では、pg_stat_activityの可視性が向上したのと、モニタリング用のロールの追加ってのは運用していてありがたい。

良く分からなかったのは、XML tableのサポート。どこにメリットがあるのかイマイチわからない。

バックアップやレプリケーションに関して、 postgresql.confpg_hba.conf のデフォルト値が以下のように変わることでローカルでレプリケーションをすぐに使えるようになっているとの事。

postgresql.conf defaults:
- wal_level = replica
- max_wal_senders = 10
- max_replication_slots = 10

pg_hba.conf defaults:
- Replication connections by default

スライドpp42(Don't forget)で、WALリサイクリングとかVACUUMに気をつけようぜ!ってあるけど、その割には、デフォルトの値が割とアグレッシブなのが気になりました。モニタリング必須ですね。

ロジカルレプリケーションについても触れられていたが、利用するにはユースケース選びそうな雰囲気。

アイルランド最大の薬局サプライヤーチェーンの BI プラットホームに使われたPostgres. 私達の経験と失敗

スライド

Andy Fefelovさんによる事例紹介。

まったく知らない製品があって、国によって違うんだなぁと。

SpagoBI

SpagoBI は、OSSのBIだそうです。ただ、 新しいバージョンから、 Knowage って言う、 OSSのBIスイートの一部として取り込まれたみたい。CEとEEがあるのでお試しは出来そう。
パット見はキレイだけど、BI製品はどれもライセンス高いのでこれを使ってみるのもありかもしれないですね。

ここでは、BIとしてのUIはこちらを使っているようです。

Pentaho / Mondrian / Saiku

Pentaho もBIスイートの一つですが、もともとは、Pentaho Corporationというアメリカの会社だったのですが、Hitachi Data Systems Corporationと統合して、 Hitachi Vantara の製品となっているようです。

CE版はありますが、もはやオープン感は薄い感じ(勝手な印象)。

この辺りが参考になりました。 オープンソースBIのPentaho(ペンタホ)ブログ: アーカイブ qiita.com

どうやらETL周りはここが担当しているようです。

Cubes(databrewery)

github.com

アドホックに分析する際に、いろんな切り口で分析し易いようにするためのOLAPの為のフレームワークのようです。

以下のスライドがとても分かり易いです。

www.slideshare.net

他のスライドも参考になりました。
www.slideshare.net

Cubesを使って、RDBのデータをstar schemaとして集約したモデリングを行い、HTTPで多次元的にスライスするってのは、シンプルで良いですね。 ただ、開発止まってるっぽいのが残念。他のデファクトがあるのかなぁ。

スライドから推測した全体像としては、
Postgresをraw dataを置く「stage」、標準化した「nds」、cubeやスナップショット、ビューとして集約した「ddm」の3層に分けたデータストアとし、

  1. Cyclone_client(自前?)でCSVを取得、Kachok(かちょく)でWebスクレイピング、Skytoolsで既存のプロダクトからPL/pgsqlでデータ抜くなどした raw dataをstageに配置
  2. Pentaho(PDI)でETL処理して、標準化して、ndsに配置
  3. Cubes使ってモデリングし、必要ならスナップショット、ビューを作成して、ddmに配置 して、データを用意
  4. CubesとAPI経由でデータを取得しリッチなグラフを用意(D3、DC、croosfilter)したり、ACLする自前のRails+ReactのAPIを用意
  5. 4をI/Fとして、SpagoBIをビューアとしてユーザに見せている

と言った感じかなぁ。

各ツールを使ったこと無いので実際のところどうなのか自信ない。。。
Cubes面白いなぁ。

PostgreSQL 10 を導入!大規模データ分析事例からみる DWH としての PostgreSQL 活用のポイント

スライド

石井 愛弓さんによる、PostgreSQL10でパラレルクエリをつかったDWHとしてPostgreSQLを扱う際の抑えどころの紹介。
現状でパラレルクエリを使う際にとても参考になる話でした。実際に使ってみたいと考えていたところだったので、この検証結果は本当にありがたい。

その他

その他にも、

  • Dmitry Dolgovさんの「PostgreSQL での NoSQL 成功事例( スライド )」はJSONPostgreSQLで使う際の参考になった
  • Michael Paquierさんの「SCRAM authentication( スライド )」は、SCRAM認証って何か知ることが出来たし
  • Bruce Momjianさんの「Postgres Window Magic( スライド )」は、Windows関数についてとても参考になった
  • Ashutosh Bapatさん、Amit Langoteさんの「Declarative Partitioning Has Arrived( スライド1 スライド2 )」は、パーティショニングを検討する上でとても参考になった
  • Ilya Kosmodemianskyさんの「PostgreSQL クエリ最適化テクニック ステップ・バイ・ステップ( スライド )」や 高塚 遥さんの「SQL パフォーマンスチューニング技法 2017( スライド )」は、SQL最適化に対してとても参考になった
  • 篠田 典良さんの「Logical Replication Internals( スライド )」や澤田 雅彦さんの「PostgreSQL Replication 2.0( スライド )」は、今後のレプリケーションを考える上でとても参考になった。また、澤田さんのデモの手際の良さがすごい。手慣れてる感ある。

つまり、みんな良かった。 他にも被ってて聴けなかった講演もありましたが、どの講演もすごく良いものでした。

感想

控えめに言っても、学びの多い、最高の2日間でした。

今のPostgreSQLの話やPostgreSQLの活用事例、DBチューニングやSQL話など様々あって、とても参考になる時間でした。
また、通訳のあるセッションについては、英語のスピーカーに対して、日本語で質問して&回答もらえる(通訳してくれる)のでとても有難かった(事前にアナウンスしてくれるとすごく良かった)。

あと、PostgreSQLのステッカーを期待してたけど無かったのが残念。。。欲しいなぁf:id:yassan0627:20171216170953p:plain

会場は、 秋葉原コンベンションホール で、立地もよくお昼ご飯にも困らなかった(選ぶのに困るくらい)。

今回は、

てな感じで、 そーだい(@soudai1025) さんからぐいぐい誘われたのだけど、アウトプットせねば詰むっとなって集中して聴けたし、結果、良いきっかけになったので良かった。ありがとう。そーだいさん。

おまけ

Day1の後に、個人的に飲みに行った帰りに、 鈴木酒販神田店 って良さげな酒屋さんがありました。
日本酒やクラフトビールが程良く揃ってて、角打ちもあるので近くの人は行ってみると良いかも。

プロジェクト管理 on Redmine on Dockerで運用含めて考えてみる~環境構築編~

f:id:yassan0627:20171202151039p:plain

Redmine Advent Calendar 2017 の 11日目です!

redmine.tokyo という、Redmine勉強会でコアスタッフをしている やっさん🍶(@yassan168) です。

今回は、RedmineをDocker使って環境を構築し、運用面まで考えてみます。 、、、のつもりでしたが、ボリュームがでかいので次回12/25に運用編は分けます。
(´-`).。oO(2段階認証のGmailアカウントからのメール送信を解決するのに時間がかかった上に成果が無いという悲惨な話。。)

前提条件

  • 実行環境は、Ubuntu 16.04 LTS(私のノートがUbuntuなので)
  • RDBは、PostgreSQLがすでに用意してある
  • パブリックIPは、192.168.11.6
  • サイトドメインredmine.yassan.local とするため、hostsに設定追加
192.168.11.6 redmine.yassan.local
  • 実行ユーザは、 redmine を新規に作成(PW指定無し。 sudo su - redmine で切り替え)
  • SELinuxはdisable

要件

  • Redmineの構築コストが低い
  • プラグインや添付ファイル、テーマはコンテナに含めない
  • Redmineプラグインが自由に追加可能
  • 添付ファイル、テーマなどのバックアップが可能
  • URLに「/redmine」を入れること
  • HTTPSである事

Dockerfileはどうするのか?

Dockerでredmineを動かすにも、一からDockerfileを書いてもいいのですが、車輪の再発明の匂いがするのでDocker Hubで検索すると480リポジトリもありました。 f:id:yassan0627:20171203112104p:plain

Docker公式の library/redmine - Docker Hub もありますが、こちらは割とプレーンな状態で、一から運用面などを考慮する必要があります。独自にどうこうしたい人はこちらを使って、docker-compose使ってイイ感じしたら良いかと思います。

今回は、 その中でも sameersbn/redmine を使います。

Redmine.tokyo の事前アンケート でも利用している人が多い bitnami のイメージ bitnami/redmine - Docker Hub もあります。

こちらは、コンポーネントをALL bitnamiなので、bitnamiユーザならこちらでも良いのかも。

また、今回使用するDockerイメージの作者 sameersbn (Sameer Naik) さんは、bitnamiの中の人ですね。

dockerの用意

その辺はお手本が山程あると思いますのでおぐぐりください。 私は諸般の事情で Hosts in Rancher にある Install Scriptで docker-ce 17.06をインストール後、うっかりアップグレードしないようVer.固定してます。

また、rootじゃなくてもdockerを実行出来るようにしています cf. Post-installation steps for Linux

$ curl https://releases.rancher.com/install-docker/17.06.sh | sh
$ apt-mark hold docker-ce
$ sudo groupadd docker
$ sudo usermod -aG docker redmine

docker-composeの用意

Install Docker Compose | Docker Documentation を参考にしてインストールください。

Ver.確認

$ docker --version
Docker version 17.06.2-ce, build cec0b72
$ docker-compose --version
docker-compose version 1.17.0, build ac53b73

添付ファイルやバックアップ、証明書の置き場の作成

docker起動時に参照するディレクトリを作成

$ sudo mkdir /srv/docker/redmine/redmine
$ cd /srv/docker/redmine/redmine
$ sudo mkdir backups files plugins themes tmp certs
$ sudo chown -R redmine:redmine /srv/docker/

(新規向け)redmine用のデータベースとユーザを作成

sameersbn/redmine 自体は、MySQLでもいけるけど、RedminePostgreSQL推奨なので、PostgreSQLを使います。

cf. Defect #19344: MySQL 5.6: IssueNestedSetConcurrencyTest#test_concurrency : always fails - Redmine
cf. Feature #17460: MySQL 5.7 support - Redmine

$ sudo -u postgres createuser -P redmine
※パスワードは pass0000
$ sudo -u postgres createdb -E UTF-8 -l ja_JP.UTF-8 -O redmine -T template0 redmine_dev

接続確認

$ psql -h 192.168.11.6 -U redmine redmine_dev -W
Password for user redmine: 
psql (10.1)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.

redmine_dev=> \q

SSLの用意

お手軽にオレオレ証明で作成。

$ sudo su - redmine
redmine$ mkdir ~/ssl
redmine$ cd ~/ssl
redmine$ openssl genrsa -out redmine.key 2048
redmine$ openssl req -new -key redmine.key -out redmine.csr
  :
Common Name (e.g. server FQDN or YOUR name) []:redmine.yassan.local
  :
redmine$ openssl x509 -req -days 3650 -in redmine.csr -signkey redmine.key -out redmine.crt
redmine$ openssl dhparam -out dhparam.pem 2048

docker側で利用できるよう作成したファイルを証明書置き場へコピー

redmine$ cd /srv/docker/redmine/redmine/certs
redmine$ cp ~/ssl/redmine.key .
redmine$ cp ~/ssl/redmine.crt .
redmine$ cp ~/ssl/dhparam.pem .
redmine$ chmod 400 redmine.key

redmine on dockerの環境構築

sameersbn/docker-redmine: Docker Image for Redmine に必要なことはすべて書いてあります。

redmineのVer.は、 sameersbn/redminetag にあるものを指定します。 今回は、 3.4.2を使います。

また、リバプロには、 sameersbn/docker-nginxをつかい、1ユーザだけなのに、無駄に、memcachedとして、 sameersbn/docker-memcached を使います。

また、DBユーザとかパスワードなど、あまり公開したくないファイルは、 docker-compose.yml と同じ階層に、 .env を作成してそこに環境変数として書き込んで、yml側で指定します。
cf. Compose ファイル・リファレンス — Docker-docs-ja 17.06.Beta ドキュメント

redmine$ mkdir docker
redmine$ cd docker
redmine$ vim .env
redmine$ vim docker-compose.yml

編集したファイルは以下

SMTP_USER=アカウント@gmail.com
SMTP_PASS=パスワード
DB_HOST=192.168.11.6
DB_PORT=5432
DB_USER=redmine
DB_PASS=pass0000
DB_NAME=redmine_dev
※以下は必要な人だけ
HTTP_PROXY=http://IPアドレス:ポート
HTTPS_PROXY=http://IPアドレス:ポート
NO_PROXY=127.0.0.1,localhost,自分のパブリックIP,通信が必要なローカルホスト(Gitサーバとかあれば)
version: '2'                                                                         
 
services:
  redmine:
    image: 'sameersbn/redmine:3.4.2'
    depends_on:
    - memcached
    environment:
    - TZ=Asia/Tokyo

     ※必要な人は追加
    - HTTP_PROXY=${HTTP_PROXY}
    - HTTPS_PROXY=${HTTPS_PROXY}
    - NO_PROXY=${NO_PROXY}
 
    - DB_ADAPTER=postgresql
    - DB_ENCODING=utf8  
    - DB_HOST=${DB_HOST}
    - DB_PORT=${DB_PORT}
    - DB_USER=${DB_USER}
    - DB_PASS=${DB_PASS}
    - DB_NAME=${DB_NAME}
 
    - REDMINE_PORT=10445
    - REDMINE_HTTPS=true
    - REDMINE_RELATIVE_URL_ROOT=/redmine
    - REDMINE_SECRET_TOKEN=${REDMINE_SECRET_TOKEN}
 
    - REDMINE_SUDO_MODE_ENABLED=false
    - REDMINE_SUDO_MODE_TIMEOUT=15
    
    - REDMINE_CONCURRENT_UPLOADS=2
    
    - REDMINE_BACKUP_SCHEDULE=weekly
    - REDMINE_BACKUP_EXPIRY=
    - REDMINE_BACKUP_TIME=04:00
    
    - SMTP_USER=${SMTP_USER}
    - SMTP_PASS=${SMTP_PASS}

    - MEMCACHE_HOST=memcached
    - MEMCACHE_PORT=11211
    ports:
    - "10083:80"
    - "10445:443"
    volumes:
    - /srv/docker/redmine/redmine:/home/redmine/data
    
  memcached:
    image: 'sameersbn/memcached:latest'
    ports:
    - '11211:11211'
    restart: always    

注意: Gmailアカウントを指定する場合、2段階認証済みのアカウントの場合、なぜかうまく行きません。
https://myaccount.google.com/security から「アプリパスワード」選んで生成したものを使ってみたけど、使い方が悪いのかメールが飛びません。。。知ってる人いたら教えてください。

起動

redmine$ docker-compose up

https://redmine.yassan.local:10445/redmine でブラウザで開くと起動が確認出来ます。 f:id:yassan0627:20171204002501p:plain admin/adminでは入れます。

プラグインのインストール

ローカル内にプラグイン用のディレクトリ作成

$ sudo su - redmine
redmine$ mkdir -p /srv/docker/redmine/redmine/plugins

あとは、そこにいつものようにプラグインを配置するだけ。 例として、みんな大好き Redmine Drafts Plugin を例に挙げて見ましょう。

redmine$ cd /srv/docker/redmine/redmine/plugins
redmine$ git clone https://github.com/jbbarth/redmine_drafts.git
redmine$ git ls-remote --tag
From https://github.com/jbbarth/redmine_drafts.git
ff78367305399c26477a2522d080e2ca39e5bb5b    refs/tags/v0.1.0
338032656bd94d3bca57b9f7715860ebc3ed92f6    refs/tags/v0.1.0^{}
f40a06d2d891e6f165f6bfdffcbcfded7b7d5420    refs/tags/v0.1.1
30aaaf6dd1b30d97f3e9ac2717629ea9b719e78c    refs/tags/v0.2.0   ※最新はこれ
redmine$ git checkout v0.2.0

また、Dockerイメージ作者がいくつか自動で配置するようにしているようです。参考になると思います。
cf. Redmine Plugins Installation

後は、起動して完了。

テーマのインストール

プラグインと同様です。

ローカル内にテーマ用のディレクトリ作成

$ sudo su - redmine
redmine$ mkdir -p /srv/docker/redmine/redmine/themes

後は、作成したディレクトリ以下に、プラグインの時と同様にテーマを配置して、 docker-compose up し直すだけです。

まとめ

以上が、環境構築編でした。 次回は、バックアップや本体、プラグイン、テーマのアップデートや、プラグイン、テーマのアンインストールなど、日常で遭遇しそうな話メインで書いていきます。

明日は、 forenoonM さんです。お楽しみに。


FAQ

昨日動いてた(違う場所で動かした)ら、動かなくなった

パブリックIPが変わってませんか?ご確認を。

redmineの内部が見たい場合

以下のコマンドから名前を検索

redmine$ docker-compose ps
       Name                     Command               State                       Ports                    
-----------------------------------------------------------------------------------------------------------
docker_memcached_1   /sbin/entrypoint.sh /usr/b ...   Up      0.0.0.0:11211->11211/tcp, 11211/udp          
docker_redmine_1     /sbin/entrypoint.sh app:start    Up      0.0.0.0:10445->443/tcp, 0.0.0.0:10083->80/tcp

docker_redmine_1 と分かったので、以下のコマンドで内部に入ります。

redmine$ docker exec -it docker_redmine_1 bash
root@9e96d3bbbbcc:/home/redmine/redmine# ls
CONTRIBUTING.md  Gemfile  Gemfile.lock  README.rdoc  Rakefile  app  appveyor.yml  bin  config  config.ru  db  doc  extra  files  lib  log  plugins  public  script  test  tmp  vendor

あとは、いつも通りです。

初回起動で500エラーの場合

DB作成失敗している可能性があります(私は試行錯誤しながらやってて、DB作成失敗してました)。 redmine内部に入って以下を実行して作成しました(最初と最後のコマンドはおまけ)。

root@9e96d3bbbbcc:/home/redmine/redmine#bundle exec rake generate_secret_token
root@9e96d3bbbbcc:/home/redmine/redmine#RAILS_ENV=production bundle exec rake db:migrate
root@9e96d3bbbbcc:/home/redmine/redmine#RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data

cf. Redmine 3.4をCentOS 7.3にインストールする手順 | Redmine.JP Blog の「Redmineの初期設定と初期データ登録」

やっさん的美味しい酒に出会える酒屋

f:id:yassan0627:20171202141813j:plain

日本酒 Advent Calendar 2017 の4日目の記事です。

カレンダーに余裕があるので、せっかくなので他にも何か書いてみるって事で、 わたしが考える「美味しいお酒に出会える酒屋」について書きたいと思います。

冷蔵庫がちゃんとしている

日本酒と言うかお酒は温度管理大事。

生酒などは特に低温じゃないと販売も出来ません。 なので、扉付きの冷蔵庫など、とにかく、冷やす設備が揃っているところは美味しい酒に出会える可能性が高いです。

また、生酒はあまり日本酒飲まない人にも飲みやすいものが多く、試しに日本酒飲みたいって人は生酒がある冷蔵庫がしっかりしたお店を選ぶと良いです。

試飲出来る

酒屋さんには、お店の人向けに売り込み用のサンプルは販売元からもらえるらしいです。そのサンプルをちょっとだけ試飲出来たりするお店があります。

また、お店によっては、オススメだけ幾つか試飲出来たりします。

そんなお店なら自分にあったお酒が選べますね。

お店の人が実際に飲んで感想が言える

これは完全に経験ですが、一番大事にしてます。

自分の好みを伝えて、オススメを聞いた際に、「私は飲んでないけど、お客さんが良く買っていくのは...」みたいに言ってくるお店は大体ハズレが多いです。

逆に「こないだ飲んだんですが、これは○○~~」と味の感想を言える店員が多い酒屋は美味しいお酒に出会える可能性が高いです。

まとめ

まとめます。

冷蔵庫がちゃんとしてて、そこにお酒が並んでて、店員がお酒の感想がしっかり言える酒屋

そこに行けば、美味しいお酒に出会えます。

では。

DigDagでAPI使って取得したリストでfor_eachを回す

www.digdag.io

DigDag のfor_eachオペレータで配列使う際に四苦八苦したのでメモ。

今日取得して指定の場所に配置してあるファイルを1ファイルずつ加工したかったので、DigDag使ってやってみることにしたものの。。

  • 今日取得したファイルのリストってどう作るのか?
  • 1ファイルずつ処理するにはどうするのか?

さっぱりわからなかったので色々調べてみた。

DigDagには、 Python API が用意されている(Perl API欲しいなぁ。。)ので、今日更新したファイルをリスト化して配列に格納し、 for_eachオペレータ 使って作成した配列で回すことにした。

んで、 digdag init mydag で作ったサンプルワークフローをベースにして作った実際のサンプルコードはこちら。 但し、for_eachのループでechoしてるだけなので異様にループが遅いのはなんでだろ。。。まだ課題がありそうです。

ファイルツリー

mydag.dig
tasks/__init__.py
続きを読む

今年飲んで美味しかった日本酒リスト

日本酒アドベントカレンダー19日目の記事担当の @yassan168 です。

www.adventar.org


今年も美味しいお酒に沢山出会えました。
毎年毎年、色々なお酒が出会えているのだけど、まだまだ美味しい酒があるので、来年も楽しみです。

何でも飲みますが、私の好きなジャンルと言えば、日本酒、芋焼酎泡盛クラフトビールになります。
今回は、その中でも日本酒だけに絞って、今年を振り返ってみます。

今年の1~12月にかけて飲んだお酒(お店の分は写真撮った分だけ)が下図になります。
f:id:yassan0627:20161218154751p:plain

続きを読む

PM Beginners #4.1でタイムマネジメントについてLTしてきた

PM Beginners #4.1 でLTしてきました。

pmbegginers.connpass.com

Blog  : 徒然なるPM Beginners
Linger : http://lingr.com/room/pmbeginners:pmbeginners
Hashtag: #pmbeginners

今回のテーマは「時間、タイムマネジメント」と言うことで、
日頃から悩んでいる、チームマネジメントする時間と開発する時間の使い方について、LTしました。

docs.com

続きを読む

PM Beginners #3 で、チームのコミュニケーショについて話してきた

PM Beginners #3 で話してきた。

pmbegginers.connpass.com

Blog  : 徒然なるPM Beginners
Hashtag: #pmbeginners


PM Beginnersでは、トークやLTの数を少なくする事で、出来るだけみんなと話した内容について対話する形式となっています。
参加人数も少ないし、円卓形式の座席なので、意見を出し合うにはちょうどよい場です。

また、所属する組織も違うので、他所がどうやっているかとか自分の悩みなども話しやすいです。


今回のお題は、チームビルディングって事なので、チームビルディングに欠かせないコミュニケーショについてフォーカスし、その中でも、今、チーム内で行っている1on1について話しました。

続きを読む