分類
發燒車訊

6000年前一隻狗的癌症,如何在今天席捲全球?

  即使睿智如人類,強壯如猛獸,也無法躲過疾病的侵襲,癌症就是其中尤為嚴重的一種。

  時至今日,我們仍舊深陷於與癌症抗爭的泥潭中苦苦掙扎。目前已有的治療手段有手術、化學療法、放射線療法、癌症疫苗、免疫細胞療法等。但很遺憾,目前除了針對非實體瘤的治療方法效果卓著接近曙光,對大多數癌症仍舊是無計可施。

  究其原因,仍是我們對癌症不夠了解,或者說是無從下手。以人類短短百餘年的壽命極限來抗衡與進化同生的癌症,實在是有些蚍蜉撼樹的意味。癌症的偶然發生,以單一生命個體為單位進行研究,百餘年的度量難以拼接成完整的畫面。

  而今,一種至今已存在了 6000 余年的癌症為我們的研究提供了絕佳的條件。


來源:Ernesto del Aguila III, NHGRI

  CTVT(canine transmissible venereal tumor),即犬類傳染性性病腫瘤。這種癌症最早起源於中亞地區,來自於某條“始祖犬”的生殖器細胞基因突變。隨後,伴隨犬類的交配,生生不息,如今已經幾乎遍布世界的每個角落,至今已有約 6000 年。

  來自 40 多個國家的聯合團隊,通過對來自 43 個國家的 546 個 CTVT 腫瘤樣本和 495 個 CTVT 腫瘤宿主的正常樣本進行了外顯子測序,構建出時間系統發育譜系。同時研究者們對 CTVT 的癌症突變特徵進行了分析,並由此識別出 CTVT 的高度環境特異性突變過程,以及中性遺傳漂變是癌症長期演化的主要特徵,相關的研究細節發表在 Science 雜誌上。

  對 CTVT 的研究,為人類在數千年的時間單位上更好地認識癌症進化上提供了絕佳的機會,這也將是人類未來戰勝癌症的重要參考。

  一、對癌症的認識

  癌症,又名惡性腫瘤,是指細胞不正常的增生,且這些增生的細胞可能隨淋巴或血液系統攻佔身體的每個角落。千萬年間,人們始終沒有放棄與癌症的抗爭,卻屢屢折戟沉沙。因此,癌症在很長時間內都被認為是無法治癒的疾病,神靈的詛咒。

  在人類身上,目前已知的癌症已經超過 100 種。2015 年,約有 880 萬人死於癌症,這幾乎佔到了全球死亡人數的六分之一,其中的 70% 發生在低收入和中等收入國家。

  癌症並非一種源於工業化的人造疾病,而是與演化如影隨形,共同塑造了生命。癌症的存在歷史可以追溯至上萬年,但直到近百年間,人們才開始真正地了解癌症。

  18 世紀,醫生藉助解剖刀開始了與癌症的正式交鋒——腫瘤切除治療。但癌症的複發與轉移,成為橫亘在醫生們面前的又一條門檻。

  那麼,究竟什麼才是癌症背後真正的力量呢?答案是基因

  事實上,癌症是一種依賴基因突變的慢性疾病。一般來說,同一種癌症在不同患者身上,甚至是同一患者的不同器官或組織中,都可能具有不同的基因型。癌症,似乎可以看做是某些邪惡基因隨機發生於宿主個體間的一種“寄生”。

  肉體總有終結之時,但癌症永生。當然,對於絕大多數不具有傳染性的癌症來說,只是在時間跨度下的眾多個體間的廣義永生。事實上,有極少數的癌症的確可以在生命個體間傳播,延續着自己的生命,完成永生。

  但值得一提的是,傳染性癌症區別於感染型癌症,並不是通過病毒感染誘發的。大多數病毒感染誘發的癌症,如人乳頭瘤病毒引起的宮頸癌、乙肝病毒引起的肝癌,都可以通過接種疫苗有效預防。

  二、古老的癌症

  對於大多數癌症來說,他們隨機的發生於單一個體,隨個體的壽命而發生、發展、終結。而其中的極少數癌症,可以在個體間進行傳播,就像“寄生”在宿主中完成自身的演化時間線,CTVT 就是其中一員。

  這種來源於犬類的癌症起源於中亞,遺傳信息穩定且高度相似。對於它開始的時間,研究者們尚存在爭議,一部分人認為約在 1.1 萬年前犬類的馴化時間點上,也有人認為發生於時間稍近的 6000 多年前。

  通過犬類之間的交配、甚至是舔舐,CTVT 在群體間進行傳播。每一顆癌細胞就像是種子,到達下一個宿主體內,等待合適的時機繼續傳播。

  隨着大航海時代的到來,人類的生活半徑增大,而犬類也跟隨人類開始了他們的遷移。時至今日,幾乎在每塊大陸上,都有 CTVT 的痕迹。

  而如今,它居然歪打正着地成為研究癌症的最佳手段,幫助人類追蹤癌症的演化,破解癌症的謎團。

  三、揭開千年疑團

  在此項研究中,研究者們對來自 43 個國家的 546 個 CTVT 腫瘤樣本和 495 個 CTVT 腫瘤宿主的正常樣本進行了外顯子測序,並構建出時間系統發育譜系。分析結果显示,CTVT 細胞大約在 6200 年前首次於亞洲出現,目前廣泛分佈的 CTVT 細胞的源頭可以追溯到約 1900 年前的印度。彼時 CTVT 開始產生亞型,並開始向歐洲、亞洲蔓延擴散。隨着大航海時代的到來,CTVT 的傳播也搭上了“順風船”,跟隨人類的足跡踏上更多的陸地。


來源:Science

  隨後研究者們對 CTVT 的癌症突變特徵進行了分析,並由此識別出 CTVT 的高度環境特異性突變過程。同時,研究者發現了 5 個促進 CTVT 發生和傳播的早期驅動基因:SETD2,CDKN2A,MYC,PTEN 和 RB1。研究者也發現,CTVT 幾乎沒有晚期陽性選擇,解釋了中性遺傳漂變是癌症長期演化的主要特徵。

  殖民、全球化、同質化,共同作用造成了如今的 CTVT。而存活了數千年、從來不能滅亡的 CTVT,同時也像活化石、錄影帶一樣記錄了癌症的進化歷程。管中窺豹,可見一斑。

  對於 CTVT 來說,癌細胞似乎更像是一種獨立的生命體在不同的“宿主”間傳播,雖然來源不同,但卻可以和不同個體的免疫系統都相安無事。儘管目前並未發現可以在人體間傳染的癌症,但足以為器官移植敲響警鐘。如果捐贈者的器官中留有癌症的“種子”,對於接受器官移植的人來說很可能是一場可怕的災難。

  同時,CTVT 的中性進化也為現代癌症的治療提供思路。對於一些進程緩慢的癌症,似乎可以嘗試適應性療法,而非在癌細胞和宿主間,一定要斗個“你死我活”。

  如果承載生命的主體是遺傳物質,那麼毫無疑問,癌症從未死去。如果短期內無法戰勝,找到與它“同生”的方法或許並不是最壞的選擇。

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

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

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

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

分類
發燒車訊

中國AI獨角獸完成全球競賽三連冠偉業:孫劍帶隊,曠視再刷榜

  邊策 郭一璞 發自 凹非寺
  量子位 報道 公眾號 QbitAI

  全球 AI 競賽再奪 3 項世界第一,實現 COCO 重頭戲“物體檢測”三連冠。

  新歷史、新紀錄,榮耀屬於中國公司,展示的統治力堪比乒乓球。

  這就是 AI 獨角獸曠視科技,剛剛從全球 AI 頂會 ICCV 2019 傳來的捷報。

  而且 IPO 上市當前,無疑是既有實力的繼續展示。

  全球 AI 競賽再奪 3 項第一

  ICCV,國際計算機視覺大會,英文全稱 International Conference on Computer Vision。

  被譽為計算機視覺領域三大頂級會議之一,與 CVPR 和 ECCV 並列。

  ICCV 兩年舉辦一次,今年 10 月 27 日在韓國首爾開幕。

  不過剛剛開幕,中國力量就捷報頻傳,繼續展現在全球 AI 研發領域的潛力和實力。

  特別是在本屆 ICCV 的 COCO 挑戰賽上,曠視再度問鼎,拿下 COCO 物體檢測(Detection)、人體關鍵點(Keypoint)和全景分割(Panoptic)3 項第一。

  繼 2017、2018 年後再度奪冠,更是在最重要的“物體檢測”完成三連冠偉業,自 2015 年 COCO 開賽以來,前無古人,創下新紀錄。

  此外,曠視還獲得今年新設立的 COCO+Mapillary 挑戰賽的最佳論文獎(Best Paper Award),原因是“最具創新性的算法”。

  COCO 是 ICCV 2019 的重頭戲,也是 AI 視覺領域最具影響力的通用物體檢測挑戰賽。

  今年的 COCO 挑戰賽與往年不同,加入了新的規則:

首先、參加者必須提交一份技術報告,該報告將替代先前要求的簡短描述。只有與報告一起提交的材料才會被考慮參賽,並被放入 COCO 排行榜中。

其次,今年的每個挑戰賽都將設立兩個不同的獎項:最佳結果獎和最具創新獎。最具創新獎根據根據參賽作品的創新而非最佳成績來評定,最終由 COCO 獎項委員會決定,獲獎團隊將受邀參加 Workshop。

最後,今年的大會針對所有挑戰提供最具創新性和成功解決方案的最佳論文獎。獲獎者將由研討會組委會確定。

  物體檢測任務是讓算法輸出邊界框輸出或實例分割,自動駕駛、醫療影像識別中都會用到。另外在 2019 年的挑戰賽中,只有具有目標分割輸出的檢測任務會被重點介紹。

  COCO 全景分割任務目的是生成豐富而完整的連貫場景分割,這是自動駕駛或增強現實等實際應用的中一項重要技術。

  人體關鍵點檢測是在不提供人位置的情況下,定位並返回人體各部位關鍵點坐標位置。關鍵點定位了頭、肩、肘、手、臀、膝、腳等部位,可以用於人的行為識別,對於安防技術有重大意義。

  三連冠偉業

  今年的 MS COCO 總共 7 項比賽,除了曠視的 3 項冠軍,香港中文大學-商湯科技聯合實驗室和南洋理工大學團隊也在 Object Detection 比賽中拿到了不含額外數據集的第一名。

  可以說中國軍團延續傳統,繼續在全球 AI 競技中展現實力。

  而且 COCO 中最被看重的“物體檢測”比賽,孫劍和其帶隊的中國軍團,更是實現了垄斷級的統治力。

  物體檢測項目,從 2015 年第一屆就存在,此後一直延續了下來。

  在第一屆比賽中,孫劍帶隊的 MSRA 團隊斬獲冠軍,成員包括何愷明(現 FAIR)、任少卿(現 Momenta)、代季峰(現商湯)和張祥雨(現曠視),所用的算法,是何愷明和 RBG 大神第一次合作的 Faster R-CNN。

  不過 2016 年,冠軍被谷歌研究院的G-RMI 隊拿下,只是所用的算法依然是 Faster R-CNN。

  2015 年第一屆 MS COCO 大賽中除了物體檢測,還有個生成圖片說明(Captioning Challenge)項目,當時奪冠的谷歌團隊,與人類 baseline 相比依然差了一大截,這個比賽項目也沒能繼續下去。

  在 2016 年,物體檢測之外的比賽項目變成了人體關鍵點檢測,當時奪冠的團隊來自 CMU。

  而從 2017 年開始,COCO 的各項比賽,就真正進入了中國時間——甚至可以更具體說“曠視時間”。

  這家中國 AI 獨角獸在孫劍加盟擔當研究院院長后,如虎添翼,在 COCO 競賽中展現出的實力,就像中國乒乓球、女排在奧運會展現的一樣。

  2017 年,MS COCO 的 6 個比賽項目中,曠視拿下了邊界檢測(Detection: Bounding Box)、人體關鍵點檢測(Keypoints)和地點實例分割(Places Instance Segmentation)3 個項目的冠軍,以及檢測分割(Detection: Segmentation)的亞軍。

  而在 2018 年的 6 個項目中,曠視拿下了物體檢測(Detection)、全景分割(Panoptic)、人體關鍵點檢測(Keypoints)和 Mapillary Panoptic4 個項目的冠軍。

  另外的兩個項目 DensePose 和 Mapillary 街景檢測則分別由北京郵電大學自動化學院模式識別與測控技術實驗室(BUTP-PRIV)和滴滴獲得——這一整屆比賽的冠軍都被中國團隊包了。

  所以算下來,曠視已經在三年 MS COCO 的比賽上拿到了累計 10 個冠軍。

  最重頭的“物體檢測”,更是完成三連冠偉業,前無古人。

  更加值得一提的是,之前我們也揭秘過,曠視在 COCO 上的統治力,去往年開始就啟用大牛老將帶實習生參賽的機制,於是諸多名不見經傳的本科實習生,早早就成為了 AI 世界冠軍。

  而且刷榜奪冠,不僅是鍛煉隊伍,而且對曠視自研的 Brain++,也是一次次最佳說明。

  在今年 ICCV 奪冠后,曠視研究院院長孫劍再次感謝曠視算法工具平台 Brain++,稱一連串成績的取得,離不開背後強大的 Brain++。

  曠視介紹,一方面 Brain++ 具備多機訓練方案,支持完備的底層算法,確保算法的高效實現與快速驗證。

  比如,在 COCO Detection 任務中,曠視重新設計了 RPN 匹配策略和 Proposal 採樣策略,使用兩階段檢測器即可直接獲得很好的高 IoU 檢測結果,甚至超過了使用更多階段的 Cascade R-CNN,最終大幅領先,取得 test-challenge 52.5 的冠軍成績。

  另一方面 Brain++ 針對計算機視覺定製優化,適合工業界的產品開發,為競賽技術的應用轉化鋪平道路。

  還集成了新一代 AutoML 技術,降低算法試錯成本,實現技術創新和產品落地齊頭並進。Brain++從算法設計、算法框架和算法平台三個方面為 AI 競賽保駕護航。

  在剛剛舉行的烏鎮世界互聯網大會上,Brain++還為曠視斬獲了“世界互聯網領先科技成果”。

  於是也有更多注意力開始關注起這個基礎算法研發平台,曠視聯合創始人及 CTO 唐文斌還比喻說,如果說曠視各種各樣的算法是“雞蛋”,那 Brain++ 就是出產“所有雞蛋”的“母雞”。

  總之,Brain++可以視為曠視面向 AI 時代的生產工具,而再配以優秀的人才,連續在全球 AI 競技中奪魁,自然也不是意料之外。

  One more thing

  最後,新冠軍、新紀錄和三連冠偉業之外,今年 COCO 的冠軍對曠視而言還有更多意義。

  一方面,這家 AI 獨角獸已經向港交所提交了招股書,IPO 上市只是時間問題,也將成為 AI 創業上市第一股。

  另一方面,就在不久前,曠視也突發遭遇偷襲,被美國列入了“實體名單”,成為“川普優選”的又一家公司。

  因為衝刺上市當前,還引發了更多關注。

  但 Brain++ 獲國家認證,COCO 比賽三連冠,毫無疑問就是最好回應。

  還是那句話,如果美國拉黑了你,不要悲傷,不要氣餒。

  猝不及防的日子,最好的回擊就是業績和人心。

  並且 ICCV 2019 這才剛剛開幕,聽說曠視的三連冠,還不是中國 AI 新榮譽的全部。

  讓我們保持關注,繼續期待~

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

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

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

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

分類
發燒車訊

JVM 問題排查和性能優化常用的 JDK 工具

JDK 提供了一系列用於監控、診斷 Java 進程的工具,它們在 JDK 安裝目錄的 bin 目錄下,有 jps、jcmd、jstack、jinfo、jmap 等。其中jmc、jconsole、jvisualvm 是 GUI 工具,其他大部分都是命令行工具。

cd $JAVA_HOME/bin
ls

本篇只是個入門介紹,不涉及深入分析。每一個工具都有它專門的作用,掌握使用方法只是很簡單的入門階段,更重要的是根據工具得到的信息去分析系統存在的問題以及性能瓶頸,每一個工具的使用和分析都可以單獨成文。

jps

如果你用過 Linux,那肯定熟悉 ps 命令,用來查看進程列表的。jps 就好比是 ps 命令的子集,它查詢的是當前用戶下已經啟動的 Java 進程。這是進行線上問題排查的大門鑰匙,有了它才能下手後面的動作。

下面是 jps 的幫助文檔

usage: jps [-help]
       jps [-q] [-mlvV] [<hostid>]

Definitions:
    <hostid>:      <hostname>[:<port>]

一般的用法是 jps -l,前面一列显示 pid,後面一列显示進程名稱。

還可以用下列參數查看更具體的 Java 進程信息,用法為 jps -lv

jstack

查看 Java 進程內當前時刻的線程快照,也就是每條線程正在執行的方法棧情況,用於定位線程停頓、死鎖等長時間等待的問題。

以下是 jstack 的幫助文檔。

Usage:
    jstack [-l] <pid>
        (to connect to running process)
    jstack -F [-m] [-l] <pid>
        (to connect to a hung process)
    jstack [-m] [-l] <executable> <core>
        (to connect to a core file)
    jstack [-m] [-l] [server_id@]<remote server IP or hostname>
        (to connect to a remote debug server)

Options:
    -F  to force a thread dump. Use when jstack <pid> does not respond (process is hung)
    -m  to print both java and native frames (mixed mode)
    -l  long listing. Prints additional information about locks
    -h or -help to print this help message

最常用的就是 jstack -pid 或者 jstack -l pid,打印線程狀態、棧使用情況。

如果是線上查看不方便的話,可以用命令 jstack -l pid > stack.log,輸出到文件中下載到本地查看。

jstack -m pid,打印 Java 和 Native 棧信息

如果 -l 和 -m 都不起作用的時候,可以使用 java -F pid 強制 dump。

jinfo

它的主要作用是查看 JVM 配置參數,還可以動態設置部分參數值。jinfo 使用時需要 attach 到目標 JVM 上。關於 attach jvm 可以點擊查看

使用 jinfo -h查看幫助文檔

Usage:
    jinfo [option] <pid>
        (to connect to running process)
    jinfo [option] <executable <core>
        (to connect to a core file)
    jinfo [option] [server_id@]<remote server IP or hostname>
        (to connect to remote debug server)

where <option> is one of:
    -flag <name>         to print the value of the named VM flag
    -flag [+|-]<name>    to enable or disable the named VM flag
    -flag <name>=<value> to set the named VM flag to the given value
    -flags               to print VM flags
    -sysprops            to print Java system properties
    <no option>          to print both of the above
    -h | -help           to print this help message

jinfo -flags pid

查看 JVM 參數,其中 Non-default VM flags 是虛擬機默認設置的參數,Command line 是用戶指定的參數,比如命令行啟動 jar 包的時候加上的參數。

jinfo -flag 參數名 pid

可以查看指定參數的值,比如查看堆的最大值(-XX:MaxHeapSize 也就是 -Xmx ):

jinfo -flag MaxHeapSize 92041

-XX:MaxHeapSize=20971520

jinfo -sysprops pid

查看系統參數

jinfo pid

查看 jvm 參數和系統參數

以上信息,如果我們用過 visualVM 等監控工具,一定非常熟悉。另外,我之前做過一個 ,也實現了這個功能。

另外,還可以修改部分參數值。

jinfo -flag [+|-] pid

jinfo -flag = pid

可以修改部分 JVM 參數。

前者可以修改布爾值參數,比如開啟簡單 GC 日誌

jinfo -flag +PrintGC 92041

後者是設置非布爾值參數的,比如設置 HeapDumpPath

jinfo -flag HeapDumpPath=/users/fengzheng/jvmlog

哪些參數是允許動態修改的呢,用下面這個命令可以查看

#Linux 和 Mac 
java -XX:+PrintFlagsInitial | grep manageable

#windows
java -XX:+PrintFlagsInitial | findstr manageable

jmap

jmap 查看給定進程、核心文件、遠程調試服務器的共享對象內存映射和堆內存細節的工具,可查看堆使用情況、堆內對象直方圖、加載類、生成堆快照等。

Usage:
    jmap [option] <pid>
        (to connect to running process)
    jmap [option] <executable <core>
        (to connect to a core file)
    jmap [option] [server_id@]<remote server IP or hostname>
        (to connect to remote debug server)

where <option> is one of:
    <none>               to print same info as Solaris pmap
    -heap                to print java heap summary
    -histo[:live]        to print histogram of java object heap; if the "live"
                         suboption is specified, only count live objects
    -clstats             to print class loader statistics
    -finalizerinfo       to print information on objects awaiting finalization
    -dump:<dump-options> to dump java heap in hprof binary format
                         dump-options:
                           live         dump only live objects; if not specified,
                                        all objects in the heap are dumped.
                           format=b     binary format
                           file=<file>  dump heap to <file>
                         Example: jmap -dump:live,format=b,file=heap.bin <pid>
    -F                   force. Use with -dump:<dump-options> <pid> or -histo
                         to force a heap dump or histogram when <pid> does not
                         respond. The "live" suboption is not supported
                         in this mode.
    -h | -help           to print this help message
    -J<flag>             to pass <flag> directly to the runtime system

jmap -heap pid

打印 JVM 堆概要信息,包括堆配置、新生代、老生代信息

jmap -histo pid

打印類的直方圖,也就是各個類實例的個數和空間佔用情況。

如果加 :live,jamp -histo:live pid 則只打印活動類的信息。這個命令會出發 GC 動作,會導致 JVM 停頓,所以在線上環境要慎用。

jmap -dump

dump 當前 JVM 堆,一般用法如下:

#dump 所有對象在堆中的分佈情況
jmap -dump:format=b,file=/Users/fengzheng/jvmlog/jamp_dump.hprof 95463

#加:live 參數 dump 存活對象在隊中的分佈情況
jmap -dump:live,format=b,file=/Users/fengzheng/jvmlog/jamp_dump.hprof 95463

之後再用堆分析工具,比如 visualVM、JProfile、MAT 等進行分析。和我們設置

-XX:+HeapDumpOnOutOfMemoryError 參數后,在發生 OOM 的時候 dump 的堆信息是一樣的。

注意,dump 的過程會比較慢,在這個過程中會發生 JVM 停頓,而且在使用 :live 參數后,會觸發 GC 操作。

jmap -clstats pid

Java 類加載器(ClassLoader)信息,包括加載器名稱、已加載類個數、佔用空間、父加載器、是否存活、類型信息。

jmap -finalizerinfo pid

查看等待被回收的對象。

jstat

jstat 主要用來通過垃圾回收相關信息來判斷 JVM 性能問題,也可以查看類加載、編譯的情況,主要的用法是通過持續的固定時間間隔的輸出來觀察。比如每 3 秒打印一次 GC 回收次數,連續打印 10 次,通過動態的變化來觀察 GC 是否過於密集。

下面是 jstat 的幫助手冊。

Usage: jstat -help|-options
       jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

Definitions:
  <option>      An option reported by the -options option
  <vmid>        Virtual Machine Identifier. A vmid takes the following form:
                     <lvmid>[@<hostname>[:<port>]]
                Where <lvmid> is the local vm identifier for the target
                Java virtual machine, typically a process id; <hostname> is
                the name of the host running the target Java virtual machine;
                and <port> is the port number for the rmiregistry on the
                target host. See the jvmstat documentation for a more complete
                description of the Virtual Machine Identifier.
  <lines>       Number of samples between header lines.
  <interval>    Sampling interval. The following forms are allowed:
                    <n>["ms"|"s"]
                Where <n> is an integer and the suffix specifies the units as 
                milliseconds("ms") or seconds("s"). The default units are "ms".
  <count>       Number of samples to take before terminating.
  -J<flag>      Pass <flag> directly to the runtime system.

通過 jstat -options 可以看到 jstat 支持查看哪些信息。

$ jstat -options
-class  #類加載情況 加載個數和空間使用
-compiler #即時編譯器信息
-gc  # GC情況 包括 young gc、full gc 次數、時間等
-gccapacity #年輕代、老年代的使用情況
-gccause #GC 統計信息和回收原因
-gcmetacapacity #显示有關metaspace大小的統計信息
-gcnew #新生代 GC 統計
-gcnewcapacity #新生代內存統計
-gcold #老年代 GC 統計
-gcoldcapacity #老年代內存使用情況
-gcutil #GC 匯總信息
-printcompilation #編譯方法統計

上述這些大多數可以對應到 visualVM 的這一部分显示

示例用法,如下是打印 5301 進程下的垃圾回收情況,-h 3 表示每 3 行輸出一次標題信息,3s 5 表示每 3s 輸出一次,一共輸出 5 次

jstat -gcutil -h 3 5301 3s 5

最後輸出的內容如下:

jstat -gcutil -h 3 5301 3s 5
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
 99.92   0.00  11.90  35.29  94.96  94.08     34   12.675     3    1.946   14.621
 99.92   0.00  11.90  35.29  94.96  94.08     34   12.675     3    1.946   14.621
 99.92   0.00  11.90  35.29  94.96  94.08     34   12.675     3    1.946   14.621
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
 99.92   0.00  11.94  35.29  94.96  94.08     34   12.675     3    1.946   14.621
 99.92   0.00  11.94  35.29  94.96  94.08     34   12.675     3    1.946   14.621

jcmd

jcmd 會將命令發送給 JVM。這些命令包括用於控制 Java Flight Recording(飛行記錄)、診斷命令等。 必須運行在 JVM 本地,不能遠程使用,並且必須用 JVM 啟動用戶執行。

通過 jps 命令找到一個 JVM 進程,然後使用下面的代碼可以看到 jcmd 支持的命令

#進程 5173 
jcmd 5173 help 

5173:
The following commands are available:
JFR.stop
JFR.start
JFR.dump
JFR.check
VM.native_memory
VM.check_commercial_features
VM.unlock_commercial_features
ManagementAgent.stop
ManagementAgent.start_local
ManagementAgent.start
GC.rotate_log
Thread.print
GC.class_stats
GC.class_histogram
GC.heap_dump
GC.run_finalization
GC.run
VM.uptime
VM.flags
VM.system_properties
VM.command_line
VM.version
help

基本包含了問題排查的常用命令,並且和上面介紹的幾個工具有部分重合。

通過命令 jcmd 5173 help GC.heap_dump 可以查詢到 GC.heap_dump 命令的使用方法,其他命令都可以通過這個方法找到使用說明

jcmd 5173 help GC.heap_dump
5173:
GC.heap_dump
Generate a HPROF format dump of the Java heap.

Impact: High: Depends on Java heap size and content. Request a full GC unless the '-all' option is specified.

Permission: java.lang.management.ManagementPermission(monitor)

Syntax : GC.heap_dump [options] <filename>

Arguments:
    filename :  Name of the dump file (STRING, no default value)

Options: (options must be specified using the <key> or <key>=<value> syntax)
    -all : [optional] Dump all objects, including unreachable objects (BOOLEAN, false)

然後通過如下代碼就可以 dump 堆信息下來了,和 jmap -dump 的作用一樣

jcmd 5173 GC.heap_dump /Users/fengzheng/jvmlog/jcmd_heap_dump.hprof

拋磚引玉就到此了,之後會對 jinfo、jmap、jstack、jstat、jcmd 做詳細說明,記得關注啊。

相關閱讀:

歡迎關注,不定期更新本系列和其他文章
古時的風箏 ,進入公眾號可以加入交流群

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

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

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

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

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

分類
發燒車訊

Python 命令行之旅:深入 click 之子命令篇

作者:HelloGitHub-Prodesire

HelloGitHub 的《講解開源項目》系列,項目地址:https://github.com/HelloGitHub-Team/Article

一、前言

在上兩篇文章中,我們介紹了 click 中的”參數“和“選項”,本文將繼續深入了解 click,着重講解它的“命令”和”組“。

本系列文章默認使用 Python 3 作為解釋器進行講解。
若你仍在使用 Python 2,請注意兩者之間語法和庫的使用差異哦~

二、命令和組

Click 中非常重要的特性就是任意嵌套命令行工具的概念,通過 和 (實際上是 )來實現。

所謂命令組就是若干個命令(或叫子命令)的集合,也成為多命令。

2.1 回調調用

對於一個普通的命令來說,回調發生在命令被執行的時候。如果這個程序的實現中只有命令,那麼回調總是會被觸發,就像我們在上一篇文章中舉出的所有示例一樣。不過像 --help 這類選項則會阻止進入回調。

對於組和多個子命令來說,情況略有不同。回調通常發生在子命令被執行的時候:

@click.group()
@click.option('--debug/--no-debug', default=False)
def cli(debug):
    click.echo('Debug mode is %s' % ('on' if debug else 'off'))

@cli.command()  # @cli, not @click!
def sync():
    click.echo('Syncing')

執行效果如下:

Usage: tool.py [OPTIONS] COMMAND [ARGS]...

Options:
  --debug / --no-debug
  --help                Show this message and exit.

Commands:
  sync

$ tool.py --debug sync
Debug mode is on
Syncing

在上面的示例中,我們將函數 cli 定義為一個組,把函數 sync 定義為這個組內的子命令。當我們調用 tool.py --debug sync 命令時,會依次觸發 clisync 的處理邏輯(也就是命令的回調)。

2.2 嵌套處理和上下文

從上面的例子可以看到,命令組 cli 接收的參數和子命令 sync 彼此獨立。但是有時我們希望在子命令中能獲取到命令組的參數,這就可以用 來實現。

每當命令被調用時,click 會創建新的上下文,並鏈接到父上下文。通常,我們是看不到上下文信息的。但我們可以通過 裝飾器來顯式讓 click 傳遞上下文,此變量會作為第一個參數進行傳遞。

@click.group()
@click.option('--debug/--no-debug', default=False)
@click.pass_context
def cli(ctx, debug):
    # 確保 ctx.obj 存在並且是個 dict。 (以防 `cli()` 指定 obj 為其他類型
    ctx.ensure_object(dict)

    ctx.obj['DEBUG'] = debug

@cli.command()
@click.pass_context
def sync(ctx):
    click.echo('Debug is %s' % (ctx.obj['DEBUG'] and 'on' or 'off'))

if __name__ == '__main__':
    cli(obj={})

在上面的示例中:

  • 通過為命令組 cli 和子命令 sync 指定裝飾器 click.pass_context,兩個函數的第一個參數都是 ctx 上下文
  • 在命令組 cli 中,給上下文的 obj 變量(字典)賦值
  • 在子命令 sync 中通過 ctx.obj['DEBUG'] 獲得上一步的參數
  • 通過這種方式完成了從命令組到子命令的參數傳遞

2.3 不使用命令來調用命令組

默認情況下,調用子命令的時候才會調用命令組。而有時你可能想直接調用命令組,通過指定 click.groupinvoke_without_command=True 來實現:

@click.group(invoke_without_command=True)
@click.pass_context
def cli(ctx):
    if ctx.invoked_subcommand is None:
        click.echo('I was invoked without subcommand')
    else:
        click.echo('I am about to invoke %s' % ctx.invoked_subcommand)

@cli.command()
def sync():
    click.echo('The subcommand')

調用命令有:

$ tool
I was invoked without subcommand
$ tool sync
I am about to invoke sync
The subcommand

在上面的示例中,通過 ctx.invoked_subcommand 來判斷是否由子命令觸發,針對兩種情況打印日誌。

2.4 自定義命令組/多命令

除了使用 來定義命令組外,你還可以自定義命令組(也就是多命令),這樣你就可以延遲加載子命令,這會很有用。

自定義多命令需要實現 list_commandsget_command 方法:

import click
import os

plugin_folder = os.path.join(os.path.dirname(__file__), 'commands')

class MyCLI(click.MultiCommand):

    def list_commands(self, ctx):
        rv = []  # 命令名稱列表
        for filename in os.listdir(plugin_folder):
            if filename.endswith('.py'):
                rv.append(filename[:-3])
        rv.sort()
        return rv

    def get_command(self, ctx, name):
        ns = {}
        fn = os.path.join(plugin_folder, name + '.py')  # 命令對應的 Python 文件
        with open(fn) as f:
            code = compile(f.read(), fn, 'exec')
            eval(code, ns, ns)
        return ns['cli']

cli = MyCLI(help='This tool\'s subcommands are loaded from a '
            'plugin folder dynamically.')

# 等價方式是通過 click.command 裝飾器,指定 cls=MyCLI
# @click.command(cls=MyCLI)
# def cli():
#     pass

if __name__ == '__main__':
    cli()

2.5 合併命令組/多命令

當有多個命令組,每個命令組中有一些命令,你想把所有的命令合併在一個集合中時,click.CommandCollection 就派上了用場:


@click.group()
def cli1():
    pass

@cli1.command()
def cmd1():
    """Command on cli1"""

@click.group()
def cli2():
    pass

@cli2.command()
def cmd2():
    """Command on cli2"""

cli = click.CommandCollection(sources=[cli1, cli2])

if __name__ == '__main__':
    cli()

調用命令有:

$ cli --help
Usage: cli [OPTIONS] COMMAND [ARGS]...

Options:
  --help  Show this message and exit.

Commands:
  cmd1  Command on cli1
  cmd2  Command on cli2

從上面的示例可以看出,cmd1cmd2 分別屬於 cli1cli2,通過 click.CommandCollection 可以將這些子命令合併在一起,將其能力提供個同一個命令程序。

Tips:如果多個命令組中定義了同樣的子命令,那麼取第一個命令組中的子命令。

2.6 鏈式命令組/多命令

有時單級子命令可能滿足不了你的需求,你甚至希望能有多級子命令。典型地,setuptools 包中就支持多級/鏈式子命令: setup.py sdist bdist_wheel upload。在 click 3.0 之後,實現鏈式命令組變得非常簡單,只需在 click.group 中指定 chain=True

@click.group(chain=True)
def cli():
    pass


@cli.command('sdist')
def sdist():
    click.echo('sdist called')


@cli.command('bdist_wheel')
def bdist_wheel():
    click.echo('bdist_wheel called')

調用命令則有:

$ setup.py sdist bdist_wheel
sdist called
bdist_wheel called

2.7 命令組/多命令管道

鏈式命令組中一個常見的場景就是實現管道,這樣在上一個命令處理好后,可將結果傳給下一個命令處理。

實現命令組管道的要點是讓每個命令返回一個處理函數,然後編寫一個總的管道調度函數(並由 MultiCommand.resultcallback() 裝飾):

@click.group(chain=True, invoke_without_command=True)
@click.option('-i', '--input', type=click.File('r'))
def cli(input):
    pass

@cli.resultcallback()
def process_pipeline(processors, input):
    iterator = (x.rstrip('\r\n') for x in input)
    for processor in processors:
        iterator = processor(iterator)
    for item in iterator:
        click.echo(item)

@cli.command('uppercase')
def make_uppercase():
    def processor(iterator):
        for line in iterator:
            yield line.upper()
    return processor

@cli.command('lowercase')
def make_lowercase():
    def processor(iterator):
        for line in iterator:
            yield line.lower()
    return processor

@cli.command('strip')
def make_strip():
    def processor(iterator):
        for line in iterator:
            yield line.strip()
    return processor

在上面的示例中:

  • cli 定義為了鏈式命令組,並且指定 invoke_without_command=True,也就意味着可以不傳子命令來觸發命令組
  • 定義了三個命令處理函數,分別對應 uppercaselowercasestrip 命令
  • 在管道調度函數 process_pipeline 中,將輸入 input 變成生成器,然後調用處理函數(實際輸入幾個命令,就有幾個處理函數)進行處理

2.8 覆蓋默認值

默認情況下,參數的默認值是從通過裝飾器參數 default 定義。我們還可以通過 Context.default_map 上下文字典來覆蓋默認值:

@click.group()
def cli():
    pass

@cli.command()
@click.option('--port', default=8000)
def runserver(port):
    click.echo('Serving on http://127.0.0.1:%d/' % port)

if __name__ == '__main__':
    cli(default_map={
        'runserver': {
            'port': 5000
        }
    })

在上面的示例中,通過在 cli 中指定 default_map 變可覆蓋命令(一級鍵)的選項(二級鍵)默認值(二級鍵的值)。

我們還可以在 click.group 中指定 context_settings 來達到同樣的目的:


CONTEXT_SETTINGS = dict(
    default_map={'runserver': {'port': 5000}}
)

@click.group(context_settings=CONTEXT_SETTINGS)
def cli():
    pass

@cli.command()
@click.option('--port', default=8000)
def runserver(port):
    click.echo('Serving on http://127.0.0.1:%d/' % port)

if __name__ == '__main__':
    cli()

調用命令則有:

$ cli runserver
Serving on http://127.0.0.1:5000/

三、總結

本文首先介紹了命令的回調調用、上下文,再進一步介紹命令組的自定義、合併、鏈接、管道等功能,了解到了 click 的強大。而命令組中更加高階的能力()則可看官方文檔進一步了解。

我們通過介紹 click 的參數、選項和命令已經能夠完全實現命令行程序的所有功能。而 click 還為我們提供了許多錦上添花的功能,比如實用工具、參數自動補全等,我們將在下節詳細介紹。

『講解開源項目系列』——讓對開源項目感興趣的人不再畏懼、讓開源項目的發起者不再孤單。跟着我們的文章,你會發現編程的樂趣、使用和發現參与開源項目如此簡單。歡迎留言聯繫我們、加入我們,讓更多人愛上開源、貢獻開源~

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

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

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

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

分類
發燒車訊

天啦!竟然從來沒有人講過 SpringBoot 支持配置如此平滑的遷移

SpringBoot 是原生支持配置遷移的,但是官方文檔沒有看到這方面描述,在源碼中才看到此模塊,spring-boot-properties-migrator,幸虧我沒有跳過。看到這篇文章的各位,可算是撿到寶了,相信你繼續往下看下去,定會忍不住點贊、收藏、關注。

效果

先放個效果吸引你 🙂

從 SpringBoot 2.0.0 版本開始,配置服務上下文,不支持 server.context-path,而需要server.servlet.context-path配置。但是只要加上以下一個官方依賴,就可以支持使用 server.context-path

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-properties-migrator</artifactId>
    </dependency>

server.context-path 所對應的屬性 ServerProperties#contextPath 在 Java 代碼中已不存在,server.servlet.context-path 所對應的的屬性在內部類 Servlet 中才有,為何加了此依賴就能實現如此神奇的效果呢。

原理

SpringBoot 對外部化配置原生支持遷移功能,所謂遷移,具體是指對應配置的屬性名變動,仍可以使用原來的屬性名配置。
spring-configuration-metadata.json 的信息可以輔助 IDE 進行配置的提示,也可以用來完成配置的遷移。非常的簡單。

相關文章:

通過閱讀代碼,獲得以下信息:

  1. 監聽 ApplicationPreparedEvent 事件(即:環境已準備事件),執行以下操作並收集信息
  2. classpath*:/META-INF/spring-configuration-metadata.json 中載入所有配置
  3. 從上下文的 environment 中過濾出提示的配置(滿足條件:1. deprecation 不為 null,且提示 level 為 error)
  4. 判斷是否兼容(兼容條件見下一節),提取出兼容的屬性
  5. 將 value 對應到 replacement 的 key,並將其屬性源命名為:migrate-原名
  6. 將配置遷移的新屬性源添加到 environment 中,且添加到原屬性源之前(優先級高)。
  7. 監聽事件:ApplicationReadyEvent(應用上下文已準備) 或 ApplicationFailedEvent(應用啟動失敗),打印以上步驟收集的遺留配置信息。以 warn 級別打印兼容的配置,以 error 級別打印不兼容的配置

配置兼容條件

根據元數據中定義的 type 判斷

  1. 如果舊類型、新類型其中之一為 null(元數據中未指定),則不兼容
  2. 如果兩個類型一樣,兼容
  3. 如果新類型是 Duration,而舊類型是 Long 或 Integer,則兼容
  4. 其他情況視為不兼容
  5. environment 中取配置信息,理論上支持 SpringBoot 所有的配置方式

效果

兼容效果:
棄用屬性(如果還存在)與替換后的屬性都會使用配置文件中的棄用的屬性名所對應的的值。

總結

使用配置遷移功能,需要以下步驟:

  1. 引入依賴:spring-boot-properties-migrator(支持配置遷移)、spring-boot-configuration-processor(生成元數據文件,如果已經有完整的,不需要此依賴)
  2. 元數據文件spring-configuration-metadata.json 中棄用屬性名對應的 properties 中必須有 deprecation(在additional-spring-configuration-metadata.json 中添加,相關文章: )
  3. deprecation 中需指定 levelerror
  4. deprecation 中需指定 replacement
  5. replacement 對應的屬性配置在元數據文件中存在,與棄用屬性兼容

經典示例之配置上下文

再說回一開始展示的配置上下文示例。

# 配置 servlet 服務上下文
server:
  context-path: test

從 SpringBoot 2.0.0 版本開始,以上配置不支持,點到配置元數據文件中(spring-configuration-metadata.json),發現如下信息:

{
  "properties": [
    {
      "name": "server.context-path",
      "type": "java.lang.String",
      "description": "Context path of the application.",
      "deprecated": true,
      "deprecation": {
        "level": "error",
        "replacement": "server.servlet.context-path"
      }
    },
    {
      "name": "server.servlet.context-path",
      "type": "java.lang.String",
      "description": "Context path of the application.",
      "sourceType": "org.springframework.boot.autoconfigure.web.ServerProperties$Servlet"
    }

替換屬性名為:server.servlet.context-path,此屬性在org.springframework.boot.autoconfigure.web.ServerProperties 中,且在類中可以發現,server.context-path 所對應的屬性 ServerProperties#contextPath 在代碼中已不存在,而是在內部類 Servlet 中有,也就是對應 server.servlet.context-path 的屬性才有。

但是其滿足配置兼容的條件,為什麼實際上使用卻好像不兼容呢?
其實是因為沒有引入依賴,當引入依賴,就會發現此方式配置可以起作用。

示例之兩種屬性都存在

代碼示例見

1、引入依賴

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-properties-migrator</artifactId>
</dependency>

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-configuration-processor</artifactId>
  <optional>true</optional>
</dependency>

2、Java 配置
此處故意保留棄用屬性

@Data
@Configuration
@ConfigurationProperties(prefix = "my")
public class MyProperties {
  /** the project name */
  private String name;

  private App app;

  @Data
  public static class App {
    private String name;
  }
}

3、元數據配置,spring-configuration-metadata.json 由程序生成,自定義配置放在 additional-spring-configuration-metadata.json

{
  "properties": [
    {
      "name": "my.name",
      "type": "java.lang.String",
      "description": "the project name.",
      "deprecation": {
        "reason": "test the properties-migrator feature.",
        "replacement": "my.app.name",
        "level": "error"
      }
    },
    {
      "name": "my.app.name",
      "type": "java.lang.String",
      "sourceType": "com.lw.properties.migrator.config.MyProperties$App",
      "description": "the project name."
    }
  ]
}

4、在 properties 或 yml 文件中配置

my:
  name: lw
  app:
    name: app

5、打印配置信息

@Slf4j
@SpringBootApplication
public class PropertiesMigratorApplication {

  public static void main(String[] args) {
    ConfigurableApplicationContext context =
        SpringApplication.run(PropertiesMigratorApplication.class, args);
    MyProperties myProperties = context.getBean(MyProperties.class);
    log.info("myProperties.name:{}", myProperties.getName());
    log.info(
        "myProperties$app.name:{}",
        Optional.ofNullable(myProperties.getApp()).orElse(new App()).getName());
  }
}

6、打印信息如下:

2019-11-23 21:42:09.580 WARN 109408 — [ main] o.s.b.c.p.m.PropertiesMigrationListener :
The use of configuration keys that have been renamed was found in the environment:

Property source ‘applicationConfig: [classpath:/application.yml]’:
Key: my.name
Line: 4
Replacement: my.app.name
Key: server.context-path
Line: 2
Replacement: server.servlet.context-path

Each configuration key has been temporarily mapped to its replacement for your convenience. To silence this warning, please update your configuration to use the new keys.
……… myProperties.name:lw
……… myProperties\(app.name:lw ……… serverProperties\)servlet.contextPath:/app

7、效果解析
在 yml 中棄用屬性名優先級更高,棄用屬性與新屬性都使用此棄用屬性名對應的值。

參考資料

SpringBoot 2.2.1.RELEASE 源碼
公眾號:逸飛兮(專註於 Java 領域知識的深入學習,從源碼到原理,系統有序的學習)

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

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

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

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

分類
發燒車訊

Facebook改進換臉術:無需“投喂”圖片,從視頻里直接變臉

  曉查 發自 凹非寺 
  量子位 報道 公眾號 QbitAI

  近兩年來,Deepfakes 讓許多歐美明星吃盡了苦頭,面對自己的頭像被替換到各種視頻中,卻無能為力。

  比如黑寡婦就對自己的臉被替換到小電影中感到很無奈,呼籲大家停止用 AI 作惡。

  而最近,Facebook 人工智能研究院讓換臉技術再次進化。

  過去 Deepfakes 這項技術需要很多準備材料:一是被替換人臉的原視頻,二是來自換臉人面部各個角度的照片。有這兩樣東西才能造出完美無暇的換臉視頻。

  而來自 Facebook 的技術不需要照片,可以從原視頻直接生成換臉視頻,甚至能對實時視頻進行換臉。

  它讓“大表姐”變得不再熟悉。 

  這項技術的換臉實際上是毫無違和感地修改五官特徵,好讓 AI 無法識別出,因此也就不需要照片了。

  而且 Facebook 的研究人員還表示,這項技術修改后的明星臉仍然可以被人識別出來,但是 AI 卻不行。 

  Facebook 研發這項技術可不是為了換臉好玩,最近因使用人臉識別技術飽受爭議,這家公司希望通過這項新技術來保護用戶的隱私。

  人臉識別和換臉技術對普通民眾的隱私也造成了很大的威脅。比如前一陣大熱的換臉應用 ZAO,讓每個人都享受到換臉帶來的樂趣,但同時也會收集用戶圖片。

  研究人員在論文摘要中說:“人臉識別可能會導致隱私丟失,而換臉技術可能會被用於製作誤導性視頻。”Facebook 用後者來去除視頻中的隱私信息。

  Facebook 聲稱,該技術屬於業內首創,足以抵禦複雜的人臉識別系統。

  Facebook 將在下周韓國首爾舉行的國際計算機視覺國際會議(ICCV)上介紹該工作。

  本周,Facebook 還聯合微軟和亞馬遜,提供 Deepfakes 換臉挑戰數據集,希望能夠提高識別換臉視頻算法的魯棒性,以控制假視頻的傳播。

  此舉頗有些以彼之矛攻彼之盾的意味。

  原文鏈接:

  https://venturebeat.com/2019/10/25/facebook-alters-video-to-make-people-invisible-to-facial-recognition/

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

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

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

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

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

分類
發燒車訊

是什麼觸發了宇宙大爆炸?


圖片來源:Christine Daniloff, MIT, ESA/Hubble and NASA

  1.

  根據大爆炸理論,我們的宇宙誕生於 138 億年前,從一個無限小的緻密“火球”,不斷地擴張膨脹,並慢慢冷卻。漸漸地,宇宙中形成了第一批恆星、星系,以及我們如今所見到的所有形式的物質。

  物理學家相信,就在大爆炸將宇宙推向不斷膨脹的進程之前,早期宇宙還經歷了另一個更具爆炸性的階段——宇宙暴脹。這個過程持續的時間不到萬億分之一秒,但膨脹的速度卻是以指數級增長的。  


Guth 的筆記

  上個世紀 80 年代,物理學教授 Alan Guth 首次提出了宇宙膨脹理論,該理論預測宇宙最初是一個極微小的物質點,其大小可能只有質子的千億分之一。這個點中充滿了超高能物質,能量非常之大,以至於內部的壓力產生了一種排斥性的引力——這就是暴脹背後的驅動力。就像火花之於引信一樣,這種引力以前所未有的速度將新生的宇宙向外推,在不到萬億分之一秒的時間內,使宇宙膨脹到接近原始大小的 10²⁷倍。

  許多天文觀測結果都支持了大爆炸和宇宙暴脹理論。但是,這是兩個截然不同的過程,科學家們一直難以理解其中一個是如何緊隨另一個之後出現的。

  在一項新的研究中,物理學家詳細地模擬了早期宇宙中一個可能連接了宇宙暴脹和大爆炸的中間階段。這個階段被稱為“再熱”,這一過程出現在宇宙暴脹末期和大爆炸開始之前的階段,將暴脹產生的冷的、均勻的物質轉變成超熱的、複雜的物質湯。

  論文的作者David Kaiser說:“后暴脹再熱時期為大爆炸創造了條件,在某種意義上,是它啟動了‘爆炸’,正是在這個橋樑時期,所有的事物都開始鬆動,物質的行為變得非常複雜。”

  2.

  對於這個連接了宇宙暴脹和大爆炸的橋樑階段,研究人員很好奇它最初會是什麼樣子。

  Kaiser 說:“再熱的最初階段應該用共振來標記。一種高能物質佔據主導地位,它在廣闊的空間中與自身同步來回擺動,導致爆炸式地產生新的粒子。但這種行為不會永遠持續下去,一旦它開始將能量轉移到另一種形式的物質上,它自身的擺動將在空間中變得更加起伏不平。我們想要測量的是,需要多長的時間共振效應才會破裂,產生的粒子才會彼此分散並且達到某種熱平衡,讓人想起大爆炸發生時的情況。”

  他們的計算機模擬中展示了一個很大的晶格,在這個晶格上,他們繪製了多種形式的物質,並追蹤了當某些條件被改變時,能量和分佈會如何隨之在空間和時間上發生變化。模擬的初始條件是基於一個特定的暴脹模型而設置的,這個模型是一組關於早期宇宙的物質分佈在宇宙暴脹期間的行為得到一系列預測。

  他們之所以選擇這一特定的暴脹模型,是因為它的預測與高精度的宇宙微波背景測量結果非常吻合。

  3.

  在模擬中,他們研究了兩種可能在暴脹期間佔主導地位的物質的行為,這些物質與希格斯玻色子非常相似。

  在進行模擬之前,研究人員對模型中的引力描述進行了一個微小的調整。我們如今看到的普通物質在引力下的作用應正如愛因斯坦廣義相對論中所預測的那樣;但在更高的能量下,比如在宇宙暴脹期間,物質的行為或許會略有不同,與之產生相互作用的引力是由量子力學修正過的。

  在廣義相對論中,引力的強度被表示為一個常數,物理學家稱之為是最小耦合,這意味着,無論一個特定粒子的能量為何,它都會以一個由普適常數所設定的強度對引力效應做出反應。

  然而,在宇宙暴脹的高能量下,物質與引力的相互作用會以一種更為複雜的方式進行。而量子力學效應預測,當與超高能物質發生相互作用時,引力的強度在空間和時間中會發生變化,這是一種被稱為非最小耦合的現象。

  研究人員將這一個非最小耦合項納入了他們的暴脹模型中,並觀察了物質和能量的分佈是如何隨着量子效應的漲落變化的。

  最後他們發現,量子修正過的引力效應對物質的影響越強,宇宙就會越快地從暴脹中寒冷、均勻的物質過渡到更熱、更多樣的大爆炸過程中特有的物質。

  “再熱是一個瘋狂的過程,一切都不受控制。我們發現,當時物質之間的相互作用非常強烈,以至於它可以相應地快速放鬆下來,為大爆炸創造了合適的條件。我們以前並不知道會是這個樣子,但這些都是我們用已知的物理學從模擬中得出的結論。這正是讓我們興奮的地方。”

  對於新的發現,其他物理學家認為,關於造成了暴脹階段的提議有數百種,但從暴脹階段到所謂的‘熱大爆炸’之間的過渡卻是人們最不了解的部分,而這篇論文則通過包含多個獨立的場和複雜的動力學在模型中精確地模擬后暴脹階段,開闢了新的領域。這是極具挑戰性的數值模擬,併為研究早期的宇宙非線性動力學提供了最新的技術。

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

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

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

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

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

分類
發燒車訊

台灣智慧移動產業協會成軍,電動機車將成下一個兆元產業

「台灣智慧移動產業協會」(SMAT) 在 8 月 21 日宣布成立,結合產官學研各界共同推動智慧運輸與乾淨能源,發展電動機車產業。

SMAT 理事長暨中華經濟研究院副院長王健全指出業者紛紛推出新款電動機車,讓 2019 年成為臺灣電動機車產業元年。期待政府能以穩定的政策持續推動產業發展,讓臺灣業者能夠在技術領先的優勢下,成為全球電動機車產業的規格制定者, 並進一步組成臺灣電動機車國家隊,搶下全球兆元市場。

行政院政務委員龔明鑫表示如何讓電動機車產業結合全台灣兩萬多家的機車行將是重要的下一步,政府已經準備好進行全台巡迴,協助機車行轉型,也讓電動機車的生態體系更加完善。立法委員趙天麟則期許 SMAT 的成立能幫助綠能運輸產業的發展,加速改善空氣環境。電動機車可以減少噪音並控制空氣汙染,能降低 PM 排放量達 49 倍。

王健全也宣布將在 9 月發表首本「 台灣電動機車產業發展白皮書」,並搶先透露白皮書的亮點。白皮書主要由工研院產業科技國際策略發展所協助撰寫,工研院指出台灣有 50 年的機車製造經驗,也是全球重要的電子產品生產國, 在兩大產業皆具備完整的研發、生產與供應鏈管理能力 。2018 年新售電動機車已佔總體機車的 11%,2019 年電動機車整車產值更可望達到 110 億元。白皮書也指出台灣在普通重型電動機車領域領先全球 3 到 5 年,未來有機會能成為下一個兆元產業。

大數據股份有限公司利用大數據網路分析與消費者民意調查,了解台灣消費者對電動機車的態度。大數據營運長林慧珍分析指出,消費者選購電動機車的三大原因是購車補助、追求環保和換電的便利性。調查發現電動機車的消費者和潛在消費者多數為年收入 60 萬人以下的民眾,因此對價格較為敏感。消費者有高達 94% 在意政府補助,67.7% 的民眾對政府補助的金額感到滿意,顯示電動機車的發展還很需要政府補助的支持。此外,64.3% 的使用者滿意換電,但僅有 42.8% 的使用者滿意充電,顯示主流消費者更偏好換電模式。

(合作媒體:。首圖來源:)

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

【其他文章推薦】

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

收購3c,收購IPHONE,收購蘋果電腦-詳細收購流程一覽表

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

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

※高價收購3C產品,價格不怕你比較

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

分類
發燒車訊

Gogoro 發表 Gogoro S2 ABS,光譜靛新色登場

Gogoro 推出了 Gogoro S2 系列的新車 Gogoro S2 ABS,首度在 Gogoro S2 車款上引進 ABS(Anti-Lock Brake System) 防鎖死煞車系統。

Gogoro S2 ABS 最大的特色在於前後輪都搭載重車等級 BOSCH ABS 10 雙迴路煞車系統,煞車時系統會以每秒 200 次的高頻率監測前後輪轉動狀況,在車輪即將鎖死的瞬間自動釋放煞車,避免車輪在緊急煞車時鎖死。 Bosch ABS 10 雙迴路煞車系統重量僅 580 克,在僅少量提升車重的狀況下提升穩定性和操控性能。

Gogoro 也與 MAXXIS 攜手研發 Gogoro S2 ABS 獨家的 ABS 性能胎,在雨天濕滑路面時更能有效發揮 ABS 系統的制動性,讓用戶騎乘更加安全。獨特的顏色也是一大亮點,Gogoro S2 ABS 車身運用多層次染色的超細緻顆粒珍珠漆,打造出新色光譜靛,車體顏色會隨著光線角度產生變化。此外,Gogoro S2 ABS 也調整了 USB 插孔的位置,移到左把手的下方。

Gogoro S2 ABS。

搭載重車等級 BOSCH ABS 10 雙迴路煞車系統是 Gogoro S2 ABS 的最大特色。

Gogoro S2 ABS 的 USB 插孔位於左邊把手的下方。

Gogoro S2 ABS 使用 iQ System 智慧鑰匙卡靠近 S 標誌解鎖。

Gogoro S2 ABS 安全極速達到時速 92 公里,最大功率為 7.6 kW,靜止加速到時速 50 公里僅需 3.8 秒。Gogoro S2 ABS 時速 40 公里之下單次換電續航里程為 110 公里,時速 30 公里時單次換電續航里程則為 150 公里。 空車重量為 105 公斤,加上電池則為 123 公斤,擁有 25L 的置物空間。

Gogoro S2 ABS 僅有光譜靛一款顏色,定價為 101,980 元台幣,補助最高的雲林縣汰換二行程機車換購電動機車補助最高 30,000 元,最低台幣 71,980 元起,即日起正式上市。購買 Gogoro S2 全車系任一車款,加贈市價約台幣 6,800 元的限量 ROAV 聯名墨鏡。

(合作媒體:。圖片來源:)

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

【其他文章推薦】

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

※高價3c回收,收購空拍機,收購鏡頭,收購 MACBOOK-更多收購平台討論專區

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

收購3c瘋!各款手機、筆電、相機、平板,歡迎來詢價!

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

分類
發燒車訊

科學家首次記錄下細菌「脫皮」的耐葯全過程

  本文作者:BioTalker

  面對抗生素的圍剿,細菌為了生存真是太拼了。

  近日,來自英國頂級學府紐卡斯爾大學的科學家 Katarzyna Mickiewicz 和 Jeff Errington 發現,人尿液中引起疾病的大腸桿菌,為了躲避抗生素的追殺,竟然能輕易地轉化成沒有細胞壁的L型細菌,讓青霉素等靶向細胞壁合成的抗生素,完全失去作用

  要知道,細菌體內的滲透壓可達到20-25 個大氣壓,在細胞壁遭到破壞的情況下,很快就會因過度吸水脹破死亡。青霉素等就是依靠這個原理殺死細菌的。


左:接連破裂的細菌右:正常生長的細菌

  不過,巧就巧在,尿液非常特殊,幾乎和細菌的細胞質是等滲的

  細菌:“為了活命,我連細胞壁都不要了,我看你咋搞我。”

  抗生素:“小賊,要不是因為尿液的高滲環境保護着你,你的小命早沒了。”

  讓研究人員沒有想到的是,L型細菌能輕鬆挺過抗生素治療周期(一般5-14 天),而且一旦抗生素撤離,L型細菌能在不到一天的時間內,分裂出有細胞壁的細菌,恢復往日活力,導致感染複發

  此外,在本研究中,科學家們還用視頻記錄下了細菌在L型和有壁型之間的轉換過程。證明了細菌變成L型是一種耐葯,導致疾病複發的方式。  實際上,L型細菌發現的並不晚。就在弗萊明發現青霉素的 7 年之後,德國生物學家 Emmy Klieneberger-Nobel 在英國 Lister 研究所研究念珠狀鏈桿菌時,第一次看到細胞壁缺陷型細菌(L型細菌的名字來自於 Lister 研究所的首字母)。在當時的認知條件下,Klieneberger-Nobel 的震驚程度可想而知。

  Klieneberger-Nobel:“沒有了細胞壁的保護,L型細菌怎麼還能存活而不炸裂?”

  現在我們已經知道,由於常用的細菌培養基是低滲的,因此不可能獲得L型細菌。不過,只要使用等滲培養基,就可以通過多種方法誘導出L型細菌,例如溶解細胞壁的溶菌酶,和青霉素等抑制細胞壁合成的抗生素。

  不過這種沒有細胞壁的L型細菌對細菌的生長繁殖有什麼作用,一直沒有定論。有科學家認為L型細菌廢了,沒啥致病能力;也有科學家認為,沒準兒這就是細菌的一個耐葯機制呢?但是都沒啥直接的有力證據。


在高滲條件下,抗生素處理,細菌失去細胞壁變圓,形成L型細菌

  其實,大家之所以對這個問題爭論不休,主要問題還是研究的比較少,沒有被重視起來,沒有認真地往耐藥方向想。

  長期以來,對於耐葯,有兩個主流認知:一個是產生耐葯基因了;另一個是產生了微生物持留菌。這個微生物持留菌引起的複發和因耐藥引起的複發還不一樣。

  微生物持留菌是細菌的一種特殊形態,可以說是,當外界的環境條件不適宜細菌生存時(例如抗生素治療),有一小部分細菌會改變細胞狀態,悄咪咪地蟄伏在一些細胞中長久地休眠,等抗生素打擊期過去之後,重新出來活躍,導致感染複發。

  有了這兩個認知,就很少有人把L型細菌當回事兒。


在低滲條件下,抗生素處理,細菌失去細胞壁,膨脹,炸了~

  微生物學家 Jeff Errington 把這個問題當做他的研究重點。去年,Errington 團隊在《細胞》雜誌上發文稱,在某些生理條件下,巨噬細胞等免疫細胞產生的溶菌酶,實際上對細菌起到了保護作用。因為,溶菌酶破壞了細菌的細胞壁,讓靶向細胞壁合成的抗生素沒了用武之地。

  為了進一步探索抗生素與L型細菌之間的關係,以及L型細菌與耐葯之間的關係,Errington 和 Mickiewicz 打算從尿路感染入手。

  尿路感染是一個非常常見的疾病,美國估計每年要在這個疾病上花費 16 億美元。

  其實不僅僅是美國患者受這個疾病的困擾。在全球範圍內,尿路感染每年影響着全球 1.5 億人,即使是接受抗生素治療,也仍有 30-50% 的患者在治療之後會複發


該圖片由 Gerd Altmann 在 Pixabay 上發布

  Mickiewicz 分析了 30 位複發性尿路感染患者的尿液樣本,她發現只有一個患者的尿液中沒有L型大腸桿菌,其他的患者都有。而且他們還用一些方法證實,他們看到的L型物體確實是細菌,而不是人的細胞產生的囊泡等物質。粗略估計的話,每毫升尿液中有 100 到 10000 個L型細菌

  體外實驗显示,在抑制細胞壁生成的抗生素存在的條件下,如果培養基對L型細菌沒有滲透保護作用,在 2.5 小時之內,細菌都膨脹、裂解死光光;如果在滲透保護的培養基中,大約經過 3 個小時,L型細菌就出現了

  如果想證明L型細菌是感染反覆發作的原因,就必須得證明L型細菌確實能轉化成有細胞壁的細菌。Mickiewicz 不僅證實了這一點,而且還用視頻記錄下了L型細菌,分裂增殖出正常細菌的全過程。在體外的條件下,整個過程大約需要 40 分鐘左右


撤除環境中的抗生素之後,L型細菌繁殖出有壁正常細菌

  最後研究人員還在斑馬魚體內觀察了L型細菌轉化成有壁細菌的過程。從研究人員將L型細菌注射到斑馬魚體內開始算起,20 個小時后取樣能檢測到有壁細菌的存在。而且他們還在斑馬魚體內觀察到了,在抗生素的處理下細菌變成L型細菌的過程。

  總的來說,這個研究表明,除了其他的耐葯機制之外,L型細菌也是一個耐葯途徑,而且無需基因變異,便可以通過丟棄細胞壁在抗生素治療期間頑強存活。更為重要的是,一旦撤出環境中的抗生素,這些L型細菌很快就會繁殖出一堆正常的有壁細菌出來

  研究人員認為,要想治好一些複雜的反覆感染,靶向細胞壁的抗生素要與其他類型的抗生素組合使用。

  *我看完這個論文一直在想一個問題,如果尿路感染的患者在接受靶向細胞壁的抗生素治療期間,每天都大量飲水,會不會有輔助治療的功效(我不知道,我瞎猜的哈
)。

  最後,我要說的是:你以為微生物就這麼點兒本事嗎?如果是這樣,那你就真的是“拿豆包不當乾糧”了。

  近二十年的研究表明,人體微生物的數量幾乎與人體細胞一樣多。這些看上去非常不起眼的小東西,與人類的多種疾病有關,從普通的感染和炎症,到精神疾病、心血管疾病,甚至是癌症,都有一股神秘的來自微生物的力量在背後操縱着

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

※公開收購3c價格,不怕被賤賣!

※想知道網站建置網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計後台網頁設計

※不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

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

※帶您來看台北網站建置台北網頁設計,各種案例分享