大眾宣佈要大力研發扁平電池 用於未來電動汽車

據報導,大眾宣佈要努力研發扁平電池,並將其應用到大眾未來的電動汽車中。

大眾CEO赫伯特•迪斯(HerbertDiess)確認,扁平電池即將研發成功,這將是該公司在為綠色未來奮鬥中所取得的巨大突破。在未來幾年,大眾將推出更多對環境影響較小的車輛,專注高效汽車,努力擺脫“柴油排放門”的影響。

之前的“柴油門”迫使大眾加強了對汽車電氣化的研發力度,這也是其準備應用扁平電池的原因。赫伯特•迪斯還說,大眾正在建立名為“新大眾”的新型商業部門,集汽車數位化開發和相有關機動服務於一體,而且大眾需要在軟體發展和電池生產方面投資更多。

同時,大眾旗下的奧迪也宣佈擬於2018年推出一款純電動跨界車,是e-tron quattro概念車的升級版,名字可能為“Q6”。大眾還將在2020年前推出新一代輝騰電動車。

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

【其他文章推薦】

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

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

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

巴基斯坦洩漏不明氣體 至少14死逾600人不適

摘錄自2020年2月19日星島日報報導

巴基斯坦南部信德省卡拉奇洩漏不明氣體,至少14人死亡,約650人不適。

事發在本月16日晚上,卡拉奇洩漏不明氣體,導致數百人身體不適,湧入醫院求診。有市民表示,當晚看到空氣中瀰漫着煙霧,吸入後立即無法呼吸和想嘔吐,有人就出現心跳加速、胸口痛、眼睛痕癢等癥狀。而事故發生後,不少人都帶上口罩,希望避免吸入氣體,有人吸入洩漏氣體後不久就死亡。

當局表示,目前仍無法判斷氣體的種類和洩漏來源,初步無人為破壞跡象,目前將居民暫時撤離至安全地點。巴基斯坦軍方也派出化學兵前往當地進行進一步探測。

另外,該區周二有數百人上街集會以示不滿,要求當局盡快查明氣體來源。

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

【其他文章推薦】

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

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

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

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

※專營大陸快遞台灣服務

台灣快遞大陸的貨運公司有哪些呢?

VS2019打包WPF安裝程序最新教程

VS2019打包WPF安裝程序最新教程,使用Visual Studio 2019開發的WPF程序如果想要打包為安裝程序,除了在VS2019找到WPF項目類庫直接右鍵發布之外,更常用的還是將其打包為exe或者msi的安裝程序;打包成安裝程序的話,客戶得到安裝程序直接安裝即可使用,即使在離線環境情況下,安裝好就可以使用了。

一些傳統行業發布程序時,比較常用這種方法,如醫療,教育等。

演示程序打包一覽

在本教程中,我完整的打包了一個簡單的WPF程序,最終安裝好了以後,在桌面有一個我的程序的快捷方式圖標,點擊這個圖標即可打開應用程序。

WPF安裝程序桌面圖標  

程序運行后的效果如下所示:

VS2019打包WPF安裝程序運行效果 

VS2019打包WPF安裝程序步驟

使用VS2019打包WPF安裝程序有很多種方法,本篇教程基於VS擴展插件Microsoft Visual Studio Installer Projects工具來打包,實際上此工具,在VS2010時自帶有,只是後面版本的Visual Studio取消了此插件,現在需要單獨安裝。

安裝打包Installer插件

安裝Microsoft Visual Studio Installer Projects插件有兩種方式。一是下載插件單獨安裝,二是在VS裏面在線安裝。

Microsoft Visual Studio Installer Projects下載地址:

官方下載地址:

 

下載下來后,你會在你的保存目錄看到此文件的圖標是這樣的,直接雙擊安裝就可以了,如果打開了Visual Studio,先將VS關閉后再安裝即可。

安裝插件

如果你不能從官網下載到,可以從本站直接下載即可。離線下載安裝的方式適用於斷網環境開發。

VS在線安裝Microsoft Visual Studio Installer Projects

Microsoft Visual Studio Installer Projects插件也可以在線直接安裝,步驟為:點擊菜單欄【擴展(X)】,然後在彈出來的一個窗體裏面,在右側搜索框裏面搜索“Microsoft Visual Studio Installer Projects”,一般第1個就是它了,然後點擊Download(下載),然後安裝就可以了。

VS在線安裝Microsoft Visual Studio Installer Projects

點擊Download后如下:

下載插件

下載完畢后,你需要把VS關閉掉,它會自動的安裝。

自動安裝插件

安裝好了后,啟動VS即可。

創建安裝項目

重新打開Visual Studio,打開一個你現有的包含WPF項目的解決方案即可,然後創建安裝項目。在解決方案上右鍵 –> 【新建項目】–> 【Setup Project】,添加Setup Project項目時,VS2019可以搜索項目模板,如下圖所示。

創建安裝項目

創建好了后,主界面變成如下圖所示:

安裝項目主界面

左邊窗口三個文件夾圖片說明如下:

Application Folder:應用程序包含的文件設置,指最終在客戶電腦上的安裝根目錄。如下圖所示:

應用程序目錄子目錄

User’s Desktop:用戶桌面快捷方式設置,用戶桌面,一般放個快捷圖標。

User’s Programs Menu:用戶啟動菜單的快捷方式設置,一般也是放快捷圖標。

Application Folder是安裝程序的根目錄,你編寫的程序生成的dll,安裝后就存放在這個目錄。

添加項目輸出

安裝項目建好了后,需要要往裡面添加項目輸出,操作方式為:右鍵Application Folder —>Add—>項目輸出。

該操作也可以直接在安裝程序項目類庫上面通過右鍵操作來添加項目輸出,如下圖所示:

右鍵設置屬性

設置項目屬性

項目屬性的設置,是用於最終一個生成安裝程序的描述信息,這個描述信息,這個描述信息主要內容有程序的作者,標題,公司信息,技術支持等等。最直觀的方式可以通過2種方式查看。

第一種查看方式:安裝前將鼠標放到安裝程序文件上,會有提示信息,如下圖所示:

屬性提示

第二種查看方式:安裝后在控制面板處,找到安裝程序,即可查看,如下圖所示:

控制面板看到的安裝后程序描述  

項目屬性的設置方式為:(1)左鍵選中項目,(2)點擊解決方案欄屬性,注意,不是右鍵選擇屬性,而是如下圖一樣選擇屬性。

設置安裝程序屬性

當你點了屬性后,會出現如下的窗口。

設置屬性主窗口

在當前的演示程序中,我是按照上圖做的設置,設置都很簡單,不需要做額外的解釋,如果有不明白的,可以加群與我聯繫。

添加快捷方式圖標

程序安裝好,我們當然希望用戶能夠快速的打開我們的應用程序,你就需要為你的安裝程序製作快捷方式,方法很簡單。

方法:(1)中間窗口右鍵,創建新的快捷方式

創建新的快捷方式

(2)彈窗裏面選擇Application Folder,雙擊進入另外一個界面

創建新的快捷方式第2步

雙擊后,進入下圖這個界面,選擇主輸出即可。

創建新的快捷方式第3步

完了後點擊OK按鈕,就進入下圖這個界面。然後將快捷方式名稱改為你應用程序的名稱。

改快捷方式圖標名稱

改名后的效果:

改名后的效果

最後一步,也是最重要一步,在上圖中選中改名后的圖標,將其拖到左側窗口User’s Desktop目錄即可。

拖動快捷方式圖標到對應位置

開始菜單圖標(User’s Programs Menu)設置方式同上面的步驟是一樣的,這裏就不再重複了。

依賴文件

打包正式項目的時候,界面程序可能依賴於很多其它類庫,或者第3方的dll文件,我們需要把它們一起打包,並且這些第3方程序或者dll需要同主程序在同一個安裝路徑下,那麼在打包時,也就需要額外的把這些文件也打包進來。

所有的操作都可以在中間窗口通過右鍵添加文件,程序集來實現,如下圖所示

添加依賴文件

添加註冊表項目

製作的安裝包如果要添加註冊表項目,可以通過選中安裝程序項目,然後右鍵,在彈出的菜單裏面找到【View】,即可以添加註冊表項目,按照提示一步一步操作即可。

另外有些打包的程序,需要在安裝前或者安裝后做一些額外的操作,都可以通過自定義操作來實現,如主程序安裝好了以後,還得安裝一個windows服務程序,再安裝另外一個自動升級程序,都可以通過這裏來實現。

添加註冊表項目

以上的基本操作熟悉后,相信對於簡單的桌面程序打包應該沒有什麼問題了。

另外需要注意的是,對外打包,需要更改為Release模式

打包依賴框架

最後再說一下關於 .net 環境的問題,如果你需要在打包時,將相應版本的.Net Framework一起打包到安裝程序裏面也是可以的,只是要注意,有可能你的打包機器上並沒有安裝相應的.net framework文件,則需要到官方或者網上下載對應版本的文件,例如這個演示程序,我設定的依賴框架是 4.5.2版本的,那麼需要將NDP452-KB2901907-x86-x64-AllOS-CHS.exe(.net framework 4.5.2安裝文件)放到指定目錄才能正常的生成打包文件。

需要將.net 的離線安裝文件放到以下目錄,其它版本則注意下路徑即可,一般C:\Program Files (x86)\Microsoft SDKs\ClickOnce Bootstrapper\Packages

目錄下面有不同版本的以DotNetFX開頭的目錄,如下圖所示:

依賴框架保存目錄 依賴框架保存目錄

將相應的版本的.net framework框架文件放到對應的目錄即可,我這個演示程序是放到下面這個目錄的。

C:\Program Files (x86)\Microsoft SDKs\ClickOnce Bootstrapper\Packages\DotNetFX452\zh-Hans

具體打包步驟為:右鍵安裝項目,選擇屬性,彈出窗口點擊Prerequisites…按鈕。再在彈出的窗口選擇你應用程序需要的框架版本即可。可以選擇多個。

Prerequisites

選擇需要打包的框架版本即可。

框架版本

待安裝程序打包成功后,即可在生成目錄看到該框架的安裝包,如下圖所示:

生成目錄框架文件

好了,以上就是使用VS2019打包WPF安裝程序的完整步驟。

演示程序可以點擊這裏下載。

打包后安裝一覽

成生打包文件成功后,就可以雙擊msi或者exe文件進行安裝了,安裝效果圖如下:

安裝打包程序

選擇安裝目錄

安裝打包程序

在演示的這個打包程序裏面,比較簡單,實際上你可以添加用戶協議文件,輸入用戶信息后才能安裝,這些都可以在打包時設置。

演示程序源碼可以在原文鏈接處下載

本文首發於:

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

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

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

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

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

※專營大陸快遞台灣服務

台灣快遞大陸的貨運公司有哪些呢?

關於GDAL讀寫Shp亂碼的問題總結

目錄

1. 正文

最近在使用GDAL讀寫Shp格式中的屬性字段的時候也遇到了中文亂碼的問題,總結下自己遇到的情況。

1.1. shp文件本身的編碼的問題

應該是由於shp格式加入了對寬字符的支持,所以導致有段時間的shp文件和ArcGIS是存在不匹配的問題,所以在網上搜索資源的時候遇到了大量的關於ArcMap显示shp屬性表出現亂碼的問題。現在的shp格式的文件應該已經穩定下來了,新添加了一個.cpg的文件,裏面保存着屬性表的編碼格式:

圖1-1:shp格式的.cpg文件

從ArcGIS10.2開始,只要是屬性表編碼與.cpg文件記錄的編碼方式一致,就不會再有显示亂碼的問題。網上查詢到的修改註冊表的方法,我在ArcGIS10.2中試過,似乎已經不再起效了。

那麼對於沒有.cpg或者的情況,應該可以看屬性表.dbf文件。如果編碼方式正確,這個文件用文本編輯器打開是可以看到正常的中文的:

圖1-2:shp格式的.dbf文件

在正常显示中文情況下,可以查看下文件的編碼方式:

圖1-3:查看編碼方式

當然,如果遇到亂碼,可以嘗試用別的編碼方式打開,這樣你就能知道屬性表具體是什麼編碼了。對於國內的情況來說,只有ANSI編碼和UNICODE編碼兩種:其中簡體中文系統中ANSI編碼就是GB2312編碼;UTF-8是UNICODE編碼的一種具體實現。

1.2. 設置讀取的編碼方式

1.2.1. GDAL設置

可以通過全局設置函數CPLSetConfigOption(),來配置讀取Shp文件的讀取編碼。例如對於簡體中文系統中ANSI編碼,可以設置為GBK:

CPLSetConfigOption("SHAPE_ENCODING","GBK");

上面這種方式是全局設置的,如果想設置單個文件的編碼方式也是可以的。例如,打開一個矢量文件讀取為UTF-8的數據集:

char** ppszOptions = NULL;
ppszOptions = CSLSetNameValue(ppszOptions, "ENCODING", "UTF-8");
GDALDataset *poDS = (GDALDataset*)GDALOpenEx(filePath.c_str(), GDAL_OF_VECTOR, NULL, ppszOptions, NULL);

網上提供的解決方案都是將編碼方式設置為空[1],這種方式應該更具有通用性,起碼我這裏讀取GBK和UTF-8格式的Shp的格式都是可以的:

CPLSetConfigOption("SHAPE_ENCODING","");

1.2.2. 解碼方式

如果讀取出來的字段屬性仍然是亂碼,就應該考慮字符串的解碼問題,就是獲取的字段屬性字符串沒有正確的解碼出來。例如讀取UTF-8的Shp文件的屬性字段:

OGRFeature *poFeature;
while ((poFeature = poLayer->GetNextFeature()) != NULL)
{
    OGRGeometry *pGeo = poFeature->GetGeometryRef();
    OGRwkbGeometryType pGeoType = pGeo->getGeometryType();

    //      
    OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();
    int n = poFDefn->GetFieldCount(); //獲得字段的數目,不包括前兩個字段(FID,Shape);
    for (int iField = 0; iField <n; iField++)
    {
        //輸出每個字段的值
        //cout << poFeature->GetFieldAsString(iField) << "    ";
        cout << UTF8_To_string(poFeature->GetFieldAsString(iField)) << "   ";           
    }
    //cout << endl;   

    OGRFeature::DestroyFeature(poFeature);
}

默認情況下,cout是無法正確打印輸出UTF-8字符編碼的,通過UTF8_To_string這個函數,將UTF-8編碼的字符串轉換成本地ANSI編碼,也就是GBK編碼字符串,就可以正確輸出显示了。附帶一下兩者的轉換函數[2]

// UTF8轉std:string
// 轉換過程:先將utf8轉雙字節Unicode編碼,再通過WideCharToMultiByte將寬字符轉換為多字節。
std::string UTF8_To_string(const std::string& str) 
{ 
    int nwLen = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, NULL, 0); 
    wchar_t* pwBuf = new wchar_t[nwLen + 1];    //一定要加1,不然會出現尾巴 
    memset(pwBuf, 0, nwLen * 2 + 2); 
    MultiByteToWideChar(CP_UTF8, 0, str.c_str(), str.length(), pwBuf, nwLen); 
    int nLen = WideCharToMultiByte(CP_ACP, 0, pwBuf, -1, NULL, NULL, NULL, NULL); 
    char* pBuf = new char[nLen + 1]; 
    memset(pBuf, 0, nLen + 1); 
    WideCharToMultiByte(CP_ACP, 0, pwBuf, nwLen, pBuf, nLen, NULL, NULL);

    std::string strRet = pBuf; 

    delete []pBuf; 
    delete []pwBuf; 
    pBuf = NULL; 
    pwBuf = NULL; 

    return strRet; 
} 

// std:string轉UTF8
std::string string_To_UTF8(const std::string& str) 
{ 
    int nwLen = ::MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, NULL, 0); 
    wchar_t* pwBuf = new wchar_t[nwLen + 1];    //一定要加1,不然會出現尾巴 
    ZeroMemory(pwBuf, nwLen * 2 + 2); 
    ::MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.length(), pwBuf, nwLen); 
    int nLen = ::WideCharToMultiByte(CP_UTF8, 0, pwBuf, -1, NULL, NULL, NULL, NULL); 
    char* pBuf = new char[nLen + 1]; 
    ZeroMemory(pBuf, nLen + 1); 
    ::WideCharToMultiByte(CP_UTF8, 0, pwBuf, nwLen, pBuf, nLen, NULL, NULL); 

    std::string strRet(pBuf); 

    delete []pwBuf; 
    delete []pBuf; 
    pwBuf = NULL; 
    pBuf  = NULL; 

    return strRet; 
} 

1.2.3. 其他

還有個值得注意的問題就是Shp格式的屬性字段名稱的長度最大隻能支持10個字符。如果採用UTF-8編碼,可能用不了幾个中文字符就被截斷了,這個時候屬性字段名稱也可能存在亂碼。

2. 參考

[1]
[2]

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

【其他文章推薦】

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

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

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

大陸寄台灣空運注意事項

大陸海運台灣交貨時間多久?

西伯利亞發現仍遠古死鳥 估計有4.6萬年歷史

摘錄自2020年2月23日星島日報報導

科學家正研究一隻在俄羅斯西伯利亞冰天地雪地中發現、估計由對上一次冰河時期保留到現在的雀鳥屍體,推算牠已有4.6萬年歷史。   

科學家認出那是一隻角百靈,在西伯利亞東北部偏遠的貝拉亞戈拉村內被發現,由於長期被埋及冰封,至今仍然保存良好,沒有腐化。瑞典自然歷史博物館的專家參與研究和化驗,並利用放射性碳技術推算牠已有4.6萬年歷史。   

其中一位專家達倫對記者說,研究顯示,這隻遠古雀鳥是目前常見的兩種百靈鳥的祖先。科學家相信,對上一次冰河時期接近尾聲時,地球的氣候出現變化,令新物種出現。

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

【其他文章推薦】

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

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

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

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

※專營大陸快遞台灣服務

台灣快遞大陸的貨運公司有哪些呢?

蝗災肆虐非洲東部 烏干達大噴除蟲劑

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

聯合國糧農組織估計,覆蓋一平方公里面積的沙漠蝗蟲,可以吃掉3.5萬人一天的糧食,專家則是指出,蝗蟲最可怕的地方在於繁殖力驚人。烏干達當局目前派出大批軍人,噴灑化學藥劑對沙漠蝗蟲進行撲殺,不過當地農民也有人質疑,這些除蟲劑對牲畜、土壤與植物,恐怕也會帶來後遺症。

烏干達東北部以畜牧和養蜂為主的居民,看到這一幕全都憂心忡忡,擔心生計會出問題。烏干達畜牧居民羅魯說:「我們不知道對未來有何衝擊,也許後遺症會持續一兩年。你看到這裡是個菜園,一旦噴灑了化學物質,我們不知道效力會持續多久,最終我們會看到它的影響。」

聯合國警告,如果不積極採取有效措施,接下來東非地區雨量充沛有利蝗蟲卵孵化,到了六月蝗蟲數量將成長500倍,屆時危機將更形惡化。

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

【其他文章推薦】

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

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

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

大陸寄台灣空運注意事項

大陸海運台灣交貨時間多久?

加拿大原民癱瘓鐵路抗爭 警強勢驅離

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

不滿天然氣管線的興建工程,加拿大有群眾長達幾個星期阻斷鐵路來表達抗議。不過就在當地時間24號,警方展開強勢驅離,將各重要路線搭建的帳篷拆除,抗爭人士也被警方逮捕。而幾個星期來鐵路停擺,產業供應鍊中斷,經濟遭到重創,大約有1500人因此失業。

這波抗爭的起因,是所謂的「海岸線天然氣管線計畫」,路線跨越卑詩省北部,終點則為基蒂瑪特,並在當地建立天然氣液化廠區,以及可供船舶停靠的港口。這條路線跨越了卑詩省境內的原住民區域,因此在規劃階段,就持續和各有關部落溝通,並獲得沿線20個部落的民選議會或公民投票通過,工程也在2019年展開。

但世襲的部落首領站出來反對,並發動部份族人、串聯加拿大綠黨等環保與政治團體,進行反對管線工程的抗爭。這個月初,警方因為奉法院命令逮捕數十名示威者,引發更大的抗議,導致全國鐵路運輸幾乎停擺。加拿大政府強調,會在經濟發展與環境和原住民權益上,取得平衡點。不過英國廣播公司BBC的報導說,原住民部落內部也是意見分歧。

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

【其他文章推薦】

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

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

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

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

※專營大陸快遞台灣服務

台灣快遞大陸的貨運公司有哪些呢?

金融業自省? 摩根大通警告客戶 氣候危機威脅人類

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

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

【其他文章推薦】

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

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

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

大陸寄台灣空運注意事項

大陸海運台灣交貨時間多久?

航運業減碳新招 看上阿摩尼亞

摘錄自2020年02月20日台灣醒報報導

航運業減碳又有新招。英國研究指出,肥料中常見的氨是取代貨輪柴油的最佳選擇,而且燃燒過程中並不會產生二氧化碳。對此,航運產業也希望能以氨取代柴油,幫助對抗氣候變遷。而最快在10年內,貨輪將可利用氨驅動。

據《BBC》報導,英國皇家學會研究人員大衛表示,「氨是唯一能驅動貨輪航行各地零排碳的燃料。」研究也指出,製造氨雖會產生碳,但可透過新技術製造零碳的氨。首先是在製造時將二氧化碳捕捉並埋在地下,另一方法是利用再生能源製造氨。

負責認證全球船隻的韓國船級社稍早也指出,由於氨作為燃料無須大量專門技術,因此是一種可行的潔淨能源。該組織在報告中指出,「氨的優勢在於相對容易存儲,因為與氫相比,前者具有合理能量、密度與液化溫度,與其他碳中性燃料相比,其生產與運輸成本也較低,並且已具備可穩定生產與運輸的技術。」

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

【其他文章推薦】

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

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

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

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

※專營大陸快遞台灣服務

台灣快遞大陸的貨運公司有哪些呢?

談一談依賴倒置原則

為獲得良好的閱讀體驗,請訪問原文:

一、概念

依賴倒置原則(Dependence Inversion Principle,DIP)是指設計代碼結構時,高層模塊不應該依賴低層模塊,二者都應該依賴其抽象。

抽象不應該依賴細節,細節應該依賴抽象。通過依賴倒置,可以減少類與類之間的耦合性,提高系統的穩定性,提高代碼的可讀性和可維護性,並且能夠降低修改程序所造成的風險。

二、為什麼

先來看一個例子

可是依賴倒置原則是怎麼做到的呢?我們先來看一個例子:一個愛學習的「我沒有三顆心臟」同學現在正在學習「設計模式」和「Java」的課程,偽代碼如下:

public class Wmyskxz {

    public void studyJavaCourse() {
        System.out.println("「我沒有三顆心臟」同學正在學習「Java」課程");
    }

    public void studyDesignPatternCourse() {
        System.out.println("「我沒有三顆心臟」同學正在學習「設計模式」課程");
    }
}

我們來模擬上層調用一下:

public static void main(String[] args) {
    Wmyskxz wmyskxz = new Wmyskxz();
    wmyskxz.studyJavaCourse();
    wmyskxz.studyDesignPatternCourse();
}

原因一:有效控制影響範圍

由於「我沒有三顆心臟」同學熱愛學習,隨着學習興趣的 “暴增”,可能會繼續學習 AI(人工智能)的課程。這個時候,因為「業務的擴展」,要從底層實現到高層調用依次地修改代碼。

我們需要在 Wmyskxz 類中新增 studyAICourse() 方法,也需要在高層調用中增加調用,這樣一來,系統發布后,其實是非常不穩定的。顯然在這個簡單的例子中,我們還可以自信地認為,我們能 Hold 住這一次的修改帶來的影響,因為都是新增的代碼,我們回歸的時候也可以很好地 cover 住,但實際的情況和實際的軟件環境要複雜得多。

最理想的情況就是,我們已經編寫好的代碼可以 “萬年不變”,這就意味着已經覆蓋的單元測試可以不用修改,已經存在的行為可以保證保持不變,這就意味着「穩定」。任何代碼上的修改帶來的影響都是有未知風險的,不論看上去多麼簡單。

原因二:增強代碼可讀性和可維護性

另外一點,你有沒有發現其實加上新增的 AI 課程的學習,他們三節課本質上行為都是一樣的,如果我們任由這樣行為近乎一樣的代碼在我們的類裏面肆意擴展的話,很快我們的類就會變得臃腫不堪,等到我們意識到不得不重構這個類以緩解這樣的情況的時候,或許成本已經變得高得可怕了。

原因三:降低耦合

《資本論》中有這樣一段描述:

在商品經濟的萌芽時期,出現了物物交換。假設你要買一個 iPhone,賣 iPhone 的老闆讓你拿一頭豬跟他換,可是你並沒有養豬,你只會編程。所以你找到一位養豬戶,說給他做一個養豬的 APP 來換他一頭豬,他說換豬可以,但是得用一條金項鏈來換…

所以這裏就出現了一連串的對象依賴,從而造成了嚴重的耦合災難。解決這個問題的最好的辦法就是,買賣雙發都依賴於抽象——也就是貨幣——來進行交換,這樣一來耦合度就大為降低了。

三、怎麼做

我們現在的代碼是上層直接依賴低層實現,現在我們需要定義一個抽象的 ICourse 接口,來對這種強依賴進行解耦(就像上面《資本論》中的例子那樣):

接下來我們可以參考一下偽代碼,先定一個課程的抽象 ICourse 接口:

public interface ICourse {
    void study();
}

然後編寫分別為 JavaCourseDesignPatternCourse 編寫一個類:

public class JavaCourse implements ICourse {

    @Override
    public void study() {
        System.out.println("「我沒有三顆心臟」同學正在學習「Java」課程");
    }
}

public class DesignPatternCourse implements ICourse {

    @Override
    public void study() {
        System.out.println("「我沒有三顆心臟」同學正在學習「設計模式」課程");
    }
}

然後把 Wmyskxz 類改造成如下的樣子:

public class Wmyskxz {

    public void study(ICourse course) {
        course.study();
    }
}

再來是我們的調用:

public static void main(String[] args) {
    Wmyskxz wmyskxz = new Wmyskxz();
    wmyskxz.study(new JavaCourse());
    wmyskxz.study(new DesignPatternCourse());
}

這時候我們再來看代碼,無論「我沒有三顆心臟」的興趣怎麼暴漲,對於新的課程,都只需要新建一個類,通過參數傳遞的方式告訴它,而不需要修改底層的代碼。實際上這有點像大家熟悉的依賴注入的方式了。

總之,切記:以抽象為基準比以細節為基準搭建起來的架構要穩定得多,因此在拿到需求后,要面相接口編程,先頂層設計再細節地設計代碼結構。

參考資料

  1. – 那些年搞不懂的高深術語——依賴倒置•控制反轉•依賴注入•面向接口編程
  2. 《Spring 5 核心原理 與 30 個類手寫實戰》 – 譚勇德 著

按照慣例黏一個尾巴:

歡迎轉載,轉載請註明出處!
獨立域名博客:wmyskxz.com
簡書ID:
github:
歡迎關注公眾微信號:wmyskxz
分享自己的學習 & 學習資料 & 生活
想要交流的朋友也可以加qq群:3382693

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

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

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

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

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

※專營大陸快遞台灣服務

台灣快遞大陸的貨運公司有哪些呢?