發表文章

目前顯示的是 6月, 2023的文章

LeetCode 27.Remove Element

將陣列內指定的元素移除, 後面的元素往前推 這道題讓我們移除一個陣列中和給定值相同的數字,並返回新的陣列的長度。 (PS:不可以使用另外的陣列來處理,全部的操作都要在同一個陣列中。) 只需要一個變數用來計數,然後遍歷原數組,如果當前的值和給定值不同,就把當前值覆蓋計數變數的位置,並將計數變數加1。 class Solution { public:     int removeElement(vector<int>& nums, int val) {         int res = 0 ;          for ( int i = 0 ; i < nums.size(); ++ i) {              if (nums[i] != val) nums[res++] = nums[i];         }         return res;     } }; Ref: https://dotblogs.com.tw/abbee/2022/09/21/104648 https://www.cnblogs.com/grandyang/p/4606700.html

LeetCode 26. Remove Duplicates from Sorted Array

給一個排序過的陣列,移除重複的值,每個元素只能留下一個。 不能使用其他的陣列空間,必需在本來的陣列中操作。 備註:直接修改輸入的陣列,空間複雜度應為O(1) 範例: [1,1,2] 去除重複的1之後,剩下[1,2],回傳陣列的長度2。 跟 LeetCode 283. Move Zeroes 很像,差別在於283移除的是0,這題移除的是重複的數字 時間複雜度:O(N) 空間複雜度O(1) class Solution { public:     int removeDuplicates(vector<int>& nums) {         int count = 1;         for(int i=0;i<nums.size();i++){             if(nums[count-1] != nums[i]){                 nums[count] = nums[i];                 count++;             }         }         return count;     } }; 移動不重複元素至陣列開頭 Step1.紀錄要改動的陣列位置 index Step2.若當前元素跟前一個元素相比值不同,則代表這是出現的第一個元素 Step3.陣列開頭的第一個元素一定是新的元素 Ref: https://cppsecrets.com/users/1559211698111109981081015450575064103109971051084699111109/C00-Program-to-Remove-Duplicates-from-Sorted-Array.php https://clay-atlas.com/blog/2021/02/07/leetcode-cn-26-remove-duplicates-from-sorted-array-solution/ https://knightzone.studio/2018/10/21/3919/leetcode%EF%BC%9A26-remove-duplicates-from-sorted-array/ https://www.cnblogs.com/grandyang/p/4329128.html http

LeetCode 1. Two Sum

給一個裡面元素為int的陣列,陣列中會有兩個元素加起來等於target,回傳這兩個元素的位置。 範例: Input: nums = [2,7,11,15], target = 9 Output: [0,1] Explanation: Because nums[0] + nums[1] == 9, we return [0, 1]. Input: nums = [3,2,4], target = 6 Output: [1,2] 從集合中,找到那兩個加總為 target 的數字,並回傳它們所在的 index。 method.1 Brute Force Time complexity:O(n^2) Space complexity:O(1) 暴力搜索的方法是遍歷所有的兩個數字的組合,然後算其和,這樣雖然節省了空間,但是時間複雜度高。一般來說,為了提高時間的複雜度,需要用空間來換。 class Solution { public:     vector<int> twoSum(vector<int>& nums, int target) {         for(int i = 0; i < nums.size(); i++) {             for(int j = i+1; j < nums.size(); j++) {                 if(nums[i]+nums[j] == target)                     return vector<int>({i,j});             }         }         return {};     } }; method.2 HashMap(HashTable) Time complexity:O(n) Space complexity:O(n) 為了能在時間複雜度為 O(n) 的情況下解此題,直覺上就是只可用一個 for loop 換言之,倘若我們已經在遍歷迴圈在逐一查看 nums 裡每個數字時,應該就要有辦法判斷是否已經有答案存在。 假設現在 for 迴圈正在查看 nums 集合裡的某一個數,好比說 2。對於 2 來說,對應要找的數字為 target - 2(即 9 - 2 = 7)。因此,如果在查看

Apache SSL配置參考資源

  在 Apache 伺服器 (Ubuntu) 上手動安裝 SSL 憑證 https://tw.godaddy.com/help/manually-install-an-ssl-certificate-on-my-apache-server-ubuntu-32078 在 Apache 伺服器 (CentOS) 上手動安裝 SSL 憑證 https://tw.godaddy.com/help/manually-install-an-ssl-certificate-on-my-apache-server-centos-5238 GENERATING A VALID SELF-SIGNED CERTIFICATE FOR APACHE AND CHROME https://www.nullalo.com/en/generating-a-valid-self-signed-certificate-for-apache-and-chrome/3/ Apache HTTPS啟用及安全性設定(Ubuntu) https://kerker.website/apache-https%E5%95%9F%E7%94%A8%E5%8F%8A%E5%AE%89%E5%85%A8%E6%80%A7%E8%A8%AD%E5%AE%9Aubuntu/ [ubuntu] apache 安裝 Let’s Encrypt ,讓你的網站更安全 https://blog.camel2243.com/2016/03/08/ubuntu-apache-%E5%AE%89%E8%A3%9D-lets-encrypt-%EF%BC%8C%E8%AE%93%E4%BD%A0%E7%9A%84%E7%B6%B2%E7%AB%99%E6%9B%B4%E5%AE%89%E5%85%A8/ 為何HTTPS憑證有貴有便宜還更可以免費?讓我們從CA原理開始講起。 https://progressbar.tw/posts/98 Apache 2.2-SSL操作大全 https://geotrust.cloudmax.com.tw/guide/install_apache.asp#001 [Ubuntu] 使用 Certbot 自動更新 Let's Encrypt 憑證 https://caloskao.org/ubuntu

Apache Configuration Error AH00526: Syntax error

Apache Configuration Error AH00526: Syntax error https://www.digitalocean.com/community/tutorials/apache-configuration-error-ah00526-syntax-error Apache Configuration Error Code ah00526 https://bobcares.com/blog/apache-configuration-error-code-ah00526/ Apache error AH00526: Syntax error on line 3 of 000-default.conf, URL to redirect is missing https://stackoverflow.com/questions/63910333/apache-error-ah00526-syntax-error-on-line-3-of-000-default-conf-url-to-redirec 解決 Ubuntu Apache 找不到 ServerName https://www.ltsplus.com/linux/fix-ubuntu-apache-cound-not-determine-servername 解決啟動 Apache 網站伺服器時找不到 ServerName 的問題 https://blog.miniasp.com/post/2012/06/23/apache2-Could-not-reliably-determine-the-server-fully-qualified-domain-name-using-for-ServerName

CodeIgniter htaccess參考配置_如何使用.htaccess 將http轉向https ?

 如何開啟顯示FTP隱藏檔?(.htaccess) https://sofree.cc/ftp-htaccess/ CodeIgniter htaccess https://www.farinspace.com/codeigniter-htaccess-file/ [CodeIgniter] 隱藏網址中的index.php https://ithelp.ithome.com.tw/articles/10257762 Default File htaccess CodeIgniter https://www.rumahweb.com/journal/htaccess-codeigniter/ [Apache] .htaccess 失效 https://caloskao.org/apache-htaccess-%E5%A4%B1%E6%95%88/ apache The requested URL / was not found on this server. http://star.im.chu.edu.tw/bbs/viewtopic.php?t=53 Redirect HTTP to HTTPS with Apache https://www.ssl.com/how-to/redirect-http-to-https-with-apache/ The Requested URL was Not Found on This Server Apache/2.4.41 in Ubuntu 22.04 https://www.nicesnippets.com/blog/the-requested-url-was-not-found-on-this-server-apache2441-in-ubuntu-2204?expand_article=1 [SOLVED]The htacess https rewrite rules for whole site to be non www and ssl only https://processwire.com/talk/topic/15199-solvedthe-htacess-https-rewrite-rules-for-whole-site-to-be-non-www-and-ssl-only/ Best Practice

Node.JS學習筆記(11)_pdf輸出_中文會亂碼

  npm install pdfkit 測試1. const PDFDocument = require('pdfkit'); const fs = require('fs'); let pdfDoc = new PDFDocument; pdfDoc.pipe(fs.createWriteStream('SampleDocument.pdf')); pdfDoc.text("My Sample PDF Document"); pdfDoc.end(); 測試2. // Importing required modules const PDFDocument = require("pdfkit"); const fs = require("fs");    // Creating a new instance of PDFDocument class const doc = new PDFDocument();    // Piping the output stream to a file // named "output.pdf" doc.pipe(fs.createWriteStream("output.pdf"));    // Setting the fill color to green and // font size to 30 doc.fillColor("green")     .fontSize(30)     .text("我的pdf測試");    // Setting the fill color to black and // font size to 15 doc.fillColor("black")     .fontSize(15)     .text("It is the best platform for :- ");    // Adding multiple lines of text to // the document doc.text("Programming"); do

Node.JS學習筆記(10)_環境變數配置

npm install dotenv --save 在專案所在根目錄下產生.env檔案 用nano編輯器編寫以下環境變數 HOST=localhost PORT=3000 const http = require('http'); require('dotenv').config(); // Read the host address and the port from the environment const hostname = process.env.HOST; const port = process.env.PORT; // Return JSON regardless of HTTP method or route our web app is reached by const server = http.createServer((req, res) => {     res.statusCode = 200;     res.setHeader('Content-Type', 'application/json');     res.end(`{"message": "Hello World"}`); }); // Start a TCP server listening for connections on the given port and host server.listen(port, hostname, () => {     console.log(`Server running at http://${hostname}:${port}/`); });

Node.JS學習筆記(9)_CSV檔案讀取寫入

https://replit.com/ 寫入模組 npm i -s csv-writer const createCsvWriter = require('csv-writer').createObjectCsvWriter; const csvWriter = createCsvWriter({   path: 'out.csv',   header: [     {id: 'name', title: 'Name'},     {id: 'surname', title: 'Surname'},     {id: 'age', title: 'Age'},     {id: 'gender', title: 'Gender'},   ] }); const data = [   {     name: 'John',     surname: 'Snow',     age: 26,     gender: 'M'   }, {     name: 'Clair',     surname: 'White',     age: 33,     gender: 'F',   }, {     name: 'Fancy',     surname: 'Brown',     age: 78,     gender: 'F'   } ]; csvWriter   .writeRecords(data)   .then(()=> console.log('The CSV file was written successfully')); 讀取CSV解析模組 npm i -s csv-parser const csv = require('csv-parser'); const fs = require('fs'); fs.createReadStream('out.csv')   .pipe(csv()

LeetCode.485. Max Consecutive Ones

找出陣列中最長的連續 1 https://leetcode.com/problems/max-consecutive-ones/description/ class Solution { public:     int findMaxConsecutiveOnes(vector<int>& nums) {         int result = 0,tmp=0;         for(auto x: nums){             if(x==1){                 tmp++;             }else{                 tmp=0;             }             if(result<tmp){                 result = tmp;             }         }         return result;     } };

LeetCode 283. Move Zeroes

  For example, given nums = [0, 1, 0, 3, 12], after calling your function, nums should be [1, 3, 12, 0, 0]. https://leetcode.com/problems/move-zeroes/ class Solution { public:     void moveZeroes(vector<int>& nums) {         vector<int> v;         int count_of_zero=0;         for(int i=0;i<nums.size();i++){             if(nums[i] != 0){                 v.push_back(nums[i]);             }else{                 count_of_zero++;             }         }         int idx=-1;         for(int i=0;i<v.size();i++){             idx++;             cout << v[i] << endl;             nums[i]=v[i];         }         for(int i=idx+1;i< nums.size() ;i++){             nums[i]=0;         }     } }; Ref: https://www.tutorialspoint.com/cpp_standard_library/vector.htm

ASP.NET WebAPI2第008天_Swagger API文檔(SwashBuckle)

圖片
開啟vs2019新增一個web api2專案後 新建一個API控制器 在Controllers目錄下右鍵新增Web API 2專案 包含read/write的模板 針對專案右鍵->管理nuget套件 當再次運行專案 在URL上面多增加 /swagger

Linux Ubuntu Apache上的管理配置筆記

圖片
安裝apache2 sudo apt install apache2 或 sudo apt-get install apache2 預設所有Apache設定檔都在此處 /etc/apache2/ apache2執行檔案路徑預設在 /etc/init.d/ 主要的設定檔 /etc/apache2/apache2.conf 可以修改以更改 Apache 全局設定,且該檔案負責加載設定目錄中的許多其他檔案。如果用 cat 開啟它,會發現有 /etc/apache2 的架構圖及相關說明在裏頭。 變更完.conf設定檔案都要做重新啟動變動才會生效 較新版Linux會用systemd作為預設系統服務管理,而較舊版的則是以sysvinit為主。 重啟apache2 Sysvinit指令:sudo service apache2 restart Systemd指令: sudo systemctl restart apache2 sudo systemctl restart apache2.service 重新載入apache2 Sysvinit指令:sudo service apache2 reload Systemd指令: sudo systemctl reload apache2 sudo systemctl reload apache2.service 停止apache2 Sysvinit指令:sudo service apache2 stop Systemd指令:sudo systemctl stop apache2 Sysvinit指令:sudo service apache2 status Systemd指令:sudo systemctl status apache2 指定Apache 將監聽的通訊埠設定檔 /etc/apache2/ports.conf 預設情況下,Apache 監聽通訊埠 80,當啟用提供 SSL 功能的模組時,Apache 監聽通訊埠 443。 儲存每個站點的虛擬主機目錄設定檔 /etc/apache2/sites-available 預設的網站是調用其中的 000-default.conf 設定檔 。Apache不會使用在此目錄中找到的設定檔案,除非它們連結到啟用的站點目錄,通常所有服務器區塊設定都在此目錄中完成,它是透過使用 a2ensite

Apache管理常規操作整理2

圖片
Linux上HTTP Daemon簡稱httpd 是一款運行於網頁伺服器後台,等待傳入伺服器請求的軟體。HTTP守護程序能自動回應伺服器請求,並使用HTTP協議傳送超文本及多媒體內容。 各自配置檔所在路徑 在Windows上 Apache的配置文件通常只有一個,就是httpd.conf,而在Linux作業系統把各個設置項分在了不同的配置文件中。 在Redhat上 /etc/httpd/conf/httpd.conf 預設站台根目錄就在此檔中定義 關鍵字DocumentRoot "/var/www/html" chkconfig chkconfig httpd on 開機自動啟動 service httpd start ps -eaf | grep httpd netstat -an | grep :80 netstat -an | grep :443 防火牆允許80,443 port iptables -t filter -I  INPUT -p tcp --dport 80 -j ACCEPT 將防火牆設置規則保存起來 /etc/rc.d/init.d/iptables save 測試連線防火牆狀況 telnet ip (要不報錯) netstat -n 在Ubuntu上 /etc/apache2/apache2.conf 預設站台根目錄如果在此檔找不到DocumentRoot關鍵字 那就會是在/etc/apache2/sites-available/000-default.conf (假設你沒有用虛擬主機多台情況下預設配置檔案) Apache在啟動時會自動讀取這個文件的配置信息,而其他的一些配置文件,如httpd.conf等,則是通過Include指令包含進來。在apache2.conf中可以找到這些Include段落。 # Include module configuration: IncludeOptional mods-enabled/*.load IncludeOptional mods-enabled/*.conf # Include list of ports to listen on Include ports.conf # Include generic snippets of statements IncludeOption

在Linux上如何去找到php.ini目前配置預設路徑

  可用 php --ini  | grep 'Loaded Configuration File'

SAP中幾項單據的英文縮寫與對應性質_採購申請、採購訂單、物料憑證、發票憑證、銷售訂單

圖片
SAP的採購憑證根據類別不同,可分為採購訂單(Purchase Order)、採購申請(Purchase Requisition)、詢價(RFQ)、報價(Quotation)、合同(Contract)、計劃協議(Scheduling Agreement)等。 [庫存物料採購流程]->MM模組範疇 ->採購申請 採購申請(對內部):PR 通常物料需求部門並非直接採購部門,當庫存物料數量不足時,需求部門需創建採購申請,採購部門根據申請組織貨源及入庫相關程序。需求部門直接創建採購申請單(PR,Purchase Requisition),申請單中 只包含物料編號和需求數量的信息,不包含貨源(供應商)和價格等信息 。建立採購申請單(T-Code:ME51N) (PS:採購申請除轉化生成採購訂單外,還可以轉化成RFQ(採購報價請求)或框架協議。) ->採購申請建立->採購訂單建立 接續在做創建採購訂單(T-Code:ME21N),也可以走詢價/報價流程。 採購訂單(對外部):PO->後續需要收貨 採購訂單(PO,Purchase Order)除手工直接創建外,還可以參照其它憑證創建的,參照的憑證有採購申請、合同、計劃協議等。 參照採購申請(PR,Purchase Requisition)創建的PO 用T-Code:ME23N可以查看訂單,T-Code:ME22N則可進行修改訂單 此階段負責窗口就會由物料需求部門創建採購申請後轉至採購部門,採購部門根據申請創建採購訂單, 在創建過程中需要確定供應商、價格等貨源相關信息 。 ->採購申請建立->採購訂單建立->收貨程序(生出物料憑證) 物料憑證(Material Document) 採購訂單創建後, 物料的在途數量將增加 ,可用MB5T(用於查詢在途庫存)查看,也可用MMBE(庫存總覽),後續收貨工廠就可以對採購訂單進行收貨操作。生成物料憑證後,是不能夠刪除,如出現數量、庫存地點、記賬時間等差錯時,則需沖銷此憑證。沖銷之後,可以再次做相應正確的物料憑證。 此階段供應商將貨物送到庫房,庫房參考採購訂單對貨物做收貨處理,生成移動類型為101的物料憑證,同時生成GR/IR會計憑證 可用T-Code:MB01或是MIGO做收貨 可用T-Code:MB03查看或是MB51(物料憑證清單) 可用T

SAP_庫存總覽狀況(Stock Overview)_MMBE_MB52

圖片
如果知道物料編號,可用T-CODE:MMBE查找指定工廠或庫存地點的庫存狀況,甚至全部工廠及庫存地點的狀況,當然只能查看一種物料的信息 如果想查找工廠或庫存地點中有哪些物料,則可以使用T-CODE:MB52,使用MB52可以不用知道物料編號。 Ref: https://fenginfo.com/1442.html

SAP_MM模塊的庫存物料的採購流程

圖片
分為三個步驟(3單匹配->採購訂單,收貨單,發票) 採購訂單創建T-Code:ME21N 1.公司的採購部門對供應商創建採購訂單,確定採購數量,價格則是從採購信息記錄中獲得,做訂單時確定了收貨工廠但尚未指定庫存地點; 採購訂單的維護部分由上中下三部分構成,分別是抬頭、項目概覽、項目明細。 抬頭是由多個標籤頁組成。項目之所以分成概覽及明細兩部分,是由於其維護內容非常多導致,項目概覽有多行顯示各個項目的主要信息,而項目明細則由多個標籤頁組成只顯示一個項目的信息。 庫房收貨的T-Code:MB01或MIGO 2.供應商將貨物送到庫房,庫房參考採購訂單對貨物做收貨處理,生成移動類型為101的物料憑證,同時生成GR/IR會計憑證;當創建的採購訂單產生在途數據、供應商的貨物已送到,庫房需按照採購訂單進行收貨並記賬。 發票校驗T-Code:MIRO 3.供應商開出發票,財務部門對發票做發票校驗,生成發票憑證,同時生成會計憑證,並增加對供應商的應付款。 公司採購入庫完成,收到供應商開出的發票,需對發票進行確認, 確認應付款對象和金額,此業務稱為Invoice Receipt(收到發票),簡稱IR 。本步操作只是對其發票校驗確認,屬於MM模塊業務, 它不涉及應付賬款業務 ,操作完成後將增加對供應商的應付賬款。應付賬款的查詢及清賬操作參見FI模塊相關內容。 SAP對於採購發票的校驗,MIRO能夠直接生成校驗憑證和會計憑證,但還有一種用MIR7進行發票預製(Park Incoming Invoice),這種場景很好地適用於業務與財務的分工:業務人員用MIR7預製發票後(不生成會計憑證),經財務人員審核才進行過賬操作(生成會計憑證)。 做完全部業務流程,庫存的物料增加,對供應商的應付款增加。後續的操作將是財務部門對供應商做付款清賬處理。 Ref: https://fenginfo.com/2480.html/2 https://fenginfo.com/1286.html/2

SAP物料主數據(Material Master Data)

圖片
物料主數據(Material Master Data):是SAP系統MM模塊的重要組成部分,它不僅為MM模塊服務,也是SD、PP、PM等模塊操作的對象。 物料主數據涉及面廣,所以視圖類型也多,主要包括基本數據視圖和擴展視圖兩大部分,如下表所示。(其中工廠庫存(X)、存儲位置庫存(Z)是顯示視圖,無需創建。) 視圖類型 描述 A 工作計劃(Work scheduling) B 會計(Accounting) C 分類(Classification) D 物料需求計劃(MRP) E 採購(Purchasing) F 生產資源/工具(Production resources/tools) G 成本核算(Costing) K 基本數據(Basic data) L 存儲(Storage) P 預測(Forecasting) Q 質量管理(Quality management) S 倉庫管理(Warehouse management) V 銷售(Sales) X 工廠庫存(Plant stocks) Z 存儲位置庫存(Storage location stocks) 基本視圖 物料的基本視圖創建(如TCODE:MM01)後,就不能再用創建的方法進行維護,需用修改的方式(TCODE:MM02)。 物料主數據(Material Master Data)的基本視圖(Basic Data View)是維護一個物料的最為基本的數據,也就是 無組織機構數據,包括物料類別、物料編號、名稱、計量單位等 。這些數據不會因為不同的組織機構(如工廠、庫存地點)改變而改變。一個物料在一個客戶端(client)內只能有一個基本視圖的數據。物料的類別、編號在創建後一般是不可以更改的。 擴展視圖 擴展視圖包含銷售、採購、MRP、會計、成本等各種專有視圖,這些視圖 都與組織機構相關(如工廠、銷售組織、庫存地點等),維護這些視圖需要指定相應的組織機構。維護了指定組織機構的的擴展視圖,此組織機構的相關業務流程才能完成。 如維護了A工廠的B物料的採購視圖,A工廠對B物料的採購才能實現。每一個物料都需要有效維護各組織機構的視圖。如一個系統有20個工廠需要進行採購,則需要採購的每一

SAP中的採購與庫存組織架構_集團_公司代碼_工廠_庫存地點

圖片
定義公司(Company)T-CODE:OX15 在SAP系統FI模塊的組織結構定義中,有一項是定義公司,但其實質含義是定義內部業務夥伴(Internal trading partners),也就是對進行內部貿易的實體進行定義。 內部業務夥伴(Internal trading partners)在集團中可兼有多重角色,可以是一個公司(Company),也可以同時是內部的供應商或客戶。 在SAP中,“公司”(Company)和“公司代碼”(Company Code)是兩個不同的概念。配置方案中 可以沒有“公司”,但不能沒有“公司代碼” 。“公司”作為貿易夥伴代表了一個實體;“公司代碼”則代表了一套記賬體系。 定義公司代碼(Company Code)T-CODE:OX02 公司代碼(Company Code)在SAP中定義是需要定義獨立核算的會計實體或對外出具財務報表的會計單元。一個公司代碼與社會的公司法人相似。 在SAP的四級組織架構中,公司代碼的上級是集團,通常需要指定一個科目表,下級則是工廠。一個集團可以有多個公司代碼;一個公司代碼下可有多個工廠。 定義工廠(Plant) T-CODE: OX10 在SAP的四級組織架構中,工廠(Plant)屬於其中的第三層級,是核算公司內部成本、利潤的基本組織結構,也是物流相關模塊(包括MM)中最主要、控制參數最多的組織機構。 定義庫存地點(Storage Location) T-CODE: OX09 庫存地點(storage location)是SAP四級組織架構中的最低一級(集團、公司代碼、工廠、庫存地點)。物料進入工廠,是需要放在指定庫存地點的。一個工廠下可以有多個庫存地點,庫存地點的編號在同一工廠下是不可以重複的(不同工廠下的編號可以重複)。 一般定義只是到庫存地點,但還可以在此下包含多個連續地址編號(Sequential address number)並維護具體的地址信息(也就是多個庫存地址分配到一個庫存地點)。

系統分析筆記_SEQUENCE DIAGRAMS

圖片
循序圖的重點是在描述一件事情,以及系統要完成這件事情的一連串動作,也是一種軟體系統運作的動態圖型。 循序圖中生命線的符號是什麼? 循序圖中生命線的符號是一個垂直的線,通常位於圖表的左側,代表物件的生命週期。生命線的名稱通常位於線的頂部,並且可以包含物件的名稱和類別名稱。生命線的符號可以用一個方框表示,方框的底部中央有一條虛線向下延伸。 循序圖中是否可以為同一物件實例使用多個生命線? 在循序圖中,同一物件實例可以有多個生命線,每個生命線代表物件在不同的角色或上下文中的行為。例如,一個物件實例可以在一個角色中扮演客戶,而在另一個角色中扮演供應商。在這種情況下,可以使用兩個生命線來表示同一物件實例的不同角色。 商業層級的循序圖如何用作需求文件? 在項目的需求階段,分析師可以將用例進一步細化為一個或多個循序圖,以提供更正式的細化層次。商業層級的循序圖可以用來描述系統中各個業務對象之間的互動,以及它們如何實現業務流程。通過使用循序圖,業務人員可以更好地理解系統的需求,並確保系統實現符合業務需求。 循序圖的主要目的是什麼? 顯示系統中不同對象之間的交互,以及它們如何按照時間順序進行互動。 在循序圖中,Message通常有箭頭搭配表示,箭頭的方向表示傳送的方向。消息可以包括消息名稱、參數和返回值等信息。消息可以是同步的或異步的,可以是方法調用、返回值或異常。 在循序圖中,Object通常表示為一條垂直的線,稱為生命線。 生命線代表對象的生命週期,從對象的創建到銷毀。可以使用箭頭來表示對象之間的消息傳遞。 根據UML的三層架構,object可以分為三種類型: 實體object(Entity):表示系統中的數據 邊界object(Boundary):表示系統與外部世界的互動 控制object(Control):系統中的邏輯控制 在UML中,物件之間的通信必須遵循一些規則。在循序圖中,物件之間的通信可以分為四種類型:Actor、Boundary、Control和Entity。這些物件之間的通信必須遵循以下四條規則: 1. Actor只能與Boundary物件進行通信。Actor表示系統的外部用戶或其他系統,Boundary物件表示系統與外部世界的交互。 2. Boundary物件只能與Control和Actor物件進行通信。Boundary物件用於介面設計,它可以接收來自Actor物件

系統分析筆記_COMMUNICATION DIAGRAM(通訊圖)

通訊圖(Communication diagram)和循序圖(Sequence diagrams)有何不同? 都是用來描述物件之間的互動行為,但是它們的呈現方式不同。 循序圖(Sequence diagrams)是 按時間順序 來呈現物件之間的互動行為。 通訊圖是 按照物件之間的消息傳遞 來呈現物件之間的互動行為。通訊圖更加強調物件之間的關係,可以更清晰地顯示物件之間的相互作用。此外,通訊圖 還可以顯示平行發送訊息 ,而序列圖則需要使用分支和合併來實現。 請解釋在通訊圖中建立參與者的語法。 在通訊圖中建立參與者(Participants),符號是長方形,語法如下: 名稱:類別名稱 (備註:分號前是物件名稱;之後是類別名稱,和循序圖相同) 如果要建立匿名物件,可以省略名稱部分,只保留類別名稱。 :類別名稱 在通訊圖中,如何表示平行發送訊息? 平行發送訊息可以使用循序編號加上英文字母的字尾來表示 請解釋在通訊圖中的Link 通訊圖的連接(Links)是一條沒有箭頭的直線,可以連接2位參與者,表示之間擁有傳送訊息的管道。 請解釋在通訊圖中的Message [sequenceNumber:] methodName(parameters) [:returnValue] (在Message notation中,方括號中的部分都是可以省略,可有可無的。) sequenceNumber是Message的循序編號,用於表示Message的時間順序。 methodName是Message的名稱,用於描述Message的內容。 parameters是Message的參數,用於描述Message所帶的參數。 returnValue是Message的返回值,用於描述Message的返回值。 Message的符號是一條箭頭,箭頭的方向表示訊息的傳遞方向,箭頭的結尾處可以加上訊息的名稱,用於描述訊息的內容。 Message是用來表示物件之間的互動行為的基本元素。Message可以 是同步的 ,也可以 是異步的 。同步的Message表示發送訊息的物件必須等待接收訊息的物件回應後才能繼續執行,而異步的Message表示發送訊息的物件不需要等待回應就可以繼續執行。 在通訊圖中,可以使用以下語法來表示條件訊息: methodName(parameters) [Guard] 其中,methodName是

系統分析筆記_PACKAGE DIAGRAMS

  何謂套件圖? 跟 UML關係為何? 套件圖是UML中的一種圖示,用來表示系統中的套件、子系統或模組,以及它們之間的關係。 請解釋 Packageable Element 在套件圖中,Packageable Element 是指可以直接被套件所擁有的具名元素。這些元素可以是類型、類別、用例、元件、套件等等。簡單來說,Packageable Element 是指可以被放置在套件中的元素。 在套件圖中,如何表示 Packageable Element? 在套件圖中,套件內的元素可以用不同的圖示來表示,例如類別、介面、列舉、用例等等。這些元素可以直接放在套件方框內或外,但是必須用連接線來表示它們和套件之間的關係。套件圖中的元素可以透過套件之間的相依關係來連接,以表示它們之間的關係。 何謂Package 在軟體工程中,Package(套件)是一種用來組織和管理軟體元素的機制。套件可以包含類型、類別、用例、元件、套件等等,並且可以透過套件之間的相依關係來建立軟體元素之間的關係。 套件可以被視為一個命名空間(Namespace),用來區分不同的軟體元素。在套件中,所有的元素名稱必須是唯一的,以避免名稱衝突。套件可以被視為一個獨立的單位,可以被編譯成一個獨立的模組,並且可以被其他套件或系統中的元素引用。 套件之間的相依關係共有哪幾類請解釋 1. 套件匯入(Package Import):表示一個套件中的元素需要使用另一個套件中的元素,但是 不需要使用到目標套件中的所有元素 。套件匯入可以幫助減少套件之間的耦合度,提高軟體系統的可維護性和可擴展性。 2. 套件存取(Package Access):表示一個套件中的元素需要使用另一個套件中的元素,但是 目標套件中的元素只能被套件內部的其他元素訪問 ,不能被套件外的元素訪問。套件存取可以幫助限制元素的訪問權限,提高軟體系統的安全性和穩定性。 3. 套件合成(Package Merge):表示 將兩個或多個套件合併成一個新的套件 。套件合成可以幫助簡化套件圖的結構,減少套件之間的相依關係,提高軟體系統的可讀性和可維護性。 plus sign (+) within a circle用法? 如果要表示套件內的成員,可以使用加號(+)在圓圈內的符號。這個符號表示該成員是公開的,可以被套件外的其他元素訪問。在套件圖中,這個符號通常會出現在套件方

Keynote - Programmable Networking for a Distributed Edge - Nick McKeown, Sachin Katti_分散式邊緣運算中的可程式化網路

圖片
  這段演講主要探討的主題是分散式邊緣計算中的可程式網路,包括相關技術策略、開源解決方案、軟體框架和抽象化等方面的挑戰。還探討了邊緣運算和容器化技術的應用,以及它們對現代化應用程式開發和運營的影響。邊緣運算是一種新興的運算模式,它將運算資源和服務靠近使用者,以提高網路效率和服務品質。容器化是一種輕量級的虛擬化技術,它可以將應用程式及其相關的依賴項打包成一個可移植的容器映像,並在不同的環境中運行。 邊緣運算和容器化技術的結合,可以提高應用程式的可移植性、可靠性、彈性和可擴展性,並且可以為現代化應用程式開發和運營帶來許多好處,使得應用程式更容易部署和管理。邊緣運算和容器化技術的結合,可以為現代化應用程式開發和運營帶來更多的靈活性和效率,並可使應用程式更適應不斷變化的市場需求和技術趨勢。 在最終也感受到技術推陳出新若要趕上這波浪潮只能持續去擁抱並接觸他們,因為這是當今相關開發領域技術中應用算很多的工具,更多企業和職務要求也慢慢開始導入這些工具。也從中對邊緣與雲端運算之間優劣與差異,應用情境不同有所深刻體悟。 雲端運算和邊緣運算是兩種不同的計算模式,它們各自具有優缺點和適用場景。 雲端運算是一種集中式的計算模式,它將計算資源和服務集中在數據中心中,並且通過網路提供給使用者。雲端運算具有以下優點: 1. 高效的資源利用率:雲端運算可以將計算資源和服務集中在數據中心中,並且可以實現資源共享和虛擬化,從而提高資源利用率。 2. 易於管理和維護:雲端運算可以集中管理和維護計算資源和服務,從而降低管理和維護成本。 3. 易於擴展和升級:雲端運算可以通過擴展和升級數據中心中的計算資源和服務,從而實現快速的擴展和升級。 然而,雲端運算也存在一些缺點,例如: 1. 網路延遲和帶寬限制:雲端運算需要通過網路提供服務,因此網路延遲和帶寬限制會對服務質量產生影響。 2. 安全性和隱私問題:雲端運算需要將數據傳輸到數據中心中進行處理,因此存在安全性和隱私問題。 3. 可用性問題:雲端運算需要依賴網路連接,因此當網路出現故障或中斷時,服務的可用性會受到影響。 相比之下,邊緣運算是一種分散式的計算模式,將運算資源和服務分散到靠近使用者的邊緣節點,以提高運算效率和服務品質。這種運算模式可以應用於各種情境,比方IoT、智慧城市、自動駕駛等。 https://www.alibabacloud.com/tc/

ndnSIM: Overview and Getting Started (Alex Afanasyev) // NDN Tutorial @ ACM ICN 2022_NDN(命名資料網路)

圖片
  本篇演講探討的是ndnSIM這一套based on  NS3 的開源網路模擬器模組,提供了一個可靠的網路模擬環境,可以幫助研究人員更好地理解和評估網路協議和技術。 採用一套開源ndn-cxx的library(based on C++)實現ns3的模組,用於在無線或有線網路模擬NDN架構進行實驗用途的框架,也可透過python來做相關模擬實踐。本身於開源社群也有諸多版控分支具有大量的開源貢獻者,也有相關熱度。 (備註:ndn-cxx 是一個基於 Named Data Networking (NDN) 架構的 C++ 函式庫,用於開發 NDN 應用程序和協議。ndn-cxx 提供了一個簡單易用的 API,使開發人員可以輕鬆地開發 NDN 應用程序和協議。) 眾所周知NDN(命名資料網路)主要是發展出來為了取代IP地址的一項新型態網路架構。 別於目前網際網路是以PC主機為單位的設計,NDN強調直接以命名的資料取代IP進行搜尋與資料傳輸。 ndnSIM主要就是針對這部分做相關系統模擬的工具。甚至可以用於設計自己想要的拓樸、調整參數做交叉流量等操作模擬,還能用在大規模的網路架構實驗。 這些模擬操作在真實環境上都是相對較難實踐的。 模擬上主要克服了以下幾點: 1.在大規模實驗中,真實網路變化和不可控因素,可能導致實驗結果不一致,無法再現同樣狀況。( 真實代碼和模擬代碼 之間的不一致性,這可能會導致模擬結果不準確。) 2.此外,在真實網路中進行實驗可能會對網路造成影響,而使用模擬器可以避免這種影響。 在ndnSim的演講中, 真實代碼(real code)指的是實際運行在網路中的代碼 ,例如路由器上運行的 轉發程序 。而 模擬代碼(simulated code)指的是在ndnSim中運行的代碼 ,例如在模擬器中實現的 轉發程序 。 在網路模擬中,通常需要使用模擬代碼來模擬真實網路中的行為和性能,以便進行評估和優化。然而, 由於真實代碼和模擬代碼之間可能存在差異,因此需要進行平衡 ,以實現準確的模擬結果。ndnSim的目標之一就是實現真實代碼和模擬代碼之間的平衡,以實現準確的模擬結果。如何使用它建立網路拓撲和進行實驗,以及如何分析單個節點的資訊。 轉發程序(Forwarding Program)是指在網路路由器或交換機等網路設備中運行的一種軟體 ,用於依照路由表或其他轉發策略,

影片重點紀錄分享_GTC 2023 Keynote with NVIDIA CEO Jensen Huang

圖片
  這篇演講報告主要探討了加速運算和人工智慧如何改變產業和解決全球挑戰的潛力。 NVIDIA介紹了一系列新技術和平台,例如用於藥物發現的BioNeMo、用於影音處理和生成式人工智慧的L4,以及用於工業數字化的Omniverse。 此外,演講還提到了NVIDIA與Medtronic合作開發醫療儀器人工智慧平台的計畫。 其中,重點探討了加速運算和人工智慧如何幫助各行各業應對可持續性、數位化和生成式人工智慧等強大的動態挑戰。Grace Superchip也被介紹為一個能夠為雲端和科學運算應用提供優異性能和功率效率的解決方案。最後,Omniverse被提到作為一個能夠增強效率、生產力和速度的平台,被各行各業廣泛應用。 這次演講深入探討了人工智慧的發展和應用,包括AI所面臨的困難和挑戰、發展的階段、技術的突破,以及對未來的展望。透過這次演講,我深切體會到了AI的重要性和價值,也了解到了AI發展所面臨的困難和挑戰。我對AI的未來應用同時有樂觀、悲觀的看法,一來是可以大幅度提升人們工作效率,讓叫枯燥重複性多的工作可簡化,或一些檢索現在連創作和coding都能依賴AI,但相對也容易造成產業與人力衝擊,大量職務充斥被取代的可能,我們不得不 再度檢視自己工作內容本身是否存在另類無法被AI取代的獨特價值。 在我看來,AI是一個強大的工具,能夠協助各行各業應對眼前的挑戰和問題,並為人類社會的發展作出貢獻。AI的發展雖然面臨著許多困難和挑戰,但隨著技術的不斷進步與創新,也在不斷克服這些困難。 AI的未來仍然充斥諸多的挑戰和未知,其實無法只仰賴電腦科學領域,需要各行各業共同努力和合作,才能實現它真正的潛力。我相信,不久的將來,AI將成為各行各業的核心技術,為社會發展帶來更多機遇和挑戰,會有全新的職缺雨後春筍般地出現。 過去的幾十年中,人工智慧的發展面臨著諸多困難,比方運算能力不足、資料量不足、算法不夠成熟等等。這些困難限制了人工智慧的發展和應用。而隨著技術的不斷推陳出新,硬體的提升,這些困難也逐漸被克服。 具體來說,AI困難的克服主要依賴於以下幾個方面: 1. 硬體技術的進步:隨著硬體技術的不斷進步,計算能力得到了大幅提升,這使得AI的訓練和推理速度得到了顯著提高。 2. 數據資料的豐富程度:隨著數據資源的不斷豐富,AI的訓練和推理資料得到了更好的支持,這使得AI的準確性和效率得到了顯著提高。

Flutter_開發手機應用筆記2_Mac上配置_Xcode記得命名與路徑要再三檢查

圖片
按一下 Dock 中的「啟動台」圖像  ,在搜尋欄位中輸入「終端機」,然後按一下「終端機」。 在 Finder   中,打開「/應用程式/工具程式」檔案夾,然後按兩下「終端機」。 輸入uname -a 查看若有x86_64就代表用的是64位元 要有Apple ID相應帳號登入才能下載XCODE 要記得XCODE安裝可能會因為MacOS版本過低無法安裝喔 最新版本XCODE要求至少MacOS 13.0以上 剛好我這台跟3c產品行老闆 借來的 macOS 12.5沒辦法符合 下載下去就會被警示說 無法安裝 這邊我們安裝舊版XCODE  14.2 測試可以在MacOS 12.5跑得起來 相關XCODE對應環境參照表 再來就是flutter sdk記得先確認你MacOS版本是用Intel還是arm 對應不同stable版本sdk做安裝喔! 接著就可以透過flutter doctor確認環境配置狀況 看起來xcode它沒有感應到 暫時先視而不見 flutter --version確認有OK 有這個CLI安裝好了 記得設到系統環境變數(這只有暫時有效當你重開另一個terminal就會失效) export PATH="$PATH:`pwd`/flutter/bin" Ref: https://you.com/search?q=zsh%3A+command+not+found%3A+flutter&tbm=youchat&cfr=chatb&cid=c2_5cf55313-8a96-466e-b89f-37b62a178508 這裡設置全域永久有效的套用方式 可以透過open -a Simulator來開啟我們iphone模擬器 sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer sudo xcodebuild -runFirstLaunch To install see https://guides.cocoapods.org/using/getting-started.html#installation for instructions. 預設的 /Library/Developer/CommandLineTools 目錄下, 並沒有完整的 Xco