Coder Social home page Coder Social logo

app-info-java-graalvm's People

Contributors

transfusion avatar

Watchers

 avatar  avatar

app-info-java-graalvm's Issues

IPA#icons_ is extremely slow on darwin-aarch64

public List<IPAIconHash> icons_(boolean uncrush) {
Context ctx = getContext();
Value lambda = ctx.eval("ruby", "-> recv, arg { recv.icons(uncrush: arg) }");
Value res = lambda.execute(getValue(), uncrush);
return iterableToList(res, IPAIconHash.class);
}

[{:name=>"AppIcon-329x29.png",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/AppIcon-329x29.png",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/AppIcon-329x29.png",
  :dimensions=>[29, 29]},
 {:name=>"[email protected]",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/[email protected]",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/[email protected]",
  :dimensions=>[58, 58]},
 {:name=>"AppIcon-329x29@2x~ipad.png",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/AppIcon-329x29@2x~ipad.png",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/AppIcon-329x29@2x~ipad.png",
  :dimensions=>[58, 58]},
 {:name=>"[email protected]",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/[email protected]",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/[email protected]",
  :dimensions=>[87, 87]},
 {:name=>"AppIcon-329x29~ipad.png",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/AppIcon-329x29~ipad.png",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/AppIcon-329x29~ipad.png",
  :dimensions=>[29, 29]},
 {:name=>"[email protected]",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/[email protected]",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/[email protected]",
  :dimensions=>[80, 80]},
 {:name=>"AppIcon-340x40@2x~ipad.png",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/AppIcon-340x40@2x~ipad.png",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/AppIcon-340x40@2x~ipad.png",
  :dimensions=>[80, 80]},
 {:name=>"[email protected]",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/[email protected]",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/[email protected]",
  :dimensions=>[120, 120]},
 {:name=>"AppIcon-340x40~ipad.png",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/AppIcon-340x40~ipad.png",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/AppIcon-340x40~ipad.png",
  :dimensions=>[40, 40]},
 {:name=>"AppIcon-357x57.png",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/AppIcon-357x57.png",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/AppIcon-357x57.png",
  :dimensions=>[57, 57]},
 {:name=>"[email protected]",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/[email protected]",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/[email protected]",
  :dimensions=>[114, 114]},
 {:name=>"[email protected]",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/[email protected]",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/[email protected]",
  :dimensions=>[120, 120]},
 {:name=>"[email protected]",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/[email protected]",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/[email protected]",
  :dimensions=>[180, 180]},
 {:name=>"AppIcon-329x29.png",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/AppIcon-329x29.png",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/AppIcon-329x29.png",
  :dimensions=>[29, 29]},
 {:name=>"[email protected]",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/[email protected]",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/[email protected]",
  :dimensions=>[58, 58]},
 {:name=>"AppIcon-329x29@2x~ipad.png",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/AppIcon-329x29@2x~ipad.png",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/AppIcon-329x29@2x~ipad.png",
  :dimensions=>[58, 58]},
 {:name=>"[email protected]",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/[email protected]",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/[email protected]",
  :dimensions=>[87, 87]},
 {:name=>"AppIcon-329x29~ipad.png",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/AppIcon-329x29~ipad.png",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/AppIcon-329x29~ipad.png",
  :dimensions=>[29, 29]},
 {:name=>"[email protected]",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/[email protected]",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/[email protected]",
  :dimensions=>[80, 80]},
 {:name=>"AppIcon-340x40@2x~ipad.png",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/AppIcon-340x40@2x~ipad.png",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/AppIcon-340x40@2x~ipad.png",
  :dimensions=>[80, 80]},
 {:name=>"[email protected]",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/[email protected]",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/[email protected]",
  :dimensions=>[120, 120]},
 {:name=>"AppIcon-340x40~ipad.png",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/AppIcon-340x40~ipad.png",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/AppIcon-340x40~ipad.png",
  :dimensions=>[40, 40]},
 {:name=>"AppIcon-357x57.png",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/AppIcon-357x57.png",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/AppIcon-357x57.png",
  :dimensions=>[57, 57]},
 {:name=>"[email protected]",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/[email protected]",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/[email protected]",
  :dimensions=>[114, 114]},
 {:name=>"[email protected]",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/[email protected]",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/[email protected]",
  :dimensions=>[120, 120]},
 {:name=>"[email protected]",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/[email protected]",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/[email protected]",
  :dimensions=>[180, 180]},
 {:name=>"AppIcon-350x50@2x~ipad.png",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/AppIcon-350x50@2x~ipad.png",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/AppIcon-350x50@2x~ipad.png",
  :dimensions=>[100, 100]},
 {:name=>"AppIcon-350x50~ipad.png",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/AppIcon-350x50~ipad.png",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/AppIcon-350x50~ipad.png",
  :dimensions=>[50, 50]},
 {:name=>"AppIcon-372x72@2x~ipad.png",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/AppIcon-372x72@2x~ipad.png",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/AppIcon-372x72@2x~ipad.png",
  :dimensions=>[144, 144]},
 {:name=>"AppIcon-372x72~ipad.png",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/AppIcon-372x72~ipad.png",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/AppIcon-372x72~ipad.png",
  :dimensions=>[72, 72]},
 {:name=>"AppIcon-376x76@2x~ipad.png",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/AppIcon-376x76@2x~ipad.png",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/AppIcon-376x76@2x~ipad.png",
  :dimensions=>[152, 152]},
 {:name=>"AppIcon-376x76~ipad.png",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/AppIcon-376x76~ipad.png",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/AppIcon-376x76~ipad.png",
  :dimensions=>[76, 76]},
 {:name=>"AppIcon-383.5x83.5@2x~ipad.png",
  :file=>"/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/AppIcon-383.5x83.5@2x~ipad.png",
  :uncrushed_file=>
   "/var/folders/k2/51wmpy8s39j8d5pkh3xm0mph0000gn/T/d20230326-80240-dxmpz1/AppInfo-ios-26b580fd488196a60ba2c84124cbc439/Payload/pho.to_pro-iPad.app/uncrushed/AppIcon-383.5x83.5@2x~ipad.png",
  :dimensions=>[167, 167]}]

17.05s wall clock on an i3-8100 vs 1m32.07s on an M1

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.