[Hugo] GitHub Actionsでサイトを自動デプロイしたときにCNAMEを残す方法
Hugo
に限らないのですが
gh-pages
ブランチを利用して GitHub Pages
を作った時
自動デプロイで、独自ドメインの設定を記載した CNAME
が消えちゃうことがあります
そのトラブルシュートについてです
Hugo
自体の設定もあるのですが、それよりも
元のコンテンツに CNAME
ファイルを含めてしまうのがシンプルで簡単です
Hugo
ならメインブランチの static
ディレクトリ以下に CNAME
を設置します
これだけでOK!
[C++] 2次元Vectorのメモ
HackerRankやってるときによく2次元配列が出てくるので、ちゃちゃっとやりたいときのメモです
|
|
業務や後に残るコードではなく、とにかくちゃちゃっとやりたい、という要望って
自分はこれまで出会ったことが無かったので
この手のコーディングは、自分的にはかなり新しいというか新鮮な感じがします
[C++] Windowsの空のアプリケーションを作る手順メモ
いつもどうやったっけな?と思って同じ過ちを繰り返してるのでメモ
環境:
Visual Studio 2022
作りたいソリューション
- C++プロジェクト
- ブランクプロジェクト
- Windowsデスクトップアプリケーション(コンソールではない!)
いつもわたし、空のプロジェクトを作りたいからといって
Empty Project
を選んでしまうのです…
すると、コンソールベースの exe を作るソリューションになってしまいます
ちゃうねん、これちゃうねん!
Windowアプリの空のソリューションを作りたい場合はこれ
Create a new project
Windows Desktop Wizard
を選択Configure your new project
で名前を入れて次に進むWindows Desktop Project
でDesktop Application (.exe)
を選択- 更に
Empty project
にチェックを入れる - これで
OK
を押せば、よし!
これこれ、、、これやねん。。。
[Git] フォーク元のリポジトリに追いつきたいときメモ
よくフォークしたリポジトリを最新化する方法を忘れては検索を繰り返してるので、いい加減自分のブログにメモしておきます
最初の fork
以降、フォーク元のリポジトリに追いつきたいときのお話です
1. 自分のローカルのリポジトリに登録されているリモート情報を見てみる
|
|
わたしの実行結果はこんな感じ、まだフォーク元との関連はなし
|
|
2. フォーク元のURLを upstream
に登録します
(フォーク元は zzz/xxx という名前で公開されている場合です)
|
|
ちゃんと登録されてるかどうかは、さっきの git remote -v
で確認します
|
|
upstream
にフォーク元が登録されていますね
<余談>
もし
upstream
の内容を間違って登録してしまったときは
$ git remote remove upstream
このコマンドで削除することができます
3. フォーク元リポジトリを fetch
and mearge
します
|
|
<余談>
※ これ↑↑↑ は主流のブランチが
master
の場合。ものによってはmain
の場合もあるので確認が必要!
@qt_luigi さんからのコメント頂いたので、記事に追記しておきます~
ローカルのリポジトリ内容が、フォーク元と同じに最新化されました!
あとは別ブランチでプルリクエストを出すなりなんなりすればOK
ローカルの master
はこのまま push
しておくのも忘れずに♪
一度この作業をやっておくと、GitHub側に Fetch upstream
というボタンが出てくるので、次からはこのボタンをポチッとするだけで↓↓↓
内容がフォーク元に追いつきます
便利ですね〜★
(参考)
- 他人のリポジトリをフォークして、最新版を追従する方法 - akitoshiblog https://akitoshiblog.hatenablog.jp/entry/2020/09/22/155538
[C++] ラムダのパラメータリスト()が省略できるようになった
この記事は meetup app osaka@6 の参加記事です。
C++23 でタイトルの通り、パラメータリストのカッコが省略できるようになりました
- Make () more optional for lambdas
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1102r2.html
gccなら12以上、Clangは14以上で動作するようです
|
|
(もう少し追記するとおもいますが、今はこれで…)
[C++] HackerRank始めました
友達に、HackerRankやってみるといいよと言われたので、始めてみました
- HackerRank
https://www.hackerrank.com/
自分のプロフィールはこれ。。。
まだC++の問題を2問解いただけだけど
https://www.hackerrank.com/haruka_sao
履歴のために、自分の解いたコードをGitHubにアップしたりして…
https://github.com/h-sao/HackerRank/
ランクによってバッチが付きます
ふーん。。HackerRank、こんな感じで解いていくとバッチが付くのか~実績解除していく感じやな pic.twitter.com/AM6d7s6rUU
— 遥佐保 (@hr_sao) January 28, 2022
バッチは Language Proficiency でポイントを稼ぐとスターが付いていく方式です
- 10 ポイントで 1 Star(Bronze)
- …
- 250 ポイントで 5 Star(Gold)
最初に触ってみたのは c++ Language Proficiency Badges だったのですが
どう考えても面白くないというか、C++もう業務で何年も使えてるので
言語のほうは余暇で楽しむとして、アルゴリズム問題のほうを頑張っていこかなと思います
Problem Solving Badges は
- 1 Star - Bronze 30
- 2 Star - Bronze 100
- 3 Star - Silver 200
- 4 Star - Silver 475
- 5 Star - Gold 850
- 6 Star - Gold 2200
こんな感じ…
先は長そうだけど、Gold目指して勉強になりそうだからぼちぼちやってみよかな~
他の競技プロブラムとは違って、自分のペースで取り組めそうなモードなので、わたしには合ってる予感
普段業務で使ってる/使ってたことでも、
自分なりに勉強してバージョンアップしていかないといけないなーと思ってたので、ちょうど良いタイミングで始められたような気がする
(自分が学生だったら、こういうのにめっちゃのめりこんでたんだろうなーと思うと、今の学生さんは環境が良くてうらやましいです)
時代遅れな人にならないように意識していかないとね。。。
[Diary] 2022年もよろしくお願いします
自分がブログを始めたのが 2008/1/20 だったみたいで、当時はライブドアブログに書いてました
それから毎年1月を迎えるときに、「今年もよろしくブログ」を書いていましたが。。。
2019年で途絶えてしまいました…(T△T)
2022年の今年は書いておこうかなと!重い腰をあげてみました、ヨイショ!
予定管理
2021年の私的ハイライトといえば、バレットジャーナル を書き始めたことですね!
これは自作の手帳にバンバン書き込んでいくスタイルで、わたしには合っていました
習慣化
子供も居てるので、なかなか思うように時間が取れなくなり、物事を習慣化するようにしました
小さな習慣 という本を読んで、うまく習慣化ができるようになったので
このブログも、自分のための勉強も、習慣でぽちぽちとやっています
習慣でものごとをやると、いつの間にかできてる!という感激がありますね
(半面、期日の決まった目標達成には、習慣は不向きというのが判りました
何事も経験してみるもんですね)
毎日、習慣化を意識的にやってるのは以下
- 技術的な勉強
- ギターの練習
- ブログの下書き
すでに苦にならず毎日習慣化DONEのもの
- 読書
意識して毎日必ずやるようにしたら、歯磨きのように無意識で読書は出来るようになりました
この調子で、他のものも完全な習慣にしたい。。。というのが今年の目標かな~
技術
あとは Visual Studio が 2022 になったのもあって、何か作りたいなーと思い、ゲーム屋さんらしくレンダリング(まずは DirectX12)の勉強を年末から開始しています
このブログにもなんかトピックが書けるようになったら良いかな~
あ!年末に C++ Advent Calendar 2021 に参加できたのは、かなり嬉しかったです
久しぶりにアドカレに参加できました!
2022年も、どうぞよろしくお願い致します!
[C++] Advent Calendarへの参加履歴 2010-2021
自分メモです
過去に参加した C++ Advent Calendar の自分の記事のリンク
C++ Advent Calendar jp 2010
- [C++]高速化について思うところ
https://h-sao.com/blog/2011/01/01/think-about-sppding-up-cpp/
Boost Advent Calendar 2011
- [Boost/WinRT]Windows8のメトロスタイルアプリでBoost!
http://blog.livedoor.jp/haruka_sao/archives/51954974.html
C++ Advent Calendar jp 2012
- [C++]VisualStudio2012とTaskとAMPの入門
http://blog.livedoor.jp/haruka_sao/archives/52015184.html
C++ Advent Calendar 2013
- [C++]VisualStudio2013NovCTP:C++17(予定)resumable/await紹介
http://blog.livedoor.jp/haruka_sao/archives/52056922.html
C++ Advent Calendar 2021
- [C++] Modulesのコンパイル(MSVC ver)とBMIについて
https://h-sao.com/blog/2021/12/01/about-cpp-modules/
意外と参加してました。。。
こうやって記録に残すのは、なんだか気分が良いですね
[C++] Modulesのコンパイル(MSVC ver)とBMIについて
この記事は C++ Advent Calendar 2021 1日目(初日!)の記事です。
少し前からC++に Modules がやってきました
C++20 対応のメジャーどころのコンパイラ(MSVC/gcc/Clang など)で使うことができます
個人的にはビックウェーブが来たーーーと思ってまして、つねづねポチポチと Modules について調べていました
それを少しまとめたいと思います
モジュールの説明
昔ながらのプリコンパイルヘッダの概念を、今風にした感じでしょうか
ヘッダファイルをインクルードしていたものを Modules に置き換えることが出来ます
ヘッダファイルだと、
インクルードの順番に気を付けたり
コンパイル時間が長くなったり
インクルードガード書いたりと
ゆーてローテク文字列だったのですが、
それがバイナリとして公式に提供されました
Modulesを記載するファイル
各コンパイラによって(推奨)拡張子が異なります
MSVC (cl.exe)
- Foo.ixx
- Foo.ixx
Clang
- Foo.cppm
GCC
- Foo.cc
- Foo.cp
- Foo.cxx
- Foo.cpp
- Foo.c++
- Foo.C
(参考)
- MSVC
Overview of modules in C++ - GCC
GCC and File Extensions - Development with GNU/Linux https://blog.feabhas.com/2021/08/c20-modules-with-gcc11/
以下、、MSVCで話を進めます
(コンパイラによって異なる所が多いので)
モジュールファイルについて
MSVC の場合、モジュールにしたいファイルは .ixx という拡張子を付けます
(Clangだと .cppm、GCCだと .cxx とかになります)
サンプルはこんな感じ
hello.ixx
|
|
利用する側はこんな感じで↓↓↓ import すれば使えます
(従来は #include "hello.h"
とか書いていた場所です!)
|
|
サンプルだけ見ると、なんてことのないコードですね
メイン関数は #include
してた箇所を inport
に変更しただけです
モジュールをバイナリ化する
モジュールを記載する .ixx
ファイルは、.ifc
にプリコンパイルでバイナリ化されます
ややこしいのが、コンパイラによってこのあたりの呼び名が異なってて、こんな感じ
MSVC | Clang | |
---|---|---|
モジュールファイル名 → | .ixx |
.cppm |
モジュールファイルをプリコンパイルしたもの→ | .ifc |
.pcm |
ちなみに「モジュールファイルをプリコンパイルしたもの」を BMI と呼び、
Binary Module Interface の略になります
この BMI ファイルを各 cpp ファイルなどが import
することになります
(参考)
- Practical Cpp Modules - CppCon 2019
https://github.com/CppCon/CppCon2019/blob/master/Presentations/practical_cpp_modules/practical_cpp_modules_boris_kolpackov_cppcon_2019.pdf
VC++でのコンパイル方法
単純のため、まずはコマンドラインでやってみます
利用したVC++バージョンはこちら
コマンドは2つ
|
|
1つ目のコマンドでモジュールをプリコンパイルし、
2つ目のコマンドで obj
をリンク、そして main.exe
の出力をします
<1. モジュールのプリコンパイル>
C:\my\dev\sample_module01>cl /c /std:c++20 hello.ixx
Microsoft (R) C/C++ Optimizing Compiler Version 19.30.30705 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
hello.ixx
これで、hello.obj
と MyHello.ifc
が出来ました
(余談)cl.exe はモジュールのコンパイル時に同時に2つ(
.obj
と.ifc
)のファイルを出力してくれて楽ですClang は別々のコマンドで出力するので、cl.exe とは少し作り方が異なっています
.pcm
( VC++で言うところの.ifc
) を出力した後、それを元に.o
( VC++の.obj
) を出力します
このあたりはまだ次回に投稿したいです
<2. 実行ファイル生成>
C:\my\dev\sample_module01>cl /std:c++20 /EHsc /reference MyHello=MyHello.ifc main.cpp hello.obj
Microsoft (R) C/C++ Optimizing Compiler Version 19.30.30705 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
main.cpp
Microsoft (R) Incremental Linker Version 14.30.30705.0
Copyright (C) Microsoft Corporation. All rights reserved.
/out:main.exe
main.obj
hello.obj
main.exe
が出来ました
実行してみます
C:\my\dev\sample_module01>main.exe
42
問題なし(^^♪
(備考)コンパイルオプションの注意点
VC++のコマンドラインオプションが
- モジュールを作ったとき
- モジュールを使うとき
これらの間で一致していないとき、ワーニングが出ました(C5050
)
main.cpp(7): warning C5050: Possible incompatible environment while importing module ‘MyHello’: _CPPUNWIND is defined in current command line and not in module command line
そのため今回、hello.ixx
内では <iostream>
は利用していないのですが、/EHsc
オプションを付けています
(参考)
- Using C++ Modules in MSVC from the Command Line Part 1: Primary Module Interfaces - C++ Team Blog
https://devblogs.microsoft.com/cppblog/using-cpp-modules-in-msvc-from-the-command-line-part-1/
BMIってなによ?
プリコンパイルされた Binary Module Interface って何なのでしょうか?
この中身は一体?
さんざん調べましたが、大した情報が載ってないですね。。。
これ、BMIというのは Modules を扱うための概念のようです
これはコンパイルの過程のものなので、各コンパイラベンダーが作る箇所であり、明確に公開情報として詳細が提示されているわけではなさそうです
現時点では概念がちらほらと記載されているだけのようでした
実際に、プリコンパイルで作られた .ifc
や .pcm
の中身は
- プリプロセスで利用した情報とか
- ASTのダンプ
- Objみたいなもの
がひとまとめにされてるようです
という記述を見つけましたが、出展元が判らなくなったので、思い出したら追記します。。。
(2021/12/4追記)
CppCon2019の資料が参考になりました!
Practical Cpp Modules - CppCon 2019
https://github.com/CppCon/CppCon2019/blob/master/Presentations/practical_cpp_modules/practical_cpp_modulesboris_kolpackovcppcon_2019.pdf
もちろん、コンパイラによって、さらにバージョンによっても形式は様々なんでしょう
モジュールの配布ってどうやるの?
モジュールのバイナリを配布することはできないです
共有する場合はあくまでソースコードと共に配布になります
また、作られた BMI、つまり .ifc
や .pcm
ファイルは不変的なバイナリではないみたいです
ライブラリのように配布はできないのですね。。。
(余談)Modules の提案を推し進めている Gabriel Dos Reisさん は、Common Module Interface Format を作りたいみたいですが…
具体的に今の段階では、配布目的のものは出ていないようです
(参考)
- C++ Modules: What You Should Know
https://github.com/cppp-france/CPPP-19/blob/master/C%2B%2B_modules_what_you_should_know-Gabriel_Dos_Reis/C%2B%2B_modules_what_you_should_know-Gabriel_Dos_Reis.pdf
所感
まだ2021年12月の時点では、Modules 機能が完全に動作するコンパイラもないみたいですし
そもそも各コンパイラによって記載方法や推奨が異なるので、なんとも道半ばな印象はあります
Modules を利用するための手順やお作法も多く、また情報も限られているので、取り組みにくいですね
マイクロソフトの VC++チームブログ は、コンパイラベンダーとして結構 Moduleds の具体的な情報を出しているように感じました
(Clangももうちょっと頑張って。。。あとGCC。。。おまえはやる気あるのか。。。)
Modules に関して取り組まれている人たちの歴史はとても長く
かつ現在のヘッダファイルがベストだとは思えないので
個人的に一押ししたい機能だと改めて思いました
所感その2
C++ Advent Calendar!
ずいぶん昔に一度だけ参加したことがあったのですが、それからなーんにもしてませんでした
今回、意を決して投稿できて良かったです
かなりよく調べたつもりですけど、間違いなどあったら気軽に @hr_sao まで教えていただけると嬉しいです
C++楽しい~♪
[C++]Compiler Explorerの出力結果の表示方法
Compiler Explorer というオンラインコンパイルサービスがあります
- Compiler Explorer
https://godbolt.org/
書いたC++コードのアセンブリ出力結果をリナルタイムに表示してくれるサービスです
すごーーー👀
初めてこのサービスを見た時には感激しました〜
さておき、
わたし、これで実行結果を見る方法を知らなかったんですね…ハズカシー(*ノдノ)
「Output」を押すと出力結果ウィンドウは出てきますが
このリターン値だけじゃなくて、 std::cout
の結果も欲しいんですけど…👀
ちょっと調べてみたらすぐに判明しました><。
Outputの設定項目に Execute the code のチェックボックスがあるので、それを選択すれば表示されます
出力はこんな感じですね〜
便利です〜