qemu-guest-agent詳解

qemu guest agent簡稱qga, 是運行在虛擬機內部的一個守護程序(qemu-guest-agent.service),他可以管理應用程序,執行宿主機發出的命令。

QEMU為宿主機和虛擬機提供了一個數據通道(channel,這個通道的兩端分別是在虛擬機內看到的串口和在宿主機上看到的unix socket文件。

   

宿主機與虛擬機內的qga通訊就擴展了對虛擬機的控制能力,例如在宿主機上獲取虛擬機的ip地址等。

   

libvrit提供了專門的 virDomainQemuAgentCommand API對應virsh qemu-agent-command命令)來和qemu-guest-agent通訊,

另外有些libvirt內置api也可以支持qga,例如rebootshutdown等。

   

下面的實踐分為兩種方式,虛擬機的channeltargetname使用org.qemu.guest_agent.0不是用org.qemu.guest_agent.0

兩種方式在libvirt和宿主機中的qemu-guest-agent中都有所不同。

   

【使用org.qemu.guest_agent.0

宿主機上libvirt的虛擬機xml配置channel

<channel type=’unix’>

  <source mode=’bind’ path=’/var/lib/libvirt/qemu/org.qemu.guest_agent.0/>

  <target type=’virtio’ name=‘org.qemu.guest_agent.0’/>

</channel>

   

注意這裏targetname要使用org.qemu.guest_agent.0

   

虛擬機內部:

yum install qemuguestagent

setenforce 0

systemctl restart qemuguestagent.service

   

在宿主機上測試功能:

virsh
virsh # qemu-agent-command centos ‘{“execute”:”guest-info”}’

virsh # qemu-agent-command centos ‘{“execute”:”guest-network-get-interfaces”}’

virsh # reboot –mode agent centos

   

上面的命令直接讀出了虛擬機中的ip地址信息。

   

【不使用org.qemu.guest_agent.0

如果在宿主機上libvirtxml配置channeltargetname不是org.qemu.guest_agent.0,例如下面的org.qemu.guest_agent.1

   

那麼在宿主機上的libvirt將不會建立與socket建立連接。在虛擬機上qemu-guest-agent服務也無法運行。

   

宿主機上的libvirtxml

<channel type=’unix’>

  <source mode=’bind’ path=’/var/lib/libvirt/qemu/org.qemu.guest_agent.1/>

  <target type=’virtio’ name=’org.qemu.guest_agent.1/>

</channel>

   

不使用org.qemu.guest_agent.0的情況下怎麼處理呢?

   

首先,在虛擬機內部通訊串口的名字變為了org.qemu.guest_agent.1,此時需要手動修改/lib/systemd/system/qemu-guest-agent.service文件,把所有的默認org.qemu.guest_agent.0改為用戶配置的名字org.qemu.guest_agent.1

   

其次,在宿主機上自己去連接socket文件:

[root@node2 ~]# socat unix-connect:/var/lib/libvirt/qemu/org.qemu.guest_agent.1 readline

{“execute”: “guest-info”}

   

【功能簡單介紹】

注:帶* 指的是win也支持

guest-sync-delimited*

宿主機發送一個int数字給qgaqga返回這個数字,並且在後續返回字符串響應中加入ascii碼為0xff的字符,
其作用是檢查宿主機與qga通信的同步狀態,主要用在宿主機上多客戶端與qga通信的情況下客戶端間切換過程的狀態同步檢查
比如有兩個客戶端ABqga發送給A的響應,由於A已經退出,目前B連接到qgasocket,所以這個響應可能被B收到,如果B連接到socket之後,立即發送該請求給qga,響應中加入了這個同步碼就能區分是A的響應還是B的響應;
qga返回宿主機客戶端發送的int数字之前,qga返回的所有響應都要忽略。

guest-sync*

與上面相同,只是不在響應中加入0xff字符

guest-ping*

Ping the guest agent, a non-error return implies success

guest-get-time*

獲取虛擬機時間(返回值為相對於1970-01-01 in UTCTime in nanoseconds.

guest-set-time*

設置虛擬機時間(輸入為相對於1970-01-01 in UTCTime in nanoseconds.

guest-info*

返回qga支持的所有命令

guest-shutdown*

關閉虛擬機(支持haltpowerdownreboot,默認動作為powerdown

guest-file-open

打開虛擬機內的某個文件(返迴文件句柄)

guest-file-close

關閉打開的虛擬機內的文件

guest-file-read

根據文件句柄讀取虛擬機內的文件內容(返回base64格式的文件內容)

guest-file-write

根據文件句柄寫入文件內容到虛擬機內的文件

……

  

   

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※別再煩惱如何寫文案,掌握八大原則!

※教你寫出一流的銷售文案?

※超省錢租車方案

FB行銷專家,教你從零開始的技巧

gulp壓縮html,css,js文件流程、監聽任務、使用gulp創建服務器、同時運行多個任務、反向代理

一、初始化

首先先做一個項目初始化,用來記錄你項目中用到的工具

再你項目文件下打開一個控制台,輸入命令 yarn init -y 進行初始化

 

輸入命令yarn add gulp -g  — 全局安裝gulp,這裏我提前已經安裝過了就不演示了,然後再輸入命令yarn add gulp -S 局部安裝,都安裝完成過後輸入命令 gulp -v,如果出現兩個版本號,就代表都安裝成功了

 

接着在你的項目文件夾下新建一個文件名為 gulpFile.js js文件,名字必須叫這個,官方規定的,用來寫gulp命令

 

好了,可以開始安裝壓縮工具進行壓縮了

 

 

 二、html壓縮

 

 安裝html壓縮工具,輸入命令 

yarn add gulp-htmlmin -D

安裝壓縮html的工具,安裝到開發環境,生產環境用不到

安裝完成過後打開初始化時生成的文件 package.json,開發環境有沒有你剛安裝的 gulp-htmlmin

 

 

 

 

 

 

 打開開始建的 gulpFile.js 文件,開始寫命令

const gulp = require('gulp') //引入gulp
const htmlmin = require('gulp-htmlmin') //引入html壓縮模塊
const path = { //方便管理路徑
    html: {
        src: 'src/**/*.html',
        dest: 'dist'
    }
}
gulp.task('html', () => { //創建任務,並命名任務名
    /*一個*表示所有文件,兩個*表示所有目錄*/
    return gulp.src(path.html.src) //打開讀取文件
        .pipe(htmlmin({
            removeComments: true, //清除HTML註釋
            collapseWhitespace: true, //壓縮HTML
            collapseBooleanAttributes: true, //省略布爾屬性的值 <input checked="true"/> ==> <input checked />
            removeEmptyAttributes: true, //刪除所有空格作屬性值 <input id="" /> ==> <input />
            removeScriptTypeAttributes: false, //刪除<script>的type="text/javascript"
            removeStyleLinkTypeAttributes: true, //刪除<style>和<link>的type="text/css"
            minifyJS: true, //壓縮頁面JS
            minifyCSS: true //壓縮頁面CSS
        })) //管道流操作,壓縮文件
        .pipe(gulp.dest(path.html.dest)) //指定壓縮文件放置的目錄
})

然後輸入命令

gulp html

執行壓縮

 

 

 像這樣就壓縮成功了

上面是 gulp3 寫法,gulp4 寫法:

const gulp = require('gulp') //引入gulp
const htmlmin = require('gulp-htmlmin') //引入html壓縮模塊
const path = { //方便管理路徑
    html: {
        src: 'src/**/*.html',
        dest: 'dist'
    }
}
const html = () => { //創建任務,並命名任務名
    /*一個*表示所有文件,兩個*表示所有目錄*/
    return gulp.src(path.html.src) //打開讀取文件
        .pipe(htmlmin({
            removeComments: true, //清除HTML註釋
            collapseWhitespace: true, //壓縮HTML
            collapseBooleanAttributes: true, //省略布爾屬性的值 <input checked="true"/> ==> <input checked />
            removeEmptyAttributes: true, //刪除所有空格作屬性值 <input id="" /> ==> <input />
            removeScriptTypeAttributes: false, //刪除<script>的type="text/javascript"
            removeStyleLinkTypeAttributes: true, //刪除<style>和<link>的type="text/css"
            minifyJS: true, //壓縮頁面JS
            minifyCSS: true //壓縮頁面CSS
        })) //管道流操作,壓縮文件
        .pipe(gulp.dest(path.html.dest)) //指定壓縮文件放置的目錄
}

module.exports = { //一定要以對象形式導出
    html
}

三、css壓縮

安裝css壓縮模塊,輸入命令

yarn add gulp-clean-css -D

 

 

 然後也在gulpFile.js文件里寫壓縮css的命令

const gulp = require('gulp') //引入gulp
const htmlmin = require('gulp-htmlmin') //引入html壓縮模塊
const cleanCss = require('gulp-clean-css') //引入css壓縮模塊
const path = { //方便管理路徑
    /*一個*表示所有文件,兩個*表示所有目錄*/
    html: {
        src: 'src/**/*.html',
        dest: 'dist'
    },
    css: {
        src: 'src/**/*.css',
        dest: 'dist'
    }
}

gulp.task('css', () => {
    return gulp.src(path.css.src)
        .pipe(cleanCss())
        .pipe(gulp.dest(path.css.dest))
})

輸入命令 gulp css 命令執行

 

 

 另外css還有一個很好用的模塊,它可以自動給需要兼容的css屬性加前綴,輸入命令安裝它

yarn add gulp-autoprefixer -D

安裝好了,引入模塊,調用即可

四、js壓縮

安裝js es6語法轉es5語法模塊,壓縮js模塊,輸入命令

yarn add -D gulp-babel @babel/core @babel/preset-env //es6語法轉es5
yarn add -D gulp-uglify //壓縮js

 

 

 同樣的打開 gulpFile.js 文件寫壓縮js的命令

const gulp = require('gulp') //引入gulp
const htmlmin = require('gulp-htmlmin') //引入html壓縮模塊
const cleanCss = require('gulp-clean-css') //引入css壓縮模塊
const autoprefixer = require('gulp-autoprefixer') //引入加前綴模塊
const babel = require('gulp-babel'), //引入es6轉es5模塊
    uglify = require('gulp-uglify') //引入js壓縮模塊
const path = { //方便管理路徑
    /*一個*表示所有文件,兩個*表示所有目錄*/
    html: {
        src: 'src/**/*.html',
        dest: 'dist'
    },
    css: {
        src: 'src/**/*.css',
        dest: 'dist'
    },
    js: {
        src: 'src/**/*.js',
        dest: 'dist'
    }
}
gulp.task('js', () => {
    gulp.src(path.js.src)
        .pipe(babel({
            presets: ['@babel/env'] //es6轉es5
        }))
        .pipe(uglify()) //執行壓縮
        .pipe(gulp.dest(path.js.dest))
})

輸入命令 gulp js 運行

五、監聽任務

監聽任務需要使用gulp4的寫法

const gulp = require('gulp') //引入gulp
const htmlmin = require('gulp-htmlmin') //引入html壓縮模塊
const cleanCss = require('gulp-clean-css') //引入css壓縮模塊
const autoprefixer = require('gulp-autoprefixer') //引入加前綴模塊
const babel = require('gulp-babel'), //引入es6轉es5模塊
    uglify = require('gulp-uglify') //引入js壓縮模塊
const path = { //方便管理路徑
    /*一個*表示所有文件,兩個*表示所有目錄*/
    html: {
        src: 'src/**/*.html',
        dest: 'dist'
    },
    css: {
        src: 'src/**/*.css',
        dest: 'dist'
    },
    js: {
        src: 'src/**/*.js',
        dest: 'dist'
    }
}



const css = () => {
    return gulp.src(path.css.src)
        .pipe(autoprefixer())
        .pipe(cleanCss())
        .pipe(gulp.dest(path.css.dest))
}
const js = () => {
    return gulp.src(path.js.src)
        .pipe(babel({
            presets: ['@babel/env'] //es6轉es5
        }))
        .pipe(uglify()) //執行壓縮
        .pipe(gulp.dest(path.js.dest))
}

const html = () => { //創建任務,並命名任務名
    return gulp.src(path.html.src) //打開讀取文件
        .pipe(htmlmin({
            removeComments: true, //清除HTML註釋
            collapseWhitespace: true, //壓縮HTML
            collapseBooleanAttributes: true, //省略布爾屬性的值 <input checked="true"/> ==> <input checked />
            removeEmptyAttributes: true, //刪除所有空格作屬性值 <input id="" /> ==> <input />
            removeScriptTypeAttributes: false, //刪除<script>的type="text/javascript"
            removeStyleLinkTypeAttributes: true, //刪除<style>和<link>的type="text/css"
            minifyJS: true, //壓縮頁面JS
            minifyCSS: true //壓縮頁面CSS
        })) //管道流操作,壓縮文件
        .pipe(gulp.dest(path.html.dest)) //指定壓縮文件放置的目錄
}
const watch = () => { //監聽文件,文件改變執行對應的任務
    gulp.watch(path.html.src, html)
    gulp.watch(path.css.src, css)
    gulp.watch(path.js.src, js)
}

module.exports = {
    html,
    js,
    css,
    watch
}

輸入命令 gulp watch 即可實現監聽

六、gulp創建服務器

輸入命令

yarn add gulp-connect -D

引入模塊

const connect = require('gulp-connect')

創建服務器

const server = () => {
    connect.server({ //創建服務器
        root: 'dist',//根目錄
        port: '2000',//端口號
        livereload:true//服務器熱更新
    })
}

導出模塊

module.exports = {
    html,
    js,
    css,
    watch,
    server
}

輸入命令 gulp server 就可以運行了

如果想直接打開首頁,可以輸入命令安裝open模塊

yarn add open -S

然後再任何位置寫入你想打開的網址

open('http://127.0.0.1:2000')

還有一個模塊也可以創建服務器

輸入命令安裝

yarn add gulp-webServer -D

 

 引入模塊

const    webserver = require('gulp-webserver')

創建服務器

const createServer = () => {
    return gulp.src('./dist')
        .pipe(webserver({ //創建服務器
            port:'3000', //端口號
            open:'/html', //默認打開路徑
            livereload:true //熱更新
        }))
}

七、同時運行多個任務

// 默認任務:default 我們可以把所有任務都放進default
// series 同步執行,先執行刪除dist任務,再執行其他任務
// parallel 異步執行(并行),不會互相影響的任務可以并行
module.exports.default = gulp.series(gulp.parallel(html,js,css,watch,server))

運行只需要寫 gulp 命令

如果想頁面實時更新的話,再想實時更新的任務後面加上

.pipe(connect.reload())

然後重啟服務器就ok了

八、反向代理

輸入命令

yarn add http-proxy-middleware -D

 

 引入模塊

const proxy = require('http-proxy-middleware')

創建反向代理

connect 創建的服務器要用函數創建代理

const server = () => {
    connect.server({ //創建服務器
        root: 'dist', //根目錄
        port: '2000', //端口號
        livereload: true, //服務器熱更新
        middleware: () => {
            return [
                proxy.createProxyMiddleware('/api', { //創建反向代理,請求已 /api 開頭就使用target的服務器
                    target: 'http://localhost',//需要代理的服務器
                    changeOrigin: true
                })
            ]
        }

    })
}

 webserver創建的服務器要用數組創建代理

const createServer = () => {
    return gulp.src('./dist')
        .pipe(webserver({ //創建服務器
            port: '3000', //端口號
            open: '/html', //默認打開路徑
            livereload: true, //熱更新
            middleware: [
                proxy.createProxyMiddleware('/api', { //創建反向代理,請求已 /api 開頭就使用target的服務器
                    target: 'http://localhost',
                    changeOrigin: true
                })
            ]
        }))
}

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※別再煩惱如何寫文案,掌握八大原則!

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※超省錢租車方案

※教你寫出一流的銷售文案?

網頁設計最專業,超強功能平台可客製化

科學計算:Python 分析數據找問題,並圖形化

對於記錄的數據,如何用 Python 進行分析、或圖形化呢?

本文將介紹 numpy, matplotlib, pandas, scipy 幾個包,進行數據分析、與圖形化。

準備環境

Python 環境建議用 Anaconda 發行版,下載地址:

  • 官方: https://www.anaconda.com/products/individual#Downloads
  • 清華源: https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/

Anaconda 是一個用於科學計算的 Python 發行版,已經包含了眾多流行的科學計算、數據分析的 Python 包。

可以 conda list 列出已有的包,會發現本文要介紹的幾個包都有了:

$ conda list | grep numpy
numpy                     1.17.2           py37h99e6662_0

$ conda list | grep "matplot\|seaborn\|plotly"
matplotlib                3.1.1            py37h54f8f79_0
seaborn                   0.9.0                    py37_0

$ conda list | grep "pandas\|scipy"
pandas                    0.25.1           py37h0a44026_0
scipy                     1.3.1            py37h1410ff5_0

如果已有 Python 環境,那麼 pip 安裝一下它們:

pip install numpy matplotlib pandas scipy
# pypi 鏡像: https://mirrors.tuna.tsinghua.edu.cn/help/pypi/

本文環境為: Python 3.7.4 (Anaconda3-2019.10)

準備數據

本文假設了如下格式的數據 data0.txt :

id, data, timestamp
0, 55, 1592207702.688805
1, 41, 1592207702.783134
2, 57, 1592207702.883619
3, 59, 1592207702.980597
4, 58, 1592207703.08313
5, 41, 1592207703.183011
6, 52, 1592207703.281802
...

CSV 格式:逗號分隔,讀寫簡單, Excel 可打開。

之後,我們會一起達成如下幾個目標:

  • CSV 數據, numpy 讀取與計算
  • data 列數據, matplotlib 圖形化
  • data 列數據, scipy 插值,形成曲線
  • timestamp 列數據, pandas 分析前後差值、每秒個數

numpy 讀取數據

numpy 可用 loadtxt 直接讀取 CSV 數據,

import numpy as np

# id, (data), timestamp
datas = np.loadtxt(p, dtype=np.int32, delimiter=",", skiprows=1, usecols=(1))
  • dtype=np.int32: 數據類型 np.int32
  • delimiter=",": 分隔符 “,”
  • skiprows=1: 跳過第 1 行
  • usecols=(1): 讀取第 1 列

如果讀取多列,

# id, (data, timestamp)
dtype = {'names': ('data', 'timestamp'), 'formats': ('i4', 'f8')}
datas = np.loadtxt(path, dtype=dtype, delimiter=",", skiprows=1, usecols=(1, 2))

dtype 說明可見: https://numpy.org/devdocs/reference/arrays.dtypes.html

numpy 分析數據

numpy 計算均值、樣本標準差:

# average
data_avg = np.mean(datas)
# data_avg = np.average(datas)

# standard deviation
# data_std = np.std(datas)
# sample standard deviation
data_std = np.std(datas, ddof=1)

print("  avg: {:.2f}, std: {:.2f}, sum: {}".format(
      data_avg, data_std, np.sum(datas)))

matplotlib 圖形化

只需四行,就能圖形化显示了:

import sys

import matplotlib.pyplot as plt
import numpy as np

def _plot(path):
  print("Load: {}".format(path))
  # id, (data), timestamp
  datas = np.loadtxt(path, dtype=np.int32, delimiter=",", skiprows=1, usecols=(1))

  fig, ax = plt.subplots()
  ax.plot(range(len(datas)), datas, label=str(i))
  ax.legend()
  plt.show()

if __name__ == "__main__":
  if len(sys.argv) < 2:
    sys.exit("python data_plot.py *.txt")
  _plot(sys.argv[1])

ax.plot(x, y, ...) 橫坐標 x 取的數據下標 range(len(datas))

完整代碼見文末 Gist 地址的 data_plot.py 。運行效果如下:

$ python data_plot.py data0.txt
Args
  nonzero: False
Load: data0.txt
  size: 20
  avg: 52.15, std: 8.57, sum: 1043

可以讀取多個文件,一起显示:

$ python data_plot.py data*.txt
Args
  nonzero: False
Load: data0.txt
  size: 20
  avg: 52.15, std: 8.57, sum: 1043
Load: data1.txt
  size: 20
  avg: 53.35, std: 6.78, sum: 1067

scipy 對數據插值

x, y 兩組數據,用 scipy 進行插值,平滑成曲線:

from scipy import interpolate

xnew = np.arange(xvalues[0], xvalues[-1], 0.01)
ynew = interpolate.interp1d(xvalues, yvalues, kind='cubic')

完整代碼見文末 Gist 地址的 data_interp.py 。運行效果如下:

python data_interp.py data0.txt

matplotlib 圖像化時如何配置、延遲、保存,可見代碼與註釋。

pandas 分析數據

這兒需要讀取 timestamp 列數據,

# id, data, (timestamp)
stamps = np.loadtxt(path, dtype=np.float64, delimiter=",", skiprows=1, usecols=(2))

numpy 計算前後差值,

stamps_diff = np.diff(stamps)

pandas 統計每秒個數,

stamps_int = np.array(stamps, dtype='int')
stamps_int = stamps_int - stamps_int[0]
import pandas as pd
stamps_s = pd.Series(data=stamps_int)
stamps_s = stamps_s.value_counts(sort=False)

辦法:把時間戳直接變整秒數,再 pandas 統計相同值。

完整代碼見文末 Gist 地址的 stamp_diff.py 。運行效果如下:

python stamp_diff.py data0.txt

matplotlib 圖形化時怎麼显示多個圖表,也可見代碼。

結語

本文代碼 Gist 地址: https://gist.github.com/ikuokuo/8629cc28079199c65e0eedb0d02a9e74

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※教你寫出一流的銷售文案?

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

※超省錢租車方案

※產品缺大量曝光嗎?你需要的是一流包裝設計!

我要穿越,干翻 “爛語言” JavaScript!

更多精彩文章,盡在碼農翻身

 

我是一個線程 

TCP/IP之大明郵差 

一個故事講完Https 

CPU 阿甘 

Javascript: 一個屌絲的逆襲 

微服務把我坑了

 如何降低程序員的工資? 

程序員,你得選准跑路的時間! 

兩年,我學會了所有的編程語言! 

一直CRUD,一直996,我煩透了,我要轉型 

字節碼萬歲! 

上帝託夢給我說:一切皆文件 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※超省錢租車方案

※別再煩惱如何寫文案,掌握八大原則!

※回頭車貨運收費標準

※教你寫出一流的銷售文案?

FB行銷專家,教你從零開始的技巧

「虹之松原」原來是海岸保安林 國寶級景點靠公私協力經營

環境資訊中心特約記者 廖靜蕙報導

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※教你寫出一流的銷售文案?

東協化學品法規因應策略與近況更新

轉載自2018年11月12日國際化學品政策宣導網

自台灣新南向政策上路以來,對於東協的投資持續增加,根據經濟部國貿局近5年(至2016年)的資料顯示,我國對新加坡的投資占比最高(47%),其次為越南(32%)。

根據2017年的財政部統計資料,東協為台灣化學品及塑膠與橡膠相關製品世界出口第二大市場,而化學品管理為國際各產業貿易中須關注的重要的法規,今年10月22日經濟部工業局主辦之「東協化學品管理因應策略宣導會」,特別邀請到新加坡化學工業產業協會(Singapore Chemical Industry Council Limited,SCIC)兩位資深業界講師,針對新加坡及東協國家化學品管理法規的進展及化學品全球調和制度(GHS)之管理機制進行說明。

新加坡以生命週期觀念建立化學管理框架

講師分享新加坡化學管理框架,主要由各主管機關分別對管轄範圍內危險化學品進行管理,包含化學品生命週期的不同階段,針對產品初期發展、製造、運輸、儲存、販賣、使用、以及最後廢棄的生命週期進行管理。

例如進口時,儲存和運輸皆須進行申報及許可申請,且連結海關的進口資料作必要的管控和追蹤。而針對危害性化學品,新加坡民防部隊即要求在進口、儲存、運輸以及建造用途時申請執照。而新加坡國家環境局(National Environment Agency)也要求購買危害性化學品時須申請許可,並進行正確的標示。

另外為符合水俣公约的要求,新加坡在2020年起也將禁止特定含水銀產品的製造、輸入及出口,例如電池、化妝品、節能燈泡和某些醫​​療設備等。

新加坡GHS制度落實與業界合作 在GHS制度落實方面,講師除了說明新加坡對於GHS標示的要求,也提到當廠場現場中完整的GHS標示在實務上不可行時,應將標示資訊簡化,降低過多複雜的資訊展示,但此規定並不適用需要運送到其他廠場時的標示。

另外在出口方面,進口後再重新出口、以及儲存將出口的國內製造之危害性化學品時,都依相關規定進行標示,並符合出口目的國家之法規要求。其中更令人驚豔的是講師分享之業界與新加坡政府於法規制訂時之技術合作,彼此透過密集的諮詢與業界經驗分享,取得法規與經濟發展之平衡之作法,亦是台灣可積極參考之作法。

其他東協國家管理規範持續發展

講師也針對其他東協國家化學品管理規範最新進度進行介紹,摘要如下:泰國正在建立第一份既有化學物質清單,預計會於2020年公布; 越南於2017年11月已正式實施化學法法令,透過清單進行工業及前驅化學品的管理規範,目前也正在建立化學物質清單; 柬埔寨、寮國、緬甸目前仍著重於GHS的執行; 菲律賓則持續檢視預製造及預進口的新化學物質通報規範,以及其他管制清單; 馬來西亞與印尼目前持續評估及調整其化學品管理框架。

東協國家是我國進來貿易往來的重要區域,經濟部工業局提醒我國廠商應隨時掌握東協各國化學品管理法規的近況,採取因應法規需要的措施與行動,並及早準備未來法規發展所需的合規相關資料,確保出口貿易活動能符合當地的相關規範。  

參考資料

※ 轉載自

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案

保育有成 長鬚鯨和山地大猩猩數量回穩

環境資訊中心綜合外電;姜唯 編譯;林大利 審校

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

※教你寫出一流的銷售文案?

南韓推動十年逐步禁塑計畫

摘錄自2018年9月5日公視新聞報導

南韓為了加強環保,制定減少塑膠生產量的「十年計畫」,提出未來十年,將逐步禁止一次性塑膠杯及塑膠吸管;此外,廚餘處理因秤重計費成效不錯,將逐漸取消以袋計費方式,估計可減少三成五的食物浪費。

南韓人每年大約用掉257億個一次性塑膠杯,以及100億根一次性塑膠吸管,為了不再製造更多塑膠產品以及減少資源浪費,南韓政府制定十年計劃,2027年之前,一次性使用的塑膠杯、塑膠吸管,將逐步禁用,此外,產品過度包裝也會被禁止;預計將南韓本土製造出的廢棄物,從目前的處理費每10億韓圜、相當於台幣274萬為單位的95.5噸,減少到76.4噸。

南韓環境部資源再生局副局長椿萬(音譯)表示,「我們首要任務就是在整個生產、消耗、管理,以及回收過程中減少浪費,並且將廢物重新配流到生產過程中。」

此外,為了減少食物的浪費,將強制規定所有超過一定規模的公寓大樓安裝有無線射頻辨識系統RFID的廚餘回收桶,計畫於2022年前達成,各餐廳於10年內強制安裝;持有RFID卡的民眾,必須先刷卡,蓋子才會打開,將廚餘倒進去後依重量繳費,也就是說,廚餘越重就越貴,一改過去無RFID回收桶而必須用回收袋固定計費的方法。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※別再煩惱如何寫文案,掌握八大原則!

※教你寫出一流的銷售文案?

※超省錢租車方案

FB行銷專家,教你從零開始的技巧

俄出現「鯨魚監獄」 傳跟中國建水族館有關

摘錄自2018年11月16日大紀元報導

近日,一家位於俄羅斯遠東納霍德卡港附近的圈養著100多頭鯨魚的水上農場被媒體曝光,據知情者提供的無人機航拍視頻顯示,在海邊圈起的一片水域中,安放有十個水槽,在開放的七個水槽中,可以看到其中有很多鯨魚,大多數為珍稀的白鯨,超過90頭。俄羅斯動物保護人士指責這些圈養鯨魚的環境狹小惡劣,可以被稱為是「鯨魚監獄」。

俄羅斯動物保護組織「撒哈林生態監督」負責人德米德里•利西岑對此評論說:「近年來中國興建了大批的水族館,僅在最近兩年就有32家新的水族館開業。每個水族館都需要數頭鯨魚,所以中國方面有巨大的需求,而這些鯨魚都是為向中國出口而捕撈的。」

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※別再煩惱如何寫文案,掌握八大原則!

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※超省錢租車方案

※教你寫出一流的銷售文案?

網頁設計最專業,超強功能平台可客製化

珍奶風席捲馬來西亞 掀起清真認證與環保話題

摘錄自2019年7月28日中央社報導

台灣珍奶近年來席捲東南亞市場,馬來西亞各大街小巷可隨處看見珍珠奶茶飲料店,某些街道還被稱作「奶茶街」,這股珍珠奶茶風潮也在當地帶動了清真、健康及環保等話題。

馬來西亞穆斯林人口超過1900萬人,對於源自台灣的珍珠奶茶,一名穆斯林網民近期就在網路上開始探討眾多席捲馬國的珍珠奶茶品牌,是否取得清真認證,引起網民熱烈討論。

伊斯蘭教是馬國官方宗教,馬來西亞同時奉行伊斯蘭法及聯邦憲法,穆斯林日常生活食用或碰觸身體的產品,必須符合伊斯蘭教義,即為「清真(Halal)」,避免碰觸包括豬和酒精等的不潔之物。獲得清真認證的產品從原物料開始到產品處理都必須嚴格把關。

除了清真認證受到關注之外,珍珠奶茶飲料杯主要都以塑膠材質為主,人們在飲用後隨處拋棄杯子的現象已經對環境帶來破壞,也受到許多環保人士的批評。

其中,最受熱議的奶茶街位於雪蘭莪州(Selangor)首邦市(Subang)SS15區,此地區約有近15家珍珠奶茶店,缺乏公德心的消費者在飲用奶茶後隨手將奶茶杯丟棄在店門前、溝渠、階梯上,幾乎隨處可見珍奶杯及吸管、塑膠袋,嚴重影響市容。

清道夫在收拾「殘局」後,堆積如山的樹膠杯及吸管塑膠袋更是讓人看了目瞪口呆,台灣珍珠奶茶風行馬來西亞,與馬國政府近期所推動的「減糖」、「減塑」、「禁吸管」政策背道而馳。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※教你寫出一流的銷售文案?

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

※超省錢租車方案

※產品缺大量曝光嗎?你需要的是一流包裝設計!