透過指令、讓系統預設瀏覽器開啟網頁

最近因為要碰 OAuth 2.0(維基百科)的東西,可能還得自己實作出 C++ 的 OAuth 方案,所以就開始研究相關的東西了。

而沒想到原理大概了解後,實作的第一步、也就是要透過 C++ 讓系統預設瀏覽器開啟 OAuth 的授權網頁(可以想像成要開啟一個特定網址的網頁)的時候就卡關了…

基本上,C++ 裡面可以透過 system() 這個函式(參考)來執行系統命令,所以其實這邊 Heresy 的構想,就是透過 system() 來執行系統指令、開啟網頁。

而對應的指令呢,其實找了一下,還算滿簡單的:

閱讀更多»

廣告

PHP 奇怪的 session_start 失敗問題:UTF-8 BOM

最近在弄新的系統的時候,同事在 Windows 上寫的 PHP 程式在要搬到 PHP Apache Docker 的時候,出現了一個奇怪的問題;那就是它會出現下面的錯誤:

Warning: session_start(): Cannot start session when headers already sent in 
XXX.php on line X

這個錯誤還算滿明確的,基本上就是在呼叫 session_start() 這個 PHP 的函式之前,就先粗出了其他的內容所造成的。

但是仔細檢查過檔案後,卻發現其實根本沒有輸出任何東西啊?

閱讀更多»

檢查網頁的表單資料的方法紀錄

這篇算是自己在幫不是自己寫的網站找 Bug 的時候,找的一些方法的紀錄。

基本上,主要是從前一陣子開始有在用某些政府單位的網站系統,結果被告知送出的表單內容出了一堆錯誤,結果搞到自己火大,只好自己開始找錯誤是怎麼發生的了。

由於網頁不是自己寫的,後台也沒有權限看,也沒有系統可以查詢,所以只好靠瀏覽器來找看看表單送出的狀況了。

由於操作系統時是使用 Google Chrome,所以接下來要找問題,當然也就是使用 Chrome 了;而基本上的操作,都是按下 F12 叫出 DevTools 後再開始的~

閱讀更多»

以後要自己架設 Cooliris 照片牆了~

在 2009 年的時候,Heresy 曾經介紹過「Cooliris Express」這個 3D 的網頁照片牆服務。他基本上是一個透過 Flash 來做的照片、影片呈現介面,而由於它的設計在當時算是滿漂亮的、也可以用來取代許多沒那麼好用的照片幻燈片,所以個人還滿喜歡這個服務的~

也因此,在 Heresy 的部落格裡,有不少文章,都有透過 Cooliris Express 來做照片的展示。

不過,Cooliris 這家公司在 2014 年十一月的時候,已經被 Yahoo 收購了,同時 Cooliris Express 這項服務,也被迫關閉了…根據官方的說法,這項服務將在 2015/03/31 完全地關閉,到時候所有連到 Cooliris 的照片牆,都將無法使用。

閱讀更多»

WebSocket++ 的 Client

由於從去年開始,Heresy 就開始有在寫網頁的東西了,所以也開始玩 HTML5 新的 WebSocket 這項技術。而由於當初自己透過 C++ 來建立 WebScoket Server 的需求,所以後來就去找了 WebSocket++ 這個函式庫(官網)來用。

當時也邊學邊寫了幾篇文章,算是自己的紀錄。有興趣的可以參考:

不過,當時 Heresy 都只有把它拿來建立 Server 過,並沒有用來建立 Client 端的經驗;而由於最近要用 C++ 寫個 WebSocket Client,所以就在來追加一下這系列的文章吧~

閱讀更多»

瀏覽器的統一指標事件:Pointer Event

在早期的瀏覽器,輸入的事件其實相對單純,只有考慮到滑鼠和鍵盤兩種;而當時的滑鼠事件,其實就是 clickmousedownmouseup 等等的事件(Mouse Event、參考)。但是當手機、平板開始流行時候,再行動裝置上的主要操作介面,已經從滑鼠變成是觸控了~

由於觸控和滑鼠的操作邏輯,算是有根本上的差異的,再加上大部分的裝置又支援多點觸控,所以雖然瀏覽器大多會把觸控的事件對應回傳統的滑鼠事件,但是如果希望能有更細緻的操作,傳統的滑鼠事件是不夠用的。

而目前 W3C 針對觸控操作的部分,則有兩種事件模型可以使用,其中一個是專門為了觸控設計的 Touch Event(W3C),這應該算是目前大部分行動瀏覽器所支援的事件架構;而另一種,則是由微軟所提出的、試圖統一所有指標裝置的事件架構、Pointer Event(W3C)。

閱讀更多»

可以在觸控裝置上長壓的網頁按鈕

最近在認真開發一個 Web 上的互動程式,其中一個基本的功能,就是要透過 HTML 的按鈕、來做操作物體的移動與旋轉;而為了方便操作,除了一般的按下按鈕觸發一次事件外,也希望可以透過壓著按鈕,來做到持續性地控制。

而由於 HTML 現在的標準按鈕( <input type="button" />參考)雖然可以長按,但是並沒有辦法偵測他是否被按下,所以,要不就是用別人寫好的,不然就是得自己實作了~

而由於一些原因,Heresy 是選擇自己實作這部分的功能。由於目標平台除了桌上型電腦外,還要考慮以平板為主的行動裝置,所以除了傳統的滑鼠事件外,自然就牽扯到一大多觸控的事件了。而本來想得很簡單,後來真的開始寫了之後,才發現要同時支援觸控、滑鼠,其實還滿繁瑣的,有一堆小細節都得注意到…
這方面的資料,可以參考 HTML5Rock 的《Touch And Mouse》這篇文章,本文有不少內容是參考這篇文章寫的。

閱讀更多»

使用 boost::asio 讀取網頁資料

好像很久沒寫 Boost C++ Libraries 的介紹了?轉眼間,他的版本也已經推進到 1.53.0 了。這篇,主要是針對 Heresy 這段期間,在使用 Boost 的 ASIO 這個函式庫(官網),來讀取網頁資料的一些紀錄。

Boost ASIO 這個函式庫,是一個網路、以及 low-level IO 的函式庫,它的功能滿多的,而 Heresy 這邊主要是針對他的網路傳輸功能,更嚴謹地講,是針對他的 ip::tcp::iostream 的 Http Client 這個範例(官方程式碼)、來做使用的經驗來做紀錄;基本上不會講整個函式庫,就是單純簡單介紹這個範例、再根據自己的需要做一點延伸而已。

閱讀更多»

透過 WebSocket 傳送 Binary 資料:ArrayBuffer(補充)

這篇基本上是針對前一篇《透過 WebSocket 傳送 Binary 資料:ArrayBuffer》作一些補充。
在《透過 WebSocket 傳送 Binary 資料:ArrayBuffer》一文中,Heresy 主要是在針對由 WebSocket++ 的 C++ Server,傳遞 binary 資料到網頁的 JavaScript Client 來做說明。不過相對的,Heresy 倒是忘了要去弄反方向、也就是由 JavaScript 送 binary 資料到 Server 的部分了;而這一篇,就是簡短地說明一下,反過來由 JavaScript 送到 WebSocket++ Server 要怎麼做。

閱讀更多»

透過 WebSocket 傳送 Binary 資料:ArrayBuffer

這篇算是延續之前的《HTML5 WebSocket Client》和《C++ WebSocket 函式庫:WebSocket++》這兩篇文章,來整理一下,除了傳遞文字資料外,要怎麼透過 WebSocket 來傳遞 Binary 資料。而 client 端基本上還是一般的 JavaScript、Server 端也就還是 WebSocket++ 了~

基本上,WebSocket 在 JavaScript 這端,除了純文字(DOMString),在二進位資料的方面,還支援 BlobArrayBuffer 兩種類型的資料。Blob 基本上是一種沒有特定原生 JavaSctipt 型別的 RAW Data,裡面可以塞各式各樣的東西(參考);而 ArrayBuffer 則是固定寬度的陣列資料,不過由於本身沒有記錄內容的型別,所以必須透過 ArrayBufferView 的物件、來指定內容的型別做存取(參考)。

而 Heresy 這邊,基本上就是使用 ArrayBuffer 來做資料的傳遞 C++ 裡面的陣列。

閱讀更多»