小黑
6
位追蹤者
追蹤
嗨,我是一名程式設計師,會在這分享開發與學習紀錄。
小黑與程式的邂逅
7
會員
78
內容數
加入
前往沙龍
嗨,我是一名程式設計師,會在這分享開發與學習紀錄。
加入
前往沙龍
發佈內容
我的成就
由新到舊
[Go]OAuth2.0
授權碼模式連線流程 用戶端請求自己的伺服器。 伺服器發現用戶沒登入,就導向認證伺服器。 認證伺服器顯示授權頁面,等待用戶授權。 用戶確認授權後,授權頁面會向認證伺服器請求授權碼。 用戶獲取授權碼。 用戶將授權碼傳給伺服器。 伺服器拿授權碼向認證伺服器取得token。 應用註冊
2024-01-13
3
[Go]網頁爬蟲
package main import ( "fmt" "io" "net/http" "os" "strconv" ) func Get(url string) (result string, err error) { resp, err1 := http.Get(url) if
2024-01-10
0
[Go]產生亂數
package main import "fmt" func randGenerator() chan int { ch := make(chan int) go func() { for { //select會嘗試執行各個case,如果都可以執行,那麼隨機選一個執行 se
2024-01-10
0
[Go]多通道監聽器
package main import ( "fmt" ) func foo(i int) chan int { ch := make(chan int) go func() { ch <- i }() return ch } func main() { ch1, ch2, ch3
2024-01-10
0
[Go]訊息併發發送
package main import "fmt" func SendNotification(user string) chan string { //...... //建立一個通道來保存訊息 notifications := make(chan string, 500) //開啟
2024-01-10
0
[Go]生成CSV
package main import ( "database/sql" "encoding/csv" "fmt" _ "github.com/go-sql-driver/mysql" "log" "os" "strconv" ) var db *sql.DB type User
2024-01-10
0
[Go][RPC]微服務
gRPC是一款跨平台、高性能的RPC框架,他可以在任何環境下執行,主要用於後端為服務開發。在用戶端應用程式中,可以像本地物件那樣呼叫遠端伺服器的方法,因此可以創建出分散式應用。 使用 到https://github.com/protocolbuffers/protobuf/releases下
2024-01-10
2
[Go][Socket]聊天室(Server)
package main import ( "fmt" "net" "time" ) var ConnSlice map[net.Conn]*Heartbeat type Heartbeat struct { endTime int64 //結束時間 } func main() {
2024-01-08
0
[Go][Socket]聊天室(Client)
package main import ( "bufio" "fmt" "net" "os" "time" ) func main() { //指定協定 tcpAddr, err := net.ResolveTCPAddr("tcp4", "127.0.0.1:8086") if
2024-01-08
0
[Go][ORM]Gorm
Gorm是Go當中一款ORM函數褲,有以下特點: 支持連結 支援鉤子函數Hook 支援預先載入 支援交易 支援複合主鍵 支援SQL生成器 支援資料庫自動遷移 支援自訂日誌 可擴充性 所有功能都被測試覆蓋 安裝 go get -u github.com/jinzhu/gor
2024-01-08
0
[Go][Redis]Go與Redis
下載 go get github.com/gomodule/redigo 連接 package main import ( "fmt" "github.com/gomodule/redigo/redis" ) func main() { c, err := redis.Dial(
2024-01-08
0
[Go][Redis]使用方法
Redis被稱為「資料結構伺服器」,因為其中的值(Value)可以是字串(String)、雜湊(Hash)、清單(List)、集合(Set)和有序集合(Sorted Set)等類型。 安裝 下載 wget https://download.redis.io/release/redis-6.
2024-01-08
2
[Go][MySQL]使用方法
下載驅動 go get -u github.com/go-sql-driver/mysql 連接資料庫 package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) var db *
2024-01-03
1
[Go]處理請求
Request內容 package main import ( "fmt" "log" "net/http" "strings" ) func request(w http.ResponseWriter, r *http.Request) { //這些資訊是輸出到伺服器端的列印訊息
2024-01-02
3
[HTTP]狀態碼
資訊回應(Informational responses) 100~199 100(Continue):伺服器在等待用戶端繼續請求。 102(Processing):伺服器收到請求正在處理中。 成功回應(Successful responses) 200~299 200(OK):請求
2024-01-02
1
[HTTP]標頭資訊
Accept:用戶端能夠接收的內容類型。 Accept: text/plain, text/html Accept-Charset:瀏覽器可以接受的字元編碼集。 Accept-Charset: utf8 Accept-Encoding:指定瀏覽器可以支援的web伺服器返回內容壓縮編碼
2024-01-02
1
[Go]接收請求
ServeMux ServeMux是一個包含映射的結構,映射會將URL映射到對應的伺服器。 DefaultServeMux DefaultServeMux是net/HTTP中預設的多工器,是ServeMux的實例。多工器要根據URL的請求導向到不同的伺服器。DefaultServeMux是
2024-01-01
3
[Go]net/HTTP封包
HTTP伺服器端 package main import ( "net/http" ) type Refer struct { handler http.Handler refer string } //實現中介軟體邏輯 func (this *Refer) ServeHTTP(
2024-01-01
0
[Flutter]JSON解析
解析成List List items=json.decode(jsonStr); print(items[0]["your_key"]); 解析成Map Map<String, dynamic> user = json.decode(json); print('${user['your_k
2023-12-28
2
[Flutter]WebSockets
這邊會使用WebSocketChannel去與http://www.websocket.org做連線。 連線 final channel = IOWebSocketChannel.connect('wss://echo.websocket.events'); 接收 StreamBui
2023-12-26
0
[Flutter]Dio
Dio是一個Dart Http請求庫,支援Restful API、FormData、攔截器、請求取消、Cookie管理、檔案上傳/下載、逾時等。 加入 dependencies: dio: ^x.x.x #请使用pub上的最新版本 使用 GET Response response;
2023-12-26
0
[Flutter]HttpClient
配置 idleTimeout:在httpClient請求結束後,會繼續保持連線,直到超過idleTimeout值才會關閉連接。 connectionTimeout:和伺服器建立連線逾時,如果超過connectionTimeout值則會拋出SocketException異常。 maxConnec
2023-12-25
2
[Flutter]Notification
Notification是Flutter中一個重要的機制,在widget樹中,每個節點都可以分發通知,通知會沿著目前節點向上傳遞,所有父節點都可以透過NotificationListener來監聽通知。 Flutter中將此由子向父的傳遞通知的機制稱為通知冒泡(Notification Bubbli
2023-12-25
3
[Flutter]手勢識別
GestureDetector onTap、onDoubleTap和onLongPress class _GestureTestState extends State<GestureTest> { String _operation = "No detected!"; //事件名稱 @o
2023-12-19
3
[Flutter]影音播放器
新增video_player 在pubspec.yaml中加入video_player。 設置權限 Android 在AndroidManifest.xml檔案中的<application>裡,加入下列代碼。 <uses-permission android:name="androi
2023-12-19
0
[Flutter]SnackBar
GestureDetector( onTap: () { const snackBar = SnackBar(content: Text('Tap')); ScaffoldMessenger.of(context).showSnackBar(snackBar); },
2023-12-19
0
[Flutter]SQLite
加入套件 在pubspec.yaml添加sqflite與path_provider。 建立數據模型 id:識別欄位,唯一值為整數資料類型 name:存放名字為字串資料類型 class People { final int? id; final String? name;
2023-12-19
0
[Flutter]SharedPreferences
首先需要在pubspec.yaml文件中添加依賴。 宣告 SharedPreferences record = await SharedPreferences.getInstance(); 寫入 //字串資料 await record.setString(key, value); //
2023-12-19
1
[Flutter]Table
class HomePage extends StatelessWidget { @override Widget build(BuildContext context) { return Center( child: Table( columnWid
2023-12-19
0
[Flutter]GridView
下面代碼為兩列的GridView class HomePage extends StatelessWidget { @override Widget build(BuildContext context) { return new GridView.count( cro
2023-12-19
0
[Flutter]ListView
可以透過scrollDirection來設定垂直或水平滾動列表資料。 垂直滾動 class HomePage extends StatelessWidget { //列表集合資料 List<Widget> list = <Widget>[ ListTile( ti
2023-12-18
0
[Flutter]套件管理
這篇使用pubspec.yaml來管理第三方依賴套件。YAML是一種直覺、可讀性高的文件格式;他和xml或Json相比語法簡單且容易解析,所以常用於配置文件。 Flutter預設的設定檔是pubspec.yaml,底下是關鍵字解釋: name:應用程式或套件名稱。 description: 應用
2023-12-18
2
[Flutter]Drawer
class MyApp extends StatefulWidget { @override myAppState createState() => myAppState(); } class myAppState extends State<MyApp> { //目前選擇頁索引值
2023-12-14
1
[Flutter]TabBar
class MyApp extends StatelessWidget { final List<Tab> myTabs = <Tab>[ Tab(text: '第一頁'), Tab(text: '第二頁'), Tab(text: '第三頁'), ]; fina
2023-12-14
0
[Flutter]BottomNavigationBar
屬性 items:底部頁面導航項目。 currentIndex:目前頁面。 onTap:點擊按鈕後觸發事件。 Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Te
2023-12-13
0
[Flutter]AlertDialog
用來顯示訊息提示用戶。 屬性 title:訊息對話框視窗標題 content:訊息對話框視窗內文 actions:訊息對話框視窗,按鈕觸發事件 AlertDialog( title: Text('Alert'), content: const Text('Alert
2023-12-13
0
[Flutter]FloatingActionButton
屬性 onPressed:按下後觸發的方法。 elevation:陰影大小值。 foregrnundColor:前景色。 foregroundColor: Colors.amber, backgroundColor:背景色。 backgroundColor: Colors.red,
2023-12-13
0
[Flutter]頁面切換
下一頁 沒傳資料 Navigator.push(context, MaterialPageRoute(builder: (context) => NewPage())); 有傳資料 Navigator.push(context, MaterialPageRoute(builder: (c
2023-12-12
1
[Flutter]Image
方法 asset:載入此APP指定資料夾內的資源圖片。 Image.asset('assets/images/logo.png') file:載入手機指定路徑位置圖片。 Image.file('your_image_path') network:載入網路指定網址圖片。 Image
2023-12-12
2
[Flutter]Button
樣式 RaisedButton:凸起 FlatButton:扁平化 OutlineButton:邊框 IconButton:圖示 屬性 onPressed:按下後觸發方法,若是 null 則不能用。 RaisedButton( child: Text('Click'), o
2023-12-12
0
[Flutter]Text
顯示文字 Text('123456') 限制行數 Text('1\n2\n3\n4\n5\n6', maxLines: 2) 顯示樣式 字體大小 Text('123456', style: TextStyle(fontSize: 30)) 字體顏色 Text('12345
2023-12-12
0
[Flutter]佈局
Container child:可以設定一個子元件 Container(child:Text('child')); color:背景顏色 Container(color: Color.fromARGB(255, 255, 255, 255)); alignment:對齊方式 Co
2023-12-12
0
[Database][SQL]資料庫查詢(三)
聚合函數 可以對資料的筆數、平均、最大、最小和加總的運算,提供查詢結果:如下表示: COUNT(Column):計算筆數,「*」是統計紀錄數。 AVG(Column):計算欄位平均值。 MAX(Column):計算欄位最大值。 MIN(Column):計算欄位最小值。 SUM(Colum
2023-12-11
2
[Database][SQL]基礎語法
種類 SQL指令分三大部分: 資料定義語言(Data Definition Language,DDL):建立資料表、索引和檢視表等,和定義資料表的欄位。 資料操作語言(Data Manipulation Language,DML):資料表紀錄查詢、插入、刪除和更新指令。 資料控制語言(Dat
2023-12-11
2
[Database][SQL]資料庫查詢(二)
多條件查詢 AND運算子 SELECT * FROM your_table_name WHERE column1 LIKE '_value1%' AND column2 = number2 OR運算子 SELECT * FROM your_table_name WHERE colu
2023-12-11
0
[Database][SQL]資料庫查詢(一)
查詢範圍 指定欄位 SELECT column1, column2, column3,... FROM your_table_name 不重複欄位 SELECT DISTINCT column1 FROM your_table_name 欄位別名 SELECT column1 A
2023-12-11
0
[PHP]REST API
REST(REpresentational State Transfer)是一種WWW的Web架構,常被使用於JSON或XML的Web服務,而符合REST原則的系統就稱為RESTful。REST API(RESTful API)是一種符合REST的API應用。 方法說明 GET:向伺服器取得
2023-12-11
1
[PHP]關鍵字建議列表
在欄位輸入關鍵字,就會顯示提示列表。 架構 由HTML表單、jQuery的AJAX和PHP與MySQL組成。 先在HTML的文字輸入欄位,輸入關鍵字,接著會呼叫jQuery的AJAX去伺服器,取得建議列表;伺服器收到需求後,PHP會連接MySQL,取得建議列表,接著會建立JSON文件並回傳。
2023-12-11
2
[PHP][JSON]介紹
JSON(JavaScript Object Notation)是AJAX(參考:[PHP][AJAX]介紹)常用的資料交換格式。在PHP有提供函數,可以將資料轉換成JSON。除外JSON比XML快速且簡單。 語法 資料是由鍵和值(Key-value)組成。 鍵和值之間用「:」區隔。 資料之
2023-12-07
3
[PHP][AJAX]介紹
AJAX(Asynchronous JavaScript And XML)為JavaScript和XML的非同步技術,可以讓瀏覽器建立快速、更加和容易使用的操作介面。AJAX核心技術是非同步的HTTP請求(Asynchronous HTTP Requests),除了第一次載入網頁外,HTTP請求是在
2023-12-07
1
[PHP][Laravel]建立專案
Laravel是一個以MVC(參考:[設計模式]MVC)為架構的PHP Web框架。Laravel支援使用者身份驗證和授權,提供模組化套件系統。Laravel使用Blade模板系統將PHP程式碼與HTML網頁分離。 安裝環境 下載安裝composer https://getcomposer.o
2023-12-05
3
[設計模式]MVC
2023-12-05
0
[PHP]留言功能
這邊分三個部分:新增、檢視和寄送郵件給留言者。 新增 底下是HTML的輸入內容的程式碼: <table border="1"> <tr> <td><font size="2">姓名:</font></td> <td><input type="text" size="30"
2023-12-05
0
[PHP]上傳檔案
底下是HTML的上傳檔案程式碼: <form action="upload.php" method="post" enctype="multipart/form-data"> 選擇檔案: <input type="file" name="file"/><hr/> <input typ
2023-12-05
2
[PHP][Cookie]建立購物車
購物車(Shopping cart)是採購商品時,很重要的工具。 此篇是使用Cookie建立購物車。 從HTML的下拉式選單選擇商品,並輸入數量,然後加入購物車。而在購物車中,可以刪除商品。 底下是HTML的下拉式選單程式碼: <select name="Item"> <option v
2023-12-05
0
[PHP]檔案讀寫
檔案屬性 filetype(string):回傳參數檔案的種類字串,可能的回傳值有:fifo、char、dir、block、link、file和unknown,如果有錯誤回傳false。 fileatime(string):回傳參數檔案的最後存取時間,單位是UNIX的時間戳記,如果錯誤回傳fal
2023-12-05
0
[PHP]檔案操作函數
路徑處理 basename(string [.string]):回傳第一個參數路徑字串的檔案名稱,包含副檔案,如果有第二個參數字串,就會在檔案名稱刪除此字串,例如:刪除副檔名".php"。 dirname(string):回傳參數路徑字串中的路徑。 realpath(string):回傳參數路
2023-12-05
0
[PHP]狀態管理
HTTP通訊協定不會持續保持連線和保留客戶端的使用者狀態,因此需要將使用者狀態傳遞下去,以便保留使用者狀態,稱為「狀態管理」(State Management)。 客戶端: 此部份是將資料存在使用者電腦或HTML網頁或標籤中,以便傳遞。常用方法如下: 表單欄位:使用HTML表單欄位內容傳遞資料
2023-11-24
4
[PHP]快取保留
為了加速網頁存取,因此都會將網頁內容保留在快取空間(Cache)的資料夾或磁碟。也就是說,當你在瀏覽網頁時,瀏覽的網頁內容會被保留在你電腦裡的快取空間(Cache),在你重複瀏覽到相同網頁時,瀏覽器會先到快取空間尋找有沒有該網頁的的檔案,如果有就直接取用,不會再次下載網頁內容。 但當網頁內容有保密
2023-11-24
1
[PHP]系統資訊
可以使用$_SERVER取得Web伺服器的系統資訊,常用變數名稱如下: GATEWAY_INTERFACE:伺服器CGI版本。 PHP_SELF:目前執行PHP程式的檔案名稱。 DOCUMENT_ROOT:目前執行PHP程式的根目錄。 QUERY_STRING:URL參數的資料。 REMO
2023-11-23
2
[PHP]預定變數
$GLOBALS:包含目前執行PHP程式的所有全域變數,其鍵值是全域變數名稱。 $_SERVER:Web伺服器的變數,屬於目前PHP程式執行環境的相關資料。 $_GET:儲存HTTP GET方法傳入PHP程式表單欄位值或URL參數的結合陣列,其鍵值是欄位或參數名稱。 $_POST:儲存HT
2023-11-23
0
[Database][MySQL]資料型態
底下列出常用的資料類型: TINYINT:最小的整數,有符號整數-128~127;無符號整數0~255。 SMALLINT:短整數,有符號整數-32,768~32,767;無符號整數0~65,535。 MEDIUMINT:中型整數,有符號整數-8,388,608~8,388,607;無符號整數
2023-11-23
0
[iOS][swift]UILabel字體顏色漸層
extension UILabel{ func GradientLabel(_ colors: [Any]? , isVertical : Bool, locations: [NSNumber]? = [0.0, 1.0]) { for sub:UIView in sel
2023-11-14
1
[iOS][swift]UIView顏色漸層
class GradientView: UIView { private var gradientLayer = CAGradientLayer() private var vertical: Bool = false func draw(_ colo
2023-11-13
0
[swift]CoreBluetooth(Service)
CBCentralManager:藍芽管理中心,做外部設備搜尋、連接。 CBPeripheral:外部設備 CBCharacteristic:外部設備的特徵。 首先要在info.plist裡設定新增藍芽服務。然後做宣告,如下: var centralManager: CBCentralM
2023-11-13
1
[swift]CoreBluetooth(Client)
CBCentralManager:藍芽管理中心,做外部設備搜尋、連接。 CBPeripheral:外部設備 CBCharacteristic:外部設備的特徵。 首先先宣告: var centralManager: CBCentralManager = CBCentralManager.ini
2023-11-13
0
[MacOS][swift]SavePanel/OpenPanel
儲存檔案: let savePanel = NSSavePanel() savePanel.canCreateDirectories = true savePanel.showsTagField = false savePanel.nameFieldStringValue = "localFile
2023-11-13
0
[swift]Core Data新增、更新、查詢、刪除
用來操作 Core Data 的常數 private let coreDataContext = (NSApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 取的資料數量: func get
2023-11-13
0
[MacOS][swift]關閉專案
func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { NSApplication.shared.terminate(self) return
2023-11-09
0
[swift]字串交換、切割、串接、擷取、檢查
字串交換: let str = "被誰喜歡,又喜歡誰呢?" // 交換 print(str.replacingOccurrences(of: ",又", with: "?")) //被誰喜歡?喜歡誰呢? 字串去首尾: let str = "被誰喜歡,又喜歡誰呢?" // 去首尾 print
2023-11-09
0
[swift]data、int與string轉換
int to data: //int to data var num = -12300 let data = Data.init(bytes: &num, count: MemoryLayout.size(ofValue: num)) // bytes : 8 elements //
2023-11-09
0
[swift]移位運算(Shift Operator)
以底下兩數字為例: let bin1:UInt8 = 0b11111111 //255 let bin2:UInt8 = 0b00001000 //8 向右位移: let shiftRightBin1Result = bin1>>1 print(String(shiftRightBin1R
2023-11-09
0
[swift]位元運算(Bitwise operator)
以底下兩數字為例: let bin1:UInt8 = 0b11111111 //255 let bin2:UInt8 = 0b00001000 //8 and運算 let andResult = bin1 & bin2 print(String(andResult,radix: 2))//
2023-11-09
0
[swift]二、八、十六進制表示方式
二進制表示方式 let bin1:UInt8 = 0b11111111 //255 let bin2:UInt8 = 0b00001000 //8 八進制表示方式 let otc:UInt8 = 0o377 //255 十六進制表示方式 let hex:UInt8 = 0xff /
2023-11-08
0
[swift]二、八、十與十六進位(負數)轉換 使用uint16、int16
十進位轉二進位(Decimal to Binary) let dec = -813 let bin = String(UInt16(bitPattern: Int16(dec)), radix: 2) print(bin) // "1111110011010011" 十進位轉八進位(Deci
2023-11-08
2
[swift]二、八、十與十六進位轉換
十進位轉二進位(Decimal to Binary) let dec = 813 let bin = String(dec, radix: 2) print(bin) // "1100101101" 十進位轉八進位(Decimal to Octal) let dec = 813 let o
2023-11-08
1
[swift]時間轉換
取得當前時間字串 let currentDate = NSDate() let dateFormatter = DateFormatter() dateFormatter.locale = Locale.init(identifier: "zh_Hant_TW") dateFormatter.ti
2023-11-08
0
[swift]時間格式
取得當前時間 let currentDate = NSDate() 設定時間格式 樣式一: let dateFormatter = DateFormatter() dateFormatter.locale = Locale.init(identifier: "zh_Hant_TW") d
2023-11-08
0
vocus 勳章
NFT
了解
如何蒐集勳章