當我們開始在組織內推廣 JMP 時,我們面臨的最大挑戰之一是人們開始學習使用 JSL,我們開始看到組織內 JSL 程式碼的激增。隨著 JMP 在公司內部大規模應用,我們面臨的最大挑戰之一是:如何大規模管理所有使用者產生的程式碼?如何控制所有這些代碼?
多年來,人們提出了許多不同的方法來實現這一點。有些來自電腦科學和軟體開發領域,例如版本控制系統。有些人建議,乾脆在某個地方使用共享驅動器吧。事實證明,這兩種方法各有利弊。
為了給你一點希望,其實這裡有一個折衷方案,效果很好,但又不完全是…我不想把所有資源都投入到內部開發一家成熟的軟體開發公司來處理軟體管理部分。我不想運行“狂野西部”(Wild Wild West),那隻是別人伺服器上的一個共享驅動器。
但事實證明,這兩種極端做法各有利弊。說到 Git 或版本控制系統,GitHub 通常是大家最熟悉的。管理程式碼庫?這正是它擅長的。它真是個好東西。
輕鬆部署更新?這不是它的強項。這並非它的設計初衷。它是為專業軟體開發工作流程而設計的,而這並非我們在此討論的重點。它在這方面做得併不好。
當然,它控制存取和版本權限做得很好。保持版本控制,了解隨時間推移的變更跟踪,所有這些功能都正是版本控制系統的設計初衷。正因為如此,它對新手不太友善。它是為專業人士設計的。
我看過一些實際使用的例子,但這些公司通常擁有專門的人員、資源和時間,在公司內部建立了專門的軟體開發團隊。在某些情況下,這可能有效,或者他們可能出於其他原因已經建立了這個團隊。
另一個極端是,只使用 JSL 檔案和共用資料夾(某伺服器上的共用目錄)。這幾乎和版本控制系統的問題如出一轍。程式碼庫管理不太好。雖然有些雲端系統在這方面有所改進,但仍不夠好。
輕鬆部署更新?當然。你只需點擊最新更新即可。你也可以發送電子郵件或其他方式,或使用一些插件,以及一些過去提出的、有助於實現此特定工作流程的程式碼,你可以將其添加到你的插件中。這絕對是一種可能性,但並非易事。從這一點來看,它比版本控制系統更好。
存取控制?說實話,不太好。新手友善嗎?是的。它不算差,但也談不上極致。結果發現,這其中有一個折衷方案。我和我的同事,以及我的合著者,其實都是從兩個不同的開發活動中想到這個方案的。我們或多或少都找到了相同的解決方案。看到我們最終在這個想法上達成妥協,真是有趣。
不管你信不信,其實這個想法就是 OneDrive。每個人都有它。它是一個企業系統。好吧,不是每個人都有,但很多組織都可以訪問 OneDrive 或類似的東西。我將在本次會議上使用 OneDrive,因為我有 OneDrive,但也有類似的東西。
然而,這樣做的好處確實令人驚訝。程式碼庫的管理與 JSL 類似,但擁有更強大的版本控制,或者說編輯控制,並且能夠追蹤歷史記錄並回滾到程式碼的早期版本。如果出現問題,例如程式碼損壞或類似情況,我們可以回滾。我們透過使用這裡討論的企業系統獲得了這些功能。
輕鬆部署更新。這正是此解決方案的關鍵所在。我們可以為整個公司設定一套自動化更新策略。實際上,無需動手。幾乎無需任何代碼。我們只需要在插件中添加一些程式碼,除此之外,所有操作都只需點擊即可。使用這些系統,一切操作都極為簡單。
控制和編輯權限。同樣,這些權限是附帶的。您可以授予使用者檢視和編輯權限,也可以授予使用者下載和編輯權限。您可以根據需要授予使用者完全存取權限,也可以根據需要開啟或關閉該權限。您可以為群組設定這些權限。它有策略選項等等。
它確實擁有非常優秀的訪問權限系統,而且對新手非常友好。就像我一直說的,幾乎不需要額外的編碼。如果你已經寫過插件,那麼你對它已經瞭如指掌了。它超級容易實現。
這其中有什麼訣竅?其實訣竅就在於,JMP 安裝插件時,插件本質上就是一個資料夾,裡麵包含一堆 JSL 文件,以及一些特殊文件,用於指示 JMP 將其放在 GUI 的哪個位置,以及一些關於插件的元資料。但在大多數情況下,它只是一個 JSL 檔案的資料夾,JMP 會將其提取出來,然後將其放到一個它知道在哪裡可以找到的特定位置。
不過,有趣的是,插件的重要檔案可以放在 JMP 可以存取的任何位置。它們不必放在那個資料夾中。你可以把它們放在任何你想要的地方。我和 Hyde 意識到,是什麼阻止了我們將重要文件放在 OneDrive 資料夾中,然後只需讓插件中的指標指向這些重要檔案並在 OneDrive 資料夾中打開它們?
事實證明什麼都沒有。沒有什麼能阻止你這麼做。這就是你這麼做的結果。下一張和下一張投影片中的一些內容稍後會作為參考,但我們會快速瀏覽一下,以便對這裡發生的事情有一個大致的了解。
在雲端的 OneDrive 中,OneDrive 資料夾將是插件的核心。我們將擁有用戶介面和插件程式碼。這就是 Hyde 的想法。我的想法是,將資源、龐大的資料庫放在一起,這些資料會佔用用戶的硬碟大量空間,而用戶實際上只需要在需要的時候才需要用到它們。否則,他們不想佔用硬碟空間。所有這些內容都可以放在 OneDrive 資料夾中,這就是它們的存放位置。
JMP 桌面上有一個很小的腳本,大概 20 行。大部分內容只是為了方便用戶閱讀。它主要做三件事,具體來說就是三件事。首先,它會檢查是否知道這些插件檔案的位置。它有具體的位置嗎?如果沒有,它需要提供一個對話框,提示「嘿,我應該在哪裡找到這個插件?」然後打開插件包。這就是它的全部功能。就是這三件事。
用戶硬碟上還存在著另一個東西,我稱之為 OneDrive 位置的鏡像。現在,根據你的設定方式,這個鏡像要么只包含邏輯鏈接,要么只包含指向文件或別名的鏈接(如果你知道這些是什麼),要么包含同步的實際文件的副本。這兩種方式各有利弊,而且效果都一樣好。
選項一,只包含邏輯連結。優點是文件非常小。它只佔用硬碟空間。它只是鏈接,並在運行時提取文件。您可以獲得最新的、準確的文件資訊。缺點是,它在沒有網路連線時無法運作。如果您在飛機上或類似情況下,並且沒有 Wi-Fi 連接,您的插件可能根本無法加載。
另一個缺點是,根據插件的大小,在 JMP 中點擊連結和插件開啟之間可能會有一點延遲。這兩個都是缺點。我不會把這算作缺點,只是需要注意的是,對於較大的插件,可能會有一點延遲。
第二個選擇,也就是我今天要教給大家的,是同步資料夾選項。這個選項會佔用更多硬碟空間,但它允許離線訪問,而且載入速度雖然不是即時的,但肯定更快。如果它需要拉取檔案的較新版本,而檔案尚未同步,那麼可能會有一點延遲。但這樣做的好處是,當檔案在這裡被更改時,它們會自動複製到你的本機資料夾中。
在這兩種情況下,您仍然擁有讀取/寫入版本控制權限。如果有人在本機硬碟上進行了更改,它會建立該檔案的副本。它不允許更改原始文件,並且只會引用原始文件。如果有人修改了某些內容並犯了錯誤,那麼下次加載插件時,它將加載原始文件,而不會加載他們的更改。無論如何,我們都有這個版本控制,這個受保護的工作流程。
現在,設定 OneDrive 位置,我們可以透過多種方式進行。我發現最簡單的方法是透過 Teams。今天我們開始演示部分就是從 Teams 開始的。在 Teams 中,如果你設定了一個團隊,它會自動建立你需要的 SharePoint 網站。然後,你可以在 Teams 中新增一個資料夾,也可以在那裡設定同步。
然後,您可以選擇造訪 SharePoint 網站(如果您願意)。這就是您的用戶所做的。他們直接訪問 SharePoint 網站,並在那裡設定同步。您可以在那裡授予他們查看、編輯、下載等權限。您也可以在那裡授予他們存取內容的權限/實際上,您也擁有對插件的存取權限。這很方便。讓我們快速看看如何做到這一點。
這是 Teams。我擁有 Teams。實際上,我就在我的 Teams 群組裡。你進去後,通常會顯示一個按鈕,我現在看到的是這麼小的按鈕。有一個按鈕寫著「創建新團隊」。你創建一個新團隊,然後創建頻道。然後,當你進入頻道時,在頻道下方,有一個選項,上面寫著「文件」。
您可以建立一個新文件或新資料夾。我通常會建立一個新資料夾,並將其稱為“插件內容”。在這裡,我可以使用我的小點,這裡可以選擇下載,或同步到我的 SharePoint。我想開啟我的 SharePoint Drive。這就是我的 SharePoint Drive。它位於同一位置。我實際上位於該資料夾中。這是插件的內容。這就是我要向您展示的插件的核心。
在這三個點下面,有一個「同步」選項。它的作用是在我的檔案系統上……在 Windows 上看起來有點不同,但在 Mac 上,它在我的檔案系統中的作用是建立一個共享庫位置,並在此處建立該資料夾的副本。
現在,當我對此資料夾進行更改時,由於我擁有編輯權限,因此當我對此文件進行更改時,其他有權訪問此資料夾的用戶都會自動收到推送給他們的更改副本。更改內容會被推送到 SharePoint 網站,然後再傳送給其他所有人。這就是我開始編輯的地方。
現在,我們快速瀏覽一下這個文件。這個文件其實不是特別重要,只是內容而已。不過,我們先來看看其中一個文件是什麼樣子的。這是我創建的插件本身,我會引導你一步步操作……我不會直接指導你如何創建插件本身,因為只需要使用插件精靈。
讓我們看看這裡都有些什麼。這些是我們不太關心的部分。這些是 JMP 需要知道的內容。我們關心的是插件啟動器和插件首選項。插件首選項裡有一個資料夾或檔案。我打算把它放在這裡,不要選中,因為前幾天我測試的時候把它刪掉了。
這就是它預設的查找方式。這個 Shell 腳本會提示我:「嘿,這個插件的內容在哪裡?」當它知道後,就會把它寫回這個首選項腳本中,這樣我就不用每次運行插件時都詢問我了。它只需要問一次,就能記住。
讓我們快速看一下這個 Shell 腳本。先不說部落格部分。它只有三段非常短的程式碼,沒什麼好看的。有一個對話框會詢問這個插件的 JSL 檔案實際存放在哪裡。嘗試開啟首選項。然後,這裡會有一個循環,要么嘗試打開程式碼,要么詢問程式碼存放在哪裡。這就是我們在這裡要看的全部內容。
我已經創建了這個插件,並把它放在了我的插件資料夾中。如果我打開 JMP 並點擊“演示”,它會說,嘿……你在這裡看不到,但它會說,“請選擇你的培訓入門目錄”。嗯,就是這個插件。我忘了改那個文字了。我只需要進去,說,這是我的共用驅動器,這是我的資料夾所在位置。然後我會說,好的,打開。這個插件是從 OneDrive 位置啟動的。
我可以做的是回到這裡,重新打開這個插件,然後我得到了這個插件檔案的不同文字。我已經進入插件文件,並添加了插件本身。我將再次運行該插件。現在,它會在底部顯示新的文字。為了讓你了解這有多複雜,我想快速展示兩個不同的插件,它們都利用了這一點。我不會詳細介紹它們。讓我先結束討論。這就是我想要的。
第一個是我創建的,叫做 JMP on the Spot。它實際上是利用我們今天討論的概念,將內容拉取到 Web 瀏覽器或檢視器之類的工具。用儲存庫或庫來描述可能更貼切。如果我們打開 JMP on the Spot,裡面的所有內容都只存在於雲端。如果我想打開它,它會即時下載這些內容。
另一個選擇是我們作為系統工程師在學習新版本時用來管理資料的方案,這非常適合 JMP 19。但我們的資料就存放在這裡。它使用的正是這個插件。這個 GUI 以及與之相關的所有內容都儲存在 OneDrive 上。
如果我們進去看看的話,實際上,它就在這裡。我硬碟上實際插件裡只有我們已經看到的首選項文件,以及我在演示範例中展示的那個文件。其他所有內容都是即時的。我把它下載到硬碟裡,因為團隊正在編輯它。
當我們上傳 JMP 19 和 JMP 18 的資料時,它們會上傳到 OneDrive,並自動拉取到我的電腦。我不必擔心更新我的插件、影片等等,有時我們培訓所需的大量內容也需要更新。這些內容都儲存在雲端,我不需要下載。我不需要下載。下載過程不會佔用我的硬碟空間。
我們今天看到了什麼?嗯,我們看到 OneDrive 為我們提供了管理程式碼庫的能力,讓我們能夠輕鬆部署更新、控制存取和權限,而且它對新手非常友好,除了編寫自己的 JSL 程式碼之外,幾乎不需要額外的編碼,因為您已經掌握了所有必要的知識。您只需記住一個小技巧:沒有規定說插件必須放在插件儲存庫中。