2020年3月3日火曜日

[技術書典] PDF から必要なページを切り出す

自分用備忘録。

見本ように表紙や目次を提出することがある。
その際に出来上がった PDF から必要なページだけ取り出したいと思ったときに毎回検索して調べているので、メモです。

「Chrome で PDF を開いて必要なページを指定して印刷する」

以上。


【宣伝】

2020年2月3日月曜日

[技術書典8] GitHub Actions で作成した PDF を Google Drive にアップロードして Slack に通知する

「ブログズミ: [技術書典8] GitHub Actions で Re:VIEW Starter の PDF を作成する」先週の続きです。

先週は、GitHub Actions を使って Re:VIEW Starter の PDF 作成を CI にしました。
その際に、PDF のアップロード先を GitHub Actions の Artifact にしていましたが、こちらは誰でもアクセスが可能な場所だったので、private な場所にアップロードするようにしたいと思います。

Google Drive にアップロード
Google Drive へのアップロードはこちらで紹介されているアクションを利用しました。
「GitHub ActionsでLaTeXをビルドしてGoogle Driveに上げる - Qiita」
「Interact with Google Drive · Actions · GitHub Marketplace」

筆者は skicka は使ったことがなかったのでそちらの手順に従ってセットアップしました。

まずは手順通りに進めてみる
「skicka-を使ったことがない方」の手順どおりに進めていきます。

手順の 1. と 2. を実行してみて、「このアプリでは「Google でログイン」機能が一時的に無効」と出た場合は、別途回避手順が必要です。
筆者がやった時点では、このメッセージが表示されましたので回避手順を行いました。

回避手順を行う
「skickaの『「Google でログイン」機能が一時的に無効』を一時的に解決する - Qiita」
回避手順も Qiita とアクションのページに記事が投稿されていますので、参考にしましょう。

必要なのは、Google Drive API の Client ID と Client Secret です。
こちらを作成したら、アクションページの手順にあるとおりに ENV に 作成した ID/Secret を渡して docker run します。
続いて、手順にあるコマンドをそのまま実行します。

回避対応は以上です。
URL が表示されているので、もとの手順(2. ブラウザで開く)にもどりましょう。

続き
回避対応が正しくできていれば、今度はアクセスできると思います。
(警告出るかもしれませんが・・詳細開いて続行します)

アクセスを許可したら、コードが発行されるので docker に戻って入力します。


入力したら json が表示さます。
これで必要な情報が揃いました。

GitHub の Secrets に登録する
上記で作成した json と Google Drive API の Client ID/Secret を GitHub repository の Secret に登録します。

GitHub Actions に追加する
- name: Upload to Google Drive
  uses: satackey/action-google-drive@v1
  with:
    skicka-tokencache-json: ${{ secrets.SKICKA_TOKENCACHE_JSON }}
    upload-from: ./
    upload-to: /path/to/upload
    # 回避手順を取った場合は以下の2つも必須
    google-client-id: ${{ secrets.SKICKA_CLIENT_ID }}
    google-client-secret: ${{ secrets.SKICKA_CLIENT_SECRET }}

完成
無事にアップロード完了しました。



Slack に通知する
アップロードできたら、今度はアップロード通知が欲しくなりました。
そこで Slack 通知にも対応しておきました。

Post Slack messages · Actions · GitHub Marketplace
中みたら curl で API 叩いているだけだったので、正直 Actions 使う必要ないなーと思いつつも、これを使うことにしました。

Slack bot 作成

まずは Slack のボットを作成します。

1. Slack API で App を作成する



2. サイドバーの「OAuth & Permissions」のリンクを開きます。
(「App Home」の「Bot Token Added」のところにもリンクがあります)


3. 「Scopes」に chat:write 権限を追加


4. ワークスペースに Bot をインストールします。

5. 「Bot User OAuth Access Token」にトークンが表示されます。


Secrets 登録

トークンを発行できたら、続いて GitHub のリポジトリ設定から Secrets にトークンを追加します。
名前は「SLACK_BOT_TOKEN」としました。

Slack notification step

最後に、GitHub Actions のワークフローに以下のステップを追加します。
      - name: Notify slack
        env:
          SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
        uses: pullreminders/slack-action@master
        with:
          args: '{\"channel\":\"CSYR0PEHW\",\"text\":\"Upload new pdf!!\"}'


最後に
技術書典にサークル参加される皆さん。準備はバッチシでしょうか?
私はダメです。。。

がんばります。

2020年1月28日火曜日

Visual Studio のプロジェクト設定は共通部分を前に書こう

Visual Studio で複数の構成を扱っている場合がほとんどだと思います。
Debug/Release、Win32/x64 などなど。
MD/MT とかもありますね。dll/static lib とかもあるか。

それぞれ、インクルードパスだったり、プリプロセッサ定義だったりを書くと思いますが、私からのお願いです。

「各構成で共通な設定を先頭に書いてください」
「専用の設定を末尾に書いてください」


なぜか
Visual Studio で設定を編集する場合に、個々の構成に対して編集ができますが、
すべて・もしくは任意の複数構成で編集することもできるからです。
複数構成の編集をする場合、以下のように共通部分がそれぞれ表示されます。
差分があると「<別のオプション>」のように表示されます。

例:
Platformプリプロセッサの定義
Win32WIN32;_DEBUG;_LIB;
x64WIN64;WIN32;_DEBUG;_LIB;

Win32

x64

すべてのプラットフォーム


わかりますよね?
差分が先頭にあると、すべて「<別のオプション>」になってしまうのです。


共通部分を先頭に書く
共通部分を先頭にまとめておけば、複数構成で編集・閲覧するときに圧倒的に楽です!!
先程の例を修正してみましょう。

Platformプリプロセッサの定義
Win32WIN32;_DEBUG;_LIB;
x64WIN32;_DEBUG;_LIB;WIN64;

Win32 はそのまま、x64 の WIN64 を末尾に移動しました。

Win32

x64

すべてのプラットフォーム


いかがでしょうか?
差分を末尾に移動するだけで、こんなにも見やすくなりました。


もちろん、この状態で編集しても差分部分が壊れることはありません。


こちらは Visual Studio 2015 で試したものです。最新のバージョンでも同様です。
以上、私からのお願いでした。


P.S.
技術書典の進捗報告予定でしたが、カッとなって書いた。
技術書典の方は、執筆しつつも、今週はサークルカットを準備するのにほとんど時間を使ってました・・

では、また来週。