科思倍与您共筑过程数据应用未来!

欢迎您访问科思倍博客,南京科思倍信息科技有限公司旗下的“优惕云”服务平台为石油化工等流程工业提供在线大数据处理服务,博客里有各类资料,欢迎浏览和评论。

发表在 修炼成长 | 科思倍与您共筑过程数据应用未来!已关闭评论

【转】buntu挂载新磁盘到目录之后,导致文件“消失”的解决办法

项目初期用户文件较少,全部存储在/home目录下,/home目录没有单独划开分区,随着项目网站做大,用户文件越来越多,/home目录不够空间,想挂载一个新硬盘来负责储存

但发现新挂载/home到新硬盘时,/home原来数据变空了,这个原因是由于linux的VFS(虚拟文件系统)机制导致的,正常登录以后,所看到的各个目录,文件都是内核在加载时候构造在内存中的VFS目录树,而不是直接看到硬盘上的实际目录树。当你挂载某个设备到一个VFS挂载点上时(比如/home),系统就把VFS中的这个挂载点/home指向你最后所挂载的那个设备上。那么你现在访问该挂载点时,就会看到你最后挂载在此处的设备。而之前所挂载的设备依然在那里,只不过挂载点/home已经不再指向之前的设备。所以之前的数据是被隐藏了,但并没有删除,若umount挂载后,数据又重新回来了

基于这种情况,只能通过跳板的方式把原来的/home数据复制到新的/home分区下了 ,如何添加新硬盘,请查找相关资料

mkdir /new  ###跳板目录

mount /dev/sdb1 /new  ###首先挂载跳板目录

cp -R /home/*  /new  ###复制/home目录所有数据到/new先

rm -rf /home/*       ####可选,主要为了腾出空间给原来的硬盘

mount /dev/sdb1 /home ###挂载/home 到新硬盘,此时你会神奇的发现之前的/home目录文件已经全部转移过来了,也许你会有点疑问,我并没有复制或移动/new文件到新挂载的/home目录啊,其实此时的/home目录相当于/new目录的硬链接,可以测试下mkdir /new/test 你会发现/home目录也存在test

umount /new ###解除挂载,可能会出现占用无法删除,可以使用 umount -fl 强行卸载,

-f 强制卸载

-l 一空闲马上卸载所有占用的文件系统。

rm -rf /new ###删除跳板目录

echo  “/dev/sdb1  /home    ext3或ext4    defaults    0 0” >> /etc/fstab ###开机启动挂载目录

原文地址

发表在 卓越运营 | 【转】buntu挂载新磁盘到目录之后,导致文件“消失”的解决办法已关闭评论

【转】webservice接口和http接口(API接口)的区别

 web service(SOAP)与HTTP接口的区别:


什么是web service?

      答:soap请求是HTTP POST的一个专用版本,遵循一种特殊的xml消息格式Content-type设置为: text/xml任何数据都可以xml化。

为什么要学习web service?

        答:大多数对外接口会实现web service方法而不是http方法,如果你不会,那就没有办法对接。

web service相对http (post/get)有好处吗?

            1.接口中实现的方法和要求参数一目了然

             2.不用担心大小写问题

            3.不用担心中文urlencode问题

            4.代码中不用多次声明认证(账号,密码)参数

            5.传递参数可以为数组,对象等…

web service相对http(post/get)快吗?

     答:由于要进行xml解析,速度可能会有所降低。

web service 可以被http(post/get)替代吗?

        答:完全可以,而且现在的开放平台都是用的HTTP(post/get)实现的。

  • httpservice通过post和get得到你想要的东西
  • webservice就是使用soap协议得到你想要的东西,相比httpservice能处理些更加复杂的数据类型
  • http协议传输的都是字符串了,webservice则是包装成了更复杂的对象。

1. webservice走HTTP协议和80端口

2. 而你说的api,用的协议和端口,是根据开发人员定义的。

3. 这么说吧,api类似于cs架构,需要同时开发客户端API和服务器端程序。

4. 而WebService则类似于bs架构,只需要开发服务器端,不需要开发客户端,客户端只要遵循soap协议,就可以调用。

java用webservice作接口有什么好处?直接提供一个请求地址就行了啊

 答:对开发语言通用类型做xml映射处理,跨语言,跨平台

1.1、Web Service基本概念


Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。

XML:(Extensible Markup Language)扩展型可标记语言。面向短期的临时数据处理、面向万维网络,是Soap的基础。

Soap:(Simple Object Access Protocol)简单对象存取协议。是XML Web Service 的通信协议。当用户通过UDDI找到你的WSDL描述文档后,他通过可以SOAP调用你建立的Web服务中的一个或多个操作。SOAP是XML文档形式的调用方法的规范,它可以支持不同的底层接口,像HTTP(S)或者SMTP。

WSDL:(Web Services Description Language) WSDL 文件是一个 XML 文档,用于说明一组 SOAP 消息以及如何交换这些消息。大多数情况下由软件自动生成和使用。

UDDI (Universal Description, Discovery, and Integration) 是一个主要针对Web服务供应商和使用者的新项目。在用户能够调用Web服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服务端来编制软件,UDDI是一种根据描述文档来引导系统查找相应服务的机制。UDDI利用SOAP消息机制(标准的XML/HTTP)来发布,编辑,浏览以及查找注册信息。它采用XML格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。

1.2、XML Web Service的特点

Web Service的主要目标是跨平台的可互操作性。为了实现这一目标,Web Service 完全基于XML(可扩展标记语言)、XSD(XML Schema)等独立于平台、独立于软件供应商的标准,是创建可互操作的、分布式应用程序的新平台。因此使用Web Service有许多优点:

1、跨防火墙的通信

如果应用程序有成千上万的用户,而且分布在世界各地,那么客户端和服务器之间的通信将是一个棘手的问题。因为客户端和服务器之间通常会有防火墙或者代理服务器。传统的做法是,选择用浏览器作为客户端,写下一大堆ASP页面,把应用程序的中间层暴露给最终用户。这样做的结果是开发难度大,程序很难维护。 要是客户端代码不再如此依赖于HTML表单,客户端的编程就简单多了。如果中间层组件换成Web Service的话,就可以从用户界面直接调用中间层组件,从而省掉建立ASP页面的那一步。要调用Web Service,可以直接使用Microsoft SOAP Toolkit或.net这样的SOAP客户端,也可以使用自己开发的SOAP客户端,然后把它和应用程序连接起来。不仅缩短了开发周期,还减少了代码复杂度,并能够增强应用程序的可维护性。同时,应用程序也不再需要在每次调用中间层组件时,都跳转到相应的”结果页”。

2、应用程序集成

企业级的应用程序开发者都知道,企业里经常都要把用不同语言写成的、在不同平台上运行的各种程序集成起来,而这种集成将花费很大的开发力量。应用程序经常需要从运行的一台主机上的程序中获取数据;或者把数据发送到主机或其它平台应用程序中去。即使在同一个平台上,不同软件厂商生产的各种软件也常常需要集成起来。通过Web Service,应用程序可以用标准的方法把功能和数据”暴露”出来,供其它应用程序使用。

XML Web services 提供了在松耦合环境中使用标准协议(HTTP、XML、SOAP 和 WSDL)交换消息的能力。消息可以是结构化的、带类型的,也可以是松散定义的。

3、B2B的集成

B2B 指的是Business to Business,as in businesses doing business with other businesses,商家(泛指企业)对商家的电子商务,即企业与企业之间通过互联网进行产品、服务及信息的交换。通俗的说法是指进行电子商务交易的供需双方都是商家(或企业、公司),她们使用了Internet的技术或各种商务网络平台,完成商务交易的过程。

Web Service是B2B集成成功的关键。通过Web Service,公司可以只需把关键的商务应用”暴露”给指定的供应商和客户,就可以了,Web Service运行在Internet上,在世界任何地方都可轻易实现,其运行成本就相对较低。Web Service只是B2B集成的一个关键部分,还需要许多其它的部分才能实现集成。 用Web Service来实现B2B集成的最大好处在于可以轻易实现互操作性。只要把商务逻辑”暴露”出来,成为Web Service,就可以让任何指定的合作伙伴调用这些商务逻辑,而不管他们的系统在什么平台上运行,使用什么开发语言。这样就大大减少了花在B2B集成上的时间和成本。

4、软件和数据重用

Web Service在允许重用代码的同时,可以重用代码背后的数据。使用Web Service,再也不必像以前那样,要先从第三方购买、安装软件组件,再从应用程序中调用这些组件;只需要直接调用远端的Web Service就可以了。另一种软件重用的情况是,把好几个应用程序的功能集成起来,通过Web Service “暴露”出来,就可以非常容易地把所有这些功能都集成到你的门户站点中,为用户提供一个统一的、友好的界面。 可以在应用程序中使用第三方的Web Service 提供的功能,也可以把自己的应用程序功能通过Web Service 提供给别人。两种情况下,都可以重用代码和代码背后的数据。

从以上论述可以看出,Web Service 在通过Web进行互操作或远程调用的时候是最有用的。不过,也有一些情况,Web Service根本不能带来任何好处,Web Service有一下缺点:

1、 单机应用程序

目前,企业和个人还使用着很多桌面应用程序。其中一些只需要与本机上的其它程序通信。在这种情况下,最好就不要用Web Service,只要用本地的API就可以了。COM非常适合于在这种情况下工作,因为它既小又快。运行在同一台服务器上的服务器软件也是这样。当然Web Service 也能用在这些场合,但那样不仅消耗太大,而且不会带来任何好处。

2、 局域网的一些应用程序

在许多应用中,所有的程序都是在Windows平台下使用COM,都运行在同一个局域网上。在这些程序里,使用DCOM会比SOAP/HTTP有效得多。与此相类似,如果一个.net程序要连接到局域网上的另一个.net程序,应该使用.net Remoting。其实在.net Remoting中,也可以指定使用SOAP/HTTP来进行Web Service 调用。不过最好还是直接通过TCP进行RPC调用,那样会有效得多。

1.3、XML Web Service的应用

1.最初的 XML Web Service 通常是可以方便地并入应用程序的信息来源,如股票价格、天气预报、体育成绩等等。

2.以 XML Web Service 方式提供现有应用程序,可以构建新的、更强大的应用程序,并利用 XML Web Service 作为构造块。

例如,用户可以开发一个采购应用程序,以自动获取来自不同供应商的价格信息,从而使用户可以选择供应商,提交订单,然后跟踪货物的运输,直至收到货物。而供应商的应用程序除了在Web上提供服务外,还可以使用XML Web Service检查客户的信用、收取货款,并与货运公司办理货运手续。

  • WebService的框架JWS、Axis和CXF 比较

1、JWS是Java语言对WebService服务的一种实现,用来开发和发布服务。而从服务本身的角度来看JWS服务是没有语言界限的。但是Java语言为Java开发者提供便捷发布和调用WebService服务的一种途径。

2、Axis2是Apache下的一个重量级WebService框架,准确说它是一个Web Services / SOAP / WSDL 的引擎,是WebService框架的集大成者,它能不但能制作和发布WebService,而且可以生成Java和其他语言版WebService客户端和服务端代码。这是它的优势所在。但是,这也不可避免的导致了Axis2的复杂性,使用过的开发者都知道,它所依赖的包数量和大小都是很惊人的,打包部署发布都比较麻烦,不能很好的与现有应用整合为一体。但是如果你要开发Java之外别的语言客户端,Axis2提供的丰富工具将是你不二的选择。

3、XFire是一个高性能的WebService框架,在Java6之前,它的知名度甚至超过了Apache的Axis2,XFire的优点是开发方便,与现有的Web整合很好,可以融为一体,并且开发也很方便。但是对Java之外的语言,没有提供相关的代码工具。XFire后来被Apache收购了,原因是它太优秀了,收购后,随着Java6 JWS的兴起,开源的WebService引擎已经不再被看好,渐渐的都败落了。

4、CXF是Apache旗下一个重磅的SOA简易框架,它实现了ESB(企业服务总线)。CXF来自于XFire项目,经过改造后形成的,就像目前的Struts2来自WebWork一样。可以看出XFire的命运会和WebWork的命运一样,最终会淡出人们的视线。CXF不但是一个优秀的Web Services / SOAP / WSDL 引擎,也是一个不错的ESB总线,为SOA的实施提供了一种选择方案,当然他不是最好的,它仅仅实现了SOA架构的一部分。
基于以上的认识,我们可以得知,虽然有了Java6,但是我们还可以选择Axis2、XFire、CXF等。我们不能指望有了Java6 JWS,就能异想天开去实施SOA。如果要与别的语言交互,也许我们还有赖于Axis2等等,当然这不是唯一选择,仅仅是一种可供选择的方案。
还有,目前很多企业的应用还是基于Java5的,而Java5的项目不会瞬间都升级到Java6,如果要在老项目上做扩展,我们还有赖于其他开源的WS引擎。

对于现在的应用程序的迁移,如果你的应用程序是稳定而成熟的,并且在可预知的未来的情况下,只要很少的一些需求变更要做的话,那么保存你的体力,不要去做“劳民伤财“的迁移工作了。
如果你的现有应用程序BUG缠身,性能,功能等等都一片糟糕的话,那就要考虑迁移了,那选哪个框架呢?先比较一下它们的不同之处:

  1、Apache CXF 支持 WS-Addressing、WS-Policy、WS-RM、WS-Security和WS-I BasicProfile
  2、Axis2 支持 WS-Addressing、WS-RM、WS-Security和WS-I BasicProfile,WS-Policy将在新版本里得到支持
  3、Apache CXF 是根据Spring哲学来进行编写的,即可以无缝地与Spring进行整合
  4、Axis2 不是
  5、Axis2 支持更多的 data bindings,包括 XMLBeans、JiBX、JaxMe 和 JaxBRI,以及它原生的 data binding(ADB)。
  6、Apache CXF 目前仅支持 JAXB 和 Aegis,并且默认是 JAXB 2.0,与 XFire 默认是支持 Aegis 不同,XMLBeans、JiBX 和 Castor 将在 CXF 2.1 版本中得到支持,目前版本是 2.0.2
  7、Axis2 支持多种语言,它有 C/C 版本。
  8、Apache CXF 提供方便的Spring整合方法,可以通过注解、Spring标签式配置来暴露Web Services和消费Web Services

如何抉择:
1、如果应用程序需要多语言的支持,Axis2 应当是首选了;
2、如果应用程序是遵循 Spring 哲学路线的话,Apache CXF 是一种更好的选择,特别对嵌入式的 Web Services 来说;
3、如果应用程序没有新的特性需要的话,就仍是用原来项目所用的框架,比如 Axis1,XFire,Celtrix 或 BEA 等等厂家自己的 Web Services 实现,就别劳民伤财了。

转自cnblogs

发表在 卓越运营 | 【转】webservice接口和http接口(API接口)的区别已关闭评论

【转】ubuntu18自启动执行脚本

ubuntu-18.04不能像ubuntu14一样通过编辑rc.local来设置开机启动脚本,通过下列简单设置后,可以使rc.local重新发挥作用。1、建立rc-local.service文件

1sudo vi /etc/systemd/system/rc-local.service

2、将下列内容复制进rc-local.service文件

1234567891011121314[Unit]
Description=/etc/rc.local
CompatibilityConditionPathExists=/etc/rc.local 

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
 [Install]
WantedBy=multi-user.target

3、创建文件rc.local  

1sudo vi /etc/rc.local

4、将下列内容复制进rc.local文件

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will “exit 0” on success or any other# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
echo “看到这行字,说明添加自启动脚本成功。” > /usr/local/test.log
exit 0

5、给rc.local加上权限

1sudo chmod +x /etc/rc.local

6、启用服务

1sudo systemctl enable rc-local

7、启动服务并检查状态

12sudo systemctl start rc-local.servicesudo systemctl status rc-local.service

8、重启并检查test.log文件

1cat /usr/local/test.log 
发表在 卓越运营 | 【转】ubuntu18自启动执行脚本已关闭评论

Python中赋值、浅拷贝与深拷贝

Python中关于对象复制有三种类型的使用方式,赋值、浅拷贝与深拷贝。他们既有区别又有联系,刚好最近碰到这一类的问题,研究下。

一、赋值

        在python中,对象的赋值就是简单的对象引用,这点和C++不同。如下:        

    a = [1,2,3,”hello”,[“python”,”C++”]]

    b = a

    print a==b #True

        这种情况下,b和a是一样的,他们指向同一片内存,b不过是a的别名,是引用。我们可以使用a与b是否相同来判断,返回True,表明他们地址相同,内容相同。

        赋值操作(包括对象作为参数、返回值)不会开辟新的内存空间,它只是复制了新对象的引用。也就是说,除了b这个名字以外,没有其它的内存开销。

        修改了a,就影响了b;同理,修改了b就影响了a。

    a = [1,2,3,”hello”,[“python”,”C++”]]

    b = a

    b.append(“ADD”)

    print “a=”,a,”b=”,b

#a=[1, 2, 3, ‘hello’, [‘python’, ‘C++’], ‘ADD’] b=[1, 2, 3, ‘hello’, [‘python’, ‘C++’], ‘ADD’]

二、浅拷贝(shallow copy)

        浅拷贝会创建新对象,其内容是原对象的引用。

        浅拷贝有三种形式:切片操作,工厂函数,copy模块中的copy函数。比如对上述a:        

        1、切片操作:b = a[:]   或者 b = [each for each in a]

        2、工厂函数:b = list(a)

        3、copy函数:b = copy.copy(a)

        浅拷贝产生的b不再是a了,使用is可以发现他们不是同一个对象,使用id查看,发现它们也不指向同一片内存。但是当我们使用 id(x) for x in a 和 id(x) for x in b 时,可以看到二者包含的元素的地址是相同的。

        在这种情况下,a和b是不同的对象,修改b理论上不会影响a。比如b.append([4,5])。

    a = [1,2,3,”hello”,[“python”,”C++”]]

    b = a[:]

    b.append(“ADD”)

    print “a”,a,”b”,b

#a [1, 2, 3, ‘hello’, [‘python’, ‘C++’]] b [1, 2, 3, ‘hello’, [‘python’, ‘C++’], ‘ADD’]

        但是要注意,浅拷贝之所以称为浅拷贝,是它仅仅只拷贝了一层,在a中有一个嵌套的list,如果我们修改了它,情况就不一样了。

        a[4].append(“C”)。查看b,你将发现b也发生了变化。这是因为,你修改了嵌套的list。修改外层元素,会修改它的引用,让它们指向别的位置,修改嵌套列表中的元素,列表的地址并为发生变化,指向的都是同一个位置。

三、深拷贝(deep copy)

        深拷贝只有一种形式,copy模块中的deepcopy函数。

        和浅拷贝对应,深拷贝拷贝了对象的所有元素,包括多层嵌套的元素。因而,它的时间和空间开销要高。

        同样对la,若使用b = copy.deepcopy(a),再修改b将不会影响到a了。即使嵌套的列表具有更深的层次,也不会产生任何影响,因为深拷贝出来的对象根本就是一个全新的对象,不再与原来的对象有任何关联。

四、关于拷贝操作的警告

        1、对于非容器类型,如数字,字符,以及其它“原子”类型,没有拷贝一说。产生的都是原对象的引用。

        2、如果元组变量值包含原子类型对象,即使采用了深拷贝,也只能得到浅拷贝。

———————

文章原文:https://blog.csdn.net/lovelyaiq/article/details/55102518

发表在 互联网+, 卓越运营, 大数据分析, 开发日志 | Python中赋值、浅拷贝与深拷贝已关闭评论

pip install的时候报错timed out

安装包的时候报错,执行:pip install pyinstaller

问题:

File “c:\python\python35\lib\site-packages\pip\_vendor\requests\packages\urllib3\response.py”, line 357, in stream

  data = self.read(amt=amt, decode_content=decode_content)

File “c:\python\python35\lib\site-packages\pip\_vendor\requests\packages\urllib3\response.py”, line 324, in read

  flush_decoder = True

File “c:\python\python35\lib\contextlib.py”, line 77, in __exit__

  self.gen.throw(type, value, traceback)

File “c:\python\python35\lib\site-packages\pip\_vendor\requests\packages\urllib3\response.py”, line 237, in _error_catcher

  raise ReadTimeoutError(self._pool, None, ‘Read timed out.’)

p._vendor.requests.packages.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host=’pypi.python.org’, port=443): Read timed out.

解决:

修改超时时间:

pip –default-timeout=1000 install -U pip

———————

来源:https://blog.csdn.net/jeff_/article/details/71025674

发表在 卓越运营, 大数据分析 | pip install的时候报错timed out已关闭评论

OpenTsdb官方文档中文版—-聚合器

OpenTSDB旨在在查询执行的过程中有效地组合多个不同的时间序列。原因在于:当用户查看他们的数据,他们通常会从高层的角度开始提问,例如“数据中心的总吞吐量是多少”或“当前地区用电量是多少”。在查看到这些高层次的值之后,可能会出现一个或多个值,以便用户深入查看更细化的数据集,例如“我的LAX数据中心每台主机的吞吐量是多少”。我们希望能够轻松地回答这些高层次的问题,也仍然允许深入了解更多的细节。
  但是,如何将多个单独的时间序列合并成一系列的数据?聚合函数提供了将不同时间序列合并成一个的数学方法。过滤器用于按标签对结果进行分组,然后将聚合应用与每个分组。聚合类似于SQL的Group By子句,其中用户选择预定义的聚合函数将多个记录合并为单个结果。但是,在TSD中,按照每个时间戳分组聚合一系列记录为一组。
  每个聚合器都有两个组件:

  • 函数:应用的数学计算方法,如将所有的值累加在一起,计算出平均值或者筛选出最高(大)值。
  • 插值:处理缺失值的一种方法。例如将时间序列A在T1有值,但时间序列B没有值。
      本章将重点介绍在group by上下文中如何使用聚合,例如:即合并多个时间序列为一个时。另外,可以使用聚合器对时间序列进行降采样(即返回一组分辨率较低的结果)。有关更多信息,请参阅降采样。聚合  将每个时间序列集合聚合或者分组到一个中时,每个时间序列中的时间戳都对齐。然后对于每个时间戳,所有时间序列中的值将聚合为一个新的数值。也就是说,聚合将会在每个时间戳的时间序列上工作。将原始数据视作矩阵或者表,如以下示例所示,该图说明了sum聚合器在两个时间序列上的工作原理,A与B合并生成新的Output时间序列。
时间序列T0T0+10sT0+20sT0+30sT0+40sT0+50s
A551015205
B1052015100
Output15151030305

  对于时间戳T0的数据点A和B进行求和,即5+10=15,在SQL中:

select sum(value) from ts_table group by timestamp

插值

  在上面的例子中,时间序列A和B每个时间戳都有数据点,他们排列整齐。然而,当两个序列不会排队时会发生什么?同步所有数据源并同时进行写入可能很困难,有时甚至是不希望的。例如,如果我们有10,000个服务器每5分钟发送100个系统指标标准,那么将在一秒钟内突发10M的数据点。我们需要一个非常强大的网络和群集来适应这种流量。更不用说系统会闲置4分59秒。相反,随着时间的推移张开写入更有意义,因此我们平均每秒写入3,333次写入,以减少对硬件和网络的要求。

OpenTsdb官方文档中文版----聚合器

  如何汇总聚合或找到一个不存在的数值的平均值?第一步就是返回有效的数据点并完成它。然而,如果像上面那样处理了数千个简单未对其的数据点的数据源呢?例如:下图展示了未对齐写入的时间序列,引起的锯齿状线条令人困惑:

  • 缺失数据:
    通过“缺失”,只是表示时间序列在给定的时间戳出没有数据点。通常,数据在请求的时间戳之前或者之后简单地进行时间移位,但如果源或TSD遇到错误并且数据未被记录,它实际上可能会丢失。一些时间序列数据库可能允许在时间戳中用NaN存储一个表示不可记录的值,但OpenTSDB不允许这样做。

  或者,可以简单的忽略任意缺少数据的给定时间戳的所有时间序列的数据点。但是,如果有两个时间序列,并且它们只是简单的未对齐,即使在存储中有正常的数据,查询也会返回一个空的数据集,所以这不一定非常有用。
  另外一个选项是定义一个标量值(如0或者Long型的最大值),以便在数据点丢失时使用。OpenTSDB2.0和更高版本提供了一些聚合函数,用于替代丢失数据点的标量值,实际上,上图是使用zimsum聚合器生成的,该聚合使用0替换未对齐的值。当处理不同值的时间序列时,这种替代可能非常有用,例如在给定时间内的总销售数量,但在处理平均值或验证可视化图表看起来不错(平缓)时不起作用。
  OpenTSDB提供的一个解决方案是使用定义良好的插值数值分析方法猜测该时间点的值。插值使用现有的时间序列数据点来计算所需时间戳的最佳猜测值。使用OpenTSDB的线性插值,可以平滑未对齐的图,得到:

OpenTsdb官方文档中文版----聚合器

  对于一个数值例子,看看这两个时间序列,其中源没20秒发出一个值,数据简单的偏移10秒:

时间序列T0T0+10sT0+20sT0+30sT0+40sT0+50sT0+60s
Ana5na15na5na
B10na20na10na20

  当OpenTSDB计算聚合时,它会从任何序列的第一个数据点开始,在这种情况下,它将是B序列的t0数据点。我们需要时间序列A在t0的值,但此处没有任何数据。我们知道时间序列A在t0+10秒有数据值。但由于在此之前我们没有任何值,所以我们不能猜测它会是什么。因此,我们只能返回时间序列B的值。

  接下来我们在时间戳t0+10秒,请求时间序列B在t0+10秒的值,但是没有。但是时间序列B在t0+20秒有一个值,同时在t0也有一个值,因此我们现在可以计算猜测t0+10秒的值。线性插值的公式是y=y0+(y1-y0)((x-x0)/(x1-x0)),对序列B来说,y0=10, y1=20, x=t0+10(或10), x0=t0(或0), x1=t0+20(或20),因此:y=10+(20-10)((10-0)/(20-0))=15。因此序列B在t0+10秒给我们一个估计值15。
对于作为查询的一部分返回的每个序列找到数据点的每个时间戳都会继续进行迭代。使用sum聚合器生成的结果序列将如下所示:

时间序列T0T0+10sT0+20sT0+30sT0+40sT0+50sT0+60s
Ana5na15na5na
B10na20na10na20
插值A1010
插值B151515
B10na201510na20
Summed Result10203020202020
OpenTsdb官方文档中文版----聚合器

原文表格如下:

OpenTsdb官方文档中文版----聚合器
OpenTsdb官方文档中文版----聚合器

  更多示例:
 对于图形倾斜我们有以下示例。在OpenTSDB中记录了一个虚构的指标m。“sum of m”是由查询start=1h-ago&m=sum:m产生的顶部的蓝线。它是由红线host=foo和绿线host=bar的和组成的。

  从上面的图像看起来很直观,如果“叠加”红线和绿线,会得到蓝线。在任何离散的时间点,蓝线的值等于当时红线值和绿线值的和。如果没有插值,会得到一些比较不直观的东西,这样很难理解,而且它也没有那么有意义和有用。

OpenTsdb官方文档中文版----聚合器

  注意18:46:48蓝线如何下降到绿色数据点。不需要成为一名数学家,也不需要高级数学课程才能看到需要进行插值,才能将多个时间序列正确的聚合在一起并获得有意义的结果。
  目前OpenTSDB主要支持线性插值(缩写”lerp”)以及一些简单的替换0或最大值或最小值的聚合器。欢迎大家添加其他插值算法来修补程序。
  插值仅在查询时发现多个时间序列与查询匹配时执行。许多指标采集系统在写入是进行插值,以便您永远不会记录原始值。OpenTSDB存储原始值,并且可以随时检索它。
  这是来自邮件列表的另一个稍微复杂的例子,描述了多个时间序列按照平均值聚合的情况:

  带有三角形的粗蓝线是根据查询(start=1h-ago&m=avg:duration_seconds)具有多个时间序列avg函数的聚合。正如我们所看到的,由此产生的时间序列在其聚合的所有基础时间序列的每个时间戳上都有一个数据点,并且该数据点是通过取得该时间戳的所有时间序列值的平均值来计算的。对于紫色方形的孤独数据点也是如此,这样将暂时提高平均值知道下个数据点。

注意:
  聚合函数根据输入数据点返回整数或者双精度值。如果两个原值在存储中均为整数,则计算结果将为整数。这意味着由计算得到的任何小数值将被删除,不会发生舍入。如果任一数据点是浮点值,则结果将是浮点数。但是如果启用降采样或者Rate,结果将始终为浮点数。

降采样

  如上所述,插值是处理丢失数据的一种手段。但有些用户不喜欢线性插值,它是一种产生lie数据的方式,会产生幻像值。相反,处理未对齐值的另一种方法是通过降采用。例如:源每分钟报告一个值,但是在那一分钟内他们会发生时间偏移,那么对于源数据中的每个查询,在1分钟内提供一次降采用。这将在每个时间序列有显著的值,使用与插值相同的时间戳大多是可以避免的。当降采样的桶丢失一个值时,插值仍然会发生。
  有关避免插值的详细信息和示例,请参见降采样。

注意:
  总体来说,对于包含多个时间序列的每个查询进行降采样是一个很好的理想选择 。

可用聚合器

  以下是对OpenTSDB中可用的聚合函数描述。请注意,有些应该只用于分组,其他则用于降采样。

聚合器TSD版本描述插值
avg1.0数据点平均值线性插值
count2.2集合中原始数据点的数量0替换缺失值
dev1.0计算标准差线性插值
Ep50r32.2使用R-3方法计算估计的50%线性插值
Ep50r72.2使用R-7方法计算估计的50%线性插值
Ep75r32.2使用R-3方法计算估计的75%线性插值
Ep75r72.2使用R-7方法计算估计的75%线性插值
Ep90r32.2使用R-3方法计算估计的90%线性插值
Ep90r72.2使用R-7方法计算估计的90%线性插值
Ep95r32.2使用R-3方法计算估计的95%线性插值
Ep95r72.2使用R-7方法计算估计的95%线性插值
Ep99r32.2使用R-3方法计算估计的99%线性插值
Ep99r72.2使用R-7方法计算估计的99%线性插值
Ep999r32.2使用R-3方法计算估计的999%线性插值
Ep999r72.2使用R-7方法计算估计的999%线性插值
first2.3返回集合中的第一个数据点。仅仅对降采样有用,对聚合无用不定
last2.3返回集合中的最后一个数据点。仅仅对降采样有用,对聚合无用不定
mimmin2.0筛选最小的数据点线性插值
mimmax2.0筛选最大的数据点线性插值
min1.0筛选最小的数据点线性插值
max1.0筛选最大的数据点线性插值
none2.3通过所有时间序列的聚合跳过组0替换缺失值
p502.3计算50%线性插值
p752.3计算75%线性插值
p902.3计算90%线性插值
p952.3计算95%线性插值
p992.3计算99%线性插值
p9992.3计算999%线性插值
sum1.0将数据点一起求和线性插值
zimsum1.0将数据点一起求和0替换缺失值

  获取百分比计算,阅读维基百科文章。对高基数的计算,使用估计百分比性能更好。

Avg

  计算降采样桶或跨多个时间序列所有值的平均值。该函数将在事件序列上执行线性插值。这对于查看gauge指标非常有用。
注意:
  即使计算通常会导致浮点值,但如果数据点以整数记录,则会返回一个整数,从而失去一些精度。

Count

 返回存储在序列或者范围中的数据点的数量。当用于聚合多个序列是,将使用0替换缺失值。与将采样一起使用时,它将反映每个降采样桶中数据点的数量。用于分组聚合时,反映了给定时间的值与时间序列的数量。

Dev

  计算一个桶或时间序列的标准差。该函数将在事件序列上执行线性插值。这对于查看gauge指标非常有用。
注意:
  即使计算通常会导致浮点值,但如果数据点以整数记录,则会返回一个整数,从而失去一些精度。

Estimated Percentiles

  使用算法选择计算各种百分比。这些对于有很多数据点的序列很有用,因为有些数据可能会被踢出计算。用于聚合多个序列时,该函数将执行线性插值。详情请参阅维基百科。实现是通过Apache Math库实现的。

First &Last

  这两个聚合器将返回降采样间隔中的第一个或最后一个数据点。例如,如果降采样桶由序列2, 6, 1, 7组成,那么first聚合器将返回2(原文为1),last聚合器将返回7。注意该聚合器仅仅对降采样有用。
警告:
  当用作group-by聚合器时,结果是不确定的,因为从存储中检索读取并保存在内存中的时间序列排序从TSD到TSD或从执行到执行不一致。

Min

  返回所有时间序列或时间范围内最小的数据点。该函数将在事件序列上执行线性插值。查看gauge指标的下限很有用处。

Max

  与min相反,返回所有时间序列或时间范围内最大的数据点。该函数将在事件序列上执行线性插值。查看gauge指标的上限很有用处。

MimMin

  “缺失最小值时的最大值”函数仅返回所有时间序列或时间范围内的最小数据点。该函数不会执行插值,而是会返回指定的数据类型的最大值(如果值缺失)。这将返回整数Long.MaxValue或浮点值Double.MaxValue。详情请参阅原始数据类型。这对于查看gauge指标的下限非常有用。

MimMax

  “缺失最大值时的最大值”函数仅返回所有时间序列或时间范围内的最大数据点。该函数不会执行插值,而是会返回指定的数据类型的最小值(如果值缺失)。这将返回整数Long.MinValue或浮点值Double.MinValue。详情请参阅原始数据类型。这对于查看gauge指标的上限非常有用。

None

  通过聚合跳过组。此聚合器对于从存储中获取原始数据非常有用,因为它将为每个匹配过滤器的时间序列返回一个结果集。请注意:查询将在与降采样器一起使用时引发异常。

Percentiles

  计算各种百分比。用于聚合多个序列时,该函数将执行线性插值。实现是通过Apache Math库实现的。

Sum

  如果降采样,计算所有时间序列或时间范围内的所有数据点的总和。它是GUI的默认聚合函数,因为它在组合多个时间序列(例如gauges或count)时通常最有用。当数据点无法排列时,它执行线性插值。如果有不同序列的值,你又想求和时不需要插值,看一下zimsum函数。

ZimSum

  根据所有时间序列或时间范围内指定的时间戳计算所有数据点的总和。此函数不能进行插值,而是一个用0替代缺失的数据点。这在使用离散值时很有用。

聚合器列表

  在启用HTTP API的TSD中调用HTTP接口/api/aggregators,将列出TSD实现的聚合器列表。

发表在 卓越运营 | OpenTsdb官方文档中文版—-聚合器已关闭评论

西门子助力大众工业云

互联网技术的快速发展,给企业的管理和生产方式带来了很大改变,特别是企业的数字化。所谓数字化转型就是在了解业务痛点和业务需求后,创造更易用、更友好、功能更符合需求的上层应用;同时结合人工智能、大数据、云计算等技术手段,理解数据及其可以产生的价值,实现业务需求。为提高管理和生产效率同时顺应科技发展,2019年大众汽车将整合122个工厂的机械设备等生产数据并接入亚马逊云,并以此为基础联合西门子共建大众工业云。122个工厂的生产数据接入大众工业云平台后,通过云平台的计算功能,分析生产数据得到生产运营情况,为管理和生产提供更有效的参考意见。在进入主题之前对云计算和MindSphere做简单介绍:

什么是云计算 

云计算通过 Internet 云服务平台按需提供计算能力、数据库存储、应用程序和其他 IT 资源,采用按需支付定价模式。云计算包含三个主要类型:基础设施即IaaS、平台即PaaS 和软件即SaaS。无论是拥有数百万用户应用程序,还是为业务提供运营支持的需求,通过选择合适的云计算类型,云服务平台都可以帮助企业实现快速访问,并且降低成本。通过云计算,您无需在硬件方面投入过多,并且不需再花大量时间来维护和管理这些硬件。

图片来源西门子官网

云计算的优势

与其盲目地投入资金购买服务器等设备和技术搭建数据中心,不如通过云服务平台帮您实现IT资源需求。您只有在使用计算资源时付费,且只需按您的使用量付费。通过云计算,可以帮您降低成本,因为云平台会汇集成千上万的用户,通过规模经济的优势,用户的云计算成本将更低。依照传统方式,在建数据中心之前,往往需要估计基础设施容量,以避免出现昂贵的闲置资源,同时也需要考虑扩容的问题。而利用云计算,这些问题都不会出现。您可以访问任意规模的资源,可多可少,并根据需要扩展或缩减,一切只要几分钟就能完成。

在云计算环境中,IT 资源只需要简单的操作就能配置到位,通过云计算平台,可在较短的时间内实现在全世界的多个区域部署您的应用程序,把以往开发人员需要花费数周的时间缩短到到几分钟,节省了大量的时间。因为用于试验和开发的成本和时间明显减少,研发人员有更多的时间和资金做尝试和创新,增加了组织的创新性。

图片来源西门子官网

MindSphere数字化应用中心

在数字化转型的大背景下,西门子MindSphere数字化应用中心应运而生。目前,针对不同的业务领域,西门子已在全球超过50处设立了MindSphere数字化应用中心。在中国,西门子已分别在北京、上海、苏州和香港地区针对工业、发电、交通和智慧城市业务领域设立了5个Mindphere数字化应用中心。2019年3月新设立的中心是西门子在中国设立的第6个MindSphere数字化应用中心,也是首个面向智能基础设施的MindSphere数字化应用中心。基于MindSphere,该数字化应用中心将在共创的环境下,发掘客户需求,并将行业知识和物联网平台技术融合在一起,汇聚来自构架解决方案、通讯和软件领域的专家,以及相关技术专家进行研讨和应用开发,通过数字化解决方案推动企业乃至行业的业务转型,从而创造更多的业务价值

共建大众工业云

3月29日,西门子和大众汽车联合宣布,西门子将成为大众工业云的合作伙伴。在与大众汽车的合作中,西门子将提供其在自动化领域、机械设备以及工业物联网等方面的全面专长。西门子将为大众汽车122个工厂的机械设备、生产系统数据等实现工业上云。数据上云后,122个工厂的机械设备等生产情况将实现透明化,为大众汽车提高生产效率奠定技术基础。另外,西门子将MindSphere物联网系统应用程序扩展到大众工业云上,凭借开放式物联网平台MindSphere,西门子将协助大众汽车集团发展工业云,利用MindSphere和自动化平台,更有效地将机械、生产系统和设备进行联网,使大众汽车、供应商以及机械制造商能高效地利用生产数据,提高生产效率与灵活性,进一步提升产品质量。有了MindSphere加入工业云,大众工业云的功能将逐渐完善,工业云上的功能将应用于大众汽车的所有工厂。除了MindSphere的应用和应用程序之外,西门子将为大众汽车提供工业边缘计算解决方案,这样生产数据将直接在机械设备端或生产过程中进行处理,最后传输至工业云,进一步优化复杂的生产流程,并提高大众工业云的数据质量。

保时捷全球执行董事会主席、大众汽车集团分管生产的管理董事会成员奥博穆博士(Oliver Blume)表示:西门子拥有杰出的数字化和工业专长,是大众汽车的强大的合作伙伴,期待通过西门子的加入,大众工业云将成为一个具备数字化功能的合作伙伴,为所有参与其中的公司带来效益。大众汽车、西门子将与设备供应商共同致力于开发工业云的功能和服务,并向所有的合作伙伴开放。

图片来源西门子官网

大众汽车(Volkswagen)Volkswagen是一家总部位于德国沃尔夫斯堡的汽车制造公司,也是世界四大汽车生产商之一的大众集团的核心企业。2016年位居《财富》世界500强第7位。

西门子德国西门子股份公司创立于1847年,是全球电子电气工程领域的领先企业。西门子自1872年进入中国,140余年来以创新的技术、卓越的解决方案和产品确立了在中国市场的领先地位。2015年(2014年10月1日至2015年9月30日),西门子在中国的总营业收入达到69.4亿欧元,拥有超过32000名员工。

发表在 卓越运营, 行业资讯 | 西门子助力大众工业云已关闭评论

【转】JAVA如何根据对象的某个属性对list进行排序

我们在实际的开发工作中,经常会碰到排序的问题,如题,我们如何针对List集合中的某一个属性进行排序

先举一个简单的例子:

package test;

import java.util.ArrayList;
import java.util.List;
import java.util.*;

public class Demo {

public static void main(String[] args) {


    List<String> list1 = new ArrayList<>();
    list1.add("3");
    list1.add("4");
    list1.add("1");
    list1.add("2");
    System.out.println("排序前--:"+list1.toString());
    Collections.sort(list1);
    System.out.println("排序前后--:"+list1.toString());


}

}
打印控制台信息:

排序的结果很理想

额  可是我们碰到的情况大部分都不会这么简单,哪会有这么简单的情况还让排序的

我们这样

编译不通过,原因

意思就是这个TestA类得继承Comparable,那为什么String可以直接比较呢,看一下String的源码发现:

String类也是实现了Comparable接口,

所以,可以这样做:

package test;
import java.util.ArrayList;
import java.util.List;
import java.util.*;

public class Demo {

public static void main(String[] args) {

    TestA testA1 = new TestA("老张", 3);
    TestA testA2 = new TestA("老李", 1);
    TestA testA3 = new TestA("老王", 2);
    List<TestA> list  = new ArrayList<>();
    list.add(testA1);
    list.add(testA2);
    list.add(testA3);
    System.out.println("排序前--:"+list.toString());
    Collections.sort(list, new Comparator<TestA>() {
        @Override
        public int compare(TestA o1, TestA o2) {
            //升序
            return o1.getAge().compareTo(o2.getAge());
        }
    });
    System.out.println("升序排序后--:"+list.toString());

    Collections.sort(list, new Comparator<TestA>() {
        @Override
        public int compare(TestA o1, TestA o2) {
            //升序
            return o2.getAge().compareTo(o1.getAge());
        }
    });
    System.out.println("降序排序后--:"+list.toString());

}
}

结果:

我们还可以用TestA类实现Comparable接口重写compareTo

package test;

public class TestA implements Comparable{
private String name;

private Integer age;

public TestA(String name, Integer age) {
    super();
    this.name = name;
    this.age = age;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public Integer getAge() {
    return age;
}

public void setAge(Integer age) {
    this.age = age;
}

@Override
public String toString() {
    return "TestA [name=" + name + ", age=" + age + "]";
}

@Override
public int compareTo(TestA o) {
    return this.age.compareTo(o.getAge());
}

}
结果:

转自CSDN,原文地址。

发表在 卓越运营 | 【转】JAVA如何根据对象的某个属性对list进行排序已关闭评论

【转】Ubuntu18.04 如何永久修改主机名?

Ubuntu在以前的发行版本中,直接修改/etc/hostname中的文本内容就可以完成主机名的修改。但在Ubuntu18.04版本中,好像不再生效,重启后会恢复为原先设置的主机名。

18.04版本下的修改方法如下:

1、$ sudo vi /etc/cloud/cloud.cfg,将preserve_hostname开关设置为true:

2、$ sudo vi /etc/hostname,修改主机名。

3、重启机器,完成主机名称的修改。


来源:简书

发表在 卓越运营 | 【转】Ubuntu18.04 如何永久修改主机名?已关闭评论

奶牛也爱软床

运动热的持续升温,给全球的运动器材行业带来商机,据统计全球跑步者花在装备上的费用约有150亿欧元,特别是运动鞋行业,因为即使是偶尔跑步的人也希望自己的鞋子能轻质减震,获得舒适的跑步体验。

跟传统运动鞋相比,现在的运动鞋是名副其实的高科技产品,它均结合了不同新型材料,性能较以往的运动鞋更加轻巧稳定。根据跑步风格、用户期望、跑步方法等需求因素,很多精准定位的运动鞋也应运而生。为满足用户多样化的需求,运行鞋制造商从未停止过在实验室的研发和创新。最新的制鞋材料、制鞋工艺再加上设计师的匠心独运,现在的运动鞋在性能和外观上臻于完善。来自压力测量板的压力测试、高速摄像机-记录下运动过程中从足跟到脚趾的每个动作细节,都将被用到运动鞋的设计研发过程中,目的只有一个——给用户带来舒适的跑步体验。

图片来源巴斯夫官网

运动鞋制造商-阿迪达斯一直在寻找前言的技术和创新材质,在 20 多年前,巴斯夫的材料专家就已经为这家总部设在德国赫佐格奥拉赫的公司提供支持。阿迪达斯采用巴斯夫全新发泡微球InfinergyTM 材料研制出了弹性和减震性性能优秀的跑鞋 Energy Boost。Energy Boost的亮点在于它的中底——由 Infinergy制成的中底可有效减轻跑步过程中对足部的冲击,为足部提供良好的减震性能。此外,Infinergy的高回弹特性可反馈给足部充足的能量,为跑步者带来独一无二的跑步体验。

Infinergy由发泡热塑性聚氨酯 (E-TPU) 构成,E-TPU 是由原始材料 TPU 颗粒发泡制成。巴斯夫材料与工艺专家 Uwe Keppeler 博士说:“TPU经过加压加热预处理后,原来 5 毫米大小的颗粒可以像爆米花一样膨胀。”在这个过程中,内含微型密闭气泡的椭圆形微球的体积将增大 10 倍。这些密闭气泡赋予Infinergy优秀的弹性和减震性能。有一个形象的比喻:每颗Infinergy可以被看成是一个小足球,它们含有的空气越多,弹性越好,每只Energy Boost中底由 约2500 颗Infinergy构成。在制鞋过程中,需要将Infinergy材质加工成所需的外形,这里用到的方法是热蒸汽法,在加热过程中Infinergy最外层轻微熔化并粘连成稳定形状,同时内部气孔结构不受影响。采用 Infinergy 制作的中底在压力测试下可被压缩到原来厚度的一半,压力消失后,泡沫又可迅速恢复到原来的形状,Energy Boost中底通过这样的方式吸收能量,然后将很大一部分能量反馈给跑步者- Infinergy 发泡微球实际上将跑鞋转化成了能量胶囊:足部离地时,有相当一部分能量被回馈给跑步者,很多跑步者都说Energy Boost是双有生命力的运动鞋。Infinergy 发泡微球在Energy Boost上体现的另一优点是——它不但轻巧,而且能在较大的温度范围内保持弹性,这样就保证了跑步者无论是在冰天雪地的冬天,还是烈日炎炎的夏天,都能体验到Energy Boost带来舒适体验。

图片来源巴斯夫官网  

近日,巴斯夫携手Longterm Concept以及知名设计师顾国彝倾力打造的全新运动休闲鞋X-Swift将亮相中国广州的CHINAPLAS 2019国际橡塑展。X-Swift集四种先进的巴斯夫创新材料于一体,采用最新自动化制鞋工艺制作而成,将时尚性和功能性完美结合,符合现代生活方式,是多用途、高性能鞋履消费者的最佳选择。X-Swift运动休闲鞋所使用的四种巴斯夫高性能材料各有千秋、相辅相成,可为用户提供良好的穿着体验:

  • 外底由Elastollan® 热塑性聚氨酯(TPU)制成,采用高抓地力底纹设计,可提供最大的面接触面积,增加摩擦力。
  • 中底由Elastopan® 高回弹聚氨酯制成,其舒适度及耐用性显著高于传统材料。
  • 中底辅以Elastopan制成的特殊透气内底,旨在为高性能鞋垫提供支撑。
  • X-Swift采用创新的两件式材料鞋面结构,使用了可持续合成皮革Haptex® 和由Freeflex™TPU制成的纤维。 这些材料之间的接缝细小,缝线精致,与脚部完美贴合,可为用户提供卓越的舒适度和性能表现。

轻巧、高弹、耐受度等这些特殊性质赋予了巴斯夫创新材料的广泛的用途,除在运动鞋材质的创新应用外,“奶牛软床”和儿童乐园的“丛林地带”缓冲区是这些创新材料的另外两个成功应用。

奶牛也爱软床

奶牛每天至少休息12 个小时,只有在得到充足休息的情况下奶牛乳房供血状况才最佳——这样就能够提高牛奶产量和质量。 采用 Infinergy 创新颗粒泡沫制成的奶牛床垫不仅柔软而且十分耐用,即使在长时间使用后也能保持弹性。这种床垫既能保证奶牛的睡眠质量也降低了农场主的投入成本。

 “丛林地带缓冲区

2012 年秋季,德国加尔米施-帕滕基兴儿童风湿症临床医学院与慕尼黑公司 Innovationsmanufaktur 联合打造的运动乐园正式启用。因为风湿患儿的关节不能过劳,乐园需要减震性能良好的地坪材质,巴斯夫创新材料为运动乐园的“丛林地带”的产生带来了可能。得益于创新材料出色的减震性,地坪能够有效减小儿童的下落冲击,在这里,小患者们可再次享受运动的乐趣。

我们能时刻感受创新材料带来的良好改变:舒适的跑步体验、奶牛的软床、减震性良好的地坪材质等。包括巴斯夫在内的化学品科技公司都竭力创新、不断突破材料性能极限,完善和丰富化学材料,最终这些化学材料在我们看到和看不到的地方正在悄悄发挥着作用,改变世界。

巴斯夫塑料添加剂为韩国仁川机场2号航站楼助力(图片来源巴斯夫官网)

Longterm Concept是一家总部位于台湾的行业领先的鞋履制造商,在1982年踏入鞋类制造业,历经无数次的时代变革后,公司致力于成为一家行业领先的科技制鞋公司。通过智能自动化生产与材料科学,发展制鞋行业循环经济,公司致力于推动制鞋行业迈向工业4.0,创造更加美好的明天。

发表在 卓越运营, 行业资讯 | 奶牛也爱软床已关闭评论