[C++]Compiler Explorerの出力結果の表示方法
Compiler Explorer というオンラインコンパイルサービスがあります
- Compiler Explorer
https://godbolt.org/
書いたC++コードのアセンブリ出力結果をリナルタイムに表示してくれるサービスです
すごーーー👀
初めてこのサービスを見た時には感激しました〜
さておき、
わたし、これで実行結果を見る方法を知らなかったんですね…ハズカシー(*ノдノ)
「Output」を押すと出力結果ウィンドウは出てきますが
このリターン値だけじゃなくて、 std::cout
の結果も欲しいんですけど…👀
ちょっと調べてみたらすぐに判明しました><。
Outputの設定項目に Execute the code のチェックボックスがあるので、それを選択すれば表示されます
出力はこんな感じですね〜
便利です〜
[macOS] BootCampの起動OSを選ぶ
macOS に BootCamp を入れると、デフォルト起動OSが Windows になります
(わたしの環境ではそうなりました)
これ、デフォルトを macOS に戻すには、
システム環境設定
> 起動ディスク
ここを macOS にすればOK
Windows を立ち上げたい時には、
電源を入れた直後に option
を長押しすれば、起動OS選択画面になります
[Windows] そのexeがx64かx86かを見分ける方法 Part2
先日、こんなブログを書きました
- [Windows] そのexeがx64かx86かを見分ける方法
http://h-sao.com/blog/2020/10/26/how-to-check-x64-or-x86-windows-binary/
このブログを公開したところ、Twitterで @ripjyr さんより
macなら file
コマンドあるよと教えていただいたので追加記事を書いておきます~
上記のブログ記事では、 exe データが 32bit なのか 64bit なのかを調べるやりかたとして
3つのチェック方法を記載しました
今回は4つ目の方法の紹介です~!
パターン4. file コマンドで調べる(macOSの場合)
これは mac のみの環境で、Win exe を調べたいって時のお話です
mac には file
コマンドがあって、それを使うと簡単に Windows exe のビット(PEヘッダ)を調べることができます
$ file 調べたいファイル名
- x86の場合
PE32 executable (GUI) Intel 80386, for MS Windows と表示されます!
|
|
- x64の場合
PE32+ executable (GUI) x86-64, for MS Windows とでます
|
|
真に、素の mac でバイナリデータを見たいときは、これが良いですぅ!!!
謝辞
@ripjyr さん、教えてくださってありがとうございました ^^
[Windows] そのexeがx64かx86かを見分ける方法
手元にあるexeが64bitなのか32bitなのかを知りたい…
開発してるとこういう時がたまにあると思う…
多分ちょっとニッチな需要だけど、検索したらちゃんと誰かが既に調べてくれていました!
パターン1. Windows のメモ帳(notepad.exe)を使って調べる
何にもない環境でも、OS が Windows なら必ず入っているメモ帳”φ(・ェ・o)~メモメモ
これで調べるのが一番簡単な調査方法だと思います~
メモ帳:notepad.exe で調べたい exe ファイルを開く
文字列 PE を検索する
こんな感じ↓↓↓
PE の後ろに空白がちょっとだけあり、その後に続く文字で判別できます
PE L
- 32bit版は
L
が続く
- 32bit版は
PE d
- 64bit版は
d
が続く
- 64bit版は
ふむふむなるほど!
パターン2. バイナリエディタを使って調べる
最近のバイナリエディターのおススメは hexdump for VSCode です
昔は TEXBIN を使ってましたが、VSCode 内で完結するのが良いですね~
- hexdump for VSCode
https://marketplace.visualstudio.com/items?itemName=slevesque.vscode-hexdump
VSCode
を開く調べたい exe をドラッグ&ドロップする
こんなメッセージが出る…(だが気にしない)
1 2
The file is not displayed in the editor becouse it is either binary or users an unsupported eext encoding. Do you want to open it anyway?
右上に出てる
Show Hexdump
をポチッ!
バイナリモードで見て、
0x0100
前後(ファイルによる)の番地あたりに
0x5045 (つまり PE )から始まる文字列があるので探すこんな感じ
50 45 00 00 4c
→つまりPE L
- 32bit版
50 45 00 00 64
→つまりPE d
- 64bit版
ふむふむ、この方法も良い感じです(・ω・)ノ
パターン3. hexdump コマンドで調べる(macOSの場合)
mac しか持ってない環境で VSCode も入ってなくて Windows の exe のビットを調べたい時って一体…!?
とは思いますが(><)
先日、わたし自身が必要だったので、これも調べてしまいました
VSCodeがあればパターン2 の方法で調べられるのですが
mac の標準環境だけで調査したいときは、hexdump が標準で装備されているので
それを使うのも手です(。・_・。)ノ
# [-n バイト数] で先頭からのバイト数の分だけ表示出来る
$hexdump -n 400 バイナリを調べたいファイル名
上記の例だと、x86 のようですね
良い感じです
素の mac でバイナリデータを見たいときは、これが良いかも
パターン4がありました(追記)
パターン4. file コマンドで調べる(macOSの場合)
後日、こちらに追記しました
- [Windows] そのexeがx64かx86かを見分ける方法 Part2
http://h-sao.com/blog/2020/11/07/how-to-check-x64-or-x86-windows-binary-part2/
備考
いくつか他の exe のバイナリデータを見てみました
だいたいファイルの先頭の 0x0080
~ 0x0140
くらいまでに PEヘッダがあるようです
参考
How to check if a binary is 32 or 64 bit on Windows? - superuser (StackExchange) https://superuser.com/questions/358434/how-to-check-if-a-binary-is-32-or-64-bit-on-windows
今回の調査対象にしたツール(x86版とx64版が配布されてる)
動画キャプチャツール「AG-デスクトップレコーダー」
http://t-ishii.la.coocan.jp/download/AGDRec.html
[C++] 実行環境の差異によるintワーニングが出ない書き方
C++のワーニングを放置していたのですが、そっと @srz_zumix さんが教えてくれてました
忘れないうちに”φ(・ェ・o)~メモメモ
x86環境とx64環境が混在してる場合にエラーが出やすい
こんなやつとか出ます…
|
|
これは x86環境だと warning は出ないのですが x64 環境想定でコンパイルすると、ワーニングが出ます
(Clangの例)
warning: Implicit conversion loses integer precision: ‘std::__1::vector>::size_type’ (aka ‘unsigned long’) to ‘u_int32_t’ (aka ‘unsigned int’) [-Wshorten-64-to-32]
( ̄□ ̄;
ええ、ええ、判っていますとも…
int 型が処理系によって異なるのは…
そこで、やっつけで修正するならこれ
|
|
なのですが、もっとスマートは方法があります
|
|
エレガントになりました…!素晴らしい(^^♪
警告のコンパイラー対応表がある
[C++] 警告のコンパイラー対応表を作り始めました - ブログズミ
https://srz-zumix.blogspot.com/2020/09/c.html
@srz_zumix さんが最近始められたプロジェクトらしいです
ワーニング対応表欲しいな…と思っていたところなので、結構良いかもしれない…
そして今日もC++修練は続く…
[Github] Github Actionsでブログを更新するようにしました
元々、このブログは hugo
で作った静的HTMLを wercker
でオートデプロイして作っていました
だけど wercker
は設定の変更が多くてすぐにデプロイ出来なくなっていたんですよね~で、辞めました
これを作った当時は wercker
がイケイケドンドンだったので
CircleCI
から乗り換える人も多かったのですが
今となってはカジュアルデプロイは CircleCI
…いやいや Github Actions
があるやないか!
ということで、 Github Actions
でデプロイするようにしてみました
Github Actions の設定ON
ここをポチっと押すと、Actionsの設定画面へ
Github Actions の設定ファイルを書いてみる
知識なしで初めてみましたが、すんなり簡単にビルド&デプロイすることが出来ました
というのも、GitHub Actions for GitHub Pages
というデプロイするためのオールインワンアクションを公開してくれている方がいらっしゃいました
設定ファイルをまんま真似するだけで使えます
そしてこの方、hugo
対応のアクションも公開して下さっています!
ここの例に書いてる yaml
ファイルのまんまで良い感じにデプロイ出来ました
こんな感じ↓↓↓
|
|
超カンタンでした(。・_・。)ノ
CNAME 対応
Github Pages でカスタムドメインを使う際には
Github Pages の公開ブランチ(わたしの場合 gh-pages
)のルートにドメイン名を記載した CNAME
ファイルを設置する必要があるのですが
これが peaceiris/actions-gh-pages
を使ってデプロイした際に、消えてしまってました
アクションの方の設定で対応することも出来たようなのですが
わたしはHugoそのものの設定を変えて、対応しました
Hugo の変換元のディレクトリに static/CNAME
を設置するだけです
これも超カンタン
感想
SSHキーの外部登録などもしなくて良いし、Github の中で閉じてビルド&デプロイ出来るのが良いですね!
コネコネしたいときは CircleCI
とか使うかもなぁと思いつつ、Github へのアクションメインの自動化であれば、これで充分ですね
今後も使っていくと思います~
参考
ポートフォリオサイトを Hugo で Github Pages + Github Actions で構築する話
https://mather.github.io/posts/2019/12/08/hugo_with_github_pages/Hugoで生成したコードをgithub pagesへデプロイするたびにカスタムドメインが初期化される
https://blog.app.melvins-nest.com/posts/lost-cname/
[c++] 2次元配列的な書き方
自分メモ
2次元配列
C++11
以前では、2次元配列はこんな感じで書いていました
|
|
これでも悪くは無いのですが、生配列を扱うと範囲外アクセスに気が付かない可能性が出てきます
そこで C++11
から境界チェックが出来る配列の std::array
が登場しました
これを使えば、C-styleの配列のノリで扱うことが可能です
- std::array - cpprefjp
https://cpprefjp.github.io/reference/array/array.html
さらに2次元配列にしたければ std::array
を std::vector
に入れることで実現可能です
|
|
悪くなさそう
動作確認
|
|
結果
xy_raw[0][1]: 10
xy_raw[1][2]: 40
xy_array[2][0]: 40
コンパイル時に教えてくれるので助かります
参考
コンパイル結果:
https://repl.it/repls/StudiousImaginativeParallelcomputingC++ - Vector of Float Arrays - stackoverflow https://stackoverflow.com/questions/33711878/c-vector-of-float-arrays
[WindowsTerminal] Preview版のインストール&Git Bashを追加したい
Windows Terminal …どんなもんだろなと思って、使ってみました
もともとは、Gitのブランチ名をコマンドプロンプトに表示できたらいいのにー と思って調べたのでした
Windows Terminal に Git Bash (正確には Git for Windows
) が登録できるようなので、それをやってみました
Windows Terminal (Preview)のインストール
普通に 「Windows Terminal download」で検索すると、わたしの場合「マイクロソフトストア」のリンクがトップに来ましたけど
ストアとかよくわからんし…
よく見ると Windows Terminal は GitHub に公開されてます
ここから Preview版をGet★
3/19時点では、Windows Terminal Preview v0.10.761.0 のバージョンでした
以下、やったこと
1) msixbundle
を実行するとこんな画面↓↓↓
2) インストールを押すと、わたしの環境ではエラーになりました
エラーメッセージ内容:
Microsoft.WindowsTerminal_0.10.761.0_x64__8wekyb3d8bbwe をインストールできません。このパッケージはデバイスと互換性がありません。このパッケージをインストールするには、OS バージョン 10.0.18362.0 またはそれ以降の Windows.Mobile デバイス ファミリが必要です。現在、デバイスでは OS バージョン 10.0.17763.1098 が実行されています。 (0x80073cfd)
おぉ。。。めっちゃ判りやすいメッセージが!
3) よくわからんけど、Windows Updateしてみます
4) もう一度ダウンロードした msixbundle
を実行
5) 正常にインストールできたみたい!
6) 開くウィンドウのタイプを選べます
よしよし
タブに Git Bash を追加
先人が居てました。。。!
Adding Git-Bash to the new Windows Terminal - stackoverflow
https://stackoverflow.com/questions/56839307/adding-git-bash-to-the-new-windows-terminalWindows TerminalにPowerShell Coreを追加する - kkamegawa’s weblog
https://kkamegawa.hatenablog.jp/entry/2019/06/23/135124
あと中の人のスコット・ハンセルマンのブログも参考になりました
- Now is the time to make a fresh new Windows Terminal profiles.json
https://www.hanselman.com/blog/NowIsTheTimeToMakeAFreshNewWindowsTerminalProfilesjson.aspx
真似してわたしもやってみます
7) PowerShell で GUIDを取得します
GUIDの設定は、生成できるものであればなんでも良いみたいです
- mehulmpt/profiles.json - コメントに注目
https://gist.github.com/mehulmpt/16826be279bb9bf70310b465ca9c5de3
GUID生成サイトもありました(。・_・。)
わたしは PowerShell で作ってみます
> [guid]::NewGuid()
こんな感じで取得できました
8) Windows Terminal の settings を開きます
これは json ファイルになってました
わたしの環境では、以下のパスに存在していました
※ xxx… は編集しています、適当な文字列でした
C:\Users\akiko.kawai\AppData\Local\Packages\Microsoft.WindowsTerminal_xxxxxxxxxxxxx\LocalState\profiles.json
デフォルトの中身はこんな感じ↓↓↓
|
|
9) profiles
の個所に以下を追加します
|
|
◆アイコンについて
アイコンの登録は ms-appxのURL のまんまが使えるみたいです
参考:
- Feature Request - List Icons in the default profiles.json - microsoft/terminal
https://github.com/microsoft/terminal/issues/1456
試しに Linux アイコンにしてみたら、ペンギンになりました(。・_・。)ノ
CMDアイコンだとこんな感じ
◆GUIDについて
今回は GUID は適当なものを PowerShell で作りましたが
profiles.json
の中の "defaultProfile"
の値を
自分の Git Bash の GUIDに設定すると
Windows Terminal のデフォルト起動時のウィンドウに出来ました
◆profiles.json
profiles.json
の全体像はこんな感じ
|
|
10) おぉ!Bashタブがリアルタイムに追加されてる!
Windows Terminal を開きっぱなしの状態でも
追加のタブを見ると Git Bash 項目が見えました
やったー
11) 作業したいブランチ名もちゃんと表示されてます
当然といえば当然
結構いろいろと簡単にやりたいことが出来た印象です
調べてもすぐ情報が見つかったし
WindowsTerminal、早く Preview 取れて欲しいですね♪
[GitHub Pages] カスタムドメインのDNS情報を更新する
去年、2019年の4月くらいから
GitHub Pages にファイルをアップすると、ワーニングが出るようになった
内容はこんなやつ
|
|
(* ̄- ̄)ふ~ん、よくわからんけど
何やらDNSの設定を変えないといけないのね
めんどくさー
後で後で…と思い続けて早10か月ほど…
さすがに対応しないと、自分のブログがアクセスできなくなるかもと焦り、重い腰を上げました
(前提条件)このブログの運用情報
- https://h-sao.com/ は GitHub Pages の上で動いてる
h-sao.com
ドメイン自体の管理は Valueドメイン を利用してる- 動いているリポジトリは https://github.com/h-sao/h-sao.com
- リポジトリの
master
ブランチにはHugo
で記載したのテンプレートファイルやマークダウンで記載したコンテンツ情報を置いてる - 同じく
gh-pages
ブランチは、実際にサイトとして公開している html/css ファイルを置いてる - (おまけ)
master
に記事のマークダウンをpush
すると
Webhooks
に登録しているwercker
に通知が送られ
Hugo
でhtml生成 &gh-pages
に htmlファイルなどをオートでpush
する
というちょっとした自動化の仕組みになってる
- リポジトリの
カスタムドメインを GitHub Pages に割り当てる方法
調べてみると全然難しくなくて
上記のワーニングメールに書かれてたURLにアクセスしたら、全てが書かれてました
ただわたしにとっては真剣に読む気で読まないと頭の中スルー…って感じの内容だったので、ちょっと真剣に読んでみました
英語版はこれ↓↓↓なのですけど
ご丁寧に日本語版も提供されています
- カスタムドメインとGitHub Pagesについて
https://help.github.com/ja/github/working-with-github-pages/about-custom-domains-and-github-pages
これを見ながらやってみます
まずわたしのGitHub Pagesの設定画面は、こんな感じで黄色いワーニングが出てました
今までずーっと無視してきましたが、いよいよ解決する日が来ましたよ
わたしが割り当てているカスタムドメインは Apex ドメイン になっています
( www.h-sao.com ではなく、 h-sao.com としてアクセス)
日本語版の「カスタムドメインとGitHub Pagesについて」の説明を読んでみると、
「GitHub Pages サイト用のカスタムドメインを管理する」を参照してください。 とあるので、素直にそのリンクに飛びます
- 「GitHub Pages サイト用のカスタムドメインを管理する」
https://help.github.com/ja/github/working-with-github-pages/managing-a-custom-domain-for-your-github-pages-site#configuring-an-apex-domain
ここにありました! Apexドメインを設定する方法が!
A
レコードのIPアドレスが書いてありました
185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153
あと、最初の「カスタムドメインとGitHub Pagesについて」には、こんな記載もありました
サイトには、カスタムドメインの一方または両方を設定できます。 Apex ドメインを使用している場合でも、www サブドメインを使用することをおすすめします。
ふむふむ、www は付けるのを推奨してるのね、了解
cname
も追加してみました
# 設定するAレコード
a @ 185.199.108.153
a @ 185.199.109.153
a @ 185.199.110.153
a @ 185.199.111.153
# サブドメインも設定しておく
cname www h-sao.github.io.
Valueドメインの設定画面
これを設定すると、わたしの場合はちょうど15分後に設定が反映されました
よかったー!
[Git] Gitの歴史を書き換える関連
よくやらかすので自分メモ
事前準備
# 今いるブランチの確認
$ git branch
# ブランチに移動
$ git checkout feature/xxxxx
PR出す前、きれいな環境にしたいなどで整えておきたいこと
# 手動ブランチの取得/追従
$ git checkout feature/yyyyy
$ git pull
ローカル作業全てを無かったことにする
git fetch origin
git reset --hard origin/master
pushしてしまった歴史を書き換える
# 自分の名前のコミットを検索
$ git log --committer="Sao Haruka"
# ↑の gitlog より戻りたいハッシュ値を探す
$ git reset [戻りたいコミットのハッシュ値] --hard
# 強制push
$ git push -f origin feature/xxxxx
既に feature/xxxxx
で誰かが作業していたら強制プッシュはあきらめる
不要になったブランチを削除する
要らないブランチは削除しとく
$ git push --delete origin feature/xxxxx
PRに不要なコミットが混じる
原因:
- ブランチが追従されてないのが問題
- マージ先が間違ってる
マージ先の最新を取っとくと大丈夫