| 揚聲器 |
抄本 |
| 麥可·阿克曼 |
克里斯蒂。 |
| 克里斯蒂·斯潘 |
早安,邁克爾,你好嗎? |
| 麥可·阿克曼 |
你好嗎。 |
| 克里斯蒂·斯潘 |
太好了,讓我關閉我的電子郵件,這樣我就不會得到我了。 |
| 麥可·阿克曼 |
是的,我正在簡化我的計算機設置,這樣就不會出現任何異常。 |
| 克里斯蒂·斯潘 |
知道我點擊了我的工具列嗎? |
| |
我想我擁有了一切。 |
| |
你的周末過得怎麼樣? |
| 麥可·阿克曼 |
很好,你好嗎?週末過得怎麼樣? |
| |
好的。 |
| 克里斯蒂·斯潘 |
那麼你是否生活在黑暗中? |
| 麥可·阿克曼 |
海倫等我們。 |
| |
好的,是的,離總部很近,我會去參加真正的發現高峰會,是的。 |
| |
親自出席。 |
| |
這也令人失望,但是。 |
| |
耶喲,嘿。 |
| 克里斯蒂·斯潘 |
你好,早安,你好嗎? |
| 約翰 |
做得很好。 |
| 麥可·阿克曼 |
我需要在我身後建立一堵博學的牆,就像約翰你所擁有的。 |
| 約翰 |
我確實點擊了。 |
| |
這和丹尼的書在裡面,所以你不會認得出來的。 |
| 克里斯蒂·斯潘 |
看起來不錯。 |
| |
我對於上週的混亂表示抱歉,但是。 |
| |
我很高興能夠在線上與你們見面。 |
| |
由於我是支持 Nova 區域的首要團隊的一員,所以我認為他們不應該把我分配給你們。 |
| |
讓我們看看,我有幾件事需要處理,你們兩個是否都將顯示器設定為 2010 年 19 月 19 日。 |
| |
我願意。 |
| 約翰 |
讓我再確認一下。 |
| 克里斯蒂·斯潘 |
驚人的。 |
| |
和 |
| |
如果你的聲音很好,我想說沒有人會戴標誌。 |
| |
確保視野範圍內沒有任何可能導致侵犯版權的物品,我不知道你的書在那裡會有問題。 |
| |
是的,我們這樣做吧,以防萬一。 |
| 麥可·阿克曼 |
其中之一是來自前 JMP 發現峰會主題演講者的團隊。 |
| 約翰 |
誰是。 |
| 麥可·阿克曼 |
哦,我沒有,他來談論那個事情的解釋者。 |
| 克里斯蒂·斯潘 |
哦是的,我有那本書。 |
| 麥可·阿克曼 |
是啊是啊。 |
| 約翰 |
我沒有。 |
| |
儲存了電子郵件中的任何內容,但我可以繼續將其從電子郵件中提取出來。 |
| 麥可·阿克曼 |
我把我的網路攝影機放在一隻手臂上,這樣我就可以前後上下左右地移動它,就像我可以無限地擺弄它一樣。 |
| 克里斯蒂·斯潘 |
噢,這是個好主意。 |
| |
從來沒有,從來沒有在正確的地方見過我,是的。 |
| |
然後每個人都會點擊他們所有的應用程式展望任何我團隊。 |
| |
就像那樣。 |
| 麥可·阿克曼 |
親密的團隊不應該收到任何通知。 |
| 克里斯蒂·斯潘 |
你有 30 分鐘的時間,對嗎? |
| 麥可·阿克曼 |
是的,這就是我的理解。 |
| 克里斯蒂·斯潘 |
你們也會這樣嗎? |
| |
理想情況下,我們希望直接開始並直接完成。 |
| |
您是否想對您的螢幕進行測試共享,以便無論何時轉換。 |
| 麥可·阿克曼 |
因為我們將在我的螢幕和你的螢幕之間切換,所以讓我先分享我的螢幕。 |
| |
不需要共享聲音。 |
| |
所以。 |
| 麥可·阿克曼 |
讓我們回到從這裡開始。 |
| 克里斯蒂·斯潘 |
嗨,亞歷克斯,對的。 |
| |
好的。 |
| 麥可·阿克曼 |
所以你在上面,我們做了它做了它做了它做了它做了它然後我們被交給你。 |
| 約翰 |
是的,我們可以自己控制螢幕分享嗎?我們可以使用製作人。 |
| 克里斯蒂·斯潘 |
是的,你應該這麼做。 |
| |
哦,你的背景看起來很棒。 |
| 約翰 |
謝謝。 |
| 克里斯蒂·斯潘 |
我應該擁有它。 |
| 麥可·阿克曼 |
我想我們可以更統一。 |
| 約翰 |
不,我們應該有自己的個人,但我沒有。 |
| |
是的。 |
| 克里斯蒂·斯潘 |
是的,我們去找麥可。 |
| 約翰 |
是的。 |
| |
我想我不會在屏幕上進行太多的鏈接,大部分都是談話,然後我們會進行屏幕共享,然後。 |
| 麥可·阿克曼 |
我不確定當螢幕共享時我們能看到什麼。 |
| 克里斯蒂·斯潘 |
好吧,無論何時我拿回錄音。 |
| |
我得到了四種不同的。 |
| |
版本中有一個包含你,但有一個不包含你,我不確定 Jeff Perkinson 是否會編輯所有內容,所以我不知道他會選擇哪一座山。 |
| |
我認為他想向演講者表明這一點。 |
| 麥可·阿克曼 |
我認為我在螢幕上看到了。 |
| |
順便說一下,只要點擊滑鼠右鍵,就可以關閉圖示。 |
| 約翰 |
在管理混淆視窗上,它看起來像。 |
| 克里斯蒂·斯潘 |
那麼,這真的很難做到嗎? |
| 約翰 |
哦,是的。 |
| |
那麼右鍵單擊並查看。 |
| 麥可·阿克曼 |
是的,他覺得很酷。 |
| |
因為我不記得具體在哪裡。 |
| |
夥計,我從來沒有在桌面上打開過圖標,我只是讓一些東西安裝到上面,所以如果我打開它就像。 |
| 約翰 |
是的。 |
| 克里斯蒂·斯潘 |
所以,邁克爾,當你完成的時候,你只會說好的,把它交給你,在你的螢幕共享上,然後我們就從那裡開始,我們不會真的休息,換句話說,是的。 |
| 麥可·阿克曼 |
我的房間裡有一個黃色過濾器。 |
| 克里斯蒂·斯潘 |
哦,你有一盞你喜歡的紅燈。 |
| 麥可·阿克曼 |
讓我變得憂鬱,是的。 |
| 克里斯蒂·斯潘 |
我還沒有投資過這些,我的桌子很小,而且我這裡有很多空間。 |
| 麥可·阿克曼 |
是的,我很早就獨立了,我的老闆一直抱怨我的麥克風品質和相機質量,所以我想,好吧,你給我買一個新的麥克風相機。 |
| 克里斯蒂·斯潘 |
真棒,我沒有買到這個新耳機。 |
| 麥可·阿克曼 |
讓我趕緊去關門吧。 |
| 克里斯蒂·斯潘 |
哦,好的,是的,如果你認識毛茸茸的朋友或孩子在身邊跑來跑去,這一點很重要。 |
| 約翰 |
是的,都不好,所以好吧,我會關上門。 |
| 克里斯蒂·斯潘 |
和 Johan 你在哪裡? |
| 約翰 |
在公司。 |
| 克里斯蒂·斯潘 |
比我的好哦。 |
| |
充分。 |
| 約翰 |
噢,你去過。 |
| 克里斯蒂·斯潘 |
我有一個朋友嫁給了。 |
| |
哥本哈根的一位小伙子來自丹麥,所以我們就去那裡拜訪他。 |
| |
噢,是的,很漂亮。 |
| 克里斯蒂·斯潘 |
好的,如果我能讓你們說出你們的公司名稱和摘要標題那就太好了。 |
| |
這不是為了錄音,只是為了讓傑夫辨識什麼是你的。 |
| 麥可·阿克曼 |
名字是肯定的,我的名字是 Michael increment,我是 novozymes 的,摘要標題就像上傳照片一樣簡單。 |
| |
關於包裝和帳單的一些事情我忘記了具體細節。 |
| 克里斯蒂·斯潘 |
沒關係。 |
| 麥可·阿克曼 |
大家好。 |
| 約翰 |
我的名字是聯合國。 |
| |
也毫無意義。 |
| 克里斯蒂·斯潘 |
我們將錄製這段影片並將其發佈到發現高峰會上,供公眾觀看,如果您獲得許可使用此錄音,會怎麼樣? |
| 麥可·阿克曼 |
我們願意,我也願意。 |
| |
當你去的時候。 |
| 約翰 |
哦,是的,對不起,對不起,我只是在胡思亂想。 |
| 克里斯蒂·斯潘 |
好的,那麼。 |
| |
讓我先為你關閉我的相機。 |
| |
沒人想見我。 |
| 克里斯蒂·斯潘 |
我想我們已經準備好了,你們準備好了嗎? |
| 麥可·阿克曼 |
我想我們就從我的螢幕開始吧。 |
| 克里斯蒂·斯潘 |
不管你準備好了沒有,讓我們看看時間有多長。 |
| |
909,所以從技術上講,你可以到 939,但是。 |
| |
無論何時你準備好了,都可以給予或接受保險絲。 |
| 麥可·阿克曼 |
大家好,歡迎參加我們今天的「Y'All」主題演講。這是一個我們在 Novozymes 內部建立的插件包管理器,用於實現 JMP 插件的自動化共享、更新以及腳本的維護,服務範圍涵蓋我們全球公司。我是 Michael Akerman,我的共同演講者是 Johan Olsen。 |
| |
今天,我想,我們想和你們談談 Y'All,並向你們介紹這個工具包,以便任何對它感興趣的人都可以… |
| |
……無論是個人用途還是組織用途,想要使用此工具包的使用者都應該知道如何取得、開始使用,以及它是什麼。因此,讓我們先來介紹一下我們是誰,以及我們為何創建 Y'All… |
| |
……Y'All 的核心功能以及使用者體驗。 Johan 會為您介紹使用者使用這款工具包時會遇到的情況。 |
| |
我們將深入了解用戶與 Y'All 工具包互動時背後發生的情況,然後進行總結和回顧,並提供一些關於在您的組織中採用 Y'All 的提示(如果您發現它對您的目的有趣)。 |
| |
我們是諾維信公司的資料科學家。我的共同主持人是約翰·奧爾森。他是一位從事農業和工業生物解決方案應用研究的資料科學家。 |
| |
我是 Novozymes 同一部門的高級資料科學家。如果您想了解 Y'All 或其他任何信息,我們在這裡提供了我們的聯繫方式。請隨時與我們聯繫。 |
| |
Johan 的信箱是 jpko@novozymes.com,他是 JMP 使用者社群的 JPKO。我的信箱是 mxak@novozymes.com。 |
| |
Michael Akerman 是 JMP 用戶社群的 Michael mxak,如果您對 Y'All 有任何問題、跟進或評論,或者希望改進我們已經建立的內容和正在使用的內容,請隨時與我們聯繫。 |
| |
我們為諾維信工作。諾維信是一家全球生技公司。我們致力於建構可持續發展的生物解決方案… |
| |
……助力全球各行各業提升績效、降低成本。我們支持農業和生物燃料、家居護理、食品飲料、動物保健等眾多行業… |
| |
……透過這些生物解決方案。我們在全球擁有6000多名員工,其中數百名是JMP用戶。 |
| |
我之所以提到這一點,是因為我們擁有大量 JMP 用戶,我們支持他們,並與他們合作,他們都在使用 JMP 並在 JMP 中建立事物,這對大家來說確實是一種啟發。 |
| |
我們公司的宗旨是“共同尋找生物學答案,讓不斷發展的世界過上更美好的生活——讓我們重新思考明天。” |
| |
正如我所提到的,諾維信公司擁有大量的 JMP 用戶。 |
| |
因此,我們希望讓他們更輕鬆地使用 JMP 腳本和 JMP 插件,並使他們的程式碼更易於重複使用和發現。 |
| |
所以首先,我們希望更新過程簡單易行。我們注意到,諾維信公司內部的員工都在透過電子郵件來回發送處方。 |
| |
有些人會把 JSL 檔案發送到個人網路磁碟機。有些人會把它放在隨身碟上,然後四處分發。我們希望讓分發新的和更新的 JMP 腳本盡可能輕鬆便捷。 |
| |
我們想建立一個檔案庫來保護程式碼。我們有許多 JMP 用戶,所有這些工作對組織來說都意義非凡。 |
| |
因此,所有有價值的程式碼都儲存在一個中央儲存庫中,並進行備份和存檔。 |
| |
我們希望隨著時間的推移追蹤版本,因此隨著腳本的變化和改進,我們希望能夠看到這些變化並追蹤這些變化。 |
| |
我們希望讓您輕鬆發現和重複使用腳本,因此如果您是 JMP 開發人員… |
| |
....如果您是編寫 JSL 腳本的開發人員,您可以找到其他開發人員編寫的相關腳本並對其進行改進或... |
| |
根據您的需求,在這些腳本的基礎上進行建置。因此,請方便地取得這些腳本並基於它們進行構建,同時也要方便地共用、匯入和重複使用組織中其他成員認為有用的 JSL 函數。 |
| |
因此,為了實現這一目標,我們將三個元件整合在一起。我們有一個 Python 建置腳本、一個 GitLab 介面和一個 JSL 載入和更新腳本,它們都在這個工具包中協同工作。 |
| |
Python 建置腳本是一個自動化腳本,將在 Python 3 或更高版本中運行,可自動解析並將 JSL 檔案建置為插件選單結構。 |
| |
它還會編寫插件定義檔。它會產生一個導入的自訂函數腳本,將所有這些可重複使用的實用函數新增至 JMP 腳本索引和 JMP IDE 中,並將其全部壓縮成一個 .jmpaddin 檔案供使用者使用。 |
| |
GitLab 是我們為使用者提供的與插件腳本互動以及使用插件建構器本身的介面。 GitLab 是 GitHub 的開源替代品或競爭對手。 |
| |
我們已在 Novozymes 內部發布了此信息,它提供了一個非常簡單的點擊用戶界面,用於將腳本上傳到這個中央存儲庫...... |
| |
...所有這些腳本都存儲在這裡並且構建實際上發生在這裡。 |
| |
CICD 管道(代表持續整合持續部署)會自動執行 Python 建置腳本並透過發布版和 Beta 版管道分發插件,以便使用者可以... |
| |
....穩定的品質控製版本,或者如果他們是開發人員,他們可以使用該工具包中使用的每個腳本的最新版本獲得頻繁的快速發布。 |
| |
最後,我們得到了 JSL 的載入和更新腳本。當 JMP 打開並加載此插件時… |
| |
他們可以檢查,它會在所選管道(測試版或發布版)上檢查新版本,並提供下載和更新該插件包的服務。這也會將自訂函數匯入腳本索引。 |
| |
任何 JMP 用戶都可以在 Y'All 中輕鬆提交腳本,就像在社交媒體上上傳照片一樣簡單。 |
| |
您進入使用者介面,點擊上傳按鈕,幾秒鐘後它就會在 Y'All 的測試頻道上可用。 |
| |
我們有這些腳本的自動版本控制和存儲,自動或手動 JMP 插件更新,因此當 JMP 打開時,Y'All 將提供更新... |
| |
……或使用者可以選擇透過 Y'All 選單手動更新 Y'All。 |
| |
如果您是編寫腳本的開發人員,我們提供 Beta 版本管道,方便您快速建置和測試,以便在更新腳本和進行更改時獲取插件的最新版本。此外,我們也提供發布管道,方便您進行受控部署和品質控制。 |
| |
這為我們提供了可發現和可重複使用的 JSL 文件,以便人們可以查看 Novozymes、Y'All 用戶提交的腳本文件結構,並查看... |
| |
……找到符合他們想要的目的的腳本並根據自己的目的進行修改。 |
| |
我們還在腳本索引中添加了方便的實用函數;您可以看到一個小截圖… |
| |
....在左側並進入 JSL 編輯器,因此建置腳本會自動將可匯入且可重複使用的函數新增至 JMP 腳本索引中,並使用一個很好的小文件字串(如果可用)來描述該函數的工作原理和使用方法。 |
| |
我想花點時間確認一下我們在 Y'All 中包含的一些用於演示的程式碼。 Novozymes 內部使用的程式碼大多是 Novozymes 系統特有的,公司外部無法使用。 |
| |
所以我從 JMP 用戶社群中抓取了一些腳本,並將它們添加到我的部落格中,僅供演示之用。您可以隨意保留這些腳本,也可以從 Y'All 中刪除它們… |
| |
……如您所願。我們找到了 Xan Gregg 和 Craige Hales 所寫的 JSON 解析器腳本。我們還找到了在 2020 年 JMP Discovery 高峰會上展示的資料清理腳本助手… |
| |
……作者:Jordan Hiller 和 Mia Stephens。我們在 2020 年 Discovery 高峰會上展示了 Heidi Hardner 和 Serkay Olmez 的圖像表工具。 |
| |
Nick Holmes 編寫的 Color Row Selection.jsl。 Byron Wingerd 編寫的多 Y 軸圖表,以及自動驗證設置,我記得也在 JMP Discovery 高峰會上展示… |
| |
……去年由 Mike Anderson 開發,我們為 Riffyn 資料擷取軟體 Riffyn Nexus 提供了一套可導入的功能... |
| |
……與他們的 API 配合使用,該 API 由 Riffyn 編寫,並經許可從其 Riffyn 工具 JMP 插件中摘錄。這是我們在 Novozymes 大量使用的工具。我們之所以添加此功能,是因為如果有其他 Riffyn 用戶,您也可以隨意使用此程式碼。 |
| |
好了,說完了這些,我們想開始一些現場演示,首先是用戶體驗,以及用戶在使用 Y'All 工具包時看到和操作的內容。接下來,我將把演示權交給我的共同主持人 Johan。 |
| |
約翰,你被靜音了。 |
| 約翰 |
謝謝你,麥可。 |
| |
抱歉。我只能分享我的螢幕了。 |
| |
你看到了嗎? |
| 麥可 |
是的。 |
| 約翰 |
好的。 |
| |
正如邁克爾所說,我將帶您了解使用 Y'All 的用戶體驗。 |
| |
Y'All 的使用者體驗其實分為三個層次。絕大多數用戶基本上都把它當成內建的 JMP 平台來使用。他們… |
| |
...點擊腳本並運行它們,以實現其預期目的。我們還有一個相當大的用戶群組,他們貢獻腳本,也正在學習如何… |
| |
你可以貢獻一些簡單的腳本。我們還有一小部分開發者和維護人員(??)負責更高階的工作,我們也會嘗試加入一些。 |
| |
首先,Y'All 的用法非常簡單。安裝非常簡單,只需點擊我們在 GitLab 倉庫中創建的構建工件 (??) 鏈接,下載 JMP 編輯文件並用 JMP 運行即可。 |
| |
現在這促使我進行更新,這次我將取消,但您可以在這裡看到我的選單列上,我有 Y'All 選單... |
| |
....使用 Michael 提到的一些演示腳本。我不會詳細介紹這些腳本,因為它們實際上並非 Y'All 軟體包的一部分,而只是為了演示目的而包含的。但我要做的是嘗試深入研究… |
| |
……哎呀,啟用,抱歉,這已經啟用了。啟用 beta 測試,這樣,現在我們開始創建一些東西,我們就可以立即看到它們。 |
| |
大多數用戶都會停用 Beta 測試,在主要版本發布後開啟 JMP 時會收到更新提示,更新間隔為幾週一次。但對於啟用 Beta 測試的用戶,Beta 分支的更新時間可能是每天幾次,也可能是每週幾次。 |
| |
這就是一般用戶基本上能得到的內容。 |
| |
如果您想為此貢獻腳本,有幾種方法可以做到。一種方法是透過 GitLab UI。現在,我們剛剛看到的選單結構已在... 中進行了鏡像。 |
| |
...目錄結構在... |
| |
...存儲庫。因此創建一個新的... |
| |
...選單或子選單就像建立新目錄一樣簡單。在這裡,我們就稱之為... |
| |
....“演示” |
| 約翰 |
並添加它。 |
| 約翰 |
如果我們想要新增腳本,我們可以在 JMP IDE 中簡單地建立它,這樣就可以使其變得非常簡單。 |
| |
你好世界。 |
| |
這樣就足夠了。實際上還有一些額外的細節,那就是用一種好聽的方式命名選單項,以便獲得工具提示。我們實現了 [???] 或代碼魔法,也就是說,如果你一開始就寫註解掉,哎呀。 |
| |
你呢。 |
| |
菜單名稱。 |
| 麥可·阿克曼 |
大家好。 |
| |
菜單名稱。 |
| 約翰 |
Y'All 菜單名稱 |
| 麥可·阿克曼 |
老習慣了。 |
| 約翰 |
我們就叫它「你好」。然後是「你們」工具提示。 |
| |
好的,讓我們繼續保存它。 |
| |
我想,隨便放在哪裡,例如桌面。然後上傳到這裡。 |
| |
是測試嗎? |
| 麥可·阿克曼 |
這是腳本,但應該沒問題。 |
| 約翰 |
現在... |
| |
一旦我們上傳了這個文件,我們就會在這個自動[聽不清楚]中觸發一個管道。 |
| |
[聽不清楚] 系統,先複製儲存庫,然後... |
| |
....之後建立插件,這將在重新啟動 JMP 時提示, |
| 約翰 |
並更新所有編輯。 |
| 約翰 |
一旦我們選擇更新,就會出現演示選單和測試腳本。 |
| |
這是向 JMP 貢獻腳本最簡單的方法。如果您熟悉 Git,也可以使用更經典的 Git 工作流程。這裡只需打開一個批次視窗。讓我… |
| |
我們可以克隆倉庫了。我們回到…這裡展示的一些內容是專門用於 GitLab 的,我們這裡就用到了 GitLab。 |
| |
但在其他遠端儲存庫編碼、程式碼託管系統中也會類似。 |
| |
現在我們正在複製倉庫,這樣我們就可以在本地系統中擁有一個完整的倉庫鏡像。與之前類似,我們可以在這裡看到鏡像的目錄結構,接下來我們嘗試建立一個… |
| |
另一個腳本。 |
| |
為此。 Y'All 選單名稱已改進 |
| |
你好。 |
| |
說我們願意,也許這次...... |
| |
....開啟一個提示。 |
| |
它說你好,世界。 |
| |
現在,我們可以使用 JMP 內建的函數之一。讓我們轉到腳本索引,我們可以… |
| |
....搜尋 Y'All utils。 |
| |
並找到 errorModal 函數,它附帶一個小文件字串,說明如何使用它。 |
| |
而且它已經被導入了... |
| |
Y'All 實用程式 errorModal |
| 約翰 |
我們可以說「你好,世界」。 |
| 約翰 |
讓我們看看這個。 |
| |
進入我們的儲存庫... |
| |
....在演示下。然後推送程式碼。 |
| |
現在程式碼被推送到遠端儲存庫,觸發 CICD 管道,只需... |
| |
……幾秒鐘後,應該能夠看到管道正在運行並且... |
| |
....很快。 |
| |
還沒開始。 |
| |
也許我有點... |
| |
……不耐煩。就這樣。 |
| |
所以,如果我們去檢查 Y'All 的更新,一定會看到一個新更新。是嗎? |
| |
我們將選擇更新... |
| |
....插件,現在演示將擁有我們改進的 hello world。 |
| |
好的,我想這就是我為用戶演示所準備的。 |
| 麥可·阿克曼 |
謝謝,Johan。如果你同意的話,我就重新接管螢幕分享。 |
| 約翰 |
是的。 |
| 麥可·阿克曼 |
我想稍微了解一下這種使用者體驗背後的原理。所以我將在 Visual Studio Code 中查看這段程式碼。 |
| |
下載完 Zip 檔案後,您可以隨時隨地查看。為了方便查看,我先快速進入禪定模式。開始吧。 |
| |
每當 Johan 上傳該腳本時,GitLab CICD 管線就會運作。於是他進入了 Git 倉庫… |
| |
……然後他點擊加號按鈕上傳了一個腳本,並啟動了 CICD 管道。這是一個定義伺服器應該如何應對這種情況的小腳本。 |
| |
一個準備步驟和一個建置步驟... |
| |
....它將 Git 儲存庫及其中的所有檔案(包括 Johan 的新腳本)克隆到工作目錄中,其中... |
| |
……這個稱為運行器的處理模組可以處理該程式碼。然後它構建了程式碼,因此它運行這個建置階段,在這個階段它... |
| |
CD(切換目錄)進入建置目錄並執行 Python 建置腳本。其實就是這麼簡單。它會將所有這些新檔案克隆到一個工作資料夾中,然後移動到該資料夾中,並在 Python 3 中執行 Python 建置腳本。 |
| |
那麼,我們來看看那個 Python 建置腳本。我要點擊“控制”選項卡,找到它。它是 build_yall.py。 |
| |
程式碼量很大,但如果你在看這段程式碼時,想了解如何瀏覽,請一直向下捲動到 process 函數。它顯示為 def process。 |
| |
這是建構 Y'All 的主要程式碼,一步一步來。我們會在過程中逐步了解它。 |
| |
首先發生的是 Python 腳本建構了一個選單層次結構。讓我們來看一下。它的作用是創建一個嵌套的 Python 字典,並在 src/scripts 下查找該資料夾結構… |
| |
……然後把找到的所有 JSL 檔案拉到一個字典裡,這個字典包含 JSL 檔案的名稱、工具提示和檔案位置。基本上,它會逐個資料夾地建構這個嵌套字典,然後逐個遍歷。 |
| |
然後,我們檢查每個 JSL 檔案的命令名稱。我們嘗試解析這些文件,並查找 Johan 在腳本頂部添加的 Y'All 選單名稱和 Y'All 工具提示… |
| |
...定義 JMP 外掛程式選單中的按鈕名稱和工具提示。 Y'All 安裝時,會顯示該 Y'all 選單,並說明這些選單的名稱以及滑鼠懸停在選單上時工具提示的內容。 |
| |
如果找不到 Y'All 選單名稱或 Y'All 工具提示之類的魔法指令,它就會直接使用沒有工具提示的腳本名稱。所以 test.jsl 就會變成 test,就像你在 Johan 那裡看到的。 |
| |
選單中的命令字典按字母順序排列,以便於查找,但幫助和設定選單除外,它們會彈出到頂部,使其始終位於選單頂部。 |
| |
因為幫助和設定很重要。所有這些資訊都會寫入 JMPcust 檔案。 |
| |
因此,.jmpcust 文件本質上是一種標記語言文檔,它定義了 JMP 如何... |
| |
選單按鈕應該是什麼,選單本身應該在哪裡,工具提示應該是什麼,都在這個 .jmpcust 檔案中定義。 |
| |
我要把控制標籤頁轉到“Y'All”,這樣你們就能看到它是什麼樣子了。它實際上是一堆關於菜單的定義… |
| |
……以及菜單的名稱和內容。我們可以看到幫助和設定選單包含檢查 Y'All 更新、切換 Beta 測試模式等等。 |
| |
因此,Python 腳本將使用此寫入 jmpcust 檔案函數自動寫入。 |
| |
然後我們要編寫插件定義檔。也就是 addin.def 和 version.txt。 Addin.def——我來舉個例子——有點…… |
| |
...JMP 用於識別外掛程式並尋找版本號以及支援的最低 JMP 版本的描述。 |
| |
我們選擇的是 12。這對我們來說有點隨意,只是為了不用擔心 12 之前的事情。如果您自己開始使用這個,可以在 Python 程式碼中更改它。插件版本也在這裡定義,如您所見。 |
| |
我們將其寫入名為 version.txt 的檔案中,以便您剛剛在 addin.def 中看到的相同整數也會出現在 version.txt 中。 |
| |
原因是這是一個我們可以遠端讀取的小檔案。我們可以在伺服器上透過 HTTP 協定在 JMP 中開啟它… |
| |
....並在 version.txt 檔案中快速查看版本號,並與目前版本進行比較。因此,如果我們目前安裝的版本與 version.txt 檔案中的版本號碼不符... |
| |
……這意味著我們需要更新,或至少可以更新。我們使用的版本號碼是執行該程式的日期和時間(UTC 時區)。 |
| |
我們將其轉換為自 1970 年以來的基本秒數。因此它是一個整數,可以轉換回日期時間格式。 |
| |
所以我們可以用整數形式比較這兩個數字,這很棒。我們可以輕鬆判斷它們是大於還是小於對方,並且仍然可以將其轉換回日期。所以,在 JMP 中儲存版本號碼對我們來說是一種非常有效的方法。 |
| |
最後。 |
| |
接下來我們要做的事情——我們已經編寫了那些附加深度文件——就是創建一個自訂函數腳本。這有點奇怪,也有點難解釋。我會盡力快速簡潔地講解。 |
| |
JMP 有兩種定義自訂函數的方式。一種是使用 JMP 腳本語言中名為 function 的函數,它的作用是什麼呢?我會在這裡切換到 utils.jsl 和 Y'All 的 importables 子目錄。 |
| |
Function 定義了一個自訂函數,可以從其他位置使用和呼叫。您可以使用命名空間來定義它。在本例中,我們定義了命名空間 Y'All utils... |
| |
……函數名為 recode if。它接受這些參數,我們得到了這個文檔字串,函數程式碼也寫在這裡。 |
| |
在 JSL 中編寫自訂函數的第二種方法是使用新的自訂函數 function,它與 function 不同。我相信這是在 JMP 14 中添加的。 |
| |
新自訂函數的作用是將函數新增至 JMP 腳本索引和 JSL IDE 中,以便可以非常輕鬆地使用該函數並在其他地方透過文件重複使用它。 |
| |
因此,函數的優勢在於它可以一直工作到我甚至不知道 JMP 的哪個版本... |
| |
……在我使用 JMP 之前。新的自訂函數的優勢在於它更加強大,而且你可以獲得文件和 JMP 腳本索引,還可以在 JSL IDE 中為其著色,並且… |
| |
....編寫程式碼時提供一些提示。我們喜歡新的自訂函數,但我們希望在 JMP 14 之前支援 JMP。所以建置腳本… |
| |
....這裡,將主要解析可導入目錄,尋找與該函數函數函數函數匹配的任何函數定義... |
| |
....在 JSL 中,帶有文件字串。因此,它會嘗試解析斜線星號分隔之間的文件字串,並將其提取到一個新的自訂函數中。您可以在此處查看範例。 |
| |
我們採用該 recode if 函數,現在將其自動重寫為 Y'All utils 命名空間中名為 recode if 的新自訂函數。 |
| |
我們有一個原型、一個描述和一個腳本索引類別,所有這些都顯示出來。所以所有這些都自動提供給 JMP 開發人員。所以你可以使用 JSL 中的舊函數編寫程式碼,並且仍然可以獲得這個 JMP 腳本索引… |
| |
...透過自動使用 Y'All 建置腳本來實現。向下滾動到此處查看我的流程代碼。 |
| |
寫完這些之後,我們現在開始建立插件。 JMP 插件使用的是經過修改的 Zip 格式。因此,我們使用 Python 3 將其壓縮,並重新命名為 YALL.jmpaddin,現在就可以在 CICD 運行器的工作目錄中使用了。 |
| |
因此,此建置腳本完成後,此 CICD 管道的最後一步是進入該工作目錄並上傳工件。 |
| |
建置工件是 GitLab CICD 概念,我們將這兩個檔案 YALL.jmpaddin 和 version.txt 上傳到伺服器並透過特定的 URL 提供它們。 |
| |
因此該 URL 始終是一致的,並且與我們在 GitLab 中運行它的分支相關聯,因此我們使用的是測試版而不是主要發布版本。 |
| |
現在,在 JMP 中——我要跳過去,哈! …… |
| |
....到 autoUpgrade.jsl。這是我們檢查插件新版本的地方。當 JMP 載入時,Y'All 將運行這個自動升級腳本… |
| |
....它會在 GitLab 倉庫中找到這些新版本。您可以看到,我們在這裡加載了 beta 標誌,無論是在 beta 模式還是主模式下。 |
| |
我們在特定頻道中尋找該模式。所以我們正在拉… |
| |
…。根據所選頻道,從特定的 URL 進行查找。因此,如果我們處於測試模式,它會尋找測試頻道。如果我們處於主模式,它會尋找主頻道。然後,我們會尋找 YALL.jmpaddin 檔案和 version.txt 檔案。 |
| 麥可·阿克曼 |
現在,我們要將該版本號與我們已安裝的版本號進行比較,如果不同,請向使用者要求更新。彈出您在 Johan 的螢幕上看到的對話框… |
| 麥可·阿克曼 |
……它會詢問使用者是否需要更新,並告知他們版本號。使用者可以選擇是否更新。 |
| |
所以。 |
| |
這就是全部內容了。所有這一切都在幕後為用戶發生。他們透過 GitLab UI 上傳腳本,使用加號按鈕上傳檔案並建立新檔案… |
| |
...JMP 插件,即 Y'All JMP 插件,並使其可供連接到同一儲存庫的其他使用者使用。 |
| |
所有這些都在幕後進行。對於用戶來說,這就像從 JMP 中的紅色熱點保存 JMP 腳本並將其上傳到 GitLab 儲存庫一樣簡單。 |
| |
所以我想回顧一下 Y'All 的特點。 |
| |
我們的腳本貢獻非常簡單。如您所見,我們有一個簡潔的使用者介面,您可以上傳檔案、上傳 JSL 腳本並將它們發佈到您的瀏覽器中。 |
| |
隨之而來的是自動版本控制和程式碼歸檔。由於這一切都是透過儲存在 Novozymes 伺服器上的中央 GitLab 儲存庫進行的,因此所有這些都會被追蹤和儲存… |
| |
....永久有效。自動更新使開發人員可以非常輕鬆地向用戶發布腳本,並且他們始終可以擁有最新版本… |
| |
……這些腳本運作正常且品質可控。我們有測試版和正式版管道。 |
| |
因此,測試管道基本上會立即構建,新腳本發佈到 Y'All 後幾秒鐘內即可使用,並且會頻繁更新。而發布管道將採用更慢的受控發布結構。我想談談我們是如何做到這一點的。 |
| |
您可以在這裡看到我們 GitLab 程式碼庫的分支結構。我們有一個包含大量更新的 Beta 分支。我們有一個發布分支。我們還有一個主分支。 Novozymes 的運作完全由使用者決定。 |
| 麥可·阿克曼 |
當這個 Beta 分支處於我們想要發布的狀態時,我們會使用它。我們會在 Beta 分支和發布分支之間建立合併請求,並將其移至發布分支。這實際上會凍結 Screen 發布分支… |
| 麥可·阿克曼 |
……在程式碼版本中,我們這樣做了,並將程式碼鎖定在這個發布分支上。 |
| |
Beta 版本仍然可以更改。大家仍然可以在 Beta 版本中新增和修改腳本。但發布版本現已凍結。我們會進行品質檢查,當我們做好準備,對版本狀態感到滿意時… |
| |
……我們將其發佈到主分支並將其合併到那裡,現在 Y'All 的主分支用戶可以使用它了。 |
| |
我們擁有可發現的程式碼。所有內容都以文件結構的形式儲存在中央儲存庫中。開發人員可以瀏覽腳本並… |
| |
……找到類似的程式碼,以此為基礎進行建置和改進。此外,我們還將實用函數自動添加到腳本索引中,供開發人員使用,以便他們可以重複使用類似 recode if 這樣的程式碼區塊… |
| |
……或是一些資料庫查詢之類的,我們也已經把它們當作示範了。所以,如果你瀏覽一下 Y'All… |
| |
……在安裝了 Y'All 的 JMP 腳本索引中,您可以看到我們包含了一些 Postgres 資料庫查詢和 Postgres 資料庫工具,用於演示如何使用它們。 |
| |
所有這一切都是在 JMP 中開始的,用戶使用自己創建的 JSL 腳本,並希望與 Y'All 用戶群中的其他人共享該腳本。 |
| |
他們進入 GitLab。然後在使用者介面中將其上傳到與選單位置相符的子目錄中,以便他們將其放在 Y'All 中,所以如果他們想將其放在演示、演示、測試中… |
| |
他們會把這個檔案放在 src/scripts/demos/demos 子目錄中。一旦他們這樣做了,就會啟動一個自動建置管道,啟動 Python 建置腳本,該腳本會解析結構並建立插件… |
| |
...插件並將其重新上傳到 GitLab 伺服器。 JMP 會發現新的更新,並自動提供下載,並更新 JMP 中的 Y'All 外掛程式。該腳本只需幾秒鐘即可在該測試頻道上供用戶使用。 |
| |
我們希望您對 Y'All 感到興奮。也希望您有興趣自己或在您的組織中使用 Y'All。如果您有興趣,我們想提供一些入門建議。 |
| |
如果您在 JMP 用戶社群中觀看此視頻,JMP 用戶社群中發布的 Zip 檔案應該在同一頁上,其中包含了入門所需的所有元素。其中一些元素需要修改。其中一些是供您使用的演示程式碼。 |
| |
不過,您可以隨意下載並查看。這個 Zip 檔案中的 Python 建置腳本是基於原生 Python 3 程式庫建構的。我們的建置系統上只安裝了 Python。它應該可以在任何標準的 Python 3 安裝上運行。 |
| |
我們利用 GitLab 實現的中央儲存庫儲存和自動化,用於持續整合和部署的 CICD,其他提供者也提供類似的實作。 GitLab、GitHub、Azure 和 AWS 都有類似的實作。 |
| |
存在著大量的選項生態系統,因此實施細節將特定於您的組織。 |
| |
遺憾的是,如果你想在自己的系統上自動執行 CICD 管道檔案 gitlab-ci.yml,則需要修改它。除非你是 Novozymes 的員工,否則它無法像在你的系統上那樣運作。 |
| |
我們的實用函數中反映內部測試資料庫的任何連接字串都已被 ODBC 我的下劃線連接下劃線字串替換。 |
| |
如果您想使用其中任何功能,您將必須進入工作目錄中的程式碼並更改這些字串以反映您的資料庫。 |
| |
所以,再次祝福大家對 Y'All 感到興奮。也希望大家對 Y'All 有興趣。如果您有任何回饋、問題或評論,請隨時與我聯繫或 Johan… |
| |
……和他們一起。我們也非常歡迎您做出任何貢獻,如果您能利用這段程式碼並對其進行改進,或者利用這個工具包並以有趣的方式使用它。謝謝。 |
| 克里斯蒂·斯潘 |
好的,太棒了。 |
| 麥可·阿克曼 |
時間。 |
| 克里斯蒂·斯潘 |
合理完美,是的。 |
| 麥可·阿克曼 |
是嗎? |
| |
儘管 Johan 說 JMP 不想要,但這沒關係。 |
| 克里斯蒂·斯潘 |
你知道。 |
| 麥可·阿克曼 |
我覺得大多數人可能不會發現它。 |
| 克里斯蒂·斯潘 |
作為一個新詞我喜歡它。 |
| 約翰 |
所以我們被告知不要使用它,所以我們必須重命名它,並且由於沒有刪除我擁有的版本而陷入困境。 |
| |
先前已安裝。 |
| |
所以當我意識到我已經處於測試階段時,我有點不知所措,然後我就… |
| |
無論如何。 |
| 克里斯蒂·斯潘 |
是的,我認為這很好,但是現在這非常有趣,我認為人們會喜歡看到這個,所以我們非常感謝你們的參與。 |
| |
正如我所說,我將上傳影片供 Jeff 編輯,我不確定什麼時候能完成,但是。 |
| |
無論如何,你們將在十月看到這一切,但如果有任何事情發生,我一定會告訴你們。 |
| |
再次感謝。 |
| 約翰 |
您有一種有關正常 JMP 的新類型。 |
| 麥可·阿克曼 |
關於你說你在別的地方,這只是有點。 |
| |
是的。 |
| 約翰 |
你們的目錄。 |
| 克里斯蒂·斯潘 |
是的,非常感謝,我知道。 |
| |
為防治疾病我們做了大量工作,我們對此表示感謝。 |
| 麥可·阿克曼 |
我們很高興。 |
| |
謝謝。 |
| 麥可·阿克曼 |
緊接著又快速移動。 |
| 克里斯蒂·斯潘 |
是的,老兄,當然很高興見到你們。 |
| |
希望下次。 |
| |
至少和麥可會親自見面,約翰我想去那裡,也見見你,但是。 |
| |
是的。 |
| 麥可·阿克曼 |
你總是知道他是否,特別是如果他在演講,或者在每次峰會上,或者在過去親自參加的事情,都是同一周,因為羅利的所有事情都開放,所以你可以做一整週的事情。 |
| |
計算會議。 |
| |
並看到一群當地的員工。 |
| 約翰 |
爭論旅行預算可能更容易,是的。 |
| 克里斯蒂·斯潘 |
買一送一,沒錯。 |
| |
是的。 |
| 約翰 |
好的。 |
| 克里斯蒂·斯潘 |
好的,祝大家週一剩餘時間過得愉快,謝謝。 |
| |
您也可以很快再次與您交談。 |
| 約翰 |
再見。 |
| |
再見。 |