top of page

論壇文章

Tw Tedu
2023年1月19日
In QA&通識交流群
當您家中的ISP 供應商如Hinet 、遠傳、台灣大哥大...等業者透過數據機出去時,通常都會經過該業者預設的DNS 服務器來決定後續要走哪些網路節點來抵達使用者網路目的地 ,但當網路應某些節點切換或不通時則會繞道走其他節點,也可能因此導向錯誤的最終目的地位址而無法進行正常連接。 應急方案。運用HOST文件---- HOST文件是本地系統用以設置網址導向的檔案,可以將IP直接手動綁定指向網域位址,以達到變更指向IP的目的。 如何設定。windows方法---- 1. 先到視窗按鈕的應用程式區域找到"記事本"或者其他能編輯文件的編輯器皆可 2. 右鍵點擊使用管理者權限開啟 3. 選擇開啟 4. 到達C目錄底下該位址 C:\Windows\System32\drivers\etc 5. 檔案類型選到所有檔案並開啟 hosts 檔 6. 假設我們要將c.it211.com.cn這個位址指定IP為125.229.174.79,則可以在hosts文件最下方空白處打上125.229.174.79 c.it211.com.cn #要特別注意ip跟網址間需要用空格隔開,完畢後記得儲存,未儲存則名稱會有*號標示 如何設定。MAC方法--- 開啟終端機方法可以參考官方網站: https://support.apple.com/zh-tw/guide/terminal/apd5265185d-f365-44cb-8b09-71a064a42125/mac 開啟終端機後輸入sudo vi /etc/hosts #特別注意指令間的空格sudo、vi、/etc/hosts之間以空格隔開 #密碼為該主機管理者密碼 mac vi指令使用參考 i 進入文件編輯指令 : 進入指令模式 esc 跳離當前模式 :wq 儲存並離開 :!q 不儲存強制離開
網站DNS解析錯誤-應急方案HOST教學 content media
0
0
46
Tw Tedu
2022年1月24日
In Coding-程式類部落格
很多來達內學習的同學,對遊戲都有一些夢想,可是常常對於遊戲設計製作,想得很單純。 其實遊戲設計製作往往是需要伺服端程式的。 我們這邊分析一下為什麼需要伺服端程式。 如果是免費的公益型 / 教學展示型的遊戲就不需要 如果想寫的遊戲,並不考慮在任何點收取費用。而只是讓人遊戲,那這種遊戲就不需要伺服器,我們可以把所有的資料都放在包好的 App 當中,讓使用者下載即可。 如果想要讓遊戲當中有聊天室系統 如果我們做的遊戲有聊天室系統,可以讓玩家們透過聊天室系統聊天,這時候我們就會需要一台聊天室主機伺服器,這時候注意的點是,在程式的設計上,並不是伺服器傳送訊息給客戶端。而是客戶端要主動去拉訊息。而聊天室當中如果會有私訊系統,那伺服端程式及資料庫的設計上就會更複雜。 無伺服器付費遊戲的危機 如果我們設計的遊戲是付費遊戲,想要藉由設計出來的遊戲來賺點零用錢,那伺服器的機制更是重要。 我們在設計付費遊戲時,付費點可能會在抽道具、買道具、買體力,這幾點上面。而因為體力是會被消耗的,當玩家把體力消耗完之後,就需要等待時間等體力恢復,或者是直接付錢來讓體力恢復。這時候,如果是單機版的遊戲,那駭客型玩家會找出各種方法,來凍結體力或者是讓體力一瞬間恢復。一樣的狀況也會出現在抽道具或者是買道具上。 如果程式只有存在於客戶端,那客戶端上的各種資料庫,就等於是放著讓客戶自由操作了,這樣的狀況下,遇到了駭客型玩家,就可能會對遊戲收益造成重大的影響。 如何設計付費遊戲的伺服器 當我們設計收費手遊的時候,要注意只要是存在客戶端的東西,就會有很大的可能性會被駭客型玩家竄改,所以我們思考把所有的資料都存在雲端。但是只要是存在雲端,就會有資安的問題要考慮,所以我們一般會撰寫伺服端程式,撰寫 API 。客戶端程式必須要串接 API 去取得所有資料。而所有有關遊戲屬性的計算,也要在伺服端上進行,再把數值回傳給客戶端。而客戶端在依照接受到的數值進行遊戲的進行。 而遊戲的付費機制,更是要透過伺服器進行。在坊間有許多攔截付費機制的外掛,可以騙過手機上的 App ,讓這些 App 以為已經付費完成,其實這些玩家一毛都沒有付。 所有的付費,都一定要經過伺服器的驗證,伺服器要能夠到原廠付費伺服器上驗證該訂單的存在並且付款完成,才能夠繼續購買的流程。 這篇文章簡單地告訴大家遊戲為什麼需要伺服器的存在,希望對大家有所幫助。
遊戲為什麼需要伺服端 content media
2
0
22
Tw Tedu
2022年1月24日
In Marketing-行銷類部落格
何謂Google Search Google Search為Gogole提供的免費收錄網站平台,透過Sitemap讓Google搜索引擎更容易快速的辨識網站並進行爬取網站資料分析完成排名,是SEO工作相當重要的一環。 透過三步驟就能完成! 步驟一 首先進入Google Search頁面 https://search.google.com/search-console/about 並點入立即開始 步驟二 這步驟會有兩種選項: 透過”網域”功能進行驗證,這包含上面敘述的http、https、子網域等協定可填入,但驗證時必須使用DNS驗證方法來進行驗證。 透過”網址前置字元”驗證,這種驗證方法僅能使用限定規格https://www.example.com輸入網址,初始驗證方式可以使用多種方法使用。 步驟三 驗證方式本次先介紹前一步驟網址前置字元的方法,內有html標記Google Analytics、Google代碼管理工具、網域名稱供應商(DNS),就使用html標記方式來驗證,只需要按照提示步驟頁面檔下載後透過ftp或filemanager工具上傳到網站根目錄下即可,最後再按下驗證按鈕就能完成驗證步驟。 綁定成功示例
如何設定Google Search Console content media
2
0
10
Tw Tedu
2022年1月24日
In Coding-程式類部落格
今天恰巧遇到一個問題,有人問,PHP怎麼定時執行程式。 其實詳細故事如下: 今天如果資料庫裡面有個欄位叫做到期日期,還有個欄位叫做目前狀態,那要怎麼在東西過期之後,就把狀態改成已過期呢? 這裡提供了幾種辦法,使用的人可以自己考慮用哪一種 利用資料庫的排程器 你可以設置一個資料庫排程器,會在每天的 00:00:00 秒啟動,然後他會發動一個 SQL 指令,這個 SQL 指令可以更新整個資料表的資料庫欄位,把已經過期的資料,狀態改為已過期。 利用作業系統的定時器啟動 PHP 程式 PHP 的程式碼可以直接啟動。所以可以讓作業系統定時的執行 PHP 程式即可。而這隻定時執行的 PHP 程式,也不需要有任何顯示,他唯一要做工作是檢查條件後更新資料庫的內容。 在使用者使用相關功能時再更新欄位 如果資料量非常巨大,但是用到相關資料的使用量很少時,其實是不需要每天掃描一次的。在這種情況下,可以在要瀏覽相關資料時,再檢查瀏覽中的欄位是否有已過期即可。 以上就是幾個偵測是否過期並且更新欄位的方法。
PHP如何定時執行程式 content media
2
0
9
Tw Tedu
2022年1月24日
In Design-設計類部落格
我們常常會使用選取工具來進行選區操作,但在遇到極度複雜的情況下,例如無體細長或者連續不規則區快多到很難透過選取工具或者鋼筆工具來進行描繪時可以怎麼做呢? 以下我們用人物照片來進行說明,常見的問題是人物髮絲細長且不規則區域多,若用鋼筆工具直接劃過去,難免會直接把整個髮絲剃平,看起來就會非常不自然,這時就可以應用色版工具來輔助。 步驟: 先切換到色版並且找到黑白對比最明顯的其中一個色版選取嘗試在色版上。 負片效果說明圖01 負片效果說明圖02 負片效果說明圖03 步驟: 使用色階工具讓對比更為明顯或透過加亮加深工具擴大對比度,這邊會建議使用加亮加深工具,因右上髮絲右部份與背景的色彩太過接近,直接使用色階調整可能會擴大髮絲損失問題。 補充知識點: 加亮:將處理區愈增加亮度 加深:將處理區域增加暗度 亮部:針對明亮區域進行明暗變更 暗部:針對陰暗區域進行明暗變更 中間調:針對灰階區域進行明暗變更 以上為亮部加亮說明 步驟 完成後即可使用魔術棒將頭髮與髮絲完整選取,此為應用色版方式去背方法,可以結合鋼筆工具將較規則的部分即可完成整個去背。 結合鋼筆工具創造的路徑轉換為選區進行最後去背 ※去背前請務必選一張DPI高一點的圖來去背,DPI越低雜點越多,也越是會影響整去背效率與邊緣乾淨程度,請一定要在去背前考慮到這點。
組合式去背應用 content media
3
0
16
Tw Tedu
2022年1月24日
In Coding-程式類部落格
學習前端程式設計師的同學,在學習 HTML、CSS之後,就會開始接觸 JavaScript。 而在 JavaScript接觸一段時間之後,就會進入到 jQuery。不過有些同學剛開始接觸 jQuery 的時候,會被各種簡寫的符號搞得亂七八糟,要過一段時間才能夠進入狀況。 這篇簡單的文章,就是要用一些很簡單的文字,來告訴大家 jQuery 到底是甚麼。 jQuery 也是用 JavaScript 寫的、是個外掛函式庫 第一件事情是, jQuery 也是用 JavaScript 寫的,是個外掛函式庫。 所以 jQuery 並不是另外一種程式語言。 只是他利用了很多的 JavaScript 程式碼,讓你在寫 JavaScript 的時候,可以變得簡單。 一開始要學選取器,選取器到底是甚麼 在寫 JavaScript 的時候,我們常常用到的是下面這段: var objUsername = document.getElementById("username"); 這樣的程式碼,可是這段程式碼真的很長,直接我們取到這個物件之後,也是要再去做不同的應用。 jQuery 一開始幫我們解決了這樣的問題,他幫我們把選取物件這件事情,變得很簡單。例如 $('#username') 而且了這段程式碼後,可以利用在後面接上一些功能呼叫,很快的完成一些功能。 利用選取器跟事件,把程式碼與HTML變乾淨 往往 JavaScript 的程式碼,需要在 HTML 載入的時候啟動,所以我們會需要寫這樣的程式碼: <body onload="funcA();funcB();"> ... </body> 但是這樣的寫法,需要把 JavaScript 跟 HTML 參雜在一起。會造成維護的困難以及程式碼的混亂。 所以如果用了 jQuery ,我們會把它改寫成: <script type=”text/javascript”>$(document).load(function() {.....});</script> 在 JavaScript 的區段寫這樣的程式碼,這樣就免得在 HTML 當中混雜在一起,變得清爽簡單。 以上是為什麼要用 jQuery 的一點說明,希望對大家學習 JavaScript 的時候,會有幫助。
jQuery能怎麼幫助我們 content media
3
0
9
Tw Tedu
2022年1月24日
In Coding-程式類部落格
在SQL的進階查詢中,最常分不清的就是left join、right join以及inner join的差別。 這篇文章將帶到這三者的運作過程跟差異,那我們就開始吧! 假設我們有這兩張表: (一)先備知識 要更輕鬆的了解join,必須先了解集合的交集跟差集的概念 假設今天有兩個集合: A與B,兩個集合有一部分的重合: 那A與B的交集就會是以下的區塊: 所以就是 A && B的地方 例如: A = {1,3,5,7,9} B = {1,5,9,12,13} 那 A 與 B的交集就會是 : {1,5,9} 而差集的話則是 A – (A 與 B的交集) 會如下圖一樣: (二)left join left join 的語句為: SELECT u.username,d.name FROM users u LEFT JOIN department d ON u.department_id=d.id; 這時候將users作為左表,department視為右表, 就可以畫成像這樣的文氏圖: 而left join是以左表為主,去查詢兩表之間相同條件的資料, 而on則是相同的條件,這裡是users.department_id=department.id, 所以會用A再加上找到的資料, 可以畫成以下的文式圖: 也就是說: 以左表為主表,去加入右表中相同條件的資料 所以查詢出來的結果會是: (三) right join left join 以左表為主,right join 則以右表為主, right join 的語法為: SELECT u.username,d.name FROM users u RIGHT JOIN department d ON u.department_id=d.id; right join 是: 以右表的資料為主,加入左表有相同條件的資料 所以上述語法的right join 可以畫成以下的文氏圖: 而因為比較習慣靠左為主要欄位,所以right join 通常會寫成: SELECT d.name,u.username FROM users u RIGHT JOIN department d ON u.department_id=d.id; 而查詢結果就會像下圖: (四)inner join inner join 在 MySQL語法中直接寫成join,語法如下: SELECT u.username,d.name FROM users u join department d ON u.department_id=d.id; 而inner join 的話就是: 不以兩張表其一為主表,取出在相同條件下交集的資料 而畫成文氏圖的話就像這樣: 而為了讓結果更明顯,這次我們再加入一些資料: 而因為是inner join ,也就是兩者的交集, 所以14~16 的users以及6~7的資料都會被拋棄, 所以查詢結果會像下圖一樣: (五) 互相轉換 在上方的段落提到: left join 是以左表為主 right join 是以右表為主 inner join 不以兩表其一為主,只取交集 所以left join 如果要轉換為right join 語句,只需將兩表調換即可,例如: SELECT u.username,d.name FROM users u LEFT JOIN department d ON u.department_id=d.id; 就可以直接轉換為: SELECT u.username,d.name FROM department d RIGHT JOIN users u ON d.id=u.department_id; 兩者的文式圖變化就像下圖: 當然從right join到left join 也只需調換兩表順序即可, 不過inner join 就無法轉換成right join 或是left join(因為只有交集)。 =========================================================================== 以上是關於left join 、 right join 以及 inner join 的講述, 其實三種join在面試中是最常被問到的, 而且通常是應用題或是白板題, 能回答出的話通常對於運作過程要有一定程度的熟悉 這篇文章的sql在這邊: https://reurl.cc/DgoMYO 也可以下載下來匯入資料庫進行操作。
MySQL-Left join,right join與inner join content media
3
0
19
Tw Tedu
2022年1月24日
In Coding-程式類部落格
什麼是PyTorch? PyTorch是一個開源的Python機器學習庫,Python為基礎,底層由C++實現,應用於人工智慧領域,如自然語言處理。 它最初由Facebook的人工智慧研究團隊於2017開發,為深度學習常用框架 PyTorch安裝: 進入PyTorch 官網 https://pytorch.org/get-started/locally/ 可以選擇要安裝的PyTorch版本、系統環境、安裝方式、CPU版本等等,選好這些後就會給你一串安裝的指令直接丟到終端機就可以安裝。 之後只要在程式碼輸入: import torch 就可以順利引入 張量(tensors): 張量通常是指用來描述「純量、向量或張量」之間關係的「線性映射」,例如「內積、外積、線性映射」等都是張量 。 通常我們稱第零階張量(r=0)為純量,第一階張量 (r=1)為向量,第二階張量(r=2)則成為矩陣。 在PyTorch裡可以用張量來表示多階陣列 import torch print(torch.Tensor([[1,2,3],[4,5,6]])) 張量特性: 1. 可以使用屬性shape或使用size()函數來觀察維度 x=torch.Tensor([[1,2,3],[4,5,6]]) print(x.shape) print(x.size()) 2. 可以傳入numpy array使它轉成張量 import torch import numpy as np print(torch.Tensor(np.array([[1,2,3],[4,5,6]]))) (基本上,他跟numpy array操作一模一樣,只是會有一些差別,其中常見差別為轉換維度) 3. 維度轉換: 一般numpy會使用reshape來轉換維度,但在pytorch裡是使用屬性view來轉換維度 x=torch.Tensor([[1,2,3],[4,5,6]]) x=x.view(6) print(x.shape) x=x.view(-1,2) print(x.shape) 4. 可以使用屬性rand來取0~1隨機數(均勻分佈): t=torch.rand(2,2)#取2X2維度 print(t) 張量實例:線性模型 現在我們使用pytorch來做一個線性回歸(y=ax+b),來算出斜率和截距 x = torch.Tensor([2,4])#建立2X4維張量 a = torch.rand(2, requires_grad =True)#隨機斜率 b = torch.rand(1, requires_grad =True)#隨機截距 print("a:",a)#作為起始迭代值 print("b:",b)#作為起始迭代值 y_pred = a*x + b #線性模型#建立真實值為[5,9]的張量 y_true = torch.Tensor([5,9])#建立損失函數(MSE) loss =(torch.mean(y_ true - y_pred))**2 loss.backward()#反向傳播計算梯度 #利用grad屬性即可得到a張量的梯度 print(a.grad) PyTorch深度神經網路: 基本上使用PyTorch提供nn模組就可以輕易建立一個神經網路,利用optim就可以使用優化器,無須手動設置反向傳播和梯度下降 以下舉例: import numpy as np import torch D_in, H, D_out,=10,5,2 #建立雙層網路模型 model = torch.nn.Sequential( torch.nn.Linear(D_in, H),#隱藏層 torch.nn.ReLU(),#max(0,x) torch.nn.Linear(H, D_out),#輸出層 torch.nn.ReLU(),#max(0,x) ) optimizer = torch.optim.Adam(model.parameters(),lr=0.01) print(loss_fn) print(optimizer) 接下來,代入資料試試: x=torch.rand(100,10)#隨機取x-->100X10維 y_true = torch.rand(100,2)#隨機取真實y-->100X2維 for step inrange(100):#迭代100次 y_pred=model(x)#print("y_pred:",y_pred) loss=loss_fn(y_pred,y_true)#算loss print("第",step+1,"次loss:",loss) optimizer.zero_grad()#梯度設為0,反則之前會累加 loss.backward() optimizer.step() (y為100X2張量,此為其中一次迭代) (loss隨著次數下降) 以上就是PyTorch基本使用,有興趣的同學可以照著步驟,使用看看
PyTorch介紹 content media
2
0
21
Tw Tedu

Tw Tedu

管理員
更多動作
bottom of page