標籤: 貨運

  • 考量經濟 梅克爾反對歐盟拉高減碳目標

    摘錄自2018年8月27日中央社報導

    德國總理梅克爾今天(27日)表示,世界各地極端天候頻傳,充分證明氣候變遷已是事實。不過她反對為保護氣候拉高減少溫室氣體排放門檻,指此舉沒太大意義。

    路透社報導,北半球今夏的炙熱高溫,引發外界憂心氣候變遷的現象正加速發生,歐洲數十個國家都呼籲,減少溫室氣體排放量的速度,應要比原訂目標更快。

    歐洲聯盟(EU)執委會主管氣候行動與能源事務執委卡尼特(Miguel Arias Canete)呼籲將2030年之前溫室氣體減量目標,從40%提高至45%。

    但梅克爾(Angela Merkel)表示,加速減少有害的二氧化碳排放量恐適得其反,況且歐洲各國此際對達成原訂目標都很吃力,再要拉高門檻沒有道理。

    她說:「我對這些新提議尤其不怎麼高興。我認為應先堅守既定目標。我不認為一直設定新目標有任何意義。」

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

    【其他文章推薦】

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

    台北網頁設計公司這麼多該如何選擇?

    ※智慧手機時代的來臨,RWD網頁設計為架站首選

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

    ※回頭車貨運收費標準

  • 澳洲政壇川普化 總理因支持減碳下台

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

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

    【其他文章推薦】

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

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

    ※回頭車貨運收費標準

    ※別再煩惱如何寫文案,掌握八大原則!

    ※超省錢租車方案

    ※產品缺大量曝光嗎?你需要的是一流包裝設計!

  • 加州議會通過法案 2045年前100%清潔能源

    摘錄自2018年8月30日世界日報報導

    加州州議會29日準備將一項畫時代的法案送交州長簽署,這項法案規定,加州在2045年前將電力供應全面變為清潔能源,不再使用煤和石油發電,100%改用太陽能、風力和其他再生能源。

    由州參議會議長德利昂提出的SB100號法案,先獲州參議會通過,29日再獲州眾議會以43票對32票通過;州眾議會進行了修改,所以須再送回州參議會通過,就可以送交州長簽署。州議會今年的會期,將於本周結束,所以SB100估計可於周末前送交州長。

    加州的公用事業公司包括太平洋瓦電和聖地牙哥瓦電,都反對SB100。美西各州石油協會和其他組織也反對。

    布朗州長對SB100保持沉默,沒有說是否簽署,雖然他是加州反暖運動的先鋒。明年可能接替布朗做州長的紐森,曾說要以100%清潔能源作為加州的目標,但是他也沒有對SB100表態。

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

    【其他文章推薦】

    ※超省錢租車方案

    ※別再煩惱如何寫文案,掌握八大原則!

    ※回頭車貨運收費標準

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

    FB行銷專家,教你從零開始的技巧

  • ZooKeeper使用入門

    ZooKeeper使用入門

    ZooKeeper簡介

    ZooKeeper是一個分佈式的,開源的分佈式應用程序協調服務,是Hadoop的子項目之一。它是一個為分佈式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分佈式同步、組服務等。

    安裝ZooKeeper

    操作系統要求

    操作系統 客戶端 服務端 原生客戶端 附加組件
    GNU/Linux 開發/生產 開發/生產 開發/生產 開發/生產
    Solaris 開發/生產 開發/生產 不支持 不支持
    FreeBSD 開發/生產 開發/生產 不支持 不支持
    Windows 開發/生產 開發/生產 不支持 不支持
    Mac OS X 開發 開發 不支持 不支持

    軟件要求

    Java 8及Java 11以上版本(Java 9和10不支持)

    硬件要求

    此硬件資源為官網推薦的配置,實際開發過程中不需要這麼大,筆者測試1核1G內存20G硬盤的虛擬機即可運行。

    • 2核
    • 2G內存
    • 80G硬盤

    下載安裝並進行單點配置

    1. 下載頁面地址:https://zookeeper.apache.org/releases.html
    2. 官網只提供tar.gz格式的壓縮包,windows下載后按照zip之類的解壓方式可能會導致解壓后的包無法使用,筆者使用Git帶的命令行執行linux的解壓命令解壓后使用,如果沒有安裝Git則建議使用虛擬機安裝Linux使用。以下是正確解壓和錯誤解壓后的對比。

    1. 解壓后的ZooKeeper默認是無法執行的,需要進行配置,將 apache-zookeeper-3.6.1/conf/zoo_sample.cfg複製一份並重命名為zoo.cfg,沒什麼特殊需要裡邊的配置項默認即可,筆者因為是在windows下使用,所以將datadir修改了。配置文件項說明如下:
    配置項 說明
    tickTime ZooKeeper使用的時間,單位毫秒,一般用於心跳檢測,而ZooKeeper中的最小session超時時間是此項的兩倍
    dataDir 保留內存數據庫快照的地址,如果不單獨指定,事務日誌也會記錄在此
    clientPort 服務端監聽的端口號
    initLimit 集群中的follower服務器與leader服務器之間初始連接時的最大心跳數
    syncLimit 集群中follower服務器與leader服務器之間通訊時的最大心跳數
    1. 配置完成后即可在bin目錄下執行對應的文件啟動了,Windows下為zkServer.bat,Linux下為zkServer.sh

    ZooKeeper應用

    通過zkCli進行使用

    1. ZooKeeper啟動后,可以通過bin目錄下自帶的客戶端進行訪問,Windows下為zkCli.bat,Linux下為zkCli.sh
    2. 啟動時默認連接localhost:2181,如果有需要連接遠程或其他端口的情況,可以如下添加參數:
    zkCli.sh -server IP:Port
    
    1. 進入客戶端后執行help(此處是一個隨意的指令,只要不是zkCli支持的操作都可以)可查看其支持的操作,關於所有操作的介紹請參考官方頁面:https://zookeeper.apache.org/doc/current/zookeeperCLI.html

    2. 常用操作介紹:

    • 查看節點信息,節點路徑不能以“/”結尾
    ls /
    ls /zookeeper
    
    • 創建一個節點
    create /test
    create /test/testa
    
    • 查看節點狀態
    stat /test
    stat /test/testa
    
    • 刪除節點
    # 刪除單個空節點
    delete /test/testa
    delete /test
    
    # 級聯刪除
    deleteall /test
    

    *退出客戶端

    quit
    

    通過ZooKeeper客戶端使用

    因為筆者的第一開發語言是Java,這裏以Java為例。常用的ZooKeeper Java客戶端用zkclient和Apache Curator兩種。zkclient是github上的一個開源項目,該項目在2018年10月2日後停止更新;Apache Curator是Apache基金會的開源項目,目前持續更新,推薦使用。常用的分佈式RPC框架DUBBO也在2019年1月份推出的2.7.0版本中將默認的ZooKeeper客戶端由zkclient切換為Apache Curator,此文中的示例也使用Apache Curator。

    1. 創建一個Maven項目,然後在pom.xml中引用Apache Curator,以下是筆者的文件內容,除了Apache Curator外添加了測試使用的junit並設置了編譯使用的java版本。
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>org.example</groupId>
        <artifactId>apache-curator</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <dependencies>
            <!-- https://mvnrepository.com/artifact/org.apache.curator/curator-recipes -->
            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-recipes</artifactId>
                <version>4.3.0</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter -->
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter</artifactId>
                <version>5.6.2</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.1</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    
    1. 之後在src\test\java\目錄創建com\aotian\curator\test\Tester.java,文件基本框架如下,主要是創建一個空的測試類
    public class Tester {
    
        @Test
        public void testCurator() {
          
        }
    
    }
    
    1. 接下來就是使用Apache Curator提供的API對ZooKeeper進行訪問了。首先介紹下常用的API
    • 創建客戶端
    RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
    CuratorFramework curatorFramework = CuratorFrameworkFactory.newClient("localhost:2181", retryPolicy);
    curatorFramework.start();
    
    • 檢查節點是否存在,存在的話返回Stat對象,不存在則返回null
    curatorFramework.checkExists().forPath("/localhost/aotian");
    
    • 創建節點,forPath第二個參數可以指定節點內容,不設置時創建空節點
    curatorFramework.create().creatingParentContainersIfNeeded().forPath("/localhost/aotian", message.getBytes());
    
    • 設置節點內容,僅適用於已存在的節點,否則會報錯
    curatorFramework.setData().forPath("/localhost/aotian", message.getBytes());
    
    • 獲取節點信息,以下代碼錶示將獲取的節點信息保存到result對象。
    Stat result = new Stat();
    curatorFramework.getData().storingStatIn(result).forPath("/localhost/aotian");
    
    • 獲取節點內容
    byte[] results = curatorFramework.getData().forPath("/localhost/aotian");
    
    1. 完整示例如下,結尾添加了線程睡眠的代碼,可以在睡眠時間內通過zkCli查看服務端中的內容。
        @Test
        public void testCurator() {
            // 創建客戶端
            RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
            CuratorFramework curatorFramework = CuratorFrameworkFactory.newClient("localhost:2181", retryPolicy);
            curatorFramework.start();
            // 定義節點內容
            String message = "testCurator";
            try {
                // 判斷節點是否存在不存在則創建,存在則設置指定值
                Stat a = curatorFramework.checkExists().forPath("/localhost/aotian");
                if (a == null){
                    curatorFramework.create()
                            .creatingParentContainersIfNeeded()
                            .forPath("/localhost/aotian", message.getBytes());
                }else{
                    curatorFramework.setData().forPath("/localhost/aotian", message.getBytes());
                }
    
                // 獲取節點信息
                Stat result = new Stat();
                curatorFramework.getData().storingStatIn(result).forPath("/localhost/aotian");
                System.out.println(result.getCtime());
    
                // 獲取節點內容
                byte[] results = curatorFramework.getData().forPath("/localhost/aoitan");
                System.out.println(new String(results));
    
                // 線程睡10S,這段時間內可以通過客戶端查看節點內的信息,結束后只能查看到空節點
                Thread.sleep(100000);
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                curatorFramework.close();
            }
        }
    

    ZooKeeper集群搭建

    ZooKeeper集群中包含兩種角色:Leader和Follower,因為ZooKeeper集群是半數節以上節點正常時才會正常提供服務,所以一般ZooKeeper集群中節點數量均為奇數。我們按照最小數量算,準備三台zookeeper服務器。

    1. 分別按照本文一開始的單機配置配置好三個ZooKeeper服務。個人聯繫或可以在同一台機器上部署三個ZooKeeper,只要解決端口衝突問題即可,實際生產過程中務必使用三台機器進行搭建,否則一旦機器出問題則整個集群癱瘓。
    2. 準備好三台ZooKeeper服務器之後我們準備開始集群的配置,首先我們需要規劃好ZooKeeper的ID,然後在datadir屬性對應的目錄下創建一個myid文件。然後在文件內寫上當前服務對應的ID,筆者規劃的是0、1、2,所以我需要添加的配置文件如下:
    IP地址 文件路徑 文件內容
    192.168.142.7 /tmp/zookeeper/myid 0
    192.168.142.8 /tmp/zookeeper/myid 1
    192.168.142.9 /tmp/zookeeper/myid 2

    datadir屬性默認在/tmp目錄下,此目錄會被定期清理掉,生產環境不要使用。

    3、配置完以上文件后,需要配置之前的zoo.cfg,在最後添加以下內容,其中server.*對應myid文件中的ID號,192.168.142.7是IP地址,2888是ZooKeeper集群的通訊端口,3888是集群選取Leader使用的端口。

    server.0=192.168.142.7:2888:3888
    server.1=192.168.142.8:2888:3888
    server.2=192.168.142.9:2888:3888
    

    4、最後檢查防火牆是否開放了2181、2888、3888端口,確認開放后啟動ZooKeeper即可。通過執行zkServer.sh status命令可以查看當前機器的狀態。

    [root@centos-server-01 bin]# ./zkServer.sh status
    /usr/bin/java
    ZooKeeper JMX enabled by default
    Using config: /usr/apache-zookeeper-3.6.0/bin/../conf/zoo.cfg
    Client port found: 2181. Client address: localhost.
    Mode: follower
    
    [root@centos-server-02 bin]# ./zkServer.sh status
    /usr/bin/java
    ZooKeeper JMX enabled by default
    Using config: /usr/apache-zookeeper-3.6.0/bin/../conf/zoo.cfg
    Client port found: 2181. Client address: localhost.
    Mode: leader
    

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

    【其他文章推薦】

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

    台北網頁設計公司這麼多該如何選擇?

    ※智慧手機時代的來臨,RWD網頁設計為架站首選

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

    ※回頭車貨運收費標準

    聚甘新

  • 殼牌與IONITY聯手,歐洲據點大增、EV充電5分鐘搞定

    殼牌與IONITY聯手,歐洲據點大增、EV充電5分鐘搞定

      Thomson Reuters 27日報導,荷蘭皇家殼牌(Royal Dutch Shell plc)宣布與IONITY GmbH結盟、2019年將在歐洲(包括比利時、英國、法國、荷蘭、奧地利、捷克、匈牙利、波蘭、斯洛伐克和斯洛維尼亞)高速公路80個據點設置超高速電動車(EV)充電站。殼牌零售部門主管Istvan Kapitany表示,如果加上德國境內預計要增設的20座,兩年內殼牌在歐洲高速公路的加油站將有四分之一會提供高速充電服務。   殼牌指出,350 kW的充電功率搭配IONITY技術可讓EV充電時間縮短至5~8分鐘,遠比一般的數小時充電時間還要快。依據殼牌最樂觀的估算,全球EV車隊占整體車隊比重將從目前的1%成長至2025年底的10%,全球原油日需求量將因而縮減80萬桶。殼牌競爭對手BP 8月表示正與電動車製造商洽談合作案、預計在旗下加油站內將設置充電樁。根據歐洲替代燃料瞭望台的統計,2014~2017年期間歐洲EV充電樁成長將近三倍、逼近12萬大關。   英國金融時報報導,殼牌在全球各地擁有4萬座加油站、平均每天服務3千萬名客戶。殼牌將安裝的IONITY充電樁功率為350 kW、遠大於業界目前的標準規格(50kW)。IONITY成立於2016年,股東包括福特、BMW、戴姆勒、Volkswagen。   (本文內容由授權使用。首圖來源:public domain CC0)  

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

    【其他文章推薦】

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

    台北網頁設計公司這麼多該如何選擇?

    ※智慧手機時代的來臨,RWD網頁設計為架站首選

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

    ※回頭車貨運收費標準

    聚甘新

  • 使用四叉樹優化碰撞檢測

    使用四叉樹優化碰撞檢測

    四叉樹是干什麼的?

    百度百科
    四元樹又稱四叉樹是一種樹狀數據結構,在每一個節點上會有四個子區塊。四元樹常應用於二維空間數據的分析與分類。 它將數據區分成為四個象限。數據範圍可以是方形或矩形或其他任意形狀。
    從定義我們可以看出重點信息:

    1. 樹狀結構
    2. 四個區塊
    3. 分類
    4. 矩形

    圖示講解

    講解之前需要先說明一下四叉樹是用來做什麼的,明白了原理才好理解它的行為。
    使用四叉樹就是使用分類的方法,減少碰撞節點的個數,只取出與給定碰撞體相同區域或者壓在碰撞體所在區域邊上的對象。

    1. 將遊戲屏幕分為四個區域。
    2. 插入對象
    3. 插入的對象超過了我們設置的閾值時,劃分
    4. 插入的對象再次超過了我們設置的閾值時,繼續分。

    分析

    插入

    從上面的圖示我們可以很好理解四叉樹的原理。涉及的都是插入操作。
    那麼插入操作具體都做了什麼呢?

    從代碼中我們可以看出:

    1. 當插入第一個對象的時候只走了2;這個時候沒有子樹,所以不會走1,因為objects(管理的對象)的長度還沒有超過我們設置的閾值MAX_OBJECTS,所以也不會走3。
    2. 一直插入,當objects中的數量,超過了我們設置的閾值MAX_OBJECT,就會開始劃分,產生子樹,有了nodes,劃分之後將自己管理的節點插入到子樹中。再此之前,都不會走1,因為還沒有產生子樹。
    3. 劃分之後再次插入新對象,如果對象可以獲得對應的象限,就會走1 不會走2和3,如果沒有獲得對應的象限才會走2,3(沒有獲得的情況可能是你創建的對象在屏幕外,遊戲中很多情況是敵人從屏幕外走進屏幕的,具體可參考我做的《星際迷航》或者《星際戰》遊戲)。

    更新對象

    我是把四插入作為了對象管理器使用,要不然對象也需要更新,所以有了這一步操作。如果不這樣你需要自己創建對象管理器,一個一個放進去,刪除。通過四叉樹直接管理省了不少事情。

    更新象限信息。

    這是一個遞歸操作,更新象限做的事情比較多了。

    1. 檢查對象是否存活,如果死亡就回收,我這裏使用了對象池,所以對象實現了poolAble接口。

    2. 判斷對象的所佔區域是否在四叉樹的區域內
      這裏需要說明的是一個四叉樹本身的區域是它管理的四個象限這麼大。也就是一個四叉樹管理四個象限

      不在管理區域的話需要判斷當前this是否為根節點,如果是說明對象已經出屏了。(這個時候可以通過對象實現的isVisible接口來控制是否回收,因為不是所有在屏幕外的都要回收,比如要進入屏幕的敵人,是不可能回收的,所以需要自己用isVisible接口來控制)。如果不是就將對象放入根節點,重新劃分。

    3. 在管理區域內,就看看在四叉樹管理的哪個象限里。更新象限信息。

      如果沒有變化什麼都不過,如果有變化,先判斷象限是否為-1,為什麼會出現-1,也就是不在四個象限的任何一個象限?因為壓線了。此番操作后的結果如下圖。

    根據給定矩形獲取對象列表

    1. 第一個是步長,用於獲取深度,當然深度越長,處理的時間越長,獲取的對象也精細。這個可以根據自己遊戲的同屏四叉樹層級而定了。
    2. 如果通過obj的rect獲得對象所在象限如果獲得了對應的象限,用獲得的象限的四叉樹再獲取。如果壓線的話就需要將碰撞的兩個象限的內容都取出來。
    3. 返回四叉樹中沒有分割象限的對象。

    怎麼用呢?

    自然就是把要碰撞的對象傳給retrieve函數獲得需要碰撞的對象列表進行碰撞檢測了。
    也就是文章靠頭說的:
    使用四叉樹就目的是為了減少碰撞節點的個數。使用的是分類的方法。
    至於用什麼樣的碰撞檢測函數,不是四叉樹關心的事情,

    至於用幾個四叉樹管理對象,也不是四叉樹關心的事情。

    結語

    想要demo的同學可以去我的微店或者官方creator商城購買《跨引擎遊戲框架》源碼,跟demo是一個項目。買過的同學請加我好友,群已經建好,有更新我會群里直接發包。

    源碼購買入口:

    demo展示:

    項目截圖:

    框架的相關模塊教程可以到《我的專輯》遊戲開發進階教程中獲取。
    後續還會推出更多與框架有關的教程:如:戰鬥框架,教學框架等等。並附帶完整的遊戲實現(飛行射擊遊戲為例,學會做飛行射擊遊戲不是目的,目的是通過這一款遊戲,你可以獲得做其他所有類型的遊戲的思路)。希望可以在不餓死自己的前提下幫助更過的朋友們快速找到開發思路。

    長按下方二維碼,關注《微笑遊戲》公眾號,獲取更多精彩內容。

    歡迎掃碼關注公眾號《微笑遊戲》,瀏覽更多內容。

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

    【其他文章推薦】

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

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

    ※回頭車貨運收費標準

    ※別再煩惱如何寫文案,掌握八大原則!

    ※超省錢租車方案

    ※產品缺大量曝光嗎?你需要的是一流包裝設計!

    聚甘新

  • C# WPF – MVVM實現OPC Client管理系統

    C# WPF – MVVM實現OPC Client管理系統

    前言

    本文主要講解採用WPF MVVM模式設計OPC Client的過程,算作對於WPF MVVM架構的學習記錄吧!不足之處請不吝賜教,感謝!

    涉及知識點

    • C#基礎
    • Xaml基礎
    • 命令、通知和數據綁定
    • Prism+Blend
    • MahApps.Metro(第三方框架)
    • OPC

    項目實現功能

    • 用戶登陸(模擬登陸過程,未連接數據庫)
    • OPC同步讀寫、異步讀寫操作等

    開發環境

    • Window 10
    • Visual Studio 2019
    • .Net Framework 4.8

    成品效果圖

    項目詳解

    MVVM框架搭建

    為了節省開發時間,在事件綁定上使用了Prism框架,OPC通信方面使用了OPCDAAuto.dll類庫,二者均可以通過Nuget方式安裝到項目中。

    • 定義了一個DelegateCommand類用來處理屬性和命令;
    • 定義了一個NotificationObject類用來通知屬性和命令的改變;

    注意:在使用事件綁定時,需要添加引用 xmlns:i=”http://schemas.microsoft.com/xaml/behaviors”,然後根據控件對應事件的名稱設置綁定命令即可。

    比如我們想給ComboBox的SelectionChanged事件設置一個事件綁定,可這麼寫

    xaml代碼:

    <ComboBox
        x:Name="CombServerList"
        Width="120"
        Margin="{StaticResource ControlMargin}"
        ItemsSource="{Binding ServerList}">
        <!--  事件綁定  -->
        <i:Interaction.Triggers>
              <i:EventTrigger EventName="SelectionChanged">
                 <i:InvokeCommandAction Command="{Binding SelectionChangedCommand}" CommandParameter="{Binding ElementName=CombServerList}" />
              </i:EventTrigger>
         </i:Interaction.Triggers>
    
    </ComboBox>

    View Code

    VM代碼:

            public ICommand SelectionChangedCommand
            {
                get
                {
                    return new Prism.Commands.DelegateCommand<ComboBox>((combobox) =>
                    {
                       // 業務邏輯
                    });
                }
            }

    View Code

    相關類的定義代碼如下:

     public class DelegateCommand : ICommand
        {
            public event EventHandler CanExecuteChanged;
    
            /// <summary>
            /// 判斷判斷命令是否可以被執行
            /// </summary>
            /// <param name="parameter"></param>
            /// <returns></returns>
            public bool CanExecute(object parameter)
            {
                if (this.CanExecuteFunc != null)
                {
                    this.CanExecuteFunc(parameter);
                }
                else
                {
                    return true;
                }
                return false;
            }
    
            /// <summary>
            /// 執行相關的函數或者命令
            /// </summary>
            /// <param name="parameter"></param>
            public void Execute(object parameter)
            {
                if (this.ExecuteAction != null)
                {
                    this.ExecuteAction(parameter);
                }
                else
                {
                    return;
                }
            }
    
            /// <summary>
            /// 聲明一個委託用來執行命令對應的方法
            /// </summary>
            public Action<object> ExecuteAction { get; set; }
    
            /// <summary>
            /// 聲明一個方法,用來判斷命令是否可以被執行
            /// </summary>
            public Func<object, bool> CanExecuteFunc { get; set; }
    
        }

    DelegateCommand

    public class NotificationObject : INotifyPropertyChanged
        {
            /// <summary>
            /// 實現接口
            /// </summary>
            public event PropertyChangedEventHandler PropertyChanged;
    
            /// <summary>
            /// 通知屬性的改變
            /// </summary>
            /// <param name="propertyName"></param>
            public void RaisePropertyChanged(string propertyName)
            {
                if (this.PropertyChanged != null)
                {
                    this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
                }
            }
        }

    NotificationObject

    UI界面搭建

    這裏主要採用第三方開源框架MahApps.Metro,可以通過NuGet方式安裝到項目中,這裏不再展開講解,感興趣的朋友可以參考 MahApps.Metro – Quick Start

    OPC相關處理

    大致分為如下幾步:

    • 獲取OPC服務列表
    • 連接OPC服務
    • 創建分組
    • 獲取項目列表
    • 添加項目到分組中
    • 對項目的內容進行讀寫操作

    比較簡單,不再展開了。

    登陸界面

    這裏我們說一說登陸界面的實現,由於追求PURE MVVM,所以這裡有三點需要說明一下:

    • PasswordBox綁定
    • 圓形頭像
    • 登陸窗體切換

    PasswordBox綁定:自定義幫助類,使用PasswordBoxBehavior實現綁定;

    圓形頭像:自定義樣式,增加Image圓角屬性;

    登陸窗體切換:藉助prism的shell。

    至此,已全部結束。

      作者:Jeremy.Wu
      出處:https://www.cnblogs.com/jeremywucnblog/
      本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

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

    【其他文章推薦】

    ※超省錢租車方案

    ※別再煩惱如何寫文案,掌握八大原則!

    ※回頭車貨運收費標準

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

    FB行銷專家,教你從零開始的技巧

    聚甘新

  • 電動車夯,立凱-KY 8月營收創歷史新高

    電池正極材料廠立凱-KY公布8月合併營收為1.47億元,年成長62.6%,月增23.1%,創下單月歷史新高;累計其前8月營收8.77億元、年增24.03%;公司指出,8月營收攀高,主因是受惠產品價格持續走揚、以及車電事業部新增加技術服務收入。

    立凱-KY並表示,公司在中國大陸與五龍電動車集團的合作亦有重要斬獲。9月4日在中國杭州開幕的二十國集團(G20)首腦峰會,中國作為接待地主國為體現國家綠色和可持續發展的理念,首次使用純電動汽車作為G20峰會首長貴賓接待用車,即採用210輛五龍旗下長江汽車自主研發的電動中巴車、電動商務車作為會議VIP接待用車和會議核心區域工作用車;而長江電動汽車不僅造型新穎,其科技配置、智慧駕馭模式更是為各國來賓所讚譽。

    立凱-KY已於上月底前完成與五龍的資本合作案,雙方預計將在資金及技術方面合作,以加速拓展大陸電動車市場版圖。

    (本文內容由授權提供)

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

    【其他文章推薦】

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

    台北網頁設計公司這麼多該如何選擇?

    ※智慧手機時代的來臨,RWD網頁設計為架站首選

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

    ※回頭車貨運收費標準

    聚甘新

  • 利基應用突破,崧騰五年車用佔比衝兩成

    車用接單突破,電源開關模組廠商崧騰(3484)車用高壓連接器,8月起開始放量,另開關模組也切入大陸合資車廠,預計11、12月開始交貨。董事長張俊雲(附圖)表示,今(2016)年算是打入車用客戶很好的開始,2017-2018年會看到比較明顯的效果,五年內期許車用佔比能超過兩成。

    崧騰成立於1992年,初期是以單純的開關鍵為主,其後在為日系工具機客戶開發機構與控制器,建立成功模式下,開始整合機構模具、電子控制器與軟硬體的能力,並逐步擴大利基領域的轉型;以今年前8月來看,資訊與消費電子的營收占比已掉到35~36%,取而代之的是工具機占比超過四成,家電占比則拉高至15~17%。

    而今年崧騰在車用上也有重大突破。張俊雲透露,該公司在車用的產品包括車用電源插座、電池連接器、高壓連接器及開關模組等,以高壓連接器來說,因需承受至少170伏特以上的電壓測試,且車廠供應鏈封閉,過去幾乎都是如美商安費諾等的天下,但公司歷經一年以上的開發與認證,去年起已陸續打入電動機車及中美電動車大廠客戶,且8月起單月出貨已有萬顆水準,同時未來配合電源廠客戶台達電(2308)的開發進度,產品還有機會擴及電動車或充電座上其他機構零件。

    除了高壓連接器,張俊雲說,在傳統車廠方面,崧騰也已接獲大陸合資車廠開關模組訂單,預計11、12月交貨。他說,今年是車用很好的開始,2017-2018年會看到比較明顯的成果,期許五年內車用佔比能突破兩成水準。

    除利基應用的開花結果外,配合全球客戶的東南亞布局,崧騰也在2013年8月設立柬埔寨廠,工廠坐落於金邊奇倉工業區,2014年2月正式量產,生產端子座注射、線材加工、成品組裝等自動化相對較低的製程,現有月產能共計1,500萬個,對集團單月營業額貢獻80-100萬美元,占比近一成。

    張俊雲說,包括台達電、日本客戶與美系工具機大廠,都逐步建置東南亞的供貨基地,主要考量不外乎人工成本較低與人力穩定度較高,而該公司當時赴柬國設廠,考慮的也是約當大陸及泰國三分之一的人工成本、政治相對穩定、沒有外匯管制、占比六成的勞動人口等;其對東南亞兩個據點泰國及柬埔寨的長期期許是,前者能擔綱集團在東協的銷售據點,後者則是製造中心,並能與中國大陸的華南及華東生產基地,並駕齊驅。

    法人也估計,崧騰今年第三季營收可望創下新高,第四季小幅衰退,但下半年在營收規模與毛利率提升下,獲利將較上半年近倍成長,全年仍力拼本業獲利持續加溫,整體盈餘優於去年水準。

    本文由嘉實資訊 MoneyDJ 授權使用 記者 蕭燕翔 報導

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

    【其他文章推薦】

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

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

    ※回頭車貨運收費標準

    ※別再煩惱如何寫文案,掌握八大原則!

    ※超省錢租車方案

    ※產品缺大量曝光嗎?你需要的是一流包裝設計!

    聚甘新

  • 別賜死蘋果車?傳庫克沒死心、擬收購McLaren超跑

    別賜死蘋果車?傳庫克沒死心、擬收購McLaren超跑

    先前一度傳出蘋果電動車開發案「泰坦計畫」(Project Titan)胎死腹中,蘋果將放棄硬體,轉向研發自駕車技術。不過新消息顯示,蘋果似乎還沒死心,向英國超跑車商McLaren提親。

    巴倫(Barronˋs)、英國金融時報21日報導,內情人士透露,蘋果考慮收購McLaren、或進行策略投資,雙方好幾個月前開始洽談。據了解,蘋果對McLaren的工程技術和專利極感興趣,估計若真要併購McLaren,價格可能為10~15億英鎊。不過相關人士強調,最近蘋果電動車發展方向改變,不確定是否繼續協商。

    消息傳出後,McLaren發布聲明,表示未與蘋果討論投資提案,不過沒有說明蘋果是否曾接洽過該公司。

    McLaren出面否認,仍然止不住市場議論。Creative Strategies分析師Ben Bajarin以特斯拉和英國超跑Lotus結盟為例,說明可行性。他指出,2004年特斯拉與Lotus合作,發布電動跑車「Tesla Roadster」,定價十萬美元。儘管Roadster賣不到3,000輛,卻替之後的特斯拉暢銷車款「Model S」打下基礎。Bajarin稱,特斯拉從高檔跑車出發,蘋果或許也會如此。

    富國銀行(Wells Fargo)的Maynard Um則認為,蘋果看上的不是硬體,而是McLaren的感測器技術。他在報告稱,McLaren超跑聞名於世,但是蘋果青睞的應是旗下的McLaren Applied Technologies部門。McLaren跑車利用偵測器蒐集胎壓、煞車溫度、衝擊力道等資料,透過預測分析,提升汽車維修和表現;此一技術可運用於許多領域,如能源業、健保業等。

    紐約時報9月初報導,知情人士透露,蘋果發展電動車計畫,因潛在競爭者眾且技術難度高而大打退堂鼓,策略面臨修正,部分泰坦研發案已提前結案,並連帶資遣數十名工作人員。

    蘋果七月請回老將Bob Mansfield主導泰坦計畫,重心從硬體製造移往自駕車應用科技,裁員是策略轉向的一部份。谷歌在更早之前就開始研發自駕車,且已上路測試好幾年,重心同樣放在谷歌最擅長的軟體研發與應用。

    本文由嘉實資訊 MoneyDJ 授權使用 記者 陳苓 報導

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

    【其他文章推薦】

    ※超省錢租車方案

    ※別再煩惱如何寫文案,掌握八大原則!

    ※回頭車貨運收費標準

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

    FB行銷專家,教你從零開始的技巧

    聚甘新