C++20 的三向比較(Three-way comparison)

三向比較(three-way comparison、參考)是 C++20 新增的一項新的運算子,他的形式是「<=>」;據說是由於外型的關係,所以也被稱為「Spaceship Operator」。

而它的特色呢,則是可以針對兩個變數進行比較,並透過一個回傳值讓使用者可以判斷到底是大於、小於、還是等於;基本上是:

  • a < b 的話:(a <=> b) < 0
  • a > b 的話:(a <=> b) > 0
  • a 和 b 相等或等價的話:(a <=> b) == 0

閱讀更多»

透過 counting_iterator 讓 std::for_each_n 用索引值來操作

C++ 的標準函式庫雖然一直以來都有提供 <algorithm> 這個函式庫(參考),可以來做某些處理;而裡面其實也有像是 std::for_each()參考)或 std::for_each_n()參考)這類的函式、可以用來掃完整個陣列。

但是由於這些演算法大多是針對 iterator 來進行操作,在很多需要使用索引值(index)來存取周圍的資料時,會變得相對麻煩;也因此,其實 Heresy 這邊大多會使用傳統的 for 迴圈、或是 C++11 的 range-base for-loop 來寫,而很少會去用 std::for_each()

也因此,當 C++17 開始正式針對部分也算法提供平行化的能力的時候(參考),雖然高興了一陣子,但是卻也發現有點難以使用…

閱讀更多»

使用 rsync 備份透過 Docker 架設的 WordPress

這篇勉強算是之前《自行透過 Docker 建立 WordPress 網站》的後續,不過主要應該還是在記錄自己這邊稍微玩一下 rsync 這個 Linux 下的備份工具(維基百科)的紀錄了。

首先,Heresy 這邊是要在跑 WordPress 的機器(以下簡稱 WP)上,另外跑一個 rsync daemon 來讓另一台備份用的電腦(以下簡稱 Backupper)連進來、把資料備份到 Backupper上。

閱讀更多»

自行透過 Docker 建立 WordPress 網站

Heresy 自己使用 wordpress.com 提供的 WordPress 系統已經超過十年了,用的還算滿習慣的;但是由於都是使用別人架好的系統,所以其實對於要怎麼架設,並沒有很認真地研究過。

而這篇則是紀錄一下,Heresy 在工作的地方,自己在 Ubuntu Server 上,透過 Docker 架設 WordPress 的紀錄。

首先,這邊參考的是《使用 Docker Compose 架設 WordPress 環境》這篇文章,他的專案放在 GitHub 上(連結)、可以直接使用。

在他的架構下,實際上是透過三個 docker 的容器來建立一個 WordPress 的服務:

  • db:資料庫、使用 mysql:8.0.20
  • wordpress:PHP FPM 服務、使用 wordpress:php7.4-fpm-alpine
  • webserver:網頁伺服器、使用 nginx:latest

閱讀更多»

Visual Studio 2022 Lambda + OpenMP 的問題

這篇算是紀錄一下,Heresy 這邊在想把開發環境從 Visual Studio 2019 升級到 Visual Studio 2022 時,踩到的新版編譯器在 lambda expression 這邊的地雷,算是稍微紀錄一下了。

Heresy 這邊踩到的地雷,是 lambda expression + OpenMP 的相容性問題;下面就是一個會出問題的簡單程式碼:

#include <iostream>
 
int main()
{
  auto f = []()
  {
    #pragma omp parallel for //Error
    for (int i = 0; i < 10; ++i)
    {
    }
  };
 
  return 0;
}

閱讀更多»

原生 64 位元的 Visual Studio 2022 正式推出

今年四月,微軟就有公布新的 Visual Studio 2022 會是第一款原生 64 位元的 Windows 整合式開發環境了~而從六月開始,微軟也不停地釋出新的預覽版,讓眾多的開發者幫忙找問題。

現在,Visual Studio 2022 終於推出正式版了!他的官方網站是 https://aka.ms/vs2022,官方的公告則是《Visual Studio 2022 now available》;下面則是官方的介紹影片:

閱讀更多»

關掉 PowerShell 的下載進度條換回下載速度

微軟的 Windows PowerShell 提供了許多的 Cmdlet、以及額外的模組,讓他的功能比傳統的命令提示字元(cmd)來的強大不少。

像是透過「Invoke-Webrequest」(官方文件),就可以直接透下載網路上的檔案,在很多情境下都是很實用的;他的基本使用方法大致上如下:

Invoke-Webrequest -Uri https://github.com/boostorg/boost/archive/refs/tags/boost-1.77.0.zip -OutFile c:\temp\boost.zip

但是如果有用這個指令來下載大型檔案的話,應該都會發現:他下載的速度真是有夠慢…

閱讀更多»

在 Qt Designer 內使用自定義的 widget Part2

這篇是之前《在 Qt Designer 內使用自定義的 widget》一文的後續。

其實本來 Heresy 一直以為之前使用 QDesignerCustomWidgetInterface 另外封包一個 plugin 物件出來後就搞定了,但是後來才發現,真正要拿來建立函式庫,還是有點問題。

原因就是:如果在一個專案裡面、按照之前的方法寫多個 plugin 出來的話,在建置的連結階段,會出現重複定義的問題。Visual Studio 得到的錯誤會向下面這樣:

錯誤    LNK2005    qt_plugin_instance 已在 moc_plugin2.obj 中定義過了
QtUIforDesigner    moc_Plugin1.obj    1
錯誤    LNK2005    qt_plugin_query_metadata 已在 moc_Plugin2.obj 中定義過了
QtUIforDesigner    moc_Plugin1.obj    1

閱讀更多»

在 Qt Designer 內使用自定義的 widget

Qt 基本上是一個很有彈性的跨平台圖形介面框架,他本身就提供了很多 widget 可以使用。而除了可以透過程式碼來設計界面外,也可以使用官方提供的 Qt Designer(Qt 設計師、官網),用所見即所得的方法來拉出自己的介面,算是相當地方便。

如果官方提供的 widget 不夠用的話,也可以自己組合既有的元件、或是重頭撰寫一個符合自己的元件來用;這部分有需要話,可以參考官方的《Analog Clock Example》。

而如果想在 Designer 裡面使用自己定義的 widget 的話,就稍微麻煩一點了。這篇就是稍微整理一下,要怎麼在 Qt Designer 裡面、使用自己定義的 widget。

閱讀更多»