作者: admin

  • 電腦屏幕太小不夠用?這有妙招!

    電腦屏幕太小不夠用?這有妙招!

    前段時間跟大家探討了 Vim 的顏色方案的話題,取得了不錯的反響,大家可以點擊以下鏈接回顧那篇文章:

    今天我們來介紹 Vim 的分屏功能。

    為什麼需要分屏功能?其實需求場合有很多。比如,我現在屏幕很大,但我們的代碼一般是左對齊,右邊很空,這樣我們就可以通過分屏來充分利用右邊的屏幕。再如,我現在想同時查看多個文檔,除了打開多個終端外,我們還可以通過分屏來達到我們的目的。

    當然類似的場合還有很多,只要我們充分挖掘,肯定能挖掘出更多需求。

    下面我們就來詳細介紹 Vim 的分屏操作。

    分屏功能基本操作

    首先我們隨便打開一個代碼文件。為了方便演示,代碼長度越長越好。

    vim test.c

    現在讓我們將界面分成左右兩部分。首先我們按 ctrl+w ,緊接着按 v 。這樣操作之後,屏幕就一分為二了,如下圖示:

    如果我們想要三等分怎麼操作?很簡單,在上面的基礎之上,我們再次執行一遍上面的操作,屏幕就三等分了。

    如果你覺得這樣操作太麻煩,我們還可以通過在末行模式執行以下命令達到同樣的效果:

    :vsplit

    既然是命令,那就肯定有縮寫:

    :vsp

    簡直簡單到離譜…來點有水平的~讓我們從頭開始,這次我們將屏幕進行橫向分割。首先我們在末行模式下運行以下命令:

    :split

    同樣的,我們也有縮寫命令:

    :sp

    這個功能也可通過鍵盤組合鍵實現。對於水平分割來講,先按 ctrl + w ,然後按 s 。同樣,所有這些字母都是小寫的,並且是英文輸入狀態。

    分屏之間切換

    如前文所言,分屏在很多場景下非常有用,但是,你如果不能從一個分屏切換到另一個分屏,那這種拆分視圖就完全沒意義了。下面讓我給大家展示如何從一個分屏切換另一個分屏。

    在這裏,我設置了同一文件的4個分割視圖。

    剛開始時,光標位於第一個分屏。現在,假如我們要切換到右側分屏,我們需要先按 ctrl + w ,然後按 l 。

    同樣地,假如我們要切換到左側窗口,需要先按 ctrl + w ,然後按 h 。

    如果你是進行橫向分割屏幕的,那麼就只能上下移動光標。要切換到上面的分屏,需要先按 ctrl + w ,然後按 k 。

    同樣地,如果想要切換到下面的分屏,那麼就需要先按 ctrl + w,然後按 j 。

    在不同分屏下進行編輯

    到此為止,我相信大家已經學會了怎麼進行分屏操作了。那分完屏,我們怎麼在這些分屏下進行文本編輯呢?其實,每個分屏都可以視為一個完整的 Vim 窗口,我們平常怎麼編輯的,就怎樣去編輯文檔。

    複製及粘貼操作

    與未分屏是基本無差的,大家可以在從一個分屏里複製一段文本,再切換到另一個分屏進行粘貼。操作都是一樣的,只是需要在不同分屏里切換而已。

    改變分屏尺寸

    默認情況下,Vim 是按等分進行分屏操作的。如果我們想最大化/最小化某個分屏,要如何操作?

    如果要將當前窗口加寬到最大尺寸,需要先按 ctrl + w ,然後按 |(注意:不是小寫 L ,是與或非的那個與 | )。

    如果你想把當前窗口高度加高到最大尺寸,那麼需要使用 ctrl + w ,然後使用 **_** 。

    那如果想要重置所有分割窗口的大小,那麼使用 ctrl+w ,然後按 = 。

    默認情況下,Vim 在進行分屏操作時,每個分屏是等寬或等高的。如果要自定義分屏的寬度,大家可以使用以下結構:

    :<width> vsp

    同樣地,對於水平分割而言,可以使用類似結構自定義高度:

    :<height> sp

    在同一個 Vim 窗口下打開多個不同文件

    目前為止,所有的 Vim 分屏都是同一個文件的副本,但在很多情況下,我們需要打開多個不同的文件。我們可以將 Vim 窗口進行分屏,再在不同的分屏里打開不同的文件。

    如何在 Vim 中打開一個新文件?我們可以使用以下命令:

    :e<path_to_file>/filename.extension

    例如,我們想要在一個全新的 Vim 實例中打開 vimrc,我們可以使用以下命令:

    :e~/.vimrc

    打開 vimrc 之後,我們想要將屏幕水平切分並打開一個新文件,可以使用以下命令:

    :sp<file_path>

    而對於垂直分割屏幕,使用的也是類似的結構:

    :vsp<file_path>

    小結

    Vim 分屏講到這裏就要跟大家告一段落了。這種操作還是比較有趣,並且十分實用。

    本文介紹了 Vim 分屏的一些基本操作及編輯方法,合理利用這個功能可以使我們更加高效使用電腦屏幕,提高我們的效率。
    —————–

    我是良許,世界500強外企 Linux 開發工程師,專業生產 Linux 乾貨。歡迎關注我的公眾號「良許Linux」,裏面分享了 Linux入門、基礎、進階 等系列教程,同時也有 Git、Vim、開源項目 等技術乾貨。公眾號後台回復「1024」獲取最新最全的技術資料,回復「入群」進入高手如雲技術交流群。

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

    【其他文章推薦】

    ※為什麼 USB CONNECTOR 是電子產業重要的元件?

    ※網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

    ※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

    ※想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師”嚨底家”!!

  • python內置模塊collections介紹

    目錄

    python內置模塊collections介紹

    collections是Python內建的一個集合模塊,提供了許多有用的集合類。

    1、namedtuple

    python提供了很多非常好用的基本類型,比如不可變類型tuple,我們可以輕鬆地用它來表示一個二元向量。

    >>> v = (2,3) 

    我們發現,雖然(2,3)表示出了一個向量的兩個坐標,但是,如果沒有額外說明,又很難直接看出這個元組是用來表示一個坐標的。

    為此定義一個class又小題大做了,這時,namedtuple就派上用場了。

    >>> from collections import namedtuple
    >>> Vector = namedtuple('Vector', ['x', 'y'])
    >>> v = Vector(2,3)
    >>> v.x
    2
    >>> v.y
    3
    

    namedtuple是一個函數,它用來創建一個自定義的tuple對象,並且規定了tuple元素的個數,並可以用屬性而不是索引來引用tuple的某個元素。

    這樣一來,我們用namedtuple可以很方便地定義一種數據類型,它具備tuple的不變性,又可以根據屬性來引用,使用十分方便。

    我們可以驗證創建的Vector對象的類型。

    >>> type(v)
    <class '__main__.Vector'>
    
    >>> isinstance(v, Vector)
    True
    
    >>> isinstance(v, tuple)
    True 
    

    類似的,如果要用坐標和半徑表示一個圓,也可以用namedtuple定義:

    >>> Circle = namedtuple('Circle', ['x', 'y', 'r'])
    # namedtuple('名稱', [‘屬性列表’])
    

    2、deque

    在數據結構中,我們知道隊列和堆棧是兩個非常重要的數據類型,一個先進先出,一個後進先出。在python中,使用list存儲數據時,按索引訪問元素很快,但是插入和刪除元素就很慢了,因為list是線性存儲,數據量大的時候,插入和刪除效率很低。

    deque是為了高效實現插入和刪除操作的雙向鏈表結構,非常適合實現隊列和堆棧這樣的數據結構。

    >>> from collections import deque
    >>> deq = deque([1, 2, 3])
    >>> deq.append(4)
    >>> deq
    deque([1, 2, 3, 4])
    >>> deq.appendleft(5)
    >>> deq
    deque([5, 1, 2, 3, 4])
    >>> deq.pop()
    4
    >>> deq.popleft()
    5
    >>> deq
    deque([1, 2, 3])
    

    deque除了實現list的append()和pop()外,還支持appendleft()和popleft(),這樣就可以非常高效地往頭部添加或刪除元素。

    3、defaultdict

    使用dict字典類型時,如果引用的key不存在,就會拋出KeyError。如果希望Key不存在時,返回一個默認值,就可以用defaultdict。

    >>> from collections import defaultdict
    >>> dd = defaultdict(lambda: 'defaultvalue')
    >>> dd['key1'] = 'a'
    >>> dd['key1']
    'a'
    >>> dd['key2'] # key2未定義,返回默認值
    'defaultvalue'
    

    注意默認值是調用函數返回的,而函數在創建defaultdict對象時傳入。

    除了在Key不存在時返回默認值,defaultdict的其他行為跟dict是完全一樣的。

    4、OrderedDict

    使用dict時,key是無序的。在對dict做迭代時,我們無法確定key的順序。

    但是如果想要保持key的順序,可以用OrderedDict。

    >>> from collections import OrderedDict
    >>> d = dict([('a', 1), ('b', 2), ('c', 3)])
    >>> d # dict的Key是無序的
    {'a': 1, 'c': 3, 'b': 2}
    >>> od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
    >>> od # OrderedDict的Key是有序的
    OrderedDict([('a', 1), ('b', 2), ('c', 3)])
    

    注意,OrderedDict的key會按照插入的順序排列,不是key本身排序

    >>> od = OrderedDict()
    >>> od['z'] = 1
    >>> od['y'] = 2
    >>> od['x'] = 3
    >>> list(od.keys()) # 按照插入的Key的順序返回
    ['z', 'y', 'x']
    

    OrderedDict可以實現一個FIFO(先進先出)的dict,當容量超出限制時,先刪除最早添加的key。

    from collections import OrderedDict
    
    class LastUpdatedOrderedDict(OrderedDict):
    
        def __init__(self, capacity):
            super(LastUpdatedOrderedDict, self).__init__()
            self._capacity = capacity
    
        def __setitem__(self, key, value):
            containsKey = 1 if key in self else 0
            if len(self) - containsKey >= self._capacity:
                last = self.popitem(last=False)
                print('remove:', last)
            if containsKey:
                del self[key]
                print('set:', (key, value))
            else:
                print('add:', (key, value))
            OrderedDict.__setitem__(self, key, value)
    

    5、ChainMap

    ChainMap可以把一組dict串起來並組成一個邏輯上的dict。ChainMap本身也是一個dict,但是查找的時候,會按照順序在內部的dict依次查找。

    什麼時候使用ChainMap最合適?舉個例子:應用程序往往都需要傳入參數,參數可以通過命令行傳入,可以通過環境變量傳入,還可以有默認參數。我們可以用ChainMap實現參數的優先級查找,即先查命令行參數,如果沒有傳入,再查環境變量,如果沒有,就使用默認參數。

    下面的代碼演示了如何查找user和color這兩個參數。

    from collections import ChainMap
    import os, argparse
    
    # 構造缺省參數:
    defaults = {
        'color': 'red',
        'user': 'guest'
    }
    
    # 構造命令行參數:
    parser = argparse.ArgumentParser()
    parser.add_argument('-u', '--user')
    parser.add_argument('-c', '--color')
    namespace = parser.parse_args()
    command_line_args = { k: v for k, v in vars(namespace).items() if v }
    
    # 組合成ChainMap:
    combined = ChainMap(command_line_args, os.environ, defaults)
    
    # 打印參數:
    print('color=%s' % combined['color'])
    print('user=%s' % combined['user'])
    

    沒有任何參數時,打印出默認參數:

    $ python3 use_chainmap.py 
    color=red
    user=guest
    

    當傳入命令行參數時,優先使用命令行參數:

    $ python3 use_chainmap.py -u bob
    color=red
    user=bob
    

    同時傳入命令行參數和環境變量,命令行參數的優先級較高:

    $ user=admin color=green python3 use_chainmap.py -u bob
    color=green
    user=bob

    6、Counter

    Counter是一個簡單的計數器,例如,統計字符出現的個數:

    from collections import Counter
    >>> s = 'abbcccdddd'
    >>> Counter(s)
    Counter({'d': 4, 'c': 3, 'b': 2, 'a': 1})
    

    Counter實際上也是dict的一個子類。

    7、小結

    collections模塊提供了一些有用的集合類,可以根據需要選用。

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

    【其他文章推薦】

    ※USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

    ※評比前十大台北網頁設計、台北網站設計公司知名案例作品心得分享

    ※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

    ※評比南投搬家公司費用收費行情懶人包大公開

  • 【從今天開始好好學數據結構01】數組

    【從今天開始好好學數據結構01】數組

    面試的時候,常常會問數組和鏈表的區別,很多人都回答說,“鏈表適合插入、刪除,時間複雜度O(1);數組適合查找,查找時間複雜度為O(1)”。實際上,這種表述是不準確的。數組是適合查找操作,但是查找的時間複雜度並不為O(1)。即便是排好序的數組,你用二分查找,時間複雜度也是O(logn)。所以,正確的表述應該是,數組支持隨機訪問,根據下標隨機訪問的時間複雜度為O(1)。

    每一種編程語言中,基本都會有數組這種數據類型。不過,它不僅僅是一種編程語言中的數據類型,還是一種最基礎的數據結構。儘管數組看起來非常基礎、簡單,但是我估計很多人都並沒有理解這個基礎數據結構的精髓。在大部分編程語言中,數組都是從0開始編號的,但你是否下意識地想過,為什麼數組要從0開始編號,而不是從1開始呢? 從1開始不是更符合人類的思維習慣嗎?帶着這個問題來學習接下來的內容,帶着問題去學習往往效果會更好!!!

    什麼是數組?我估計你心中已經有了答案。不過,我還是想用專業的話來給你做下解釋。數組(Array)是一種線性表數據結構。它用一組連續的內存空間,來存儲一組具有相同類型的數據。這個定義里有幾個關鍵詞,理解了這幾個關鍵詞,我想你就能徹底掌握數組的概念了。下面就從我的角度分別給你“點撥”一下。

    第一是線性表(Linear List)。顧名思義,線性表就是數據排成像一條線一樣的結構。每個線性表上的數據最多只有前和后兩個方向。其實除了數組,鏈表、隊列、棧等也是線性表結構。而與它相對立的概念是非線性表,比如二叉樹、堆、圖等。之所以叫非線性,是因為,在非線性表中,數據之間並不是簡單的前後關係。

    第二個是連續的內存空間和相同類型的數據。正是因為這兩個限制,它才有了一個堪稱“殺手鐧”的特性:“隨機訪問”。但有利就有弊,這兩個限制也讓數組的很多操作變得非常低效,比如要想在數組中刪除、插入一個數據,數組為了保持內存數據的連續性,會導致插入、刪除這兩個操作比較低效,相反的數組查詢則高效

    數組java代碼:

    package array;
    
    /**
     * 1) 數組的插入、刪除、按照下標隨機訪問操作;
     * 2)數組中的數據是int類型的;
     *
     * Author: Zheng
     * modify: xing, Gsealy
     */
    public class Array {
        //定義整型數據data保存數據
        public int data[];
        //定義數組長度
        private int n;
        //定義中實際個數
        private int count;
    
        //構造方法,定義數組大小
        public Array(int capacity){
            this.data = new int[capacity];
            this.n = capacity;
            this.count=0;//一開始一個數都沒有存所以為0
        }
    
        //根據索引,找到數據中的元素並返回
        public int find(int index){
            if (index<0 || index>=count) return -1;
            return data[index];
        }
    
        //插入元素:頭部插入,尾部插入
        public boolean insert(int index, int value){
            //數組中無元素 
    
            //if (index == count && count == 0) {
            //    data[index] = value;
            //    ++count;
            //    return true;
            //}
    
            // 數組空間已滿
            if (count == n) {
                System.out.println("沒有可插入的位置");
                return false;
            }
            // 如果count還沒滿,那麼就可以插入數據到數組中
            // 位置不合法
            if (index < 0||index > count ) {
                System.out.println("位置不合法");
                return false;
            }
            // 位置合法
            for( int i = count; i > index; --i){
                data[i] = data[i - 1];
            }
            data[index] = value;
            ++count;
            return true;
        }
        //根據索引,刪除數組中元素
        public boolean delete(int index){
            if (index<0 || index >=count) return false;
            //從刪除位置開始,將後面的元素向前移動一位
            for (int i=index+1; i<count; ++i){
                data[i-1] = data[i];
            }
            //刪除數組末尾元素  這段代碼不需要也可以
            /*int[] arr = new int[count-1];
            for (int i=0; i<count-1;i++){
                arr[i] = data[i];
            }
            this.data = arr;*/
    
            --count;
            return true;
        }
        public void printAll() {
            for (int i = 0; i < count; ++i) {
                System.out.print(data[i] + " ");
            }
            System.out.println();
        }
    
        public static void main(String[] args) {
            Array array = new Array(5);
            array.printAll();
            array.insert(0, 3);
            array.insert(0, 4);
            array.insert(1, 5);
            array.insert(3, 9);
            array.insert(3, 10);
            //array.insert(3, 11);
            array.printAll();
        }
    }

    GenericArray數組代碼

    public class GenericArray<T> {
        private T[] data;
        private int size;
    
        // 根據傳入容量,構造Array
        public GenericArray(int capacity) {
            data = (T[]) new Object[capacity];
            size = 0;
        }
    
        // 無參構造方法,默認數組容量為10
        public GenericArray() {
            this(10);
        }
    
        // 獲取數組容量
        public int getCapacity() {
            return data.length;
        }
    
        // 獲取當前元素個數
        public int count() {
            return size;
        }
    
        // 判斷數組是否為空
        public boolean isEmpty() {
            return size == 0;
        }
    
        // 修改 index 位置的元素
        public void set(int index, T e) {
            checkIndex(index);
            data[index] = e;
        }
    
        // 獲取對應 index 位置的元素
        public T get(int index) {
            checkIndex(index);
            return data[index];
        }
    
        // 查看數組是否包含元素e
        public boolean contains(T e) {
            for (int i = 0; i < size; i++) {
                if (data[i].equals(e)) {
                    return true;
                }
            }
            return false;
        }
    
        // 獲取對應元素的下標, 未找到,返回 -1
        public int find(T e) {
            for ( int i = 0; i < size; i++) {
                if (data[i].equals(e)) {
                    return i;
                }
            }
            return -1;
        }
    
    
        // 在 index 位置,插入元素e, 時間複雜度 O(m+n)
        public void add(int index, T e) {
            checkIndex(index);
            // 如果當前元素個數等於數組容量,則將數組擴容為原來的2倍
            if (size == data.length) {
                resize(2 * data.length);
            }
    
            for (int i = size - 1; i >= index; i--) {
                data[i + 1] = data[i];
            }
            data[index] = e;
            size++;
        }
    
        // 向數組頭插入元素
        public void addFirst(T e) {
            add(0, e);
        }
    
        // 向數組尾插入元素
        public void addLast(T e) {
            add(size, e);
        }
    
        // 刪除 index 位置的元素,並返回
        public T remove(int index) {
            checkIndexForRemove(index);
    
            T ret = data[index];
            for (int i = index + 1; i < size; i++) {
                data[i - 1] = data[i];
            }
            size --;
            data[size] = null;
    
            // 縮容
            if (size == data.length / 4 && data.length / 2 != 0) {
                resize(data.length / 2);
            }
    
            return ret;
        }
    
        // 刪除第一個元素
        public T removeFirst() {
            return remove(0);
        }
    
        // 刪除末尾元素
        public T removeLast() {
            return remove(size - 1);
        }
    
        // 從數組中刪除指定元素
        public void removeElement(T e) {
            int index = find(e);
            if (index != -1) {
                remove(index);
            }
        }
    
        @Override
        public String toString() {
            StringBuilder builder = new StringBuilder();
            builder.append(String.format("Array size = %d, capacity = %d \n", size, data.length));
            builder.append('[');
            for (int i = 0; i < size; i++) {
                builder.append(data[i]);
                if (i != size - 1) {
                    builder.append(", ");
                }
            }
            builder.append(']');
            return builder.toString();
        }
    
    
        // 擴容方法,時間複雜度 O(n)
        private void resize(int capacity) {
            T[] newData = (T[]) new Object[capacity];
    
            for (int i = 0; i < size; i++) {
                newData[i] = data[i];
            }
            data = newData;
        }
    
        private void checkIndex(int index) {
            if (index < 0 || index > size) {
                throw new IllegalArgumentException("Add failed! Require index >=0 and index <= size.");
            }
        }
    
        private void checkIndexForRemove(int index) {
            if(index < 0 || index >= size) {
                throw new IllegalArgumentException("remove failed! Require index >=0 and index < size.");
            }
        }
    }

    到這裏,就回溯最初的問題:

    從數組存儲的內存模型上來看,“下標”最確切的定義應該是“偏移(offset)”。前面也講到,如果用a來表示數組的首地址,a[0]就是偏移為0的位置,也就是首地址,a[k]就表示偏移k個type_size的位置,所以計算a[k]的內存地址只需要用這個公式:

    a[k]_address = base_address + k * type_size

    但是,如果數組從1開始計數,那我們計算數組元素a[k]的內存地址就會變為:

    a[k]_address = base_address + (k-1)*type_size

    對比兩個公式,我們不難發現,從1開始編號,每次隨機訪問數組元素都多了一次減法運算,對於CPU來說,就是多了一次減法指令。那你可以思考一下,類比一下,二維數組的內存尋址公式是怎樣的呢?有興趣的可以在評論區評論出來哦QAQ

    數組作為非常基礎的數據結構,通過下標隨機訪問數組元素又是其非常基礎的編程操作,效率的優化就要盡可能做到極致。所以為了減少一次減法操作,數組選擇了從0開始編號,而不是從1開始。
    不過我認為,上面解釋得再多其實都算不上壓倒性的證明,說數組起始編號非0開始不可。所以我覺得最主要的原因可能是歷史原因。

    關於數組,它可以說是最基礎、最簡單的數據結構了。數組用一塊連續的內存空間,來存儲相同類型的一組數據,最大的特點就是支持隨機訪問,但插入、刪除操作也因此變得比較低效,平均情況時間複雜度為O(n)。在平時的業務開發中,我們可以直接使用編程語言提供的容器類,但是,如果是特別底層的開發,直接使用數組可能會更合適。

    如果本文對你有一點點幫助,那麼請點個讚唄,謝謝~

    最後,若有不足或者不正之處,歡迎指正批評,感激不盡!如果有疑問歡迎留言,絕對第一時間回復!

    歡迎各位關注我的公眾號,一起探討技術,嚮往技術,追求技術,說好了來了就是盆友喔…

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

    【其他文章推薦】

    ※台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

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

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

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

  • 澳洲動物園抗野火 園長帶猴子老虎回家避難

    摘錄自2020年1月2日中央社雪梨報導

    在毀滅性野火肆虐澳洲各地的情況下,新南威爾斯省(New South Wales)一家小型動物園,成功保障園區所有動物的安全。

    英國廣播公司(BBC)報導,摩哥動物園(Mogo Zoo)的靈長類動物數量在澳洲數一數二,園區內還有斑馬、犀牛與長頸鹿等大型動物。但當動物園處在野火第一線時,飼養人員仍成功保護200隻動物全數未受傷害。

    新南威爾斯省12月31日對動物園所在區域下達疏散命令,但職員仍決定留下來保護動物。動物園園長史戴普斯表示,動物園能倖存下來,都是因為事先做好確實規劃。飼養人員先把區內所有可燃物都搬走,接著再遷移動物。

    諸如獅子、老虎與紅毛猩猩等大型動物都被趕進夜間圍欄內,以確保牠們安全、情緒平靜。但小型動物就需要特殊庇護,所以園長史戴普斯決定把牠們通通帶回自家,至於長頸鹿和斑馬則留在自己的圍欄裡,因為牠們體型夠大,可以避開火源。

    史戴普斯說,長頸鹿和斑馬是園內唯一承受壓力的動物,但壓力來源並非火災,而是飼養人員匆忙開車四處滅火,動物園員工事先準備數十萬公升的水,並把水置於車上的小型水槽四處移動,看到火就予以撲滅。他形容自己的團隊日以繼夜投入工作,若非員工的英勇作為,動物園早就陷入火海。

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

    【其他文章推薦】

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

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

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

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

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

  • 帛琉禁用有害珊瑚礁防曬乳 違者罰1000美元

    摘錄自2020年1月1日中央社科羅報導

    太平洋島國帛琉1日起實施一項開創性禁令,不准使用含有對珊瑚礁有害成分的防曬乳液,違者罰1000美元。帛琉實施嚴格環保措施,新設全球最大海洋保護區之一也自此生效。

    法新社報導,帛琉總統雷蒙傑索(Tommy Remengesau)表示,帛琉人「必須尊重環境,因為環境是孕育生命之所,沒有環境,帛琉就沒人能倖存」。

    自2020年元旦起,在帛琉任何對珊瑚礁具有毒性的防曬乳液,不管是攜帶入境或販售,都會被沒收,並處罰持有者1000美元罰款。

    雷蒙傑索表示:「帛琉重要生物棲地到處都發現了防曬乳液中的有毒化學物質,在帛琉最知名的生物組織中也有。我們不介意成為第一個禁用這些化學物質的國家,我們也會為傳達這個訊息盡一份力。」

    除了這項禁令之外,帛琉的海洋保護區也自1日起生效,在新規定之下,帛琉的專屬經濟區(EEZ)有80%不准捕魚或從事其他海洋活動,包括採礦和取鯊魚鰭。

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

    【其他文章推薦】

    ※為什麼 USB CONNECTOR 是電子產業重要的元件?

    ※網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

    ※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

    ※想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師”嚨底家”!!

  • 海洋吸塵器完成首次任務 下一步:為垃圾再製品建立透明「價值鏈」

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

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

    【其他文章推薦】

    ※USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

    ※評比前十大台北網頁設計、台北網站設計公司知名案例作品心得分享

    ※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

    ※評比南投搬家公司費用收費行情懶人包大公開

  • 募資拆壩有成 烏克蘭濕地迅速恢復

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

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

    【其他文章推薦】

    ※台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

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

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

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

  • 武漢27例不明肺炎 均與華南海鮮市場有關

    摘錄自2020年1月2日公視報導

    中國武漢爆發27例不明肺炎案例,引起各界關注,爆發疫情的華南海鮮市場也已休市進行消毒。中國官方到今天傍晚為止,尚未公布檢驗結果。而香港屯門醫院也傳出收到一名曾去過武漢的女性肺炎病患,經過檢驗後,初步排除是SARS。

    日前武漢爆發27例不明原因的病毒型肺炎,其中有7例病情嚴重。根據中國媒體報導,有肺炎患者一開始以為只是感冒,吃了感冒藥卻無效,持續發病十幾天。目前這27名病患都集中隔離治療。而爆發疫情的華南海鮮市場在1號也張貼公告宣布,即日起休市整治,進行衛生消毒工作。衛福部疾管署署長周志浩表示,「如果陸方在這部分,我們的疫情掌握覺得還是不足的時候,我們會跟陸方提出交涉。希望我們能夠派遣同仁,或者是專家實地了解情形。」

    此外,香港屯門醫院也收治一名女性肺炎個案,日前曾經到過武漢,出現發燒及上呼吸道感染症狀。香港屯門區議員張可森則透過臉書表示,經院方證實,這名女病患的檢驗結果,對SARS和禽流感病毒呈陰性反應,初步排除這兩種可能。

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

    【其他文章推薦】

    ※想知道網站建置、網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計及後台網頁設計

    ※不管是台北網頁設計公司、台中網頁設計公司,全省皆有專員為您服務

    ※Google地圖已可更新顯示潭子電動車充電站設置地點!!

    ※帶您來看台北網站建置,台北網頁設計,各種案例分享

  • 印尼雅加達暴雨侵襲 洪災土石流釀21死

    摘錄自2020年1月2日公視報導

    印尼首都雅加達跨年夜遭暴雨侵襲,引發洪水和土石流,目前至少造成21人死亡。

    汽機車被洪水淹得滅頂,搜救人員出動橡皮艇挨家挨戶搜救,印尼首都雅加達跨年夜下起暴雨,引發七年來最嚴重水災,水深達到3公尺高,部分地鐵和火車停駛,一座機場也被迫臨時關閉,不少旅客滯留到早上,印尼總統佐科威表示已經動員12萬名搜救人員,全力救災。

    佐科威說:「許多公共設施被淹沒,包括哈里姆柏達那庫蘇馬機場、芝甘北公路。」此外,雅加達郊區發生土石流災情,一名16歲高中生遭雷擊死亡,當局警告在雨季四月結束前,可能將再發生洪災。

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

    【其他文章推薦】

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

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

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

    ※南投搬家前需注意的眉眉角角,別等搬了再說!

  • 澳洲山火波及新西蘭 冰川變天呈焦糖色 恐加速冰塊融化

    摘錄自2020年1月3日香港01報導

    澳洲五省受高溫及乾旱天氣影響,自9月起多處發生山火,造成至少18人死亡,另有數人下落不明,逾200間房間被燒毀,其中新南威爾士省受災最嚴重,澳洲當局預期周末災情更加嚴重。

    正當澳洲正積極撲救山火之際,從新南威爾士省及維多利亞省吹至的煙霧,於除夕日起飄浮至2,000公里外的新西蘭,其中南島多個著名冰川,如塔斯曼 (Tasman)、法蘭士·約瑟夫(Franz Josef),以及福克(Fox)首先受到影響;而濃煙更慢慢飄散至北島,令當地天色驟眼看「陰森恐怖」。

    冰川旅行社Alpine Guides負責人麥克布賴德(Arthur McBride)表示,南島多個冰川周三起天色變得非常差,他坦言在該區舉辦旅行團多時,亦從未見過類似情境,「周三下午尤其差,那股如燒木頭的氣味非常濃烈。」

    另外,在新西蘭最高山庫克(Mount Cook)經營滑雪飛機和直升機生意的布爾特(Dan Burt)則發現,濃煙尚未瀰漫當地時,他們早於數周前已發現塔斯曼冰川變色。布爾特續指,雖然觀光直升機目前仍能起飛,但對於旅客而言絕是精彩的體驗。

    新西蘭氣象局Weather Watch周四發布衛星圖,顯示煙霧如何從澳洲海岸,再跨越塔斯曼海飄散至新西蘭。

    旅遊勝地皇后鎮(Queenstown)多座山峰,即距離冰川更南位置,同樣被濃霧覆蓋。另外,南島小鎮達尼丁(Dunedin)過去數天都突然「變天」,有人一覺醒來赫見天氣變得昏暗,黃昏時份更呈刺眼的金黃色。北島周四亦受濃煙及刺鼻燒焦味影響,有居民形容大海曾現異常的金色光芒;天空多雲;當太陽破曉時亦呈橙色。」

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

    【其他文章推薦】

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

    ※網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

    ※想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師”嚨底家”!!