SlideShare a Scribd company logo
細かすぎて伝わらないD3 v4の話
Created by Shimizu Masayuki
プロフィール
清水正行FB TW
群馬県高崎市在住
GUNMA GIS GEEK - Blog
2015/11 - 転職
毎日D3.jsを書いています
コンプライアンスにより社名は秘匿。(申請書めんどい)
ご注意
文字とコードを読むプレゼンです。
重要なのは初めの10分くらいです。
質問があれば逐次受けつます。
トイレとかにいってもOKです。
気楽にやりましょう。
では、はじめます。
6月28日、データビジュアライゼーショ
ンライブラリとして有名な「D3.js」がメ
ジャーバージョンアップしました。
Releases
v3
2012年12月22日- 3.0.0
2016年5月5日- 3.5.17
v4
2016年1月5日- 4.0.0 α
2016年6月24日- 4.0.0 rc
2016年6月28日- 4.0.0
2016年10月27日- 4.3.0
メジャーバージョンアップによって、ど
のような変化があったのか。
阿鼻叫喚
結構、大きな変更がありました。
v4になって変わったところ。
モジュール化
D3 v3は一つの巨大なライブラリでしたが、v4では機能ごとのモジ
ュールに変更されました。モジュールはそれ単体でインストール
して利用することができます。
npm install d3‐array
<script src="https://d3js.org/d3‐array.v1.min.js"></script>
webpackやrollup.jsを使って、必要なモジュールだけを選んでカス
タムビルドすることもできるようになりました。
でも、モジュールが別モジュールに依存
している場合がある。
依存関係
名前空間
モジュルー化に伴い名前空間の見直しが行われています。
スケール
d3.scale.linear   ‐>  d3.ScaleLinear
d3.scale.sqrt    ‐>  d3.scaleSqrt
レイアウト
d3.layout.cluster  ‐>  d3.cluster
d3.layout.hierarchy  ‐>  d3.hierarchy
d3.layout.pack   ‐>  d3.pack
つまり?
全滅
全滅
でっでも、ドットが抜けただけでしょ?
まったく別名になったものもあるよ!
スケール
d3.scale.ordinal().rangePoints()  ‐> d3.scalePoint() 
d3.scale.ordinal().rangeBand()    ‐> d3.scaleBand() 
レイアウト
d3.layout.force()   ‐> d3.forceSimulation()
Axis
d3.svg.axis().orient('left')    ‐>  d3.axisLeft()
細かい仕様の変更もある
オブジェクトリテラルを渡してのアップデートはできなくなった
v3 enable
d3.select("cicle")
  .attr({
    "cx": 10,
    "cy": 20,
    "r":10
  })
v4 only
d3.select("cicle")
  .attr("cx", 10)
  .attr("cy", 20)
  .attr("r", 10)
v3 -> v4
細かい変更をあげたらきりがないほどに
変わりました。
今のところv4に対応した参考書は、日本
で出版されたものはもとより、海外でも
ほとんどありません。
じゃあ、どうやって学べばいいのさ!
D3 v4を学ぶには?
チェンジログ読め。
CHANGES.md (長い)
リファレンス読め。
D3 API Reference (膨大)
下記スライドを読め。
D3 V4 - What's new? (103枚)
つらい。
しかし、喜びの声もある。
細かすぎてつたわらない、
ver.4の素晴らしい進化。
d3-selection
より柔軟なセレクター操作が可能に。
セレクター基本操作
//セレクト
var selected = d3.select("circle")
//データバインド
selected.data([1, 10, 100, 100])
//足りない要素を追加
var appented = selected.enter().append("circle")
//多すぎる要素を削除
var deleted = selected.exit().remove()
//アップデート
selected.attr("fill", "red")
appentede.attr("fill", "red")
セレクタの戻り値が変わりました
v3
> var svg = d3.select("svg")
> svg
[Array[1]]
v4
> var svg = d3.select("svg")
> svg
{_groups: Array[1], _parents: Array[1]}
セレクターオブジェクトTIPS
> var g = d3.select("svg").selectAll("g")
> g.data([100, 200, 300]).enter().append("g")
> g
{
  _groups: Array[1],
  _parents: Array[1]
}
> g.data([1000, 2000, 3000, 4000])
> g
{
  _groups: Array[1],
  _parents: Array[1], 
  _enter: Array[1],
  _exit: Array[1]
}
セレクションマージ
セレクタとセレクタをマージして、両方を含む新たなセレクタを
生成できます。
var selected = d3.select("circle")
  .data([1, 100, 1000])
var appented = selected.enter().append("circle")
//マージして一括アップデート
selected.merge(appented)
  .attr("fill", "red")
セレクションフィルター
選択済みのセレクターをフィルタリングしてアップデートを適用
することができます。
var circles = d3.selectAll("circle")
circles.filter(function(d, i) { return i%2 })
  .transition()
  .attr("cx", 0)
疑似クラスでの指定もできます。
circle.filter(":nth‐child(even)").attr("cx", 0)
d3-queue
非同期通信ユーティリティ
非同期通信をまとめて処理
d3.queue()
  .defer(d3.tsv, 'data1.tsv')
  .defer(d3.json, 'japan.geojson')
  .await(function(error, tsv, geojson) {    
    console.log(tsv)
    console.log(geojson)
  })
d3.queue()
  .defer(d3.tsv, 'data1.tsv')
  .defer(d3.json, 'japan.geojson')
  .awaitAll(function(error, results) {
    console.log(results)
  })
d3-array
便利な配列操作
v3 - d3.nest
> var data = [
    {name:"a", value:10}, 
    {name:"b", value:20}, 
    {name:"a", value:30}
]
> var nested = d3.nest()
    .key(function(d){ return d.name })
    .map(data)
    
> nested
{a: Array[2], b: Array[1]}
v4 - d3.nest
戻り値が、d3コレクションオブジェクトになりました。
> var data = [
    {name:"a", value:10}, 
    {name:"b", value:20}, 
    {name:"a", value:30}
]
> var nested = d3.nest()
    .key(function(d){ return d.name })
    .map(data)
> nested
{$a: Array[2], $b: Array[1]} // <‐ d3‐collection Object
d3-collection
便利な構造化データ形式
> var map = d3.map({foo:1})
> map.set("bar", 2)
    .set("hoge", "aaaa")
   
> map.get("hoge")
aaaa
> map.keys()
["foo", "bar", "hoge"]
> map.values()
[1, 2, "aaaa"]
> map.entries()
[
  {"key":"foo","value":1},
  {"key":"bar","value":2},
  {"key":"hoge","value":"aaaa"}
]
d3-stratify
階層データジェネレーター
D3では階層構造のデータを必要とすることが多い
{
  "name": "Eve",
  "children": [
    {
      "name": "Cain"
    },
    {
      "name": "Seth",
      "children": [
        {
          "name": "Enos"
        },
        {
          "name": "Noam"
        }
      ]
    },
    ・・・
}
フラットなオブジェクトを階層構造へ変換する
var data = [
  {"name": "Eve",   "parent": ""},
  {"name": "Cain",  "parent": "Eve"},
  {"name": "Seth",  "parent": "Eve"},
  {"name": "Enos",  "parent": "Seth"}]
var stratifyData = d3.stratify()
  .id(function(d){ return d.name })
  .parentId(function(d){ return d.parent })
  (data)
csv -> 構造化データ
id,value1,value2
日本,
日本.群馬県,
日本.群馬県.高崎市,100,2000
日本.群馬県.前橋市,200,1000
日本.群馬県.桐生市,130,3000
日本.埼玉県,
日本.埼玉県.さいたま市,140,3200
日本.埼玉県.所沢市,210,2400
日本.東京都,
日本.東京都.千代田区,
日本.東京都.千代田区.大手町,220,1000
var stratify = d3.stratify()
  .parentId(function(d) {
    return d.id.substring(0, d.id.lastIndexOf("."))
  })
 
var root = stratify(tsv)
  .sum(function(d) { return d.value1 })
d3-transition
より自在なアニメーションを実現。
イベントリスナー
トランジションの終了時にイベントが発行されるようになりまし
た。
var circle = d3.select("circle")
circle
  .transition()
  .duration(2000)
  .attr("cx", 500)
  .on("start", function(){
    console.log("start!")
  })
  .on("end", function(){
    console.log("end!")
  })
  
トランジションチェイン
AからBへ移動して、さらにCへと移動するなど複雑なアニメーシ
ョンが可能に。
var circle = d3.select("circle")
circle
  .transition()
  .duration(1000)
  .attr("cx", 500) <‐‐x軸を移動
  .transition()
  .duration(1000)
  .attr("cy", 500) <‐‐ y軸を移動
共通オブジェクト
メソッドチェインの数を減らし、複数のオブジェクトを同期して
アニメーションするなどが簡単にできるようになりました。
var t = d3.transition()
  .duration(2000)
    
circle.transition(t)
  .attr("cx", 1000)
    
rect.transition(t)
  .attr("x", 1000)
イベントも共通のリスナーを設定できる。
var t = d3.transition()
  .duration(2000)
  .on("end", function(){  
    alert("トランジション終了")
  })
    
circle.transition(t)
  .attr("cx", 1000)
    
rect.transition(t)
  .attr("x", 1000)
d3-geo
地図表示
Fit Extentd
v3 & v4
var projection = d3.geoMercator()
  .scale(2000)
  .center([139.5, 34])
v4.3.0
var projection = d3.geoMercator()
  .fitExtent([[0, 0], [width, height]], geojson)
幅と高さを指定してgeojsonを渡すと、いい感じに表示するための
プロジェクションを返す。
レスポンシブな地図を描画しやすくなった。
canvas レンタリング
もうSVG専用だなんていわせない。
var line = d3.line()
    .x(function(d) { return x(d.date); })
    .y(function(d) { return y(d.value); })
SVGレンダリング
path.datum(data).attr("d", line)
canvasレンダリング
var context = d3.select("canvas").node().getContext("2d")
line.context(context)(data)
地図もcanvasにレンタリグングできます
var context = d3.select("canvas").node().getContext("2d")
var projection = d3.geoMercator()
    .fitExtent([[0, 0], [chartWidth, chartHeight]], geojson)
var geoPath = d3.geoPath().projection(projection)
  .context(context)
geoPath(geojson) <‐ canvas Draw Maps
d3-force
力学モデルでグラフを描画
v3 Force Layout
おなじみのコード。
var force = d3.layout.force()
  .nodes(nodes)
  .links(links)
  .size([width, height])
  .gravity(0.1)
  .charge(‐30)
  .friction(0.95)
  .linkDistance(220)
  .linkStrength(1)
v4 Force Simulation
全然違う。
var simulation = d3.forceSimulation()
    .force("link", d3.forceLink()
      .id(function(d){ return d.index })
        .distance(220))
    .force("charge", d3.forceManyBody())
    .force("center", d3.forceCenter(width / 2, height / 2))
    .force("y", d3.forceY(0))
    .force("x", d3.forceX(0))
サイズ指定ではなくセンター指定になった
V3
var force = d3.layout.force()
  .size([width, height])
V4
var simulation = d3.forceSimulation()
    .force("center", d3.forceCenter(width / 2, height / 2))
ノードの衝突判定
新たにノード同士の衝突判定を行う機能が追加
var simulation = d3.forceSimulation()
    .force("collide",d3.forceCollide(function(d){ 
      return d.r + 8 //半径に対して8pxのマージンを指定
      }).iterations(16) )
座標に最も近いノードを見つける
var simulation = d3.forceSimulation()
simulation.find(x, y, r)
マウスイベントと連動させる
svg.on("mousemove", function(){
    var findNode = simulation.find(d3.event.x, d3.event.y)
    console.log(findNode)
})     
ところで。
疲れていませんか?
まとめ
v4になったことで、v3で不便であったことや一部
統合性のとれていなかった設計などが修正され、
非常に使いやすいライブラリになっています。座標
計算等のアルゴリズムも最適化され処理速度も向
上しているので、ぜひ使ってみてください。

More Related Content

What's hot

TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
 
gRPC入門
gRPC入門gRPC入門
gRPC入門
Kenjiro Kubota
 
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
T. Suwa
 
MongoDBの監視
MongoDBの監視MongoDBの監視
MongoDBの監視
Tetsutaro Watanabe
 
Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説
貴仁 大和屋
 
Go mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろうGo mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろう
Takuya Ueda
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話
Yuta Shimada
 
Go入門
Go入門Go入門
Go入門
Takuya Ueda
 
Django REST Framework における API 実装プラクティス | PyCon JP 2018
Django REST Framework における API 実装プラクティス | PyCon JP 2018Django REST Framework における API 実装プラクティス | PyCon JP 2018
Django REST Framework における API 実装プラクティス | PyCon JP 2018
Masashi Shibata
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
Shota Shinogi
 
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
Takahiko Ito
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
Akihiko Horiuchi
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
 
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
NTT DATA Technology & Innovation
 
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
Takuya Ueda
 

What's hot (20)

TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 
gRPC入門
gRPC入門gRPC入門
gRPC入門
 
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
 
MongoDBの監視
MongoDBの監視MongoDBの監視
MongoDBの監視
 
Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説
 
Go mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろうGo mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろう
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話
 
Go入門
Go入門Go入門
Go入門
 
Django REST Framework における API 実装プラクティス | PyCon JP 2018
Django REST Framework における API 実装プラクティス | PyCon JP 2018Django REST Framework における API 実装プラクティス | PyCon JP 2018
Django REST Framework における API 実装プラクティス | PyCon JP 2018
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
 
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
 
これがCassandra
これがCassandraこれがCassandra
これがCassandra
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
Java8でRDBMS作ったよ
Java8でRDBMS作ったよJava8でRDBMS作ったよ
Java8でRDBMS作ったよ
 
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
 
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
 

Similar to 細かすぎて伝わらないD3 ver.4の話

インフォグラフィックス時代のD3.js入門
インフォグラフィックス時代のD3.js入門インフォグラフィックス時代のD3.js入門
インフォグラフィックス時代のD3.js入門
貴寛 益子
 
WordPress 3.6 世告げの姫と新機能
WordPress 3.6 世告げの姫と新機能WordPress 3.6 世告げの姫と新機能
WordPress 3.6 世告げの姫と新機能Odyssey Eightbit
 
Azure DevOpsで技術同人誌作成
Azure DevOpsで技術同人誌作成Azure DevOpsで技術同人誌作成
Azure DevOpsで技術同人誌作成
裕之 木下
 
Nseg第32回勉強会
Nseg第32回勉強会Nseg第32回勉強会
Nseg第32回勉強会
ko ty
 
IoT キットハンズオン解説 (Azure ML Studio 編) Part1 共通手順
IoT キットハンズオン解説 (Azure ML Studio 編) Part1 共通手順IoT キットハンズオン解説 (Azure ML Studio 編) Part1 共通手順
IoT キットハンズオン解説 (Azure ML Studio 編) Part1 共通手順
Yoshitaka Seo
 
初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time
初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time
初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time
Yusuke Yamada
 
熊本クラウド語ろう会 - Azure開発入門
熊本クラウド語ろう会 -  Azure開発入門熊本クラウド語ろう会 -  Azure開発入門
熊本クラウド語ろう会 - Azure開発入門
Daiyu Hatakeyama
 
Ignite update databricks_stream_analytics
Ignite update databricks_stream_analyticsIgnite update databricks_stream_analytics
Ignite update databricks_stream_analytics
Ryoma Nagata
 
WordPressの進化とWordPress名古屋コミュニティの進化
WordPressの進化とWordPress名古屋コミュニティの進化WordPressの進化とWordPress名古屋コミュニティの進化
WordPressの進化とWordPress名古屋コミュニティの進化
takashi ono
 
Docker on azure!進化していくcontainerを覗いてみよう!
Docker on azure!進化していくcontainerを覗いてみよう! Docker on azure!進化していくcontainerを覗いてみよう!
Docker on azure!進化していくcontainerを覗いてみよう!
Tsukasa Kato
 
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
Shuji Watanabe
 
WordPress名古屋コミュニティの進化[WordBench Nagoya 2017年3月勉強会]
WordPress名古屋コミュニティの進化[WordBench Nagoya 2017年3月勉強会]WordPress名古屋コミュニティの進化[WordBench Nagoya 2017年3月勉強会]
WordPress名古屋コミュニティの進化[WordBench Nagoya 2017年3月勉強会]
takashi ono
 
Flutter Meetup Tokyo (#18) _ Osaka (#10).pdf
Flutter Meetup Tokyo (#18) _ Osaka (#10).pdfFlutter Meetup Tokyo (#18) _ Osaka (#10).pdf
Flutter Meetup Tokyo (#18) _ Osaka (#10).pdf
TylerShukert
 
Ignite 2021秋 recap - 開発者向け新機能紹介
Ignite 2021秋 recap - 開発者向け新機能紹介Ignite 2021秋 recap - 開発者向け新機能紹介
Ignite 2021秋 recap - 開発者向け新機能紹介
Kazushi Kamegawa
 
Rancherでwindows server上のコンテナを管理できるか
Rancherでwindows server上のコンテナを管理できるかRancherでwindows server上のコンテナを管理できるか
Rancherでwindows server上のコンテナを管理できるか
Takashi Kanai
 
くまあず Nchikita 140628-2
くまあず Nchikita 140628-2くまあず Nchikita 140628-2
くまあず Nchikita 140628-2
wintechq
 
FlutterとSupabaseでRDBを使った サーバーレスアプリ開発
FlutterとSupabaseでRDBを使った サーバーレスアプリ開発FlutterとSupabaseでRDBを使った サーバーレスアプリ開発
FlutterとSupabaseでRDBを使った サーバーレスアプリ開発
TylerShukert
 
昨今のpaas事情
昨今のpaas事情昨今のpaas事情
昨今のpaas事情
裕之 木下
 
180421第8回関西DB勉強会- たまにはpgAdmin4も使ってみよう
180421第8回関西DB勉強会- たまにはpgAdmin4も使ってみよう180421第8回関西DB勉強会- たまにはpgAdmin4も使ってみよう
180421第8回関西DB勉強会- たまにはpgAdmin4も使ってみよう
Michio Kataoka
 
ASP.NET CoreとAzure AD B2Cを使ったサクっと認証
ASP.NET CoreとAzure AD B2Cを使ったサクっと認証ASP.NET CoreとAzure AD B2Cを使ったサクっと認証
ASP.NET CoreとAzure AD B2Cを使ったサクっと認証
Yuta Matsumura
 

Similar to 細かすぎて伝わらないD3 ver.4の話 (20)

インフォグラフィックス時代のD3.js入門
インフォグラフィックス時代のD3.js入門インフォグラフィックス時代のD3.js入門
インフォグラフィックス時代のD3.js入門
 
WordPress 3.6 世告げの姫と新機能
WordPress 3.6 世告げの姫と新機能WordPress 3.6 世告げの姫と新機能
WordPress 3.6 世告げの姫と新機能
 
Azure DevOpsで技術同人誌作成
Azure DevOpsで技術同人誌作成Azure DevOpsで技術同人誌作成
Azure DevOpsで技術同人誌作成
 
Nseg第32回勉強会
Nseg第32回勉強会Nseg第32回勉強会
Nseg第32回勉強会
 
IoT キットハンズオン解説 (Azure ML Studio 編) Part1 共通手順
IoT キットハンズオン解説 (Azure ML Studio 編) Part1 共通手順IoT キットハンズオン解説 (Azure ML Studio 編) Part1 共通手順
IoT キットハンズオン解説 (Azure ML Studio 編) Part1 共通手順
 
初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time
初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time
初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time
 
熊本クラウド語ろう会 - Azure開発入門
熊本クラウド語ろう会 -  Azure開発入門熊本クラウド語ろう会 -  Azure開発入門
熊本クラウド語ろう会 - Azure開発入門
 
Ignite update databricks_stream_analytics
Ignite update databricks_stream_analyticsIgnite update databricks_stream_analytics
Ignite update databricks_stream_analytics
 
WordPressの進化とWordPress名古屋コミュニティの進化
WordPressの進化とWordPress名古屋コミュニティの進化WordPressの進化とWordPress名古屋コミュニティの進化
WordPressの進化とWordPress名古屋コミュニティの進化
 
Docker on azure!進化していくcontainerを覗いてみよう!
Docker on azure!進化していくcontainerを覗いてみよう! Docker on azure!進化していくcontainerを覗いてみよう!
Docker on azure!進化していくcontainerを覗いてみよう!
 
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
 
WordPress名古屋コミュニティの進化[WordBench Nagoya 2017年3月勉強会]
WordPress名古屋コミュニティの進化[WordBench Nagoya 2017年3月勉強会]WordPress名古屋コミュニティの進化[WordBench Nagoya 2017年3月勉強会]
WordPress名古屋コミュニティの進化[WordBench Nagoya 2017年3月勉強会]
 
Flutter Meetup Tokyo (#18) _ Osaka (#10).pdf
Flutter Meetup Tokyo (#18) _ Osaka (#10).pdfFlutter Meetup Tokyo (#18) _ Osaka (#10).pdf
Flutter Meetup Tokyo (#18) _ Osaka (#10).pdf
 
Ignite 2021秋 recap - 開発者向け新機能紹介
Ignite 2021秋 recap - 開発者向け新機能紹介Ignite 2021秋 recap - 開発者向け新機能紹介
Ignite 2021秋 recap - 開発者向け新機能紹介
 
Rancherでwindows server上のコンテナを管理できるか
Rancherでwindows server上のコンテナを管理できるかRancherでwindows server上のコンテナを管理できるか
Rancherでwindows server上のコンテナを管理できるか
 
くまあず Nchikita 140628-2
くまあず Nchikita 140628-2くまあず Nchikita 140628-2
くまあず Nchikita 140628-2
 
FlutterとSupabaseでRDBを使った サーバーレスアプリ開発
FlutterとSupabaseでRDBを使った サーバーレスアプリ開発FlutterとSupabaseでRDBを使った サーバーレスアプリ開発
FlutterとSupabaseでRDBを使った サーバーレスアプリ開発
 
昨今のpaas事情
昨今のpaas事情昨今のpaas事情
昨今のpaas事情
 
180421第8回関西DB勉強会- たまにはpgAdmin4も使ってみよう
180421第8回関西DB勉強会- たまにはpgAdmin4も使ってみよう180421第8回関西DB勉強会- たまにはpgAdmin4も使ってみよう
180421第8回関西DB勉強会- たまにはpgAdmin4も使ってみよう
 
ASP.NET CoreとAzure AD B2Cを使ったサクっと認証
ASP.NET CoreとAzure AD B2Cを使ったサクっと認証ASP.NET CoreとAzure AD B2Cを使ったサクっと認証
ASP.NET CoreとAzure AD B2Cを使ったサクっと認証
 

More from 清水 正行

趣味駆動学習法
趣味駆動学習法趣味駆動学習法
趣味駆動学習法
清水 正行
 
Data Visualization meetup 2017
Data Visualization meetup 2017Data Visualization meetup 2017
Data Visualization meetup 2017
清水 正行
 
メディアにおけるWeb gis活用事例
メディアにおけるWeb gis活用事例メディアにおけるWeb gis活用事例
メディアにおけるWeb gis活用事例
清水 正行
 
データビジュアライゼーションの作り方
データビジュアライゼーションの作り方データビジュアライゼーションの作り方
データビジュアライゼーションの作り方
清水 正行
 
データビジュアライゼーションはなぜ「コストが高い」と言われるのか
データビジュアライゼーションはなぜ「コストが高い」と言われるのかデータビジュアライゼーションはなぜ「コストが高い」と言われるのか
データビジュアライゼーションはなぜ「コストが高い」と言われるのか
清水 正行
 
D3.jsによるDOM操作
D3.jsによるDOM操作D3.jsによるDOM操作
D3.jsによるDOM操作
清水 正行
 

More from 清水 正行 (6)

趣味駆動学習法
趣味駆動学習法趣味駆動学習法
趣味駆動学習法
 
Data Visualization meetup 2017
Data Visualization meetup 2017Data Visualization meetup 2017
Data Visualization meetup 2017
 
メディアにおけるWeb gis活用事例
メディアにおけるWeb gis活用事例メディアにおけるWeb gis活用事例
メディアにおけるWeb gis活用事例
 
データビジュアライゼーションの作り方
データビジュアライゼーションの作り方データビジュアライゼーションの作り方
データビジュアライゼーションの作り方
 
データビジュアライゼーションはなぜ「コストが高い」と言われるのか
データビジュアライゼーションはなぜ「コストが高い」と言われるのかデータビジュアライゼーションはなぜ「コストが高い」と言われるのか
データビジュアライゼーションはなぜ「コストが高い」と言われるのか
 
D3.jsによるDOM操作
D3.jsによるDOM操作D3.jsによるDOM操作
D3.jsによるDOM操作
 

細かすぎて伝わらないD3 ver.4の話