2020年9月28日月曜日

Zenn とブログズミ

 Zenn が話題になっていたので自分も記事を書くことにしました。
本も書きたいなと思っています。

現時点で何個か記事を書きました。


今後について
さて、Zenn で記事を書いていくことにしましたが、このブログはどうするの?となるのでルールを決めました。

  • ブログズミ
    • 扱う分野の縛りなどなく、今まで通り特に変わらず投稿します。
  • Zenn

今後も本ブログともどもよろしくお願いします。

2020年9月25日金曜日

[C++] 警告のコンパイラー対応表を作り始めました

 srz-zumix/awesome-cpp-warning: c++ warning correspondence table (Clang/GCC and Visual Studio)

マルチプラットフォームやってると、Visual Studio (VC++) と clang で警告の制御方法が異なるので面倒くさいなーって思っていたので対応表を作りました。
(全部 clang にしたら楽なんですけどね・・・)



特に vc++ は C4096 とかの ID でコントロールするのでわかりにくいんですよね。
あとは当然、clang では警告になるけど、vc++ は警告ないとか。逆パターンとか、clang だとエラーとか、あるあるだと思います。
そんなマルチプラットフォーム開発のビルドエンジニア向けにまとめた(まとめている)ものが↑↑です。

とりあえず、VC++ の警告を一通りみてサンプルコードがあるものや、すぐに再現できたものに対してはこちらの表に記載してます。
https://github.com/srz-zumix/awesome-cpp-warning/blob/master/VCLIST.md



そして、おそらくみんなが欲しいのは clang/gcc の -Whogehoge 警告が vc++ だと ID いくつなのかって点だと思うので top にまとめてます。
(すべての警告を無視(よくないけど)したり、すべての警告を as error として直さなければならない環境ならあまり必要ないかも?)


今後も対応表を増やしていこうと思ってます。
もちろん PR 大歓迎です!!

今回は以上。では。

2020年9月22日火曜日

GitHub Sponsor のバッジを付ける方法

GitHub でプロフィールリポジトリを作ることで自由にカスタマイズできるようになったので、GitHub Sponsor のバッジを付けてみました。
https://github.com/srz-zumix




バッジは Shileds.io を使って生成してます。
やり方は↑こちらにありました。

https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=ff69b4&link=https://github.com/sponsors/srz-zumix

Markdown の場合は以下のようになります。
ユーザー名を自身の名前に変えて使ってください。
[![GitHub Sponsor](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=ff69b4)](https://github.com/sponsors/srz-zumix)

2020年9月14日月曜日

[Re:VIEW Starter][Re:VIEW] 訳あって Starter から素の Re:VIEW に戻すツールをリリースしました

 技術書典9 が始まりましたね。
私は今回サークル参加しておりませんが、前回初めて参加しました。
来年また参加できたらいいなと思っております。

さて、そんな中今回は執筆環境周りのことを書きたいと思います。
技術書典9が始まったばかりですが、こちらはイベント後に役に立つ内容かと思うので、このタイミングでの公開としました。

紹介するのは表題のとおり、「Re:VIEW Starter」で作成された書籍をただの「Re:VIEW」で扱える状態にコンバートするツールです。
このツールがなぜ必要になったのか?はここでは省略しますが、この変換が必要になる人は今後も少なからず出てくるのではないかな?と思っております。
(私自身も今後の執筆にただの「Re:VIEW」を使うつもりはなく、「Re:VIEW Starter」や他の便利な環境を使いたいと思っているので、またお世話になることもあるかもしれません。)

Re:VIEW Retrovert

ツールは「Re:VIEW Retrovert」といいます。ruby で書かれていて gem install review-retrovert ですぐに使えます。
また、コードは GitHub にて公開中です。
https://rubygems.org/gems/review-retrovert
https://github.com/srz-zumix/review-retrovert

何ができるのか?

review-retrovert convert /path/to/dir/review-starter/config.yml <output directory>

Re:VIEW Starter のプロジェクトの config.yml から Re:VIEW のプロジェクトを生成して出力ディレクトリに書き出します。(Re:VEIW のバージョンは 3.2 です)
テストとして Re:VIEW Starter のテンプレプロジェクトを変換したものが GitHub Actions の成果物として残してあるので、どんな結果になるのかすぐ見てみたい人はダウンロードしてみてください。
https://github.com/srz-zumix/review-retrovert/actions/runs/201132608

制限事項

Re:VIEW Starter は Re:VIEW という名がついていますが、単なる Re:VIEW とはもう別物といっていいくらい便利な機能が拡張されています。
その分、Re:VIEW Retrovert ではこれらの拡張機能を Re:VIEW でも取り扱えるようになるべく、もとの状態を保つように頑張ってます。
ただ、どうしても全く同じ出力にすることはできません。
コンバート後は一通り目を通していただき、不自然な箇所や欠落した場所を調整していただく必要がありますのでご了承ください。

いくつか事例をあげておきます。

出力される Re:VIEW プロジェクトは version 3.2 を想定しています。
4 系が使いたい場合は issue 投げてください。(3.2 から 4.X へアップグレードできるかもしれないので、もしかしたら使えるかもしれません。)

まず Re:VIEW で表現できない命令は削除されます。
文字サイズや修飾はなくなるものと考えてください。(一部は類似の命令に置換します)


次に、ネストされたインライン命令は Re:VIEW では対応してないので、それぞれネストにならないように分解して出力しています。
また、テーブル中のインライン命令も安定しないため、テーブル中の @<br> は削除されます。
空のセルとして . を使用している場合に Re:VIEW の出力がなぜか2行になってしまっていたので、空のセルは . ではなくスペースに置換しています。

また、ブロック命令もネストできないので内側の命令は無視されるので注意してください。


他にもいろいろ無理やり対応しているところがあるので、もし使ってみておかしなところがあれば issue 出してください。
https://github.com/srz-zumix/review-retrovert/issues

最後に

もともとは自分用に書いたツールですが誰かの役に立てば幸いです。
執筆環境の制約はどうしても発生することがありますが、私としてはこのツールのおかげで安心して Re:VIEW Starter を使っていけるようになったかなと思います。

では。


2020/10/3 追記

ミスって gems に publish できてませんでしたmm
v0.9.1 から新しい Re:VIEW Starter に対応してます。
https://rubygems.org/gems/review-retrovert


2020年9月8日火曜日

[AppVeyor] fatal: reference is not a tree が出る場合の対応

AppVeyor に限らず git を使っていると遭遇するエラーかもしれませんが、AppVeyor でよく遭遇していて困ってたのでメモ。

原因としては「clone_depth: 1」としていることで、CI で実行されようとしているコミットハッシュが既に古く参照できないからのようなんですが、master の HEAD でも起きてる気がするんですよね。 


「New Build」をしても同じエラーになるので疑問が残るのですが、とりあえず 「clone_depth」をコメントアウトして対処しました。
ビルド時間を短縮する狙いで clone_depth を設定していたのですが残念です。

「それ以降はこのエラーに遭遇していません。」
と下書きに書いていたのですが、この記事を数ヶ月ストックしている間に再発しました。
おそらく、パスフィルターを導入して特定のファイルのみの変更はスキップするようにしたことが影響しているような気がしています。。

こちら、また進展があったら追記したいと思います。

今回は以上です。では。