2017第八屆廣州國際新能源汽車工業展覽會

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

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

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

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

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

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

※超省錢租車方案

聚甘新

台電動車廠凱勝新廠動土,打造綠能產業聚落

台灣本地的電動車大廠凱勝綠能科技正式於嘉義縣馬稠後工業區破土興建新廠房。馬稠後廠房共分三廠,總投資額達新台幣60億元,首期一廠工程預計在2018年完工,將成為台灣規模最大的電動車生產基地,並將進一步投入綠能相關產業的研發製造。

凱勝綠能的招牌產品為電動巴士,是目前台灣最大的電動巴士生產商。為深耕台灣在地電動車產業,凱勝綠能看上馬稠後工業區的地理區位,規劃興建三個廠房。投資新台幣25億元的一廠工程於11月1日正式動土,預計在2018年完工,屆時電動巴士產能可提高到1,000餘輛,年產值新台幣300億元以上,並可創造當地就業和10億餘元的地方稅收。

凱勝綠能董事長陳怡仁表示,馬稠後工廠一廠除將進行電動車研發生產外,更將投入太陽能綠電與儲能系統的開發和應用,如提升電池儲能功能等。到了二、三廠陸續完工後,還將投入各式電動載具與相關產品的研發製造,屆時馬稠後工廠不僅會是全台規模最大的電動車建案,也將形成完整的電動車與綠能產業研發基地。

陳怡仁指出,電動車是「零排放、零汙染、零噪音」的「三零」產業,將有助守護台灣與地球環境。嘉義縣長張花冠亦蒞臨破土典禮,並親自試乘凱勝綠能的電動車。

(照片:嘉義縣長張花冠試乘電動車。來源:嘉義縣政府)

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

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

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

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

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

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

※超省錢租車方案

聚甘新

.Net Core微服務入門全紀錄(五)——Ocelot-API網關(下)

前言

上一篇【.Net Core微服務入門全紀錄(四)——Ocelot-API網關(上)】已經完成了Ocelot網關的基本搭建,實現了服務入口的統一。當然,這隻是API網關的一個最基本功能,它的進階功能還有很多很多。

服務發現

首先需要解決的就是服務發現的問題,服務發現的優點之前講過,就不說了。
上一篇中我們的服務地址都是寫在ocelot.json配置文件里,現在我們需要結合之前的Consul來實現服務發現。

  • 改造代碼:

首先NuGet安裝Ocelot.Provider.Consul

修改Startup.cs:

        public void ConfigureServices(IServiceCollection services)
        {
            //添加ocelot服務
            services.AddOcelot()
                .AddConsul();//添加consul支持
        }

修改ocelot.json配置:

{
  "Routes": [
    {
      "DownstreamPathTemplate": "/products",
      "DownstreamScheme": "http",
      "UpstreamPathTemplate": "/products",
      "UpstreamHttpMethod": [ "Get" ],
      "ServiceName": "ProductService",
      "LoadBalancerOptions": {
        "Type": "RoundRobin"
      }
    },
    {
      "DownstreamPathTemplate": "/orders",
      "DownstreamScheme": "http",
      "UpstreamPathTemplate": "/orders",
      "UpstreamHttpMethod": [ "Get" ],
      "ServiceName": "OrderService",
      "LoadBalancerOptions": {
        "Type": "RoundRobin"
      }
    }
  ],
  "GlobalConfiguration": {
    "BaseUrl": "http://localhost:9070",
    "ServiceDiscoveryProvider": {
      "Scheme": "http",
      "Host": "localhost",
      "Port": 8500,
      "Type": "Consul"
    }
  }
}

這個配置應該很好理解,就是把我們上次的DownstreamHostAndPorts節點去掉了,然後增加了ServiceDiscoveryProvider服務發現相關配置。
注意,Ocelot除了支持Consul服務發現以外,還有Eureka也可以,Eureka也是一個類似的註冊中心。

好了,代碼修改就差不多了,下面運行程序測試一下:

客戶端正常運行。

至此我們就實現了服務註冊與發現和api網關的基本功能。接下來就要提到:服務治理

服務治理

其實服務治理也沒有一個非常明確的定義。它的作用簡單來說,就是幫助我們更好的管理服務,提升服務的可用性。——緩存,限流,熔斷,鏈路追蹤 等等。。。都屬於常用的服務治理手段。
之前講的負載均衡,服務發現也可以算是服務治理。

  • 緩存:

在Ocelot中啟用緩存,需要NuGet安裝一下Ocelot.Cache.CacheManager

修改Startup.cs中的ConfigureServices()方法:

//添加ocelot服務
services.AddOcelot()
    //添加consul支持
    .AddConsul()
    //添加緩存
    .AddCacheManager(x =>
    {
        x.WithDictionaryHandle();
    });

修改ocelot.json配置文件:

{
  "Routes": [
    {
      "DownstreamPathTemplate": "/products",
      "DownstreamScheme": "http",
      "UpstreamPathTemplate": "/products",
      "UpstreamHttpMethod": [ "Get" ],
      "ServiceName": "ProductService",
      "LoadBalancerOptions": {
        "Type": "RoundRobin"
      },
      "FileCacheOptions": {
        "TtlSeconds": 5,
        "Region": "regionname"
      }
    },
    {
      "DownstreamPathTemplate": "/orders",
      "DownstreamScheme": "http",
      "UpstreamPathTemplate": "/orders",
      "UpstreamHttpMethod": [ "Get" ],
      "ServiceName": "OrderService",
      "LoadBalancerOptions": {
        "Type": "RoundRobin"
      },
      "FileCacheOptions": {
        "TtlSeconds": 5,
        "Region": "regionname"
      }
    }
  ],
  "GlobalConfiguration": {
    "BaseUrl": "http://localhost:9070",
    "ServiceDiscoveryProvider": {
      "Scheme": "http",
      "Host": "localhost",
      "Port": 8500,
      "Type": "Consul"
    }
  }
}

在Routes路由配置中增加了FileCacheOptions。TtlSeconds代表緩存的過期時間,Region代表緩衝區名稱,這個我們目前用不到。

好了,代碼修改完需要編譯重啟一下網關項目,然後打開客戶端網站測試一下:

可以看到,5秒之內的請求都是同樣的緩存數據。Ocelot也支持自定義緩存。

  • 限流:

限流就是限制客戶端一定時間內的請求次數。
繼續修改配置:

{
  "Routes": [
    {
      "DownstreamPathTemplate": "/products",
      "DownstreamScheme": "http",
      "UpstreamPathTemplate": "/products",
      "UpstreamHttpMethod": [ "Get" ],
      "ServiceName": "ProductService",
      "LoadBalancerOptions": {
        "Type": "RoundRobin"
      },
      "FileCacheOptions": {
        "TtlSeconds": 5,
        "Region": "regionname"
      },
      "RateLimitOptions": {
        "ClientWhitelist": [ "SuperClient" ],
        "EnableRateLimiting": true,
        "Period": "5s",
        "PeriodTimespan": 2,
        "Limit": 1
      }
    },
    {
      "DownstreamPathTemplate": "/orders",
      "DownstreamScheme": "http",
      "UpstreamPathTemplate": "/orders",
      "UpstreamHttpMethod": [ "Get" ],
      "ServiceName": "OrderService",
      "LoadBalancerOptions": {
        "Type": "RoundRobin"
      },
      "FileCacheOptions": {
        "TtlSeconds": 5,
        "Region": "regionname"
      },
      "RateLimitOptions": {
        "ClientWhitelist": [ "SuperClient" ],
        "EnableRateLimiting": true,
        "Period": "5s",
        "PeriodTimespan": 2,
        "Limit": 2
      }
    }
  ],
  "GlobalConfiguration": {
    "BaseUrl": "http://localhost:9070",
    "ServiceDiscoveryProvider": {
      "Scheme": "http",
      "Host": "localhost",
      "Port": 8500,
      "Type": "Consul"
    },
    "RateLimitOptions": {
      "DisableRateLimitHeaders": false,
      "QuotaExceededMessage": "too many requests...",
      "HttpStatusCode": 999,
      "ClientIdHeader": "Test"
    }
  }
}

在Routes路由配置中增加了RateLimitOptions。ClientWhitelist代表客戶端白名單,在白名單中的客戶端可以不受限流的影響;EnableRateLimiting代表是否限流;Period代表限流的單位時間,例如1s,5m,1h,1d等;PeriodTimespan代表客戶端達到請求上限多少秒后可以重試;Limit代表客戶端在定義的時間內可以發出的最大請求數。
在GlobalConfiguration配置中也增加了RateLimitOptions。DisableRateLimitHeaders代表是否禁用X-Rate-Limit和Retry-After標頭(請求達到上限時response header中的限制數和多少秒后能重試);QuotaExceededMessage:代表請求達到上限時返回給客戶端的消息;HttpStatusCode:代表請求達到上限時返回給客戶端的HTTP狀態代碼。ClientIdHeader可以允許自定義用於標識客戶端的標頭。默認情況下為“ ClientId”。
最重要的就是Period,PeriodTimespan,Limit這幾個配置。

重新編譯啟動看一下效果:

  • 超時/熔斷

超時很好理解,就是網關請求服務時可容忍的最長響應時間。熔斷的意思就是當請求某個服務的異常次數達到一定量時,那麼網關在一定時間內就不再對這個服務發起請求了,直接熔斷。
Ocelot中啟用 超時/熔斷 需要NuGet安裝一下Ocelot.Provider.Polly

修改Startup.cs中的ConfigureServices()方法:

//添加ocelot服務
services.AddOcelot()
    //添加consul支持
    .AddConsul()
    //添加緩存
    .AddCacheManager(x =>
    {
        x.WithDictionaryHandle();
    })
    //添加Polly
    .AddPolly();

同樣的在ocelot.json路由配置中增加QoSOptions:

"QoSOptions": {
        "ExceptionsAllowedBeforeBreaking": 3,
        "DurationOfBreak": 10000,
        "TimeoutValue": 5000
      }

ExceptionsAllowedBeforeBreaking代表發生錯誤的次數,DurationOfBreak代表熔斷時間,TimeoutValue代表超時時間。
以上的配置意思就是當服務發生3次錯誤時,那麼就熔斷10秒,期間客戶端的請求直接返回錯誤,10秒之後恢復。
這個不太好模擬,就不演示了,應該也挺好理解的。

。。。。。。

關於服務治理的學問還有很多,不繼續了。。。就到此為止吧。
想要更深入了解Ocelot的,請看官網:https://ocelot.readthedocs.io/en/latest/
或者看源碼:https://github.com/ThreeMammals/Ocelot

下一篇準備說一下:事件總線。

代碼放在:https://github.com/xiajingren/NetCoreMicroserviceDemo

未完待續…

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

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

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

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

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

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

※超省錢租車方案

聚甘新

機器學習——打開集成方法的大門,手把手帶你實現AdaBoost模型

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

今天是機器學習專題的第25篇文章,我們一起來聊聊AdaBoost。

我們目前為止已經學過了好幾個模型,光決策樹的生成算法就有三種。但是我們每次進行分類的時候,每次都是採用一個模型進行訓練和預測。我們日常在做一個決策的時候,往往會諮詢好幾個人,綜合採納他們的意見。那麼有沒有可能把這個思路照搬到機器學習領域當中,創建多個模型來綜合得出結果呢?

這當然是可以的,這樣的思路就叫做集成方法(ensemble method)。

集成方法

集成方法本身並不是某種具體的方法或者是算法,只是一種訓練機器學習模型的思路。它的含義只有一點,就是訓練多個模型,然後將它們的結果匯聚在一起。

根據這個思路,業內又衍生出了三種特定的方法,分別是Bagging、Boosting和Stacking。

Bagging

Bagging是bootstrap aggregating的縮寫,我們從字面上很難理解它的含義。我們記住這個名字即可,在Bagging方法當中,我們會通過有放回隨機採樣的方式創建K個數據集。對於每一個數據集來說,可能有一些單個的樣本重複出現,也可能有一些樣本從沒有出現過,但整體而言,每個樣本出現的概率是相同的。

之後,我們用抽樣出來的K個數據集訓練K個模型,這裏的模型沒有做限制,我們可以使用任何機器學習方模型。K個模型自然會得到K個結果,那麼我們採取民主投票的方式對這K個模型進行聚合。

舉個例子說,假設K=25,在一個二分類問題當中。有10個模型預測結果是0,15個模型預測結果是1。那麼最終整個模型的預測結果就是1,相當於K個模型民主投票,每個模型投票權一樣。大名鼎鼎的隨機森林就是採取的這種方式。

Boosting

Boosting的思路和Bagging非常相似,它們對於樣本的採樣邏輯是一致的。不同的是,在Boosting當中,這K個模型並不是同時訓練的,而是串行訓練的。每一個模型在訓練的時候都會基於之前模型的結果,更加關注於被之前模型判斷錯誤的樣本。同樣,樣本也會有一個權值,錯誤判斷率越大的樣本擁有越大的權值。

並且每一個模型根據它能力的不同,會被賦予不同的權重,最後會對所有模型進行加權求和,而不是公平投票。由於這個機制,使得模型在訓練的時候的效率也有差異。因為Bagging所有模型之間是完全獨立的,我們是可以採取分佈式訓練的。而Boosting中每一個模型會依賴之前模型的效果,所以只能串行訓練。

Stacking

Stacking是Kaggle比賽當中經常使用的方法,它的思路也非常簡單。我們選擇K種不同的模型,然後通過交叉驗證的方式,在訓練集上進行訓練和預測。保證每個模型都對所有的訓練樣本產出一個預測結果。那麼對於每一條訓練樣本,我們都能得到K個結果。

之後,我們再創建一個第二層的模型,它的訓練特徵就是這K個結果。也就是說Stacking方法當中會用到多層模型的結構,最後一層模型的訓練特徵是上層模型預測的結果。由模型自己去訓練究竟哪一個模型的結果更值得採納,以及如何組合模型之間的特長。

我們今天介紹的AdaBoost顧名思義,是一個經典的Boosting算法。

模型思路

AdaBoost的核心思路是通過使用Boosting的方法,通過一些弱分類器構建出強分類器來。

強分類器我們都很好理解,就是性能很強的模型,那麼弱分類器應該怎麼理解呢?模型的強弱其實是相對於隨機結果來定義的,比隨機結果越好的模型,它的性能越強。從這點出發,弱分類器也就是只比隨機結果略強的分類器。我們的目的是通過設計樣本和模型的權重,使得可以做出最佳決策,將這些弱分類器的結果綜合出強分類器的效果來。

首先我們會給訓練樣本賦予一個權重,一開始的時候,每一條樣本的權重均相等。根據訓練樣本訓練出一個弱分類器並計算這個分類器的錯誤率。然後在同一個數據集上再次訓練弱分類器,在第二次的訓練當中,我們將會調整每個樣本的權重。其中正確的樣本權重會降低,錯誤的樣本權重會升高

同樣每一個分類器也會分配到一個權重值,權重越高說明它的話語權越大。這些是根據模型的錯誤率來計算的。錯誤率定義為:

這裏的D表示數據集表示分類錯誤的集合,它也就等於錯誤分類的樣本數除以總樣本數。

有了錯誤率之後,我們可以根據下面這個公式得到

得到了之後,我們利用它對樣本的權重進行更新,其中分類正確的權重更改為:

分類錯誤的樣本權重更改為:

這樣,我們所有的權重都更新完了,這也就完成了一輪迭代。AdaBoost會反覆進行迭代和調整權重,直到訓練錯誤率為0或者是弱分類器的數量達到閾值。

代碼實現

首先,我們來獲取數據,這裏我們選擇了sklearn數據集中的乳腺癌預測數據。和之前的例子一樣,我們可以直接import進來使用,非常方便:

import numpy as np
import pandas as pd
from sklearn.datasets import load_breast_cancer

breast = load_breast_cancer()
X, y = breast.data, breast.target
# reshape,將一維向量轉成二維
y = y.reshape((-1, 1))

接着,我們將數據拆分成訓練數據和測試數據,這個也是常規做法了,沒有難度:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=23)

在AdaBoost模型當中,我們選擇的弱分類器是決策樹的樹樁。所謂的樹樁就是樹深為1的決策樹。樹深為1顯然不論我們怎麼選擇閾值,都不會得到特別好的結果,但是由於我們依然會選擇閾值和特徵,所以結果也不會太差,至少要比隨機選擇要好。所以這就保證了,我們可以得到一個比隨機選擇效果略好一些的弱分類器,並且它的實現非常簡單。

在我們實現模型之前,我們先來實現幾個輔助函數。

def loss_error(y_pred, y, weight):
    return weight.T.dot((y_pred != y_train))

def stump_classify(X, idx, threshold, comparator):
    if comparator == 'lt':
        return X[:, idx] <= threshold
    else:
        return X[:, idx] > threshold
    
def get_thresholds(X, i):
    min_val, max_val = X[:, i].min(), X[:, i].max()
    return np.linspace(min_val, max_val, 10)

這三個函數應該都不難理解,第一個函數當中我們計算了模型的誤差。由於我們每一個樣本擁有一個自身的權重,所以我們對誤差進行加權求和。第二個函數是樹樁分類器的預測函數,邏輯非常簡單,根據閾值比較大小。這裡有兩種情況,有可能小於閾值的樣本是正例,也有可能大於閾值的樣本是正例,所以我們還需要第三個參數記錄這個信息。第三個函數是生成閾值的函數,由於我們並不需要樹樁的性能特別好,所以我們也沒有必要去遍歷閾值的所有取值,簡單地把特徵的範圍劃分成10段即可。

接下來是單個樹樁的生成函數,它等價於決策樹當中選擇特徵進行數據拆分的函數,邏輯大同小異,只需要稍作修改即可。

def build_stump(X, y, weight):
    m, n = X.shape
    ret_stump, ret_pred = None, []
    best_error = float('inf')

    # 枚舉特徵
    for i in range(n):
        # 枚舉閾值
        for j in get_thresholds(X, i):
            # 枚舉正例兩種情況
            for c in ['lt', 'gt']:
                # 預測並且求誤差
                pred = stump_classify(X, i, j, c).reshape((-1, 1))
                err = loss_error(pred, y, weight)
                # 記錄下最好的樹樁
                if err < best_error:
                    best_error, ret_pred = err, pred.copy()
                    ret_stump = {'idx': i, 'threshold': j, 'comparator': c} 
    return ret_stump, best_error, ret_pred

接下來要做的就是重複生成樹樁的操作,計算,並且更新每一條樣本的權重。整個過程也沒有太多的難點,基本上就是照着實現公式:

def adaboost_train(X, y, num_stump):
    stumps = []
    m = X.shape[0]
    # 樣本權重初始化,一開始全部相等
    weight = np.ones((y_train.shape[0], 1)) / y_train.shape[0]
    # 生成num_stump個樹樁
    for i in range(num_stump):
        best_stump, err, pred = build_stump(X, y, weight)
        # 計算alpha
        alpha = 0.5 * np.log((1.0 - err) / max(err, 1e-10))
        best_stump['alpha'] = alpha
        stumps.append(best_stump)

        # 更新每一條樣本的權重
        for j in range(m):
            weight[j] = weight[j] * (np.exp(-alpha) if pred[j] == y[j] else np.exp(alpha))
        weight = weight / weight.sum()
        # 如果當前的準確率已經非常高,則退出
        if err < 1e-8:
            break
    return stumps

樹樁生成結束之後,最後就是預測的部分了。整個預測過程依然非常簡單,就是一個加權求和的過程。這裏要注意一下,我們在訓練的時候為了突出錯誤預測的樣本,讓模型擁有更好的能力,維護了樣本的權重。然而在預測的時候,我們是不知道預測樣本的權重的,所以我們只需要對模型的結果進行加權即可。

def adaboost_classify(X, stumps):
    m = X.shape[0]
    pred = np.ones((m, 1))
    alphs = 0.0
    for i, stump in enumerate(stumps):
        y_pred = stump_classify(X, stump['idx'], stump['threshold'], stump['comparator'])
        # 根據alpha加權求和
        pred = y_pred * stump['alpha']
        alphs += stump['alpha']
    pred /= alphs
    # 根據0.5劃分0和1類別
    return np.sign(pred).reshape((-1, 1))

到這裏,我們整個模型就實現完了,我們先來看下單個樹樁在訓練集上的表現:

可以看到準確率只有0.54,只是比隨機預測略好一點點而已。

然而當我們綜合了20個樹樁的結果之後,在訓練集上我們可以得到0.9的準確率。在預測集上,它的表現更好,準確率有接近0.95!

這是因為AdaBoost當中,每一個分類器都是弱分類器,它根本沒有過擬合的能力,畢竟在訓練集的表現都很差,這就保證了分類器學到的都是實在的泛化能力,在訓練集上適用,在測試集上很大概率也適用。這也是集成方法最大的優點之一。

總結

集成方法可以說是機器學習領域一個非常重要的飛躍,集成方法的出現,讓設計出一個強分類器這件事的難度大大降低,並且還保證了模型的效果。

因為在一些領域當中,設計一個強分類器可能非常困難,然而設計一個弱一些的分類器則簡單得多,再加上模型本身性能很好,不容易陷入過擬合。使得在深度學習模型流行之前,集成方法廣泛使用,幾乎所有機器學習領域的比賽的冠軍,都使用了集成學習。

集成學習當中具體的思想或許各有不同,但是核心的思路是一致的。我們理解了AdaBoost之後,再去學習其他的集成模型就要容易多了。

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

本文使用 mdnice 排版

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

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

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

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

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

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

※超省錢租車方案

聚甘新

2020年最佳Java調試工具(翻譯)

調試是應用程序開發周期不可或缺的一部分。用Java或任何其他語言編寫程序時,每個開發人員應解決的首要問題之一是可靠的調試工具的可用性。

所使用的工具類型可能影響或破壞應用程序的調試過程,因此至關重要的是,要了解根據用例而定最佳選擇。

在這篇文章中,我們概述了2020年最好的7種Java調試工具。在開發,生產環境中查找,診斷和修復問題時,這些工具中的大多數將派上用場。

NetBeans

NetBeans是運行在Linux,Windows,MacOS和Solaris上的頂級,使用最廣泛的Java IDE之一。正如預期的那樣,它具有可視化調試器和代碼概要分析器,使開發人員可以調試可執行的Java類,單元測試和整個項目。

NetBeans調試器允許您在Java代碼中放置斷點,運行方法,添加字段監視,監視執行以及在調試會話期間拍攝快照。

Rookout

Rookout是一個很棒的Java調試選項,可以在開發和生產中很好地工作。它在包括無服務器和容器的各種環境中提供了強大的調試功能。

通過收集和流水線化關鍵數據,淘汰工作超越了標準調試功能。這使開發人員無需編寫代碼,重新部署或重新啟動應用程序即可了解軟件執行問題並解決錯誤。

藉助Rookout,開發人員可以消除冗長,複雜且資源密集的數據探索和錯誤查找過程。

Eclipse

Eclipse是帶有內置Java調試器的著名開源IDE。自成立以來,Eclipse一直保持其作為開發現代應用程序最強大的跨平台IDE之一的聲譽。

它提供了標準的調試功能,例如設置斷點,執行步驟執行,檢查變量和值,掛起和恢複線程等功能。

Eclipse平台還方便了遠程調試。儘管它主要是Java IDE,但Eclipse調試視圖還支持PHP,C,C ++和許多其他編程語言。

IntelliJ IDEA

IntelliJ IDEA是具有功能強大的調試器的高度流行的Java IDE。該工具使開發人員可以輕鬆調試簡單代碼以及多線程Java應用程序。

使用IntelliJ調試器,您可以設置斷點,單步執行代碼,評估表達式,檢查變量以及執行一系列其他調試過程。它可以更輕鬆地檢測意外的流量和狀態,死鎖,活動鎖等。

IntelliJ IDEA的核心旨在改善Java開發團隊的工作流程和生產力。

Java調試器(JDB)

Java調試器(JDB)是允許開發人員在命令行中調試Java代碼的工具。通過Java調試接口(JDI)(高級前端接口),開發人員可以檢測並修復程序中的錯誤。該工具還可用於檢查和調試遠程Java虛擬機中的代碼。

像大多數命令行調試器一樣,JDB具有學習曲線,因此新用戶需要花費一些時間來適應JDB。但是,一旦掌握了JDB命令,就可以輕鬆設置斷點,單步執行代碼並執行其他調試操作。

Fusion Reactor(聚變反應堆??)

Fusion Reactor是針對開發,測試和生產環境中的Java應用程序的創新性能監視解決方案。該工具配備了一組令人印象深刻的功能,這些功能可提供Java開發人員在APM工具中所需的一切。

Fusion Reactor開發版,您可以開發,測試,並在非生產環境分析應用。使用此工具,在將應用程序部署到生產環境之前,更容易發現問題並提高代碼質量。

另一個值得注意的功能是生產調試器,它使開發人員在與代碼交互並修復錯誤時獲得最大的控制權。Fusion Reactor還支持遠程調試。

JDeveloper

Oracle的JDeveloper是一種免費的IDE,可解決應用程序開發生命周期中從編碼到設計,性能分析,調試,優化和部署的每個步驟。

使用JDeveloper進行調試時,可以設置斷點和觀察點,分析調用堆棧,檢查和操作變量,並逐步研究代碼執行情況。除了Java,它還可以用於調試HTML,PHP,JavaScript,SQL和XML。

現在,您可以繼續使用上述工具,以更高的速度和效率來檢測,診斷和解決Java應用程序中的問題。

翻譯原文

Top Java Debugging Tools for 2020

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

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

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

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

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

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

※超省錢租車方案

聚甘新

傳亞光供應車載鏡頭於美系電動車供應鏈

市場傳出,光學零件大廠亞光車載鏡頭於 2016 年第四季打進美國電動車大廠供應鏈,去年11月已開始出貨,單月出貨量約2-3萬顆, 2017年出貨則可望進一步放量成長,為營運增添動能。

對此,亞光董事長賴以仁表示,不評論客戶訂單,但他強調,今年在包括車用、虛擬實境 (VR) 等運動攝影機方面,訂單表現都不錯,消費型相機的需求亦有回溫,預估今年營收及獲利表現可望優於去年;同時,今年美國 CES 展中受矚目的先進駕駛輔助系統 (ADAS),亞光布局雷射測距應用於瞄準儀的時間已久,而在雷射測距及 HUD(抬頭顯示器)方面,也都是 ADAS 應用的重要零組件。

據悉,亞光出貨美國電動車廠的車載鏡頭主要為雷射測距,用於自動駕駛系統;除美國電動車市場外,亞光的車載鏡頭也間接切入歐洲車廠,今年布局重點包括 ADAS 等重要零組件。

亞光去年全年營收 179 億元,年減 1.6%,惟受惠產品組合優化,獲利優於營收表現,其去年前三季稅後淨利 2.97 億元,每股盈餘1.06元,已優於 2015 年全年表現。

(本文內容由授權使用)

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

【其他文章推薦】

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

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

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

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

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

※超省錢租車方案

必翔取得首款台產電動汽車生產執照

台灣的電動機車品牌Gogoro已經能從台北一路騎到高雄,還將進軍歐洲市場。而台灣首款本地生產的電動汽車也正式領取生產執照,將由在地廠商必翔集團負責產銷。

必翔集團在台成立三十餘年,早期曾投入農業機械研發,近期則以電動代步車、醫療用車等車款代工為主要業務。看好全球電動車市場蓬勃,必翔於2011年正式成立必翔電動汽車公司,並獲得中國廠商比亞迪(BYD)的肯定,合作發展電動汽車技術。

必翔在宜蘭縣建有電動汽車組裝廠,客戶行銷歐洲。日前,必翔已成功取得台灣首張電動汽車生產執照,預計將在今年第三季前量產問世。

除電動汽車公司外,必翔集團旗下另一子公司必翔電能為磷酸鋰鐵電池廠,廠房位於新竹,每月可生產100萬顆18650鋰鐵電池,集團整體可形成電動車產業的垂直整合。為提供日漸提升的電動車用電池需求,新竹廠房將陸續擴產到目前規模的10倍;公司也已申請掛牌上市,正在等待審核。

必翔集團也積極投入再生能源發展。必翔電動汽車的,由台灣永鑫能源負責開發、雲豹能源科技出資,完全採用美商First Solar的太陽能板,是First Solar在亞洲規模最大的屋頂型太陽能發電廠。

(照片:必翔公司廠房。來源:)

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

【其他文章推薦】

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

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

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

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

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

※超省錢租車方案

受惠model 3試產,貿聯股價楊

美國電動車大廠 Tesla 傳出將在 3 月 20 日開始試產 Model 3,貿聯-KY為特斯拉電池線束的主力供應廠,可望受惠,今年營運展望佳。13 日股價上漲 3.5%,上漲 6 元,股價收在 177.5 元。

市場傳言,貿聯-KY供應 Model  3的電池管理線束已陸續開始交貨,新產品出貨的時程從 2 月就開始,目前是樣品階段,根據 Tesla 給貿聯-KY的預估量,是呈現逐季上揚,因此,貿聯-KY的業績在 2017 年是樂觀的一年,呈現逐季上揚。

貿聯-KY今年營收成長動能主要延續資訊產品業績成長,另外,年底則隨著電動車客戶平價車種投產挹注產品線;資訊用線主要在 Type C 市場應用起飛,帶動周邊擴充基座需求同步放大。

貿聯-KY元月營收 6.6 億元,月減 25.2%,年減 5.39%。公司表示,上月資訊用線擴充基座需求成長,另外,車用線整體訂單平穩,但受到季節性淡季以及工作天數減少影響,導致營收較上月衰退。

國泰證券金融商品部建議,看好貿聯-KY等個股,在行情震盪時,可以權證代替股票,布局相關認購權證。可留意如貿聯國泰65購01、貿聯永豐66購01、貿聯國泰67購01等權證。這 3 檔皆在價外 15% 以內,且距離到期日仍有三個月以上。

(本文內容由授權使用。圖片出處:Tesla)

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

【其他文章推薦】

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

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

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

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

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

※超省錢租車方案

特斯拉鋰電池價格將降至US$ 125/kWh

Tesla Motors有超過50萬筆Model 3之訂單,為了讓這些訂單準時出貨,Tesla創辦人Elon Musk表示,占地1,500萬平方英尺、專用來生產Tesla電動車用鋰電池的超級工廠Gigafactory進度已超前預定進度兩年。而Gigafactory存在的原因很簡單,即是為了降低鋰電池的生產成本。

據網站Electrek報導,近期研究顯示,電動車鋰電池近6年來已降至每kWh 227美金,下降80%。即便如此,電動車高昂的價格仍令人難以負擔。

降低鋰電池成本一直為Tesla改善的目標之一。在新的宣傳影片裡,Tesla 表示將降低35% 的電池成本。 雖然Tesla 並沒有詳述電池成本下降的細節,但若從釋出的消息中,多少可以拼湊出一些樣貌。

從Tesla於2016年說的「低於每kWh 190美金」,套上降低電池成本35%,電池成本將會來到每kWh 124美金之下。假設一輛Model 3 需要55 kWh之電池,那麼電池成本最多為6,875美金。鋰電池看來似乎是生產成本裡最高的組件,但以一輛3.5 萬美元的電動車來說,評估下來似乎合理。

以Tesla自有品牌家用儲能系統Powerwall來說,規格14 kWh的售價為5,500美金;大型發電設備用的Powerpack、規格210 kWh/供電4小時的售價則為109,750美金。

若要使電動車和燃油車具成本競爭力,電動車之電池成本至少需降至每kWh 100 美金以內。Elon Musk 一度對於Tesla Motors無法在2020達到這個里程碑而失望。但以現階段狀況看來,於內華達州之Gigafactory 1 完成進度已達14%,即將於歐洲設廠之Gigafactory 2也已進行籌備階段,降低鋰點池生產成本的目標看很有機會達成。        

(首圖為Gigafactory。來源:Tesla)                       

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

【其他文章推薦】

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

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

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

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

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

※超省錢租車方案

C/S C# WPF銳浪報表教程

前言:銳浪報表是一種中國式報表的報表開發工具。博主使用銳浪報表有一段時間了,積累了一些經驗希望能幫助你快速掌握並使用

第一章:集成項目

首先我們先去銳浪報表官網下載並安裝銳浪報表。

創建WPF應用程序。(C/S端使用銳浪報表基本都一樣

 添加銳浪報表的引用,在資源管理器目錄中找到引用並右鍵,點擊添加引用。

 在引用管理器左側目錄中展開COM並找到Grid++Report Engine 6 Type Library,勾選上點擊確定。(這裡有四個銳浪報表的引用,不要加錯了)

 在資源管理器中展開引用找到gregn6Lib

 右鍵gregn6Lib點擊屬性,將獨立設置為True,將嵌入式互操作類型設置為True

在資源管理器中右鍵WPFPrintReportRL項目——添加——新建文件夾,命名為report

 集成銳浪報表的WPF項目環境基本配置差不多了,下面我們打開安裝完畢銳浪報表的編輯器

 在上方導航目錄中找到插入——報表頭,就會生成這個UI編輯面板

如果我們需要打印一些參數,則在左上方的目錄中找到參數集合——新增——參數

 將這個參數命名,我使用的是Name,這個參數的命名就是後面程序需要在在報表中傳遞的參數

 在上方導航欄中找到插入——綜合文本框,將鼠標在UI編輯面板左鍵點擊一下生成綜合文本框,然後我們雙擊綜合文本框編輯內容。

點擊插入域引用類型選擇為參數參數選擇為剛才命名為Name的參數,點擊確定

 做完以上操作后的UI編輯面板,隨後我們另存到使用VS創建的WPFPrintReportRL項目下的report目錄中

切回VS,在資源管理器中上方找到並點擊显示所有文件,然後資源管理起中report文件夾下會显示出你剛保存的報表文件右鍵——包括在項目中

 對報表文件右鍵——屬性,將複製到輸出目錄更改為:如果較新則複製

主窗體的後台代碼,已經加入註釋,各位慢慢品味。

            GridppReport gr = new GridppReport();//報表對象
            //建議不要在報表中存儲連接字符串字符串
            //如果不設置ConnectionString或QuerySQL屬性,則會使用報表內的連接字符串和SQL語句
            gr.ConnectionString = "";//連接字符串
            gr.QuerySQL = "";//SQL語句
            gr.LoadFromFile("report\\案例報表.grf");//本地報表路徑
            gr.ParameterByName("Name").AsString = "古河渚";//主報表傳參
            gr.Print(false);//不預覽打印

接下來我們在資源管理器中右鍵WPFPrintReportRL項目——屬性——生成,將目標平台更改為x86

 隨後我們運行項目,報表如期而至打印了出來。(這裏博主使用的是虛擬打印機,點我下載,將打印機設置里默認打印機設置為 pdfFactory Pro

銳浪報表安裝后目錄中已提供案例與文檔,博主Demo項目已上傳交流群,點擊最上方標題即可交流群學習。

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

【其他文章推薦】

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

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

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

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

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

※超省錢租車方案