目前分類:JS、.net及SQL (42)

瀏覽方式: 標題列表 簡短摘要

今天在Ubuntu安裝系統,依照這四個網頁的教學分別設定apach, mysql, php, phpmyadmin

1. apach:https://ui-code.com/archives/179

2. mysql:https://ui-code.com/archives/293

3. php:https://ui-code.com/archives/286

4. phpmyadmin:https://ui-code.com/archives/297

在2.安裝Mysql後,要啟動密碼設定結果失敗,錯誤訊息是:

"MySQL Failed! Error: SET PASSWORD has no significance for user ‘root’@’localhost’ as the authentication method used doesn’t store authentication data in the MySQL server. Please consider using ALTER USER"

搜尋一下文章後,這樣做即可

1. 再開啟另外的terminal視窗,因為現在的視窗被輸入密碼卡死了,跳不出來

2. 關閉上一次密碼設定執行緒:sudo killall -9 mysql_secure_installation

3. 進入Mysql:sudo mysql

4. 在Mysql命令中輸入:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密碼';

5. 退出Mysql命令:exit

6. 重新進入密碼設定:sudo mysql_secure_installation

最後要記得把phpmyadmin的對外功能關閉,修改/etc/phpmyadmin/apache.conf

在</IfModule>下方輸入以下文字即可

Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
    Options FollowSymLinks
    DirectoryIndex index.php

    <IfModule mod_php5.c>
           ......
    </IfModule>
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1
</Directory>

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

虛擬化是一個伺服系統非常重要的技術,「虛擬化」技術解決實體機常見的問題

舉例來說:硬體故障,一般遇到硬體故障,如果你有備用機做Cluster那就還好,如果是單一主機,那就必須停擺維修,你可能會說,儘快準備一台備用機不就好了,原則是這樣沒錯,但是備用機如果硬體規格不同,那麼把HD換上新電腦就不一定能正常開啟,可能要處理一推驅動程式問題,最後可能還是要重灌系統。重灌一整個服務可不是那麼容易的。

那麼虛擬化能解決哪些問題?我覺得最大的幫助是,虛擬機器把整個「服務系統」變成「檔案格式」,你只要把這個檔案複製到任何一台電腦,就可以重啟這個服務,換一個方式來說呢,假設未來人類可以抽取靈魂,那麼就像是把靈魂抽取出來存在隨身碟,然後在市場上找一個合適的無主身體,插入USB開機,你就在新身體上復活了。

而虛擬機器也是相同道理,虛擬機器是安裝在作業系統之上,所以硬體問題影響的是你本機(Host)的問題,而我們安裝一台新機器驅動程式與虛擬機(Guest)上的作業系統無關

VM (3)

                       傳統系統架構                                                                                虛擬化系統架構

以上圖而言,可以了解機器虛擬化後,與虛擬機器是否啟動主要就是虛擬化軟體了,在任何一台規格符合的電腦中,安裝好虛擬化軟體,就可以啟動原有的服務。

簡單的說筆者所歸納的虛擬化優點

1. 虛擬機器脫離硬體,與機器規格無關

2. 虛擬機器更加容易部署:只須複製虛擬機器的封裝檔案到新的機器上,即可在任意電腦上復活服務

3. 虛擬機更加容易備份:只須複製檔案或者製作快照即可備份系統

4. 虛擬機可以區隔不同服務的軟體衝突:如果你有兩個服務,一個使用.net 4,一個是.net core,那可以透過VM區隔,互不影響。

5. 虛擬機可以節省資源:原本需要兩台伺服機,現在可以安裝在同一台中,多個服務之間不太可能同時高覆載,最佳化資源利用。

那麼我們要如何建立虛擬機呢?這部份網路很多文章可以參考,本文著重在如何將一台現有的實體機器虛擬化成一台虛擬機,也就是P2V(Physical to Virtual)

一、disk2vhd備份工具

二、VirutalBox轉換


一、disk2vhd備份工具

Disk2vhd是微軟的備份工具,可以從微軟官網下載:https://docs.microsoft.com/en-us/sysinternals/downloads/disk2vhd

程式非常簡單,下載後解壓縮

image

夜市 小霸王 發表在 痞客邦 留言(1) 人氣()

之前有用ESP32計算「社交安全距離」的人數,其原理及方法請參閱:Arduino ESP32計算防疫場地人數(台灣社交距離APP) ,但是ESP32不一定大家都有,手機則是大家都有,所以我用APP Inventor做了一個「社交安全距離」的人數的APP

APP啟動以後,點選左上角的開始偵測即可開始計算附近人數,中間會顯示人數,下方黑色的列表則是偵測到的裝置編號(MAC Address)及訊號強度(RSSI)

Screenshot_20210523-024650

選項的部份可以選擇:室內5人或室外10人,還有偵測距離:10公尺內或無限制。不過這個距離選項是用無線RSSI訊號轉換的,所以不是很準喔。

Screenshot_20210523-024710    Screenshot_20210523-024717

最後,如果超出限制人數的話,APP會改紅底,並請Google小姐念出「警告,警告,人數已經超過室內5人限制」

Screenshot_20210523-02465110

關於本專案的原始套件,請從這裡下載: https://t.ly/ahfJ,可以利用APP Inventor開啟,查看或修改專案內容。

如果懶的開APP Inventor,可以直接試用本APP安裝檔,apk安裝檔請從這裡下載:https://t.ly/4AGQ

image


文章標籤

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()


Teachable Machine(以下簡稱TM)是Google新推出的平台,相同功能的工具如Azure的Custom Vision,兩者剛好有市場區隔,Google的強項是肢體辨識,但Google目前只能做分類器,而Azure有物件識別,可以在一張照片內識別多個物件,這個目前Google的TM不支援,但GCP內部的AI Platform是支援的,只是很貴...不用也要收錢。Azure則是以次計費,還有免費額度。

這次我利用TM來做一個手勢分類器,主要是預測剪刀石頭布,下一篇則會做成一個猜拳遊戲,來看看你能在30內猜贏幾次?

本篇分成以下幾個部份

一、TM平臺訓練模型

二、下載模型

三、在Python中應用模型

四、使用Webcam即時分析


一、TM平臺訓練模型

首先進入TM平台:https://teachablemachine.withgoogle.com/,平台可以直接用Google帳號登入,免費建立模型,可下載tnesorflow檔案,進行邊緣運算。

1.收集訓練資料

選擇Image Project

在此頁面中可以看到整個流程只有三個步驟:1.資料2.訓練3.預測

image

我們先針對第一類Class1,可以修改名稱為「石」,然後將已有的圖片全部拉入成訓練資料,或者使用Webcam即時取得訓練資料

image

使用Webcam請記得,雖然同樣是「石頭」時,要自己模擬各種角度各種可能,例如「鬆鬆的石頭」、「小小的石頭」、「邊邊角角的石頭」、「翻過來的石頭」等等。

完成剪刀石頭布三類之後,一定要記得還有一類叫做「沒有」,是當手還沒進入畫面時,空白的,這樣就合計四類

文章標籤

夜市 小霸王 發表在 痞客邦 留言(1) 人氣()

評估版升級為正式版(零售版)的方法

1.想辦法取得序號

2.執行CMD
DISM /online /Get-CurrentEdition
確認目前安裝版本
image

3.執行CMD,
DISM /online /Get-TargetEditions
詢問可升級版本,複製要升級的版本編號,例如ServerStandard
image

4.執行CMD,將上面要升級的版本編號及取得的序號填入
DISM /online /Set-Edition:<要升級的版本編號> /ProductKey:XXXXX-XXXXX-XXXXX-XXXXX-XXXXX /AcceptEula
image

5.接下來完成後,會重開兩次


文章標籤

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

先紀錄一下

https://it-help.tips/apply-lets-encrypt-wildcard-certificate-online-in-windows/

https://gethttpsforfree.com/


夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

我有一個排程,每天固定從網路下載使用者走路的步數的JSON,然後存入資料庫做前後比對,以往都用for寫一個迴圈慢慢塞,但是發現SQL可以直接產生JSON後,我就在想SQL應該也有支援JSON直接寫入,以下就是JSON塞SQL語法SQLString,下面的「result 」就是JSON格式。

insert into 資料表 select [Userid],[Date],[last_modify_date],[Steps] from OPENJSON('" & result & "')
WITH ( [userid] int '$.Userid',[Date] varchar(20),[last_modify_date] varchar(30),[Stepcount] varchar(8) )


文章標籤

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

今天遇到一個問題,如何從題庫中亂數挑選不重複的n個題目

原本想說在中介端再處理,但是覺得麻煩,查一下google,有找到資訊


SELECT TOP 3 a.no AS 題目編號,a.question ,a.content,a.answer
FROM dbo.question as a INNER JOIN
(SELECT max(no) as no
FROM dbo.question group by no) as b ON a.no = b.no
WHERE (a.qclass='A02') 
ORDER BY NEWID()


 


文章標籤

夜市 小霸王 發表在 痞客邦 留言(1) 人氣()

textbox設定為password時,postback後密碼消失,要重新輸入

例如你有一個註冊頁面,上面有帳密資料,但是下方有一個檔案上傳,每次上傳檔案就會產生postback,因為密碼欄位特殊性,會被瀏覽器清除重來,此時利用下面的語法就可以在postback之後,重新把使用者輸入的值補上。


 If IsPostBack Then
      Dim Password As String = TextBox4.Text
      TextBox4.Attributes.Add("value", Password)            
  End If


 


文章標籤

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

剛剛在CONCAT兩個字串時,出現以下的錯誤訊息

Cannot resolve collation conflict between "Chinese_Taiwan _Stroke_Cl AS" and "Latin 1_General_ClAI' in concat operator

 

image

 

只要在CONCAT到最後的AS中間加上這句即可

CONCAT(a,b) COLLATE Chinese_Taiwan_Stroke_CI_AS as c


文章標籤

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

最近抓取網頁會出現錯誤
Could not create SSL/TLS secure channel

不過前幾天都還正常,可能是對方升級了網路SSL協定,只要在程式第一行補上這句即可


System.Net.ServicePointManager.SecurityProtocol = DirectCast(3072, System.Net.SecurityProtocolType) Or DirectCast(768, System.Net.SecurityProtocolType) Or DirectCast(192, System.Net.SecurityProtocolType) Or DirectCast(48, System.Net.SecurityProtocolType)


 


夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

SQL Server 2017 Configuration Manager打不開時
mofcomp.exe "C:\Program Files (x86)\Microsoft SQL Server\100\Shared\sqlmgmproviderxpsp2up.mof"

後面那一段「100」是你SQL的路徑,請自己找一下


夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

關於FB login後台設定,請自行參閱FB後台設定指導。這裡只說明如何在使用者按登入後,

 

一、前端html部份新增一個按鈕,並賦予超連結如下:

<a href="https://www.facebook.com/v8.0/dialog/oauth?client_id=你的client_id&redirect_uri=你的callback網址&state=亂數>你的按鈕</a>

上述的callback網址是使用者如果登入成功後,會返回你的網站的網址,並會附帶一個code讓你進行後續處理,state是返回時會帶給你,讓你確認是不是由你的網站發出(實際上沒什麼用)。

當你收到fb返回callback網址時,就是一連串的get步驟大概如下

二、asp.net後端驗證流程

1.取得使用者權仗:用callback拿到的code換成使用者權杖
        Dim code = Request.QueryString("code")
        Dim webClient1 As New System.Net.WebClient
        Dim UsertokenUrl = "https://graph.facebook.com/v8.0/oauth/access_token?client_id=你的client_id&&redirect_uri=你的callback網址&client_secret=你的FBclient密碼&code=上面拿到的code
        Dim result As String = webClient1.DownloadString(UsertokenUrl)
        Dim Usertoken = JsonConvert.DeserializeObject(Of Object)(result)

取得的result 內容如下:

"{""access_token"":""使用者權杖"",""token_type"":""bearer"",""expires_in"":時間}"

 


2.取得應用程式權杖:應用程式權杖是你FB的權杖,目的是用來完成步驟3取得使用者user_id
        Dim AccesstokenUrl = "https://graph.facebook.com/oauth/access_token?client_id=你的client_id&client_secret=你的FBclient密碼&grant_type=client_credentials"
        Dim result1 As String = webClient1.DownloadString(AccesstokenUrl)
        Dim Accesstoken= JsonConvert.DeserializeObject(Of Object)(result1)

文章標籤

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

我還有幾台主機還在跑Server 2008,題外話,2008與2016在VBox內效能差異頗多,2008明顯較快

申請HTTPS就要關閉TLS 1.0 與 TLS 1.1,並啟用 TLS 1.2,方法很簡單,修改機碼即可

可以直接複製以下文字檔,存成TLSOff.reg,然後點兩下執行,執行完後,重新開機即可iis


Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client]
"DisabledByDefault"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client]
"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server]
"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client]
"DisabledByDefault"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server]
"DisabledByDefault"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]

文章標籤

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

最近有一個案子是要在網頁中嵌入一個別人的地圖,我固定好iframe高度之後,轉給使用者看,對方用電腦看OK,但是用手機看就發現地圖被切到只剩下一點,如果改用手機版面,那地圖就太大

所以嵌入iframe是滿方便的,但如果固定iframe大小,就可能會讓iframe顯示內容被切掉或太多空白

那要如何能自動調整iframe大小呢?

 

嵌入的iframe


<iframe id="ifrm" scrolling='no' src='maps.aspx' frameborder="0" style="border: 0px; width: 100%; height: 500px;" allowfullscreen ></iframe>


 

JS語法


  <script type="text/javascript">
        var iframe = document.getElementById("ifrm");

        // Adjusting the iframe height onload event
        iframe.onload = function () {
            iframe.style.height = iframe.contentWindow.document.body.scrollHeight + 'px';
        }
    </script>


 


文章標籤

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

最近有問卷要處理,當時收資料時是採直式收集,也就是

id

自動編號

userid

使用者編號

quaid

問卷編號

qesid

問題編號

quaans

回答

1 205 Life01 q1 5
2 205 Life01 q2 3
3 205 Life02 q1 3
4 205 Life02 q2 2
5 203 Life02 q1 3
6 203 Life02 q2 4

但是現在要分析就要改成EXCEL這樣

  Life01-q1 Life01-q2 Life02-q1 Life02-q2
205 5 3 3 2
203     3 4

 


SELECT * FROM (

SELECT userid, quaid, qusid, quaans

FROM qua

) t

PIVOT (

-- 設定彙總欄位及方式

MAX(quaans) -- 用MAX取值

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

在後端執行用responser.write啟動JS的alert語法

Response.Write("<script type='text/javascript'> alert('無此使用者,請重新登入');</script>")

不過通常後面會轉向,例如登入失敗,要轉向登入頁,登入成功要轉向功能頁,這時我們會下

Response.Redirect("login.aspx")

此時上面的alert就消失了,因為Response.Redirect不會再回到原來的頁面,也不會再執行頁面加入的JS alert

要解決這樣的問題,有兩個方式

1.可以把Redirect做成JS版,合在一起執行即可

 Response.Write("<script type='text/javascript'> alert('無此使用者,請重新登入');location.href = 'login.aspx';</script>")

2.再轉網址時帶get參數過去,然後在新的網頁中做判斷

Response.Redirect("login.aspx?msg=無此使用者,請重新登入")

然後在login.aspx中讀取參數msg,再產生alert,Response.Write("<script type='text/javascript'> alert('" & msg & "');</script>"


夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

資料來源:https://stackoverflow.com/questions/23301467/javascript-exporting-large-text-csv-file-crashes-google-chrome

這是一個副程式,只要把產生好的csv字串(以","分隔欄位,以"\r\n"分隔紀錄),放到data,把要下載的檔案名稱放到fileName即可。

之前下載會有亂碼,後來發現前方要加上字串,如:"\ufeff" + csvData

例如

var csvstring='編號,姓名,成績\r\n1,John,95\r\n2,Mary,88\r\n3,Jack,50';
downloadFile(csvstring, "download.csv");


function downloadFile(data, fileName) {
        var csvData = data;
        var blob = new Blob([ "\ufeff" + csvData ], {
            type : "application/csv;charset=utf-8;"
        });

        if (window.navigator.msSaveBlob) {
            // FOR IE BROWSER
            navigator.msSaveBlob(blob, fileName);
        } else {
            // FOR OTHER BROWSERS
            var link = document.createElement("a");
            var csvUrl = URL.createObjectURL(blob);
            link.href = csvUrl;
            link.style = "visibility:hidden";

文章標籤

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

寫Web應用程式時,最好能預覽跟原始碼一起看,比較好編輯,預設是採上下切割預覽

不過現在的電腦都採用寬螢幕比較多,如果是切上下,只能看到幾行程式碼,不太合適。

其實可以換成左右預覽,方式就是工具/選項,找到webform設計工具,把垂直分割打勾即可。

image

 

image


夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

1.首先申請一個GoogleMAP GeoAPI

2.建立csv檔案,將所有要解析的地址放在'address'欄位

3.csv 檔案要用utf8格式

4.如果遇到SSL無法驗證,請安裝Win32OpenSSL

Github: https://github.com/youjunjer/Address2Geo


'''
1.Apply a Google Map Geo API Key
2.Create a csv file and put all addresses in one column with name 'address'
3.csv file must utf8 encoding
4.Install Win64OpenSSL for https protocal. (https://slproweb.com/products/Win32OpenSSL.html)
'''
import requests
import json
import numpy
import pandas as pd
StoreData = pd.read_csv('address.csv') 
geo=[]
storeaddress = StoreData['address'] #address data in the 'address' column
for i in range(storeaddress.size-1):  
  print(i)
  try:
    r = requests.get('https://maps.googleapis.com/maps/api/geocode/json?address=' + storeaddress[i] + '&key=AIzaSyDSDe5BXTPUec8dAfa44MkqsqslA4Sp484',verify=False)  
    if r.status_code ==200:
      data=json.loads(r.text) 
      geo.append(str(data['results'][0]['geometry']['location']['lat']) + ';' + str(data['results'][0]['geometry']['location']['lng']))
  except:
    #give 0;0 if address can't be parsed
    geo.append('0;0')    
df = pd.DataFrame(geo, columns= ['geo']) #export geodata to geo.csv
df.to_csv(r'geo.csv', index = False, header=True)


 


文章標籤

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

1 23