{"id":22302613,"url":"https://github.com/dataoneorg/member-node-info","last_synced_at":"2025-09-07T06:35:41.594Z","repository":{"id":47021232,"uuid":"75082748","full_name":"DataONEorg/member-node-info","owner":"DataONEorg","description":"Materials used to provide information about Member Nodes such as graphics and descriptive documents.","archived":false,"fork":false,"pushed_at":"2025-08-20T17:21:35.000Z","size":17399,"stargazers_count":2,"open_issues_count":0,"forks_count":4,"subscribers_count":30,"default_branch":"master","last_synced_at":"2025-09-07T06:34:52.540Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DataONEorg.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2016-11-29T13:12:11.000Z","updated_at":"2025-08-20T17:21:38.000Z","dependencies_parsed_at":"2025-02-05T18:31:20.730Z","dependency_job_id":"e6911d30-103c-48f7-ad7f-66d9e3f8a998","html_url":"https://github.com/DataONEorg/member-node-info","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/DataONEorg/member-node-info","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DataONEorg%2Fmember-node-info","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DataONEorg%2Fmember-node-info/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DataONEorg%2Fmember-node-info/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DataONEorg%2Fmember-node-info/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DataONEorg","download_url":"https://codeload.github.com/DataONEorg/member-node-info/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DataONEorg%2Fmember-node-info/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274005333,"owners_count":25205934,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-07T02:00:09.463Z","response_time":67,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-03T18:40:01.650Z","updated_at":"2025-09-07T06:35:41.565Z","avatar_url":"https://github.com/DataONEorg.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"This repository contains information about DataONE Member Nodes that can be used for presentations, web sites, and other fora where Member Nodes are being presented such as the [DataONE Search](https://search.dataone.org) pages and the [public web site](https://dataone.org).\n\nThe workflow for changes appearing on the public web site is available in a [Google Doc](https://docs.google.com/document/d/1HNDdNqFANNd_dRQQPnM68vpNawKE5cc6wVc88fOb6h8/edit?usp=sharing).\n\n\n## Files and Folders\n\n```\n.\n└── production          Content for the production environment\n    └── graphics        Folder with Member Node icons / logos\n        ├── originals   Original images. The image names should start with the node Id, \n        |               but may have a suffix to clarify image characteristics.\n        ├── web         Images to be used in Web interfaces. Should be .png, minimum of \n        |               125 wide x 40 high, and with transparent background and cropped.\n        └── working     Images in between original and web. Assume web images are generated \n                        automatically from these.\n```\nImage files are named with the node Id minues the \"urn:node:\" portion. So for example, the member node:\n\n```\n  urn:node:KNB\n```\n\nHas web image file named:\n\n```\n  production/graphics/web/KNB.png\n```\nwhich can be directly linked to from GitHub using the URL:\n\n  https://raw.githubusercontent.com/DataONEorg/member-node-info/master/production/graphics/web/KNB.png\n\n[The wiki](https://github.com/DataONEorg/member-node-info/wiki) has a couple of pages showing the images and their basic info.\n\n\n\n## Tools\n\nA couple of handy tools for image introspection and manipulation:\n\n* [exiftool](http://www.sno.phy.queensu.ca/~phil/exiftool/)\n* [Imagemagick convert](https://www.imagemagick.org/script/index.php)\n\nQuickly determine the dimensions of an image:\n\n```bash\nexiftool -ImageSize FILENAME\n```\n\nGenerate a list of images with dimensions:\n\n```bash\n# cd to the folder with the images\nfor img in $(ls {*.png,*.jpg}); do \\\n  SZ=$(exiftool -s -s -s -ImageSize ${img}); \\\n  printf \"%15s %10s\\n\" ${img} ${SZ}; \\\n  done\n```\n\nCreate a copy of an image, resizing with dimensions no smaller than 125 wide by 40 high and saving as a .png:\n\n```bash\nIMAGE=\"IMAGE_FILE\"; \\\nconvert working/${IMAGE_FILE} -resize 125x40^ \"web/$(basename ${IMAGE_FILE%.*}).png\"\n```\n\nTo create web ready copies of all images in the working folder and place them in the web folder. The resulting images have dimensions of no smaller than 125 pixels wide by 40 pixels high while preserving preserving aspect ratio and saving as .png:\n\n```bash\n# cd to the graphics folder\nfor img in $(ls working/{*.jpg,*.png}); do echo ${img}; \\\n  convert working/${img} -resize 125x40^ \"web/$(basename ${img%.*}).png\"; \\\n  done\n```\n\nTo generate a wiki page that lists images, their file size and pixel dimensions:\n\n```bash\n#cd to the folder containing the images\nURL=\"https://raw.githubusercontent.com/DataONEorg/member-node-info/master/production/graphics/$(basename $(pwd))/\";\\\nIMGS=($(ls {*.png,*.jpg}));\\\necho ' ` ` | ` ` | ` `';\\\necho \"--- | --- | ---\"; \\\nfor I in $(seq 0 3 $(expr ${#IMGS[@]} - 1)); do LNK=$(echo ${IMGS[$I]//.} | tr '[:upper:]' '[:lower:]'); \\\n  printf \"[${IMGS[$I]}](#${LNK}) | \"; \\\n  LNK=$(echo ${IMGS[$I + 1]//.} | tr '[:upper:]' '[:lower:]'); \\\n  printf \"[${IMGS[$I + 1]}](#${LNK}) | \"; \\\n  LNK=$(echo ${IMGS[$I + 2]//.} | tr '[:upper:]' '[:lower:]'); \\\n  printf \"[${IMGS[$I + 2]}](#${LNK})\\n\"; \\\n  done; \\\nfor img in ${IMGS[@]}; do FSZ=$(exiftool -s -s -s -FileSize ${img}); \\\n  ISZ=$(exiftool -s -s -s -ImageSize ${img}); \\\n  printf \"## %s\\n\\n\" ${img}; echo \"File Size: ${FSZ}\"; echo; \\\n  echo \"Image Dimensions: ${ISZ}\"; echo; printf '![](%s%s)\\n\\n---\\n' ${URL} ${img}; \\\n  done\n```\n\nCheck that a web graphic is available for each current Member Node (requires [xmlstarlet](http://xmlstar.sourceforge.net/) installed as `xml`):\n\n```bash\n#cd to the web folder\nNODES=($(curl -s \"https://cn.dataone.org/cn/v2/node\" | \\\n xml sel -t -m \"//node[@type='mn']\" -v \"identifier\" -n)); \\\nfor node in ${NODES[@]}; do N=${node#*:*:}; \\\n  if [ -e \"${N}.png\" ]; then printf \"%20s  OK\\n\" ${node}; \\\n  else printf \"%20s  \\e[1;41mWARNING: ${N}.png not found\\e[0m\\n\" ${node}; fi; \\\n  done\n```\n\n## A Note on Image Sizes\n\nSeveral of the original images that were being served up were rather large, even though they rendered with correct size and placement in the browser because the image size is specified in the containing HTML. This is very inefficient for larger images as each client must download a large image and downscale it for rendering. It is good practice to resize images appropriately before serving.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdataoneorg%2Fmember-node-info","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdataoneorg%2Fmember-node-info","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdataoneorg%2Fmember-node-info/lists"}