MYSQL 101

在網上找到一個不錯的 MYSQL 教學,把整個主要功能做了一次紮實的盤整,以下是我做的一些筆記跟內容: 教程 代碼 Repo 定義 DDL: 数据定义语言(Data Definition Language) DDL 用于定义数据库结构和模式,包括创建、修改和删除数据库、表、视图、索引等数据库对象。它不涉及实际数据的操作,而是定义了数据的结构。在MySQL中,常见的DDL命令包括CREATE、ALTER和DROP等。 DML: 数据操作语言(Data Manipulation Language) DML用于操作数据库中的数据,包括插入、更新和删除数据记录。它允许用户查询和修改数据库中的实际数据。在MySQL中,常见的DML命令包括SELECT、INSERT、UPDATE和DELETE等。 DQL: 数据查询语言(Data Query Language) DQL用于查询数据库中的数据,但不对数据进行修改。它主要包括SELECT命令,允许用户从数据库中检索所需的数据。在MySQL中,SELECT命令是最常用的DQL命令。 DCL: 数据控制语言(Data Control Language) DCL用于授权和权限管理,确定哪些用户有权访问数据库中的数据和对象,以及在何种方式访问。在MySQL中,常见的DCL命令包括GRANT和REVOKE,用于授予和撤销用户对数据库对象的权限。 基礎操作 # create table create table player ( id INT, name VARCHAR(100), level INT, exp INT, gold DECIMAL(10, 2) ) # 描述 table DESC player # 基本操作 alter table player modify column name VARCHAR(200) alter table player rename column name to nick_name alter table player add COLUMN last_login datetime alter table player drop column last_login insert into player (id, nick_name) values (2, 'hello'); insert into player (id, nick_name) values (3, 'hello'); insert into player (id, nick_name) values (5, 'hello'), (6, 'aaa'); update player set level = 1 WHERE nick_name = 'hello' SELECT * FROM player where level > 1 AND (level < 5 OR exp > 1) and exp < 5 SELECT * FROM player where level in (1, 3, 5) SELECT * FROM player where level BETWEEN 1 AND 10 SELECT * FROM player where name LIKE '王%' SELECT * FROM player where name LIKE '王_' #批配一字符 Regexp #REGEXP # ....

August 23, 2023 Â· Yish

貧血模型跟充血模型

軟體的「貧血模型」(Anemic Domain Model)和「充血模型」(Rich Domain Model)是兩種在軟體設計中常見的模型設計風格,特別是在使用面向對象編程(Object-Oriented Programming,簡稱OOP)時,這兩種模型風格對於如何處理領域邏輯(Domain Logic)有著不同的理念。 DDD 本身就是著名的充血模型實作,而分散式拆分則是為貧血模型,以下將會細節說明。 貧血模型(Anemic Domain Model): 在貧血模型中,對象(Object)通常只是包含資料的純資料結構,並且缺乏有效的行為(方法)。這種模型將領域邏輯(Domain Logic)主要放在服務(Service)或管理類別中,而不是在對象本身。這意味著對象只是資料的容器,而所有處理邏輯都放在外部。 貧血模型的優點是簡單且易於理解,因為領域邏輯都放在一個中央位置,容易進行修改和維護。然而,它也有一些缺點。例如,當領域邏輯變得複雜時,服務類別可能會變得過度龐大,造成程式碼不易維護和測試。此外,貧血模型也未完全利用面向對象編程的優點,如封裝和多型性。 充血模型(Rich Domain Model): 相比之下,充血模型是一種較為嚴格的面向對象設計風格,將領域邏輯嵌入到對象中。這意味著對象不僅包含資料,還包含了處理資料的相關行為和邏輯。這使得對象能夠自主管理自己的狀態和行為,更符合真實世界中物件的行為。 充血模型的優點是更好地利用了面向對象編程的特性,更容易理解,也更符合物件導向的設計原則,如封裝和單一職責原則。此外,由於領域邏輯分散在不同的對象中,這使得程式碼更容易擴展和維護。 然而,充血模型可能在某些情況下增加了複雜性。當領域邏輯變得非常複雜時,對象之間的交互可能變得複雜,需要更深入的設計和理解。 在選擇使用貧血模型還是充血模型時,開發者需要考慮項目的需求、複雜性和可擴展性等因素,以及團隊成員對於這兩種設計風格的熟悉程度。 當談到「貧血模型」和「充血模型」,這兩種模型風格涉及領域邏輯的處理方式。 貧血模型(Anemic Domain Model)範例: 在貧血模型中,對象只是包含資料的純資料結構,而大部分的領域邏輯則放在服務(Service)類別中。 // User.php (Entity) class User { private $id; private $name; private $email; // Getter and setter methods... } // UserService.php (Service) class UserService { public function sendWelcomeEmail(User $user) { // Send a welcome email to the user... } public function generateUsername(User $user) { // Generate a unique username based on user's name and ID....

August 22, 2023 Â· Yish

初探 Content-Security-Policy (CSP)

問題 原有 a.com/hello 當中嵌入 a.com/world iframe 本身沒問題,後來因為公司政策改變需要調整為 hello.a.com 與 world.a.com 而原有的 a.com/hello 以及 a.com/world 拜訪後會 redirect 到 hello.a.com 與 world.a.com 當中,而在這中間發現 iframe 失效並嘗試進行解決。 依照同源政策規則,調整為 hello.a.com 與 world.a.com 視為不同源,因此需要額外配置。 同源定義 所謂同源是指兩份網頁具備相同協定、埠號 (如果有指定) 以及主機位置,下表提供了一些例子展示那些來源和 http://store.company.com/dir/page.html 屬於同源: URL Outcome Reason http://store.company.com/dir2/other.html 同源 http://store.company.com/dir/inner/another.html 同源 https://store.company.com/secure.html 不同源 協定不同 http://store.company.com:81/dir/etc.html 不同源 埠號不同 http://news.company.com/dir/other.html 不同源 ✅ 主機位置不同 ✅ MDN 說明 出錯點 Refused to display 'https://world.a.com/' in a frame because it set 'X-Frame-Options' to 'sameorigin'. 問題思路與解法 X-Frame-Options MDN 說明...

August 22, 2023 Â· Yish

什麼是 RWA(Real World Assets)?

概念 RWA 是將實際世界中的實物資產引入區塊鏈,實現資產的數位化、交易和管理的過程。這些實物資產可以是房地產、貴金屬、工業資產等,通過區塊鏈技術,將其轉化為數位資產(通常是代幣)並在區塊鏈上建立對應的記錄。這種數位化的過程具有去中心化、不可篡改、透明等特點,有望提升資產流動性和交易效率。 流程 資產數位化:將實體資產進行數位化(tokenization),通常是通過發行代幣來代表實物資產的所有權。這些數位代幣會在區塊鏈上建立相應的記錄,確保數位資產的真實性。 驗證和授權:透過區塊鏈節點的驗證機制,確保資產的合法性和真實性。此外,可以實現特定的授權機制,只有經過授權的用戶才能進行某些操作,這可以通過智能合約實現。 交易:持有這些數位資產的人可以在區塊鏈上進行交易,交易記錄將被永久記錄在區塊鏈上,確保交易的透明性和可追溯性。 實時追蹤:區塊鏈上的資產數位化和交易記錄可以被實時追蹤,確保資產的歷史和流通記錄可以被準確追溯。 實際例子 房地產 藝術品 股票 債券 轉化為數位代幣,並在區塊鏈上進行交易。這可以使其更加流動,並降低交易成本。 目前 RWA 最佳化實例 USDT: 美元映射到鏈上代幣化 (Tether) USDC: 美元映射到鏈上代幣化 (Circle) PAXG: 黃金映射到鏈上代幣化 (Paxos) 好處 可以將數位代幣資產分割成非常小部分方便散戶與小資金進駐機構從中獲得收益與利潤,或是作為抵押或借貸透過其他用戶或機構所提供的流動性獎勵賺取利潤。 理想可以去各大認可機構隨時換回法幣或實際資產操作。 交易透明化,由於鏈上特性所有交易將會暴露不存在任何中間商手續費。 困境 需要由大型機構發起並且與真實世界資產作掛鈎與保證,一旦脫鉤蹦盤會有毀滅性的打擊。 風險極高,由於大型機構本身建立在中心化認可,一旦中心化機構現實有擠兌現象或是狀況連帶影響。 RWA 並不是新概念,只是最近又被拿出來講,是因為 Defi 項目收益率下降,而美債等低風險資產利率上升,沒道理冒著高風險僅享受 APY 5~10%。 RWA 目前發起大機構目的是希望透過 web3 這項技術來做融資割韭菜給空氣代幣,實際上能不能換回實際資產還是未知。 如果可以換回資產則是代幣證券化,則會經過各種審核,最終冒著高風險收益卻非常少。 結論 RWA 並不是一個新概念,只是透過另外一種方式在找東西與代幣做掛鉤,其次發起的機構背景需要是中心化金融機構才可以,現實資產並須與代幣做匹配。 ref: https://youtu.be/HExvz9d1JR8 https://research.binance.com/en/analysis/real-world-assets

August 11, 2023 Â· Yish

玩的不是懷舊遊戲,而是記憶

最近在一次機遇巧合下購入了一台 RG35XX,並不是說這台模擬掌機功能有多強大,他最多也只能模擬到 PS 平台,市面上比他功能強大甚至是更厲害的遊戲掌機都有,那為什麼我還是會想買入它,我在想可能我是在買我已經過去的回憶。 就外觀來說我小時候的記憶停留在媽媽買給我的掌機 game boy color 上,那時候還記得是在玩具反斗城購入的,3000 元,加上當時人們普遍對版權跟正版沒有高度認同,卡帶則是到小賣店一片大概 300 - 500 之間不等,我想應該是盜版的,說也奇怪當時的遊戲現在玩起來挫敗感真的很強,而且在有語言隔閡的情況下(日文)還能夠全破也是很神奇,但在 2023 年的今天許多經典作品早已經有了完美中文版,畢竟是這麼久以前的遊戲了網路上許多愛好者逐步的完善它讓它成為了經典。 在遊玩的過程中其實想起了很多過去的回憶,記得小時候同學會去文具店買攻略本逐步研究一起討論如何抓神奇寶貝跟破關,還會一起約出來玩,後來電腦逐漸普及後有了模擬器,3.5磁片內剛好可以儲存遊戲跟模擬器就可以在大螢幕上遊玩,而有些遊戲當時還沒有模擬器所以還是只能在主機上玩,現在看來都非常無趣和無聊,但不知道為何當看到熟悉的畫面跟聽到音樂時彷彿把我拉回了那個沒有什麼煩惱的孩提時代,想著放學回家玩遊戲的日子,我想這就是電子遊戲的魅力吧,把記憶能夠留存在裡面,雖然現在遊戲真的蠻好玩的也很便利,但回憶還是無法被取代,只能創造,也安撫 10 歲的我當年沒有玩夠的遺憾,雖說生活和工作忙得不可開交,但一個禮拜偶爾玩以前玩過的遊戲還是感到很開心,紀念 10 歲的我能夠在當時覺得幸福與快樂,擁有並喜歡這些遊戲以及有美好的回憶。

August 11, 2023 Â· Yish

Proxy、 Reverse Proxy 概念與 Nginx 配置

Proxy 是位於 Client 和 Server 之間的 Server,Client 會向 Proxy 發送請求, Proxy 會轉發請求到 Server,並將 Server 的回應返回給 Client。Proxy 可以用來隱藏 Client IP,並提供 Cache 功能,提高網站的訪問速度。 Reverse Proxy 是位於 Server 的 Server ,Client 會向 Reverse Proxy 發送請求, Reverse Proxy 會根據請求的內容,將請求轉發到不同的 Server ,並將 Server 的回應返回給 Client 。 Reverse Proxy 可以用來負載均衡、Cache、安全防護等。 功用 Proxy 隱藏 Client IP:當Client 訪問網站時,可以使用 Proxy 來隱藏 Client IP,這可以保護用戶隱私。 提供 Cache 功能:Proxy 可以提供 Cache 功能,提高網站的訪問速度。當 Client 第一次訪問網站時, Proxy 會將網站的內容 Cache 到自己的內存中,當 Client 再次訪問網站時, Proxy 會直接返回 Cache 的內容,這可以提高網站的訪問速度。 Reverse Proxy 負載均衡:Reverse Proxy 可以用來負載均衡,將用戶的請求均勻分散到不同的 Server ,這可以提高網站的性能和可用性。 Cache:Reverse Proxy 可以提供 Cache 功能,提高網站的訪問速度。當 Client 第一次訪問網站時, Reverse Proxy 會將網站的內容 Cache 到自己的內存中,當 Client 再次訪問網站時, Reverse Proxy 會直接返回 Cache 的內容,這可以提高網站的訪問速度。 安全防護:Reverse Proxy 可以用來安全防護,例如可以用來防火牆、DDoS 攻擊等。 細節 Proxy 代理的對象是 Client ,Client 過程隱藏 Client IP,Server 不知道拜訪的 Client 是誰。...

August 3, 2023 Â· Yish