物理の駅 by onsanai

Physics Station → PhSt 質問・疑問・間違いの指摘は、コメントに書くか、直接伝えるときっと良いことがあります。主にWindows or Ubuntu用の記事です

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を使い続けてる、ということなのである。

英語の勉強

明記のない場合は全てロングマン現代英英辞典からの引用

resolve
to find a satisfactory way of dealing with a problem or difficulty 
目的語に誤差(errors)を取れるようだ。

numerous
many のカッコいい表現

present
to show or describe someone or something

The values were presented for 何か。で、値は何かに対して示された、という表現。

find
to discover, see, or get something that you have been searching for
The values were found to be 数値。 で値は数値であると分かった、という表現。

have
The values have small errors. で、値のエラーは小さい、という表現。

exhibit
to show something in a public place so that people can go to see it
show のカッコいい表現
The results for 何か exhibit large errors. で何かのエラーは大きかった、という意味。

dominate
to be larger and more noticeable than anything else in a place
The error are dominated by 何か。で、そのエラーは何かが支配的だ、という意味。

establish
to find out facts that will prove that something is true
The values were establishedで、その値は確立された、という意味。

specialized skillsで、特別なスキル

desired positionで、目標の座標

何か reduced the timeで、何かのおかげで時間短縮した。

perform
to do something, especially something difficult or useful
もの performed ことで、ものはことを行った。

By combining A with B AをBと組み合わせると、

screen
if something screens something else, it is in front of it and hides it
The events are screened で、 そのイベントはふるいにかけられた、という意味。

prior to 何か で、何かの前に、の意味。

モノ, known as 特殊な名前

irradiate 検出器 using ビーム

as improvement over こと で、ことの代わりの改善として、という意味。

a ten-fold greater number。なんでa ten-times greater numberにならんのや。

dimension
a part of a situation or a quality involved in it 
A4 sheet has dimensions of 210mm ☓ 297mm A4はこのサイズである。

investigate
to try to find out the truth about something such as a crime, accident, or scientific problem

調査する的な意味

as follows 次のように

as mentioned above 前に書いたように

corresponding to the value 値に対応して

corresponding value 相当する値

The maximum search area is 1-mm square. 最大1mm四方を探索する。

throughout
in every part of a particular area, place etc
ぜーんぶ

dedicated 専用の

identify
to recognize and correctly name someone or something
認識するは、recognizeではないことが多い。

employ
to use a particular object, method, skill etc in order to achieve something
The conditions employed in this work この研究で採用された条件
「使われた」的な意味の動詞。受け身で使うことも

double
something that is twice as big, as much etc as usual or as something else
2倍にした、という意味の動詞

 as denoted in Figure 1 図1で示すように

verify
to discover whether something is correct or true
visually verify で目視で確かめるという意味に。

A is positioned near B。で、AはBの近くに位置する。

remain
to be left after other things have been dealt with
remaining もの で、残ったものとか、他のものとか

display
to show something to people, or put it in a place where people can see it easily
The result displayed こと で、その結果はことを見せた。

match
if one thing matches another, or if two things match, they look attractive together because they are a similar colour, pattern etc
ことA matches ことB で、ことAはことBと同じであるという意味にもなる。

indispensable
someone or something that is indispensable is so important or useful that it is impossible to manage without them
絶対必要な

For future work, 将来の研究のために

proceed
to continue to do something that has already been planned or started
進む
AはBの増加に伴いゆるかやかに低下する。
A slowly degrades with the increase of B.

AはBの減少に伴い急激に低下する。
A steeply degrades with the decrease"

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

VS2017の環境では、 /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);
}

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ツールがあり、中々使い勝手が良い。

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

f:id:onsanai:20190121120836p:plain

この例では、 ,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