非洲南部乾旱嚴重 農民欠收動物死亡

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

近幾年非洲南部遭遇嚴重的乾旱,降雨量每況愈下,雨季也一年比一年短,導致農民無法收成。連當地的動物都因為沒有水可以喝,數量減少一大半。有專家認為,這種情況可能將成為常態。

在過去的五年間,非洲南部平均氣溫上升的速度是全球的兩倍,從南非、辛巴威到尚比亞,到處都在缺水。雨季一年比一年短,受害最深的就是靠天吃飯的農夫。

尚比亞的一個村莊收成僅剩往年3成,農民欲哭無淚。而在南非,有農夫失去6成的牲畜,綿羊生產後沒有羊奶可餵養孩子,農夫只能忍痛拋棄剛出生的小羊。

另一方面,高度仰賴野生動物生態的觀光業,也因為動物大量死亡而遭受衝擊。位於南非的生態觀光地點——格魯伯斯普,已經有大量的水牛、河馬和條紋羚消失。原本這個地區的年降雨量平均250毫米,但是現在要五年才有這個數量。

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

【其他文章推薦】

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

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

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

台灣海運大陸貨務運送流程

兩岸物流進出口一站式服務

每天3分鐘操作系統修鍊秘籍(17):進程間通信(3):套接字

套接字

套接字(Socket)用於協調不同計算機上的進程間通信,也就是基於網絡的通信。當然,也可以在本機上使用套接字進行進程間的通信。

套接字通信的方式非常多,有Unix域套接字、TCP套接字、UDP套接字、鏈路層套接字等等。但最常用的肯定是TCP套接字。所以,這裏介紹下TCP Socket通信方式,稍後再單獨介紹Unix域套接字。

TCP Socket用於客戶端、服務端的基於TCP協議的通信,所以在客戶端和服務端均需要創建一個套接字。創建TCP套接字時會返回這個套接字的文件描述符,可通過這個文件描述符對套接字進行讀和寫操作。

對比一下,當一個程序需要對一個磁盤文件同時進行讀寫操作(在命令行下似乎沒有找到這種命令,但通過編程方式是很容易實現的)時,由於只通過單個文件描述符同時負責讀和寫,很可能需要通過不斷移動文件指針的方式來改變讀寫的位置,否則數據很容易錯亂。

而TCP套接字也是通過單個文件描述符進行讀寫套接字的,為了保證讀和寫的位置不錯亂,操作系統在內核空間為每個TCP套接字維護了兩個buffer空間,一個buffer用於寫、一個buffer用於讀。提供讀的buffer空間稱為recv buffer,提供寫的buffer空間稱為send buffer,它們統稱為socket buffer

所以,服務端和客戶端通過兩個套接字通信就簡單了,一端向send buffer寫數據,該buffer的數據會通過已經建立好的TCP連接發送到另一端的recv buffer,於是另一端只需從recv buffer中讀數據即可實現不同計算機上的進程間通信。過程如圖。

Unix域套接字

Unix域套接字是套接字的一種,用於本機進程間通信,一般用來實現雙向通信的管道。Unix域套接字是比網絡套接字輕量級且高效的多,因為它不涉及網絡通信,不需要監聽連接,不需要綁定地址,不需要關心協議類型,等等。

創建Unix域套接字后返回兩個文件描述符,這兩個文件描述符均對套接字可讀、可寫,從而實現全雙工的雙向通信。

同樣的,為了避免使用單個文件描述符同時讀、寫造成的數據錯亂,Unix域套接字也有兩個buffer空間。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

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

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

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

台灣海運大陸貨務運送流程

兩岸物流進出口一站式服務

日本密室會議干預審查 火山灰影響核電廠 安全堪虞

文:宋瑞文(媽媽監督核電廠聯盟特約撰述)

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

【其他文章推薦】

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

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

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

台灣海運大陸貨務運送流程

兩岸物流進出口一站式服務

全球批評升溫 日本將收緊燃煤發電設備出口條件

摘錄自2020年2月25日中央社報導

日本環境大臣小泉進次郎(Shinjiro Koizumi)今(25日)表示,日本收緊出口燃煤發電設備條件的審查報告將在6月底前發布。

路透社報導,在日本政府支持印尼、越南興建燃煤發電廠及日本蓋新的燃煤發電廠,引起全球批評後,小泉進次郎做上述宣布。小泉進次郎在記者會上表示,這項討論將為日本於12月籌劃的新基礎設施出口政策勾勒輪廓。

在現行政策下,當有國家或如果有國家需要選擇以燃煤作為發電來源,並向日本請求提供高效能的燃煤發電技術時,日本將會支持。

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

【其他文章推薦】

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

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

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

台灣海運大陸貨務運送流程

兩岸物流進出口一站式服務

氣候風險應納入企業稽核 全球會計師公會聯盟發起倡議

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

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

【其他文章推薦】

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

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

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

台灣海運大陸貨務運送流程

兩岸物流進出口一站式服務

程序員需要了解的硬核知識之操作系統和應用

利用計算機運行程序大部分都是為了提高處理效率。例如,Microsoft Word 這樣的文字處理軟件,是用來提高文本文件處理效率的程序,Microsoft Excel 等表格計算軟件,是用來提高賬本處理效率的程序。這種為了提高特定處理效率的程序統稱為 應用

程序員的工作就是編寫各種各樣的應用來提高工作效率,程序員一般不編寫操作系統,但是程序員編寫的應用離不開操作系統,此篇文章我們就針對 Windows 操作系統來說明一下操作系統和應用之間的關係。

操作系統功能的歷史

操作系統其實也是一種軟件,任何新事物的出現肯定都有它的歷史背景,那麼操作系統也不是憑空出現的,肯定有它的歷史背景。

在計算機尚不存在操作系統的年代,完全沒有任何程序,人們通過各種按鈕來控制計算機,這一過程非常麻煩。於是,有人開發出了僅具有加載和運行功能的監控程序,這就是操作系統的原型。通過事先啟動監控程序,程序員可以根據需要將各種程序加載到內存中運行。雖然仍舊比較麻煩,但比起在沒有任何程序的狀態下進行開發,工作量得到了很大的緩解。

隨着時代的發展,人們在利用監控程序編寫程序的過程中發現很多程序都有公共的部分。例如,通過鍵盤進行文字輸入,显示器進行數據展示等,如果每編寫一個新的應用程序都需要相同的處理的話,那真是太浪費時間了。因此,基本的輸入輸出部分的程序就被追加到了監控程序中。初期的操作系統就是這樣誕生了。

類似的想法可以共用,人們又發現有更多的應用程序可以追加到監控程序中,比如硬件控製程序編程語言處理器(彙編、編譯、解析)以及各種應用程序等,結果就形成了和現在差異不大的操作系統,也就是說,其實操作系統是多個程序的集合體。

我在 這篇文章中提到了彙編語言,這裏簡單再提一下。

彙編語言是一種低級語言,也被稱為符號語言。彙編語言是第二代計算機語言,在彙編語言中,用助記符代替機器指令的操作碼,用地址符號或標號代替指令或操作數的地址。用一些容易理解和記憶的字母,單詞來代替一個特定的指令,比如:用ADD代表数字邏輯上的加減,MOV代表數據傳遞等等,通過這種方法,人們很容易去閱讀已經完成的程序或者理解程序正在執行的功能,對現有程序的bug修復以及運營維護都變得更加簡單方便

可以說共用思想真是人類前進的一大步,對於解放生產力而言簡直是太重要了

要把操作系統放在第一位

對於程序員來說,程序員創造的不是硬件,而是各種應用程序,但是如果程序員只做應用不懂硬件層面的知識的話,是無法成為硬核程序員的。現在培訓機構培養出了一批怎麼用的人才,卻沒有培訓出為什麼這麼做的人才,畢竟為什麼不是培訓機構教的,而是學校教的,我很相信耗子叔說的話:學習沒有速成這回事。言歸正題。

在操作系統誕生之後,程序員不需要在硬件層面考慮問題,所以程序員的數量就增加了。哪怕自稱對硬件一竅不通的人也可能製作出一個有模有樣的程序。不過,要想成為一個全面的程序員,有一點需要清楚的就是,掌握硬件的基本知識,並藉助操作系統進行抽象化,可以大大提高編程效率。

下面就看一下操作系統是如何給開發人員帶來便利的,在 Windows 操作系統下,用 C 語言製作一個具有表示當前時間功能的應用。time() 是用來取得當前日期和時間的函數,printf() 是把結果打印到显示器上的函數,如下:

#include <stdio.h>
#include <time.h>

void main(){
  // 保存當前日期和時間信息
  time_t tm;
  
  // 取得當前的日期和時間
  time(&tm);
  
  // 在显示器上显示日期和時間
  printf("%s\n", ctime(&tm));
}

讀者可以自行運行程序查看結果,我們主要關注硬件在這段代碼中做了什麼事情

  • 通過 time_t tm,為 time_t 類型的變量申請分配內存空間;
  • 通過 time(&tm) ,將當前的日期和時間數據保存到變量的內存空間中
  • 通過 printf(“%s\n”,ctime(&tm)), 把變量內存空間的內容輸出到显示器上。

應用的可執行文件指的是,計算機的 CPU 可以直接解釋並運行的本地代碼,不過這些代碼是無法直接控制硬件的,事實上,這些代碼是通過操作系統來間接控制硬件的。變量中涉及到的內存分配情況,以及 time() 和 printf() 這些函數的運行結果,都不是面向硬件而是面向操作系統的。操作系統收到應用發出的指令后,首先會對該指令進行解釋,然後會對 時鐘IC 和显示器用的 I/O 進行控制。

計算機中都安裝有保存日期和時間的實時時鐘(Real-time clock),上面提到的時鐘IC 就是值該實時時鐘。

系統調用和編程語言的移植性

操作系統控制硬件的功能,都是通過一些小的函數集合體的形式來提供的。這些函數以及調用函數的行為稱為系統調用,也就是通過應用進而調用操作系統的意思。在前面的程序中用到了 time() 以及 printf() 函數,這些函數內部也封裝了系統調用。

C 語言等高級編程語言並不依存於特定的操作系統,這是因為人們希望不管是Windows 操作系統還是 Linux 操作系統都能夠使用相同的源代碼。因此,高級編程語言的機制就是,使用獨自的函數名,然後在編譯的時候將其轉換為系統調用的方式(也有可能是多個系統調用的組合)。也就是說,高級語言編寫的應用在編譯后,就轉換成了利用系統調用的本地代碼

不過,在高級語言中也存在直接調用系統調用的編程語言,不過,利用這種方式做成應用,移植性並不友好。

移植性:移植性指的是同樣的程序在不同操作系統下運行時所花費的時間,時間越少證明移植性越好。

操作系統和高級編程語言使硬件抽象化

通過使用操作系統提供的系統調用,程序員不必直接編寫控制硬件的程序,而且,通過使用高級編程語言,有時也無需考慮系統調用的存在,系統調用往往是自動觸發的,操作系統和高級編程語言能夠使硬件抽象化,這很了不起。

下面讓我們看一個硬件抽象化的具體實例

#include <stdio.h>

void main(){
  
  // 打開文件
  FILE *fp = fopen("MyFile.txt","w");
  
  // 寫入文件
  fputs("你好", fp);
  
  // 關閉文件
  fclose(fp);
}

上述代碼使用 C 編寫的程序,fputs() 是用來往文件中寫入字符串的函數,fclose() 是用來關閉文件的函數。

上述應用在編譯運行后,會向文件中寫入 “你好” 字符串。文件是操作系統對磁盤空間的抽象化,就如同我們在 這篇文章提到的一樣,磁盤就如同樹的年輪,磁盤的讀寫是以扇區為單位的,通過磁道來尋址,如果直接對硬件讀寫的話,那麼就會變為通過向磁盤用的 I/O 指定扇區位置來對數據進行讀寫了。

但是,在上面代碼中,扇區壓根就沒有出現過傳遞給 fopen() 函數的參數,是文件名 MyFile.txt 和指定文件寫入的 w。傳遞給 fputs() 的參數,是往文件中寫入的字符串”你好” 和 fp,傳遞給 fclose() 的參數,也僅僅是 fp,也就是說磁盤通過打開文件這個操作,把磁盤抽象化了,打開文件這個操作就可以說是操作硬件的指令。

下面讓我們來看一下代碼清單中 fp 的功能,變量 fp 中被賦予的是 fopen() 函數的返回值,該值被稱為文件指針。應用打開文件后,操作系統就會自動申請分配用來管理文件讀寫的內存空間。內存地址可以通過 fopen() 函數的返回值獲得。用 fopen() 打開文件后,接下來就是通過制定的文件指針進行操作,正因為如此,fputs() 和 fclose() 以及 fclose() 參數中都制定了文件指針。

由此我們可以得出一個結論,應用程序是通過系統調用,磁盤抽象來實現對硬盤的控制的。

Windows 操作系統的特徵

Windows 操作系統是世界上用戶數量最龐大的群體,作為 Windows 操作系統的資深用戶,你都知道 Windows 操作系統有哪些特徵嗎?下面列舉了一些 Windows 操作系統的特性

  • Windows 操作系統有兩個版本:32位和64位
  • 通過 API 函數集成來提供系統調用
  • 提供了採用圖形用戶界面的用戶界面
  • 通過 WYSIWYG 實現打印輸出,WYSIWYG 其實就是 What You See Is What You Get ,值得是显示器上显示的圖形和文本都是可以原樣輸出到打印機打印的。
  • 提供多任務功能,即能夠同時開啟多個任務
  • 提供網絡功能和數據庫功能
  • 通過即插即用實現設備驅動的自設定

這些是對程序員來講比較有意義的一些特徵,下面針對這些特徵來進行分別的介紹

32位操作系統

這裏表示的32位操作系統表示的是處理效率最高的數據大小。Windows 處理數據的基本單位是 32 位。這與最一開始在 MS-DOS 等16位操作系統不同,因為在16位操作系統中處理32位數據需要兩次,而32位操作系統只需要一次就能夠處理32位的數據,所以一般在 windows 上的應用,它們的最高能夠處理的數據都是 32 位的。

比如,用 C 語言來處理整數數據時,有8位的 char 類型,16位的short類型,以及32位的long類型三個選項,使用位數較大的 long 類型進行處理的話,增加的只是內存以及磁盤的開銷,對性能影響不大。

現在市面上大部分都是64位操作系統了,64位操作系統也是如此。

通過 API 函數集來提供系統調用

Windows 是通過名為 API 的函數集來提供系統調用的。API是聯繫應用程序和操作系統之間的接口,全稱叫做 Application Programming Interface,應用程序接口。

當前主流的32位版 Windows API 也稱為 Win32 API,之所以這樣命名,是需要和不同的操作系統進行區分,比如最一開始的 16 位版的 Win16 API,和後來流行的 Win64 API

API 通過多個 DLL 文件來提供,各個 API 的實體都是用 C 語言編寫的函數。所以,在 C 語言環境下,使用 API 更加容易,比如 API 所用到的 MessageBox() 函數,就被保存在了 Windows 提供的 user32.dll 這個 DLL 文件中。

提供採用了 GUI 的用戶界面

GUI(Graphical User Interface) 指得就是圖形用戶界面,通過點擊显示器中的窗口以及圖標等可視化的用戶界面,舉個例子:Linux 操作系統就有兩個版本,一種是簡潔版,直接通過命令行控制硬件,還有一種是可視化版,通過光標點擊圖形界面來控制硬件。

通過 WYSIWYG 實現打印輸出

WYSIWYG 指的是显示器上輸出的內容可以直接通過打印機打印輸出。在 Windows 中,显示器和打印機被認作同等的圖形輸出設備處理的,該功能也為 WYSIWYG 提供了條件。

藉助 WYSIWYG 功能,程序員可以輕鬆不少。最初,為了是現在显示器中显示和在打印機中打印,就必須分別編寫各自的程序,而在 Windows 中,可以藉助 WYSIWYG 基本上在一個程序中就可以做到显示和打印這兩個功能了。

提供多任務功能

多任務指的就是同時能夠運行多個應用程序的功能,Windows 是通過時鐘分割技術來實現多任務功能的。時鐘分割指的是短時間間隔內,多個程序切換運行的方式。在用戶看來,就好像是多個程序在同時運行,其底層是 CPU 時間切片,這也是多線程多任務的核心。

提供網絡功能和數據庫功能

Windows 中,網絡功能是作為標準功能提供的。數據庫(數據庫服務器)功能有時也會在後面追加。網絡功能和數據庫功能雖然並不是操作系統不可或缺的,但因為它們和操作系統很接近,所以被統稱為中間件而不是應用。意思是處於操作系統和應用的中間層,操作系統和中間件組合在一起,稱為系統軟件。應用不僅可以利用操作系統,也可以利用中間件的功能。

相對於操作系統一旦安裝就不能輕易更換,中間件可以根據需要進行更換,不過,對於大部分應用來說,更換中間件的話,會造成應用也隨之更換,從這個角度來說,更換中間件也不是那麼容易。

通過即插即用實現設備驅動的自動設定

即插即用(Plug-and-Play)指的是新的設備連接(plug) 后就可以直接使用的機制,新設備連接計算機后,計算機就會自動安裝和設定用來控制該設備的驅動程序

設備驅動是操作系統的一部分,提供了同硬件進行基本的輸入輸出的功能。鍵盤、鼠標、显示器、磁盤裝置等,這些計算機中必備的硬件的設備驅動,一般都是隨操作系統一起安裝的。

有時 DLL 文件也會同設備驅動文件一起安裝。這些 DLL 文件中存儲着用來利用該新追加的硬件API,通過 API ,可以製作出運行該硬件的心應用。

文章參考:

《程序是怎樣跑起來的》第九章

關注公眾號後台回復 191106 即可獲得《程序是怎樣跑起來的》电子書

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

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

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

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

小三通海運與一般國際貿易有何不同?

小三通快遞通關作業有哪些?

微信 AES 解密報錯 Illegal key size 三種解決辦法

微信 AES 解密報錯 Illegal key size

Java 環境

java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

問題

問題日誌
最近在遷移的服務器,在遷移完之後, 一個有關微信小程序的日誌打印下面的報錯信息。

c.t.b.a.c.weixin.aes.WXBizMsgCrypt - 小程序解密異常
java.security.InvalidKeyException: Illegal key size

解密失敗,看了下解密的密鑰是正確的,沒有任何問題。 這個在 經典 下是可以運行的,在 VPC 下運行不了。 (因為最近在進行阿里雲網絡遷移)

問題原因

微信在進行數據傳輸的時候,會進行加密,微信使用的 AES 加密使用的是 256位,Java 默認使用的解密包是 local_policy.jarUS_export_policy.jar,但是這個默認的只支持 128位的解密(java 版本在 1.8.0_161之後就沒有這個問題了,默認是支持)。我們的版本是 1.8.0_151 正好默認是只支持 128位的解密(其實不是不支持,只是默認配置的不支持)。

解決辦法

在前面我們沒有提及一個東西,就是在/usr/local/java/jdk1.8.0_151/jre/lib/security/policy/下有兩個目錄。

[root@djx-117106 policy]# pwd
/usr/local/java/jdk1.8.0_151/jre/lib/security/policy/
[root@djx-117106 policy]# ls -l
total 8
drwxr-xr-x 2 root root 4096 Nov  2 10:47 limited
drwxr-xr-x 2 root root 4096 Nov  2 10:47 unlimited
[root@djx-117106 policy]# ls -l ./limited/
total 8
-rw-r--r-- 1 root root 3405 Jul  4 19:41 local_policy.jar
-rw-r--r-- 1 root root 2920 Jul  4 19:41 US_export_policy.jar
[root@djx-117106 policy]# ls -l ./unlimited/
total 8
-rw-r--r-- 1 root root 2929 Jul  4 19:41 local_policy.jar
-rw-r--r-- 1 root root 2917 Jul  4 19:41 US_export_policy.jar

有一個 limited 目錄(也就是對解密有限制的包,只支持 128位),也有一個 ulimited 目錄(也就是沒有限制的目錄)。

更改 源碼

我們在 /usr/local/java/jdk1.8.0_151/jre/lib/security/ 下的 java.security文件中看到。

# To support older JDK Update releases, the crypto.policy property
# is not defined by default. When the property is not defined, an
# update release binary aware of the new property will use the following
# logic to decide what crypto policy files get used :
#
# * If the US_export_policy.jar and local_policy.jar files are located
# in the (legacy) <java-home>/lib/security directory, then the rules
# embedded in those jar files will be used. This helps preserve compatibility
# for users upgrading from an older installation.
#
# * If crypto.policy is not defined and no such jar files are present in
# the legacy locations, then the JDK will use the limited settings
# (equivalent to crypto.policy=limited)
#
# Please see the JCA documentation for additional information on these
# files and formats.
#crypto.policy=unlimited

注意下文中的 (equivalent to crypto.policy=limited) 說明默認是使用的 limited.
我們只需要加 crypto.policy=unlimited. 讓默認使用的不限制的。

替換Jar包

替換 /usr/local/java/jdk1.8.0_151/jre/lib/security/policy/limited的路徑的包。其實我們可以直接用 /usr/local/java/jdk1.8.0_151/jre/lib/security/policy/unlimited下面的包直接替換 /usr/local/java/jdk1.8.0_151/jre/lib/security/policy/limited/ 下面的兩個包。也就是讓默認使用不限制的jar包。

升級 Java 版本

https://www.oracle.com/technetwork/java/javase/8u161-relnotes-4021379.html
在官方文檔寫到,

security-libs/javax.crypto
 Unlimited cryptography enabled by default
The JDK uses the Java Cryptography Extension (JCE) Jurisdiction Policy files to configure cryptographic algorithm restrictions. Previously, the Policy files in the JDK placed limits on various algorithms. This release ships with both the limited and unlimited jurisdiction policy files, with unlimited being the default. The behavior can be controlled via the new 'crypto.policy' Security property found in the /lib/java.security file. Please refer to that file for more information on this property.

也就是從 1.8.0_161-b12 版本后,默認將採用無限制的加密算法,也就是使用 unlimited 下的jar包。我們也可以通過 設置 java.security 文件的 crypto.policy的值來改變這個默認的值。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

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

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

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

台灣海運大陸貨務運送流程

兩岸物流進出口一站式服務

南韓樂天化工廠爆炸致數十人傷 暫無有害物質洩露

摘錄自2020年3月4日星島日報報導

南韓樂天集團旗下一間化學工廠凌晨發生爆炸,造成至少30多人受傷,暫未發現化學物質洩露。

據報該化工廠位於忠清南道瑞山市,在今(4日)凌晨發生爆炸,產生強烈衝擊波。韓媒報道稱,爆炸導致多處建築物倒塌,附近房屋受損嚴重,窗户被震碎,多處設施受损。據忠清南道消防部門消息,截至當地時間下午3時,爆炸造成至少36人受傷,目前2人傷勢嚴重,暫未有人死亡。當地警方稱,可能是在生產乙烯和丙烯的壓縮過程中發生事故。

樂天化學公司發表聲明稱,由於鉛絲分解過程出現問題,導致爆炸;目前該工廠已停工,將進一步調查具體原因。事故發生後,瑞山市政府向民眾發信息提示注意安全,但同時稱沒有造成有害化學物質洩露,不需要進行撤離。

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

【其他文章推薦】

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

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

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

台灣海運大陸貨務運送流程

兩岸物流進出口一站式服務

工信部:新能源汽車今年將翻番 騙補企業要嚴處

全國“兩會”期間,新能源車產業的發展受到更多關注。

騙補調查取得成果

在全國“兩會”的“部長通道”,苗圩接受媒體採訪時表示,已經發現一些地區個別企業存在騙補行為,現在還在進一步查處,無論涉及到誰都會嚴肅處理。值得注意的是,這距離工信部宣佈對新能源車騙補行為進行調查不足兩個月。

新能源汽車2016年保持一倍以上增長

在公佈新能源車產業騙補調查進度的同時,對於新能源車在2016年的發展情況,苗圩認為,中國新能源車目前已經進入成長期,同時也代表著汽車產業調整的方向。“新能源汽車將保持高增長態勢,預計今年有一倍以上的增長。”苗圩說。

中國汽車工業協會發佈的資料顯示,2015年我國生產新能源汽車約34萬輛,銷售約33萬輛,同比分別增長3.3倍、3.4倍。

另外,在車企方面,自主品牌、合資品牌等都開始重視新能源車車型的研發和生產。根據汽車集團此前發佈的“十三五”規劃顯示,上汽集團未來五年新能源業務將新增投入200億元,新能源車目標銷量為60萬輛;廣汽集團則到2020年新能源汽車產銷規模力爭突破20萬輛;奇瑞汽車力爭新能源汽車到2020年產銷規模達到20萬輛。

面臨兩個瓶頸

苗圩認為,在新能源車保持高速發展的同時,目前新能源汽車仍面臨兩個瓶頸,“一是產品端,要集中攻克以動力電池為代表的產品性能、可靠性、續航里程、壽命等難題;二是應用端,要重視社會充電設施建設等”。苗圩表示。

2月24日,國務院常務會議就提出,動力電池核心技術的研發與政府獎勵掛鉤以及引入社會資本構建新能源車基礎設施等幫助新能源車產業發展的新措施。

具體而言,中央財政採取以獎代補方式,根據動力電池性能、銷量等指標對企業給予獎勵,加大對動力電池數位化製造成套裝備的支援。另外,國家還將利用中央預算內投資和配電網專項金融債等支持各地充電設施建設,鼓勵地方建立以充電量為基準的獎勵補貼政策,減免充電服務費用。

文章來源:北京商報

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

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

台灣海運大陸貨務運送流程

兩岸物流進出口一站式服務

Java 讀取Word批註中的文本和圖片

本文將介紹讀取Word批註的方法,包括讀取Word批註中的文本及圖片。關於操作Word批註的方法還可以參考這兩篇文章:下面將通過Java代碼來演示如何讀取批註。

工具使用: Word類庫(Free Spire.Doc for Java免費版

Jar 文件獲取:可通過官網,下載後解壓文件,並將lib文件夾下的Spire.Doc.jar文件導入java程序;也可以通過Maven倉庫安裝導入,具體路徑配置及導入方法可以參考

測試文檔如下:批註中包含文本和圖片

 

 

 

【示例1 讀取批註中的文本

import com.spire.doc.* ;
 import com.spire.doc.documents.Paragraph;
 import com.spire.doc.fields.Comment;
 import com.spire.doc.fields.TextRange;

public  class ReadComment {
     public  static  void main(String[] args) {
         // 加載測試文檔 
        Document doc = new Document();
        doc.loadFromFile( "sample.docx" );

        // 實例化String類型變量 
        String text = "" ;

        // 遍歷所有批註
        for ( int i = 0;i< doc.getComments().getCount();i++ ){
            Comment comment = doc.getComments().get(i);
             // 遍歷所有批註中的段落
            for ( int j= 0;j < comment.getBody().getParagraphs().getCount();j++ ) {
                Paragraph paragraph = comment.getBody().getParagraphs().get(j);
                 // 遍歷段落中的對象
                for (Object object : paragraph.getChildObjects()) {
                     // 讀取文本
                    if (object instanceof TextRange) {
                        TextRange textRange = (TextRange) object;
                        text = text + textRange.getText();
                    }
                }
            }
        }
        // 輸入文本內容
        System.out.println(text);
    }
}

批註文本讀取結果:

 

【示例2 讀取批註中的圖片

import com.spire.doc.* ;
 import com.spire.doc.documents.Paragraph;
 import com.spire.doc.fields.Comment;
 import com.spire.doc.fields.DocPicture;

import javax.imageio.ImageIO;
 import java.awt.image.RenderedImage;
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;


public  class ExtractImgsInComment {
     public  static  void main(String[] args) throws IOException{
         // 加載測試文檔 
        Document doc = new Document();
        doc.loadFromFile( "sample.docx" );

        // 創建ArrayList數組對象 
        ArrayList images = new ArrayList();

        // 遍歷所有批註
        for ( int i = 0;i< doc.getComments().getCount();i++ ){
            Comment comment = doc.getComments().get(i);
             // 遍歷所有批註中的段落
            for ( int j= 0;j < comment.getBody().getParagraphs().getCount();j++ ) {
                Paragraph paragraph = comment.getBody().getParagraphs().get(j);
                 // 遍歷段落中的對象
                for (Object object : paragraph.getChildObjects()) {
                     // 獲取圖片對象
                    if (object instanceof DocPicture){
                        DocPicture picture = (DocPicture) object;
                        images.add(picture.getImage());
                    }
                }
            }
        }
        // 提取圖片,並指定圖片格式
        for ( int z = 0; z< images.size(); z++ ) {
            File file = new File(String.format("圖片-%d.png" , z));
            ImageIO.write((RenderedImage) images.get(z), "PNG" , file);
        }
    }
}

批註圖片讀取結果:

 

(本文完)

 

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

【其他文章推薦】

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

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

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

台灣海運大陸貨務運送流程

兩岸物流進出口一站式服務