テレワーク実施率5.6%は本当に少ないのか

テレワーク実施率5.6%のニュースをみて、余り物少なさに驚くような論調の記事が散見されるが本当に少ないのだろうか?「少ない」というからには何かに比較して少ないと言うのだろうが、その何かを明確にして論じている人は殆どいない。比較対照を持たずに「少ない」と論ずるのは、単なる主観でしかないので気をつけよう。

テレワークを実現できるか否かは職種によって大きく異なる。職種別労働人口に関する資料は無いかと検索したところ独立法人 労働政策研究・研修機構の2019年度職業別就業者数が見つかった。

上記資料では事務従事者、専門的・技術的従事者、生産工程従事者、販売従事者、サービス職業従事者、運搬・清掃・包装等従事者、建設採掘従事者、輸送・機械運転従事者、農林漁業従事者、保安職業従事者、管理的職業従事者、分類不能の12に分類して集計している。このうちテレワークが出来そうな職業は事務従事者(19.6%)、専門的・技術的従事者(17.5%)、管理的職業従事者(1.9%)程度しか見当たらない。これら3職業の合計で全体の39%ですかない。この専門的・技術的従事者には情報産業以外も含まれているはずだ。

検索したところ社会実績データ図録の技術者数の推移が見つかった。2015年時点で情報通信作業に従事する技術者は、技術者全体の42%となる。

テレワークできる職業に従事しているのは、ここまでの数字から最大に見積もっても29.4%でしかない。情報通信作業のうちインフラ系に属する人はテレワークでは対処できないので、実際にはもっと少ないはずだ。

詰まるところテレワーク実施率5.6%と言うが、テレワーク可能な業種で就労する人の19.0%以上はテレワークに移行していると推測できる。これが多いか少ないかは論じない。だが予想外に小さいと思うような数字ではないと思う。

アパレル系は休業するか考え直して!

非常事態宣言を受けてアパレル系が休業を決めているようだが、ちょっと考え直して欲しい。衣類は”衣食住”の一角を占める重要な生活消耗品です。せめて下着や子供服売場は開けてください。

入院するとなれば下着やパジャマ、タオルを買い足さざる得ないときもある。
子供服なんて去年の着れないと言うこともある。
乳児が生まれるれば産着を揃える必要もある。
しかも今は季節の変わり目。

各事業者には、自社の提供するサービスの社会的意義をしっかり振り返って、休業するべきか否か判断して欲しいです。
https://www.nikkei.com/article/DGXMZO57805630Y0A400C2000000/

経済対策で消費税減税とかあり得ないよと言う話し

消費税現在が叫ばれているが、消費税を勘違いしている人が存外多いので、簡単に纏めておく。

消費税に良くある誤解

企業は消費税をほとんど負担していない

企業も物を仕入れたり、経費をつかったりすると、消費税を支払います。例えば900万円で仕入れたなら、消費税90万円を含む990万円を支払うこととなる。この時の消費税90万円を、経理上は仮払消費税として別途集計しておきます。

逆に企業が物を売ったりすると、消費税を受け取ります。例えば1000万円の売上なら、消費税100万円を加えて、1100万円を受け取る。この時の消費税100万円を、経理上は仮受消費税として別途集計しておきます。

そして決算時に仮受消費税の合計額から、仮払消費税の合計額を引いた、残りを消費税額を消費税納税額として申告します。つまり仮払消費税が90万円、仮受け消費税が100万円なら、納税する消費税は10万円です。この納税する分の10万円は一括で支払う訳では無く、翌年に月々分割で納税していうことになります。

このように消費税は最終消費者が10%の消費税を負担する仕組みになっています。企業は経費として一旦は仮払消費税を払いますが、最後はお客様から頂いた仮受消費税と相殺します。したがって企業側は消費税負が殆ど無い(交際費など一部の経費は消費税を負担している)のです。

取引の度に消費税が積み上がるので、最終消費者の実質負担は10%ではなく数十%になる・・・と言う誤解を時折見かけます。そんな事は無いのです。

税率が変わった後も旧税率での売上や支払が起こる

税率の変更日以降の取引において消費税率が変わります。逆に言えば、変更日以前に1年単位あるいはもっと長期にわたる契約を取り交わしていた場合には、変更日以後も旧税率での取引が発生します。良くあるのは年単位の保守契約や賃借契約で代金を前払いしている場合です。長い場合には10年以上にわたって旧税率での取引が残ることもあります。(※実際には様々な特例規定が設けられてます。)

そのため企業の情報システムは税率変更後も旧税率の取引を、今後何年間にもわたって取り扱えなくてはなりません。場合によっては旧々税率の取引も扱う必要があります。だからこそ多大なシステム改修が発生するのです。

レジの消費税率変更はマニュアルを見れば誰でも簡単にできる・・・と言われる方がいますが、レジの消費税率設定は、消費税にかかわるシステムの一部に過ぎないのです。

税率変更に伴う価格改定作業は意外と時間がかかる

国が総額表示(内税価格での表示)を義務づけています。そのために店頭の価格表示は原則として総額表示です。税率改定時には旧税率総額表示になっている価格を全て外税表示に差し替え、税率変更日以後に改めて新税率の総額表示に差し替えるという作業をおこなっています。

食品スーパーなどはオンラインで表示価格を変更できる電子棚札を用いていますが、それ以外の小売業は紙に印刷していることが殆どです。これらを全て差し替えるには、仕事の合間を縫いながら何週間もかけて実施しています。

消費税減税は増税よりも難しい

消費税減税の告知により買い控えが発生する

消費税率変更にはシステム改修を避けられません。そのため、消費税率を下げる場合でも数年前からの告知が必要不可欠です。数年後に消費税率が大幅に下がるとなれば、広範囲で買い控えが発生するのを避けられません。

地方税収入が減額される

消費税10%のうち、7.8%が国税、2.2%は地方税となっています。地方自治体の税収源は限られており、また国債の発行などにより赤字を埋め合わせるのかも難しいのです。予算的な埋め合わせを考えずに消費税減税だけを実施すれば、元々余裕のない地方自治体の財政が破綻する可能性もあります。

上記のことを踏まえると、仮に消費税減税を実施するにしても「20年計画で2年ごとに1%づつ下げる」ような非常にゆっくりとした減税にするほか無く、緊急の経済対策として機能しうる物では無いです。

もし経済対策として行える可能性があるとしたら、消費税率を一度にゼロまで下げる事です。殆どのシステムは非課税(税率ゼロ)の取引を扱うことが出来るはずです。したがって税率をゼロにするならシステム改修は数ヶ月で済むと思われます。ただし、その数ヶ月間は個人消費が恐ろしく落ち込むので、同時に相当の財政出動を行わないと、多くの企業が破綻するでしょうけど。

.NET COREでLinuxで動作するサービスを作成する

.NET Core + C#でLinuxのDeamon作れないかなと思ったら、思ったより簡単に作れるようになっていたので覚え書き。Program.csとDaemonService.csの中味はほぼ定型なのでサンプルからそのまま流用します。

以下のサンプルは.NET Core 3.1で記述しています。

// Program.cs

using System;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

namespace DaemonSample
{
    class Program
    {
        public static async Task Main(string[] args)
        {
            var builder = new HostBuilder()
                .ConfigureAppConfiguration((hostingContext, config) =>
                {
                    config.AddEnvironmentVariables();

                    if (args != null)
                    {
                        config.AddCommandLine(args);
                    }
                })
                .ConfigureServices((hostContext, services) =>
                {
                    services.AddOptions();
                    services.Configure<DaemonConfig>(hostContext.Configuration.GetSection("Daemon"));

                    services.AddSingleton<IHostedService, DaemonService>();
                })
                .ConfigureLogging((hostingContext, logging) => {
                    logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
                    logging.AddConsole();
                });

            await builder.RunConsoleAsync();
        }
    }
}
// DaemonService.cs

using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;

namespace DaemonSample
{
    class DaemonService : IHostedService, IDisposable
    {
        private readonly ILogger _logger;
        private readonly IOptions<DaemonConfig> _config;
        public DaemonService(ILogger<DaemonService> logger, IOptions<DaemonConfig> config)
        {
            _logger = logger;
            _config = config;
        }

        public Task StartAsync(CancellationToken cancellationToken)
        {
            _logger.LogInformation("Starting daemon: " + _config.Value.DaemonName);
            _logger.LogInformation("arg1:{0}", _config.Value.arg1);
            _logger.LogInformation("arg2:{0}", _config.Value.arg2);

            // ここでサーバー本体の処理をTaskとして起動します。

            return Task.CompletedTask;
        }

        public Task StopAsync(CancellationToken cancellationToken)
        {
            _logger.LogInformation("Stopping daemon.");
            return Task.CompletedTask;
        }

        public void Dispose()
        {
            _logger.LogInformation("Disposing....");
        }
    }
}
// DaemonConfig.cs

using System;
using System.Collections.Generic;
using System.Text;

namespace DaemonSample
{
    class DaemonConfig
    {
        public string DaemonName { get; set; }
        public string arg1{ get; set; }
        public string arg2{ get; set; }
    }
}

起動時のコマンドラインは下記の通り。コマンドライン引数の受け渡し方が非常に独特です。

/usr/bin/dotnet run --project deamonsample --configuration Release --Daemon:DaemonName="Sample Daemon" Daemon:arg1="argument 1" Daemon:arg2="argument 2"

Demonとして起動するにはsystemdを使用します。/etc/systemd/systemにdeamonsample.serviceファイルを作成し、下記の様に記述します。

[Unit]
Description=deamon sample
After=network.target

[Service]
ExecStart=/usr/bin/dotnet run --project atozipsrv --configuration Release --Daemon:DaemonName="deamonsample " Daemon:arg1="argument 1" Daemon:arg2="argument 2"
WorkingDirectory=/usr/src/deamonsample
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=atozip
Environment=DOTNET_CLI_HOME=/var/src/deamonsample

[Install]
WantedBy=multi-user.target

後は通常のsystemdのDeamon同様に以下のコマンドで起動します。

$ systemctl start deamonsample

参考:Creating a Daemon with .NET Core (Part 1)

QNAP:他のNASから同期したフォルダに書込できない

HBS3 Hybrid Backup Syncの同期機能を使って既存のNAS(SMB)からQNAPにファイルをレプリケーションしておいてサーバーの移行を行い、いざ切替というところで共有フォルダ内にあるフォルダ以下に書き込むことが出来ないというトラブルが発生。共有フォルダのルートには書き込めるので、チェック時点では気がつかなかったのです。

Windows上からフォルダのプロパティを見るとAdministratorにのみ書込権限があり、Evryoneでは書き込めない状態になっています。

QNAP管理画面のFileStationからフォルダのプロパティを見ると所有者には書込権限はありますが、グループとパブリックには書込権限がありません。ここでグループとパブリックにも書込権限を付与すると、Windows上からファイルをコピーできるようになるので、これが原因のようです。

さて、困ったことにFileStationから複数のフォルダを選択して権限設定を書き換えることは出来ません。フォルダの数が多く、フォルダ毎に手作業で行うとなると、相応に時間がかかります。

ふと、QNAPのNASはsshで接続出来ることを思い出しました。コントロールパネルの「ネットワークサービスとファイルサービス」から「Telnet/SSH」を選択して「SSH接続を許可する」にチェックを付けます。

QNAPの共有フォルダは/share以下に作成されます。以下のコマンドを実行して全てのユーザーに書込権限を付与します。

chmod -R a+rw /share/Public

NASにSSHで入れると便利だね。

ちなみに環境は以下の通り。
QNAP TS-351
Firmware Version 4.4.1
HBS3 version 3.0.191202

素朴な疑問なんだが、みんなメールサーバはどうしているのだろう?

素朴な疑問なんだが、みんなメールサーバはどうしているのだろう?

メールアカウントのパスワード漏洩などといったインシデントに備えるなら、認証ログの監査は絶対に必要になると思うのだが、認証回りのログを提供してくれるインターネットメール運用サービスが見当たらない。SMTPは無くもないけど、POP/IMAPの認証ログを公開してくれるところが本当に見当たらない。国内向けサービスだとカゴヤジャパンとGMail、Office365ぐらいしか見つけられないんだけど、みんなどうしているの?

実はみんなGMailやOffice365に移行済みだったりする?
実はカゴヤジャパンは隠れた独占企業だったりする?
実はメールサーバぐらい自前で完璧に運用できて当然だったりする?
実は何処の会社もPOP/IMAPは塞いでてWEBメール以外使っていなかったり・・・いやいや、POP/IMAP無効なんてオプションサービスも、殆ど見かけないぞ。

Excelのパスワードを解除する方法

Excelのパスワードを解除する裏技を求めて、当WEBに来る方が少なくない。 「ブックの保護を強制的に解除する」は保護をすることで安全に隠せている気になっている記事への警告の意味で書いたので、パスワードが分からなくて困っている人へと補足情報を載せておこうと思う。

避けては通れない法律的な話し

まず法律的なことを覚えておいて欲しい。

何らかの方法でパスワードを調べたり、調べたパスワードを保管したりする行為は「不正アクセス行為の禁止等に関する法律」に抵触し、刑事罰の対象となる。例えファイルの中味を閲覧しなかったとしても、パスワードを調べたり、保管しているだけで処罰の対象となる。

裏技などを使ってパスワード(技術的利用制限手段)を迂回したりする行為は「著作権法」に抵触し、これまた刑事罰の対象となる。 著作権侵害の多くは親告罪だが、技術的利用制限手段の回避は非親告罪となる。

また裏技をつかってパスワード (技術的利用制限手段) を迂回するためのツールを提供する行為は「不正競争防止法」に抵触する。平成30年からはツールを提供するだけではなく、依頼を受けて役務を提供する事も処罰の対象となる。

以上のような法律があるので、いくら探しても「パスワードを解除して欲しい」という依頼を受けてくれる人は見つからない。Excelのファイルを解析してパスワードを解除するようなツールも見つからない。仮に技術的かつ予算的に可能であっても、家族や親友からの依頼でも無い限り、リスクが大きすぎて受けられないのだ。

とはいえ、パスワードが分からなくて途方に暮れている様もよく分かる。解決方法はただひとつしかない。技術的な知識と、法律的な知識を自ら身につけ、自らの手で作業するしかないのだ。

裏技による迂回方法

ブックやシートの保護パスワードや、VBAのソースコード閲覧パスワードなどは裏技的な方法で解除できる。実際に解除する方法は「Excel の各種パスワードを突破する方法まとめ」に良くまとまっている。新たに追記することはしない。

読み取りパスワードの解除

読み取りパスワードだけは総当たりで解除するしかない。だが、辞書に載っているような単語だけであるとか、あるいは6~7文字程度のパスワードであれば、解除できなくもない。

パスワードの解析によく使われるのは「John the Ripper password cracker」と言うツールだ。

私の使っている20万程度のパソコンでもGPUを使うと3,000パスフレーズ/秒程度のスピードで解析を進めてくれる。英数だけで構成される5文字程度のパスワードなら、最悪でも60時間程度で解析が終わる計算になる。辞書に載っているような単語、十万語程度を対象とするならば、数分で終わってしまう。

最高スペックのGPUを使うなら1桁程度は早くなる。IaaSで高速なサーバを複数台レンタルするなら2桁程度は早くなる 。6文字程度のパスワードなら総当たりでも 数日程度で 割り出すことが出来るし、そのために発生する費用は10万円にもみたない。

Postscript #1

そんな分けだからパスワードの分からなくなったファイルのことはキッパリと諦めて、ファイルをゼロから作り直すことを第一選択肢として考えたほうが良い。

Postscript #2

いまどき7文字程度のパスワードしか設定していないのは、実効性が無いので止めておいたほうが良い。無駄な仕事を増やしているだけに過ぎない。

Access Runtimeをインストールしようとしたら32bit版も64bit版もエラーになる

Access Runtime 2016 64bit版のインストールを行おうとすると「次の32ビットバージョンのOfficeプログラムががインストールされているため、64ビットバージョンのOfficeはインストールできません:Office 16 Click-to-Run Extensibility Component」とのエラーになる。

この環境は32bit版だったかと思い直し、 Access 2016 Runtime 32bit版のインストールを行おうとすると 「次の64ビットバージョンのOfficeプログラムががインストールされているため、32ビットバージョンのOfficeはインストールできません:Office 16 Click-to-Run Extensibility Component」とのエラーになる。

・・・どうしろとorz

Access Runtimeインストールの基本制約

Office 2016(2019にも)にはClick-to-Runインストール版 (以下C2R版) とMSIインストール版(以下MSI版)がある。ライセンス上はどちらをインストールしても構わないが、それぞれインストール方法が異なる。プレインストールの場合、昔はMSI版が多かったが、最近は C2R版が入って居ることが多い。そしてC2R版とMSI版には、それぞれ32bit版と64bit版がある。

Access RuntimeにもC2R 版とMSI版がある。C2R版はOffice 365 Access Runtimeと言う名称で、MSI版はAccess 2016 Runtime (ないし2019)と言う名称で提供されており、それぞれ32bit版と64bit版がある。

Access RuntimeをインストールするにはC2R版かMSI版か、32bit版か64bit版かの区分が完全に一致している必要がある。さらにMSI版の場合には2013と2016、2019は混在できないのでバージョンを統一する必要がある。

過去にプレインストール版が入っていた

当該環境はプレインストール版(C2R版)でインストールされていたため、アンインストールしてMSI版を入れ直していた。だが、どうもC2R版の残骸が残ってしまっているのが原因のようである。

アンインストールが完全に行われていないためにトラブルが発生することが度々あるようで、Microsoftのホームページに完全にアンインストールするための方法が書かれている。

PC から Office をアンインストールするの「オプション 2 – アンインストール サポート ツールを使用して Office を完全にアンインストールする」に従って、アンインストール補助用の実行プログラムをダウンロードして、実行することで残骸も含めて消せるようである。無論現在インストールされているMSI版も含めてアンインストールされてしまうのであろうけど・・・

余り褒められた話しではないが、作業時間も押してきているので、Access Runtime 2010のインストールでお茶を濁してしまった。でも恐らくは上記手順でOffice 2016の残骸を削除すればインストール出来るものと思われる。

TP-LinkのWiFi機器を使ってみた覚え書き

比較的安くて、法人向けの機能があって、障害発生時にも強そうなメッシュネットワーク対応のWiFi機器、TP-LinkのAC1200 MU-MIMO( EAP225-Outdoor )とか使ってみたので、これから買おうとする人のために覚え書き。

Omada Controler サーバー

メッシュネットワークを使うには Omada Controler をインストールしたサーバーを用意するか、 Omadaクラウドコントローラー (OC200 )を用意する必要がある。アクセスポイント単体ではメッシュネットーワーク機能を利用できない。(ただのアクセスポイントとして使う事は出来る)

TP-LinkのホームページからOmada Controlerが提供されており、これをWindowsかLinux(Ubuntu)にインストールすると、Omadaクラウドコントローラ相当の機能を使える。 OC200 はサーバーを設置できない場合の代替手段として 提供されているものなので、サーバーを用意できるならOC200を購入する必要はない。

Omada Controler は同一サブネット内に存在するOmada対応WiFi機器を自動的に検出してくれる。逆に言うとサブネットの外、ルーターを超えた場所にあるアクセスポイントは検出してくれない。ルーター超えて複数のサブネット内に存在するWiFi機器を検出するにはEAP Discovery Toolをインストールしたサーバー/パソコンを、それぞれのサブネット内に配置しておく必要がある。

わたしはUbuntu 18.04 LTS上にOmada Controlerをインストールしたが特筆することは何もない。導入自体は非常に単純で特筆すべき事が無い。sudo gdebiコマンドでダウンロードしたdebファイルからインストールした。デーモンとしては常駐しないのでログイン後にsudo /usr/bin/tpeap startとして起動する必要がある。

EAP225-Outdoor本体

EAP Discovery Toolを使ってIPアドレスを特定した後、アクセスポイントのWEB画面からログインして設定変更等を行う事も出来るが、 Omada Controlerを使うのであれば特に設定は必要ない。・・・と言うのもOmada Controler の制御下に入った時点で、パスワード以外はIPアドレスも含めて初期設定に戻ってしまうのだ。パスワード変更も含めた全ての設定はOmada Controler を経由して行う事になる。

あとはOmada ControlerのWEB画面から設定を行うだけである。独特の用語には全てToolTipで説明が表示されるので、本当に迷うことなく設定出来る。よく出来ている。

台湾製品だと電源周りが不安になるかと思うが、潔いというか電源はPoEのみとなっている。PoEから電源供給するためのACアダプタも同梱されているが、問題が起こったらサードパーティーのPoEユニットを使うという手もあるので、むしろ安心できる。

SOHO向けバックアップの在り方

RAID対応のNASにデータを集約する

もし各パソコンにデータを保有させていたり、パソコンをサーバー代わりに使っているなら、まずはRAID対応のNASを導入してデータを一箇所に集約する事をお勧めしたい。データが各パソコンに分散していると、バックアップにかかる手間もパソコンの台数分に発生する。またパソコンをサーバー代わりにしている場合、耐久性や信頼性の面でどうしても劣るからだ。

またRAIDを構成する場合には、以下の条件を満たさない限りRAID1以外・・・RAID0やRAIDO5、6、10を選択してはならない。
・24時間365日対応のオンサイト保守サービスを契約している
・1台のHDDでは実現できない容量のパーティションを必要としている、または1台のSSDでは実現できない速度を必要としている。

困ったことに一部のメーカーはRAID5やRAID6、時にはRAID10が高い信頼性と性能を誇るかのようにカタログに載せている。確かにRAID5やRAID6、RAID10なら信頼性を維持しつつ、性能を高める事が出来る。だが信頼性はRAID1と同程度、保守性の面ではRAID1より低下している。

またHDDではなくNASの本体が故障した場合には、RAID5やRAID6、RAID01を使用しているとデータの復旧が困難になる。ちょっとパソコンに詳しい程度ではお手上げだろう。専門のデータ復旧業者に依頼する必要があり、最短でも数日の時間と数十万円の費用を必要とする。RAID5やRAID6、RAID10を使うなら、24時間365日のオンサイト保守サービスを契約していて、直ぐに本体を修理して貰える事が必須要件となる。

これがRAID1なら適当にパソコンにLinuxをインストールしてNASから取り出したHDDを接続すればデータを取り出せる可能性が高い。ちょっとパソコンに詳しい人なら自力でもデータを取り出せる。

NASのデータをクラウドにバックアップ

画像や動画などの大容量のデータについては、AWSやAzureといったクラウドのオンラインストレージにデータをバックアップすることをお勧めしたい。最近のNASであれば、クラウド上にデータをバックアップする機能を提供していることが多い。容量単価を考えた場合、Google DriveやOne Driveの容量単価に比較して、AWSやAzureのオンラインストレージの方がはるかに安上がりになる。

小さいデータならOffice365やGSuiteを活用

比較的容量の小さいWordやExcelのファイルなら、Office365やGSuiteの有料プランを購入することをお勧めしたい。独自ドメインのメールサーバとして使ったり、取引先との大容量ファイルの交換に使ったりと、使用する範囲は広い。それらを個別に用意することを考えたなら、有料プランを契約しても、そう高い買い物ではないはずだ。

ちなみにOffice365やGSuite等のクラウド上においたデータをマスターとするなら、逆にクラウドからHDD等に定期的なバックアップをしておくことを忘れないように気を付けたい。クラウドサービス事業者側の事故でデータが失われることも、皆無ではない。また障害により一時的に利用できなくなることもある。業務を止めないためには、手元にもデータの複製を置いておくことを忘れないようにしよう。