不容错过的好工具

一些非常棒的开源工具

  • web相关:
    • UI界面(Dashboard)
    • 网页小图标
    • 页面布局
      • BootStrap
      • Semantic UI
    • 动态交互图(D3)
      • 颜色标尺 color legend
  • 论文相关
    • 小绿鲸SCI阅读器
  • 服务器相关
    • SHH工具
  • 剪视频工具

有些东西就是要借鉴别人的,才能够更快进步!
持续更新中:

web相关:

UI界面(Dashboard)

Dashboard界面获取路径.
不容错过的好工具_第1张图片
在这个当中既有付费的也有免费的,只要配合vscode中的live server插件或者自己启动一个服务器即可将下载下来的代码运行:
不容错过的好工具_第2张图片

网页小图标

小图标获取路径.
不容错过的好工具_第3张图片

页面布局

BootStrap

页面布局获取路径.
不容错过的好工具_第4张图片
保姆级教程,你值得拥有!

Semantic UI

获取链接:https://semantic-ui.com/
不容错过的好工具_第5张图片

动态交互图(D3)

获取路径.
不容错过的好工具_第6张图片

颜色标尺 color legend

获取路径1.
获取路径2.
        使用路径1中的legend函数,可以自动返回一个做好的svg颜色标尺,legend的javascript函数如下,可直接调用:

// Copyright 2021, Observable Inc.
// Released under the ISC license.
// https://observablehq.com/@d3/color-legend
function Legend(color, {
  title,
  tickSize = 6,
  width = 320, 
  height = 44 + tickSize,
  marginTop = 18,
  marginRight = 0,
  marginBottom = 16 + tickSize,
  marginLeft = 0,
  ticks = width / 64,
  tickFormat,
  tickValues
} = {}) {

  function ramp(color, n = 256) {
    const canvas = document.createElement("canvas");
    canvas.width = n;
    canvas.height = 1;
    const context = canvas.getContext("2d");
    for (let i = 0; i < n; ++i) {
      context.fillStyle = color(i / (n - 1));
      context.fillRect(i, 0, 1, 1);
    }
    return canvas;
  }

  const svg = d3.create("svg")
      .attr("width", width)
      .attr("height", height)
      .attr("viewBox", [0, 0, width, height])
      .style("overflow", "visible")
      .style("display", "block");

  let tickAdjust = g => g.selectAll(".tick line").attr("y1", marginTop + marginBottom - height);
  let x;

  // Continuous
  if (color.interpolate) {
    const n = Math.min(color.domain().length, color.range().length);

    x = color.copy().rangeRound(d3.quantize(d3.interpolate(marginLeft, width - marginRight), n));

    svg.append("image")
        .attr("x", marginLeft)
        .attr("y", marginTop)
        .attr("width", width - marginLeft - marginRight)
        .attr("height", height - marginTop - marginBottom)
        .attr("preserveAspectRatio", "none")
        .attr("xlink:href", ramp(color.copy().domain(d3.quantize(d3.interpolate(0, 1), n))).toDataURL());
  }

  // Sequential
  else if (color.interpolator) {
    x = Object.assign(color.copy()
        .interpolator(d3.interpolateRound(marginLeft, width - marginRight)),
        {range() { return [marginLeft, width - marginRight]; }});

    svg.append("image")
        .attr("x", marginLeft)
        .attr("y", marginTop)
        .attr("width", width - marginLeft - marginRight)
        .attr("height", height - marginTop - marginBottom)
        .attr("preserveAspectRatio", "none")
        .attr("xlink:href", ramp(color.interpolator()).toDataURL());

    // scaleSequentialQuantile doesn’t implement ticks or tickFormat.
    if (!x.ticks) {
      if (tickValues === undefined) {
        const n = Math.round(ticks + 1);
        tickValues = d3.range(n).map(i => d3.quantile(color.domain(), i / (n - 1)));
      }
      if (typeof tickFormat !== "function") {
        tickFormat = d3.format(tickFormat === undefined ? ",f" : tickFormat);
      }
    }
  }

  // Threshold
  else if (color.invertExtent) {
    const thresholds
        = color.thresholds ? color.thresholds() // scaleQuantize
        : color.quantiles ? color.quantiles() // scaleQuantile
        : color.domain(); // scaleThreshold

    const thresholdFormat
        = tickFormat === undefined ? d => d
        : typeof tickFormat === "string" ? d3.format(tickFormat)
        : tickFormat;

    x = d3.scaleLinear()
        .domain([-1, color.range().length - 1])
        .rangeRound([marginLeft, width - marginRight]);

    svg.append("g")
      .selectAll("rect")
      .data(color.range())
      .join("rect")
        .attr("x", (d, i) => x(i - 1))
        .attr("y", marginTop)
        .attr("width", (d, i) => x(i) - x(i - 1))
        .attr("height", height - marginTop - marginBottom)
        .attr("fill", d => d);

    tickValues = d3.range(thresholds.length);
    tickFormat = i => thresholdFormat(thresholds[i], i);
  }

  // Ordinal
  else {
    x = d3.scaleBand()
        .domain(color.domain())
        .rangeRound([marginLeft, width - marginRight]);

    svg.append("g")
      .selectAll("rect")
      .data(color.domain())
      .join("rect")
        .attr("x", x)
        .attr("y", marginTop)
        .attr("width", Math.max(0, x.bandwidth() - 1))
        .attr("height", height - marginTop - marginBottom)
        .attr("fill", color);

    tickAdjust = () => {};
  }

  svg.append("g")
      .attr("transform", `translate(0,${height - marginBottom})`)
      .call(d3.axisBottom(x)
        .ticks(ticks, typeof tickFormat === "string" ? tickFormat : undefined)
        .tickFormat(typeof tickFormat === "function" ? tickFormat : undefined)
        .tickSize(tickSize)
        .tickValues(tickValues))
      .call(tickAdjust)
      .call(g => g.select(".domain").remove())
      .call(g => g.append("text")
        .attr("x", marginLeft)
        .attr("y", marginTop + marginBottom - height - 6)
        .attr("fill", "currentColor")
        .attr("text-anchor", "start")
        .attr("font-weight", "bold")
        .attr("class", "title")
        .text(title));

  return svg.node();
}

        具体实现如下截图:
不容错过的好工具_第7张图片
        大致意思就是调用legend函数返回一个svg标签,然后通过document选取一个父容器后,把这个字标签给添加进去即可。效果如下:
在这里插入图片描述
        然后要定制自己的颜色变化范围可以参考 获取路径2.中的名字。
不容错过的好工具_第8张图片

论文相关

小绿鲸SCI阅读器

支持云端存储备份文件,划词翻译,感觉对科研初学者挺有用的。
获取方式如下:填写我的邀请码可以增加200M容量(邀请码:f023RP)
https://www.xljsci.com?regCode=f023RP

效果如下图
不容错过的好工具_第9张图片

服务器相关

SHH工具

finalshell,一个国产的好用的SHH工具 获取路径.支持文件拖拽上传与下载。

MobaXterm好像也不错, 获取路径.
不容错过的好工具_第10张图片

剪视频工具

迅捷视频剪辑软件: xunjieshipin.com/download-video-crop
在这里插入图片描述

你可能感兴趣的:(实用工具,实用工具)