物理の駅 Physics station by 現役研究者

テクノロジーは共有されてこそ栄える

Slackに投稿されたファイルを一括で削除するpythonコード

まずは、tokenをゲットせよ。

api.slack.com

次に、slackclientパッケージに入れる

pip install slackclient

クライアントのインスタンスを作る。pythonってインスタンスって言葉使うんだっけ?

from slackclient import SlackClient
slack_token = 'xoxp-**-**-**-****'
client = SlackClient(slack_token)

ファイルのリストを得る。

all_files = []
for p in range(1,1000):
    files = client.api_call("files.list",page=p)
    all_files.extend(files["files"])
    if len(files["files"]) == 0:
        break

こんな鮮やかじゃないコードなんていらないっていう人は、回れ右で帰ろう。もっとうまく書く方法はあるはずである。

client.api_call("files.list",page=p) ここが重要である。戻り値は辞書型になってるので、読めば分かる。あるユーザーのファイルだけ得たい場合は、 user="XXXXXXX" とかを引数に入れれば良い。

最後に、ファイルを削除してみよう

for file in all_files:
        ret = client.api_call("files.delete", file=file["id"])
        if ret["ok"]:
                print("OK")

これはテストではない。本当に削除される。だから、試しに・・・っていう人は本当に気をつけてね(泣)。

ハマったところとしては pageusername の扱い。

削除する前にページを走査して、ファイルリストを全て取得おこう。 files.list は非同期なので、削除しながらリストを得るとハマる。

username 。現代のSlackで username は存在しない。名無しの権兵衛ではなく、IDで管理されている。管理社会なのである。だから、特定のユーザーのファイルを削除したい時は file["user"] のユーザーIDで振り分けよう。

ユーザーリストは次のように得る。

users = client.api_call("users.list")
print(users)

pythonなんか分からないっていう人は、pythonぐらい勉強しろよと言いたいところだが、便利なリンクを用意しておく。ここではpythonを使わなくてもAPIが叩ける。

削除のAPIを叩くと警告なしで削除されるから本当に気をつけろよ。

Google 日本語入力 (Google IME)は複数のDPIディスプレイ使用に非対応

Windows 10で複数のDPIが対応してはや2年ほど経ったか。Chromeなどのブラウザもようやく複数のDPIディスプレイ使用に対応してくれた。

しかし、Google 日本語入力よ。君はいつになったら対応してくれるのかい?

現行の公式版 2.24.3250.0

f:id:onsanai:20190308131702p:plain

デベロッパー版2.24.3270.100

f:id:onsanai:20190308132222p:plain

どちらでも非対応なので、高DPIディスプレイと通常のDPIディスプレイを混在したとき、Windowsを起動した際にメインディスプレイだった方では変換候補が正しく表示されるが、それ以外では正しく表示されない。

ATOK IMEや、Microsoft IMEは対応しているが、ATOKは僕のタイピング速度に追いついてこないためダメ。Microsoft IMEは全ての数字入力を小文字に出来ないのでダメ。結局、変換候補が表示される場所を犠牲にして、Google IMEを使い続けてる、ということなのである。

std::filesystemを使ってディレクトリ(フォルダ)内にある全ファイルをリストしたりディレクトリを作成したり

VS2017 VS2019の環境では、 /std:c++latest または /std:c++17コンパイルオプションに追加する必要がある。

具体的な作業は、プロジェクトのオプション→C/C++→言語→C++言語標準 で /std:c++latest または /std:c++17 を追加する。/std:c++latest は実験的要素が強いので、筆者は /std:c++17を使っている

#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;

int main(int argc, char** argv) {

    if (argc == 1)return -1;
    fs::path path1(argv[1]);

    //ファイルをリスト化
    if (fs::is_directory(path1)) {
        std::cout << "Directory: " << fs::absolute(path1).string() << std::endl;
        std::cout << "Files: " << std::endl;
        auto dir_it = fs::directory_iterator(path1);
        for (auto &p : dir_it) {
            std::cout << p.path().string() << std::endl;
        }
    }
    //ディレクトリを作成
    auto path2 = path1 / "new_dir" ;
    fs::create_directory(path2);
}

/std:c++latest /std:c++17 の違いなどの詳細は下記のリンク参照

docs.microsoft.com

Visual Studio Code + Latex Workshopで、built-in diffを使ったときに左の画面でコピーができない (解決済み)

Cannot copy the text on left side of the diff window · Issue #1125 · James-Yu/LaTeX-Workshop · GitHub

Visual Studio Codeは、内蔵のdiffツールがあり、中々使い勝手が良い。

通常、左側に変更前の情報が描かれ、右側に変更後の情報が描かれる。

この例では、 ,hidelinks という文字列を追加したということがひと目で分かる。

さて問題は、このdiffツールとLaTeX-Workshopの相性である。通常、左側の画面では文字列の 選択、コピー はできる( 貼り付け はできない)のだが、LaTeX-Workshop をインストールした状態では、カーソルが強制的に右の画面に移ってしまい、左の画面のテキストをコピーすることができなくなる。

いや、たぶんできるのだが、テキストを選択直後にカーソルが0.1秒程度で右の画面に移ってしまうため、人間の応答速度ではコピーは出来ないのである。

開発チームは99.9%そんな状況は再現しないと言い張っているが、私の環境や、私が管理している他のパソコン上では簡単に再現できたため、私の中では99.9%再現できる状況であると考えている。

というわけで、同様の状況を確認した人は、GithubのIssueに追記してもらえないだろうか。報告をお待ちしている。

Cannot copy the text on left side of the diff window · Issue #1125 · James-Yu/LaTeX-Workshop · GitHub

3G (WCDMA)のバンドリスト (関係国のみ)

Bands Egypt Greece Japan(Docomo) Japan(Softbank) US(T-Mobile) US(AT&T)
1(2100) - -
8(900) - - -
6(800) - - - - -
5(850) - - - - -
9(1700) - - - - -
2(1900) 終了? - - - -
19(800) - - - - - -
4(1700) - - - - - -
Bands MightySIM Nexus6*1 AirCard785 Aterm NR05LN CAT S41 Pixel 3 iPhone X
1(2100)
8(900) -
6(800) - - -
5(850) -
9(1700) - -
2(1900) 終了? - - - -
19(800) - -
4(1700) - - - -

*1 グローバル版

アメリカで1900MHzが終了していると連絡を受けています。