311後 周產期死亡率與核污染

文:矢崎克馬;翻譯、整理:宋瑞文;審稿:上前万由子等

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

【其他文章推薦】

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

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

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

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

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

※超省錢租車方案

※聚甘新

因疫情關閉 倫敦最古老動物園求公眾捐贈物資

摘錄自2020年03月26日星島日報報導

英國因應疫情實施禁足令,世界最古老,有近200年歷史的倫敦動物園(London Zoo)也關閉,是自二戰以來首次,園方呼籲各界捐贈,以保護園內大約1.8萬隻動物。

有別於博物館或藝術館,倫敦動物園即使關閉,園內的動物仍有其需要,無論獅子、大猩猩、斑馬和長頸鹿等大型獸類,或是馬達加斯加蟑螂等其他大小動物。

倫敦動物學會營運長表示:「我們通常完全依賴公眾支撐開支,因此若沒有人造訪,就不會有收入。我們必須尋求其他收入來源,讓人們展現對我們的支持並進行捐贈。」她指出:「我們的動物吃得很多,我們必須確保供應鏈能夠繼續,且有高品質食物。無論是源自柯芬園的水果、蔬菜或肉類,我們需要持續的供應。」

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

【其他文章推薦】

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

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

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

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

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

※超省錢租車方案

※聚甘新

[cpp]C++中的析構函數

C++中的析構函數

簡介

析構函數(Destructors),是對象的成員函數,沒有返回值也沒有參數,且一個類只有一個析構函數,當對象被銷毀的時候調用,被銷毀通常有這麼幾個情況。

  • 函數執行結束
  • 程序執行結束
  • 程序塊包含的局部變量
  • delete操作

什麼時候要自己寫析構函數?

編譯器會自動創建默認的析構函數,通常都沒有問題,但是當我們在類中動態分配了內存空間時,我們需要手段的回收這塊空間,防止內存溢出。就像這樣

class String 
{ 
private: 
	char *s; 
	int size; 
public: 
	String(char *); // constructor 
	~String();	 // destructor 
}; 
 
String::String(char *c) 
{ 
	size = strlen(c); 
	s = new char[size+1]; 
	strcpy(s,c); 
} 
 
String::~String() 
{ 
	delete []s; 
} 

私有的析構函數

可以將析構函數的訪問權限設置為private,設置時沒有問題的,但是一個問題就是,通常的手段就沒法調用析構函數了。

如下所示,程序結束后要調用析構函數,但是析構函數時私有的沒法調用,所以會編譯出錯。

#include <iostream> 
using namespace std; 
class Test { 
private: 
	~Test() {} 
}; 
int main() 
{ 
	Test t; 
} 

以下這樣不會有問題,因為沒有對象被建立,也不用析構

int main() 
{ 
    Test* t;                                          
} 

以下這樣也不會有問題,因為動態分配的內存需要程序員手段釋放,所以程序結束時沒有釋放內存,也沒有調用析構函數。這裏插一句,動態分配的內存如果不手動釋放,程序結束后也會不會釋放,但是現代操作系統可以幫我們釋放,因為這個動態分配的內存和這個進程有關,操作系統應該可以捕獲到這個泄露的內存從而釋放。(查資料看到的)

int main() 
{ 
    Test* t = new Test; 
} 

如果使用delete來刪除對象,會編譯出錯

int main() 
{ 
    Test* t = new Test;
    delete t;//編譯出錯,無法調用私有的析構函數 
}

可以利用Friend函數,進行對象的銷毀,因為Friend可以訪問私有成員,所以可以訪問析構函數。


#include <iostream> 

class Test { 
private: 
	~Test() {} 
	friend void destructTest(Test*); 
}; 

void destructTest(Test* ptr) 
{ 
	delete ptr; 
} 

int main() 
{ 
	Test* ptr = new Test; 
	destructTest(ptr); 

	return 0; 
} 

或者給類寫一個銷毀的方法,在需要銷毀的時候調用。

class Test { 
public:
    destroy(){delete this};
private: 
	~Test() {} 
};

那麼什麼時候需要使用私有的析構函數呢?當我們只希望動態分配對象空間(在堆上)時候,用私有析構,就防止了在棧上分配,因為在編譯階段就會出錯。

虛析構函數

當類用到多態的特性時候,使用虛析構函數。看如下的例子。

#include <iostream>
using namespace std;
class Base
{
public:
    Base(){
        cout << "Base Constructor Called\n";
    }
    ~Base(){
        cout << "Base Destructor called\n";
    }
};
class Derived1: public Base
{
public:
    Derived1(){
        cout << "Derived constructor called\n";
    }
    ~Derived1(){
        cout << "Derived destructor called\n";
    }
};
int main()
{
    Base *b = new Derived1();
    delete b;
}

例子里的析構函數都不是虛函數,當我們想用基類的指針來刪除派生類對象的時候,就出現了問題,“undefined behavior”,c++標準里規定,只由編譯器實現,通常這時不會報錯,會調用基類的析構函數。但這應該不是我們想要的,這會導致內存泄漏。所以要把析構函數置為虛函數。(msvc似乎不用給析構函數加virtual,默認就是虛的,gcc沒有默認還是要加的)

另外虛析構函數可以是純虛析構函數,但是要提供函數體,不然沒法析構,因為虛析構函數和一般的虛函數的overide還不一樣,虛析構函數要挨個執行,不提供函數體,會編譯出錯。

析構函數執行的順序

派生類,成員對象,基類這樣

class B
{public: virtual ~B(){cout<<"基類B執行了"<<endl; }
};

class D
{public:virtual ~D(){cout<<"成員D執行了"<<endl; }
} ;

class E
{public:virtual ~E(){cout<<"成員E執行了"<<endl; }
} ;

class A
{public:virtual ~A(){cout<<"基類A執行了"<<endl;}; 
};

class C:public A,B
{
    public:virtual ~C(){cout<<"派生類執行了"<<endl;};
    private:
        E e;
        D d;
};

int main()  
{  
    C *c;
    c=new C();
    delete c;
}   

結果為:

  • 派生類執行了
  • 成員D執行了
  • 成員E執行了
  • 基類B執行了
  • 基類A執行了

參考

  • [1]什麼時候使用虛函數https://stackoverflow.com/questions/461203/when-to-use-virtual-destructors
  • [2]析構函數https://www.geeksforgeeks.org/destructors-c/
  • [3]虛析構函數https://www.geeksforgeeks.org/virtual-destructor/
  • [4]純析構函數https://www.geeksforgeeks.org/pure-virtual-destructor-c/

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

【其他文章推薦】

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

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

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

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

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

※超省錢租車方案

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

台灣的電動機車品牌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/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

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

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

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

※超省錢租車方案

docker鏡像瘦身思路

docker鏡像瘦身思路

一、簡介

      docker鏡像太大,帶來了以下幾個問題:

  • 存儲開銷

      這塊影響其實不算很大,因為對服務器磁盤來說,15GB的存儲空間並不算大,除非用戶服務器的磁盤空間很緊張

  • 部署時間

      這塊影響真的很大,交付件zip包太大,導致用戶部署該產品時,花費的時間變長,客戶現場中反饋部署時間超過1.5小時,這嚴重影響用戶的體驗,降低滿意度

  • 性能不穩定

      如果客戶的服務器規格不夠(特別是磁盤讀寫性能不夠),會增大部署失敗的概率。

二、瘦身思路

       以下思路是我在該任務中嘗試使用用於鏡像瘦身的方法,均可以不同程度的降低DOcker鏡像的尺寸。

  • 清理Docker鏡像中的無用安裝包

      在Dockerfile構建Docker鏡像過程中,有可能引入臨時文件,比如:安裝包i、文件壓縮包。這些臨時文件忘記清理,導致佔據了一定的尺寸,有必要對其進行清理。

        如下Dockerfile:   

FROM xxxx/xxxx-jdk:1.0.0RUN apt-get update && apt-get install -y git maven 
mysql-client nodejs nodejs-legacy python-pip graphviz npm unzip  

Dockerfile裏面經常安裝很多工具,安裝完后,需要及時刪除安裝包緩存

(alpine) apk del openssh vim:刪除包及其依賴包

(Ubuntu) Apt-get clean:刪除所有已下載的包文件

(centos) Yum clean all: yum 會把下載的軟件包和header存儲在cache中,而不自動刪除。如果覺得佔用磁盤空間,可以使用yum clean指令進行清除,更精確 的用法是yum clean headers清除header,yum clean packages清除下載的rpm包,yum clean all一全部清除

      上面的dockerfile中在安裝工具后應該執行下: && apt-get clean && rm -rf /var/lib/apt/lists/*

RUN apt-get update && apt-get install -y git maven 
    mysql-client nodejs nodejs-legacy python-pip graphviz npm unzip && apt-get clean && rm -rf /var/lib/apt/lists/*

 

   實例:

      

FROM centos:7
RUN yum update -y RUN yum install -y wget unzip socat java-1.8.0-openjdk-headless
# Set permissions
RUN yum clean all
EXPOSE 8486

 

   修改:將黃色標示的部分改寫成如下,大小從691Mb下降到583Mb

RUN yum update -y  && yum install -y wget unzip socat java-1.8.0-openjdk-headless && yum clean all
  • 避免不必要的工具安裝

     有的Dockerfile中安裝了很多工具,這個工具的加在一起尺寸比較大,這塊需要挨個排查:客戶環境下,需不需要安裝該工具?很多工具其實是面向開發使用的,而用戶根本不會使用,那麼就沒有必要在客戶環境上使用安裝這麼工具的鏡像,應該仔細排除工具的必要性,會給鏡像瘦身帶來比較大的收益。比如, dockerfile中安裝了JDK。 這個有些情況下,完全沒必要,實際上可能jre就能搞定。

     總之,能不安裝,就不安裝;能少安裝,就少安裝;能用輕量級的工具,盡量用輕量級的工具!!!

  • 多階段構建

      Docker多階段構建是17.05以後引入的新特性,旨在解決編譯、構建複雜和鏡像大小的問題。對於多階段構建,可以在Dockerfile中使用多個FROM語句。每個FROM指令可以使用不同的基礎,並且每個指令都開始一個新的構建。您可以選擇性地將工件從一個階段複製到另一個階段,從而在最終image中只留下您想要的內容。

      如下圖所示為多階段構建的使用示例:

把多個Dockerfile合併在一塊,每個Dockerfile單獨作為一個“階段”,“階段”之間可以互相聯繫,讓后一個階段構建可以使用前一個階段構建的產物,形成一條構建階段的chain,最終結果僅產生一個image,避免產生冗餘的多個臨時images或臨時容器對象。

       1)多階段構建使用之前

      針對多階段構建的特點,分析我們產品裏面的dockerfile,如下面所示,該操作的目的是將tar包拷貝值容器內的路徑下,並解壓、執行後續操作。然而COPY層具有一定的大小,只起到臨時層的作用。(特別是這個tar包足足幾百MB!)。

 

FROM xxxx:${project.version}COPY karaf-${ccsdk.opendaylight.version}.tar.gz /tmp/
RUN mkdir /opt/opendaylight \
      && tar zxvf /tmp/karaf-${ccsdk.opendaylight.version}.tar.gz --directory /opt/opendaylight \&& rm -rf /tmp/karaf-${ccsdk.opendaylight.version}.tar.gz \ 
      && mv /opt/opendaylight/karaf-${ccsdk.opendaylight.version} /opt/opendaylight/current && mkdir -p  /opt/opendaylight/current  && ln -s  /opt/opendaylight/current /opt/opendaylight/karaf-${ccsdk.opendaylight.version}
RUN mkdir -p /opt/opendaylight/current/system/org/mariadb/jdbc/mariadb-java-client/${ccsdk.mariadb-connector-java.version}
COPY mariadb-java-client-${ccsdk.mariadb-connector-java.version}.jar /opt/opendaylight/current/system/org/mariadb/jdbc/mariadb-java-client/${ccsdk.mariadb-connector-java.version}
EXPOSE 8181   

     2)  使用多階段構建

       使用多階段構建,修改后的dockerfile如下圖所示,修改實現將第一階段拷貝並解壓好的文件複製過來即可,少了拷貝tar包的環節,這樣使得最終形成的鏡像中鏡像層數得到有效的降低,也一定程度上降低了鏡像尺寸。

FROM xxxx:${project.version} as baseFirst
COPY karaf-${ccsdk.opendaylight.version}.tar.gz /tmp/
RUN mkdir /opt/opendaylight \
      && tar zxvf /tmp/karaf-${ccsdk.opendaylight.version}.tar.gz --directory /opt/opendaylight \&& rm -rf /tmp/karaf-${ccsdk.opendaylight.version}.tar.gz \ 
      && mv /opt/opendaylight/karaf-${ccsdk.opendaylight.version} /opt/opendaylight/current 

FROM xxxxxe:${project.version} as baseSecondRUN mkdir -p  /opt/opendaylight/current  && ln -s  /opt/opendaylight/current /opt/opendaylight/karaf-${ccsdk.opendaylight.version}
COPY --from=baseFirst /opt/opendaylight/current  /opt/opendaylight/current
RUN mkdir -p /opt/opendaylight/current/system/org/mariadb/jdbc/mariadb-java-client/${ccsdk.mariadb-connector-java.version}
COPY mariadb-java-client-${ccsdk.mariadb-connector-java.version}.jar /opt/opendaylight/current/system/org/mariadb/jdbc/mariadb-java-client/${ccsdk.mariadb-connector-java.version}
EXPOSE 8181
  • Copy和賦權同時執行
FROM ubuntu:16.04
# Copy APIKeys
COPY ./messageservice/ /tmp/zookeeper/gerrit  ------A 
EXPOSE 2181 2888 3888
B------> RUN useradd $ZK_USER && [ `id -u $ZK_USER` -eq 1000 ] && [ `id -g $ZK_USER` -eq 1000 ] && chown -R $ZK_USER:$ZK_USER /opt/$ZK_DIST/ /opt/zookeeper/ /var/lib/ /var/log/ /tmp/zookeeper/    
USER $ZK_USER

      問題排查如下:A處copy的文件700MB太大,很多文件沒用到

                               B處給/tmp/zookeeper添加屬組和屬主,該層也很大

       修改:使用 COPY –chown=1000:1000   ./messageservice/ /tmp/zookeeper/gerrit, 鏡像大小從1.4GB 下降到700Mb

  • 鏡像層的復用

      這一塊修改得當的話,得到的收益是最大的!!!最大的!!!最大的!!!

      我們知道docker鏡像具有層級結構,如果很多鏡像具有相同的層,則這些相同的層就能得到復用(把多個鏡像生成一個tar),docker不會保存兩份相同放入層文件,通過提高層得復用能顯著降低整體的鏡像尺寸。比如常見方法有:替換統一的基礎鏡像、創建出統一的基礎鏡像、調整層的順序等等。這裏東西沒有整理,就不上圖了,可以自行腦補,查閱資料即可

我這邊經過這一步調整后,zip產品包從11.45GB下降到6.96GB

 

最終zip包從15GB下降到7GB

    

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

【其他文章推薦】

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

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

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

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

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

※網頁設計最專業,超強功能平台可客製化

Tesla市值超越Ford,成全美第二大製造商

電動車究竟行不行得通?讓特斯拉(Tesla)來告訴你答案。3 日上午,隨著特斯拉的股價飆升,特斯拉的市值正式超越了百年汽車大廠福特(Ford),成為美國第二大汽車製造商。

電動車將成主流?

華爾街日報報導,特斯拉近日公布2017 年第一季銷售數據,受到Model S、Model X 車款交貨量大增帶動,全球銷售量較去年同期大增69%,創下單季銷售量歷史新高,消息激勵股價3 日大漲7.3% 至298.52 美元,特斯拉的市值也來到487 億美元(約1.48 兆元台幣),超過福特的455 億美元(約1.38 兆元台幣)。

隨著車款交貨量提升,特斯拉將有望順利達成2017 上半年的5 萬台銷售目標。儘管整體銷售量仍無法與其他大廠做比較,但有越來越多的投資人相信,在經過數年可觀的成長後,美國汽車的銷售市場已經開始出現衰退,電動車將逐漸成為主流。

這項在1980 年代時日本車廠企圖研發的技術,如今卻可能由矽谷的公司來讓其發揚光大。

特斯拉的專長?

或許是嗅到未來的商機,不僅僅是特斯拉,許多汽車大廠也開始關注電動車及自駕車領域。通用也在日前就推出平價電動車Chevrolet Bolt,想與特斯拉一較高下,然而3 月僅銷售3,000 輛,與特斯拉Model 3的預購盛況相去勝遠。

福特即將上任的執行長費爾茲(Mark Fields)也承諾將在2021 年前推出自駕車,但百年企業轉型談何容易,目前看來仍舊困難重重。

基金公司ARK Invest 的分析師Tasha Keeney 認為,其他汽車大廠若想投入電動車和自駕車領域發展,目前得需付出比特斯拉雙倍的努力才有望達成。

福特的市值和2010 年底時大致相同,但當時新上市的特斯拉市值仍低於20 億美元(約608 億元台幣)。目前全美最大的汽車製造商是通用(General),市值為521 億美元(約1.58 兆元台幣)。

如今看來,特斯拉隨時有機會超越通用,奪下全美市值第一汽車製造商的寶座。

市值被高估?

由於看好特斯拉對自駕車共乘服務的未來發展,摩根史丹利的分析師Adam Jonas 將特斯拉的目標價訂為每股305 美元,部分投資人認為,相較起其他汽車大廠和科技龍頭,特斯拉更有望能將自駕技術真正帶進道路。

然而並非所有人都對特斯拉有信心,儘管已經成立13 年,特斯拉仍有著沉重的負債、未能穩定獲利,自駕車也還在測試階段。底特律車商和汽車研究中心主席David Cole 就認為,特斯拉的市值攀升是靠著炒作和承諾為基礎的。

對於外界的關注,馬斯克3日發推特表示,如果以特斯拉的歷史來看,確實會讓人覺得公司市值過高,但特斯拉現在的股價是反映風險調整後的未來現金流。福特則發聲明指出,營運並不會受股價波動影響,重心一直都放在透過經營來提升價值。

(合作媒體:。圖片出處:Public Domain CC0)

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

【其他文章推薦】

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

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

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

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

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

※超省錢租車方案

Day8-微信小程序實戰-交友小程序-首頁用戶列表渲染及多賬號調試及其點贊功能的實現

在這之前已經把編輯個人的所有信息的功能已經完成了

之後先對首頁的列表搞動態的,之前都是寫死的靜態

1、之前都是把好友寫死的,現在就在js裏面定義一個數組,用循環來動態的綁定

在onReady中定義,取真實的數據給定義的列表數組list  

通過調用  db.collection(‘users’).get()  這裏沒有加其他的限制,得到的就是所有的數據了,拿到全部的數據之後就會觸發then方法了

用then返回的res中有一個data的列表集合,有一個注意的點就是,這樣子讀取是吧數據庫中的數據的全部字段,但是我們需要用的只是

用戶的頭像和點贊數、用戶昵稱,其他的數據其實是不需要的

可以加一個field方法,可以要求返回的字段是哪些的

 

可以看到是只有一個用戶,我們為了模擬的話,就可以多賬號進行調試,

 

 1、創立多賬號

    ①首先這個多賬號的一定要是測試號,所以先進入微信的管理後台 https://mp.weixin.qq.com/

    ②進入 【成員管理】添加項目成員

    ③回到微信開發者工具中-》工具-》多賬號調試-》可以通過添加虛擬測試號來進行測試的,不用真實的微信號都可以

 

之後就是對點贊的功能進行設計了(就可以在index.wxml中給點贊的小心上加一個點擊事件即可了

(小細節在小程序中規定,在客戶端中讀取用戶列表的時候,一般不會把整個數據庫的用戶都讀取出來的,是有一個限制的

一般都是把前二十條數據給讀取出來的,如果數據一多的話,一般都是進行分頁處理了–一般都是用數據庫中的collection.skip和collection.limit,這兩個東西一起配合的話就可以做下拉加載的功能了)

由於這個點贊是要對找到用戶的id地址的,所以在wxml中給點贊這個圖標加上一個id自定義屬性的掛載

 

data-id="{{ item._id}}"

這個東西的用處就是,在點擊這個心心的時候就可以拿到這個自定義的屬性id了  

通過把handleLinks(ev)函數中把ev打印出來發現,這個自定義屬性id 的位置在

 ev.target.dataset.id

console.log就是用來測試的,如果沒效果的話,一般都是直接在點擊事件後面通過promise 的then把res打印出來看看情況是怎麼樣的

***有時候這些點擊事件無法觸發的話,就可以在檢查一下樣式,可能這個區域在前端显示是在這裏,但是實際上是在其他的地方,

 

 

 也就是布局引起的問題了

 

 

 

 可以看到這裏就是碰到的是點贊的這個圖標,但是這個樣式是在左上角進行了渲染的

這個時候為了演示把,就把自定義屬性,和點擊事件放在點贊圖標還有點贊數包含的這個text裏面了

<text bindtap="handleLinks" data-id="{{ item._id}}" >
          <!-- 點贊圖標 -->
              <text class="iconfont icondianzan"
              ></text>
          <!-- 點贊數 -->
              <text>{{ item.links }}</text>
          </text>

改完之後,再點擊心心或者是數量,就可以正常的進行點贊了

  但是發現只有給自己點贊的時候才可以改變點贊的數量,而改其他人點贊的時候就改不了

比如:

 

 

 這就是一個權限的問題了也就是只能改自己的數據(點贊數)改不了別人的數據l

 

 

因為在小程序端中,由於用戶可以直接對數據庫進行操作,所以會有一定的風險,所以就通過這個訪問權限來進行了限制

那?

怎麼修改別人的數據呢?—這個操作就要在服務端來進行操作了!  也就是在雲函數中去完成一個雲函數的操作了

 

下面就是講解 如何在 服務端來對数字字段來進行更改!

 

二、點贊功能實現與update雲函數

 由於要在服務端來做的話,就可以把這一塊的部分代碼刪掉了

  handleLinks(ev){
    let id = ev.target.dataset.id;
    db.collection('users').doc(id).update({
      data : {
        links : 5
      }
    }).then((res)=>{
      console.log(res)
    }); 
  }

需要新創一個雲函數(新建一個node.js雲函數

 

這些默認的結構都是可以刪掉的了

 

 之後就是參考 微信開放文檔 雲開發-》SDK文檔->數據庫-》collection->update-》示例代碼demo

其中:這個就是指定了數據庫的環境

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

然後就是在服務端拿到數據庫db

const db = cloud.database()

然後可以在示例代碼中看到async這個異步的操作

直接複製 try catch

try {
    return await db.collection('todos').where({
      done: false
    })
    .update({
      data: {
        progress: _.inc(10)
      },
    })
  } catch(e) {
    console.error(e)
  }

return就是返回一個異步的數據,而catch就是返回錯誤信息

主要修改的就是 db.collecion()中要反問那個數據庫表單,這裏不能寫死為users,因為可能其他的地方也是要用到更新的這個功能的

所以最好就是把update這個雲函數寫成一個通用的方式

其中雲函數入口函數 

exports.main = async (event, context) => {  這個裡面的event就是前端傳參過來的對象了 就訪問 event.colletion,然後不用where而是用doc 再把event的doc也傳進來,這 ***小知識點:ES6的擴展運算符 。。。 (三個點)

更新成功了之後,就可以返回結果到前台了

這個就是update雲函數中js文件的代碼(傳進去的doc實際上是用戶的_id

 // 雲函數入口文件
const cloud = require('wx-server-sdk')

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})
const db = cloud.database()
// 雲函數入口函數
exports.main = async (event, context) => {
  try {
    return await db.collection(event.collection).doc(event.doc)
      .update({
        data: {
         ...event.data 
        },
      })
  } catch (e) {
    console.error(e)
  }
}

View Code

把雲函數寫好之後,這個時候雲函數還是在本地,要把這個雲函數傳到雲開發平台上

 

上傳了之後一定要去雲平台-》雲函數中去檢查一下

 

之後就可以調用這個雲函數了

再回到index.js 點贊的方法 handleLinkes方法中進行設置即可;

 

 如果雲函數沒問題,可能是雲函數裏面定義的env出了問題,就可以寫死了,傳入自己的那個環境,就不用默認的那個環境了

【注意】修改了雲函數記得要重新上傳到雲平台才行

 

 

 

 (因為在服務端是不會受到數據庫權限的限制的)

後面要優化的就是(上面的點贊是寫死給多少links的,並且不能點完之後立馬更新

可以把數據庫的links讀出來,+1之後再寫入,但是這樣的話就多了一個數據庫的操縱了  ,但是數據庫本身就提供了累加或者累減等運算的操作的

(這樣的話就只需要一次的數據庫讀取即可了)

在開放文檔 db.command裏面就有很多的方法

https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/command/Command.inc.html

示例代碼
將一個 todo 的進度自增 10:

const _ = db.command
db.collection('todos').doc('todo-id').update({
  data: {
    progress: _.inc(10)
  }
})

為了在服務端不把運算給寫死了,一般都是把運算直接通過前端來傳入的

由於前端不認識下劃線這種操作,因為前端要先解析,之後再把東西傳到服務端的,所以就可以在前端給服務端傳一個字符串的話

然後再在服務端解析即可

 data : "{links : _.inc(1)}"

在前端把這個字符串傳入到服務端中,之後就可以在服務端那邊對這個字符串進行解析了

所以在update雲函數中 就要對event.data這個傳過來的數據進行判斷,判斷它的類型,是普通的還是字符串類型的,如果是字符串類型的話就要進行解析

用js裏面的eval方法,它是把字符串轉成 js 語句的

 if(typeof event.data == 'string'){
      event.data =  eval('(' + event.data + ')')
    }

即可了(點一下心心就可以讓點贊數+1)

後面有空的話,可以繼續進行優化,也就是對一次的點贊數進行限制,或者是點一下加+1,再點一下就是取消了就-1了

後面就是要把點贊了之後,實時的把點贊數進行更新

 

可以看到給服務端那邊上傳之後,對數據庫進行了更新之後,then返回的結果res,中有一個是updated==1,就可以進行if判斷了

再用for循環對列表中的每一個元素判斷,是不是現在被點擊點贊的這個id

let updated = res.result.stats.updated;
    if(updated){
      // 先用擴展運算符 克隆一份數組
      let cloneListData = [...this.data.listData];
      for(let i = 0;i < cloneListData.length ; i++){
        if( cloneListData[i]._id == id){ 
          cloneListData[i].links++;
        }
      }
      this.setData({
        listData : cloneListData
      });
    }

點贊數增加 就是通過_inc 但是在服務端中的update函數中是用全局的,不能寫死,所以運算的規則就通過前端傳過去

為了以後其他的頁面也有更新功能的話做準備了

 

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

【其他文章推薦】

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

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

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

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

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

※超省錢租車方案

Tesla Q1營收倍增,Model 3排定7月量產

美國電動車廠特斯拉(Tesla)公佈首季獲利不如預期,但好消息是眾所矚目的Model 3平價電動車,有望如期量產。

特斯拉當季營收27億美元,為去年同期營收11.5億美元的兩倍多,亦優於分析師預估的26.2億美元。(路透社)

儘管如此,特斯拉當季每股虧1.33美元,遠超過分析師預估每股虧0.81美元。特斯拉去年同期每股虧1.45美元。

特斯拉說Model 3開發進度順利,將可在今年7月導入量產。不過從虧損超出預期可知,這應該是特斯拉燒錢換來的成果。

另外,特斯拉執行長Elon Musk還憂心客戶對定價只有35,000美元的Model 3期待太高,而忘了Model 3是平價車種,性能與續航力均不能與售價70,000美元的Model S相提並論。

特斯拉首季共交車25,051部,較去年同期成長64%、較去年第四季成長13%,上半年47,000-50,000部的交車目標也有望達陣。

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

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

【其他文章推薦】

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

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

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

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

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

※超省錢租車方案