Go To トラベル事業のポイント

Go To トラベル事業の要点

  • 国内旅行代金の50%相当額を還元。上限は2万円(1人1泊あたり)。50%還元の内訳は、35%が旅行代金割引、15%は地域共通クーポンでの還元。ただし7/24~8/31までは35%の旅行代金割引のみで、後日還付手続きが必要。
  • 対象となる旅行料金は主に宿泊料金。交通機関も対象とするには宿泊とセットにする必要がある。
  • 申し込み方法は、旅行代理店・予約サイト経由(宿泊・日帰り問わず)。具体的な旅行業者は7月半ばごろから登録開始となるので現段階では決まっていない。
  • 連泊制限や利用回数の制限はなし。

観光庁のHPに概要とFAQが掲載されており、以上はそこからの抜粋。

www.mlit.go.jp


当事業の還元をフル活用しようとすると宿泊+交通機関のパックという形になる。 パックにおける交通機関は、飛行機や電車などの公共交通機関が主となり、自動車など感染リスクの低い手段は使い勝手がよくないではないだろうか。

足元、新規感染者が増加している中でこの事業を決行するようだが、まだ観光ムードにはほど遠い段階だと感じられる。
しばらくは観光というよりかは、遠方への用事に伴い当事業を利用するといったケースも多いのでないかと予想する。

モバイルプロジェクター(Anker Nebula Capsule II)と三脚の相性の良さ

家でプロジェクターを使い、大画面で映像を投影したいニーズはそれなりにあると思う。
Anker Nebula Capsule IIはそのようなニーズにおすすめできる。

  1. オートフォーカス・キーストーン補正
    最も重要なポイント。モバイルプロジェクターは場所を変えることが多く、ピントを合わせるのは頻繁にはないとはいえ手間になる。モバイルであるならオートフォーカスの有無はかなり重要である。
    キーストーン補正は斜めに投影した時に歪みを補正する機能。スクリーンに対して左右に回転した時は補正してくれないが、上下の場合は補正する。この機能のおかげで設置の自由度がかなり広がり、机の上にプロジェクターを置いて壁に投影するときなどに特に役に立つ。上下に投影するときは三脚があるとかなり便利。天井投影もしやすくなる。 f:id:kurama_sk:20200509203822j:plain

  2. コンパクトなサイズ
    イメージとしては小さめの水筒といった感じ。重さも740gとずっしり感はあるが、安定感もある。直径8cm程度で邪魔にならない。

  3. すっきりとしたインターフェイス
    電池を内蔵しており電源コードなしで使う事が出来るため、ケーブル類がなくすっきりさせることができる。 YoutubeNetflixなどはプロジェクター単体で見ることできるほか、Android OSが入っているためVLC等のアプリでファイルサーバー上の動画も無線で見ることができる。
    また、USB-AがありコンパクトなUSBメモリを使う事で多くの動画を保存することができる。 もちろんHDMIでの有線接続も可能。

  4. スピーカー内蔵
    8Wスピーカー内蔵。単体でもスピーカーとして使う事ができる。

明るさは200ANSIルーメンと気を付けるべき点はもちろんあるが、少し照明の明るさを落とせば十分に見やすい。オフィスやカーテンの開いている昼の部屋などのよほど明るい部屋では厳しいと思う。

税込み6万円とそれなりの値段がするがモバイルプロジェクターとしてはとても使いやすい。繰り返しになるが1.のオートフォーカス・キーストーン補正が重要である。

TDnet(適時開示情報閲覧サービス)のサイトとHTML構造

  • URL

    1. トップページ:https://www.release.tdnet.info/inbs/I_main_00.html
      アクセスした日に公表された一覧が表示される。

    2. 指定日の一覧:https://www.release.tdnet.info/inbs/I_list_001_20200505.html
      指定日(2020/5/5)に公表された一覧が表示される。100件以上あればURLは002, 003,...と対応していく。

    3. 開示情報検索:https://www.release.tdnet.info/onsf/TDJFSearch/TDJFSearch
      日付・キーワードのパラメーターと一緒にPOSTすると、検索結果が返ってくる。単体でアクセスしても何も表示されない。

    BeautifulSoup等で解析する場合、2もしくは3を使うと便利である。

  • 2のケース
    URLの001と20200505の部分を任意の値にしBeautifulSoupで解析。日付は1か月程度さかのぼることができる。

    解析のポイント

    • 各要素のクラス名
      各要素においてoddnew-hogeとevennew-hogeと偶奇でクラス名が異なっており soup.hoge.find(class_=['oddnew-M kjCode','evennew-M kjCode'])とするとまとめて取得できる。

    • 日付
      HTMLのテーブルには時刻しか含まれないので、解析した時刻に加えURLで指定した日付をこのような形で変換する。
      import datetime as dt dt.datetime.strptime(DATE + TIME, '%Y/%m/%d %H:%M')

    • PDFやURLのリンク
      soup.hoge.find(class_=hoge).find('a').get('href')とaタグをはさんでhrefをgetすると取得できる。ただし、これは途中からの部分的なURLなので'https://www.release.tdnet.info/inbs/'を先頭につける必要がある。

    • 不要な空白
      会社名、上場取引所、更新履歴には不要な空白が含まれるので'文字列'.str.strip()として取り除く。


  • 3のケース
    response = requests.post('https://www.release.tdnet.info/onsf/TDJFSearch/TDJFSearch', data=data)としてresponse.textをBeautifulSoupで解析する。dataがパラメーターとなっており、 data = { 't0': 20200430, 't1': 20200501, 'q': u'業績予想', 'm': '0' } とすると、'業績予想'をキーワードに含む2020/4/30~2020/5/1に発表された一覧が取得できる。
    日本語など他バイト文字の場合、uを文字列の前につけないとエラーとなる。

    残りは2のケースと構造はおおむね同じである。

PythonにおけるPOST時のマルチバイト文字の扱い

requestsライブラリのrequests.post(url, data)のdataにパラメーターを渡すときにおける漢字などの扱いについて。

パラメータに漢字などの2バイト文字を入れたいとき、そのまま入力するとエラーになる。
ブラウザがPOSTする情報を見ると\u7d4c\u55b6のという形式で送信している。これはUnicodeエスケープシーケンスであり、Pythonでは u'経営' とすると正常に変換しPOSTできた。

'経営'.encode('unicode-escape').decode()などでも変換できるが、出力文字列は \\u7d4c\\u55b6 となり'\'が二重に出てしまう。これだとPOSTしてもエラーとなった。

pipenvでCythonをインストール(Windows)

pipenvでCythonのインストールではまったのでメモ。

シンプルに pipenv install cython では Installing dependencies from Pipfile.lock と表示され、79/100でタイムアウトしてしまう。Cythonの依存パッケージのインストールでエラーが出るようだ。

試行錯誤した結果、

  1. c++コンパイラ(MinGW64)をインストール
    配布元よりダウンロード・インストール
    http://mingw-w64.org/doku.php/start

  2. MinGW64にパスを通す
    "C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin" を環境変数に追加
    "x86_64-8.1.0-posix-seh-rt_v6-rev0" はインストールしたバージョンに対応する名前になる。

  3. pipenvの環境下にdistutils.cfgを作成
    以下のフォルダにdistutilsフォルダを作成、その中にdistutils.cfgを作成。
    "%homepath%/.virtualenvs/環境に対応したフォルダ/Lib"

[build]
compiler=mingw32

1-3を実行後だと pipenv install Cython で正常にインストールできた。

Excel VBAとGithub

Excel VBAのコードはxlsmファイルの形式ではバイナリ形式で認識されるため、直接Githubで管理できない。
今回はxlsmからコードを分離しbasファイルなどのモジュールにエクスポートすることで、Github管理する方法を紹介する。

まずはxlsmファイルからコードを分離する必要がある。
手動でもVBAのコード編集画面のファイルメニューやプロジェクトエクスプローラーから、モジュールのインポート・エクスポートは可能である。同じことをVBAでも実現できる。

  • インポート
    FilePathにインポートしたいファイルパスを指定する。
Private Function Import_Module()
    Const FilePath As String = "example.bas"
    ThisWorkbook.VBProject.VBComponents.Import FilePath
End Function
  • エクスポート
    ModuleNameにエクスポートしたいモジュール名を指定する。
Private Function Export_Module()
    Const ModuleName as String = "Module1"
    Dim objVBC As Object 'VBComponent
    Set objVBC = ThisWorkbook.VBProject.VBComponents(ModuleName)
    ThisWorkbook.VBProject.VBComponents.Remove objVBC
End Function

ここまでのコードで、xlsmファイルからコードを分離・取り込みすることが可能となる。

ここからはGithubに関連するコードを説明する。
以下はstrCMD()にシェルコマンドをセットし、ExecuteCMD()で実行するプログラムである。
ExecuteCMD()のCurrentDirectoryは、.gitフォルダと同じディレクトリにする必要がある。

Private Function gitPullAddCommitPush()
    Dim strCMD As String
        
    strCMD = "git pull"
    ExecuteCMD(strCMD)
    
    strCMD = "git add ."
    ExecuteCMD(strCMD)
    
    strCMD = "git commit -m revise"
    ExecuteCMD(strCMD)
    
    strCMD = "git push origin master"
    ExecuteCMD(strCMD)
End Function

Public Function ExecuteCMD(strCMD As String) 'CMDにコマンドを投げる
    Dim buf As String
    With CreateObject("Wscript.Shell")
        .CurrentDirectory = ThisWorkbook.Path
        buf = .Run(strCMD, WaitOnReturn:=True)
    End With
End Function

Export_Module()でモジュールを分離した後、gitPullAddCommitPush()を実行すれば、basファイルなどの形でコードをGithubで管理できる。

Excel VBA開発環境の色を変える

Excel等でマクロのコードを編集する画面の背景はデフォルトでは白である。
この画面の背景色・文字色は変更することができる。
f:id:kurama_sk:20200411190138p:plain

変更するには、VBA編集画面のメニューバー: ツール→オプション→エディターの設定 を開く。
f:id:kurama_sk:20200411185644p:plain

画像の設定は以下の通り。

  • 標準コード:前景 白、背景 黒
  • 選択された文字:(デフォルト)
  • 構文エラーの文字:前景 赤
  • 次のステートメント:背景 黄色、インジケーター 黄色
  • ブレークポイント:前景 白、背景 濃赤、インジケーター 濃赤
  • コメント:前景 緑、背景 黒
  • キーワード:前景 水色、背景 黒
  • 識別子:前景 ピンク、背景 黒
  • ブックマーク:前景 白、背景 黒、インジケーター 水色
  • 呼び出し元:前景 白、背景 黒、インジケーター 緑

前景は文字色のことである。背景を黒にする場合、基本的には背景は黒、前景は黒以外にすることとなる。
「キーワード」はDim、If、For、Subなどの予約語。「識別子」は定義した変数、関数、ThisWorkbookなどのオブジェクト。