延燒八個月 澳洲新南威爾斯省野火終於撲滅

摘錄自2020年3月10日大紀元報導

澳洲新南威爾斯省日前正式宣布,當地延燒了大約八個月、造成無數損失的野火,終於完全撲滅了。據CNN報導,新南威爾斯省的消防部門在2月13日宣布,該省所有野火已經受到控制。而現在,所有野火都已經被撲滅。

新南威爾斯鄉村消防署(NSW Rural FIre Service)在3月2日發推文說:「目前沒有在延燒中的野火。這是自2019年7月初以來的第一次。」該署還提到,這場野火持續了超過240天。這場延燒了幾個月的野火最終導致至少28人死亡,大約3,000棟房屋被毀,多達10億隻動物受到波及。

現在,在澳洲政府正式宣布野火被撲滅之後,該國將開始其災後重建的工作,他們正在討論是否應該針對高風險的地區制定重建的限制。而對於在何處和如何重建房屋而言,屋主正面臨困難的選擇。

森林
災害
生態保育
土地水文
國際新聞
澳洲
大火
澳洲野火

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

【其他文章推薦】

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

※評比前十大台北網頁設計台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

台灣海運大陸貨務運送流程

兩岸物流進出口一站式服務

桃園綠能績效佳,電動車補助高、寺廟積極認購綠電

桃園市近兩年來大力推行各項綠能政策,已小有所成。目前,全市有2.7萬輛電動機車,穩坐台灣六都第一;全台今年綠電認購大戶前兩名,也都是位於桃園的寺廟。

桃園市環保局統計,桃園市目前有2.7萬輛電動機車,相當於每年減排7,452公噸的二氧化碳以及4,023公斤的PM2.5,同時種植65萬棵樹木。目前全桃園市有超過110萬輛機車,電動機車比例僅有2.42%,桃園市今年繼續提供新購電動機車新台幣1.5萬元,加上經濟部工業局的1萬元補助,最高補助金達2.5萬,希望能繼續推動民眾替換機車,進一步提高減碳量。

同時,騎乘電動機車滿三年者,環保局推出更換鋰電池最高新台幣4,000元補助,而合法立案場所設置充電站最高也可享有1萬元補助。環保局還開發手機APP,結合GPS定位系統,幫助使用者快速找到充電站,加強民眾改用電動車的意願。

神明也愛綠電,成全台認購最大手

今年台灣綠電認購量最高的單位,是位於桃園的慈護宮,認購30萬度電;第二名則是桃園中壢仁海宮,認購10萬度電。慈護宮主委劉新發表示,廟宇是台灣民眾生活中心,加上有24小時全年不滅的「光明燈」,用電需求量大,因此除了改用更省電的LED燈之外,也積極參與認購綠電,為環保盡一份心力。

目前台電提出的綠電認購附加費率為每度電新台幣1.06元,最低綠電認購門檻為100度;只要認購最低單位的綠電,就等同於多種五棵樹。

除了寺廟之外,桃園地區也有長榮航空、東龍興業、萬海航運、科德寶遠東等企業加入認購綠電,總認購度數超過百萬度。

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

【其他文章推薦】

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

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

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

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

※專營大陸快遞台灣服務

台灣快遞大陸的貨運公司有哪些呢?

特斯拉將在蘇州成立生產基地?

作為全球最具潛力的電動車市場之一,特斯拉(Tesla)也持續傳出有在中國設置本土化生產基地的消息。日前中國流出一份文件,內容是關於蘇州召開會議討論特斯拉汽車項目入主蘇州的相關事宜,似乎代表特斯拉已選定了地點。

根據中國網路媒體《第一電動網》所獲得的資訊,蘇州相關政府部門於3月13日召開專題會議,研究協調特斯拉的汽車生產工廠成立相關事宜。通知內容如下:

經研究,市委副書記、常務副市長周偉強定於3月13日(星期天)上午9:00,在市政府1號會議室召開專題會議,研究協調特斯拉汽車項目落戶蘇州的相關事宜。會議主要有三項議程:一是請商務局通報該項目整體情況;二是請各有關地區匯報爭取該項目落地的相關意見和措施(如土地供應等方面,書面材料請帶5份至會);三是市各有關部門就推進該項目提出有關建議(項目情況見附件)。

請各地政府(管委會)、各有關部門主要領導或分管領導準時參會(可攜帶具體業務負責同志),特此通知。

據了解,特斯拉高層於3月17、18日拜訪蘇州進行實地考察,但《第一電動網》對此事進行深入訪談,包括蘇州商務局等相關人士均沒有正面回應。特斯拉近來一直被傳言將在中國尋找合資夥伴並設立工廠,也有許多中國公司主動表達合作意願,不過特斯拉對於在中國設廠一事一直沒有明確的回答。

台灣特斯拉汽車公司日前正式登記成案,特斯拉在中國的動向也值得關切。

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

【其他文章推薦】

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

※評比前十大台北網頁設計台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

台灣海運大陸貨務運送流程

兩岸物流進出口一站式服務

麥格納攜手格特拉克將亮相第六屆中國國際新能源汽車論壇2016

由希邁商務諮詢(上海)有限公司主辦的2016年第六屆中國國際新能源汽車論壇即將於4月20日-4月22日在上海隆重舉行。此次論壇獲得了亞太電動車學會、中國國家新能源機動車產品品質監督檢驗中心、上海交大密西根學院、賽迪顧問及中國綠色能源產業技術創新戰略聯盟的大力支持。截止3月14日,論壇已經確認40位演講嘉賓出席本次論壇並做高品質學術演講。演講嘉賓分別來自菲律賓電動車協會、國家新能源機動車產品品質監督檢驗中心、美國國家能源局、中國工程院等在內的政府單位與研究機構,以及包括寶馬、通用汽車、特斯拉、長安汽車、宇通客車、奇瑞、比亞迪戴姆勒、上汽、北汽、觀致等在內的多個知名整車商,將在論壇上共同研討新能源汽車行業政策趨勢、技術路線及難點、基礎設施建設、商業模式,延續以往的豐碩成果,繼續為新能源汽車行業作出貢獻。

作為全球首屈一指的汽車零部件供應商,麥格納旗下動力總成事業部此次將攜手格特拉克成為本屆論壇的鉑金贊助商,不僅會分享電子驅動和混合驅動控制及新能源汽車熱管理研究的技術報告,還將同期展示新能源汽車領域的前沿產品。麥格納動力總成是全球領先的汽車動力總成系統供應商,集傳動系統設計、研發、試驗和製造能力為一體,以世界級的製造水準不斷實現產品和工藝的創新,為國內外客戶傳遞卓越價值。

本屆論壇相比歷屆舉辦規模最大的第六屆新能源汽車論壇,涉及主論壇及三個分論壇、考察活動、頒獎典禮和交流晚宴。屆時將誠邀全球範圍內的整車製造商、電網電力公司、電池廠商、零部件供應商、核心技術提供商和政府官員近500位行業人士一起,對新能源汽車產業面臨的挑戰,機遇與對策各方面進行為期三天更深層次並具有建設和戰略性的探討。

如需更多詳情,請諮詢:
大會連絡人:Hill ZENG(曾先生)
聯繫電話:0086 21-6045 1760 或郵箱
我們期待與貴單位一起出席於2016年4月20-22日在上海舉辦的第六屆中國國際新能源汽車論壇2016,以利決策!

 

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

【其他文章推薦】

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

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

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

大陸寄台灣空運注意事項

大陸海運台灣交貨時間多久?

※避免吃悶虧無故遭抬價!台中搬家公司免費估價,有契約讓您安心有保障!

一個類GraphQL的ORM數據訪問框架發布

Zongsoft.Data 發布公告

很高興我們的 ORM 數據訪問框架()在歷經兩個 SaaS 產品的應用之後,今天正式宣布對外推廣!
這是一個類  風格的 ORM(Object/Relational Mapping) 數據訪問框架。

又一個輪子?

在很長時間里,.NET 陣營似乎一直缺乏一個被普遍使用的 ORM 數據訪問框架,從最早的原生 ADO.NET 到舶來品 iBatis.NETHibernate.NET,後來又經歷了 Linq for SQL 與 Entity Framework 的混戰,可能是因為 Entity Framework 早期版本的模糊定位和反覆變更的設計導致了它失之霸主之位,進而造就了一段百舸爭流、群雄共逐的戰國時代。在歷經漫長而反覆的期待、失望、糾結和痛苦之後,我終於決定動手造一個輪子。

設計理念

在開始動手之前,先確定以下基本設計原則:

  • 數據庫優先(Database First)
  • 嚴格的 POCO/POJO 支持
  • 映射模型與代碼完全隔離
  • 禁止業務層出現 SQL 和類 SQL 代碼

在一個業務系統中,數據結構及其關係毋庸置疑是最底層的基礎性結構,數據庫應由系統架構師或開發負責人進行仔細設計 No Schema/Weakly Schema 的思潮是塗抹了蜂蜜的毒藥),數據訪問映射以數據庫表結構關係為基石,在此之上業務層亦以概念映射模型為準繩,層級之間相互隔離。

領域模型實體避免通過註解 (標籤) 來進行元數據定義,應確保嚴格符合 POCO/POJO 範式。通過語義化的 Schema 來聲明訪問的數據結構關係,禁止應用層的 SQLLinq 式的類 SQL 代碼可降低業務層對數據層的依賴、提升代碼可維護性外,還具備更加統一可控的便利性,併為數據訪問引擎的實現提供了更大的優化空間和自由度。

範例說明

下面通過三個的例子 (注:例子均基於 項目) 來佐證上面的部分設計理念,更多示例和闡述請參考  項目的  文檔和  項目的代碼。

提示: 下面的範例均基於 開源項目,該項目是一個完整的論壇社區的後台程序。你可能需要預先閱讀一下該項目的文檔,以便更好的理解範例代碼的業務邏輯。

示例一

導航查詢及導航過濾

var forums = this.DataAccess.Select<Forum>(
    Condition.Equal("SiteId", this.User.SiteId) &
    Condition.In("Visibility", Visibility.Internal, Visibility.Public) |
    (
        Condition.Equal("Visibility", Visibility.Specified) &
        Condition.Exists("Users",
                  Condition.Equal("UserId", this.User.UserId) &
                  (
                      Condition.Equal("IsModerator", true) |
                      Condition.NotEqual("Permission", Permission.None)
                  )
        )
    ),
    "*, MostRecentThread{ThreadId,Title,Creator{Name,Nickname,Avatar}}"
);

上述數據訪問的查詢方法大致生成如下SQL腳本:

SELECT
    t.*,
    t1.ThreadId AS 'MostRecentThread.ThreadId',
    t1.Title AS 'MostRecentThread.Title',
    t1.CreatorId AS 'MostRecentThread.CreatorId',
    t2.UserId AS 'MostRecentThread.Creator.UserId',
    t2.Name AS 'MostRecentThread.Creator.Name',
    t2.Nickname AS 'MostRecentThread.Creator.Nickname',
    t2.Avatar AS 'MostRecentThread.Creator.Avatar'
FROM Forum t
    LEFT JOIN Thread AS t1 ON
        t.MostRecentThreadId=t1.ThreadId
    LEFT JOIN UserProfile AS t2 ON
        t1.CreatorId=t2.UserId
WHERE
    t.SiteId = @p1 AND
    t.Visibility IN (@p2, @p3) OR
    (
        t.Visibility = @p4 AND
        EXISTS
        (
            SELECT u.SiteId, u.ForumId, u.UserId
            FROM ForumUser u
            WHERE u.SiteId = t.SiteId AND
                  u.ForumId = t.ForumId AND
                  u.UserId = @p5 AND
                  (
                      u.IsModerator = @p6 OR
                      u.Permission != @p7
                  )
        )
    );

上述示例通過 Select 查詢方法的 schema 參數 (即值為 *, MostRecentThread{ThreadId,Title,Creator{Name,Nickname,Avatar}} 的參數) 從數據結構關係的層次指定了查詢數據的形狀,因而不再需要 SQL 或類 SQL 語法中 JOIN 這樣命令式的語法元素,它不光提供了更簡潔且語義化的 API 訪問方式,而且還給數據訪問引擎底層提供了更大的優化空間和自由度。

如果將 Select 查詢方法的 schema 參數值改為 *,Moderators{*},MostRecentThread{ThreadId,Title,Creator{Name,Nickname,Avatar}} 后,數據訪問引擎會將查詢內部分解為一對多的兩條 SQL 語句進行迭代執行,而這些都不需要業務層進行分拆處理,因而提升了效率並降低了業務層的複雜度。

注:Schema 模式表達式通過 Web API 提供給前端應用,將大大減少後端開發的工作量,提升前後端的工作效率。

示例二

一對多的關聯新增

// 構建待新增的實體對象
var forum = new
{
    SiteId = this.User.SiteId,
    GroupId = 100,
    Name = "xxxx",

    // 一對多的導航屬性
    Users = new ForumUser[]
    {
      new ForumUser { UserId = 1001, IsModerator = true },
      new ForumUser { UserId = 1002, Permission = Permission.Read },
      new ForumUser { UserId = 1003, Permission = Permission.Write },
    }
}

// 執行數據新增操作
this.DataAccess.Insert<Forum>(forum, "*, Users{*}");

上述數據訪問的新增方法大致生成如下SQL腳本:

/* 主表插入語句,執行一次 */
INSERT INTO Forum (SiteId,ForumId,GroupId,Name,...) VALUES (@p1,@p2,@p3,@p4,...);

/* 子表插入語句,執行多次 */
INSERT INTO ForumUser (SiteId,ForumId,UserId,Permission,IsModerator) VALUES (@p1,@p2,@p3,@p4,@p5);

上述示例通過 Insert 新增方法的 schema 參數(即值為 *,User{*} 的參數)指定了新增數據的形狀,由數據訪問引擎根據映射定義自動處理底層的 SQL 執行方式,確保業務層代碼的簡潔和更高的執行效率。

示例三

一對一和一對多的關聯更新,對於“一對多”的導航屬性,還能確保該屬性值 (集合類型) 以 UPSERT 模式寫入。

public bool Approve(ulong threadId)
{
    //構建更新的條件
    var criteria =
        Condition.Equal(nameof(Thread.ThreadId), threadId) &
        Condition.Equal(nameof(Thread.Approved), false) &
        Condition.Equal(nameof(Thread.SiteId), this.User.SiteId) &
        Condition.Exists("Forum.Users",
            Condition.Equal(nameof(Forum.ForumUser.UserId), this.User.UserId) &
            Condition.Equal(nameof(Forum.ForumUser.IsModerator), true));

    //執行數據更新操作
    return this.DataAccess.Update<Thread>(new
    {
        Approved = true,
        ApprovedTime = DateTime.Now,
        Post = new
        {
            Approved = true,
        }
    }, criteria, "*,Post{Approved}") > 0;
}

上述數據訪問的更新方法大致生成如下SQL腳本:

/* 以下代碼為支持 OUTPUT/RETURNING 子句的數據庫(如:SQLServer,Oracle,PostgreSQL) */

/* 根據更新的關聯鍵創建臨時表 */
CREATE TABLE #TMP
(
    PostId bigint NOT NULL
);

/* 更新主表,並將更新的關聯鍵輸出到內存臨時表 */
UPDATE T SET
    T.[Approved]=@p1,
    T.[ApprovedTime]=@p2
OUTPUT DELETED.PostId INTO #TMP
FROM [Community_Thread] AS T
    LEFT JOIN [Community_Forum] AS T1 ON /* Forum */
        T1.[SiteId]=T.[SiteId] AND
        T1.[ForumId]=T.[ForumId]
WHERE
    T.[ThreadId]=@p3 AND
    T.[Approved]=@p4 AND
    T.[SiteId]=@p5 AND EXISTS (
        SELECT [SiteId],[ForumId]
        FROM [Community_ForumUser]
        WHERE [SiteId]=T1.[SiteId] AND
              [ForumId]=T1.[ForumId] AND
              [UserId]=@p6 AND
              [IsModerator]=@p7
    );

/* 更新關聯表 */
UPDATE T SET
    T.[Approved]=@p1
FROM [Community_Post] AS T
WHERE EXISTS (
    SELECT [PostId]
    FROM #TMP
    WHERE [PostId]=T.[PostId]);

上述示例通過 Update 更新方法的 schema 參數(即值為 *,Post{Approved} 的參數)指定了更新數據的形狀,數據訪問引擎將根據數據庫類型生成高效的 SQL 語句,對於業務層而言這一切都是無感的、透明的。

對於一對多的導航屬性,數據訪問引擎默認將以 UPSERT 模式處理子集的寫入,關於 UPSERT 更多信息請參考  項目文檔。

性能

我們希望提供最佳的綜合性價比,對於一個 ORM 數據訪問引擎來說,性能的關注點主要 (不限) 有這些要素:

  1. 生成簡潔高效的 SQL 腳本,並盡可能利用特定數據庫的最新 SQL 語法;
  2. 數據查詢結果的實體組裝(Populate)過程必須高效;
  3. 避免反射,有效的語法樹緩存。

實現層面我們採用 Emitting 動態編譯技術對實體組裝(Populate)、數據參數綁定等進行預熱處理,可查閱  等相關類的源碼深入了解。

其他

得益於 “以聲明方式來表達數據結構關係” 的語義化設計理念,相對於命令式設計而言,它使得程序意圖更加聚焦,天然地對底層數據的表達和優化更加寬容與自由。

更多詳細內容 (譬如:讀寫分離、繼承表、數據模式、映射文件、過濾器、驗證器、類型轉換、數據隔離) 請查閱相關文檔。

支持贊助

我們歡迎並期待任何形式的推廣支持!

如果你認同我們的設計理念請為這個項目點贊(Star),如果你認為該項目很有用,並且希望支持它未來的發展,請給予必要的資金來支持它:

  1. 關注 Zongsoft 微信公眾號,對我們的文章進行打賞;
  2. 加入 ,可以獲得在線問答和技術支持;
  3. 如果您的企業需要現場技術支持與輔導,又或者需要開發新功能、即刻的錯誤修復等請給我。

提醒: 本文可能會更新,請閱讀原文:,以避免因內容陳舊而導致的謬誤,同時亦有更好的閱讀體驗。

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

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

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

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

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

※專營大陸快遞台灣服務

台灣快遞大陸的貨運公司有哪些呢?

整數的表示與編碼

補一下CSAPP的筆記

計算機中整數的表示與編碼

計算機中的整數主要包括兩種:有符號數與無符號數。

無符號數的編碼

其中有符號數的表示方法與傳統二進制一致。
假設有一個整數數據類型有w位。我們可以將位向量寫成

在這個編碼中,每個xi都取值為0或1。我們用一個函數來表示B2Uw來表示:

無符號數的編碼方式實際上與我們所知道的二進制編碼方式是一致的。唯一要注意的是無符號數的編碼具有唯一性,也就是說一個数字只能有一個無符號數編碼。這是因為B2Uw是一個雙射。

有符號數的編碼

有符號數的編碼主要有三種方式:原碼、補碼與反碼。我曾經寫過一篇博客來進行探究,這裏不贅述。

需要說明的是:補碼也具有唯一性,原碼與反碼不具備這種性質,因為0在原碼與反碼中有兩種解釋。

有符號數與無符號數之間的轉換

有符號數轉無符號數

C語言中提供了在不同數據類型中做強制類型轉換的方法,對於無符號整數與有符號整數之間的轉換方式,大多數系統上默認的是底層的位不變,由此我們能推出有符號數與無符號數之間的轉換。
關於這些的轉換的的過程和原理,在此不贅述。這裏直接給出公式:
一個數的編碼方式從無符號編碼(補碼)轉換為有符號編碼后的數值公式為:

如果有符號數的真值小於0那麼,把真值加上2w即為其無符號真值,如果真值大於0,那麼不變。
我們用一段C語言代碼舉例:

#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
int main(void)
{
    int i = -1;
    unsigned int j = (unsigned int)i;
    printf("%u\n", j);
    printf("%u\n", UINT_MAX);
    system("pause");
}

VS2017下的運行結果:

數據類型int的大小為8字節,32位,把-1轉換成無符號數需要加上232,結果為232-1,正好為無符號數編碼的最大值,所以與UINT_MAX的值一致。

無符號數轉有符號數

直接給出公式:

C語言代碼測試實例:

#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
int main(void)
{
    unsigned int i = UINT_MAX;
    int j=(int)i;
    printf("%d", j);
    system("pause");
}

VS2017下的運行結果:

需要說明的是,在VS2017的環境下,上面兩個程序經過測試即使不使用強制類型轉換也可以得到正確的結果,其一是C語言中如果發現左右兩邊數據類型不一致會自動把數據往左邊的類型轉換,其二是,printf中的格式說明符也會自動執行類型轉換,這裏使用強制類型轉換隻是為了讓轉換看起來更加清晰。

無符號整數與有符號整數互相轉換可能遇到的問題

由於C語言對同時包含有符號和無符號數表達式的這種處理方式,出現了一些奇特的行為。當執行一個運算時如果它的一個運算數是有符號的而另一個是無符號的,那麼C語言會隱式地把有符號參數強制類型轉換為無符號,並假設這兩個數都是非負的
對於 這樣的關係運算符來說,它會導致非直觀的結果。我們同樣用一個C語言程序來作為測試:

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
    printf("%d", -1 < 0U);
    printf("%d",(unsigned)-1 > -2);
}

VS2017運行結果:

第一個表達式中,由於0是無符號數,所以-1默認變成無符號數,即為232-1,這個數必然比0要大。所以第一個表達式為假。
第二個表達式中,通過把-1強制轉換成無符號數,-1變為232-1,-2變為232-2,所以第二個表達式為真。

擴展一個数字的位表示

有時我們會把一個佔用空間較小的數據類型轉換為佔用空間較大的數據類型(如果把佔用空間較大的數據類型轉換為佔用空間較小的數據類型,可能會丟失數據,我們一般不推薦這麼做)。

無符號數的零擴展

定義寬度為w位的位向量:

和寬度為w’的位向量:

其中w’>w。則:

要將一個無符號數轉換為一個更大的無符號數數據類型,我們只要簡單的在前面加上足夠的0即可,這種運算被稱為零擴展。

有符號數的符號拓展

定義寬度為w位的位向量:

和寬度為w’的位向量:

其中w’>w。則:

要將補碼数字轉換為一個更大的數據類型,可以執行一個符號擴展(sign-extension),在前面添加最高有效位的值。
具體證明略。

值得注意的點:在C語言中,把類型不同、大小不同的兩個數據類型相互轉換,先改變數據類型的大小,然後在執行類型轉換。
比如說:在C語言中,把一個short類型的變量轉換為unsigned類型的變量,我們要先把short類型的變量擴展到8個字節,然後再執行有符號數到無符號數的轉換。

截斷数字

一些特殊情況下,儘管這樣做會帶來風險,但我們仍然有時候會需要把一個高位的數據類轉換為低位的數據類型,這時候我們就需要截斷這個数字。

無符號數的截斷

定義寬度為w位的位向量:

而它截斷為k位的結果為:

令x=B2U_w(\vec x),x’=B2U_(\vec x’),則x’=x mod 2^k。
截斷為k為實際上就是對原數的真值用2^k取模。具體證明過程略。

有符號數的截斷

要理解有符號數的截斷,我們首先要明白,無論是有符號數還是無符號數真正區別他們的不是他們的真值,而是他們的編碼方式,實際上無論是有符號數,還是無符號數,在內存中都表示為串二進制數,有了編碼對他們真值的解釋,他們才能表示不同的數據。
我們都知道,截斷實際上就是截去前面冗餘的位,只留下我們需要的位,既然無符號數和有符號數在內存中表示的方法實際上都是一串二進制數,我們為什麼不可以把一個有符號數的位模式,看做是無符號數的編碼,用無符號數的方式將其截斷後得到的真值,再用把無符號數轉換為有符號數,最終得到將有符號數階段的真值。
總而言之,有符號數編碼的截斷結果是:

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

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

※評比前十大台北網頁設計台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

台灣海運大陸貨務運送流程

兩岸物流進出口一站式服務

Unity – Cinemachine實現相機抖動

普通相機抖動腳本較易實現,但在使用cinemachine相機下,其Transform組件不可被代碼修改,那麼Cinemachine的相機抖動如何實現呢?本文結合實際項目,對實現相機抖動的三大步驟進行系統講解:

  • 項目地址:

配置流程

項目背景:一款2D像素動作遊戲,我們操控着Player(必須帶有Collider組件),遊戲相機為Cinemachine 2DCamera(關於其配置方法此處不做贅述,推薦文章在末尾參考處)

1. 在相機上添加監聽腳本

在我們使用的虛擬相機 CM vcam1 上添加組件:AddComponent->CinemachineImpulse Listener

  • CinemachineImpulse Listener監聽腳本內震動信號(方法調用),使得抖動在此相機上發生
    • Channel Mask:通道遮罩,此處最好默認為EveryThing
    • Gain:可獲得震動信號的數目,0為屏蔽,1表示某時段僅能進行一個抖動運動
    • Use 2D Distance:用於2D遊戲,忽略相機Z軸的抖動

2. 在震動信號發生物體上添加腳本

震動信號發生物體(調用震動函數的物體)為Player,因此需要在Player上添加組件:AddComponent->Cinemachine Collision Impulse Source(注:必須掛到含Collider的物體上),然後在Raw Signal右側齒輪->New Noise Settings 添加震動配置器,默認名CM vcam1 Raw Signal

  • Cinemachine Collision Impulse Source:含有抖動函數震動配置器的關鍵腳本
    • Raw Signal:震動配置器,配置震動參數的關鍵部件,我們打開剛上面新建的CM vcam1 Raw Signal,可看到震動方式的各類參數。我們以Position Y,即上下抖動為例,添加Components后可設置其Frequency震頻Amplitude震幅,並且勾選右側方框可將其設置為正弦波
    • Attack:抖動開始的變化曲線及時間
    • Sustain Time:抖動的持續時間
    • Decay:抖動衰退的變化曲線及時間

3. 調用震動方法:

在Player內引用震動核心腳本,並在合適位置調用震動方法

private Cinemachine.CinemachineCollisionImpulseSource MyInpulse;

private void Start()
{
    MyInpulse = GetComponent<Cinemachine.CinemachineCollisionImpulseSource>();
}

private void Update()
{
    //按下右鍵產生相機抖動,抖動方式依照上面CM vcam1 Raw Signal內配置信息
    if (Input.GetMouseButtonDown(1))
        MyInpulse.GenerateImpulse();       
}

至此,我們在遊戲內操控Player,按下右鍵即可實現相機抖動。當然除了上面無參的GenerateImpulse()方法,還有兩個帶參的方法:

//假若使用傳遞velocity的方法,其震動方式為velocity和CM vcam1 Raw Signal的混合
public void GenerateImpulse(Vector3 velocity);
public void GenerateImpulse(Vector3 position, Vector3 velocity);

此外,還有可能出現bug:還尚未調用震動函數,遊戲開始時就自動產生抖動。其產生原因博主尚未在對應腳本內發現,但解決方式為關閉Player上的Cinemachine Collision Impulse Source腳本

總述

Cinemachine中實現相機抖動的基本流程:

  • 在虛擬相機上添加監聽腳本 CinemachineImpulse Listener
  • 在Player上添加震動核心腳本Cinemachine Collision Impulse Source,並添加、設置震動配置器
  • Player腳本合適位置調用震動函數

本例僅介紹了單Position方向上的抖動,讀者可按需配置抖動的Position、Rotation、發生時間、維持時間、衰退時間等,實現自己想要的效果

參考

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

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包”嚨底家”

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

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

小三通海運與一般國際貿易有何不同?

小三通快遞通關作業有哪些?

SpringBoot 整合NoSql

通用配置

maven依賴

添加Spring-Web和Spring-Security依賴,使用Spring-Security是因為使用SpringBoot的Redis依賴時,必須添加Spring-Security。在新版本SpringBoot才會這樣。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

properties配置

8080端口指定一下,因為下面雙開服務器這個配置必須在這裏显示加上。

server.port=8080

測試類

@RestController
public class HelloController {

    @Value("${server.port}")
    Integer port;

    @GetMapping("/set")
    public String set(HttpSession session) {
        session.setAttribute("name", "johnson");
        return String.valueOf(port);
    }

    @GetMapping("/get")
    public String get(HttpSession session) {
        return (String)session.getAttribute("name") + port;
    }
}

整合Redis

maven依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

連接redis必須要密碼,否則連接不上,所以你的redis服務器必須設置密碼

spring.redis.host=127.0.0.1
spring.redis.database=0
spring.redis.port=6379
spring.redis.password=123456

啟動后,瀏覽器打開localhost:8080,賬號默認為user,密碼在控制台打印出來了,可以去看看。頁面如下:

Redis下的Session共享

當我們開啟兩個或多個Tomcat時,如何在這兩個Tomcat服務中共享Session呢,而Spring直接扔個依賴給你,安裝這個依賴就好了。
???????????? execute me!?
就是這麼簡單,添加spring-session-data-redis依賴就好了,如下:

<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>

測試Session共享

使用maven使用package指令打包出來出來后(IDEA的Maven工具有package按鈕,點一下就好),在target目錄下可以看到你打包好的jar包,就像這樣:

進入到tartget目錄后,打開兩個命令窗口, 分別輸入以下命令:

java -jar sessionhare-0.0.1-SNAPSHOT.jar  --server.port=8080 //窗口1命令
java -jar sessionhare-0.0.1-SNAPSHOT.jar  --server.port=8081 //窗口2命令

然後打開頁面localhost:8080,賬號默認為user,密碼可以在8080的控制台看到,登錄成功后,
再打開頁面localhost:8081,你會發現不需要再次登錄啦,Session共享成功!

Nginx的負載均衡

安裝Nginx可以參考我之前的文章
如果是Ubuntu或者其他類型的系統,就依賴項不同,安裝方式還是一樣的。

nginx配置

nginx配置在路徑在/usr/local/nginx/conf/nginx.conf, 修改配置如下:
http模塊下修改。

    upstream colablog.cn {
        server 127.0.0.1:8080 weight=1;
        server 127.0.0.1:8081 weight=1;
    }
    server {
        listen      80;
        server_name localhost;
        
        location / {
           proxy_pass http://colablog.cn;
           proxy_redirect default;
        }
    }

修改完nginx配置後記得要重新加載一下配置文件,修改配置文件后必須重新指定配置文件,否則啟動會報錯。

sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf //重新指定配置文件
sudo /usr/local/nginx/sbin/nginx -s reload //重新啟動nginx

把剛才項目打包出來的jar包扔到Linux服務器上,讓程序在服務器後台運行,使用如下命令:

$ nohup java -jar sessionhare-0.0.1-SNAPSHOT.jar --server.port=8080 > 8080.log &
$ nohup java -jar sessionhare-0.0.1-SNAPSHOT.jar --server.port=8081 > 8081.log &

打開你Linux服務器的ip地址就可以看到了。在瀏覽器打開你的虛擬機ip/set你的虛擬機ip/get,重複打開幾次就會發現訪問不同的端口。

MongoDb

整合MongoDb就像整合Redis那麼簡單,依賴和配置文件搞一下就行了

maven依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

properties配置

spring.data.mongodb.host=127.0.0.1
spring.data.mongodb.authentication-database=admin
spring.data.mongodb.username=johnson
spring.data.mongodb.password=123456
spring.data.mongodb.port=27017
spring.data.mongodb.database=johnson

這樣就已經配置好了,不過我們還是測試一下吧。

測試

Book實體類

public class Book {

    private Integer id;

    private String name;

    private String author;

    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", author='" + author + '\'' +
                '}';
    }

    public Integer getId() { return id; }

    public void setId(Integer id) { this.id = id; }

    public String getName() { return name; }

    public void setName(String name) { this.name = name; }

    public String getAuthor() { return author; }

    public void setAuthor(String author) { this.author = author; }
}

dao接口

public interface BookDao extends MongoRepository<Book, Integer> {
    List<Book> findBookByNameContaining(String name);
}

測試類

@SpringBootTest
class MongoApplicationTests {
    @Autowired
    BookDao dao;

    @Test
    void contextLoads() {
        Book book = new Book();
        book.setName("colablog");
        book.setId(1);
        book.setAuthor("johnson");
        dao.insert(book);
    }

    @Test
    public void getList() {
        List<Book> all = dao.findAll();
        System.out.println(all);
        List<Book> cola = dao.findBookByNameContaining("cola");
        System.out.println(cola);
    }

    @Autowired
    MongoTemplate template;

    @Test
    public void test1() {
        Book book = new Book();
        book.setName("colablog2");
        book.setId(2);
        book.setAuthor("johnson2");
        template.insert(book);

        List<Book> all = template.findAll(Book.class);
        System.out.println(all);
    }
}

總結

文章主要是根據總結了視頻第六章內容,
代碼貼的有點多,因為測試用例的關係,真是抱歉,因為有測試用例才能證明程序能走通。
好了,感謝各位的閱讀,文章若有不足之處或更好的建議,請在下方留言,Thanks(・ω・)ノ。

個人博客網址: https://colablog.cn/

如果我的文章幫助到您,可以關注我的微信公眾號,第一時間分享文章給您

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

【其他文章推薦】

※專營大陸空運台灣貨物推薦

台灣空運大陸一條龍服務

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

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

2016年中國各類充電設施總投資300億元 將建私人充電樁86萬個

4月1日,國家能源局發佈《2016年能源工作指導意見》,意見明確,2016年計畫建設充電站2000多座、分散式公共充電樁10萬個,私人專用充電樁86萬個,各類充電設施總投資300億元。

意見指出,全面推進電動汽車充電設施建設。按照“樁站先行、適度超前”原則,用好財政支持政策,積極完善相關配套措施,保障工程建設順利進行。加強與建築、市政等公共設施的統籌銜接,研究編制充電設施工程技術標準規範。鼓勵大眾創業、萬眾創新,積極發展充電設施分享經濟。

另外,國家能源局制定的《電動汽車充電基礎設施建設規劃》提出,到2020年國內充換電站數量達到1.2萬個,充電樁達到450萬個。以充電樁均價2萬元/個,充電站300萬元/座計,未來六年國內新能源汽車充電樁(站)的直接市場規模有望達到1240億元。

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

【其他文章推薦】

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

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

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

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

※專營大陸快遞台灣服務

台灣快遞大陸的貨運公司有哪些呢?

能源局將在4-6月開展電動汽車充電基礎設施安全專項檢查

4月6日從能源局獲悉,國家能源局綜合司發佈《關於開展電動汽車充電基礎安全專項檢查的通知》,旨在加強電動汽車充電基礎設施安全管理,促進能源互聯網建設和新能源汽車產業發展。

通知指出,加強電動汽車充電基礎設施安全管理,促進能源互聯網建設和新能源汽車產業發展,定於2016年4月-6月在全國範圍內組織開展電動汽車充電基礎設施安全專項檢查。

通知明確檢查物件和內容,重點對電動汽車充電基礎設施建設運營企業以及相關充換電設施進行檢查,包括電動汽車充電基礎設施安全管理、設備設施及監控系統安全運行、建設標準執行等情況。

通知要求,全面加強電動汽車充電基礎設施安全運營管理,建立設備設施定期檢查和運行維護工作制度,確保充電設備、配電設備、線纜及保護裝置、充電監控系統及運行管理平臺的工作狀態正常和可靠運行。落實充電設備、配電等電氣設備及監控系統故障資訊檢測手段,建立充電過程的告警監測、過充保護、故障處理等防控措施及應急聯動機制。依照相關標準對有關消防設施進行檢查,保證設備處於可用狀態。加強設備設施安全管理和運行維護,滿足充換電設施運行要求。

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

【其他文章推薦】

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

※評比前十大台北網頁設計台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

台灣海運大陸貨務運送流程

兩岸物流進出口一站式服務