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