工信部:109款純電動車型進入第286批目錄 3款勒令停產

近日,工信部發佈《道路機動車輛生產企業及產品(第286批)》公告。據統計發現,約有109款純電動車型進入此批汽車生產企業目錄,其中專用車和運輸車佔據比例較高。第286批目錄對不符合管理規定的車企產品進行了公示,其中2家企業的3款純電動車型被勒令自公告發佈之日起暫停生產銷售。  
  其中,福建新龍馬汽車股份有限公司涉及的2款車型是FJ6410BEVA1純電動多用途乘用車和FJ6411BEVA1純電動多用途乘用車。資料顯示,FJ6410BEVA1純電動多用途乘用車的動力電池由河南鋰想動力科技有限公司生產,該公司並不在動力電池57家白名單之中。而FJ6411BEVA1純電動多用途乘用車的動力電池由廈門華鋰能源有限公司提供,廈門華鋰也不在動力電池57家白名單之中。   鄭州日產汽車有限公司生產的ZN6440V1Y純電動乘用車也被勒令停止生產銷售。資料顯示,該車型的動力電池由河南環宇賽爾新能源科技有限公司提供,而環宇賽爾在57家電池白名單之中。對於該款車型為何被停止生產銷售,目前不得而知。   文章來源:蓋世汽車

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

【其他文章推薦】

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

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

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

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

一、從零開始搭建自己的靜態博客 — 基礎篇

目錄

前幾天心血來潮,想要在GitHub Pages上搭建一個靜態博客;之前,我也曾基於Django開發過自己的博客,並買了雲主機部署,但是訪問量感人,慢慢自己也不打理了,就把雲主機退訂了(去吃噸好的~~~);

雖然搭建靜態博客很簡單,但是也想記錄一下,如果恰好能對你有所幫助或啟發,那我也覺的很開心了。

搭建靜態博客的工具多種多樣,即有流行的,也有GitHub Pages官方推薦的;其實,選用哪種工具不重要,關鍵是一步步的理解它,遇到問題、解決問題的思路和過程;

因為我本人對Python比較熟悉,所以我選用基於Python開發的,它基本滿足我的需求:

  • 支持markdown的格式;
  • 提供自動化構建;
  • 足夠的主題庫和插件庫,並且支持定製化;

本文主要涉及pelican的基本使用方法,最終在本地搭建一個簡陋的博客網站;

1. 準備環境

選定工作目錄,並使用創建一個虛擬環境:

λ mkdir pelican-blog
λ cd pelican-blog

# 創建基於 Python 3 的虛擬環境 
λ pipenv install --three

# 查看虛擬環境中的 Python 版本
λ pipenv run python --version
Python 3.7.3

在虛擬環境中安裝必要的包:

λ pipenv install Markdown pelican

# 查看包之間的依賴關係
λ pipenv graph
Markdown==3.1.1
  - setuptools [required: >=36, installed: 41.6.0]
pelican==4.2.0
  - blinker [required: Any, installed: 1.4]
  - docutils [required: Any, installed: 0.15.2]
  - feedgenerator [required: >=1.9, installed: 1.9]
    - pytz [required: >=0a, installed: 2019.3]
    - six [required: Any, installed: 1.13.0]
  - jinja2 [required: >=2.7, installed: 2.10.3]
    - MarkupSafe [required: >=0.23, installed: 1.1.1]
  - pygments [required: Any, installed: 2.4.2]
  - python-dateutil [required: Any, installed: 2.8.1]
    - six [required: >=1.5, installed: 1.13.0]
  - pytz [required: >=0a, installed: 2019.3]
  - six [required: >=1.4, installed: 1.13.0]
  - unidecode [required: Any, installed: 1.1.1]

2. 新建項目

pelican提供了一個命令行工具:pelican-quickstart,能夠讓我們快速地新建一個網站項目;

它在執行的過程中,會交互式的詢問一些配置項,如果你現在還不能確定的話,那就大膽的使用默認值吧,後面還可以在配置文件中修改;

命令執行完成后,它會在我們的項目中新建如下的目錄和文件:

.
├── content         # 目錄,存放原始博文和相關靜態文件
├── output          # 目錄,存放構建后的網站源碼
├── Makefile        
├── pelicanconf.py  # 構建相關的配置文件
├── publishconf.py  # 發布相關的配置文件
└── tasks.py

其中,content/目錄存放所有的markdown格式的文本,我們還可以再新建一個content/images/的子目錄,用於存放所有的圖片;

注意:

在自動構建的過程中,content/images/中的文件會被無損地拷貝到output/images/中,通過修改pelicanconf.py文件中STATIC_PATHS的配置項(默認值為['images'])可以改變這種行為;

3. 第一篇博文

現在我們在content/目錄下添加第一篇markdown格式的文章,就以本文為例;

pelican可以很“聰明”地從文章的元數據中提取需要的信息,所以我們以特定的格式編寫文章的開頭:

Title: 一、從零開始搭建自己的靜態博客 -- 基礎篇
Date: 2019-11-21 14:37
Modified: 2019-11-22 11:09
Category: 工具
Tags: pelican
Author: luizyao
Slug: pelican-blog-chapter-1
Summary: 本文簡要的介紹 pelican 的基本用法
Status: published

<開始正文>

注意:

  • 更多元數據以參考:;

  • 如果你使用VSCode作為你的日常開發工具,那麼我建議你使用插件為不同類型的文件自動生成頭信息模版;

4. 修改配置文件

在正式開始構建之前,我們需要完善一下配置文件pelicanconf.py

# pelicanconf.py

# 修改時區
TIMEZONE = 'Asia/Shanghai'

# 添加一個 GitHub 的“絲帶”鏈接
GITHUB_URL = 'https://github.com/luizyao'

# 修改社交賬號的展示
SOCIAL = (
    ('GitHub', 'https://github.com/luizyao'),
)

# 修改默認的時間格式('%a %d %B %Y')
DEFAULT_DATE_FORMAT = "%Y-%m-%d %H:%M"

# 為元數據定義默認值
DEFAULT_METADATA = {
    # 默認發布的文章都是草稿,除非在文章元數據中明確指定:Status: published
    'status': 'draft',
}

5. 本地構建和訪問

我們通過以下命令構建網站並自動適配文件的修改,通過訪問:

λ pipenv run pelican --autoreload --listen content/

注意:

  • 不要忘記把文章元數據中的Status: draft改成Status: published,不然我們是看不到這篇文章的;

  • pelican默認使用notmyidea這個主題來構建網站;你可以通過pelican-themes命令查看已安裝的主題:

    λ pipenv run pelican-themes --list
    notmyidea
    simple

    然後通過在pelicanconf.py中設定THEME = 'simple'或者構建時傳入-t 'simple'選項來使用主題simple,實際上和純文本差不多了;

6. markdown解析異常

  • 這是一個列表:

    if 1:
        print('這是一段python代碼')

這個時候,如果你訪問我們的網站,你會發現上面的markdown代碼被展示成下面的形式,根本就不是我們想要的縮進代碼塊的效果:

為什麼會這樣呢?我們又該如何解決這個問題?

6.1. Markdown包的實現機制

pelican使用包作為markdown文本的解釋器,這個包嚴格實現了語法,並提供一些擴展;

John Grubermarkdown語法的發明者,他在2004發布了第一個版本的markdown語法,這一版本的語法有着明顯的特點:

  • 不支持三個反引號('```')包裹代碼的寫法;
  • 不支持表格;
  • 定義了嚴格的嵌套縮進的格式,必須是4個空格;

雖然自從發布了第一版之後,就再也沒有更新過,但是現在流行的各種markdown語法都是基於它的擴展和補充,例如:、等;

注意:

雖然Markdown包嚴格實現了John Gruber’s Markdown語法,但是具體的實現還是有一些差別的,更多細節可以參考:

6.2. pelican默認使用的Markdown擴展

上一節中我們提到,Markdown包同樣提供一些擴展用於解析更多類型的語法,這些擴展又分為官方擴展和第三方擴展;

通過查閱pelican的源碼(或官方文檔),可以看到其默認使用了以下擴展:

# pelican/settings.py

'MARKDOWN': {
    'extension_configs': {
        'markdown.extensions.codehilite': {'css_class': 'highlight'},
        'markdown.extensions.extra': {},
        'markdown.extensions.meta': {},
    },
    'output_format': 'html5',
},

首先,我們看一下擴展:

它主要實現了大多數PHP Markdown的語法,是其它6個擴展的合集:

擴展 文檔 描述
Abbreviations
Attribute Lists
Definition Lists
Fenced Code Blocks 擴展了代碼塊的寫法
Footnotes
Tables 支持表格

我們重點看一下Fenced Code Blocks,因為它支持了我常用的三個反引號包裹代碼塊的寫法:

GitHub‘s backtick (“`) syntax is also supported:

# more python code

然後,我們再看一下擴展:

它基於包為我們提供了代碼的高亮显示,我們主要看一下它的一些可配置選項:

  • linenums:如果置為True,將會為代碼塊每行標上行號;
  • css_class:為<div>標籤加上class屬性,默認是codehilite;在這裏,pelican使用的是highlight;

最後,我們看一下:

它主要是pelican內部使用,還記得我們每個markdown文本的開頭都要有特定的格式嗎?就是通過這個擴展讀取的;感興趣的同學可以自己去看一下,這裏我們就不多說了;

6.3. 向第三方擴展尋求幫助

看到現在,我們也沒有找到想要的解決方案:對列表裡縮進嵌套反引號包裹的代碼塊,進行正確的渲染;

還好我們還有眾多的第三方擴展供我們使用:

我們找到一個的擴展貌似可以代替markdown.extensions.extra,來一起看一下吧:

它和markdown.extensions.extra大部分是一樣的,只是有以下不同:

  • 新包含了擴展:優化粗體和斜體的展示(不關心);
  • 新包含了擴展:增加了對原始HTML代碼的處理(不關心);
  • 使用擴展代替Fenced Code Blocks:加強版的markdown語法解析(看來正式我們想要的);

其實,看到SuperFences文檔的第一句話,我就知道妥了,嘻嘻;

Allowing the nesting of fences under blockquotes, lists, or other block elements (see Limitations for more info).

文檔的內容很豐富,我們就不再這裏一一解釋了,有興趣的同學可以自己去看一看,說不定有什麼意外的收穫呢!!!

6.4. 解決問題

現在,我們來實際解決這個問題:

  1. 安裝必要的包:

    λ pipenv install pymdown-extensions
  2. 修改pelicanconf.py文件中MARKDOWN的默認配置:

    # 使用第三方擴展來增強對 markdown 語言的解析,但是首先要安裝 pymdown-extensions 模塊
    MARKDOWN = {
        'extension_configs': {
            'markdown.extensions.codehilite': {'css_class': 'highlight'},
            'pymdownx.extra': {},
            'markdown.extensions.meta': {},
        },
        'output_format': 'html5',
    }

7. One more thing

我在瀏覽SuperFences文檔時,發現一個很有意思的章節:;

它推薦了代替markdown.extensions.codehilite,那我們就來看看這到底是個什麼鬼?

在它的文檔中有一句話大概能說明兩者的關係:

The Highlight extension is inspired by CodeHilite, but differs in features. PyMdown Extensions chooses not to implement special language headers for standard Markdown code blocks like CodeHilite does; PyMdown Extensions takes the position that language headers are better suited in fenced code blocks.

更多實現上的細節,我們不再去深究,主要看看我們可以用來干什麼?

比如,為代碼塊每行加上行號:

咦?markdown.extensions.codehilite也可以啊,它不是也有一個linenums的選項嗎?置成True不就行了;

說的對,不過丑。

一般情況下,為代碼塊添加行號有兩種樣式:

  • table:默認的樣式,創建一個表,第一列是行號;
  • inline:在每行代碼的開頭,但是複製代碼會把行號一起複制,不方便;

不過,pymdownx.highlight提供了第三種樣式:pymdownx-inline,它和inline很像,只是複製時不會加上行號,因為實際上把行號元素渲染成下面這樣:

<span class="lineno" data-linenos="1 "></span>

然後,我們通過以下的CSS樣式去“激活”它:

[data-linenos]:before {
  content: attr(data-linenos);
}

下面,我們來將它具體的應用到我們的項目中吧:

首先,修改pelicanconf.py文件中MARKDOWN的默認配置:

# 使用第三方擴展來增強對 markdown 語言的解析,但是首先要安裝 pymdown-extensions 模塊
MARKDOWN = {
    'extension_configs': {
        'pymdownx.highlight': {
            'css_class': 'highlight',
            'linenums': True,
            'linenums_style': 'pymdownx-inline',
        },
        'pymdownx.extra': {},
        'markdown.extensions.meta': {},
    },
    'output_format': 'html5',
}

然後,在output/theme/css/main.css文件的末尾加上下面這段代碼:

[data-linenos]:before {
  content: attr(data-linenos);
}

最後重啟下服務,就能看到效果了:

注意:

這裡有個問題,如果我們重新執行構建命令,output/theme/css/main.css文件又會被覆蓋成原先的內容,我們這個效果就看不到了;

不過這並不是我們最終的方案,所以我們也不在這裏繼續深究了。

GitHub:

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

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

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

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

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

江淮和大眾“密謀”新能源偉業?

據相關資料顯示,今年新能源汽車市場持續旺銷。有知情人士表示,江淮汽車近期一直在跟大眾汽車“親密接觸”,雙方商談的重點專案則是新能源車。  
 
下一輛上市新車是iEV6E   在純電動車領域,江淮汽車已開發了兩代產品平臺共七代產品,目前在售的純電動乘用車有iEV4和iEV5、iEV6S等三款車型。 今年江淮有兩款純電動車型上市,SUV車型iEV6S在今年4月份北京車展推向市場,下一款新車將是小型電動汽車iEV6E。有消息稱,該車將在9月份上市,但江淮乘用車行銷公司新能源行銷部部長雷兵表示,目前還沒有確定該車的上市具體時間。  
與大眾汽車親密接觸中   目前江淮汽車已經與蔚來汽車達成戰略合作協定,雙方將在電動汽車領域進行全面戰略合作,整體合作規模將達到100億元。而與大眾汽車的“緋聞”,江淮汽車始終沒有正式回應。雙方從去年廣州車展開始接觸,12月初大眾汽車集團總裁兼CEO海茲曼對媒體公開表示,雙方進行了“初步的瞭解”,而大眾全球高管也已經造訪了江淮汽車。據知情人士表示,江淮汽車近期跟大眾汽車接觸頻繁,雙方商談的重點專案則是新能源汽車,至於會不會像比亞迪、戴姆勒的合作那樣,成立一個新的合資公司,推出獨立的新能源汽車品牌,目前則無法預判。   文章來源:南方都市報

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

【其他文章推薦】

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

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

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

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

南都電源出資3千萬增資孔輝汽車 佈局新能源汽車產業鏈

南都電源週一晚間發佈公告稱,為促進公司在新能源汽車領域的相關產業發展,公司擬使用自有資金以現金方式出資人民幣3,000.03萬元增資參股長春孔輝汽車科技股份有限公司,其中272.73萬元認繳孔輝汽車新增的註冊資本,2727.30萬元作為孔輝汽車的資本公積。增資完成後,公司將持有孔輝汽車17.07%的股權比例。  
  南都電源表示,孔輝汽車主營汽車電子控制系統研製與銷售、汽車整車及部件的試驗測試等業務。此次增資會增強公司在新能源汽車系統集成領域的能力,從而為公司向新能源汽車產業鏈的發展奠定相關的基礎。   文章來源:全景網

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

【其他文章推薦】

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

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

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

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

工信部:電動汽車電池管理系統標準正在編制修訂

近日,參加電動汽車百人會論壇的中國汽車工業協會常務副會長董揚表示,電動車續航里程在400公里是一道檻。國內對動力電池,一直存在著磷酸鐵鋰電池和三元材料電池路線之爭,爭論的核心其實是,將續航里程還是安全性放在第一,或者兩者有沒有更好的結合點。目前對於如何選擇電動車技術路線存在多方爭論,但是還要看市場發展狀況和需求。  
  據工信部資料統計,自2009以來,中國新能源汽車安全事故共31例,其中2015年以來發生17起,在這17起事故中有4起是電池系統的事故、有6起是相關部件的事故、有2起是充電系統缺陷引起的,當然還有5起是違規改裝或者不當使用引起的。截至2015年底,事故率達到0.17‰,高出世界平均水準。   工業和資訊化部裝備工業司司長李東表示:「國家已經組織制定了電動汽車遠端監控標準,並且電動客車安全條件即將發佈實施。電池管理系統技術條件、動力電池的編碼、規格尺寸等標準正在編制、修訂,並且也要儘快出臺。與此同時,正在組織修訂新能源汽車生產企業和產品准入規則,擬大幅度提高企業的研發能力和生產條件要求,提高性能和安全的要求。」   文章來源:證券時報

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

【其他文章推薦】

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

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

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

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

電動車餅擴大,電池材料需擴產?

不讓特斯拉專美於前,歐美傳統車廠近2年積極推出純電動車車款,搶攻未來燃油車退場後的新車市商機,而在此一商機之下,市場對於鋰電池需求當然將有顯著增加,對台廠的電池材料廠商而言,受惠程度又是如何?今年是否有商機?

電動車的餅有多大?

傳統歐美車廠積極布局純電動車市場,福斯集團從Audi到VW兼具高價至平價車款,更有一長串ID系列車款等待登場,計畫至2028年將推出逾70款電動車;福特汽車計畫今年要讓銷售的汽車25%都是純電動與混合動力車,並預告在未來所有主流車款都將擁有電動車版本,2022年前要有40款混合動力車,其中16款為純電動車。

通用(GM)汽車也宣布計畫將旗下悍馬車品牌通過電動皮卡與電動車版本展開「復興」,預計將與韓國鋰電池大廠LG在美國展開電池組建廠計畫;而更不止歐美車廠對純電動車有野心與布局,剛落幕的美國CES展上,Sony一台電動車概念車也是目光焦點,不難想見,未來這塊市場前景發展將會更為蓬勃。

即使先不談歐美車廠待推出的電動車款,不願放過中國車市這塊大餅的特斯拉,上海廠進度也優於市場預期,未來無論是在歐美車款的數量爆發,還是即將登場的上海特斯拉廠,對電池材料的台廠,是否有可期待的商機?

中碳:短期拓展應用端,車市需長久看待

中碳布局介相石墨碳微球產品多年,由於石墨球具有高效率、高密度、高放電能力與循環壽命佳等優點,是電動車、儲能用鋰電池關鍵負極材料;2019年6月中碳的屏南廠與小港新線開始投產,拉高中碳介相碳微球年產能來到7,500噸。

針對電池材料市況上,中碳表示,中國近期電動汽車狀況仍不容樂觀,預期今年中國電動車供應鏈還是會有壓力,目前中碳評估中國客戶出貨狀況應該與去年相當;長線中碳認同電動車仍會是大勢所趨,但也評估消費者還需時間接受電動車產品。

近期在產能去化上,中碳也積極布局電動車以外應用,在儲能領域方面,中碳則評估近期正在針對日、韓客戶展開認證,韓國已有1家完成簽約,日本則有3家客戶在進行,其中包括有日本營造業廠商,因為日本法規要求建案當中需要有儲能設備因應天災,因此促使中碳與客戶牽上線,現階段已在測試,另外也有1家大廠11月即在測試,近期應該就會出貨。

至於上海特斯拉廠方面,中碳指出,就特斯拉既往與Panasonic的合作來看,考量到系統需求,電池材料的供應上不可能有大幅調整,避免影響到整體電力系統穩定度,且過往材料供應端就包含有中、韓廠商,估計會維持由既有廠商出貨。

美琪瑪:去年擴產已相對充分,短期無計畫

針對能否切入上海特斯拉廠供應鏈,美琪瑪表示公司電池材料客戶以日系廠商為主,但美琪瑪指出硫酸鈷、硫酸鎳為極為上游的材料,主要是出往前驅體製造商,後續客戶產品銷至哪一間鋰電池製造商,又與哪間車廠合作,追蹤較為困難。

而美琪瑪也評估,就未來全球市場上,需要鋰電池驅動的電動車車款還是持續增加,長線市況仍屬樂觀,而去年也已經因應需求擴充硫酸鎳產能3成,並且完成客戶認證,應可滿足近期客戶需求,短期評估不會擴產,不過後續如果有急單需求,也可緊急擴產因應,擴產所需時間與資本支出都不會太高;目前美琪瑪旗下美戶硫酸鎳年產能來到26,000噸、硫酸鈷約4,000噸。

(本文內容由 授權使用。首圖來源:)

 

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

【其他文章推薦】

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

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

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

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

電動車前景看好,中國印度發展空間大

國際能源署(International Energy Agency)發佈報告指出,電動車市場規模從無擴展到200萬輛,僅花了五年時間達成,反映電動車爆發力之強大。

報告指出,即便全球去年電動車註冊上路數量跳增60%,但電動車也只占整體輕型車輛總數的0.2%,這意謂著電動車還有極大發展空間。

中國目前是全球最大電動車市場,去年有超過四成的電動車賣到中國,是美國的兩倍多,IEA說這明顯是環保政策所造成。

談到政策,全球人口第二多的印度為積極響應「巴黎氣候協議」,並同時對抗空氣污染,近期剛出台的新政策設定2030年後,印度國內將只准賣電動車,這對其它國家而言,幾乎是不可能的任務。

美國電動車廠特斯拉已注意到印度市場潛力,其創辦人馬斯克(Elon Musk)在政策發佈後,大力讚揚印度政府對環保產業的支持。另一方面,對於川普不顧民意毀棄巴黎協議,馬斯克也以退出政策顧問團表示抗議。

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

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

【其他文章推薦】

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

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

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

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

實現websocket 主動消息推送,用laravel+Swoole

近來有個需求:想實現一個可以主動觸發消息推送的功能,這個可以實現向模板消息那個,給予所有成員發送自定義消息,而不需要通過客戶端發送消息,服務端上message中監聽傳送的消息進行做相對於的業務邏輯。

主動消息推送實現
平常我們採用 swoole 來寫 WebSocket 服務可能最多的用到的是open,message,close這三個監聽狀態,但是萬萬沒有看下下面的onRequest回調的使用,沒錯,解決這次主動消息推送的就是需要用onRequest回調。
官方文檔:正因為swoole_websocket_server繼承自swoole_http_server,所以在 websocket 中有onRequest回調。

詳細實現:

 1 # 這裡是一個laravel中Commands
 2 # 運行php artisan swoole start 即可運行
 3 <?php
 4 
 5 namespace App\Console\Commands;
 6 
 7 use Illuminate\Console\Command;
 8 use swoole_websocket_server;
 9 
10 class Swoole extends Command
11 {
12     public $ws;
13     /**
14      * The name and signature of the console command.
15      *
16      * @var string
17      */
18     protected $signature = 'swoole {action}';
19 
20     /**
21      * The console command description.
22      *
23      * @var string
24      */
25     protected $description = 'Active Push Message';
26 
27     /**
28      * Create a new command instance.
29      *
30      * @return void
31      */
32     public function __construct()
33     {
34         parent::__construct();
35     }
36 
37     /**
38      * Execute the console command.
39      *
40      * @return mixed
41      */
42     public function handle()
43     {
44         $arg = $this->argument('action');
45         switch ($arg) {
46             case 'start':
47                 $this->info('swoole server started');
48                 $this->start();
49                 break;
50             case 'stop':
51                 $this->info('swoole server stoped');
52                 break;
53             case 'restart':
54                 $this->info('swoole server restarted');
55                 break;
56         }
57     }
58 
59     /**
60      * 啟動Swoole
61      */
62     private function start()
63     {
64         $this->ws = new swoole_websocket_server("0.0.0.0", 9502);
65         //監聽WebSocket連接打開事件
66         $this->ws->on('open', function ($ws, $request) {
67         });
68         //監聽WebSocket消息事件
69         $this->ws->on('message', function ($ws, $frame) {
70             $this->info("client is SendMessage\n");
71         });
72         //監聽WebSocket主動推送消息事件
73         $this->ws->on('request', function ($request, $response) {
74             $scene = $request->post['scene'];       // 獲取值
75             $this->info("client is PushMessage\n".$scene);
76         });
77         //監聽WebSocket連接關閉事件
78         $this->ws->on('close', function ($ws, $fd) {
79             $this->info("client is close\n");
80         });
81         $this->ws->start();
82     }
83 }

 

前面說的是 swoole 中onRequest的實現,下面實現下在控制器中主動觸發onRequest回調。實現方法就是我們熟悉的curl請求。

 1 # 調用activepush方法以後,會在cmd中打印出 
 2 # client is PushMessage 主動推送消息 字眼
 3     /**
 4      * CURL請求
 5      * @param $data
 6      */
 7     public function curl($data)
 8     {
 9         $curl = curl_init();
10         curl_setopt($curl, CURLOPT_URL, "http://127.0.0.1:9502");
11         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
12         curl_setopt($curl, CURLOPT_HEADER, 1);
13         curl_setopt($curl, CURLOPT_POST, 1);
14         curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
15         curl_exec($curl);
16         curl_close($curl);
17     }
18     
19     /**
20      * 主動觸發
21      */
22     public function activepush()
23     {
24         $param['scene'] = '主動推送消息';
25         $this->curl($param);            // 主動推送消息

 

用途
onRequest 回調特別適用於需要在控制器中調用的推送消息,比如模板消息之類,在控制器中調用。

 

推薦閱讀:

 

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

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

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

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

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

荷蘭團隊要打造世界第一台以甲酸為燃料巴士

隨著環保意識提升,再生能源的利用逐漸受到各國重視,荷蘭一群學生就開發出一種儲存能源的方法,不僅簡單製造、可用性高也更持久,他們打算利用這項技術來打造第一台使用甲酸(Formic acid)做為燃料的巴士。  
用甲酸做燃料的巴士   甲酸,又被稱做蟻酸,是螞蟻及蚊蟲在叮咬中傳播的物質,化學式為HCOOH,這種簡單的羧酸已經被使用在紡織和皮革加工作業中,也可以用來做為家畜飼料的防腐劑,或是添加在家用的水垢去除劑。

 

(Source:Flickr/Brian Gratwicke CC BY 2.0)   而由荷蘭恩荷芬理工大學(TU/e)多學科學生團隊組成的新創公司Team FAST  找到了一種方法,讓甲酸能夠有效攜帶氫燃料電池必需的成分,為電動車提供電力。   BBC 報導,Team FAST 計畫打造的巴士主要燃料叫做Hydrozine(並不是聯氨Hydrazine),由99% 的甲酸組成,呈現液體型態,能夠輕易的傳送運輸,因此在車輛上也能夠快速的進行「加油」,就像是目前一般使用的燃料一樣。   但和現今的燃料不同的是,Hydrozine 更環保。   Team FAST 的發言人Lucas van Cappellen 表示,使用這種燃料,車輛排放的尾氣中只會有二氧化碳和水,不會具有其他有害氣體,像是一氧化氮、煤煙或硫氧化物。   為了證明這個概念可行,Team FAST 目前正和VDL 集團合作,打造第一台甲酸燃料巴士,預計2017 下半年間將在荷蘭登場,除了在展覽中亮相以外,巴士也會在一般道路上行駛。   這台巴士將透過VDL 開發的電力系統驅動,並且能夠透過托掛在後方拖車上的甲酸燃料電池系統接收額外的電力。   根據van Cappellen 透露,目前的燃料箱大約是300 公升,因此這台電動巴士的續航力大約是200 公里,但未來要再把燃料箱加大也是非常簡單的。   但為什麼要一開始就從巴士下手,而不是選擇一般車輛呢?   van Cappellen 解釋,因為團隊覺得電動車已經是一個很好的解決方案,如果選擇從一般車輛入手,Hydrozine 將會面對和電動車競爭的問題。   「但相反來看,如果我們能夠建造一台滿足巴士公司需求的巴士,續航力達到400 公里左右,也能夠快速補充燃料,我們就能在還沒有競爭對手的領域中,展現出Hydrozine 的潛力。」  
商業化的可行性   根據Team FAST 官網和van Cappellen 的說明,團隊先是將溶於水的氫氣和二氧化碳運用催化劑合併為甲酸製成Hydrozine,之後再透過催化劑在「reformer」的裝置中分解為氫氣和二氧化碳,將氫氣加到燃料電池中與氧氣反應,產生電力供巴士使用。  

(Source:Team FAST)   Team FAST 目前正在為「reformer」申請專利中,新設計的「reformer」體積只有過去的十分之一,這可能也是Hydrozine 首次能夠被運用在交通運輸上的原因。   負責交通解決方案的VDL ETS 總經理Menno Kleingeld 表示,VDL 一直在尋找新技術,能夠透過簡單方式拓展零排放交通的範圍,「將甲酸分解為氫氣就是一項很有希望的新技術」。   van Cappellen 估計,將一般加油站轉換為Hydrozine 補充站的整體費用大概是3.5 萬歐元(約120 萬元台幣),比起直接架設會便宜許多,而且Hydrozine 比汽油更加便宜,預計未來價格還會持續下降,因此他認為商業化是可行的。   除此之外,Team FAST 認為,雖然這樣的巴士也會排放二氧化碳,但製造Hydrozine 的原料之一就是二氧化碳,是由現有的來源收集而來,因此並沒有額外的碳產生,因此能夠達到環保概念中所謂的「碳循環」效果。   荷蘭一些專家和企業都看好並支持這個計畫,研究的學生也都非常投入在其中,除了15 位全心投入計畫的人員外,其他學生每周也都投入20~25 小時在計畫中研究。   van Cappellen 表示,儘管他們不能從中獲得學分,但能從大學中獲得的實際經驗大概就只有那麼一些,「我們正在建造自己的未來」。   (合作媒體:。首途來源:pixabay;圖片出處:TechNews)  

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

【其他文章推薦】

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

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

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

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

貪心算法(會場安排問題、區間選點)

學習算法課程之後的第一次記錄,漸漸的,程序設計考慮的因素增多,程序=數據結構+算法,這個等式讓我深有體會。從開始簡單的C++編程,再到選擇合適數據結構,現在需要更進一步,從算法層次上考慮程序執行的效率。我對算法的理解是用更少的開銷獲得更優的執行效果。

分治法、動態規劃在此之前沒有記錄下來,學到貪心算法的時候,覺得需要總結一下學過的東西,也能更好的理解。動態規劃的設計,要滿足最優子結構性質和重疊子問題,採用自底向上的策略,計算出最優值,找到整體最優解。這個過程有時候挺難的,主要在寫出遞歸式,要自底向上填表。貪心策略有點像動態規劃,但在一些方面是不同的,有時候貪心算法的思想更容易想到。它要滿足子問題最優而得到整體最優?兩個條件:最優子結構性質和貪心選擇性質。滿足貪心選擇性質一定滿足最優子結構性質,而滿足最優子結構性質不一定滿足貪心選擇性質,比如背包問題可以用貪心算法解決,而0-1背包問題只能用動態規劃。

典型的貪心問題活動安排,有n個活動,給出開始時間和結束時間,要盡可能安排多的活動(時間互相不衝突)。解決這個問題正確的貪心思想是以每個活動結束時間為比較變量,按結束時間升序排好活動次序,接着就進行比較選擇。而會場安排問題與活動又有些不同之處,下面是我的解題過程。

7-2 會場安排問題 (20 分)

假設要在足夠多的會場里安排一批活動,並希望使用盡可能少的會場。設計一個有效的 貪心算法進行安排。(這個問題實際上是著名的圖着色問題。若將每一個活動作為圖的一個 頂點,不相容活動間用邊相連。使相鄰頂點着有不同顏色的最小着色數,相應於要找的最小 會場數。)

輸入格式:

第一行有 1 個正整數k,表示有 k個待安排的活動。 接下來的 k行中,每行有 2個正整數,分別表示 k個待安排的活動開始時間和結束時間。時間 以 0 點開始的分鐘計。

輸出格式:

輸出最少會場數。

輸入樣例:

5
1 23
12 28
25 35
27 80
36 50 

輸出樣例:

3
#include<iostream>
#include<algorithm>
using namespace std;
struct node {
    int begin;
    int end;
    int flag;//標記該活動是否被安排,0表示未安排,1表示已安排 
}t[10001];
int cmp(const node &a,const node &b)//比較規則:以結束時間升序排列 
{ 
    return a.end<b.end;
 } 
int main()
{
    int i,j,n;
    node temp;
    cin>>n;
    for(i=0;i<n;i++) 
    {
        cin>>t[i].begin>>t[i].end;
        t[i].flag=0;
    }
    sort(t,t+n,cmp);
        
    int sum=0;//總共需要的會場數量 

    for(i=0;i<n;i++)//方法2 
    {
        if(!t[i].flag)//找到未安排的活動,進行場地安排 
        {
            sum++;
            int p=i;
            for(j=p+1;j<n;j++)//當前活動結束時間與下一個活動開始不相交 ,則安排到同一個會場 
            {
                if(t[p].end<=t[j].begin&&!t[j].flag)
                {
                    p=j;t[j].flag=1;
                }
            }
            t[i].flag=1;
        }
    }

    cout<<sum;
    return 0;
}

View Code

貪心策略為:把盡可能多的時間互不衝突的活動安排到一個會場,若活動時間交叉,則在安排到另一個會場。

將所有活動按結束時間升序排列,利用sort函數,自定義cmp方法。循環體中,每次可以找到還沒有安排的活動,並以這個活動搜索能同時容納到一個會場的其他活動(這一步嵌套在內層循環中),經過兩層循環,把所有活動全部安排好,這時也已經計算出需要的會場數量sum。

類似的問題是區間選點

7-10 選點問題 (15 分)  數軸上有n個閉區間[ai, bi]。取盡量少的點,使得每個區間內都至少有一個點(不同區間內含的點可以是同一個)。

輸入格式:

第一行一個数字n,表示有n個閉區間。 下面n行,每行包含2個数字,表示閉區間[ai, bi]

輸出格式:

一個整數,表示至少需要幾個點

輸入樣例:

在這裏給出一組輸入。例如:

3
1 3
2 4
5 6

輸出樣例:

在這裏給出相應的輸出。例如:2

開始想找出幾個區間共同段,並且記錄每個共同段中包含哪些區間,這樣算出最少選點。後來發現覺得這個想法其實可以簡化一下,策略為:以右端為擋板,看看前面是否包含其他區間,如果是,則不記數,反之,說明沒有共同段,需要計數並且移動擋板位置繼續尋找。貪心策略是選擇區間右端點,保證能夠包含更大交叉段,選的點最少。

#include<bits/stdc++.h>
using namespace std;
struct dot{
    int l,r;
    bool v[10001];
}dots[10001];

int cmp(const dot &a,const dot &b)//比較規則,按區間右端點升序排列 
{
    return a.r<b.r;
} 

int main()
{
    int n,i,j,count=1,select;
    cin>>n;
    for(i=0;i<n;i++)
        cin>>dots[i].l>>dots[i].r;
    sort(dots,dots+n,cmp);//預處理,將區間按規則排好序,方便後續比較 
    select=dots[0].r;
    //貪心策略是選擇區間右端點,保證能夠包含更大交叉段,選的點最少 
    for(i=1;i<n;i++)//每次將當前選擇的一個區間的右端點與下一個(或者同一區間,可忽略)左端比較 
    {
        if(dots[i].l>select)//如果沒有交叉,選點+1,並以此區間右端為新一輪比較的點 
        {
            count++;
            select=dots[i].r;
        }
    }
    cout<<count;
    return 0;
}

View Code

學習算法之後,發現解決問題上需要思維上的改變,程序設計之前的算法選擇很重要,還要向大佬們學習,典型算法的學習研究真是博大精深呀!

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

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

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

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

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