分類
發燒車訊

【譯】Introducing YARP Preview 1

1 YARP

    YARP是一個項目,用於創建反向代理服務器。它開始於我們注意到來自微軟內部團隊的一系列問題。他們要麼為其服務構建反向代理,要麼詢問 API 和用於構建 API 的技術。因此我們決定讓他們聚在一起開發一個通用解決方案,該解決方案形成了YARP。

    YARP是一個反向代理工具包,用於使用 ASP.NET 和 .NET 中的基礎設施在 .NET 中構建代理服務器。YARP 的主要區別是,它被設計為易於自定義和調整,以滿足不同方案的特定需求。YARP 插入ASP.NET管道以處理傳入請求,然後它擁有自己的子管道,用於執行將請求代理到後端服務器的步驟。客戶可以添加其他module,或根據需要更換常備module。

    隨着其開發已基本到位,我們製作了 YARP 的第一個正式版本(Preview 1),以便更好地協作並獲得反饋。

2 Preview 1 是什麼

    • 核心代理的基礎結構
    • 基於配置的路由定義
    • 擴展性的管道模型
    • Forwarded標頭(硬編碼)
    • 目標 .NET Core 3.1 和 .NET Core 5

3 Preview 1 不包括

    • 會話親和性(又稱會話保持)
    • Forwarded標頭(可配置)
    • 基於代碼的路由定義和預請求路由
    • 指標和日誌
    • 性能調整
    • 連接篩選

4 快速開始

Step 01 下載.net framework

    YARP 適用於 .NET Core 3.1 或 .NET 5 Preview 4(或更高版本)。

Step 02 創建一個ASP.NET Core項目

Step 03 打開項目,添加引用,確保其包含

<PropertyGroup>
    <TargetFramework>netcoreapp5.0</TargetFramework>
</PropertyGroup>

  和

<ItemGroup>
    <PackageReference Include="Microsoft.ReverseProxy" Version="1.0.0-preview.1.*" />
</ItemGroup>

Step 04 Startup.cs

  YARP 當前使用配置文件來定義代理的路由和終結點。在ConfigureServices方法中加載。

public IConfiguration Configuration { get; }
public Startup(IConfiguration configuration)
{
    Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
    services.AddReverseProxy()
        .LoadFromConfig(Configuration.GetSection("ReverseProxy"));
}

  Configure方法定義ASP.NET的請求處理管道。反向代理插入到ASP.NET的終結點路由,然後具有其自己的代理子管道。在這裏,可以添加代理管道模塊(如負載均衡)來自定義請求的處理。

/// <summary>
/// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
/// </summary>
public void Configure(IApplicationBuilder app)
{
    app.UseHttpsRedirection();

    app.UseRouting();
    app.UseAuthorization();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
        endpoints.MapReverseProxy(proxyPipeline =>
        {
            proxyPipeline.UseProxyLoadBalancing();
        });
    });
}

Step 05 配置

  YARP 的配置定義在appsettings.json中:

"ReverseProxy": {
    "Routes": [
      {
        "RouteId": "app1",
        "BackendId": "backend1",
        "Match": {
          "Methods": [ "GET", "POST" ],
          "Host": "localhost",
          "Path": "/app1/"
        }
      },
      {
        "RouteId": "route2",
        "BackendId": "backend2",
        "Match": {
          "Host": "localhost"
        }
      }
    ],
    "Backends": {
      "backend1": {
        "LoadBalancing": {
          "Mode": "Random"
        },
        "Destinations": {
          "backend1_destination1": {
            "Address": "https://example.com:10000/"
          },
          "backend1_destination2": {
            "Address": "http://example.com:10001/"
          }
        }
      },
      "backend2": {
        "Destinations": {
          "backend2_destination1": {
            "Address": "https://example.com:10002/"
          }
        }
      }
    }
  }
    • Backends:請求可以路由到的服務器群集。
    • Destinations:是用於指標、日誌記錄和會話保持的標識符。
    • Address:URL前綴(基地址)
    • Routes:根據請求的各個方面(如主機名、路徑、方法、請求標頭等)將傳入請求映射到後端群集。路由是有序的,因此,需要首先定義 app1 路由,因為 route2 將作為尚未匹配的所有路徑的 catchall。

  好啦,先介紹到這裏。

原文鏈接

  https://devblogs.microsoft.com/dotnet/introducing-yarp-preview-1/?utm_source=vs_developer_news&utm_medium=referral

 

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

【其他文章推薦】

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

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

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

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

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

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

分類
發燒車訊

看完這些黑科技,我覺得寶馬的真實身份其實是科技公司!

寶馬通過一台基於全新BMW 5系的原型車展示了未來高度自動駕駛汽車極為個性化、智能化的駕駛感受。在高度自動駕駛狀態下,駕駛者的雙手和雙腳都得到了解放,無需手握方向盤和控制油門、剎車。同時,BMW實時交通信號系統還可以預測前方下一組信號燈情況,讓駕駛者更好地進行選擇。

(拉斯維加斯/北京)2017年1月5日,一年一度的科技盛會、2017國際消費电子展在拉斯維加斯拉開帷幕。寶馬集團攜一系列前瞻理念和科技成果亮相,展現了其在智能互聯、未來汽車內部設計、控制與显示系統、自動駕駛等創新領域蓬勃的創造力。

寶馬集團正在成為引領数字出行生活的重要力量。在其願景中,自動駕駛技術將為駕駛者帶來更多選擇和自由;豐富的智能互聯服務圍繞人的需求,將車輛與用戶的数字生活無縫對接,讓出行和生活更高效、便捷、充滿樂趣。重要的是,這些離我們的生活並不遙遠,近年在CES上亮相的手勢控制、遠程3D環視影像等,均迅速應用於量產車型,體現了寶馬在行業內的領先地位。

這不是科幻大片,是你未來的汽車

在CES展台,寶馬集團通過BMW i Inside Future未來內室研究項目展示出,未來配備自動駕駛技術的汽車,其座艙將根據用戶需求,在休息室、辦公室和娛樂室之間實現自由切換。

未來,車內空間的氛圍和控制方式將取決於駕駛模式。在主動駕駛模式下,主動駕駛的功能將處於車內中心位置。在高度自動駕駛模式下,系統將显示更多的舒適、信息娛樂和通訊功能。導航系統可以推薦適合高度或完全自動駕駛的行車路線,並在到達路口時發出提醒。未來,自動駕駛將首先應用於高速或單向行駛道路。

對人機交互模式的創新是未來車輛的重要課題。寶馬在最近的兩屆CES上都帶來了創新的人機交互系統——手勢控制和AirTouch手勢控制系統。其中手勢控制已經應用於量產的新BMW 7系和全新BMW 5系車型。今年,寶馬又帶來了BMW HoloActive觸控系統,將人機交互體驗提升至新的高度。

BMW HoloActive觸控系統的原理與平視显示系統類似,通過反射原理在中控台位置投射出一塊“懸浮”屏幕,駕駛者通過指尖“點擊”虛擬屏幕來控制車輛,呈現出科幻大片的既視感。這套系統通過高敏感度的攝像頭捕捉駕駛者指尖的動作。在超聲波裝置的配合下,客戶的手指可以感受到輕微的壓力,模擬了傳統觸控屏的體驗,讓操作更符合人們的習慣。

未來的車輛內,駕駛者和乘客可以各自享受音樂而不互相干擾。首次展出的音效裝置BMW Sound Curtain通過座椅頭枕發射出不同的聲音信號,為座位上的用戶提供個性化的專屬娛樂信息。一個可摺疊的大尺寸屏幕可從車內頂篷延伸出來,進一步豐富後排乘客的車內互聯生活。

擁有一台高度互聯的自動駕駛汽車是一種怎樣的體驗?

寶馬通過一台基於全新BMW 5系的原型車展示了未來高度自動駕駛汽車極為個性化、智能化的駕駛感受。在高度自動駕駛狀態下,駕駛者的雙手和雙腳都得到了解放,無需手握方向盤和控制油門、剎車。同時,BMW實時交通信號系統還可以預測前方下一組信號燈情況,讓駕駛者更好地進行選擇。

在自動泊車功能展示中,抵達停車場時,車輛自動與泊車管理服務進行連接,显示屏會提示駕駛者可以使用預約的停車位。駕駛者與乘客下車后,車輛隨即啟動自動泊車功能。BMW雲端互聯將在車輛停好後向駕駛者推送提示信息。通過全新BMW 5系中首次配備的環視影像系統,用戶還可以通過BMW雲端互聯應用實時查看車輛情況。

在自動駕駛帶來的閑暇時間里,駕駛者可以盡情享受豐富的智能互聯功能。例如,在車輛行進途中,前排乘客可以通過BMW增強手勢控制系統、獲取途經場所的信息,如娛樂場所的節目單,還可以直接訂票。

在開放式移動雲的支持下,BMW 雲端互聯可以整合豐富的應用,讓人們在車內便捷地處理各種事務。比如已經在家用電腦上推出的個人数字助理“微軟小娜(Cortana)”也可以在BMW汽車上使用。在駕駛過程中,用戶可以通過語音控制讓小娜推薦就餐地點並預定位置。

通過與亞馬遜prime Now速遞服務合作,未來在行車途中預約收取快遞也成為可能。設想一下,用戶正前往一個生日聚會,但忘了購買禮物,通過這一功能,用戶可以從容地在車內在線購物。prime Now與開放式移動雲將根據車輛位置、路線和實時交通信息計算出最佳交付地點;車輛到達交付點之後,prime Now的員工將把貨物送到用戶的手中。BMW 雲端互聯無疑為智能、便捷的数字生活帶來了巨大的想象空間。BMW 雲端互聯已於2016年12月在中國正式上線,未來這些功能也將逐步升級到現有版本中。

BMW不僅在車庫,還可以在客廳——智能出行和智能生活相結合

在2017 CES上,寶馬集團還將全新的智能互聯科技從車內延伸到用戶的家中,標志著BMW 雲端互聯與家居環境的結合。未來,通過創新的智能終端BMW Conncted Window,用戶在家也可以享受BMW雲端互聯的豐富功能。

當用戶開始新的一天時,BMW Connected Window的界面將显示溫暖的問候,與此同時,用戶每天的出行日程會按照時間軸進行显示,出行目的地,建議出發時間、天氣情況等信息一目瞭然。BMW Connected Window的虛擬界面通過手勢來操作,與觸摸屏一樣直觀。更新信息也可以通過BMW 雲端互聯方便地添加到日程中並與其他智能設備保持同步,幫助用戶胸有成竹地開始新一天的生活。

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

【其他文章推薦】

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

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

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

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

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

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

分類
發燒車訊

一網打盡枚舉操作 .net core

本文介紹如何使用枚舉以及,如何將枚舉類型更好的應用於項目中,看完本文可以有序的將項目中的枚舉更容易的使用到每個角落。

1,分析枚舉

 /// <summary>
    /// 性別
    /// </summary>
    public enum Gender
    {
        /// <summary>
        ////// </summary>
        
        Man = 0,
        /// <summary>
        ////// </summary>
        
        Women = 1
    }

 

如1所示,這是一個非常普通的枚舉類,在項目中使用的話,一般都會將它作為某實體的一個屬性,這個時候問題就來了,在頁面裡邊我們是需要拿到與之相關的描述信息和對應的值作為一個下拉框或者checkbox讓用戶去選擇,同時也不可以將Disable和enable作為給用戶最終展示的信息,需要去手動去拼,於是有了如下的方式

2,枚舉類信息完善,增加描述信息

 /// <summary>
    /// 性別
    /// </summary>
    public enum Gender
    {
        /// <summary>
        ////// </summary>
        [Description("")]
        Man = 0,
        /// <summary>
        ////// </summary>
        [Description("女")]
        Women = 1
    }

再給枚舉增加一個擴展方法

 /// <summary>
        /// 獲取到對應枚舉的描述-沒有描述信息,返回枚舉值
        /// </summary>
        /// <param name="enum"></param>
        /// <returns></returns>
        public static string GetDescription(this Enum @enum)
        {
            Type type = @enum.GetType();
            string name = Enum.GetName(type, @enum);
            if (name == null)
            {
                return null;
            }
            FieldInfo field = type.GetField(name);
            if (!(Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) is DescriptionAttribute attribute))
            {
                return name;
            }
            return attribute?.Description;
        }

 好像到這一步的時候問題可以得到解決,通過getdescroption()這類的方法可以去獲取到與枚舉相應的描述信息用於展示,但是這也僅限於在mvc模式下,通過viewbag將枚舉的類中的每一項都加到枚舉集合中返回給頁面,在頁面裡邊遍歷,如果枚舉類型很多,那麼這類型的重複邏輯就會很多,非常的心煩。

如果可以將這些操作做一個封裝,用一個接口可以返回所有枚舉類型的相關信息,就好了,於是有了如下的做法

1 創建一個描述枚舉的類 

 public class EnumModel
    {
        /// <summary>
        ///枚舉原始值
        /// </summary>
        public ValueType Source { get; set; }
        /// <summary>
        /// 描述信息
        /// </summary>
        public string Description { get; set; }
        /// <summary>
        /// value
        /// </summary>
        public int Value { get; set; }
    }

2,寫一個方法通過傳遞一個枚舉類類型去得到List<EnumModel>

public static List<EnumModel> GetEnumListModels<T>()
        {
            var model = default(T);
            FieldInfo[] fieldinfo = typeof(T).GetFields();
            List<EnumModel> result = new List<EnumModel>();
            foreach (FieldInfo field in fieldinfo)
            {
                EnumModel enumModel = new EnumModel();
                if (!(Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) is DescriptionAttribute attribute))
                {
                    enumModel.Description = field.GetValue(model).ToString();
                }
                else
                {
                    enumModel.Description = attribute.Description;
                }
                enumModel.Value = field.GetValue(model).GetHashCode();
                enumModel.Source = field.GetValue(model) as ValueType;
                if (field.GetValue(model).ToString() != "0")
                {
                    result.Add(enumModel);
                }
                
            }
            return result;
        }

3,寫一個接口,輸入枚舉的類的名稱,調用2中的方法,得到具體的返回信息

[Route("[controller]/{name}")]
        public IActionResult GetEnumList(string name)
        {
            Assembly assembly = Assembly.Load("Ftw");
            Type t = assembly.GetType(string.Concat("Ftw.Enum.", name), throwOnError: false, ignoreCase: true);
            if (t == null)
            {
                throw new ServiceException(string.Concat("請確保枚舉[", name, "]在 Ftw.Enum 中定義"));
            }
            Type enumhelp = typeof(EnumHelper);
            var obj = enumhelp.GetMethod("GetEnumListModels").MakeGenericMethod(t);
            return Json(obj.Invoke(t, null));
        }

  解釋一下:Ftw是類庫的名稱,Enum是Ftw類庫下的一個文件夾,所有的枚舉類都在Enum下邊放着,EnumHelper是 2 中方法【GetEnumListModels】所在的類,通過反射程序集得到枚舉類型,通過反射程序集將類型傳入GetEnumListModels作為 T 最後執行方法的到list.

比如  Gender的調用,假如 GetEnumList所在的controller是EnumController,那麼調用就是通過  Enum/Gender ,對於.net core, mvc .net core api這類項目這種方式是非常有幫助的。

 

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

【其他文章推薦】

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

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

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

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

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

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

分類
發燒車訊

剛果法院首例 12年殺害500多頭大象 盜獵者將蹲30年苦牢

環境資訊中心外電;姜唯 翻譯;林大利 審校;稿源:ENS

剛果共和國刑事法院以殺害國家公園巡守員未遂、販賣盜獵來的象牙、持有武器等多項罪名,判處知名盜獵者和象牙走私者吉拉德(Mobanza Mobembo Gérard)30年徒刑,且必須支付3800萬中非法郎(約台幣199萬元)給受傷的巡守員。

這是剛果共和國的野生動植走私者首次在刑事法院被定罪。

吉拉德因殺害國家公園巡守員未遂、販賣盜獵來的象牙、持有武器等多項罪名,遭判處30年徒刑。照片來源:WCS
新聞稿

吉拉德帶領集團 在國家公園殺死500多頭大象

根據調查,人稱蓋瓦尼歐(Guyvanho)的吉拉德帶領一個約25人的盜獵集團。自2008年至今,他們在諾娃貝爾多基國家公園(Nouabalé-Ndoki National Park)一帶殺死了500多頭大象。

該公園成立於1993年,位於剛果北部省份,周圍是非洲森林象和稀有大型猿類的棲地,包括西部低地大猩猩和東部黑猩猩。

剛果民主共和國籍的蓋瓦尼歐於2008年前後來到剛果共和國北部。2018年初,他和其他幾名集團成員殺死了11頭大象,被諾娃貝爾多基國家公園巡守員逮個正著,雙方發生駁火。起初蓋瓦尼奧趁亂逃脫,但同夥三名成員被捕。他們的供詞成為對蓋瓦尼歐發出逮捕令的根據。

除了被殺害的大象數量眾多外,這次事件還顯示該犯罪集團以暴力對抗公權力的傾向,而且公園內外四周的大象盜獵集團行徑越來越囂張。

2018年5月蓋瓦尼歐被捕,被押在歐耶索省城監獄中等待審判。然而,在2018年6月2日,審判開始前12天,蓋瓦尼歐竟然逃獄了。儘管如此,他的審判仍持續進行,並因缺席被判處5年徒刑加500萬中非法郎(約台幣26萬元)的罰款。

除了被殺害的大象數量眾多外,這次事件還顯示該犯罪集團以暴力對抗公權力的傾向。照片來源:WCS
臉書

蓋瓦尼奧於2019年7月20日再度落網

法院再次發出逮捕令。蓋瓦尼歐仍然是公園野生動物犯罪部門的通緝要犯,所有曾出沒過的地點都受到監視。這段期間,他曾被目擊繼續參加盜獵活動,每次都與國家公園的巡守員發生槍戰。

2019年5月31日,一名巡守員返回諾娃貝爾多基國家公園總部途中剛好碰上一群剛收工的盜獵者,蓋瓦尼奧赫然在其中。盜獵者對巡守員開槍,導致兩名巡守員受傷,其中一名重傷,幸好被受過急救訓練的同僚救回。

蓋瓦尼奧這次又逃走了,但似乎向人吹噓事發經過而走漏了風聲,當局因此再次掌握他新的藏身之處。透過監視行動,蓋瓦尼奧終於在2019年7月20日落網。

蓋瓦尼奧被送回歐耶索省服刑,並再次嘗試越獄,這次沒有成功。很顯然,蓋瓦尼奧在歐耶索省有強大的後援,極有可能再次越獄。國家公園管理部門於2019年8月成功獲得批准,得以將蓋瓦尼奧和三名同夥轉移到布拉柴維爾監獄。

學者:此次判決是剛果在野生動植物保護上的重要里程碑

諾娃貝爾多基國家公園由總部位於紐約的野生動物保護協會(Wildlife Conservation Society, WCS)和剛果共和國政府透過諾娃貝爾多基基金會合作管理,已經長達25年。

WCS中非地區主任斯托克斯(Emma Stokes)博士說,這名盜獵犯能被繩之以法,靠的是諾娃貝爾多基國家公園野生動物犯罪部門和反盜獵部門三年來的努力,以及和森林經濟部、警方和地方檢察官等的多個有關當局合作的成果。

「此次判決是剛果共和國刑事法庭在野生動植物保護上一個重要的里程碑。以前所有環境犯罪都是在民事法庭審理的,最高刑期僅五年。今日的判決顯示,野生動植物犯罪不會再被容忍,將從重量刑。」斯托克斯說。

Congo Imprisons Elephant Poacher for 30 Years BRAZZAVILLE, Republic of Congo, August 22, 2020 (ENS)

 A criminal court in the Republic of Congo has sentenced a notorious poacher and ivory trafficker, Mobanza Mobembo Gérard, alias Guyvanho, to 30 years in prison for the attempted murder of park rangers, trafficking of ivory from poached elephants, possession of military weapons, and other charges. He is also required to pay damages of 38 million Central African Francs (US$68,000) to the injured rangers.

The 30-year sentence marks the first-ever conviction in the criminal courts of a wildlife trafficker in the Republic of Congo.

Investigations revealed that Guyvanho led a group of approximately 25 poachers who, based on the number of hunts reported, could have killed upwards of 500 elephants in the area of Nouabalé-Ndoki National Park since 2008.

Established in 1993, in the northern provinces of Congo, the park is inhabited by forest elephants and rare great apes, including western lowland gorillas and the eastern subspecies of chimpanzees.

In early 2018, Guyvanho – a citizen of the Democratic Republic of Congo who had arrived in the northern Republic of Congo around 2008 – and several other members of his team were caught in an operation led by Nouabalé-Ndoki National Park rangers, after they allegedly killed 11 elephants. A firefight ensued and Guyvanho was initially able to escape, but three members of his team were arrested. Their statements provided sufficient grounds for an arrest warrant to be issued against him.

In addition to the number of elephants killed, this incident demonstrated the willingness of this group to respond with violence when challenged. This was indicative of a trend of increasing violence of elephant poaching gangs in and around the park.

In May 2018, Guyvanho was arrested and remanded in prison in the provincial town of Ouesso to await trial. However, on June 2, 2018, 12 days before his trial was to take place, Guyvanho escaped from the Ouesso prison. Still, his trial went ahead, and he was sentenced in absentia to five years in prison with a five million Central African Franc (US$9,000) fine.

A further arrest warrant was issued. He remained a priority target of the park’s Wildlife Crime Unit – and locations known to be used by Guyvanho were monitored, but no arrest was made.

During this time, he was cited as a participant in a number of subsequent hunts, each of which featured exchanges of gunfire with park rangers.

On May 31, 2019, a ranger patrol returning to Nouabalé-Ndoki National Park HQ happened across a group of poachers – including Guyvanho – returning from a hunt. The patrol was fired upon by the poachers, and two patrol members were wounded, one of them seriously. His life was saved by fellow rangers with medical training.

Guyvanho was again able to escape but was reported to have bragged about the incident. This information was passed to the authorities along with a new location for Guyvanho’s home. A surveillance operation was launched to confirm the information from the Wildlife Crime Unit, and, based on this information, Guyvanho was arrested by the Ouesso Police on July 20, 2019.

Guyvanho was returned to prison in Ouesso to serve his sentence but following a further escape attempt, this time unsuccessful, it became clear that Guyvanho had a sufficiently strong support network in Ouesso that another escape attempt was highly likely. A transfer to Brazzaville prison was requested by the park authorities and approved, and in August 2019 Guyvanho and three associates were successfully moved.

All the convicts will be transferred back to Brazzaville this week to serve their sentences.

The Nouabalé-Ndoki National Park is governed by a 25-year public-private partnership between the New York City-based Wildlife Conservation Society, WCS, and the Government of the Republic of Congo through the Nouabalé-Ndoki Foundation.

Dr. Emma Stokes, WCS regional director for Central Africa, says many people cooperated to bring this poacher to justice. “The sentencing is the culmination of more than three years of work by the Nouabalé-Ndoki National Park’s Wildlife Crime Unit and Anti-Poaching department. It is also the result of fruitful cooperation with multiple Congolese authorities, including the Ministry of Forest Economy, the Police, and District Prosecutors.

Dr. Stokes listed some of those supporting WCS involvement in this case. “WCS commends our government partners in the Republic of Congo and thanks our donors for their ongoing support in this case, including The Wildcat Foundation, Save the Elephants’ and Wildlife Conservation Network’s Elephant Crisis Fund, the Sangha Trinational Trust Fund, U.S. State Department’s Bureau for International Narcotics and Law Enforcement Affairs, the European Union, and the United States Agency for International Development’s Central Africa Regional Program for the Environment (USAID-CARPE).”

“This unprecedented conviction in the criminal court is a major milestone in the protection of wildlife in the Republic of Congo. Previously, all environmental crimes were tried in the civil courts where the maximum penalty under the wildlife law was five years. Today’s sentencing sends an extremely strong message that wildlife crime will not be tolerated and will be prosecuted at the highest levels,” Stokes said.

“We are confident that today’s sentence will serve as a deterrent to would-be criminals that you will serve hard time if you break our wildlife laws and put park rangers and Congo’s national security in danger,” she said.

After the sentencing, an official from the Sangha District Court declared, “This verdict confirms the fact that under the pretext of being poaching gangs, it is actually well-organized criminal gangs operating in our forests.”

※ 全文及圖片詳見:ENS

盜獵
象牙
大象盜獵
國際新聞
剛果
生物多樣性

作者

姜唯

如果有一件事是重要的,如果能為孩子實現一個願望,那就是人類與大自然和諧共存。

林大利

於特有生物研究保育中心服務,小鳥和棲地是主要的研究對象。是龜毛的讀者,認為龜毛是探索世界的美德。

延伸閱讀

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

【其他文章推薦】

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

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

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

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

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

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

分類
發燒車訊

阿根廷環團拒建中資養豬場 合作協議延期簽署

摘錄自2020年09月05日中央社報導

中國計劃投資逾37億美元在阿根廷蓋養豬場供應中國,以解決非洲豬瘟造成的豬肉短缺,但遭阿國環團反對。阿國政府表示將納入環保條款,兩國合作協議延至11月簽署。

阿根廷網路媒體iProfesional報導,據阿根廷外交部消息來源指出,艾柏托政府將利用11月參加中國國際進口博覽會(中國進博會)的機會,簽下這項養豬產業協議。

iProfessional報導,根據取得的文件,這項合作案預計建造25座養豬場,每座養豬場飼養約1.2萬頭豬。每座養豬場還需配合建造壓榨基因改造大豆和玉米的工廠,以提供牲畜飼料。此外,建造的地點除是過去50年從未淹水的農地,每天也須供應多達150萬公升的水流量。

此項協議簽署後,預計每年可供應中國近90萬噸的豬肉。中國因爆發非洲豬瘟,撲殺國內40%的豬隻,造成豬肉短缺,因此開始向其他國家尋求養豬場。

但養豬場投資案曝光後,遭阿根廷環保團體、動物權益者和許多民眾強力反對,擔憂將使阿根廷的環境、水質和土壤遭受前所未有污染,迫使政府暫時延後簽署備忘錄。

根據綠色和平組織的報告,在墨西哥等養豬產業密集國家,或阿根廷政府打算建造的養豬場,每天排放二氧化碳和甲烷等致命氣體,相當於數百萬輛汽車排放的廢氣。

污染治理
國際新聞
阿根廷
養豬場

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

【其他文章推薦】

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

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

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

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

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

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

分類
發燒車訊

說到“新能源”就只有電動車嗎?

木炭車行駛速度慢,載重能力差,主要承擔客運。當時,由市區發往百多公里以外鄰縣的班線,每天只能行使一個單程。由於車輛老舊,汽車中途拋錨現象時常發生。特別是遇上坡路段,汽車還經常熄火,需旅客幫助推車。有時木炭燒完,還要發動旅客下車揀柴禾、樹枝充做燃料。

現在說到新能源,一般會想到電動車,如果了解得多的可能還知道燃料電池或者氫動力之類,但是再早一點,國內還有另外一種不用新能源的“新能源”汽車—木炭車。

當你在想木炭車怎麼驅動車的時候是不是以為大力出奇迹?其實這裏的木炭不是直接當做發動機的燃料來產生動力,整個工作原理大致如下圖。

利用木炭在一個特殊的發生爐經過一系列程序後生成煤氣,然後讓發動機燃燒煤氣驅動車輛。聽着就很蛋疼啊,除了讓車看起來更丑,開起來更慢,可能還有更多的pM2.5(那會應該還沒有這個概念)為什麼要搞這種事情呢?

上世紀五十年代初,國家經濟處在恢復時期又遇抗美援朝戰爭,各西方國家對我國實施禁運政策,國家汽油短缺,燒汽油的車就紛紛改裝成燒木炭的車。(所以木炭車的本質還是活塞發動機的原理,只是燃料從石油變成了煤氣。)

由於木炭車的結構,每天發車前,駕駛員需要用油棉引燃木炭,先燒上10分鐘左右,然後搖動鼓風機才能啟動。上部的木炭淋有少量的水分,由於頂部的鍋爐蓋在正常工作時是密封着的,高溫密封加少量的氧,反應成一氧化碳氣體,經罐內生鐵造的爐膽管道,進入儲氣罐再送到發動機里和適量的空氣混合,形成可燃混合氣(也就是煤氣),然後導入發動機工作。(讓我們看下木炭車的動力系統是怎麼工作的)

木炭車一般從點爐到啟動需40-50分鐘。行駛中,還要添料、捅爐、掌握木炭燃燒程度,司機和助手每天工作相當辛苦。木炭車行駛速度慢,載重能力差,主要承擔客運。當時,由市區發往百多公里以外鄰縣的班線,每天只能行使一個單程。由於車輛老舊,汽車中途拋錨現象時常發生。

特別是遇上坡路段,汽車還經常熄火,需旅客幫助推車。有時木炭燒完,還要發動旅客下車揀柴禾、樹枝充做燃料。

一趟行程下來司機乘客都是灰頭土臉,但是在當時的情況下,有車就已經很滿足了,顯然這裏的“新能源”並不是所謂的綠色新能源,所以木炭車隨着我國的油田發展也就漸漸消失了。

看到上面的工程師以為木炭車中國才有嗎?其實二戰的時候有些國家也因為石油問題,甚至期間的坦克也採用“木炭車”的技術,屁股上背着一個大罐。

而在我們的鄰國朝鮮現在還有機會能看到。

雖然我們國家現在有了自己的油田,現在卻是世界最大石油進口國。不管是因為真的消耗如此巨大還是戰略上的貯備,木炭車的歷史都讓我們明白了一個道理,一定要有自己的核心技術。如果當時我們連木炭車都搗鼓不出來就真的只能幹瞪眼。現在的自主品牌中有些確實腳踏實地在潛心研發自己的技術,但是也有些品牌像寄生蟲一樣,總是想着鑽空子,鬧個大新聞,希望自主品牌越來越好的贊一個!本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

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

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

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

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

分類
發燒車訊

別再寫一摞if-else了!再寫開除!兩種設計模式帶你消滅它!

題外話:本來不想解釋、可是看完評論,有點服氣。沒想到居然這麼多人能曲解題意。這篇文章明顯是在說,不要寫一大堆if-else,一大堆是啥意思很難懂嗎?我沒有一句話說了不要寫if-else。開頭也給出了具體需求,在這種需求的前提下不要寫if-else,沒毛病吧??

代碼潔癖狂們!看到一個類中有幾十個if-else是不是很抓狂?
設計模式學了用不上嗎?面試的時候問你,你只能回答最簡單的單例模式,問你有沒有用過反射之類的高級特性,回答也是否嗎?
這次就讓設計模式(模板方法模式+工廠模式)和反射助你消滅if-else!
真的是開發中超超超超超超有用的乾貨啊!

那個坑貨

某日,碼農胖滾豬接到上級一個需求,這個需求牛逼了,一站式智能報表查詢平台,支持mysql、pgxl、tidb、hive、presto、mongo等眾多數據源,想要啥數據都能通通給你查出來展示,對於業務人員數據分析有重大意義!

雖然各個數據源的參數校驗、查詢引擎和查詢邏輯都不一樣,但是胖滾豬對這些框架都很熟悉,這個難不倒她,她只花了一天時間就都寫完了。

領導胖滾熊也對胖滾豬的效率表示了肯定。可是好景不長,第三天,領導閑着沒事,準備做一下code review,可把胖滾熊驚呆了,一個類裏面有近30個if-else代碼,我滴個媽呀,這可讓代碼潔癖狂崩潰了。

// 檢驗入參合法性
Boolean check = false;
if(DataSourceEnum.hive.equals(dataSource)){
    check = checkHiveParams(params);
} else if(DataSourceEnum.tidb.equals(dataSource)){
    check = checkTidbParams(params);
} else if(DataSourceEnum.mysql.equals(dataSource)){
    check = checkMysqlParams(params);
} // else if ....... 省略pgxl、presto等
if(check){
    if(DataSourceEnum.hive.equals(dataSource)){
        list = queryHive(params);
    } else if(DataSourceEnum.tidb.equals(dataSource)){
        list = queryTidb(params);
    } else if(DataSourceEnum.mysql.equals(dataSource)){
        list = queryMysql(params);
    } // else if ....... 省略pgxl、presto等
}
//記錄日誌
log.info("用戶={} 查詢數據源={} 結果size={}",params.getUserName(),params.getDataSource(),list.size());

模板模式來救場

首先我們來分析下,不管是什麼數據源,算法結構(流程)都是一樣的,1、校驗參數合法性 2、查詢 3、記錄日誌。這不就是說模板一樣、只不過具體細節不一樣,沒錯吧?

讓我們來看看設計模式中模板方法模式的定義吧:

模板方法模式:定義一個操作中的算法的框架,而將一些步驟延遲到子類中. 使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。通俗的講,就是將子類相同的方法, 都放到其抽象父類中。

我們這需求不就和模板方法模式差不多嗎?因此我們可以把模板抽到父類(抽象類)中。至於特定的步驟實現不一樣,這些特殊步驟,由子類去重寫就好了。

廢話不多說了,我們先把父類模板寫好吧,完全一樣的邏輯是記錄日誌,這步在模板寫死就好。至於檢驗參數和查詢,這兩個方法各不相同,因此需要置為抽象方法,由子類去重寫。

public abstract class AbstractDataSourceProcesser <T extends QueryInputDomain> {
    public List<HashMap> query(T params){
        List<HashMap> list = new ArrayList<>();
        //檢驗參數合法性 不同的引擎sql校驗邏輯不一樣
        Boolean b = checkParam(params);
        if(b){
            //查詢
            list = queryData(params);
        }
        //記錄日誌
        log.info("用戶={} 查詢數據源={} 結果size={}",params.getUserName(),params.getDataSource(),list.size());
        return list;
    }
    //抽象方法 由子類來實現特定邏輯
    abstract Boolean checkParam(T params);
    abstract List<HashMap> queryData(T params);
}

這段代碼非常簡單。但是為了照顧新手,還是想解釋一個東西:

T這個玩意。叫泛型,因為不同數據源的入參不一樣,所以我們使用泛型。但是他們也有公共的參數,比如用戶名。因此為了不重複冗餘,更好的利用公共資源,在泛型的設計上,我們可以有一個泛型上限,<T extends QueryInputDomain>

public class QueryInputDomain<T> {
    public String userName;//查詢用戶名
    public String dataSource;//查詢數據源 比如mysql\tidb等
    public T params;//特定的參數 不同的數據源參數一般不一樣
}
public class MysqlQueryInput extends QueryInputDomain{
    private String database;//數據庫
    public String sql;//sql
}

接下來就輪到子類出場了,通過上面的分析,其實也很簡單了,不過是繼承父類,重寫checkParam()和queryData()方法,下面以mysql數據源為例,其他數據源也都一樣的套路:

@Component("dataSourceProcessor#mysql")
public class MysqlProcesser extends AbstractDataSourceProcesser<MysqlQueryInput>{
    @Override
    public Boolean checkParam(MysqlQueryInput params) {
        System.out.println("檢驗mysql參數是否準確");
        return true;
    }

    @Override
    public List<HashMap> queryData(MysqlQueryInput params) {
        List<HashMap> list = new ArrayList<>();
        System.out.println("開始查詢mysql數據");
        return list;
    }
}

這樣一來,所有的數據源,都自成一體,擁有一個只屬於自己的類,後續要擴展數據源、或者要修改某個數據源的邏輯,都非常方便和清晰了。

說實話,模板方法模式太簡單了,抽象類這東西也太基礎普遍了,一般應屆生都會知道的。但是對於初入職場的新人來說,還真不太能果斷應用在實際生產中。因此提醒各位:一定要有一個抽象思維,避免代碼冗餘重複。

另外,要再啰嗦幾句,即使工作有幾年的工程師也很容易犯一個錯誤。就是把思維局限在今天的需求,比如老闆一開始只給你一個mysql數據源查詢的需求,壓根沒有if-else,可能你就不會放在心上,直接在一個類中寫死,不會考慮到後續的擴展。直到後面越來越多的新需求,你才恍然大悟,要全部重構一番,這樣浪費自己的時間了。因此提醒各位:做需求不要局限於今天,要考慮到未來。 從一開始就做到高擴展性,後續需求變更和維護就非常爽了。

原創聲明:本文為【胖滾豬學編程】原創博文,轉載請註明出處。以漫畫形式讓編程生動有趣!原創不易,求關注!

工廠模式來救場

但是模板模式還是沒有完全解決胖滾豬的if-else,因為需要根據傳進來的dataSource參數,判斷由哪個service來實現查詢邏輯,現在是這麼寫的:

  if(DataSourceEnum.hive.equals(dataSource)){
        list = queryHive(params);
    } else if(DataSourceEnum.tidb.equals(dataSource)){
        list = queryTidb(params);
    }

那麼這種if-else應該怎麼去幹掉呢?我想先跟你講講工廠模式的那些故事。

工廠模式:工廠方法模式是一種創建對象的模式,它被廣泛應用在jdk中以及Spring和Struts框架中。它將創建對象的工作轉移到了工廠類。

為了呼應一下工廠兩字,我特意舉一個代工廠的例子讓你理解,這樣你應該會有更深刻的印象。

以手機製造業為例。我們知道有蘋果手機、小米手機等等,每種品牌的手機製造方法必然不相同,我們可以先定義好一個手機標準接口,這個接口有make()方法,然後不同型號的手機都繼承這個接口:

#Phone類:手機標準規範類(AbstractProduct)
public interface Phone {
    void make();
}
#MiPhone類:製造小米手機(Product1)
public class MiPhone implements Phone {
    public MiPhone() {
        this.make();
    }
    @Override
    public void make() {
        System.out.println("make xiaomi phone!");
    }
}
#IPhone類:製造蘋果手機(Product2)
public class IPhone implements Phone {
    public IPhone() {
        this.make();
    }
    @Override
    public void make() {
        System.out.println("make iphone!");
    }
}

現在有某手機代工廠:【天霸手機代工廠】。客戶只會告訴該工廠手機型號,就要匹配到不同型號的製作方案,那麼代工廠是怎麼實現的呢?其實也很簡單,簡單工廠模式(還有抽象工廠模式和工廠方法模式,有興趣可以了解下)是這麼實現的:

#PhoneFactory類:手機代工廠(Factory)
public class PhoneFactory {
    public Phone makePhone(String phoneType) {
        if(phoneType.equalsIgnoreCase("MiPhone")){
            return new MiPhone();
        }
        else if(phoneType.equalsIgnoreCase("iPhone")) {
            return new IPhone();
        }
    }
}

這樣客戶告訴你手機型號,你就可以調用代工廠類的方法去獲取到對應的手機製造類。你會發現其實也不過是if-else,但是把if-else抽到一個工廠類,由工廠類統一創建對象,對我們的業務代碼無入侵,不管是維護還是美觀上都會好很多。

首先,我們應該在每個特定的dataSourceProcessor(數據源執行器),比如MysqlProcesser、TidbProcesser中添加spring容器註解@Component。該註解我想應該不用多解釋了吧~重點是:我們可以把不同數據源都搞成類似的bean name,形如dataSourceProcessor#數據源名稱,如下兩段代碼:

@Component("dataSourceProcessor#mysql")
public class MysqlProcesser extends AbstractDataSourceProcesser<MysqlQueryInput>{
@Component("dataSourceProcessor#tidb")
public class TidbProcesser extends AbstractDataSourceProcesser<TidbQueryInput>{

這樣有什麼好處呢?我可以利用Spring幫我們一次性加載出所有繼承於AbstractDataSourceProcesser的Bean ,形如Map<String, AbstractDataSourceProcesser>,Key是Bean的名稱、而Value則是對應的Bean:

@Service
public class QueryDataServiceImpl implements QueryDataService {
    @Resource
    public Map<String, AbstractDataSourceProcesser> dataSourceProcesserMap;
    public static String beanPrefix = "dataSourceProcessor#";
    @Override
    public List<HashMap> queryData(QueryInputDomain domain) {
        AbstractDataSourceProcesser dataSourceProcesser = dataSourceProcesserMap.get(beanPrefix + domain.getDataSource());
        //省略query代碼
    }
}

可能你還是不太理解,我們直接看一下運行效果:

1、dataSourceProcesserMap內容如下所示,存儲了所有數據源Bean,Key是Bean的名稱、而Value則是對應的Bean:

2、我只需要通過key(即前綴+數據源名稱=beanName),就能匹配到對應的執行器了。比如當參數dataSource為tidb的時候,key為dataSourceProcessor#tidb,根據key可以直接從dataSourceProcesserMap中獲取到TidbProcesser

public static String classPrefix = "com.lyl.java.advance.service.";

AbstractDataSourceProcesser sourceGenerator = 
(AbstractDataSourceProcesser) Class.forName
(classPrefix+DataSourceEnum.getClasszByCode(domain.getDataSource()))
.newInstance();

需要注意的是,該種方法是通過className來獲取到類的實例,而前端傳參肯定是不會傳className過來的。因此可以用到枚舉類,去定義好不同數據源的類名:

public enum DataSourceEnum {
    mysql("mysql", "MysqlProcesser"),
    tidb("tidb", "TidbProcesser");
    private String code;
    private String classz;

原創聲明:本文為【胖滾豬學編程】原創博文,轉載請註明出處。以漫畫形式讓編程生動有趣!原創不易,求關注!

總結

有些童鞋總覺得設計模式用不上,因為平時寫代碼除了CRUD還是CRUD,面試的時候問你設計模式,你只能回答最簡單的單例模式,問你有沒有用過反射之類的高級特性,回答也是否。

其實不然,JAVA這23種設計模式,每一個都是經典。今天我們就用模板方法模式+工廠模式(或者反射)解決了讓人崩潰的if-else。後續對於設計模式的學習,也應該多去實踐,從真實的項目中找到用武之地,你才算真正把知識佔為己有了。

本篇文章的內容和技術點雖然很簡單,但旨在告訴大家應該要有一個很好的代碼抽象思維。杜絕在代碼中出現一大摞if-else或者其他爛代碼。

即使你有很好的代碼抽象思維,做需求開發的時候,也不要局限於當下,只考慮現在,要多想想未來的擴展性。

就像你談戀愛一樣,只考慮當下的是渣男,考慮到未來的,才算是一個負責任的人

“願世界沒有渣男”

原創聲明:本文為【胖滾豬學編程】原創博文,轉載請註明出處。以漫畫形式讓編程生動有趣!原創不易,求關注!

本文來源於公眾號:【胖滾豬學編程】。一枚集顏值與才華於一身,不算聰明卻足夠努力的女程序媛。用漫畫形式讓編程so easy and interesting!求關注!

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

【其他文章推薦】

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

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

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

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

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

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

分類
發燒車訊

手把手教你學Numpy,這些api不容錯過

本文始發於個人公眾號:TechFlow,原創不易,求個關注

今天是Numpy專題的第5篇文章,我們來繼續學習Numpy當中一些常用的數學和統計函數。

基本統計方法

在日常的工作當中,我們經常需要通過一系列值來了解特徵的分佈情況。比較常用的有均值、方差、標準差、百分位數等等。前面幾個都比較好理解,簡單介紹一下這個百分位數,它是指將元素從小到大排列之後,排在第x%位上的值。我們一般常用的是25%,50%和75%這三個值,通過這幾個值,我們很容易對於整個特徵的分佈有一個大概的了解。

前面三個指標:均值、方差、標準差都很好理解,我們直接看代碼就行。

median和percentile分別是求中位數與百分位數,它們不是Numpy當中array的函數,而是numpy的庫函數。所以我們需要把array當做參數傳入。percentile這個函數還需要額外傳入一個int,表示我們想要得到的百分位數,比如我們想要知道50%位置上的數,則輸入50。

除了這些之外,我們還會經常用到sum,min,max,argmin,argmax這幾個函數。sum,min,max很好理解,argmin和argmax的意思是獲取最小值和最大值的索引

這裏返回的索引有點奇怪,和我們想的不同,居然不是一個二維的索引而是一維的。實際上numpy的內部會將高維數組轉化成一維之後再進行這個操作,我們可以reshape一下數組來進行驗證:

這些只是api的基本用法,numpy當中支持的功能不僅如此。我們觀察一下這些函數會發現,它們的作用域都是一組數據,返回的是一組數據通過某種運算得到的結果。舉個例子,比如sum,是對一組數據的價格。std計算的是一組數據的標準差,這樣的函數我們稱為聚合函數

numpy當中的聚合函數在使用的時候允許傳入軸這個參數,限制它聚合的範圍。我們通過axis這個參數來控制,axis=0表示對列聚合,axis=1表示對行聚合。我們死記的話總是會搞混淆,實際上axis傳入的也是一個索引,表示第幾個索引的索引。我們的二維數組的shape是[行, 列],其中的第0位是行,第1位是列,可以認為axis是這個索引向量的一個索引。

我們可以來驗證一下:

可以看到axis=0和axis=1返回的向量的長度是不同的,因為以列為單位聚合只有4列,所以得到的是一個1 x 4的結果。而以行為單位聚合有5行,所以是一個1 x 5的向量。

除了上面介紹的這些函數之外,還有cumsum和cumprod這兩個api。其中cumsum是用來對數組進行累加運算,而cumprod是進行的累乘運算。只是在實際工作當中,很少用到,我就不展開細講了,感興趣的同學可以查閱api文檔了解一下。

bool數組的方法

我們之前在Python的入門文章當中曾經提到過,在Python中True和False完全等價於1和0。那麼在上面這些計算的方法當中,如果存在bool類型的值,都會被轉化成1和0進行的計算。

我們靈活運用這點會非常方便,舉個例子,假設我們要統計一批數據當中有多少條大於0。我們利用sum會非常方便:

bool數組除了可以應用上面這些基本的運算api之外,還有專門的兩個api,也非常方便。一個叫做any,一個叫做all。any的意思是只要數組當中有一個是True,那麼結果就是True。可以認為是Is there any True in the array的意思,同樣,all就是說只有數組當中都是True,結果才是True。對應的英文自然是Are the values in the array all True。

這個只要理解了,基本上很難忘記。

排序

Python原生的數組可以排序,numpy當中的數組自然也不例外。我們只需要調用sort方法就可以排序了,不過有一點需要注意,numpy中的sort默認是一個inplace的方法。也就是說我們調用完了sort之後,原數組的值就自動變化了。

如果寫成了arr = arr.sort()會得到一個None,千萬要注意。

同樣,我們也可以通過傳入軸這個參數來控制它的排序範圍,可以做到對每一列排序或者是對每一行排序,我們來看個例子:

這個是對列排序,如果傳入0則是對行排序,這個應該不難理解。

集合api

numpy當中還提供了一些面向集合的api,相比於針對各種計算的api,這些方法用到的情況比較少。常用的一般只有unique和in1d

unique顧名思義就是去重的api,可以返回一維array去重且排序之後的結果。我們來看個例子:

它等價於:

set(sorted(arr))

in1d是用來判斷集合內的元素是否在另外一個集合當中,函數會返回一個bool型的數組。我們也可以來看個例子:

除了這兩個api之外,還有像是計算並集並排序的union1d,計算差集的setdiff1d,計算兩個集合交集並排序的intersect1d等等。這些api的使用頻率實在是不高,所以就不贅述了。用到的時候再去查閱即可。

總結

今天我們聊了numpy當中很多常用的計算api,這些api在我們日常做機器學習和數據分析的時候經常用到。比如分析特徵分佈的時候,如果數據量很大是不適合作圖或者是可視化觀察的。這個時候可以從中位數、均值、方差和幾個關鍵百分位點入手,再比如在我們使用softmax多分類的時候,也會用到argmax來獲取分類的結果。

總之,今天的內容非常關鍵,在numpy整體的應用當中佔比很高,希望大家都能熟悉它們的基本用法。這樣即使以後忘記,用到的時候再查閱也還來得及。

今天的文章就是這些,如果喜歡本文,可以的話請點個關注,給我一點鼓勵,也方便獲取更多文章。

本文使用 mdnice 排版

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

【其他文章推薦】

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

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

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

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

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

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

分類
發燒車訊

滅絕時代將來臨? WWF:50年來全球野生動物數量驟減2/3

摘錄自2020年9月16日民視新聞報導

全球最大的非政府環境保護組織「世界自然基金會」,最近發布了地球生命力報告2020,顯示近半世紀來,全球野生動物種群數量,已平均銳減68%,生物多樣性消失,人類難辭其咎,像是巴西中西部大沼澤的林火,疑似是人為的火災演變成的森林大火,目前就燒毀了70%美洲虎的主要棲息地。

中南美洲的物種及全球淡水棲息地受到的衝擊尤其嚴重,平均分別下降了94%和84%,世界自然基金會總幹事藍柏堤尼表示,「不到50年我們就看到銳減2/3的野生動物,相較於這些動物棲息在地球上數百萬年,這不過是一眨眼的工夫,第二個原因必須擔憂的是,我們看到過去20年來加速惡化,上次地球生命力報告發布時說的是近6成,但現在是7成。」

生物多樣性
國際新聞

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

【其他文章推薦】

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

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

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

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

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

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

分類
發燒車訊

這款20來萬的熱銷7座SUV,不僅舒服而且空間賊大!

0L/2。5L最大馬力(pS):150/186最大扭矩(Nm):200/233變速箱:6MT/CVT百公里加速(s):11。7/10。5百公里油耗(L):7。1/7。7車主百公里油耗(L):8。81/9。58驅動方式:前置前驅/前置四驅底盤懸挂:前麥弗遜+橫向穩定桿/后複合多連桿+橫向穩定桿實際體驗(體驗者178cm):前排頭部1拳/後排頭部1拳/後排腿部2拳3指。

日產奇駿是一款的十分低調,但卻比較重要的車型。它沒有像全新換代的本田CR-V那樣以大量科技來收穫大眾目光,但是奇駿卻憑藉良好品質獲得了很高的銷量,在2017年它在合資緊湊型SUV銷量榜上排行第三!

奇駿車內乘空間很充足,而且還推出了7座車型,第三排座椅用來應急還不錯。而且它的座椅擁有着沙發般的柔軟承托,車身隔音水平不錯,駕駛過程中底盤濾振也頗為徹底,舒適性是相當突出的!

此外,奇駿還搭載一套性能突出的適時四驅系統,越野性能在城市SUV中是突出的。它採用多片離合器式限滑差速器進行前後輪扭矩配比,能夠達到前後各50%的動力配比,實用性不錯!

長寬高:4675*1830*1724mm

軸距:2706mm

定位:緊湊型SUV

在造型方面,奇駿使用了日產V-motion式前臉設計,鍍鉻裝飾件粗壯、中網格柵也比老款更大了,前臉的衝擊感挺強的。而車側和尾部造型依然厚重、飽滿,但是細節的亮點不太多。

內飾方面它採用了中央對稱式設計,並且提供了拼色的設計樣式,視覺上能給人不錯的舒適感。中控台採用了軟性材質包裹,車門的軟包也做得到位。方向盤採用了平底設計,設計更偏向年輕化,整體氛圍較好!

發動機:2.0L/2.5L

最大馬力(pS):150/186

最大扭矩(Nm):200/233

變速箱:6MT/CVT

百公里加速(s):11.7/10.5

百公里油耗(L):7.1/7.7

車主百公里油耗(L):8.81/9.58

驅動方式:前置前驅/前置四驅

底盤懸挂:前麥弗遜+橫向穩定桿/后複合多連桿+橫向穩定桿

實際體驗(體驗者178cm):前排頭部1拳/後排頭部1拳/後排腿部2拳3指。而第三排座椅腿部空間比較一般,適合緊急情況下使用。

感興趣的朋友可以點擊小程序查看詳細口碑,從口碑中可以看到車主們對奇駿的硬朗外形、通過性較好、後排乘坐空間大等優點頗為滿意,但是對腳剎駐車和內飾用料方面有些意見。

咱們發現奇駿幅度還是比較可觀的,在廣州需搭配店內上保險、貸款、上牌、置換等項目,而在北京、武漢、上海、成都等地則為現金優惠,性價比不低!

奇駿這款車型乘坐舒適性和行駛品質都有着不錯的表現!動力系統也省心耐用,是一款稱職的家用車,而且四驅系統也具備不錯的性能,優惠幅度也還不錯,所以銷量方面一直保持強勢。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

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

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

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

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