よしたく blog

ほぼ週刊で記事を書いています

社内で読書会 #0 を開催した話

今回はサクッとメモ書き程度の内容です。

社内の人と読書会をしました。 読書会とは、決められた期日までに自分が読むと決めた本を読んで、その感想を周りの人にLTする会です。 LTをして他の人とアウトプットを共有することで、聞いている方も効率よく情報をインプットすることができます。

開催するにあたって気をつけた点

  • お試し期間を設けて開催をする
    • いきなり沢山の人を呼んで失敗するのが嫌だった。
      • 身近なメンバーで実施して雰囲気を掴みました
  • 本を最後まで読んでいなくてもいい
    • 本を最後まで読んでいないとダメとなるのが嫌だった
      • ハードルを高く感じる人もいるのでやめてみました
  • ネガティブ・フィードバックはしない
    • ディスる風土を作りたくなかった -「こんな事も知らないのか」というのは絶対になしとしました
  • 自分が知っているノウハウも共有していく
    • 活気が生まれないのが嫌だった
      • 自分が知っていることをどんどんはなしてもらうようにしました

自分が読んだ本

DB周りの知識が薄いなと思っていたのと、インデックスについて多く語られている本を読みたかったので選びました。目からウロコなTipsが多いのでオススメです。また読んだ内容をまとめて発表したいと思います。

参考になった話

吉祥寺.pm14で聞いてお話の中で大変参考になるものがありました。

読んだ本についてesaでまとめて、毎日LTしあうなんてすごいな… esaにまとめることはブログで代用できそうだし、個人的に真似していきたい。チームにも浸透すると良いな。

CodecademyのLearn ReactJS:PartIを受講してみた

@kakakakakkuさんに教えてもらったCodecademyLearn ReactJS:PartIを受講してみた。業務でjavascriptを使っているけれども、jQueryが主なので非常にいい経験だった。わからなくても用意されている答えを教えてくれるので、自分のコードと答えのコードを見比べてどこが間違ったか理解できるようになっている。何かしら別の言語を触っていれば更に理解するのが早いと思う。

Learn ReactJS: Part IとLearn ReactJS: Part II

コースは大きく分けて2つある。今回はLearn ReactJS: Part Iについて取り組んだことについて書く。 Learn ReactJS: Part Iは3つのパートに分けられる。

  1. JSX
    1. Intro to JSX
    2. Advanced JSX
    3. 【Pro】JSX
  2. React Components
    1. Your First React Component
    2. Components and Advanced JSX
    3. 【Pro】Authorization Form
    4. 【Pro】React Components
  3. Components Interacting
    1. Components Render Other Components
    2. this.props
    3. this.state
    4. 【Pro】Random Color Picker
    5. 【Pro】Components Interacting

【Pro】とついているものは、有料会員限定コンテンツだった。Learn ReactJS: Part Iは有料会員でなくとも、Reactを理解するためには十分な内容だった。全ての内容が英語なので敷居が高いように感じられ、自分も実際躊躇してしまった。しかし比較的簡単な英語で書かれているし、ブラウザのアドオンなどで訳してから内容を進めてもいいと思う。自分はアドオンで訳しながら学んだ。Reactについては初めて学ぶので復習をする際には、英語で挑戦しようと思っている。

Intro to JSX

  • ReactはJavaScriptのライブラリ
  • Facebookのエンジニアが開発した
  • 画面上にJSX式を表示することをレンダリングという
  • ReactDOMはJavaScriptのライブラリ
    • ReactDOM.renderメソッドでJSXをレンダリングする  - renderメソッドには変数を渡すことが出来る
  • const h1 = <h1>Hello world</h1>;
    • この書き方はJSXと呼ばれる、HTMLのように見えるJavaScriptの構文

Advanced JSX

  • JSXではclassではなく、classNameを使う
  • JSXでは単一タグの末尾に必ずスラッシュをいれる
    • <img />
    • <br />
      • ×<br>
  • JSXタグの中にいても、JavaScriptのコードとして動かす場合は中括弧を使う{}
const name = 'Gerdo';
const greeting = <p>Hello, {name}!</p>;

const sideLength = "200px";

const panda = (
  <img 
    src="images/panda.jpg" 
    alt="panda" 
    height={sideLength} 
    width={sideLength} />
);

function myFunc() {
  alert('Make myFunc the pFunc... omg that was horrible i am so sorry');
}

<img onClick={myFunc} />


  • if文はJSX式に挿入できない
  • React.createElementの書き方もできる
const h1 = <h1>Hello world</h1>;
const h1 = React.createElement(
  "h1",
  null,
  "Hello, world"
);

Your First React Component

  • import React from 'react';import ReactDOM from 'react-dom';でインポートする
  • Componentには、renderメソッドがある
  • class名はUpperCamelCaseで書く
  • ReactDOM.renderにComponentのrenderメソッドを渡すことで呼び出すことが出来る
import React from 'react';
import ReactDOM from 'react-dom';

class MyComponentClass extends React.Component {
  render() {
    return <h1>Hello world</h1>;
  }
}

// component goes here:
ReactDOM.render(
    <MyComponentClass />, 
    document.getElementById('app')
);
);

Components and Advanced JSX

  • 複数行にわたるJSX式はカッコ()で囲む必要がある
  • componentの中でthisを使うことが出来る
  • componentの中でイベントリスナーを使うことが出来る

Components Render Other Components

  • conponentを相互作用させることによって、より強力となる
  • import { ClassName } from './filename';で別のコンポネントの取り込むことが出来る
    • をrenderで使う
  • 取り込まれるファイルのクラスや変数などは宣言の前にexportを付ける

this.props

  • propsでconponentからconponentへ情報を渡すことが出来る?
  • 難しい!理解不足!誰か分かりやすいサイト教えてくれないかな…

this.state

  • 自分自身のComponentの状態を管理する?
  • 難しい!理解不足!誰か分かりやすいサイト教えてくれないかな…その2

まとめ

  • CodecademyのLearn ReactJS:PartIを受講してみた
  • 最初は例文も多いが、途中から自分で書く部分も多くなり手を動かしながら学べた
  • 実行してすぐに答え合わせが出来るのもいいし、答えが用意されているのもありがたかった
  • this.propsとthis.stateが訳しながらということもあり、自分の中で理解が出来なかった。わかるように調べて理解し記事を書こうと思う
  • Learn ReactJS:PartIIもあるので続けてやってみる

社内もくもく会でRedashハンズオンをやった話

f:id:yoshitaku_jp:20180601163046j:plain

はじめに

社内でもくもく会を開催してみました。何を取り扱うか1つ決めておこう!となったときに、

  1. BI製品を扱っている会社なのでBI製品が良い
  2. ちゃんと資料が作成されているものがいい

と言う話が上がり、@ariarijpさんと@kakakakakkuさんが作成・講師をしてくださったRedashハンズオンを思い出しました。そして、今回はこれを社内メンバ数人でもくもく作業してみることにしました!自分はRedashハンズオン参加したこともあり、今回の社内もくもく会では講師・サポーターの立ち回りで動きました。

資料に関しては最高のものなので、再度メンバーを増やして開催する際や、別の方がやる際に参考になればとメンバが詰まったところを記載しておきます。

実際の作業で詰まったところ

Windows端末にdockerをインストールすることに手こずる

RedashハンズオンはDockerを使って作業を進めていきます。今回集まってくれた方の中には、Dockerがインストールされていない人もいたので、windows端末にDockerをインストールする作業からはじめました。「Dockerってどんなもの?」という質問も出ましたので、技術書典で購入した「マンガでわかるDocker」を読んでもらったりしてイメージを掴んでもらいました。(「他の仮想環境と技術的にどう違うのか」という質問も出たので、これはいつかまとめてちゃんと説明できるようにしておきます………)

Redashハンズオンの部分ではないのですが、一番詰まった点はwindows端末にDockerをインストールする点でした。Virtualizationが有効になっていなかったりで、BIOSをいじったりしました。キャプチャがないので追記します。 [Docker] Docker For Windowsをセットアップしてみた (Docker初心者向け)

docker-compose upがうまくいかない

docker-compose upした後に、Redashがうまく立ち上がらないことがありました。。(自分はWindows環境ではないのでエラーログのキャプチャがないのですが、後で共有してもらい貼っておきます。)原因はホスト側の端末でポート80を既に使っているために起こったもののようです。普段から開発している端末でハンズオンをおこなったので、まっさらなWindows端末でやっても同じことが起きるのでしょうか…調査が必要かも?またハンズオンを開催する際に同じことが起きるか見ておきます。今回は2/2人の確率で起きてしまったので、Windowsの方は注意が必要だと思います。

解決方法としては、docker-composeファイルのnginxのportsの"80:80"を"8081:80"にして、再度docker-compose upを叩きます。

# This is an example configuration for Docker Compose. Make sure to atleast update
# the cookie secret & postgres database password.
#
# Some other recommendations:
# 1. To persist Postgres data, assign it a volume host location.
# 2. Split the worker service to adhoc workers and scheduled queries workers.
version: '2'
services:
  server:
    image: redash/redash:4.0.1.b4038
    command: server
    depends_on:
      - postgres
      - redis
    ports:
      - "5000:5000"
    environment:
      PYTHONUNBUFFERED: 0
      REDASH_LOG_LEVEL: "INFO"
      REDASH_REDIS_URL: "redis://redis:6379/0"
      REDASH_DATABASE_URL: "postgresql://postgres@postgres/postgres"
      REDASH_COOKIE_SECRET: veryverysecret
      REDASH_WEB_WORKERS: 4
  worker:
    image: redash/redash:4.0.1.b4038
    command: scheduler
    environment:
      PYTHONUNBUFFERED: 0
      REDASH_LOG_LEVEL: "INFO"
      REDASH_REDIS_URL: "redis://redis:6379/0"
      REDASH_DATABASE_URL: "postgresql://postgres@postgres/postgres"
      QUEUES: "queries,scheduled_queries,celery"
      WORKERS_COUNT: 2
      REDASH_HOST: "http://localhost"
  redis:
    image: redis:3.0-alpine
  postgres:
    image: postgres:9.5.6-alpine
    # volumes:
    #   - /opt/postgres-data:/var/lib/postgresql/data
  nginx:
    image: redash/nginx:latest
    ports:
      #- "80:80"                            ←ここを変えます
      - "8081:80"                          #←これに変えます
    depends_on:
      - server
    links:
      - server:redash
  mysql:
    image: kakakakakku/mysql-57-world-database
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
      TZ: Japan

うまく起動することができたら資料に記載にあるhttp://localhostではなく、http://localhost:8081をブラウザでアクセスすると、Redashのログイン画面に行くことができました。

データソース設定が反映されない

RedashからMysqlのデータソースに接続できるように、設定をおこないます。しかし、画像のように右下にSuccessを緑で何回も表示されても、データソースにMysqlが表示されない事象がありました。

画像はhttps://github.com/kakakakakku/redash-hands-on/blob/master/images/data_source.pngより

原因はIEで動かしていたことでした。Chromeで再度Redashにアクセスしたところ大量に保存されたMysqlデータソースが発見されました(笑)。業務アプリケーションをIEで動かすことが多く、今回もRedashをIEで動かしていたようです。 Redashの公式サイトを確認したところ「We recommend using Chrome or Firefox.」という記載があったので、同様の事象があったときはどのブラウザを使っているか確認する必要、もしくは推奨どおりに「Chrome or Firefox」を使うことを最初にアナウンスしておくのがいいかと思います。

参考:https://redash.io/help/faq/general/

Browsers Redash Works Best
On We recommend using Chrome or Firefox. If you encounter any issues that are browser specific, please let us know.

まとめ

今回は社内もくもく会でRedashのハンズオンをおこないました。 個人的に良かった点は3つほどあります。 1. 講師・サポーターの動きが学べた 2. 自分の知識整理になった 3. 社内でのコミュニケーションが生まれた

もくもく会なので、もくもく別の作業する人もいましたし、提案したRedashのハンズオンに参加していただけたりもして良かったです。 自分としては、社内なので圧倒的ホーム感の中でしたが、講師・サポーターの動きが学べて良かったです!!もっと他の人の学びやサポートに貢献していきたいと思いました。

質問をされたことによって、自分の知識の整理にもなった点も非常に良かったです!!

もくもく会が終わった後に飲み会をしましたが、その場でも活発にコミュニケーションが生まれて良かったです。とあるアプリケーションを使うときにリレーショナルデータベースとNoSQLどちらを使うべきかとか、自分が学んだ知識をすぐ活かせることができた点も印象に残っています。

yoshitaku-jp.hatenablog.com

以上です!

NoSQL キーバリュー型のまとめ

はじめに

NoSQLの基礎知識について読んでいます。

yoshitaku-jp.hatenablog.com

NOSQLの基礎知識 (ビッグデータを活かすデータベース技術)

NOSQLの基礎知識 (ビッグデータを活かすデータベース技術)

今回はキーバリュー型についてまとめておきます。

キーバリュー型

キーバリュー型はデータモデルがシンプルです。キーとバリューしかないです。このセットをデータとして書き込み、保存しておきます。データを呼び出すときはキーを指定して、バリューを取り出します。キーには文字列かバイト配列、バリューにはバイナリデータを持ちます。

NoSQLはデータが大きくなったときの対策としてはスケールアウトが適しています。サーバのスペックを良くするスケールアップではなく、サーバの数を増やしてく方法です。リレーショナルデータベースよりも簡単にスケールアウトができる点が、キーバリュー型の利点です。リレーショナルデータベースはデータの関係性を厳密に扱うので、他のテーブルとの整合性をとるために排他制御をおこなったり、テーブル定義を変更する際の待受処理を別に追加するケースもあります。複数のサーバがネットワーク越しに、それぞれのデータの関係性を維持することはまったくもって簡単ではないことです。

それに対して、キーバリュー型はキーを指定するだけでバリューがわかるので、データの関係性を維持する必要がないです。関係性を維持する必要が無いということはサーバがどれだけ増えても、複数のサーバにデータを分割することが出来ます。

キーバリュー型でデータを分割するときに簡単な方法は、「シャーディング」です。キー1をサーバAに、キー2をサーバBに分割して格納することです。 - メリット - 簡単なこと - デメリット
- サーバがダウンしたらキーとバリューを両方失うことになる

デメリットに対する対策は、キーとバリューを複数のサーバに複製することがある。しかし、複数のキーとバリューがあると、すべてのバリューが更新されているかどうかがわからないので、サーバAにあるキー1とサーバBにあるキー1で違うバリューを持つ可能性がある。 このデメリットを解消するソリューションがないNoSQLだから単独のサーバで運用しているものや、一方でBigtableDynamoといった大規模分散型のNoSQLはデメリットを解消するような実装を持っている。

まとめ

  • キーバリュー型について学んだ
  • データモデルがキーとバリューで構成されていてシンプル
  • データが大きくなったらスケールアウトをしよう
  • データを分割するときに簡単なのはシャーディング
    • メリットは簡単なこと
    • デメリットはサーバがダウンするとキーとバリューの両方を失うことになる

NoSQLの基礎知識を読んだ

はじめに

社内の有志で何か製品を作ってみよう!ということで動いています。そこでNoSQLの話になって、「自分NoSQL触ったこと無いんだよなぁ」と思ったので、その部分の担当に立候補しました。データベースと言ったらリレーショナルデータベースの方しか思い浮かばないレベルですので、入門的な本をカカカカックさんに紹介していただき「NoSQLの基礎知識」を読んでいます。NoSQLの製品名を少し知っているだけの自分だからこそ書けるものかと思うのでまとめメモとして残していきます。

NOSQLの基礎知識 (ビッグデータを活かすデータベース技術)

NOSQLの基礎知識 (ビッグデータを活かすデータベース技術)

なぜNoSQLが求められるか

ビッグデータの時代にリレーショナルデータベースが対応できなくなってきた背景があるようです。ビッグデータを扱う際に求められることは、3つのVと呼ばれています。「Volume(膨大な量)」「Velocity(速さ)」「Variety(多種多様)」です。

Volume(膨大な量)

膨大な量というのは、一つ一つのサイズが大きいものではなく、小さなデータの集まりのことです。ツイッターで個人が呟いたりするのは微々たるものでも、世界中の人が呟いたらすごい数になります。このような小さなデータが膨大に集まり、大きなデータとなることをビッグデータと呼び、そのビッグデータを扱うことをNoSQLには求められています。

Velocity(速さ)

ビッグデータに対応するためには、素早く処理する必要があります。 想像できないほどですが、

Twitterには日次12テラバイトものデータが発生し、仮に、ハードディスクの書き込み速度が毎秒約80メガバイトのマシンを1台だけ使うとしたら、全てのデータを格納するだけでも約42時間(12TB÷80MB)かかることになる」 と書かれています。1台のマシンで処理できることも限られていますので、同時並行して処理する環境が求められたり、高速に処理するソフトウェア技術が求められます。

Variety(多種多様)

ビッグデータは形が決まりきっているデータの集まりとは限りません。データ同士の構造が複雑化しています。それらを均一に揃えて利用していく構造化は困難となっています。そのため、この複雑な構造を持ったデータをそのまま格納し利用していくことがNoSQLには求められています。

まとめると、

ビッグデータへの対応は、「膨大かつ多種多様で激しく変化するデータの塊を、制限なしに保存しつつ、迅速に処理すること」
と書かれています。

NoSQLの種類は100種類以上ある

  • Oracle
  • MySQL
  • PostgreSQL
  • Microsoft SQL Server
  • MariaDB
  • Amazon Aurora この一覧は、AWSAmazon RDSに載っているものです。非常に一般的な6種類です。それに比べてNoSQLは100種類以上存在しているようです。なぜこんなに多くのNoSQLが存在しているかというと、NoSQLが「Not Only SQL」という、SQLを使うリレーショナルデータベースに限らない技術を使っているものの総称だからです。NoSQLがSQLを使わないものをまとめた言葉だから、結果的に多くなってしまっているんですね。ということでNoSQLは細かく見ていけば、利用シーンを限定的にしたものの集まりです。豊富な機能を備えたリレーショナルデータベースとは違います。そんなNoSQLも大きく分類すると4種類に分類できます。

NoSQLは4つに分類することができる

NoSQLも大きく4つに分類することが出来ます。「キーバリュー型」「カラム思考型」「ドキュメント指向型」「グラフ型」です。 - キーバリュー型 - カラム思考型 - ドキュメント指向型 - グラフ型

細かく見ていきます。

キーバリュー型

  • キーとバリューを対にしたデータモデル
  • リレーショナルデータベースよりも処理の負荷が小さい
    • 結果的に処理の遅延が発生しにくいので、複数サーバへの分散配置やスケールアウトが簡単にできる 知っていた製品名は「Amazon Dynamo」「Redis」です 文章中に紹介されていた製品名は「Dynamo」「Voldemort」「Riak」「Hibari」「Redis」「Scalaris」「Tokyo Cabibet/Tyrant」です

yoshitaku-jp.hatenablog.com

カラム思考型

  • ひとつの行キーと複数のカラムが対になり、カラムの追加を動的にすることができる。 知っていた製品名は「cassandra」「cloudata」です 文章中に紹介されていた製品名は「Bigtable」「Cassandra」「HBase」「Hypertable」です

ドキュメント指向型

  • プログラミング言語で記述された形でデータを管理
  • ドキュメントの内容をクエリ化することもできる 知っていた製品名は「MongoDB」です 文章中に紹介されていた製品名は「CouchDB」「MongoDB」です

グラフ型

  • データとデータのつながりを管理する。
    • その関係性をグラフ化することができる 知っていた製品名は…ありませんでした。 文章中に紹介されていた製品名は「InfiniteGraph」「Neo4j」です。

まとめ

今回はNoSQLの基礎知識の1,2章を読み内容をまとめてみました。 次回からは、キーバリュー型・カラム思考型・ドキュメント指向型・グラフ型を深く掘り下げていきます。

RPAだけじゃない?! / RPA勉強&LT会!RPALT vol2に参加してきた

f:id:yoshitaku_jp:20180601160615p:plain

はじめに

1回目に引き続き、RPA勉強&LT会!RPALT vol2@ウイングアーク1stに行ってきました。

前回のレポートはこちら

yoshitaku-jp.hatenablog.com

connpassコミュニティの人数も500人近くに増えていてびっくりしました。参加者も233人で、前回から100人近く増えています。ほぼ開始時刻の19時30分に到着したのですが、席が空いていないぐらい満員で注目度の高さが伺えます。今回は大変残念ながらプレゼン資料が見えにくい位置だったので、サラッと振り返ります!

チャラ電さんのお話

素敵なステッカーありがとうございます。

10分間 RPA概論~導入開発編~ / 一戸さん

  • 自動化するためにプログラミングがいらないと言われることが多いが結局はプログラミングなところが多い。
    • 言語は何が使われているか気になったので調べてみる。
  • 即時性が高かったり、リカバリが出来ない業務(クリティカルな業務)は原則としてRPA化は向いていない。
  • 人がやっていることを置き換えているだけなので、人がやっていること以上のことは出来ない!!
  • 内製の理想はユーザですべてやることだけど、コンサルやベンダが入ることはまだ避けられない!
  • RPA開発のスキルはシステムだけではなく、ユーザの業務がすべて見れるようなスキルが求められている。
  • 例外設計や、運用などが今後の課題

感想

懇親会で参加者から聞いたのですが、プログラミング言語VB.NETが使われているようですね。RPA!自動化!とは言われていますが、やはりプログラミングとなかなか切り離せない世界のよう。ガリガリ書けなくても、読めるぐらいの知識は必要そうです。「即時性が高かったり、リカバリが出来ない業務(クリティカルな業務)は原則としてRPA化は向いていない。」「人がやっていることを置き換えているだけなので、人がやっていること以上のことは出来ない!!」この2つは大きい部分な気がします。この部分を忘れて開発をし始めるとどうなることやら…

<デモ>ロボ部長メール(部下編) / 青野さん

  • RPAチームの心の声
    • スクレイピングしてバッチ処理で回したほうが早いのでは?
    • windowsactiveXのバージョンが違うことによってエラーが吐かれた
    • 意外と止まる。
      • 金額のところに、カンマが入ってる入ってないでエラーになった
      • 文字数オーバー
      • VPN切れる
    • 結局ユーザ業務に詳しくないと開発が辛い
  • 部長メールのデモ!

感想

RPAに引きづられると、スクレイピングしてバッチ処理で回したほうが早いのでは?のような目的と手段を見誤るようなケースがあるので、RPAに適している業務なのかの検討はすごく重要だと思いました。RPA開発をする際は、ユーザ業務の理解がシステム開発をする以上に大切ですね。この話は一戸さんのときにも語られていました。例外処理の考え方はが実際に動かしてみないとわからないことも多そうですね。ネットワークが切れた際の処理や、はたまた遅かったりすることを考え始めただけで、パターンが多くなります。

LT

OCRサービス「Tegaki」を利用した手書きデータ入力の自動化の話し / 亀井 美佳@セゾン情報システムズ さん

UiPathの構築ポイント 〜具体的な例を用いて開発のポイント教えます〜 / 牟田 佳奈子@株式会社Arinosさん

クラウドRPA提供企業の実演動画+リリースして8ヶ月の気付き / 嶋田 光敏@BizteX さん

<資料なし>

headless chromeでRPA(?) / connpassイベント管理者の苦悩を改善するための自動化話 / のびすけ@dotstudio,inc.

+AIでRPAによる業務の自動化範囲を拡大 / 高木 章光@ブレインズコンサルティングさん

TwilioでRPAしちゃうぞ! / 高橋 克己@Twilio/KDDIウェブコミュニケーションズさん

RPA、およびIoTの連携による物理的ネットワークセキュリティの考察 / 井手 拓人@RPA Community さん

感想

どれも面白いLTでした!やはりRPAということで、実際に動いているデモを見せてもらうことが多かったです。あとはOCRを使った物が多かったですね。RPAとOCRは相性が良いのでしょうか?どのようなモノ・コトをRPA開発しているのかアンケートも見てみたいですね。自分も自社内でOCRのプロダクトを作っていて、RPAとの連携を模索しているので大変興味を持って聞けました。亀井さんのお話の中にあった「Tegaki」はぜひ使ってみようと思います。 RPAを考えていく際にエラーは必ず発生するものと考えると仕切りに言っているのが気になりました。自分も前回の勉強会が終わった後に、勤務表への登録をSeleniumPythonを使って自動化してみたので、これからはうまく動かずにエラーが起こった際どうしていくかを考えながら実装してみようと思います。 自分の中でのRPAのイメージは画面上での操作を記憶させて実行するものだと思っていましたが、簡単なプログラムを書くことも多いそうです。それこそSeleniumPythonを使って実現するような感じでしょうか。ユーザさんにとってまだまだハードルが高く感じられるところに、開発者としては関われることが多く残っているのかなと感じました。

懇親会では実際に案件で携わっている方をお話する機会がありましたが、実際に動いているものをお客さんに見せて感動して貰えるとすごく嬉しいと言っているのが印象的でした。多くの価値を生み出せる方がやっている無駄な作業をRPAすることによって、更に価値を生み出していけることに貢献できることが良かったみたいです。他には、RPAとしてお話を聞きに行っても、青野さんの「スクレイピングしてバッチ処理で回したほうが早いのでは?」ようにRPAじゃないほうがいいことも多いみたいです。やはりお客さんの業務理解・キャッチアップが速くないといけないんでしょうね。

RPAトレーニング講座が始まる

実践的なRPA Trainingが始まるようです。RPAトレーニング講座「UiPath入門編」は全4回の1回目みたいです。少人数で多くのことが学べそうなので、実案件で困っている人はいいかもしれませんね!

集合写真と登壇者の方

ありがとうございましたー!

macからラズベリーパイのデスクトップ画面を操作するためにVNCを入れた

はじめに

yoshitaku_jpです。

macからラズベリーパイのデスクトップ環境にアクセスしたくて、vncを設定しました。 ラズベリーパイのデフォルトで入っているRealVNCを使う場合は、mac側にソフトウェアを入れないといけないようで、tightvncserverを使うことにしました。

tightvncserverのインストール

sudo apt-get install tightvncserver

実行

ラズベリーパイにsshなどでログインし、vncserverコマンドを実行します。 初回はパスワードを聞かれるので設定し、メモをしておきます。

pi@raspberrypi:~ $ tightvncserver

New 'X' desktop is raspberrypi:5

Starting applications specified in /etc/X11/Xvnc-session
Log file is /home/pi/.vnc/raspberrypi:5.log

のようになっていれば成功です。

mac側に戻って、 Finder-移動-サーバに接続をクリックします。 vnc://xxx.xxx.xxx.xxx:590y xxxの部分はラズベリーパイのIPアドレスを yの部分はNew 'X' desktop is raspberrypi:5の5の部分の数字を入れて接続をします。(大抵は1番です。今回は何回もやり直したので5番になっています。)

完了

デスクトップ画面が開けていれば成功です。


補足-自動起動の設定

vncserverをsshでログインし、起動し、デスクトップ環境へ…というのがめんどくさい人には自動起動設定しておくことをオススメします。

cd /etc/init.d
sudo nano vncboot
#! /bin/sh
# /etc/init.d/vncboot

### BEGIN INIT INFO
# Provides: vncboot
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start VNC Server at boot time
# Description: Start VNC Server at boot time.
### END INIT INFO

USER=root
HOME=/root

export USER HOME

case "$1" in
 start)
   /usr/bin/vncserver :1 -geometry 1280x800 -depth 24
   echo "Starting VNC Server."
   ;;

 stop)
   /usr/bin/vncserver -kill :1
   echo "VNC Server Has been stoped."
   ;;

 *)
   echo "Usage: /etc/init.d/vncboot {start|stop}"
   exit 1
   ;;
esac

exit 0
sudo chown root.root vncboot
sudo chmod +x vncboot
sudo update-rc.d vncboot defaults
sudo reboot

で、VNCが起動しないと…

様々な記事を参考にしましたが、スクリプト内の/usr/bin/vncserver/usr/bin/tightvncserverに変えたら自動的にVNCが動くようになりました。 自分がいろんなソフト入れてるから邪魔しちゃってるのか、vncが変わったのか… もう一回ラズベリーパイのOSを入れ直すタイミングが合ったら検証してみます。

#! /bin/sh
# /etc/init.d/vncboot

### BEGIN INIT INFO
# Provides: vncboot
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start VNC Server at boot time
# Description: Start VNC Server at boot time.
### END INIT INFO

USER=root
HOME=/root

export USER HOME

case "$1" in
 start)
   /usr/bin/tightvncserver :1 -geometry 1280x800 -depth 24
   echo "Starting VNC Server."
   ;;

 stop)
   /usr/bin/tightvncserver -kill :1
   echo "VNC Server Has been stoped."
   ;;

 *)
   echo "Usage: /etc/init.d/vncboot {start|stop}"
   exit 1
   ;;
esac

exit 0

ラズベリーパイのカメラ設定

はじめに

yoshitaku_jpです。

ラズベリーパイのカメラを使うことになったので、その設定をメモしておきます。 設定画面の操作は簡単なのですが、カメラの向きとかね…間違えるからね…

こちらの記事は、第5回 秋葉原IoTツアーズの製作日誌も兼ねています。 まとめはこちら→第5回 秋葉原IoTツアーズ製作日誌

カメラを買う

なんでもいいですが、Amazonでやすいのがあったのでコレを使っています。公式が一番安定するかもしれませんが、少し高いので… [amazonjs asin="B00FGKYHXA" locale="JP" title="サインスマート Raspberry Pi 用 カメラモジュール Camera Module for ラズベリーパイ"]

設定画面でカメラを有効にする

sudo raspi-config

で設定画面を開きます。

あとはキャプチャどおりにすすめていけば…

カメラ機能が有効になります。

ラズベリーパイにカメラをつける

ラズベリーパイにカメラを取り付けましょう!

白い部分を引き上げると、カメラの先を取り付けられるようになります。

青い部分の向きに注意しましょう。

全体図です。

テスト撮影

raspistill -o test.jpg

で/home/piに取った写真をtest.jpg作成します

余計な部分はトリミングしてますが、ミルコ・デムーロ騎手サイン入りのエイシンフラッシュが撮れました。もっときれいに撮れるのですが、ピントをあわせるのが難しいので今回はコレで。エイシンフラッシュは悪くありません。

まとめ

  • ラズベリーパイでカメラを使えるようにしました。
  • カメラはコレを使っています [amazonjs asin="B00FGKYHXA" locale="JP" title="サインスマート Raspberry Pi 用 カメラモジュール Camera Module for ラズベリーパイ"]

#oss_gate のもくもく会で、Apache supersetのデモ環境を触ってみた

はじめに

yoshitaku_jpです。

OSS Gate東京もくもく会2018-04-24 にて触った、Apache supersetについて書きます。Apache supersetは、Airbnb社が開発していたBI(ビジネスインテリジェンス)ツールです。2017年5月2日にAPACHE INCUBATORになりました。他にOSSのBIツールと言えば、redashが有名でしょうか?他にOSSのBIツールはないかなと探していた中でたまたま見つけたApache supersetもくもく会で触ってみたメモです。

デモ環境を構築する

さっそくデモ環境を構築してみます。公式サイトのインストールの手順は下記です。 https://superset.incubator.apache.org/installation.html しかし、公式的にはDockerがないようで、有志の方々がDockerファイルを作っていただけているようです。今回はこちらを利用させてもらいます。 https://github.com/amancevice/superset

まずはクローンをします。

git clone https://github.com/amancevice/superset.git

フォルダ構成は下です。2018/5/1現在。

.
├── Dockerfile
├── LICENSE
├── README.md
├── docker-compose.yml
├── examples
│   ├── README.md
│   ├── celery
│   │   ├── docker-compose.yml
│   │   └── superset
│   │       └── superset_config.py
│   ├── demo.sh
│   ├── mysql
│   │   ├── docker-compose.yml
│   │   └── superset_config.py
│   ├── postgres
│   │   ├── docker-compose.yml
│   │   └── superset_config.py
│   └── sqlite
│       ├── docker-compose.yml
│       └── superset_config.py
└── superset
    ├── superset-demo
    └── superset-init

7 directories, 16 files

今回はデモ環境を使わせてもらうので、superset/exampleまで移動し、demo.shを使います

cd superset/examples/

bash demo.shと打つと、

bash demo.sh
Usage: bash demo.sh mysql|postgres|sqlite|celer

Usage: bash demo.sh mysql|postgres|sqlite|celeryと使いたいデータベースを選べと怒られますので、

bash demo.sh postgres

と打ちましょう。

mysqlなら下です。

bash demo.sh mysql

そうすると、demo.shに記述してあるdocker-composeが動き始めますので、カップラーメンを作るかコーヒーでも飲んで少し待ちます。この間に環境の構築とデモのデータを用意してくれます。途中で管理者ユーザの作成や、一番最後にPress RETURN to bring down demoの罠が仕込んであるので、EnterKeyの連打はしないようにしましょう。

自分はやりました。 流れている処理を全文載せておきます。長いです。

bash demo.sh postgres
Starting redis & postgres services...
WARNING: The MAPBOX_API_KEY variable is not set. Defaulting to a blank string.
Creating network "postgres_default" with the default driver
Creating volume "postgres_postgres" with default driver
Creating volume "postgres_redis" with default driver
Pulling postgres (postgres:)...
latest: Pulling from library/postgres
f2aa67a397c4: Already exists
8218dd41bf94: Pull complete
e9b7fa2e6bd8: Pull complete
7288a45ee17f: Pull complete
0d0f8a67376c: Pull complete
670a6cc35896: Pull complete
813e44621756: Pull complete
220a4cd75207: Pull complete
2f20067ce75a: Pull complete
4adafe999f39: Pull complete
a4e661925544: Pull complete
db5c3dc2b534: Pull complete
9f501bef0c46: Pull complete
Digest: sha256:1c2cc88d0573332ff1584f72f0cf066b1db764166786d85f5541b3fc1e362aee
Status: Downloaded newer image for postgres:latest
Creating postgres_postgres_1 ... done
Creating postgres_redis_1    ... done
Sleeping for 30s
Starting Superset...
WARNING: The MAPBOX_API_KEY variable is not set. Defaulting to a blank string.
postgres_redis_1 is up-to-date
postgres_postgres_1 is up-to-date
Creating postgres_superset_1 ... done
Sleeping for 30s
WARNING: The MAPBOX_API_KEY variable is not set. Defaulting to a blank string.
Username [admin]: admin
User first name [admin]: admin
User last name [user]: user
Email [admin@fab.org]: 
Password: 
Repeat for confirmation: 
Loaded your LOCAL configuration at [/etc/superset/superset_config.py]
/usr/local/lib/python3.5/dist-packages/flask_cache/jinja2ext.py:33: ExtDeprecationWarning: Importing flask.ext.cache is deprecated, use flask_cache instead.
  from flask.ext.cache import make_template_fragment_key
Recognized Database Authentications.
Admin User admin created.
Loaded your LOCAL configuration at [/etc/superset/superset_config.py]
INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade  -> 4e6a06bad7a8, Init
INFO  [alembic.runtime.migration] Running upgrade 4e6a06bad7a8 -> 5a7bad26f2a7, empty message
INFO  [alembic.runtime.migration] Running upgrade 5a7bad26f2a7 -> 1e2841a4128, empty message
INFO  [alembic.runtime.migration] Running upgrade 1e2841a4128 -> 2929af7925ed, TZ offsets in data sources
INFO  [alembic.runtime.migration] Running upgrade 2929af7925ed -> 289ce07647b, Add encrypted password field
INFO  [alembic.runtime.migration] Running upgrade 289ce07647b -> 1a48a5411020, adding slug to dash
INFO  [alembic.runtime.migration] Running upgrade 1a48a5411020 -> 315b3f4da9b0, adding log model
INFO  [alembic.runtime.migration] Running upgrade 315b3f4da9b0 -> 55179c7f25c7, sqla_descr
INFO  [alembic.runtime.migration] Running upgrade 55179c7f25c7 -> 12d55656cbca, is_featured
INFO  [alembic.runtime.migration] Running upgrade 12d55656cbca -> 2591d77e9831, user_id
INFO  [alembic.runtime.migration] Running upgrade 2591d77e9831 -> 8e80a26a31db, empty message
INFO  [alembic.runtime.migration] Running upgrade 8e80a26a31db -> 7dbf98566af7, empty message
INFO  [alembic.runtime.migration] Running upgrade 7dbf98566af7 -> 43df8de3a5f4, empty message
INFO  [alembic.runtime.migration] Running upgrade 43df8de3a5f4 -> d827694c7555, css templates
INFO  [alembic.runtime.migration] Running upgrade d827694c7555 -> 430039611635, log more
INFO  [alembic.runtime.migration] Running upgrade 430039611635 -> 18e88e1cc004, making audit nullable
INFO  [alembic.runtime.migration] Running upgrade 18e88e1cc004 -> 836c0bf75904, cache_timeouts
INFO  [alembic.runtime.migration] Running upgrade 18e88e1cc004 -> a2d606a761d9, adding favstar model
INFO  [alembic.runtime.migration] Running upgrade a2d606a761d9, 836c0bf75904 -> d2424a248d63, empty message
INFO  [alembic.runtime.migration] Running upgrade d2424a248d63 -> 763d4b211ec9, fixing audit fk
INFO  [alembic.runtime.migration] Running upgrade d2424a248d63 -> 1d2ddd543133, log dt
INFO  [alembic.runtime.migration] Running upgrade 1d2ddd543133, 763d4b211ec9 -> fee7b758c130, empty message
INFO  [alembic.runtime.migration] Running upgrade fee7b758c130 -> 867bf4f117f9, Adding extra field to Database model
INFO  [alembic.runtime.migration] Running upgrade 867bf4f117f9 -> bb51420eaf83, add schema to table model
INFO  [alembic.runtime.migration] Running upgrade bb51420eaf83 -> b4456560d4f3, change_table_unique_constraint
INFO  [alembic.runtime.migration] Running upgrade b4456560d4f3 -> 4fa88fe24e94, owners_many_to_many
INFO  [alembic.runtime.migration] Running upgrade 4fa88fe24e94 -> c3a8f8611885, Materializing permission
INFO  [alembic.runtime.migration] Running upgrade c3a8f8611885 -> f0fbf6129e13, Adding verbose_name to tablecolumn
INFO  [alembic.runtime.migration] Running upgrade f0fbf6129e13 -> 956a063c52b3, adjusting key length
INFO  [alembic.runtime.migration] Running upgrade 956a063c52b3 -> 1226819ee0e3, Fix wrong constraint on table columns
WARNI [root] Could not find or drop constraint on `columns`
INFO  [alembic.runtime.migration] Running upgrade 1226819ee0e3 -> d8bc074f7aad, Add new field 'is_restricted' to SqlMetric and DruidMetric
INFO  [alembic.runtime.migration] Running upgrade d8bc074f7aad -> 27ae655e4247, Make creator owners
INFO  [alembic.runtime.migration] Running upgrade 27ae655e4247 -> 960c69cb1f5b, add dttm_format related fields in table_columns
INFO  [alembic.runtime.migration] Running upgrade 960c69cb1f5b -> f162a1dea4c4, d3format_by_metric
INFO  [alembic.runtime.migration] Running upgrade f162a1dea4c4 -> ad82a75afd82, Update models to support storing the queries.
INFO  [alembic.runtime.migration] Running upgrade ad82a75afd82 -> 3c3ffe173e4f, add_sql_string_to_table
INFO  [alembic.runtime.migration] Running upgrade 3c3ffe173e4f -> 41f6a59a61f2, database options for sql lab
INFO  [alembic.runtime.migration] Running upgrade 41f6a59a61f2 -> 4500485bde7d, allow_run_sync_async
INFO  [alembic.runtime.migration] Running upgrade 4500485bde7d -> 65903709c321, allow_dml
INFO  [alembic.runtime.migration] Running upgrade 41f6a59a61f2 -> 33d996bcc382
INFO  [alembic.runtime.migration] Running upgrade 33d996bcc382, 65903709c321 -> b347b202819b, empty message
INFO  [alembic.runtime.migration] Running upgrade b347b202819b -> 5e4a03ef0bf0, Add access_request table to manage requests to access datastores.
INFO  [alembic.runtime.migration] Running upgrade 5e4a03ef0bf0 -> eca4694defa7, sqllab_setting_defaults
INFO  [alembic.runtime.migration] Running upgrade eca4694defa7 -> ab3d66c4246e, add_cache_timeout_to_druid_cluster
INFO  [alembic.runtime.migration] Running upgrade eca4694defa7 -> 3b626e2a6783, Sync DB with the models.py.
WARNI [root] slices
WARNI [root] tables
INFO  [alembic.runtime.migration] Running upgrade 3b626e2a6783, ab3d66c4246e -> ef8843b41dac, empty message
INFO  [alembic.runtime.migration] Running upgrade ef8843b41dac -> b46fa1b0b39e, Add json_metadata to the tables table.
INFO  [alembic.runtime.migration] Running upgrade b46fa1b0b39e -> 7e3ddad2a00b, results_key to query
INFO  [alembic.runtime.migration] Running upgrade 7e3ddad2a00b -> ad4d656d92bc, Add avg() to default metrics
INFO  [alembic.runtime.migration] Running upgrade ad4d656d92bc -> c611f2b591b8, dim_spec
INFO  [alembic.runtime.migration] Running upgrade c611f2b591b8 -> e46f2d27a08e, materialize perms
INFO  [alembic.runtime.migration] Running upgrade e46f2d27a08e -> f1f2d4af5b90, Enable Filter Select
INFO  [alembic.runtime.migration] Running upgrade e46f2d27a08e -> 525c854f0005, log_this_plus
INFO  [alembic.runtime.migration] Running upgrade 525c854f0005, f1f2d4af5b90 -> 6414e83d82b7, empty message
INFO  [alembic.runtime.migration] Running upgrade 6414e83d82b7 -> 1296d28ec131, Adds params to the datasource (druid) table
INFO  [alembic.runtime.migration] Running upgrade 1296d28ec131 -> f18570e03440, Add index on the result key to the query table.
INFO  [alembic.runtime.migration] Running upgrade f18570e03440 -> bcf3126872fc, Add keyvalue table
INFO  [alembic.runtime.migration] Running upgrade f18570e03440 -> db0c65b146bd, update_slice_model_json
INFO  [alembic.runtime.migration] Running upgrade db0c65b146bd -> a99f2f7c195a, rewriting url from shortner with new format
INFO  [alembic.runtime.migration] Running upgrade a99f2f7c195a, bcf3126872fc -> d6db5a5cdb5d, empty message
INFO  [alembic.runtime.migration] Running upgrade d6db5a5cdb5d -> b318dfe5fb6c, adding verbose_name to druid column
INFO  [alembic.runtime.migration] Running upgrade d6db5a5cdb5d -> 732f1c06bcbf, add fetch values predicate
INFO  [alembic.runtime.migration] Running upgrade 732f1c06bcbf, b318dfe5fb6c -> ea033256294a, empty message
INFO  [alembic.runtime.migration] Running upgrade b318dfe5fb6c -> db527d8c4c78, Add verbose name to DruidCluster and Database
INFO  [alembic.runtime.migration] Running upgrade db527d8c4c78, ea033256294a -> 979c03af3341, empty message
INFO  [alembic.runtime.migration] Running upgrade 979c03af3341 -> a6c18f869a4e, query.start_running_time
INFO  [alembic.runtime.migration] Running upgrade a6c18f869a4e -> 2fcdcb35e487, saved_queries
INFO  [alembic.runtime.migration] Running upgrade 2fcdcb35e487 -> a65458420354, add_result_backend_time_logging
INFO  [alembic.runtime.migration] Running upgrade a65458420354 -> ca69c70ec99b, tracking_url
INFO  [alembic.runtime.migration] Running upgrade ca69c70ec99b -> a9c47e2c1547, add impersonate_user to dbs
INFO  [alembic.runtime.migration] Running upgrade ca69c70ec99b -> ddd6ebdd853b, annotations
INFO  [alembic.runtime.migration] Running upgrade a9c47e2c1547, ddd6ebdd853b -> d39b1e37131d, empty message
INFO  [alembic.runtime.migration] Running upgrade ca69c70ec99b -> 19a814813610, Adding metric warning_text
INFO  [alembic.runtime.migration] Running upgrade 19a814813610, a9c47e2c1547 -> 472d2f73dfd4, empty message
INFO  [alembic.runtime.migration] Running upgrade 472d2f73dfd4, d39b1e37131d -> f959a6652acd, empty message
INFO  [alembic.runtime.migration] Running upgrade f959a6652acd -> 4736ec66ce19, empty message
INFO  [alembic.runtime.migration] Running upgrade 4736ec66ce19 -> 67a6ac9b727b, update_spatial_params
INFO  [alembic.runtime.migration] Running upgrade 67a6ac9b727b -> 21e88bc06c02
INFO  [alembic.runtime.migration] Running upgrade 21e88bc06c02 -> e866bd2d4976, smaller_grid
Revision ID: e866bd2d4976
Revises: 21e88bc06c02
Create Date: 2018-02-13 08:07:40.766277
INFO  [alembic.runtime.migration] Running upgrade e866bd2d4976 -> e68c4473c581, allow_multi_schema_metadata_fetch
Loaded your LOCAL configuration at [/etc/superset/superset_config.py]
2018-05-02 01:28:23,498:INFO:root:Syncing role definition
2018-05-02 01:28:23,498:INFO:root:Creating database reference
2018-05-02 01:28:23,981:INFO:root:Syncing Admin perms
2018-05-02 01:28:24,367:INFO:root:Syncing Alpha perms
2018-05-02 01:28:25,977:INFO:root:Syncing Gamma perms
2018-05-02 01:28:27,078:INFO:root:Syncing granter perms
2018-05-02 01:28:27,877:INFO:root:Syncing sql_lab perms
2018-05-02 01:28:28,776:INFO:root:Fetching a set of all perms to lookup which ones are missing
2018-05-02 01:28:28,971:INFO:root:Creating missing datasource permissions.
2018-05-02 01:28:28,983:INFO:root:Creating missing database permissions.
2018-05-02 01:28:29,020:INFO:root:Creating missing metrics permissions
2018-05-02 01:28:29,033:INFO:root:Cleaning faulty perms
Loaded your LOCAL configuration at [/etc/superset/superset_config.py]
Loading examples into <SQLA engine='postgresql+psycopg2://superset:superset@postgres:5432/superset'>
Creating default CSS templates
Loading energy related dataset
Creating table [wb_health_population] reference
2018-05-02 01:28:33,996:INFO:root:Creating database reference
2018-05-02 01:28:34,143:INFO:root:Database.get_sqla_engine(). Masked URL: postgresql+psycopg2://superset:XXXXXXXXXX@postgres:5432/superset
Loading [World Bank's Health Nutrition and Population Stats]
Creating table [wb_health_population] reference
2018-05-02 01:30:33,601:INFO:root:Creating database reference
Creating slices
Creating a World's Health Bank dashboard
Loading [Birth names]
Done loading table!
--------------------------------------------------------------------------------
Creating table [birth_names] reference
2018-05-02 01:31:01,594:INFO:root:Creating database reference
Creating some slices
Creating a dashboard
Loading [Random time series data]
Done loading table!
--------------------------------------------------------------------------------
Creating table [random_time_series] reference
2018-05-02 01:31:15,878:INFO:root:Creating database reference
Creating a slice
Loading [Random long/lat data]
Done loading table!
--------------------------------------------------------------------------------
Creating table reference
2018-05-02 01:33:26,121:INFO:root:Creating database reference
Creating a slice
Loading [Country Map data]
Done loading table!
--------------------------------------------------------------------------------
Creating table reference
2018-05-02 01:33:26,392:INFO:root:Creating database reference
Creating a slice
Loading [Multiformat time series]
Done loading table!
--------------------------------------------------------------------------------
Creating table [multiformat_time_series] reference
2018-05-02 01:33:26,940:INFO:root:Creating database reference
Creating some slices
Loading [Misc Charts] dashboard
Creating the dashboard
Loading [Paris GeoJson]
Creating table paris_iris_mapping reference
2018-05-02 01:33:31,672:INFO:root:Creating database reference
2018-05-02 01:33:31,732:INFO:root:Database.get_sqla_engine(). Masked URL: postgresql+psycopg2://superset:XXXXXXXXXX@postgres:5432/superset
Loading [San Francisco population polygons]
Creating table sf_population_polygons reference
2018-05-02 01:33:31,883:INFO:root:Creating database reference
Loading [Flights data]
2018-05-02 01:34:08,502:INFO:root:Creating database reference
Done loading table!
Loading [BART lines]
Creating table bart_lines reference
2018-05-02 01:34:08,796:INFO:root:Creating database reference
Loading DECK.gl demo
Loading deck.gl dashboard
Creating Scatterplot slice
Creating Screen Grid slice
Creating Hex slice
Creating Grid slice
Creating Polygon slice
Creating Arc slice
Creating Path slice
Creating a dashboard
Navigate to http://localhost:8088 to view demo
Press RETURN to bring down demo

最後から2行目にNavigate to http://localhost:8088 to view demoとあるように、http://localhost:8088をブラウザで叩けば、デモ画面にたどり着けます。

デモ画面

ログイン画面 設定した管理者ユーザ名とパスワードを入力しましょう。

デモなのでデータが壊れているところもありますが、表示できるところはすごくきれいに表示されています

まとめ

  • OSS Gateの活動でsupersetを触ってみました。
  • 次回は自分のデータを流して表示してみたりしたいです。
  • グラフィカルかつ、画像では伝わりませんが動きもダイナミックでした
  • いろいろ調べていたら、metabaseを見つけたので次回はこれも触ってみます。

4月を振り返って

4月の活動を振り返ってみます。

1月はこちら yoshitaku-jp.hatenablog.com

2月はこっち yoshitaku-jp.hatenablog.com

3月はこっち yoshitaku-jp.hatenablog.com

週1回ブログを更新する

わかばちゃんと学ぶGoogleアナリティクスを読んだ yoshitaku-jp.hatenablog.com

FEARLESS CHANGEを読んだ

yoshitaku-jp.hatenablog.com

Google Cloud Vision API

yoshitaku-jp.hatenablog.com

のウェブ検出機能を使ったら自分の想定と違った話

技術書典 に行ってきました

yoshitaku-jp.hatenablog.com

ラズパイへOpenCVをソースからビルドしたらハマった話

yoshitaku-jp.hatenablog.com

【解決】OpenCVはpip3からインストールできます

yoshitaku-jp.hatenablog.com

300ユーザ達成

週1冊本を読む

読書会にお誘いいただいたので、5月からは週1冊頑張っていきたい!

まとめ

  • 4月を振り返りました。
  • 5月はもっと成長するぞ