揚聲器
|
成績單
|
| 邁克爾·阿克曼 |
克里斯蒂. |
| 克里斯蒂·西班牙 |
早上好,邁克爾,你好嗎? |
| 邁克爾·阿克曼 |
你好嗎。 |
| 克里斯蒂·西班牙 |
太好了,讓我關閉我的電子郵件,這樣我就听不懂了。 |
| 邁克爾·阿克曼 |
是的,我正在簡化我的計算機設置,這樣就沒有任何 ping 信號。 |
| 克里斯蒂·西班牙 |
知道我點擊了工具欄什麼嗎? |
| |
以為我擁有了一切。 |
| |
週末過得如何。 |
| 邁克爾·阿克曼 |
很好,你周末過得怎麼樣。 |
| |
好的。 |
| 克里斯蒂·西班牙 |
所以你生活在黑暗中。 |
| 邁克爾·阿克曼 |
海倫等我們。 |
| |
好吧,是的,離總部非常近,我會去真正的發現峰會,確實如此。 |
| |
親自出席。 |
| |
這也令人失望,但是。 |
| |
是的喲嘿。 |
| 克里斯蒂·西班牙 |
你好早上好,你好嗎? |
| 約翰 |
做好事。 |
| 邁克爾·阿克曼 |
我需要在我身後建立一堵博學之牆,就像你已經到達那裡一樣,約翰。 |
| 約翰 |
我確實點擊了。 |
| |
這和丹尼的書都在裡面,所以你認不出來。 |
| 克里斯蒂·西班牙 |
看起來不錯。 |
| |
我為上週的混亂表示歉意。 |
| |
我很高興能夠通過虛擬方式見到你們倆。 |
| |
因為我是支持 Nova 區域的首要團隊的一員,所以我不認為他們應該把我分配給你們。 |
| |
讓我們看看,我有幾件事需要處理一下,你們兩個的顯示時間都設置為 2010 年 19 日嗎? |
| |
我願意。 |
| 約翰 |
讓我再檢查一下。 |
| 克里斯蒂·西班牙 |
驚人的。 |
| |
和 |
| |
如果你的聲音很好,我會說沒有人戴著標誌。 |
| |
確保視野範圍內沒有可能導致版權侵權的物品 我不知道您後面的書會出現問題。 |
| |
是的,我們就這麼做吧,以防萬一。 |
| 邁克爾·阿克曼 |
其中之一是由前JMP發現峰會主講人組成的。 |
| 約翰 |
誰是。 |
| 邁克爾·阿克曼 |
哦,我沒有,他過來談論了解釋器那件事。 |
| 克里斯蒂·西班牙 |
哦,是的,我有那本書。 |
| 邁克爾·阿克曼 |
是啊是啊。 |
| 約翰 |
我沒有。 |
| |
保存了電子郵件中的任何內容,但我可以繼續將其從電子郵件中取出。 |
| 邁克爾·阿克曼 |
我同意將網絡攝像頭安裝在手臂上,我可以將它向我移動,向後移動,向上移動,向下移動,向左移動,向右移動,就像永遠擺弄它一樣,因為就像我可以移動它一樣。 |
| 克里斯蒂·西班牙 |
哦,這是個好主意。 |
| |
從來沒有在正確的地方見過我是的。 |
| |
然後每個人都會在“我是團隊”中使用他們所有的應用程序前景。 |
| |
像那樣。 |
| 邁克爾·阿克曼 |
密切的團隊不應收到任何通知。 |
| 克里斯蒂·西班牙 |
你有 30 分鐘時間,對嗎? |
| 邁克爾·阿克曼 |
這就是我的理解是的。 |
| 克里斯蒂·西班牙 |
你們會嗎? |
| |
理想情況下,我們希望開始並直接完成。 |
| |
您是否想在轉換時測試共享屏幕? |
| 邁克爾·阿克曼 |
你的,因為我們將在某個時刻在我的屏幕和你的屏幕之間切換,所以讓我先共享我的屏幕。 |
| |
不需要共享聲音。 |
| |
所以。 |
| 邁克爾·阿克曼 |
讓我們回到這裡開始。 |
| 克里斯蒂·西班牙 |
嗨,亞歷克斯,對。 |
| |
好的。 |
| 邁克爾·阿克曼 |
所以你在我們做了它做了它做了它做了它做了那個然後我們被移交給了你。 |
| 約翰 |
是的,我們可以自己控制屏幕共享,我們可以使用製作人。 |
| 克里斯蒂·西班牙 |
你會的,你應該這樣做,是的。 |
| |
哦,你的背景看起來很棒。 |
| 約翰 |
謝謝。 |
| 克里斯蒂·西班牙 |
我應該有那個。 |
| 邁克爾·阿克曼 |
我想我可以更加一致,我們可以更加統一。 |
| 約翰 |
不,我們應該有自己的個人,但我沒有。 |
| |
是的。 |
| 克里斯蒂·西班牙 |
是的,讓我們來談談邁克爾。 |
| 約翰 |
是的。 |
| |
我想我不會在屏幕上做太多鏈接,大部分都是談話,然後我們將進行屏幕共享,然後。 |
| 邁克爾·阿克曼 |
我不確定在共享屏幕時我們會看到什麼。 |
| 克里斯蒂·西班牙 |
好吧,所以每當我拿回錄音時。 |
| |
我得到了四個不同的。 |
| |
版本中有一個包含你,但不包含你,我不確定傑夫·珀金森會編輯所有內容,所以我不知道他會選擇哪座山哪一座。 |
| |
我認為他想向演講者展示這一點。 |
| 邁克爾·阿克曼 |
我想,我在屏幕上看到了。 |
| |
順便說一下,如果右鍵單擊,您可以關閉圖標。 |
| 約翰 |
在設法混淆窗口上,看起來像。 |
| 克里斯蒂·西班牙 |
嗯,這真的那麼難做到嗎? |
| 約翰 |
哦耶。 |
| |
那麼右鍵單擊並查看什麼。 |
| 邁克爾·阿克曼 |
是的,他覺得這很酷。 |
| |
因為我不記得具體在哪裡了。 |
| |
伙計,我從來沒有在我的桌面上打開我的圖標,我只是讓東西安裝到它上面,所以如果我打開它就像。 |
| 約翰 |
是的。 |
| 克里斯蒂·西班牙 |
所以,邁克爾,當你完成後,你會說,好吧,在你的屏幕共享上把它交給你,然後我們就從那裡開始,我們不會真的,我們不會休息,換句話說,是的。 |
| 邁克爾·阿克曼 |
我的房間裡有一個黃色的過濾器。 |
| 克里斯蒂·西班牙 |
哦,你喜歡紅燈。 |
| 邁克爾·阿克曼 |
雖然讓我感到藍色,是的。 |
| 克里斯蒂·西班牙 |
還沒有投資其中之一,我不知道我的辦公桌這麼小,而我這裡有很多空間。 |
| 邁克爾·阿克曼 |
是的,我很早就獨立了,我的老闆一直抱怨我的麥克風質量和相機質量,所以我就像好吧,你給我買了一個新的麥克風相機。 |
| 克里斯蒂·西班牙 |
太好了,我還沒有收到這款新耳機。 |
| 邁克爾·阿克曼 |
讓我快點關上門吧。 |
| 克里斯蒂·西班牙 |
哦,好吧,如果你認識毛茸茸的朋友或到處亂跑的孩子,這一點很重要。 |
| 約翰 |
是的,不太好,是的,我會關上門。 |
| 克里斯蒂·西班牙 |
和約翰你在哪裡。 |
| 約翰 |
就公司而言。 |
| 克里斯蒂·西班牙 |
比我的好哦。 |
| |
充分。 |
| 約翰 |
哦,你去過。 |
| 克里斯蒂·西班牙 |
我有一個朋友,結婚了。 |
| |
哥本哈根的一個人來自丹麥,所以我們去那裡參觀。 |
| |
哦,是的,美麗。 |
| 克里斯蒂·西班牙 |
好的,如果我能讓你們說出你們的公司名稱和抽象標題,那就太好了。 |
| |
這不是為了錄音,這只是為了傑夫的目的,比如識別什麼是你的。 |
| 邁克爾·阿克曼 |
名字是確定的,我的名字是 Michael Increment,我在 novozymes,抽象標題就像上傳照片一樣簡單。 |
| |
關於包裝和賬單的事情我忘了具體的了。 |
| 克里斯蒂·西班牙 |
沒關係。 |
| 邁克爾·阿克曼 |
你們。 |
| 約翰 |
我的名字是聯合國。 |
| |
而且,沒有任何意義。 |
| 克里斯蒂·西班牙 |
我們將錄製此內容並將其發佈到發現峰會會議上,如果您獲得使用該錄製內容的許可,它將可供公眾觀看。 |
| 邁克爾·阿克曼 |
我們做我也做。 |
| |
當你去的時候。 |
| 約翰 |
哦,是的,對不起,對不起,我只是我的想法。 |
| 克里斯蒂·西班牙 |
可以,然後呢。 |
| |
讓我先幫你把相機關掉。 |
| |
沒有人想見我。 |
| 克里斯蒂·西班牙 |
我想我們已經準備好了,你們準備好了嗎? |
| 邁克爾·阿克曼 |
我想我們將從我的屏幕開始。 |
| 克里斯蒂·西班牙 |
你還沒準備好,讓我們看看時機到了。 |
| |
909 所以從技術上講你可以一直到 939 但是。 |
| |
給或拿保險絲罰款,所以只要你準備好。 |
| 邁克爾·阿克曼 |
大家好,歡迎來到我們今天的演講“Y'All”。 這是我們在 Novozymes 中構建的插件包管理器,用於在我們的全球公司內自動執行 JMP 插件共享以及腳本更新和維護。 我是邁克爾·阿克曼,我的聯合主持人是約翰·奧爾森。 |
| |
今天,我想,我們想和大家談談Y'All,也向大家介紹這個工具包,以便任何對此感興趣的人都可以... |
| |
...誰可能想要將其用於個人用途或為您的組織使用,誰知道如何獲取此工具包並開始使用它,以及它是什麼。 因此,我們將首先討論我們是誰以及我們為何建立 Y'All... |
| |
...Y'All 的主要功能以及用戶體驗。 因此,Johan 將介紹用戶在使用此工具包時所看到的內容。 |
| |
我們將深入了解當用戶與Y'All 工具包交互時,Y'All 工具包背後發生的事情,然後我們將進行總結和回顧,並提供一些關於在您的組織中採用Y'All 的提示(如果您發現它)對您的目的來說很有趣。 |
| |
我們是 Novozymes 公司的數據科學家。 我的共同主持人是約翰·奧爾森。 他是農業和工業生物解決方案應用研究領域的數據科學家。 |
| |
我是 Novozymes 同一團隊的高級數據科學家。 如果您想聯繫 Y'All 或其他任何信息,我們已在此處提供了我們的聯繫信息。 請隨時與我們聯繫。 |
| |
Johan 的電子郵件地址是 jpko@novozymes.com,他是 JMP 用戶社區的 JPKO。 我是 mxak@novozymes.com。 |
| |
JMP 用戶社區中的 Michael Akerman Michael mxak,因此,如果您對 Y'All 有任何疑問、跟進或評論,或者對我們已構建的內容和正在使用的內容有任何改進方法,請隨時與我們聯繫。 |
| |
我們為諾維信工作。 Novozymes 是一家全球生物技術公司。 我們為可持續發展構建生物解決方案...... |
| |
...並為世界各地各行各業提高性能並降低成本。 因此,我們支持農業和生物燃料、家庭護理、食品和飲料、動物健康以及更多行業...... |
| |
...使用這些生物解決方案。 我們在全球擁有 6000 多名員工,其中有數百名 JMP 用戶。 |
| |
我提到這一點是因為我們擁有一大批 JMP 用戶,我們支持並與他們合作,他們都在使用 JMP 並在 JMP 中構建東西,這確實是你們的靈感來源。 |
| |
作為一家公司,我們的宗旨是“在不斷發展的世界中,我們共同尋找更好的生活的生物學答案——讓我們重新思考明天。” |
| |
正如我所提到的,我們在 Novozymes 中擁有大量 JMP 用戶。 |
| |
因此,我們希望讓他們更輕鬆地使用 JMP 腳本和 JMP 插件,並使他們的代碼更加可重用和易於發現。 |
| |
首先,我們想讓更新變得容易。 我們觀察到,Novozymes 的人們通過電子郵件來回發送腳本。 |
| |
在個人網絡驅動器上發送 JSL 文件。 他們中的一些人將其放在閃存驅動器上並分發。 我們希望盡可能輕鬆地分發新的和更新的 JMP 腳本。 |
| |
我們想要建立一個檔案來保護代碼。 我們有很多 JMP 用戶,所有這些工作都為組織帶來了很大的價值。 |
| |
因此,一個中央存儲庫可以存儲、備份和歸檔所有有價值的代碼。 |
| |
我們希望隨著時間的推移跟踪版本,因此當腳本發生變化時,隨著它們的改進,我們希望能夠看到這些變化並隨著時間的推移跟踪這些變化。 |
| |
我們希望能夠輕鬆發現和重用腳本,因此如果您是 JMP 開發人員... |
| |
...如果您是編寫 JSL 腳本的開發人員,您可以找到其他開發人員編寫的相關腳本並對其進行改進,或者... |
| |
以此為基礎,滿足您的任何需求。 因此,可以方便地獲取這些腳本並構建它們,也可以方便地共享、導入和重用 JSL 中的函數,組織的其他成員會發現這些函數有用。 |
| |
因此,為了實現這一目標,我們將三個組件組合在一起。 我們有一個 Python 構建腳本、一個 GitLab 界面、一個 JSL 加載和更新腳本,所有這些都在這個工具包中協同工作。 |
| |
Python 構建腳本是一個自動化腳本,將在 Python 3 或更高版本中運行,自動解析 JSL 文件並將其構建為加載項菜單結構。 |
| |
它還寫入加載項定義文件。 它生成一個導入的自定義函數腳本,將所有這些可重用實用程序函數添加到 JMP 腳本索引和 JMP IDE 中,並將其全部壓縮到 .jmpaddin 文件中以供用戶使用。 |
| |
GitLab 是我們的界面,供用戶與插件腳本交互並使用插件生成器本身。 GitLab 是 GitHub 的開源替代品或競爭對手。 |
| |
我們將此內容髮佈在 Novozymes 內部,它提供了一個非常簡單的點擊式用戶界面,用於將腳本上傳到這個中央存儲庫...... |
| |
...所有這些腳本都存儲在其中並且構建實際上發生。 |
| |
CICD 管道(代表持續集成持續部署)會自動執行 Python 構建腳本並通過發布版和測試版渠道分發加載項,以便用戶可以... |
| |
...穩定的質量控製版本,或者如果他們是開發人員,他們可以使用此工具包中使用的每個腳本的最新版本獲得頻繁的快速版本。 |
| |
最後,我們得到了 JSL 加載和更新腳本。 當 JMP 打開並加載此插件時,... |
| |
...他們可以檢查,它將檢查所選頻道(測試版或發布頻道)上的新版本,並提供下載和更新該加載項包。 這還將自定義函數導入到腳本索引中。 |
| |
我們從任何 JMP 用戶那裡獲得了超級簡單的腳本貢獻。 這就像在社交媒體上上傳照片一樣簡單。 |
| |
您進入用戶界面,單擊上傳按鈕,幾秒鐘後它就可以在 Y'All 的測試版頻道上使用。 |
| |
我們對這些腳本進行了自動版本控制和存儲,自動或手動 JMP 插件更新,因此當 JMP 打開時,你們將提供更新... |
| |
...或者用戶可以選擇通過 Y'All 菜單手動更新 Y'All。 |
| |
如果您是編寫腳本的開發人員,以便在更新腳本並對其進行更改時獲取最新版本的加載項,我們有用於快速構建和測試的 Beta 版本通道。 我們有一個用於受控部署和質量控制的發布渠道。 |
| |
這為我們提供了可發現且可重用的 JSL 文件,以便人們可以查看 Novozymes 的用戶(你們所有用戶)提交的腳本的文件結構,並查看並查看... |
| |
...找到滿足接近他們想要的目的的腳本,並根據自己的目的修改它們。 |
| |
我們還在腳本索引中添加了方便的實用函數;你可以看到它的一個小屏幕截圖... |
| |
...在左側並進入JSL 編輯器,因此構建腳本會自動將可導入且可重用的函數添加到JMP 腳本索引中,並帶有一個漂亮的小文檔字符串(如果可以描述該函數的工作原理和使用方法)它。 |
| |
我確實想花一點時間來確認我們出於演示目的而在 Y'All 中包含的一些代碼。 Novozymes 內使用的大部分代碼是特定於 Novozymes 系統的,不能在公司外部使用。 |
| |
因此,我已經獲取了 JMP 用戶社區中的一些腳本,並將它們作為演示目的包含在內。 您可以隨意保留這些或將它們從 Y'All 中刪除... |
| |
...如預期的。 我們從 Xan Gregg 和 Craige Hales 那裡得到了一個 json 解析器腳本。 我們在 2020 年 JMP Discovery 峰會上推出了數據清理腳本助手... |
| |
...喬丹·希勒和米婭·斯蒂芬斯。 我們在 2020 年探索峰會上提供了 Heidi Hardner 和 Serkay Olmez 提供的圖像表工具。 |
| |
顏色行選擇.jsl,作者:Nick Holmes。 我相信 Byron Wingerd 的多 Y 軸圖表和自動驗證設置也在 JMP Discovery Summit 上展示過…… |
| |
...去年由 Mike Anderson 開發,我們為 Riffyn 數據捕獲軟件 Riffyn Nexus 提供了一套可導入的功能... |
| |
...使用他們的 API,由 Riffyn 編寫並經許可從他們的 Riffyn 工具 JMP 插件中獲取。 這是我們在 Novozymes 中大量使用的工具。 我們包含此代碼是因為如果還有其他 Riffyn 用戶,您也可以隨意使用此代碼。 |
| |
因此,解決這個問題後,我們希望進行一些現場演示,從用戶體驗以及用戶在使用 Y'All 工具包時看到的內容和執行的操作開始。 為此,我將把控制權交給我的聯合主持人約翰。 |
| |
約翰,你靜音了。 |
| 約翰 |
謝謝你,邁克爾。 |
| |
對於那個很抱歉。 讓我分享一下我的屏幕。 |
| |
你看到這個了嗎? |
| 邁克爾 |
是的。 |
| 約翰 |
好的。 |
| |
正如 Michael 所說,我將向您介紹使用 Y'All 的用戶體驗。 |
| |
成為 Y'All 的用戶確實是一個三層的事情。 我們絕大多數用戶基本上將它當作內置的 JMP 平台來使用。 他們... |
| |
...指向並單擊腳本並運行它們以達到其預期目的。 我們也有一個相當大的用戶組,他們正在貢獻腳本,也正在經歷如何...... |
| |
您可以貢獻簡單的腳本。 然後我們有一小群開發人員和維護人員 (??) 做更高級的事情,我們也會嘗試做一些事情。 |
| |
但首先,Y'All 的真正簡單用法。 安裝它就像單擊此鏈接到在我們的 GitLab 存儲庫中創建的構建工件 (??) 一樣簡單,然後下載 JMP 編輯文件並使用 JMP 運行它。 |
| |
現在這提示我進行更新,我打算取消這一次,但你可以在我的菜單欄上看到,我有你們所有人的菜單...... |
| |
...邁克爾提到的一些演示腳本。 我不會詳細介紹這些腳本,因為它們實際上並不是 Y'All 包的一部分,只是出於演示目的而包含在內。 但我要做的是,我會嘗試進去…… |
| |
...哎呀,啟用,抱歉,這已經是,已啟用它出現。啟用 Beta 測試,這樣,既然我們開始創建一些東西,我們就可以立即看到它們。 |
| |
大多數用戶都會禁用 Beta 測試,並且在主要版本發布後打開 JMP 時會收到更新提示(每隔幾週一次)。 但對於啟用了 Beta 測試的用戶來說,Beta 分支可能會在每天幾次到每週幾次的時間進行更新。 |
| |
這基本上就是普通用戶的內容。 |
| |
如果您想為此貢獻腳本,有幾種方法可以實現。 一件事是通過 GitLab UI。 現在我們剛剛看到的菜單結構反映在... |
| |
...目錄結構... |
| |
...存儲庫。 所以創建一個新的... |
| |
...菜單或子菜單就像創建一個新目錄一樣簡單。 在這裡,我們姑且稱之為... |
| |
...“演示” |
| 約翰 |
並添加它。 |
| 約翰 |
如果我們想添加一個腳本,我們可以簡單地在 JMP IDE 中創建它,這樣您就可以製作一個非常簡單的腳本。 |
| |
你好世界。 |
| |
這已經足夠好了。 實際上有一些額外的細節,即以一種很好的方式命名菜單項以獲得工具提示,我們實現了[???] 或代碼魔法,也就是說,如果您一開始就寫註釋掉,哎呀。 |
| |
你呢。 |
| |
菜單名稱。 |
| 邁克爾·阿克曼 |
你們。 |
| |
菜單名稱。 |
| 約翰 |
你們大家菜單名稱 |
| 邁克爾·阿克曼 |
老習慣了。 |
| 約翰 |
我們就稱其為“你好”吧。 然後是工具提示。 |
| |
好吧,讓我們繼續保存它。 |
| |
我想,讓我們看看,桌面。 然後上傳到這裡。 |
| |
是測試的嗎? |
| 邁克爾·阿克曼 |
這是腳本,但應該沒問題。 |
| 約翰 |
現在... |
| |
一旦我們上傳了這個文件,我們就觸發了這個自動化的管道[聽不清]。 |
| |
[聽不清] 系統,它首先克隆存儲庫,然後... |
| |
...之後構建插件,這應該會在重新啟動 JMP 時提示, |
| 約翰 |
並更新所有編輯。 |
| 約翰 |
一旦我們選擇更新,演示菜單就會出現,並帶有測試腳本。 |
| |
因此,這是向 JMP 提供腳本的最簡單方法。 如果您熟悉使用 Git,還可以使用更經典的 Git 工作流程。 只是要在這裡打開一個批處理窗口。 讓我... |
| |
我們可以克隆存儲庫。 讓我們回到... 我們在這裡展示的一些內容將特定於使用我們在這裡使用的 GitLab。 |
| |
但在其他遠程存儲庫編碼、代碼託管系統中也會類似。 |
| |
現在我們正在克隆存儲庫,我們將在本地系統中擁有存儲庫的完整鏡像。 和之前類似,我們可以看到這裡鏡像的目錄結構,讓我們嘗試看看是否可以創建一個... |
| |
另一個腳本。 |
| |
為了這。 你們菜單名稱已改進 |
| |
你好。 |
| |
說我們願意,也許這一次.. |
| |
...改為打開提示。 |
| |
它說你好世界。 |
| |
現在,這一次,我們可以使用 JMP 中包含的內置函數之一。 讓我們轉到腳本索引,我們可以... |
| |
...搜索你們所有的實用程序。 |
| |
找到 errorModal 函數,它帶有一個小文檔字符串,說明如何使用它。 |
| |
而且已經進口了,所以... |
| |
你們都使用 errorModal |
| 約翰 |
我們可以向世界問好。 |
| 約翰 |
讓我們看看這個。 |
| |
進入我們的存儲庫... |
| |
...在演示下。 並推送代碼。 |
| |
現在代碼被推送到遠程存儲庫,觸發 CICD 管道,並且...... |
| |
...秒,應該能夠看到管道正在運行並且... |
| |
...很快就好了。 |
| |
還沒開始呢 |
| |
也許我有點... |
| |
...不耐煩。 我們開始吧。 |
| |
果然,如果我們進去檢查你們的更新,我們會看到一個新的更新。 是這樣嗎? |
| |
我們會選擇更新... |
| |
...插件,現在演示將有我們改進的 hello world。 |
| |
好吧,我想這就是我的用戶演示。 |
| 邁克爾·阿克曼 |
謝謝,約翰。 如果您同意的話,我會收回屏幕共享。 |
| 約翰 |
是的。 |
| 邁克爾·阿克曼 |
我想深入了解一下用戶體驗發生時幕後發生的事情。 因此,我將在 Visual Studio Code 中查看此代碼。 |
| |
下載 Zip 文件後,您可以在任何地方查看此內容,我將快速進入 Zen 模式,以使其更容易查看。 開始了。 |
| |
因此,每當 Johan 上傳該腳本時,GitLab CICD 管道就會運行。 於是他進入了 Git 存儲庫...... |
| |
...他按下加號按鈕上傳了一個腳本,然後啟動了 CICD 管道。 這是一個小腳本,定義服務器應如何應對這種情況。 |
| |
預步驟和構建步驟... |
| |
...它將 Git 存儲庫及其中的所有文件(包括 Johan 的新腳本)克隆到工作目錄中,其中... |
| |
...這個稱為運行程序的處理模塊可以處理該代碼。 然後它構建了它,所以它運行了這個構建階段...... |
| |
CD — 更改目錄 — 進入該構建目錄並運行該 Python 構建腳本。 所以事情就這麼簡單。 它將所有這些新文件克隆到一個工作文件夾中,移入該文件夾並在 Python 3 中運行 Python 構建腳本。 |
| |
那麼讓我們看一下 Python 構建腳本。 我將控制選項卡移至該位置。 這是build_yall.py。 |
| |
因此,這是很多代碼,但如果您正在查看此代碼並希望獲得有關如何查看它的指南,請一直向下滾動到此處理函數。 它說的是 def 進程。 |
| |
這是構建 Y'All 並逐步完成它的主要代碼。 因此,我們將邊走邊研究這一點。 |
| |
首先發生的是 Python 腳本構建菜單層次結構。 那麼讓我們來看看吧。 它所做的是創建一個嵌套的 Python 字典,在其中查看 src/scripts 下的文件夾結構... |
| |
...並將其找到的所有 JSL 文件提取到一個字典中,其中包含該 JSL 文件的名稱、工具提示和文件位置。 因此,它基本上一次一個文件夾地構建嵌套字典,並進行爬行。 |
| |
然後我們檢查每個 JSL 文件的命令名稱。 我們嘗試解析這些文件,並查找您在腳本頂部看到的“Y'All”菜單名稱和“Y'All”工具提示…… |
| |
...定義 JMP 插件菜單中的按鈕名稱和工具提示。 每當你們安裝時,你們菜單就會出現,如果您將鼠標懸停在菜單上,這些菜單應該被稱為什麼以及工具提示應該說什麼。 |
| |
如果它找不到“Y'All”菜單名稱或“Y'All”工具提示類型的魔術命令,它將直接回退到沒有工具提示的腳本名稱。 所以 test.jsl 將成為測試,正如您從 Johan 看到的那樣。 |
| |
菜單中的命令字典按字母順序排序,以便於輕鬆查找內容,但幫助和設置菜單除外,該菜單會彈出到頂部,使其始終位於菜單頂部。 |
| |
因為幫助和設置很重要。 然後所有這些信息都會寫入 JMPcust 文件中。 |
| |
因此 .jmpcust 文件本質上是一種標記語言文檔,它定義 JMP 如何... |
| |
菜單按鈕應該是什麼,菜單本身應該在哪裡,工具提示應該是什麼,都在這個 .jmpcust 文件中定義。 |
| |
我將把控制選項卡移交給你們,這樣你們就可以看到它是什麼樣子了。 它實際上是關於菜單內容的一堆定義...... |
| |
..以及菜單的名稱及其包含的內容。 因此我們可以看到幫助和設置菜單包含檢查 Y'All 更新、打開和關閉 Beta 測試模式等等。 |
| |
因此,Python 腳本將使用 write jmpcust file 函數自動寫入該內容。 |
| |
然後我們將編寫插件定義文件。 所以addin.def和version.txt。 Addin.def——我將切換到一個例子——有點...... |
| |
...JMP 用於識別插件並查找版本號以及支持的最低 JMP 版本的描述位。 |
| |
我們說12。 這是我們的任意選擇,只是為了不用擔心 12 點之前的事情。 如果您自己開始使用它,則可以在 Python 代碼中更改它。 如您所見,插件版本也在這裡定義。 |
| |
我們將其寫入名為 version.txt 的文件中,以便您剛剛在 addin.def 中看到的相同整數也最終出現在 version.txt 中。 |
| |
原因是這是一個我們可以遠程讀取的很好的小文件。 我們可以在服務器中的 JMP over HTTP 中打開... |
| |
...并快速查看 version.txt 文件中的版本號,以便與我們當前的版本進行比較。 因此,如果我們當前安裝的版本與 version.txt 不匹配... |
| |
...這意味著我們需要更新,或者至少可以更新。 我們使用的版本號是在 UTC 時區運行的日期時間。 |
| |
我們將其轉換為 1970 年以來的基本秒數。 所以它是一個可以轉換回日期時間格式的整數。 |
| |
所以我們可以在整數的基礎上比較兩個數字,這很好。 我們可以很容易地看出它們是否大於或小於彼此,並且我們仍然可以將其轉換回日期。 因此,對於我們來說,在 JMP 中存儲版本號是一種非常有效的方法。 |
| |
最後。 |
| |
接下來我們要做的事情——我們已經編寫了那些添加深度文件——我們創建一個自定義函數腳本。 所以這有點奇怪,也有點難以解釋。 我會盡力快速而簡潔地完成這件事。 |
| |
JMP 有兩種定義自定義函數的方法。 一種是使用 JMP 腳本語言中名為 function 的函數,以及它的作用 - 我將切換到 utils.jsl 和 Y'All 的 importables 子目錄。 |
| |
Function 定義了可以從其他位置使用和調用的自定義函數。 您可以使用命名空間來定義它。 所以在這種情況下,我們有命名空間 Y'All utils... |
| |
...使用函數名稱重新編碼 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 中運行它的分支相關聯,因此如果我們使用的是 beta 版本與主要發布版本。 |
| |
現在,在 JMP 中——我要跳過去,哈!... |
| |
...到 autoUpgrade.jsl。 這是我們檢查加載項新版本的地方。 當 JMP 加載時,你們將運行這個自動升級腳本,... |
| |
...它在 GitLab 存儲庫中查找這些新版本。 您可以在這裡看到我們加載了測試版標誌,無論是測試模式還是主模式。 |
| |
我們會在特定頻道中查找該模式。 所以我們拉... |
| |
...來自基於該頻道選擇的特定 URL。 因此,如果我們處於測試模式,它將查看測試頻道。 如果我們處於主模式,它將查看主頻道。 我們尋找 YALL.jmpaddin 文件和 version.txt |
| 邁克爾·阿克曼 |
現在我們將將該版本號與我們安裝的版本號進行比較,如果不同,則請求用戶更新。 彈出一個您在 Johan 屏幕上看到的對話框... |
| 邁克爾·阿克曼 |
...詢問他們是否想要更新並告訴他們版本號是什麼。 他們可以選擇這樣做,也可以選擇不這樣做。 |
| |
所以。 |
| |
這就是它的全部內容。 所有這一切都發生在幕後,為用戶服務。 他們通過 GitLab UI 上傳腳本,使用加號按鈕上傳文件並構建新的... |
| |
...JMP 插件,Y'All JMP 插件,並使其可供連接到同一存儲庫的其他用戶使用。 |
| |
所有這一切都發生在幕後。 對於用戶來說,這就像從 JMP 中的紅色熱點保存 JMP 腳本並將其上傳到 GitLab 存儲庫一樣簡單。 |
| |
所以我想回顧一下你們的特點。 |
| |
我們有非常簡單的腳本貢獻。 正如您所看到的,您有一個漂亮的用戶界面來上傳文件、上傳 JSL 腳本並使它們可用。 |
| |
隨之而來的是自動版本控制和代碼歸檔。 因此,由於這一切都是通過存儲在 Novozymes 服務器上的中央 GitLab 存儲庫發生的,因此所有這些都會被跟踪和存儲...... |
| |
...永久。 自動更新,因此開發人員可以非常輕鬆地向用戶發布腳本,並且他們始終可以擁有最新版本...... |
| |
...那些運行正常且質量受控的腳本。 我們有測試版和發布渠道。 |
| |
因此,測試版通道基本上會立即建立,在新腳本發布並頻繁更新後幾秒鐘內即可使用。 釋放通道將是一個更緩慢控制的釋放結構。 我想談談我們是如何做到這一點的。 |
| |
您可以在此處查看 GitLab 存儲庫中的分支結構。 我們有一個包含大量更新的測試分支。 我們有一個發布分支。 我們有一個主要的分行。 我們在 Novozymes 做什麼——這完全取決於用戶的選擇—— |
| 邁克爾·阿克曼 |
...當這個 beta 分支處於我們想要發布的狀態時,我們就採用它。 我們在 beta 和release之間打開一個合併請求,並將其移動到release分支。 這將基本上凍結屏幕發布分支...... |
| 邁克爾·阿克曼 |
...在我們執行此操作的代碼版本中,這將代碼鎖定在該發布分支上。 |
| |
Beta 仍然可以改變。 人們仍然可以在測試版中添加腳本和更改腳本。 但現在釋放已被凍結。 我們對其進行質量檢查,當我們做好準備時,當我們對它的狀態感到滿意時...... |
| |
...我們將其發佈到 main 並將其合併到那裡,現在可供 Y'All 的主分支用戶使用。 |
| |
我們有可發現的代碼。 一切都可以在中央存儲庫的文件結構中找到。 開發人員可以查看腳本並... |
| |
...找到類似的東西來構建和改進。 我們已經將實用函數自動添加到腳本索引中,自動可供開發人員使用,以便他們可以重用代碼塊,例如重新編碼,如果... |
| |
...或者一些數據庫查詢以及類似的內容,我們也將其作為演示包含在內。 所以,如果你仔細看一下你們... |
| |
...安裝了 Y'All 的 JMP 腳本索引中的命名空間。 您會看到我們提供了一些 postgres 數據庫查詢和 postgres 數據庫工具,我們也將它們用於演示如何使用它們。 |
| |
所有這一切都是通過在 JMP 中使用用戶創建的 JSL 腳本開始實現的,他們希望與 Y'All 用戶群中的其他人共享該腳本。 |
| |
他們進入 GitLab。 在用戶界面中,將其上傳到與你們想要的菜單位置相匹配的子目錄中,這樣如果他們想要在演示演示測試中使用它... |
| |
...他們會將其放在 srclashscriptsslashdemosslashdemos 子目錄中。 一旦他們這樣做了,就會啟動一個自動構建管道,啟動 Python 構建腳本,該腳本解析結構並構建附加組件...... |
| |
...添加並將其重新上傳到 GitLab 服務器。 然後,JMP 會發現新的更新並自動提供下載並更新 JMP 中的 Y'All 插件。 該腳本只需幾秒鐘即可供該測試頻道上的用戶使用。 |
| |
因此,我們希望您對 Y'All 感到興奮。我們希望您有興趣在自己或您的組織中使用 Y'All。 如果您願意的話,我們想提供一些關於如何開始的提示。 |
| |
如果您在 JMP 用戶社區中觀看此視頻,那麼 JMP 用戶社區中發布的 Zip 文件(應該位於同一頁面上)包含開始使用所需的所有元素。 其中一些需要修改。 其中一些是演示代碼供您使用。 |
| |
但請隨意下載並查看。 該 Zip 文件中的 Python 構建腳本是基於本機 Python 3 庫構建的。 我們的構建系統上除了 Python 之外沒有安裝任何東西。 它應該在任何標準 Python 3 安裝上運行。 |
| |
我們使用 GitLab for CICD 進行的中央存儲庫存儲和自動化用於持續集成和部署,可以通過其他提供商獲得。 GitLab、GitHub、Azure、AWS 都有類似的實現。 |
| |
有一個巨大的生態系統可供選擇,因此實施細節將特定於您的組織。 |
| |
不幸的是,如果您想在自己的系統上以自動方式運行 CICD 管道文件 gitlab-ci.yml,則需要對其進行修改。 它不會像在您的系統上那樣工作,當然,除非您是 Novozymes 員工。 |
| |
我們的實用程序函數中反映內部 Beta 數據庫的任何連接字符串都已替換為 ODBC 我的下劃線連接下劃線字符串。 |
| |
如果您想使用其中任何函數,則必須進入工作目錄中的代碼並更改這些字符串以反映您的數據庫。 |
| |
所以,我們再次希望你們對你們感到興奮。 我們希望您對大家感興趣。 如果您有任何反饋、問題、意見,請隨時聯繫我或 Johan... |
| |
...跟他們。 如果您採用此代碼並對其進行改進,或者採用此工具包並以有趣的方式使用它,我們也希望您做出任何貢獻。 謝謝。 |
| 克里斯蒂·西班牙 |
好吧,那太好了。 |
| 邁克爾·阿克曼 |
時間。 |
| 克里斯蒂·西班牙 |
合理完美是啊是啊。 |
| 邁克爾·阿克曼 |
可以。 |
| |
Johan 說沒有 JMP 想要,但這並不重要。 |
| 克里斯蒂·西班牙 |
你知道。 |
| 邁克爾·阿克曼 |
我覺得,大多數人可能都聽不懂。 |
| 克里斯蒂·西班牙 |
作為一個新詞,我喜歡它。 |
| 約翰 |
所以我們被告知不要使用它,所以我們必須重命名該東西,而我因沒有刪除我擁有的版本而被拋棄。 |
| |
以前安裝過。 |
| |
所以當我意識到我已經處於測試階段時,這有點讓我失望,然後我就這麼做了。 |
| |
無論如何。 |
| 克里斯蒂·西班牙 |
是的,我認為這很好,但現在這太棒了,非常有趣,我想人們會喜歡看到這個,所以我們非常感謝你們的參與。 |
| |
正如我所說,我將上傳視頻供傑夫編輯,我不確定何時完成,但是。 |
| |
不管怎樣,你們會看到十月的一切,但如果有什麼事情發生,我一定會讓你們知道的。 |
| |
再次感謝,如果。 |
| 約翰 |
您有一個關於普通 JMP 的新品種。 |
| 邁克爾·阿克曼 |
關於你說你在別的地方,這只是有點。 |
| |
是的。 |
| 約翰 |
你們全部目錄。 |
| 克里斯蒂·西班牙 |
是的,非常感謝,我知道了。 |
| |
我們為疾病付出了很多努力,我們對此表示讚賞。 |
| 邁克爾·阿克曼 |
我們的榮幸。 |
| |
感謝。 |
| 邁克爾·阿克曼 |
移動之後很快就下了起來。 |
| 克里斯蒂·西班牙 |
是的,伙計,很高興見到你們倆。 |
| |
希望下次。 |
| |
至少與邁克爾是面對面的,約翰我也想在那裡見見你,但是。 |
| |
是的。 |
| 邁克爾·阿克曼 |
你總是知道他是否在,特別是如果他在每次峰會上進行演講,或者是過去親自參加的事情,那麼在羅利舉行的所有活動都在同一周,所以你可以花整整一周的時間。 |
| |
計算會議。 |
| |
並看到了一群當地的當地員工。 |
| 約翰 |
可能更容易爭論旅行預算,然後是的。 |
| 克里斯蒂·西班牙 |
二合一就對了。 |
| |
是的。 |
| 約翰 |
好的。 |
| 克里斯蒂·西班牙 |
好吧,你們週一度過了愉快的一周,謝謝。 |
| |
您也可以很快再次與您交談。 |
| 約翰 |
再見。 |
| |
再見。 |