首页 文章 精选 留言 我的

精选列表

搜索[开启],共10000篇文章
优秀的个人博客,低调大师

通过 Docker 化一个博客网站来开启我们的 Docker 之旅

这篇文章包含 Docker 的基本概念,以及如何通过创建一个定制的 Dockerfile 来Docker 化Dockerize一个应用。 Docker 是一个过去两年来从某个 idea 中孕育而生的有趣技术,公司组织们用它在世界上每个角落来部署应用。在今天的文章中,我将讲述如何通过“Docker 化Dockerize”一个现有的应用,来开始我们的 Docker 之旅。这里提到的应用指的就是这个博客! 什么是 Docker? 当我们开始学习 Docker 基本概念时,让我们先去搞清楚什么是 Docker 以及它为什么这么流行。Docker 是一个操作系统容器管理工具,它通过将应用打包在操作系统容器中,来方便我们管理和部署应用。 容器 vs. 虚拟机 容器和虚拟机并不完全相似,它是另外一种提供操作系统虚拟化的方式。它和标准的虚拟机还是有所不同。 标准的虚拟机一般会包括一个完整的操作系统、操作系统软件包、最后还有一至两个应用。这都得益于为虚拟机提供硬件虚拟化的管理程序。这样一来,一个单一的服务器就可以将许多独立的操作系统作为虚拟客户机运行了。 容器和虚拟机很相似,它们都支持在单一的服务器上运行多个操作环境,只是,在容器中,这些环境并不是一个个完整的操作系统。容器一般只包含必要的操作系统软件包和一些应用。它们通常不会包含一个完整的操作系统或者硬件的虚拟化。这也意味着容器比传统的虚拟机开销更少。 容器和虚拟机常被误认为是两种对立的技术。虚拟机采用一个物理服务器来提供全功能的操作环境,该环境会和其余虚拟机一起共享这些物理资源。容器一般用来隔离一个单一主机上运行的应用进程,以保证隔离后的进程之间不能相互影响。事实上,容器和BSD Jails以及chroot进程的相似度,超过了和完整虚拟机的相似度。 Docker 在容器之上提供了什么 Docker 本身不是一个容器运行环境,事实上,只是一个与具体实现无关的容器技术,Docker 正在努力支持Solaris Zones和BSD Jails。Docker 提供了一种管理、打包和部署容器的方式。虽然一定程度上,虚拟机多多少少拥有这些类似的功能,但虚拟机并没有完整拥有绝大多数的容器功能,即使拥有,这些功能用起来都并没有 Docker 来的方便或那么完整。 现在,我们应该知道 Docker 是什么了,然后,我们将从安装 Docker,并部署一个公开的预构建好的容器开始,学习 Docker 是如何工作的。 从安装开始 默认情况下,Docker 并不会自动被安装在您的计算机中,所以,第一步就是安装 Docker 软件包;我们的教学机器系统是 Ubuntu 14.0.4,所以,我们将使用 Apt 软件包管理器,来执行安装操作。 # apt-get install docker.io Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: aufs-tools cgroup-lite git git-man liberror-perl Suggested packages: btrfs-tools debootstrap lxc rinse git-daemon-run git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-arch git-bzr git-cvs git-mediawiki git-svn The following NEW packages will be installed: aufs-tools cgroup-lite docker.io git git-man liberror-perl 0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded. Need to get 7,553 kB of archives. After this operation, 46.6 MB of additional disk space will be used. Do you want to continue? [Y/n] y 为了检查当前是否有容器运行,我们可以执行docker命令,加上ps选项 # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES docker命令中的ps功能类似于 Linux 的ps命令。它将显示可找到的 Docker 容器及其状态。由于我们并没有启动任何 Docker 容器,所以命令没有显示任何正在运行的容器。 部署一个预构建好的 nginx Docker 容器 我比较喜欢的 Docker 特性之一就是 Docker 部署预先构建好的容器的方式,就像yum和apt-get部署包一样。为了更好地解释,我们来部署一个运行着 nginx web 服务器的预构建容器。我们可以继续使用docker命令,这次选择run选项。 # docker run -d nginx Unable to find image 'nginx' locally Pulling repository nginx 5c82215b03d1: Download complete e2a4fb18da48: Download complete 58016a5acc80: Download complete 657abfa43d82: Download complete dcb2fe003d16: Download complete c79a417d7c6f: Download complete abb90243122c: Download complete d6137c9e2964: Download complete 85e566ddc7ef: Download complete 69f100eb42b5: Download complete cd720b803060: Download complete 7cc81e9a118a: Download complete docker命令的run选项,用来通知 Docker 去寻找一个指定的 Docker 镜像,然后启动运行着该镜像的容器。默认情况下,Docker 容器运行在前台,这意味着当你运行docker run命令的时候,你的 shell 会被绑定到容器的控制台以及运行在容器中的进程。为了能在后台运行该 Docker 容器,我们使用了-d(detach)标志。 再次运行docker ps命令,可以看到 nginx 容器正在运行。 # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f6d31ab01fc9 nginx:latest nginx -g 'daemon off 4 seconds ago Up 3 seconds 443/tcp, 80/tcp desperate_lalande 从上面的输出信息中,我们可以看到正在运行的名为desperate_lalande的容器,它是由nginx:latest image(LCTT 译注: nginx 最新版本的镜像)构建而来得。 Docker 镜像 镜像是 Docker 的核心特征之一,类似于虚拟机镜像。和虚拟机镜像一样,Docker 镜像是一个被保存并打包的容器。当然,Docker 不只是创建镜像,它还可以通过 Docker 仓库发布这些镜像,Docker 仓库和软件包仓库的概念差不多,它让 Docker 能够模仿yum部署软件包的方式来部署镜像。为了更好地理解这是怎么工作的,我们来回顾docker run执行后的输出。 # docker run -d nginx Unable to find image 'nginx' locally 我们可以看到第一条信息是,Docker 不能在本地找到名叫 nginx 的镜像。这是因为当我们执行docker run命令时,告诉 Docker 运行一个基于 nginx 镜像的容器。既然 Docker 要启动一个基于特定镜像的容器,那么 Docker 首先需要找到那个指定镜像。在检查远程仓库之前,Docker 首先检查本地是否存在指定名称的本地镜像。 因为系统是崭新的,不存在 nginx 镜像,Docker 将选择从 Docker 仓库下载之。 Pulling repository nginx 5c82215b03d1: Download complete e2a4fb18da48: Download complete 58016a5acc80: Download complete 657abfa43d82: Download complete dcb2fe003d16: Download complete c79a417d7c6f: Download complete abb90243122c: Download complete d6137c9e2964: Download complete 85e566ddc7ef: Download complete 69f100eb42b5: Download complete cd720b803060: Download complete 7cc81e9a118a: Download complete 这就是第二部分输出信息显示给我们的内容。默认情况下,Docker 会使用Docker Hub仓库,该仓库由 Docker 公司维护。 和 Github 一样,在 Docker Hub 创建公共仓库是免费的,私人仓库就需要缴纳费用了。当然,部署你自己的 Docker 仓库也是可以的,事实上只需要简单地运行docker run registry命令就行了。但在这篇文章中,我们的重点将不是讲解如何部署一个定制的注册服务。 关闭并移除容器 在我们继续构建定制容器之前,我们先清理一下 Docker 环境,我们将关闭先前的容器,并移除它。 我们利用docker命令和run选项运行一个容器,所以,为了停止同一个容器,我们简单地在执行docker命令时,使用kill选项,并指定容器名。 # docker kill desperate_lalande desperate_lalande 当我们再次执行docker ps,就不再有容器运行了 # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 但是,此时,我们这是停止了容器;虽然它不再运行,但仍然存在。默认情况下,docker ps只会显示正在运行的容器,如果我们附加-a(all) 标识,它会显示所有运行和未运行的容器。 # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f6d31ab01fc9 5c82215b03d1 nginx -g 'daemon off 4 weeks ago Exited (-1) About a minute ago desperate_lalande 为了能完整地移除容器,我们在用docker命令时,附加rm选项。 # docker rm desperate_lalande desperate_lalande 虽然容器被移除了;但是我们仍拥有可用的nginx镜像(LCTT 译注:镜像缓存)。如果我们重新运行docker run -d nginx,Docker 就无需再次拉取 nginx 镜像即可启动容器。这是因为我们本地系统中已经保存了一个副本。 为了列出系统中所有的本地镜像,我们运行docker命令,附加images选项。 # docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE nginx latest 9fab4090484a 5 days ago 132.8 MB 构建我们自己的镜像 截至目前,我们已经使用了一些基础的 Docker 命令来启动、停止和移除一个预构建好的普通镜像。为了“Docker 化(Dockerize)”这篇博客,我们需要构建我们自己的镜像,也就是创建一个Dockerfile。 在大多数虚拟机环境中,如果你想创建一个机器镜像,首先,你需要建立一个新的虚拟机、安装操作系统、安装应用,最后将其转换为一个模板或者镜像。但在 Docker 中,所有这些步骤都可以通过 Dockerfile 实现全自动。Dockerfile 是向 Docker 提供构建指令去构建定制镜像的方式。在这一章节,我们将编写能用来部署这个博客的定制 Dockerfile。 理解应用 我们开始构建 Dockerfile 之前,第一步要搞明白,我们需要哪些东西来部署这个博客。 这个博客本质上是由一个静态站点生成器生成的静态 HTML 页面,这个生成器是我编写的,名为hamerkop。这个生成器很简单,它所做的就是生成该博客站点。所有的代码和源文件都被我放在了一个公共的Github 仓库。为了部署这篇博客,我们要先从 Github 仓库把这些内容拉取下来,然后安装Python和一些Python模块,最后执行hamerkop应用。我们还需要安装nginx,来运行生成后的内容。 截止目前,这些还是一个简单的 Dockerfile,但它却给我们展示了相当多的Dockerfile 语法)。我们需要克隆 Github 仓库,然后使用你最喜欢的编辑器编写 Dockerfile,我选择vi。 # git clone https://github.com/madflojo/blog.git Cloning into 'blog'... remote: Counting objects: 622, done. remote: Total 622 (delta 0), reused 0 (delta 0), pack-reused 622 Receiving objects: 100% (622/622), 14.80 MiB | 1.06 MiB/s, done. Resolving deltas: 100% (242/242), done. Checking connectivity... done. # cd blog/ # vi Dockerfile FROM - 继承一个 Docker 镜像 第一条 Dockerfile 指令是FROM指令。这将指定一个现存的镜像作为我们的基础镜像。这也从根本上给我们提供了继承其他 Docker 镜像的途径。在本例中,我们还是从刚刚我们使用的nginx开始,如果我们想从头开始,我们可以通过指定ubuntu:latest来使用UbuntuDocker 镜像。 ## Dockerfile that generates an instance of http://bencane.com FROM nginx:latest MAINTAINER Benjamin Cane <ben@bencane.com> 除了FROM指令,我还使用了MAINTAINER,它用来显示 Dockerfile 的作者。 Docker 支持使用#作为注释,我将经常使用该语法,来解释 Dockerfile 的部分内容。 运行一次测试构建 因为我们继承了nginxDocker镜像,我们现在的 Dockerfile 也就包括了用来构建nginx镜像的Dockerfile中所有指令。这意味着,此时我们可以从该 Dockerfile 中构建出一个 Docker 镜像,然后以该镜像运行一个容器。虽然,最终的镜像和nginx镜像本质上是一样的,但是我们这次是通过构建 Dockerfile 的形式,然后我们将讲解 Docker 构建镜像的过程。 想要从 Dockerfile 构建镜像,我们只需要在运行docker命令的时候,加上build选项。 # docker build -t blog /root/blog Sending build context to Docker daemon 23.6 MB Sending build context to Docker daemon Step 0 : FROM nginx:latest ---> 9fab4090484a Step 1 : MAINTAINER Benjamin Cane <ben@bencane.com> ---> Running in c97f36450343 ---> 60a44f78d194 Removing intermediate container c97f36450343 Successfully built 60a44f78d194 上面的例子,我们使用了-t(tag)标识给镜像添加“blog”的标签。实质上我们就是在给镜像命名,如果我们不指定标签,就只能通过 Docker 分配的Image ID来访问镜像了。本例中,从 Docker 构建成功的信息可以看出,Image ID值为60a44f78d194。 除了-t标识外,我还指定了目录/root/blog。该目录被称作“构建目录”,它将包含 Dockerfile,以及其它需要构建该容器的文件。 现在我们构建成功了,下面我们开始定制该镜像。 使用 RUN 来执行 apt-get 用来生成 HTML 页面的静态站点生成器是用Python语言编写的,所以,在 Dockerfile 中需要做的第一件定制任务是安装 Python。我们将使用 Apt 软件包管理器来安装 Python 软件包,这意味着在 Dockerfile 中我们要指定运行apt-get update和apt-get install python-dev;为了完成这一点,我们可以使用RUN指令。 ## Dockerfile that generates an instance of http://bencane.com FROM nginx:latest MAINTAINER Benjamin Cane <ben@bencane.com> ## Install python and pip RUN apt-get update RUN apt-get install -y python-dev python-pip 如上所示,我们只是简单地告知 Docker 构建镜像的时候,要去执行指定的apt-get命令。比较有趣的是,这些命令只会在该容器的上下文中执行。这意味着,即使在容器中安装了python-dev和python-pip,但主机本身并没有安装这些。说的更简单点,pip命令将只在容器中执行,出了容器,pip命令不存在。 还有一点比较重要的是,Docker 构建过程中不接受用户输入。这说明任何被RUN指令执行的命令必须在没有用户输入的时候完成。由于很多应用在安装的过程中需要用户的输入信息,所以这增加了一点难度。不过我们例子中,RUN命令执行的命令都不需要用户输入。 安装 Python 模块 Python安装完毕后,我们现在需要安装 Python 模块。如果在 Docker 外做这些事,我们通常使用pip命令,然后参考我的博客 Git 仓库中名叫requirements.txt的文件。在之前的步骤中,我们已经使用git命令成功地将 Github 仓库“克隆”到了/root/blog目录;这个目录碰巧也是我们创建Dockerfile的目录。这很重要,因为这意味着 Docker 在构建过程中可以访问这个 Git 仓库中的内容。 当我们执行构建后,Docker 将构建的上下文环境设置为指定的“构建目录”。这意味着目录中的所有文件都可以在构建过程中被使用,目录之外的文件(构建环境之外)是不能访问的。 为了能安装所需的 Python 模块,我们需要将requirements.txt从构建目录拷贝到容器中。我们可以在Dockerfile中使用COPY指令完成这一需求。 ## Dockerfile that generates an instance of http://bencane.com FROM nginx:latest MAINTAINER Benjamin Cane <ben@bencane.com> ## Install python and pip RUN apt-get update RUN apt-get install -y python-dev python-pip ## Create a directory for required files RUN mkdir -p /build/ ## Add requirements file and run pip COPY requirements.txt /build/ RUN pip install -r /build/requirements.txt 在Dockerfile中,我们增加了3条指令。第一条指令使用RUN在容器中创建了/build/目录。该目录用来拷贝生成静态 HTML 页面所需的一切应用文件。第二条指令是COPY指令,它将requirements.txt从“构建目录”(/root/blog)拷贝到容器中的/build/目录。第三条使用RUN指令来执行pip命令;安装requirements.txt文件中指定的所有模块。 当构建定制镜像时,COPY是条重要的指令。如果在 Dockerfile 中不指定拷贝文件,Docker 镜像将不会包含requirements.txt 这个文件。在 Docker 容器中,所有东西都是隔离的,除非在 Dockerfile 中指定执行,否则容器中不会包括所需的依赖。 重新运行构建 现在,我们让 Docker 执行了一些定制任务,现在我们尝试另一次 blog 镜像的构建。 # docker build -t blog /root/blog Sending build context to Docker daemon 19.52 MB Sending build context to Docker daemon Step 0 : FROM nginx:latest ---> 9fab4090484a Step 1 : MAINTAINER Benjamin Cane <ben@bencane.com> ---> Using cache ---> 8e0f1899d1eb Step 2 : RUN apt-get update ---> Using cache ---> 78b36ef1a1a2 Step 3 : RUN apt-get install -y python-dev python-pip ---> Using cache ---> ef4f9382658a Step 4 : RUN mkdir -p /build/ ---> Running in bde05cf1e8fe ---> f4b66e09fa61 Removing intermediate container bde05cf1e8fe Step 5 : COPY requirements.txt /build/ ---> cef11c3fb97c Removing intermediate container 9aa8ff43f4b0 Step 6 : RUN pip install -r /build/requirements.txt ---> Running in c50b15ddd8b1 Downloading/unpacking jinja2 (from -r /build/requirements.txt (line 1)) Downloading/unpacking PyYaml (from -r /build/requirements.txt (line 2)) <truncated to reduce noise> Successfully installed jinja2 PyYaml mistune markdown MarkupSafe Cleaning up... ---> abab55c20962 Removing intermediate container c50b15ddd8b1 Successfully built abab55c20962 上述输出所示,我们可以看到构建成功了,我们还可以看到另外一个有趣的信息---> Using cache。这条信息告诉我们,Docker 在构建该镜像时使用了它的构建缓存。 Docker 构建缓存 当 Docker 构建镜像时,它不仅仅构建一个单独的镜像;事实上,在构建过程中,它会构建许多镜像。从上面的输出信息可以看出,在每一“步”执行后,Docker 都在创建新的镜像。 Step 5 : COPY requirements.txt /build/ ---> cef11c3fb97c 上面片段的最后一行可以看出,Docker 在告诉我们它在创建一个新镜像,因为它打印了Image ID:cef11c3fb97c。这种方式有用之处在于,Docker能在随后构建这个blog镜像时将这些镜像作为缓存使用。这很有用处,因为这样, Docker 就能加速同一个容器中新构建任务的构建流程。从上面的例子中,我们可以看出,Docker 没有重新安装python-dev和python-pip包,Docker 则使用了缓存镜像。但是由于 Docker 并没有找到执行mkdir命令的构建缓存,随后的步骤就被一一执行了。 Docker 构建缓存一定程度上是福音,但有时也是噩梦。这是因为决定使用缓存或者重新运行指令的因素很少。比如,如果requirements.txt文件发生了修改,Docker 会在构建时检测到该变化,然后 Docker 会重新执行该执行那个点往后的所有指令。这得益于 Docker 能查看requirements.txt的文件内容。但是,apt-get命令的执行就是另一回事了。如果提供 Python 软件包的Apt仓库包含了一个更新的 python-pip 包;Docker 不会检测到这个变化,转而去使用构建缓存。这会导致之前旧版本的包将被安装。虽然对python-pip来说,这不是主要的问题,但对使用了存在某个致命攻击缺陷的软件包缓存来说,这是个大问题。 出于这个原因,抛弃 Docker 缓存,定期地重新构建镜像是有好处的。这时,当我们执行 Docker 构建时,我简单地指定--no-cache=True即可。 部署博客的剩余部分 Python 软件包和模块安装后,接下来我们将拷贝需要用到的应用文件,然后运行hamerkop应用。我们只需要使用更多的COPY和RUN指令就可完成。 ## Dockerfile that generates an instance of http://bencane.com FROM nginx:latest MAINTAINER Benjamin Cane <ben@bencane.com> ## Install python and pip RUN apt-get update RUN apt-get install -y python-dev python-pip ## Create a directory for required files RUN mkdir -p /build/ ## Add requirements file and run pip COPY requirements.txt /build/ RUN pip install -r /build/requirements.txt ## Add blog code nd required files COPY static /build/static COPY templates /build/templates COPY hamerkop /build/ COPY config.yml /build/ COPY articles /build/articles ## Run Generator RUN /build/hamerkop -c /build/config.yml 现在我们已经写出了剩余的构建指令,我们再次运行另一次构建,并确保镜像构建成功。 # docker build -t blog /root/blog/ Sending build context to Docker daemon 19.52 MB Sending build context to Docker daemon Step 0 : FROM nginx:latest ---> 9fab4090484a Step 1 : MAINTAINER Benjamin Cane <ben@bencane.com> ---> Using cache ---> 8e0f1899d1eb Step 2 : RUN apt-get update ---> Using cache ---> 78b36ef1a1a2 Step 3 : RUN apt-get install -y python-dev python-pip ---> Using cache ---> ef4f9382658a Step 4 : RUN mkdir -p /build/ ---> Using cache ---> f4b66e09fa61 Step 5 : COPY requirements.txt /build/ ---> Using cache ---> cef11c3fb97c Step 6 : RUN pip install -r /build/requirements.txt ---> Using cache ---> abab55c20962 Step 7 : COPY static /build/static ---> 15cb91531038 Removing intermediate container d478b42b7906 Step 8 : COPY templates /build/templates ---> ecded5d1a52e Removing intermediate container ac2390607e9f Step 9 : COPY hamerkop /build/ ---> 59efd1ca1771 Removing intermediate container b5fbf7e817b7 Step 10 : COPY config.yml /build/ ---> bfa3db6c05b7 Removing intermediate container 1aebef300933 Step 11 : COPY articles /build/articles ---> 6b61cc9dde27 Removing intermediate container be78d0eb1213 Step 12 : RUN /build/hamerkop -c /build/config.yml ---> Running in fbc0b5e574c5 Successfully created file /usr/share/nginx/html//2011/06/25/checking-the-number-of-lwp-threads-in-linux Successfully created file /usr/share/nginx/html//2011/06/checking-the-number-of-lwp-threads-in-linux <truncated to reduce noise> Successfully created file /usr/share/nginx/html//archive.html Successfully created file /usr/share/nginx/html//sitemap.xml ---> 3b25263113e1 Removing intermediate container fbc0b5e574c5 Successfully built 3b25263113e1 运行定制的容器 成功的一次构建后,我们现在就可以通过运行docker命令和run选项来运行我们定制的容器,和之前我们启动 nginx 容器一样。 # docker run -d -p 80:80 --name=blog blog 5f6c7a2217dcdc0da8af05225c4d1294e3e6bb28a41ea898a1c63fb821989ba1 我们这次又使用了-d(detach)标识来让Docker在后台运行。但是,我们也可以看到两个新标识。第一个新标识是--name,这用来给容器指定一个用户名称。之前的例子,我们没有指定名称,因为 Docker 随机帮我们生成了一个。第二个新标识是-p,这个标识允许用户从主机映射一个端口到容器中的一个端口。 之前我们使用的基础nginx镜像分配了80端口给 HTTP 服务。默认情况下,容器内的端口通道并没有绑定到主机系统。为了让外部系统能访问容器内部端口,我们必须使用-p标识将主机端口映射到容器内部端口。上面的命令,我们通过-p 80:80语法将主机80端口映射到容器内部的80端口。 经过上面的命令,我们的容器看起来成功启动了,我们可以通过执行docker ps核实。 # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d264c7ef92bd blog:latest nginx -g 'daemon off 3 seconds ago Up 3 seconds 443/tcp, 0.0.0.0:80->80/tcp blog 总结 截止目前,我们拥有了一个运行中的定制 Docker 容器。虽然在这篇文章中,我们只接触了一些 Dockerfile 指令用法,但是我们还是要学习所有的指令。我们可以检查Docker's reference page来获取所有的 Dockerfile 指令用法,那里对指令的用法说明得很详细。 另一个比较好的资源是Dockerfile Best Practices page,它有许多构建定制 Dockerfile 的最佳练习。有些技巧非常有用,比如战略性地组织好 Dockerfile 中的命令。上面的例子中,我们将articles目录的COPY指令作为 Dockerfile 中最后的COPY指令。这是因为articles目录会经常变动。所以,将那些经常变化的指令尽可能地放在最后面的位置,来最优化那些可以被缓存的步骤。 原文发布时间为:2016-06-08 本文来自云栖社区合作伙伴“Linux中国”

优秀的个人博客,低调大师

阿里宣布“千问” App 开启公测:用最强模型打造最佳个人 AI 助手

阿里巴巴今日官宣“千问” App 公测上线:用最强模型打造最佳个人 AI 助手,基于全球第一开源模型通义千问 Qwen 打造。 官方介绍称,千问 App 不仅能与用户“对话”,更能为用户“办事”,打造未来的 AI 生活入口,将陆续覆盖办公、地图、健康、外卖、订票、办公、学习、购物等多个生活场景,让千问具备更强大的办事能力。 目前,千问 App 公测版已在各大应用商店上架,并同步提供网页和 PC 版。面向全球市场的千问 App 国际版也将在近期上线,借助 Qwen 模型的海外影响力与 ChatGPT 直接争夺海外用户。 阿里方面表示,这次发布的千问 App 是一个初级版本,将用最先进的模型,打造一个“会聊天能办事的个人 AI 助手”。除了聊天足够聪明外,“能办事”将是千问 App 的一个重要发力方向。千问 App 的战略目标是打造未来的 AI 生活入口。

优秀的个人博客,低调大师

10.24 Qcon·上海站HarmonyOS开发者技术分论坛开启招募,等你来!

Qcon全球软件开发大会HarmonyOS开发者技术分论坛将于10月24日14:00于上海浦东滨江喜来登酒店3楼台州宴会厅2举行,本次分论坛设有6个议题,包括多设备协同开发、AI辅助开发、场景化赋能、性能调优、场景能力共建,RN框架等热门话题。 诚邀各位开发者前来,与技术专家一起探讨开发者解决方案技术竞争力,碰撞灵感!让我们共同奔赴这场技术盛宴。 了解更多详情,请搜索“Qcon全球软件开发大会”。 HarmonyOS开发者技术分论坛报名链接: https://www.infoq.cn/form/?id=2822&utm_source=harmonyos&sign=iq_68ecc7f3c0565

优秀的个人博客,低调大师

“码上数据库-KWDB 2025 创作者计划”征文大赛火热开启

我们都知道,在开源的世界里,代码是最通用的语言也是最直接的沟通方式。无论是代码仓库上的协作,还是社区上的问答,代码始终是开发者交流的核心媒介。 过去的 2024 年,是 KWDB 社区的开源元年。在这一年 KaiwuDB 2.0 发布并开源,起名 KWDB ;也是在这一年,KWDB 捐赠给开放原子开源基金会,正式成为基金会孵化项目。作为开源数据库社区的新人,我们希望通过代码,结识更多有热情有理想的开发者,碰撞出不一样的火花,一同探索分布式多模数据库的创新之道。 春暖花开,让我们一起“码”上出发 用键盘码出你和 KWDB 的相识相知,用代码构建一座通向技术与创新的桥梁! 赛事安排 投稿参赛:04.01-05.31 专家评审:06.01-06.10 结果公示:06.11 奖项发放及优秀作品展示:06.12-06.30 征文奖励 奖项 名次 奖励 卓越奖 5 篇 第 1-5 名 创作者基金 2000 元/篇 优秀奖 10 篇 第 6-15 名 创作者基金 1000 元/篇 潜力奖 20 篇 第 16-35 名 创作者基金 600元/篇 人气特别奖 10 篇 人气前 10 名 价值 200 元 KWDB 限定周边大礼包 *注:允许参赛者多篇投稿,重复领奖 征文方向 产品技术解读 :存储引擎、KWDB 组件源码解析、KWDB 特性代码解读、跨模计算、KWDB 代码解析... 场景方案与应用案例:物联网 IoT 、智能制造/数字工厂、KWDB 的项目应用体验、场景与选型、业务建模思考、系统迁移/升级... 实操体验:实测(读写性能/稳定性)、我用 KWDB 做了个有意思的东西、KWDB 特性之我见/体验、安装部署 KWDB 踩过的坑或经验分享、一场 bug 修复经历... 投稿要求 1、 基础标准:建议大家优先前往 Gitee 下载最新版 KWDB 2.2.0 ,体验完成后围绕征文建议方向撰写博文。字数不少于 1000 字。(标点符号、代码字符不计入) 2、 尊重原创:征文内容须为原创/首发,不侵犯第三方版权或其他合法权益;不得有抄袭、洗稿、凑字数、广告导流等行为。一经发现,取消参赛资格。 3、 加分Tips :有代码、实操截图、总结图示或 demo 搭配更佳。 投稿规则 1、添加官方小助手—— 小K (微信号:KaiwuDB_Assistant ),加入 KWDB 创作者群; 2、在活动合作媒体端,包括 OSChina、CSDN、ITPUB、墨天轮社区,或个人公众号发布参赛作品,文章统一按如下格式命名: 【KWDB创作者计划】_文章主题; 3、在群公告中填写 作品征集链接,完成参赛作品提交,即视为报名参赛成功。 *注:若无法在上述媒体端发稿,可直接在作品征集链接中上传 word 版本稿件 KWDB 2.2.0 用户指南 戳链接→ https://my.oschina.net/u/7819858/blog/18110368 评审专家阵容 快前往官方社区了解 KWDB 吧! KWDB 官网: https://www.kaiwudb.com Gitee 社区: gitee.com/kwdb/kwdb 合作媒体: *本活动最终解释权归 KWDB 社区所有

优秀的个人博客,低调大师

LFOSSA女神节福利,激励女性绽放多元力量,开启开源之路无限可能!

女神节是致敬女性力量的时刻,女性在科学、艺术、政治和商业等各个领域,以独特的智慧和勇气创造辉煌。在开源领域,女性开发者凭借她们独特的视角和坚定的决心,推动着技术的不断进步与创新。为了表达对女性的崇高敬意,感激女性的付出,激励女性继续在事业上攀登高峰,在3月8日国际妇女节来临之际,LFOSSA为开发者特别推出女神节专属折扣——3月6日 - 3月12日,LF官方课程及认证考试全场 7 折起!激励更多女性加入开源,点亮开源女性舞台,绽放多元无限可能! LF开源软件学园(LFOSSA)一直致力于推动女性权益保障,鼓励女性在开源领域展现光彩。为此,我们将今年3月定为“女神月”,并计划邀请女性开源布道者分享她们的开源故事与成长经历,激励更多女性加入开源社区。同时,每年的奖学金计划,会为女性设置专门的类别 —— 女性开源力量,鼓励女性展示自我,站在更广阔的舞台上,激励更多女性发声。 在2025年1月5日,2024 国际开源节 - 全球开源教育峰会 - 开源教育专场 -开源女性圆桌中,LFOSSA 邀请了 Linux 基金会亚太区、LFAPAC 开源布道者、华为、戴尔等多位优秀女性代表分享她们在开源领域的经验,她们就女性职业发展、开源社区参与等话题进行了深度交流,鼓励更多女性投身开源事业。 LF开源软件学园(LFOSSA)始终致力于推动开源社区的多样性与包容性,鼓励女性在各个领域发掘并展现她们独特的才能与光彩。敬请关注我们,未来将陆续推出更多女神节相关活动,期待大家踊跃参与! 在此祝福大家女神节快乐,愿你们持续前行,成就非凡! LFOSSA 女神节活动部分折扣产品如下 超值认证套购 Kubestronaut超级套购 原价12258元,现价10419元 https://training.linuxfoundation.cn/pack/81 CKS-CN&CKA-CN双证套购 原价6778元,现价5761元 https://training.linuxfoundation.cn/pack/22 CKS&CKA双证套购 原价6148元,现价5226元 https://training.linuxfoundation.cn/pack/107 CKA-CN&CKAD-CN双证套购 原价6778元,现价5761元 https://training.linuxfoundation.cn/pack/91 CKA&CKAD双证套购 原价6148元,现价5226元 https://training.linuxfoundation.cn/pack/108 CKA&ICA双证套购 原价4808元,现价4087元 https://training.linuxfoundation.cn/pack/71 CKA-CN&KCNA-CN双证套购 原价5068元,现价4308元 https://training.linuxfoundation.cn/pack/72 CKA&KCNA双证套购 原价4808元,现价4087元 https://training.linuxfoundation.cn/pack/109 KCSA&CKS双证套购 原价4808元,现价4087元 https://training.linuxfoundation.cn/pack/89 CKA-CN&CKAD-CN&CKS-CN超级套购 原价10198元,现价8668元 https://training.linuxfoundation.cn/pack/30 CKA&CKAD&CKS超级套购 原价9278元,现价7886元 https://training.linuxfoundation.cn/pack/106 CKA&CKS&PCA超级套购 原价7288元,现价6195元 https://training.linuxfoundation.cn/pack/69 CKA&PCA超级套购 原价4808元,现价4087元 https://training.linuxfoundation.cn/pack/58 KCNA&KCSA双证套购 原价3168元,现价2693元 https://training.linuxfoundation.cn/pack/88 KCNA&LFCA双证套购 原价3168元,现价2693元 https://training.linuxfoundation.cn/pack/76 LFCS&Skillcreds套购 原价7018元,现价5965元 https://training.linuxfoundation.cn/pack/73 Skillcreds套购 原价4428元,现价3764元 https://training.linuxfoundation.cn/pack/75 超值课程认证套购 CKS-CN&LFS260套购 原价4988元,现价4240元 https://training.linuxfoundation.cn/pack/21 CKS&LFS260套购 原价4808元,现价4087元 https://training.linuxfoundation.cn/pack/100 CKA-CN&LFS258套购 原价4988元,现价4240元 https://training.linuxfoundation.cn/pack/1 CKA&LFS258套购 原价4808元,现价4087元 https://training.linuxfoundation.cn/pack/99 CKAD-CN&LFD259 原价4988元,现价4240元 https://training.linuxfoundation.cn/pack/4 CKAD&LFD259 原价4808元,现价4087元 https://training.linuxfoundation.cn/pack/101 RVFA-CN&LFD210-CN套购 原价2208元,现价1894元 https://training.linuxfoundation.cn/pack/63 RVFA&LFD210套购 原价2228元,现价1894元 https://training.linuxfoundation.cn/pack/62 KCNA-CN&LFS250套购 原价2228元,现价1894元 https://training.linuxfoundation.cn/pack/40 KCNA&LFS250套购 原价2228元,现价1894元 https://training.linuxfoundation.cn/pack/105 ICA&LFS245套购 原价2228元,现价1894元 https://training.linuxfoundation.cn/pack/90 LFS270&HFCP套购 原价2228元,现价1894元 https://training.linuxfoundation.cn/pack/97 LFCS&LFS207套购 原价4808元,现价4087元 https://training.linuxfoundation.cn/pack/102 LFCS (单次考试)&LFS207套购 原价4098元,现价3483元 https://training.linuxfoundation.cn/pack/48 JSNAD-CN&LFW211套购 原价4428元,现价3764元 https://training.linuxfoundation.cn/pack/103 JSNAD&LFW211套购 原价4428元,现价3764元 https://training.linuxfoundation.cn/pack/13 JSNSD-CN&LFW212套购 原价4428元,现价3764元 https://training.linuxfoundation.cn/pack/104 JSNSD&LFW212套购 原价4428元,现价3764元 https://training.linuxfoundation.cn/pack/14 LFCA&LFS200套购 原价2228元,现价1894元 https://training.linuxfoundation.cn/pack/43 CAPA&LFS256套购 原价2228元,现价1894元 https://training.linuxfoundation.cn/pack/80 查看更多LFOSSA培训、认证及套购产品: 培训: https://training.linuxfoundation.cn/courses 认证: https://training.linuxfoundation.cn/certificates 套购: https://training.linuxfoundation.cn/pack 立即点击这里进入LFOSSA官网,选购官方认证考试及培训课程产品。

优秀的个人博客,低调大师

开启国际化新征程,openKylin 成立 4 个海外用户组!

近日,openKylin Meetup第四期(2024)于天津举办,在此次国际交流活动中,openKylin推进开源社区国际化布局,发布国际用户组招募计划,旨在将开源社区的相关合作拓展至全球范围,吸引世界各地的开发者贡献代码、想法和经验,比肩国际社区,将中国开源品牌推向世界。 会上,来自埃塞俄比亚、尼日利亚、塞拉利昂、坦桑尼亚、伊拉克、刚果等国家的多位留学生代表,在详细了解了openKylin国际用户组的介绍后,纷纷申请创建本国的openKylin用户组,希望参与到openKylin社区的国际化建设中来,推动openKylin在本国的品牌建设及用户拓展。 非常感谢与会留学生对openKylin社区的支持认可,在汇总评审提交者的用户组创建申请后,已于openKylin社区官网展示用户组认证成员信息,并举办了线下用户组成立仪式。 OKUG·埃塞俄比亚(Ethiopia) OKUG·尼日利亚(Nigeria) OKUG·坦桑尼亚(Tanzania) OKUG·塞拉利昂(Sierra) openKylin国际用户组,是为方便全球各国家及地区开源爱好者交流openKylin系统版本及用户体验、推广openKylin操作系统而成立的开源爱好者组织。未来,openKylin将持续推进国际化布局,通过与国际社区间的交流协作、拓展国际用户及开源贡献者,推动社区国际品牌影响力建立,让社区获得持续发展的创新动力。 当前,openKylin城市用户组持续招募中,扫描下方二维码即可申请创建或加入openKylin城市用户组。 openKylin城市用户组招募 国际用户组 国内用户组

优秀的个人博客,低调大师

未来5年,只有这种产品团队才能开启上帝视角【玩转IPD】

一家企业如何在波涛汹涌的市场浪潮中站稳脚跟?一个团队如何快速识别风险发现机遇,成为行业的标杆?市场瞬息万变,如何准确地响应市场动向,紧跟用户需求?这些问题,已成为企业发展乃至生存的重要保障。尽管市场和用户对于不同的企业的要求不尽相同。但对于产品、技术为导向的企业来说,自主研发能力的强弱直接反映了企业核心竞争力的高低。新产品、新技术的研发能力是企业生存发展的基础,也是企业发展壮大的决定因素。随着研发技术迭代的时间越来越短,企业要想适应这种快速变化,高度内卷的竞争环境,就需要对自身产品开发的要求越来越高、越来越严、越来越创新。向内寻找解决之道的同时,也需要从市场中寻找研发创新的灵感,通过科学的方式充分了解市场、捕捉最真实、迫切的用户需求,实现产品开发体系的高效运作,使得企业能够具有前瞻性的战略眼光、更强的新产品研发能力,更深入用户和市场的需求探索视角。这是不少企业面临的难题。但在无数次的探索、试错、迭代中,行业总结出了一套可以完美解决这些问题的模型体系——IPD(集成产品开发)模式。IPD(集成产品开发)模式作为一套成熟的企业管理理论,它的核心思想是: 将新产品开发作为一项投资策略; 企业的产品研发、技术创新等项目任务,都需要基于市场需求和用户的视角; 打造跨部门的沟通协作、跨部门的产品开发团队; 提倡异步开发代替顺序开发模式; 注重产品结构和技术架构的重用性; 整合结构化的流程。 IPD(集成产品开发)模式的另一个重要特点就是“整合”:强调重用CBB(公用构建模块)通过平台规划和软硬件CBB建设,在项目中以“搭积木”的方式快速构建框架提升质量,缩短研发周期。而基于市场管理制定战略目标,是IPD(集成产品开发)模式中的重要组成部分,也是IPD在企业得以落地、发展的基础。IPD(集成产品开发)模式可以通过“搭积木”的方式,与投资决策方法进行集成应用,从而达到对产品研发和市场营销的全面支撑。许多引入IPD(集成产品开发)模式的企业开始越来越深刻地认识到应用管理工具的重要性,比如许多企业在前期的战略制定、市场分析阶段,会引入BLM模型,以此来提高企业的预见性和洞察力,结合自身资源和产业趋势,做出更优的战略决策和战略执行,帮助IPD在企业内部更好的落地、推进。综合华为等众多推行IPD(集成产品开发)模式的企业的经验总结,BLM模型可以更好地落地IPD,彼此支撑,帮助企业达到战略目标与市场需求的自洽。BLM全称业务领先模型(Business Leadership Model),它是一套完整的战略规划方法,以价值观和领导力为出发点,引导企业从领导力、价值观、战略、执行(组织实施)与差距(市场结果)等五个层面进行多维战略规划,通过氛围与文化、关键任务依赖关系、人才和正式组织四方面进行战略的执行与落实,保障战略有效落地。BLM将企业的战略过程设计为5个模块,区分为12个相互依存、互相作用的部分,每个部分有不同的侧重点,相互作用,形成合力,共同为企业的发展提供支持。 BLM模型从企业战略发展和内部管理体系出发,以企业的领导力和企业价值观为基础,分为战略制定和战略执行两大部分,在此基础上,补足机会差距和业绩差距,达成预期的市场结果。在该模型中,战略制定由人才洞察、战略意图、业务设计、创新焦点四部分构成;战略执行由人才、关键任务依赖关系、正式组织、氛围文化四部分组成。BLM几个关键要素的作用,可以简单地概括为: 领导力是关键(引领企业战略和执行); 企业价值观是基础; 战略是方法; 执行是手段; 弥补差距是市场结果也是企业发展的动力(其中机会差距会促进新业务发展,业绩差距促进现有业务绩效改进)。 一、战略 BLM模型认为战略制定是企业发展、壮大的起点,好的战略规划能更好地帮助企业明确当下境况,更准确地表达所要达成的目标。在BLM模型中,战略的输出集中表现在业务设计上,它包括五个部分:客户选择、价值主张、价值获取、活动范围、持续价值增值。战略的执行通过关键任务/依赖关系来衔接,与业务设计相匹配,进而通过组织的人员、结构和文化氛围等要素加以支持。 1.领导力 领导力是核心团队对发展战略的把控。需要团队对问题、机会进行解决和探索,从而突破限制,获得新的战略发展和市场份额。领导力要求企业既能够在核心业务中参与竞争、赢得竞争,也能够不断探索新的增长领域,跟随市场的迭代,不断创新和尝试。有效的领导者能建立起可对市场变化做出快速反应的团队,组织成员有明确的责任分配,同时具备做出正确的决策并付诸行动的能力。有效的领导者能够与组织和团队成员进行及时说明和沟通,使全体成员都能了解企业的战略意图,并清晰与企业战略目标一致的自身责任。 2.价值观 价值观是战略和执行的基础,是企业制定战略决策的根本原则,也是领导力的集中体现。企业的战略决策通常包括持续地对市场进行洞察、创造创新方案、进行业务设计,并建设与之匹配的组织能力,以确保关键任务的可执行性。所有这些都必须基于企业的价值观,员工的职责和行为,也都需保持与价值观保持一致。 3.差距 BLM模型中的差距,主要包括业绩差距和机会差距两个层面:业绩差距是当前的业务成果和企业预期达成的成果之间的具体、量化的结果表述;机会差距是当前的业务成功与能在市场上取得的成果之间的差距的具体、量化的数值。业绩差距和机会差距不仅要反映业务结果,也需要符合企业价值观的要求。对业绩差距的弥补不必通过业务设计的改变,只需要注重良好的执行就可以实现,而弥补机会差距就需要借助商业设计来完成。 4.规划 BLM战略规划需要与企业价值观保持一致,对市场大环境和用户需求有客观的评估,并且需要根据市场的变化积极创新。战略应建立在市场洞察和创新思维的领导能力基础之上。战略规划要求企业领导者具备快速整合数据和经验的能力,能统揽全局并认识到其中的重要性。 二、执行 BLM中的战略执行部分,目的是将组织的能力转变成与企业价值观保持一致的市场结果。需要正确评价当前组织能力及绩效,根据业务设计的要求,采取正确的应对措施。战略执行要求领导层熟悉企业的价值地图,对企业的核心价值和优势具备敏锐的洞察和感知。最后,BLM模型可以帮助企业制定出较为完善的战略规划,尤其与IPD(集成产品开发)模式协作配合相得益彰。IPD(集成产品开发)模式下,通过组建IPMT、PDT等跨部门团队,来完成企业战略规划、项目目标的制定等。当团队需要做战略层面的规划时,可以适当地融BLM模型,协助管理层定期开展战略制定、调整、实施和跟踪工作,为企业带来组织核心能力和战略规划能力的提升。需要注意的是,BLM给企业提供了一个非常系统且理性的战略管理的思维框架,但它并不是战略流程与战略目标结果输出。BLM是一种思维参考,而非战略分解的工具。BLM能够为正在推行IPD(集成产品开发)模式的企业和团队提供制定战略目标的参考和指导,但仍然需要决策层定期根据内外部环境的变化、战略的执行情况进行偏差调整,保障战略规划的有效性和指导性。

优秀的个人博客,低调大师

低代码与 Echarts 融合:开启智能可视化的创新浪潮

前言 在当今数字化时代,数据的价值愈发凸显,企业和组织需要有效地利用数据来作出战略决策和优化业务流程。可视化是一种强大的工具,可以将复杂的数据以直观的方式展现出来,帮助用户更好地理解和分析数据。近年来,低代码开发平台和 Echarts 可视化库的结合,为智能可视化带来了全新的创新浪潮。 低代码开发平台的崛起 随着数字化转型的推进,企业和组织对软件开发的需求越来越迫切。然而,传统的软件开发过程通常耗时、耗力,需要专业的编程知识和技能。低代码开发平台的出现改变了这一现状。低代码开发平台提供了可视化的界面和拖拽式的操作,使得非专业开发人员也能够快速构建应用程序,大大缩短了开发周期和降低了开发成本。 Echarts 可视化库的优势 Echarts 是一款由百度开源的数据可视化库,具有强大的可定制性和丰富的图表类型。它支持折线图、柱状图、饼图、雷达图等多种图表形式,还能够与地图进行无缝结合,展示地理空间数据。 Echarts 提供了丰富的API接口,使得开发者可以根据自己的需求进行定制和扩展。 低代码与 Echarts 的融合 将低代码开发平台与 Echarts 可视化库相结合,可以实现智能可视化的创新应用。低代码平台提供了快速开发的能力,用户可以通过拖拽和配置来构建数据处理和分析的逻辑。而 Echarts 则提供了丰富的数据可视化组件,用户可以根据需求选择合适的图表类型,展现数据的多个维度和关联关系。通过低代码开发平台的灵活性和 Echarts 的强大功能,用户可以快速实现定制化的智能可视化应用,提升数据分析和决策的效率。 智能可视化的商业价值 智能可视化在各个行业都具有广泛的应用前景。企业可以利用智能可视化来监控业务指标、分析销售数据、优化供应链等,帮助决策者更好地把握市场动向和业务状况。在金融领域,智能可视化可以用于风险管理、交易分析等方面。而在物联网、医疗健康等领域,智能可视化也能提供实时监控和预警功能,帮助用户及时做出反应。 接下来小编将以葡萄城公司的企业级低代码开发平台——活字格为例,为大家介绍低代码是如何借助 Echarts 来构建图表和搭建可视化大屏。 环境准备 活字格设计器 活字格服务管理器 活字格 Echarts 插件 基础的 Echarts 图表使用 活字格中封装了一些常用的图表,比如柱状图,折线图等。 插入图表 这些图表的使用方法和 Excel 中的使用方法类似,仅需要将图表插入到页面中的相应位置即可。 修改图表 如果需要修改图表的内容,右击图表选择数据并修改数据来源即可。 Echarts 插件的使用 在活字格的最新版本中,增加了 Echarts 插件,详细使用方法如下: 安装活字格 Echarts 插件 首先在活字格设计器中安装 Echarts 插件。 创建数据库表 安装插件后,在活字格的数据库中新建一张【销售数据表】,并在里面添加 2 个字段【年份】和【销售额】,并添加一些数据。 创建 Echarts 单元格 创建完数据表之后,在页面上随便选一片区域设置成 Echarts 单元格,并且设置数据源,起名字【销售数据信息】,数据源中选择销售数据表的【年份】和【销售额】这2列。 紧接着小编需要对 Echarts 单元格的内容进行设置,点击 【Echarts 设置】 然后通过一些简单 Javascript 的代码设置图表的格式: //获取数据库中的数据 const{ "年份": xAxisData, "销售额": yAxisData } = Forguncy Echarts Helper.splitDatasource(Context.销售数据信息); //设置横轴纵轴的数据源 option = { xAxis:{ type: "category, data: xAxisData }, yAxis:{ type:"value } series: [ { data: yAxisData, type: 'line' } ] }; 显示效果如下,图表会随着销售额数据的进行而变化。 更多模板 上面使用一个 Echarts 插件简单地设计一个折线图的例子,除此之外,小编还用 Echarts 插件设计了很多的模板,如热力图、关系图、漏斗图、3D地图等,感兴趣的同学可以点击这里查看。 总结 低代码开发平台与Echarts可视化库的融合为智能可视化带来了全新的机遇和挑战。这种融合不仅简化了应用开发的过程,降低了技术门槛,还提供了强大的数据可视化能力,帮助用户更好地理解和分析数据。随着技术的不断演进,低代码与Echarts的融合将引领智能可视化领域的创新浪潮,为企业和组织提供更高效、智能的数据分析和决策支持。 此外,葡萄城的低代码开发平台活字格不仅具备强大的可视化开发能力,还集成了BI分析能力。当面临复杂的BI分析与可视化需求时,可以通过借助葡萄城的嵌入式BI工具Wyn商业智能软件来解决。通过将Wyn商业智能软件嵌入到活字格搭建的系统中,实现低代码开发与嵌入式BI分析的一体化解决方案,满足面临复杂BI系统开发的需求。这种一体化解决方案将提供更全面、综合的功能,帮助用户更好地处理复杂的数据分析和可视化需求。 扩展链接: 从表单驱动到模型驱动,解读低代码开发平台的发展趋势 低代码开发平台是什么? 基于分支的版本管理,帮助低代码从项目交付走向定制化产品开发

优秀的个人博客,低调大师

Teo Admin Dashboard 已开启 beta 测试!写后端附送管理端的时代到来!

作为一个能大幅节省开发时间和开发成本的后端框架,自动生成管理端的需求是刚需,也符合我们的定位。以往的开发框架中,要么用户需要自行编写管理端,要么框架就不是一个具有全功能、而是基于为了生成管理端而编排了功能。这就导致,不能生成管理端的框架仍需要花费大量精力和成本编写便利端,而能生成管理端的框架,后端功能是不全的。 我们统一了上述的两种产品,继承了其各自的优点,保证开发工具框架的先进和功能覆盖的全面。 从3月下旬开始,我们开始研发自动生成管理端。所需精力已经不亚于基于我们的核心产品Teo进行再一次创业了。这个过程是很艰辛的。在项目的功能需求上,我们要求必须满足任意定制开发的可能性。所以,我们只生成代码,用户可以对其进行任何修改,生成的代码分为generated和extended两部分,extended中的代码是用户可以任意定制的,而generated中的代码,则由Teo自动生成,用户不能修改。随着用户后端功能的更新,generated中的代码会被自动替换。 这一种管理端生成方式,对我们来说,是最为复杂的,但对开发者用户来说,却是使用起来最具扩展性、最简便的。这种做法跟Docker等部署工具也能够很好的集成,可以为在线代码编辑类产品的云服务做底层。 要完成全部的数据记录表单、筛选、数据统计展示等功能,是非常耗时的。我们这一次先公开已开发完成的一部分功能,和用户一起成长。在接下来的数个新版本中,它会被逐步完善。至少,现在能用这个系统来进行数据记录的增删改查。这满足基本的需要。 Teo Admin Dashboard看起来是什么样子,你一定会好奇。我们做好了基础的交互方案,其设计特点我们会一一介绍。我们把设计交给我们的用户,你可以向我们提各种各样的意见,我们会整合需求和想法,争取做到超出每个人的想象。 交互设计1 - Shimmers 我们在设计中大量应用Shimmers作为加载状态,看起来非常自然。用户仿佛能看到加载后的内容的结构,但是,它在加载,所以只有轮廓和动画,没有具体内容。 交互设计2 - Tooltips 我们在很多按钮和交互元素中增加了鼠标悬停提示功能,上面的gif中没有体现,我们期待这个功能,在用户迷茫时,能给到温暖的提示。 交互设计3 - 右键菜单 我们设计了丰富的右键菜单,来丰富管理端系统的功能。我们会更新右键菜单的样式并展示在下一篇文章中。 交互设计4 - 类似App的导航结构 为了方便电脑和平板设备的交互操作,我们取消了传统的页面中的breadcrumb,取而代之的是类似移动应用的返回按钮。它与网址能够很好的集成,并且前面页面和其他Tab的浏览内容都会被缓存。在未来,我们会增加交互动画,使其体验更加丝滑。 正式版的期待 我们会在未来的0.3.0版本,随同其他核心功能升级,一同发布Admin Dashboard的正式版。正式版功能会包括: 可以配置的数据统计仪表盘 完善的数据筛选、滚动加载和组件类型配置 更强大的表单和富文本编辑 其它更强的自定义属性 支持我们 做开源不容易,做对开发者和社会有价值的开源更难。如果觉得不错,希望您能在Gitee为我们点一个赞。 Gitee: https://gitee.com/teocloud/teo

资源下载

更多资源
Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册