有照後鏡視野的自行車眼鏡
https://youtube.com/clip/Ugkx-HedLrLf9BMf_ao2UPkhtwRK7Xchuzx-?si=GPsNCj1qGP3RoKvb
有照後鏡視野的自行車眼鏡
https://youtube.com/clip/Ugkx-HedLrLf9BMf_ao2UPkhtwRK7Xchuzx-?si=GPsNCj1qGP3RoKvb
將quest3變為3d camera
準備工作:
首先確保你已經安裝好ADB,擁有開發者許可權,裝好Oculus官方驅動,並且將你要投屏的Oculus Quest的開發者模式開啟~
下載第三方投屏應用scrcpy:https://github.com/Genymobile/scrcpy/releases
(無法訪問GitHub的同學,我為你們准备了百度網盤:https://pan.baidu.com/s/10RRv0Wb96F3suABAG-f0tA 提取碼:c99f )
將Qculus Quest和你要投屏的電腦透過USB線連線,Win+R執行CMD輸入命令檢查QUEST的ADB許可權:
adb裝置
已連線後adb devices的兩種常見結果
如果你的ADB連線正常則會裝置序列號後顯示 device。 如果你缺少許可權則會顯示unauthorized,如果你沒有顯示或找不到adb命令,那就是你環境沒配置好或裝置沒插好,請移步其他文章解決環境問題。
執行scrcpy,此時已可以在有線模式中投屏了。
无线投屏:
此時Oculus Quest仍然是有線連線狀態,透過ADB命令確認Quest在无线网络的IP地址:
adb shell ifconfig wlan0
檢查IP地址
inet addr後面就是你ADB連線裝置(Quest)的IP地址。 記好這個地址。
繼續設定ADB連線端口:
adb tcpip 5555
此命令完成後可以无线連線设备的ADB了,現在我們拔掉Quest的USB連線線。
輸入ADB命令連線埠(IP地址換成你自己的):
adb連線192.168.50.40:5555
如果提示connected則說明已經連線成功,可以用adb devices來檢查連線的裝置列表和許可權。
无线连接的一连串命令和返回结果
此時看到連線的IP和端口以及裝置狀態為device則無線投屏的設定工作到此完成,執行scrcpy即可無線投屏!
單眼投屏
執行scrcpy -c 1440:1600:0:0,裁剪為1440x1600分辨率,偏移為0,0進行顯示,即可實現單目顯示效果,整個螢幕大小是2880x1600,還可以根據自己喜好進行細化調整。
安裝套件
編輯設定
測試
打開防火牆
設定router的虛擬server
在CentOS 7上安装Squid代理服务器非常简单。你可以使用Yum包管理器来安装Squid。以下是具体的步骤:
要配置Squid代理服务器以仅允许特定IP地址来使用,你可以编辑Squid的配置文件并添加适当的ACL(Access Control List)和http_access规则。以下是如何配置Squid以仅允许特定IP地址使用的示例:
打开Squid的配置文件/etc/squid/squid.conf
:
bashsudo nano /etc/squid/squid.conf
在配置文件中找到并编辑http_access
部分。通常,这部分包括一系列http_access allow
和http_access deny
规则。
在http_access
规则之前,添加一个新的ACL规则以定义你要允许的IP地址。例如,要允许IP地址为192.168.1.100
的主机,可以添加以下行:
cssacl allow_ip src 192.168.1.100
在http_access
规则中,添加一条规则以允许特定ACL。例如,要允许allow_ip
ACL,可以添加以下行:
http_access allow allow_ip
这将允许ACL allow_ip
中列出的IP地址访问代理服务器。
在其他http_access
规则之后,确保添加http_access deny all
,以拒绝所有未明确允许的请求。
csshttp_access deny all
保存配置文件并退出文本编辑器。
重新加载Squid以应用更改:
sudo systemctl reload squid
现在,Squid代理服务器将仅允许192.168.1.100
(或你添加的其他IP地址)的主机来使用。确保按照需要添加和配置更多的ACL和http_access
规则,以满足你的具体访问控制需求。
同步口譯app的開發過程
iPhone
即時語音辨識用內建的就很強
private let speechRecognizer = SFSpeechRecognizer(locale: Locale(identifier: "zh-TW"))!
// private let speechRecognizer = SFSpeechRecognizer(locale: Locale(identifier: "ja-JP"))!
// private let speechRecognizer = SFSpeechRecognizer(locale: Locale(identifier: "en-US"))!
// private let speechRecognizer = SFSpeechRecognizer(locale: Locale(identifier: "th-TH"))!
// private let speechRecognizer = SFSpeechRecognizer(locale: Locale(identifier: "vi-VN"))!
// private let speechRecognizer = SFSpeechRecognizer(locale: Locale(identifier: "ko-KR"))!
private var recognitionRequest: SFSpeechAudioBufferRecognitionRequest?
private var recognitionTask: SFSpeechRecognitionTask?
private let audioEngine = AVAudioEngine()
speechRecognizer.delegate = self
// Asynchronously make the authorization request.
SFSpeechRecognizer.requestAuthorization
可以參考xcode中的範例 SpokenWord
然後,翻譯的部分,我先嚐試用 google mlkit的翻譯,但翻譯品質很差,我打算改用google 雲端付費的api來試試,每月有50萬字的免費額度
google mlkit translate的作法
要先引用套件
pod 'GoogleMLKit/Translate', '4.0.0'
然後使用的方法是
var mytr: Translator?
let options = TranslatorOptions(sourceLanguage: .chinese, targetLanguage: .japanese)
mytr = Translator.translator(options: options)
let conditions = ModelDownloadConditions(
allowsCellularAccess: false,
allowsBackgroundDownloading: true
)
mytr?.downloadModelIfNeeded(with: conditions) { error in
guard error == nil else { return }
print("model ok")
// Model downloaded successfully. Okay to start translating.
}
self.mytr?.translate(self.tv_talk.text) { translatedText, error in
guard error == nil, let translatedText = translatedText else { return }
self.tv_my.text=translatedText
}
同樣也有範例參考 TranslateExample
使用OpenAI chatGPT技術, 根據公司公開重大訊息的內容做出解讀,主要是看這訊息對公司股東的影響,進而會不會影響到股價
用python寫一支可以取得5秒加權指數歷史資料的程式
import requests
import pandas as pd
import os
# 這個函數用來判斷要不要跳過某一行
def skip_rows(row):
return row.startswith("說明:") or row.startswith("民國")
def download_taiex_csv(date):
print(date+"下載轉換中")
url = f'https://www.twse.com.tw/exchangeReport/MI_5MINS_INDEX?response=csv&date={date}&type=csv'
response = requests.get(url)
tmpfilename = f'tmp{date}.csv'
with open(tmpfilename, 'w') as f:
f.write(response.text)
try:
df = pd.read_csv(tmpfilename, skiprows=1)
except ValueError:
print(f'No data available for {date}')
else:
df = df[['時間', '發行量加權股價指數']]
df.rename(columns={'發行量加權股價指數': '加權指數'}, inplace=True)
df['時間'] = df['時間'].apply(lambda x: x.replace('=', '').replace('"', ''))
df['時間'] = pd.to_datetime(df['時間'], errors='coerce')
df['時間'] = df['時間'].dt.strftime('%H:%M:%S')
df['加權指數'] = df['加權指數'].str.replace(',', '').astype(float)
df = df.dropna(subset=['時間'])
print(df.head())
# 儲存為CSV檔案
df.to_csv('taiex_%s.csv' % date, index=False)
os.remove(tmpfilename)
# 主程式
start_date = '20230329'
end_date = '20230401'
for date in pd.date_range(start_date, end_date):
download_taiex_csv(date.strftime('%Y%m%d'))
快速幫android studio app的畫面佈局,增加多國語言
可以參考這一篇說明
https://thumbb13555.pixnet.net/blog/post/333199480-supportdifferentlanguages