2024年2月8日

VS Code 啟用 Tailwind CSS Intellisense 套件

  • 1.如何讓使用 CDN 的 Tailwind CSS 也能在 VS Code 啟用 Tailwind CSS Intellisense 套件
  • 2.使用VUE副檔名在VS Code啟用 Tailwind CSS Intellisense 套件
  • 3.使用C#,php,java前端網頁如何在VS Code啟用 Tailwind CSS Intellisense 套件

1. 安裝Tailwind CSS Intellisense 套件

2.如何顯示Tailwind CSS Intellisense 效果

3.啟用Tailwind CSS Intellisense 效果
(1)新增一個 tailwind.config.js 檔案
(2)輸入module.exports = {}

2022年8月19日

ASP.NET Core Middleware

Middleware

Middleware

微軟在net core開始使用OWIN[1],使用Host/Server/Middleware/Application 分層架構,讓服務可以不侷限在IIS上面,將前端Request / Response 是由 Middleware 方式處理。

介紹

中介軟體是介於作業系統及其中執行應用程式之間的軟體,讓通訊及資料管理得以進行。中介軟體為組成應用程式管線的軟體,用以處理要求與回應。 每個元件:[2]

  • 可選擇是否要將要求傳送到管線中的下一個元件。
  • 可以下一個元件的前後執行工作。

Middleware由多個管線所組成,會一個個串接相連,先由Request由上往下執行,Response會再回傳回來.

官方圖式說明

方法

Middleware使用IApplicationBuilder擴充方法,串接Request/Respone

  • Run

Run最後一個呼叫,不會有next(),後面還有pipe也不會執行,以下範例只會出現Hellow World不會有執行第二段的Run

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }


    app.Run(async (HttpContext context) =>
    {
        await context.Response.WriteAsync("Hellow World");

    });

	  //不會執行	
    app.Run(async (HttpContext context) =>
    {
        await context.Response.WriteAsync("Hellow World2");

    });

}
  • Use

Use用來自訂Middleware的方法並多個要求委派鏈結在一起,只要透過next()就可以直接呼叫下一個middleware.他的呼叫方式有點像遞迴的方式呼叫.如果執行中出現next()調至下一個Use直到找到Run()執行後,才會返回呼叫.

app.Use(async(context,next) =>
{
    await context.Response.WriteAsync("Normal Page 2 Starting\r\n");
    await next();
    await context.Response.WriteAsync("Normal Page 2 Ending\r\n");

});

app.Use(async (context, next) =>
{
    await context.Response.WriteAsync("Normal Page 3 Starting\r\n");
    await next();
    await context.Response.WriteAsync("Normal Page 3 Ending\r\n");

});


//此步驟必須有才會有返回call呼叫
app.Run(async (HttpContext context) =>
{
    await context.Response.WriteAsync("Run  ==> 有Run才會返回Ending的工作\r\n");

});

結果:

Normal Page 1 Starting
Normal Page 2 Starting
Normal Page 3 Starting
Run  ==> 有Run才會返回Ending的工作
Normal Page 3 Ending
Normal Page 2 Ending
Normal Page 1 Ending

  • Map

Map會依據指定要求路徑的相符項目將要求管線分支。 如果要求路徑以指定路徑為開頭,則會執行分支

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
	app.Map("/map1", HandleMapTest1);
  app.Map("/map2", HandleMapTest1);	

}

private static void HandleMapTest1(IApplicationBuilder app)
{
    app.Run(async context =>
    {
        await context.Response.WriteAsync("Map  1");
    });
}

private static void HandleMapTest2(IApplicationBuilder app)
{
    app.Run(async context =>
    {
        await context.Response.WriteAsync("Map  2");
    });
}

Map支援槽狀

app.Map("/level1", level1App => {
    level1App.Map("/level2a", level2AApp => {
        // "/level1/level2a" processing
    });
    level1App.Map("/level2b", level2BApp => {
        // "/level1/level2b" processing
    });
});

內建的中介軟體

中介軟體描述Title
驗證提供驗證支援。在需要 HttpContext.User 之前。 OAuth 回呼的終端機。Untitled
授權提供授權支援。緊接在驗證中介軟體之後。Untitled
Cookie 原則追蹤使用者對用於儲存個人資訊的同意,並強制執行 cookie 欄位的最低標準,例如 secure 和 SameSite在發出 cookie 的中介軟體之前。 範例:驗證、工作階段、MVC (TempData)。Untitled
CORS設定跨原始來源資源共用。在使用 CORS 的元件之前。 由於這個錯誤UseCors 目前必須在 UseResponseCaching 之前進行。Untitled
診斷數個不同的中介軟體,可提供開發人員例外狀況頁面、例外狀況處理、狀態字碼頁,以及新應用程式的預設網頁。在產生錯誤的元件之前。 例外狀況的終端機,或為新應用程式提供預設網頁。Untitled
轉送標頭將設為 Proxy 的標頭轉送到目前要求。在使用更新方法的欄位之前。 範例:配置、主機,用戶端 IP、方法。Untitled
健康狀態檢查檢查 ASP.NET Core 應用程式及其相依性的健康狀態,例如檢查資料庫可用性。若某項要求與健康狀態檢查端點相符,則會是終端機。Untitled
標頭傳播將 HTTP 標頭從傳入要求傳播至傳出 HTTP 用戶端要求。Untitled
HTTP 方法覆寫允許傳入的 POST 要求覆寫方法。在使用更新方法的元件之前。Untitled
HTTPS 重新導向將所有 HTTP 要求都重新導向至 HTTPS。在使用 URL 的元件之前。Untitled
HTTP 嚴格的傳輸安全性 (HSTS)增強安全性的中介軟體,可新增特殊的回應標頭。在傳送回應前和修改要求的元件後。 範例:轉送的標頭、URL 重寫。Untitled
MVC使用 MVC/Razor Pages 處理要求。若要求符合路由則終止。Untitled
OWIN以 OWIN 為基礎之應用程式、伺服器和中介軟體的 Interop。若 OWIN 中介軟體完全處理要求則終止。Untitled
回應快取提供快取回應的支援。在需要快取的元件之前。 UseCORS 必須位於 UseResponseCaching 之前。Untitled
回應壓縮提供壓縮回應的支援。在需要壓縮的元件之前。Untitled
要求當地語系化提供當地語系化支援。在偵測當地語系化的元件之前。 使用 RouteDataRequestCultureProvider 時,必須在路由中介軟體之後出現。Untitled
端點路由定義並限制要求路由。比對路由的終端機。Untitled
SPA傳回單一頁面應用程式 (SPA) 的預設頁面,以處理中介軟體鏈結中從這裡開始的所有要求鏈結中的晚期,讓用於提供靜態檔案、MVC 動作等的其他中介軟體優先。Untitled
工作階段提供管理使用者工作階段的支援。在需要工作階段的元件之前。Untitled
靜態檔案支援靜態檔案的提供和目錄瀏覽。若要求符合檔案則終止。Untitled
URL 重寫提供重寫 URL 及重新導向要求的支援。在使用 URL 的元件之前。Untitled
WebSocket啟用 WebSockets 通訊協定。在接受 WebSocket 要求的必要元件之前。Untitled

參考

  1. OWIN:http://owin.org/
  1. Asp.net 5.0 中介軟體:https://docs.microsoft.com/zh-tw/aspnet/core/fundamentals/middleware/?view=aspnetcore-5.0

2022年8月18日

ASP.NET Core 專案目錄

ASP.NET Core 專案目錄

 




目錄 作用
wwwroot; 靜態資料夾
Properties/launchSettings.json 透過dotnet run 啟動
Program.cs 程式進入點啟動
appsettins.json; 環環境參數
MVC
View 檢視
Model 模型
controller 控制器
WebApp
Razor 前端html產生工具
Web Api
controllers 控制器
Blazor
Pages 頁面
Pages/_Host.cshtml 首頁
Pages/*.razor razor頁面
Shared 共用元件資料夾
Data 資料儲存類別所在資料夾
gPRC
Protos Protocol Buffer File
Pages/_Host.cshtml 首頁
Service 服務類別

2019年8月25日

PythonAI-卷積神經網路CNN

卷積神經網路

(1) 介紹:
神經網路三大天王NN、CNN和RNN,本文章介紹卷積神經網路(Convolutional Neural Network,CNN),發明CNN目前為Facebook AI首席科學家被稱為CNN之父,CNN的發明把所有的圖型辨識的演算法幹掉,目前沒有可以比他更準確。當我們利用CNN來訓練辨識貓,CNN會自己找到它有關於貓的特徵,自己去識別.

enter image description here

(2)CNN運作方式
2.1 CNN運作架構
將貓咪像素圖作為輸入神經元,經過Convolution Layer和Pooling Layer擷取圖形特徵值與處理圖形
會先將貓咪圖片轉成一小格一小格的Filter,這些Filter是用來擷取貓身上的特徵值,

enter image description here

2.2 Convolution Layer卷積層
我們會將圖片輸入像素(Pixel)當作輸入的神經元,每個神經元會乘上相同的權重向量(Weight Array),向量的乘法是做內積,所以由圖片可以看到,將3X3的像素乘以3X3權重值:2*1+1*0+2*1+1*0+4*1+1*0+3*1+1*0+3*1=14.

卷積層計算方式-1

由左到右,上到下以3X3的區塊遞移計算,最後可以得到一個完整的特徵圖(Feature Map)
enter image description here

我們通常會使用多組Filters(6X6或8X8)去計算出Feature Map,這樣結果會得到原貓咪圖的資料量大很多,如何把這些圖簡化,後來使用一個方法稱為Pooling layer

enter image description here

2.3 Pooling Layer池化層
Pooling Layer層主要的目的是將Filter所得到的Feature Map做簡化,最常用的方法稱為Max-Pooling Layer,將Feature Map以2X2的區塊投票選出最大的值,表示為該區域的特徵值

enter image description here

參考

  1. 第5.1講: 卷積神經網絡介紹(Convolutional Neural Network)

2019年8月9日

Python AI-手寫辨識

Python AI-手寫辨識

類神經網路-手寫辨識

手寫辨識

(1) 問題定義
enter image description here

將輸入手寫數字圖片,經由類神經網路訓練後,可以辨識手寫圖片得到一個正確的答案,例如讓電腦辨識上面圖片手寫數字0-9,都可以認得.在了解問題後,需要先知道輸入的資料格式,例如圖片為NxN的矩陣向量.

enter image description here

  • 輸入:輸入的資料格式有很多種,例如數字圖片為矩陣向量
  • 模型:NN
  • 輸出:輸出的方式,神經網路輸出不一定跟輸入同值,手寫數字輸入為1,輸出有可能是1.1或是1.5等等,所以輸出必須經過轉換成真實世界的數字.

(2)定義函式
輸出會有兩個問題:
A.輸出利用one-hot encoding來表示,就是N個狀態會對應N的結果,例如:輸出結果為1,表示[0,1,0,0,0,0,0,0,0,0]
B.輸出結果不能超過1,我們通常會利用Softmax函数來進行輸出的處理.

(3) 準備訓練/測試資料
在這邊需要從輸入去定義那些要當作訓練與測試資料,我們手寫資料使用MNIST 資料庫來訓練使用,MNIST共有70,000筆手寫資料,60,000筆為訓練資料,10,000為測試資料.

(4)建構類神經網路模型
開始建構我們的神經網路模型,首先決定好28x28的像素(這邊不用擔心如何將圖片轉成矩陣),模型使用SGD的方式進行學習,輸出是一個10為的陣列來表示.
enter image description here

  • 輸入:手寫數字圖片(28x28=784)
  • 模型:SGD
  • 輸出:數字(one hard encoding)

(5)學習
首先介紹SGD(Stochastic Gradient Descent) 的學習方式,因為蕾神經網路需要訓練很多次才會提高準確度,SGD最大的好處就是當每次重新學習的會將訓練資料打散,來防止機器學習將答案死背下來.

(6)實作開發
下面程式碼有完整的說明,這邊就不多說明了,當開始執行程式時就會進行資料訓練.

enter image description here

由訓練結果最後acc=0.9447,表示準確率可以到達94%,我們再由實際測試可以看出該圖為7的圖示,由神經網路判斷為7,跟我們人類判斷相同,我們可以知道由訓練的結果可看得到不錯的準確度.

enter image description here

執行神經網路遇到不少問題,請參考下面連結,是筆者所整理的問題集,請多多指教https://programdoubledragon.blogspot.com/2019/08/python-ai_5.html

#確定使用深度學習套件tensorflow
%env KERAS_BACKEND=tensorflow

%matplotlib inline

#載入相關函式庫
import numpy as np
import matplotlib.pyplot as plt
import os
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"

#讀入MNIST的數據庫
from keras.datasets import mnist 
(x_train, y_train),(x_test, y_test) = mnist.load_data()
#驗證len(x_train),len(y_train)是不是六萬筆資料
len(x_train)
len(y_train)


#輸出一筆看看
#x_train[9487].shape
#(28,28)
#輸出矩陣
#x_train[9487]
#輸出圖片
#plt.imshow(x_train[9486], cmap='Greys')
#y_train[9487]

#輸入格式整理
x_train.shape

#輸入格式整理:因為類神經網路,只能平平的資料,所以需要用reshape重新將
x_train = x_train.reshape(60000, 784)
x_test  = x_test.reshape(10000, 784)

#輸出 one-hot encoding
from keras.utils import np_utils
y_train = np_utils.to_categorical(y_train, 10)
y_test = np_utils.to_categorical(y_test, 10)
#9487可以看出[0,1,0,0,0,0,0,0,0,0]
y_train[9487]

#===========================神經網路模型============================
# 隱藏層: 兩個隱藏層,每個有500神經元
# 學習模型:SGD
#
#=================================================================
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.optimizers import SGD

#建立空的神經網路
model = Sequential()

#第一層隱藏層神經網路:建立500個神經元,輸入矩陣資料784個元素
model.add(Dense(500, input_dim=784))
#激發函式為sigmoid
model.add(Activation('sigmoid'))
#第二層隱藏層神經網路:建立500個神經元,輸入矩陣資料784個元素
model.add(Dense(500))
model.add(Activation('sigmoid'))
#輸出10維
model.add(Dense(10))
#激發函式為softmax,表示輸出只會是1,因為輸出陣列的位置表示為數字,例如:y[3]=1表示輸出為3;
model.add(Activation('softmax'))

#compile你的神經網路
#loss='mse'將誤差平方起來且平均
#optimizer=SGD(lr=0.1) lr為學習率
#metrics=['accuracy'] 可以查看正確率
model.compile(loss='mse', optimizer=SGD(lr=0.1) ,  metrics=['accuracy'])
#查看神經網路的模型
#model.summary()

# 驗證第一層:784X500+500(biase)=392500
# 驗證第二層:500X500+500(biase)=250500
# 輸出:500*10+10=5010

#終於來到最後輸出
#每100筆重新調整一次參數,並訓練次
model.fit(x_train, y_train, batch_size=100, epochs=20)


from ipywidgets import interact_manual
predict = model.predict_classes(x_test)

#建立測試函式
def test(測試編號):
    plt.imshow(x_test[測試編號].reshape(28,28), cmap='Greys'  )
    print('神經網路判斷為' , predict[測試編號])

#執行
interact_manual(test, 測試編號=(0,9999))

#儲存神經網路模型
#因為模型是以json格式,所以我們先用model_json來儲存
model_json = model.to_json()
#利用檔案的方式儲存
open('handwriting_model_arch.json','w').write(model_json)
model.save_weights("handwriting_model_arch.h5")

參考

1.http://moocs.nccu.edu.tw/media/23062
2. MNIST_database 維基百科
3. keras - 优化器 Optimizers
4. 資料:手寫六萬筆資料

2019年8月5日

Python AI-問題集

Python AI-問題集

問題集

  1. Jupyter Notebook執行ipywidgets會出現kernel死掉的錯誤發生(The kernel appears to have died)

解決方法

(1) 根據log檔來判斷問題:
例如:log訊息出現OMP: Error #15: Initializing libiomp5.dylib, but found libiomp5.dylib already initialized.

enter image description here

(2) 根據問題關鍵字找出問題所在:
利用google查詢所遭遇到的問題,例如我把上面的問題上google查詢可以找到這篇的解法
https://blog.csdn.net/bingjianIT/article/details/86182096

(3)實作解法:
我實作下面解法後,就可以順利執行手寫辨識的程式.

//在Python宣告時加入
import os
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"

參考

  1. https://blog.csdn.net/bingjianIT/article/details/86182096

2019年7月30日

Python AI-安裝Anacoda Python

Python AI-安裝Anacoda Python

安裝Anaconda Python

環境安裝

(1) 下載Anaconda套件
官網:https://www.anaconda.com/
套件下載: 下載網址

*MAC版本安裝

請下載3.7版的來進行安裝

enter image description here

安裝畫面:
enter image description here

(2) 安裝深度學習套件
本次需要的範例

  • tensorflow
  • numpy
  • keras
  • pandas

需要打開mac的終端機(terminal),需要將上面的套件安裝,首先測試conda指令是否可以執行
##> conda

輸入安裝的指令,會請您輸入管理員的密碼,通過後可以進行安裝
##>sudo conda install tensorflow
##>password
##>sudo conda install keras

*測試
步驟一、首先在Document建立一個資料夾名為AI_Study,執行jupyter來進行測試

##>cd ~/Document
##>mkdir AI_Study
##>cd AI_Study
##>jupyter notebook

enter image description here

步驟二、
出現jupyter的IDE後,我們新增一個腳本,並選擇Python 3來開發

enter image description here

測試方式為import karas套件後,執行Run看是否有發生錯誤,吾表示安裝成功
enter image description here

參考

  1. http://moocs.nccu.edu.tw/media/23054