團購、直播下單使用google 表單並即時mail/SMS通知

google 有一個apps script的服務,可以結合表單 。

 

function sendEmailOnNewEntry(e) {
var sheet = e.source.getActiveSheet();
var range = e.range;
var row = range.getRow();

var emailAddress = sheet.getRange(row, 2).getValue();
var ordername =sheet.getRange(row, 3).getValue();
var ordernum = sheet.getRange(row,5).getValue();
var ordergetdate = sheet.getRange(row,6).getValue();
var mobileNumber = sheet.getRange(row, 4).getValue();

var subject = '【豐原團購】甲竹園玫瑰檸檬塔訂購成功';
var message = ordername+'您好:提醒您玫瑰檸檬塔訂購成功. 訂購數量為'+ordernum+'盒,預計取貨日為:'+ordergetdate;

if (emailAddress) {
MailApp.sendEmail(emailAddress, subject, message);
}
// 發送簡訊
if (mobileNumber) {
var smsMessage = ordername+'您好,玫瑰檸檬塔訂購成功。數量為' + ordernum + '盒,取貨日為:' + ordergetdate;
sendSMS(mobileNumber, smsMessage);
}
var lineMessage= ordername+'您好,玫瑰檸檬塔訂購成功。數量為' + ordernum + '盒,取貨日為:' + ordergetdate;
sendLineNotify(lineMessage);
}

function sendLineNotify(message) {

var lineNotifyToken = 'xxxxxxxxxxxx';
var url = 'https://notify-api.line.me/api/notify';
var options = {
'method': 'post',
'payload': 'message=' + message,
'headers': {
'Authorization': 'Bearer ' + lineNotifyToken
}
};
UrlFetchApp.fetch(url, options);
}

function sendSMS(mobile, message) {
var url = 'http://api.twsms.com/json/sms_send.php';
var username = 'xxxxxxxx'; // 替換為你的用戶名
var password = 'xxxxxxxxxx'; // 替換為你的密碼

var payload = {
username: username,
password: password,
mobile: mobile,
message: encodeURIComponent(message)
};

var options = {
method: 'post',
payload: payload
};

UrlFetchApp.fetch(url, options);
}

有趣的.net core 後端人員AI面試

昨天晚上,wil 保哥發了一則貼文。就是用gpt4訓練了一個.net core 後端工程師的面試line。主要是透過問答方式,瞭解像.net core與.net framework的異同、restful api的設計原則、非同步、DI、memorycache、middleware、entity framework。

wil保哥徵才原貼

gpt 多奇 AI 面試官 ( .NET )

line官方帳號  @290quxfz

地震使用業務型無線電防災

2017年辦市集時,前小編建議的無線電
用的時間不多,但為了怕電池問題 三不五時都帶出來
這次地震,剛好就拿到公司做防震的一個宣導
在地震當下會有停電,這時候依靠基地台的手機通訊僅能撐一小時
而一般無線電1800毫安(mah),以接收的耗電量100ma來計算。可以待機18小時(電池續航力 = 電池容量 (mAh) / 負載電流 (mA)),以救難整點呼救的慣例,可以有至少一週的電量。
而這種免考照的UHF業務型無線電,依台灣發給的FRS從467.5125~467.6750共14頻道以及38組CTCSS (Continuous Tone-Coded Squelch System),也是很容易找得到。缺點是聽不到收音機而已~ 但這頻率對於室內的穿透性是很高的

使用.net 搖控 DJI TELLO 無人機

 

看到DJI TELLO有SDK,幾個重點

1 使用的是UDP

2   IP是: 192.168.10.1

3  使用的PORT有 8889(指令) 8890(狀態) 11111(取得畫面)

程式碼大概就是


// 定義 IP

string DJIIP = "192.168.10.1";

//定義埠號

int DJIPort = 8889;

// 開啟

UdpClient udpClient = new UdpClient();

udpClient.Connect(DJIIP,DJIPort);

//
Byte[] sendCmdBytes = null;

sendCmdBytes = Encoding.UTF8.GetBytes(“takeoff”);

udpClient.Send(sendCmdBytes, sendCmdBytes.Length);

 

 

https://www.ryzerobotics.com/zh-tw

https://www.ryzerobotics.com/zh-tw/tello/downloads

 

 

透過前端程式開啟檔案的方式

一、 tag a

<a href=”” download=””>download</a>

or

const taga = document.createElement(“a)

taga.href= “”

taga.download = “”

taga.click()

這邊的download屬性是html5加上的,如果沒有指定的話就會依照content-disposition確定,再沒有的話就依url 最後request的部份

2 window.open

window.open(”,’_blank’)

or

window.open(”,’_blank’,’download=’)

3 location.href/location.assign/location.replace/location.reload

與window.open一樣

4 XMLHttpRequest

就是ajax,與axios、fetch相同

const xhr= new XMLHttpRequest()

xhr.open(‘GET’,”)

xhr.send()

xhr.onload = function(){

const blob = new Blob([xhr.reponse],(type:”})

const a = document.createElement(‘a’)

a.href= URL.createObjectURL(blob)

…..

}