「教養」とは学歴のことではなく、「一人で時間をつぶせる技術」のことでもある

こんにちは。

ここのところ、と言ってももう一年以上になりますがコロナのニュースばかりでげんなりしますね。

タイトルは中島らもの『今夜、すベてのバーで』の一文です。 コロナに対して公的な、あるいは企業の対策の問題は多くあるでしょうが、 一人ひとりに求められるスキルとして「一人で時間をつぶせる技術」があり、 また、世界中で「教養」が試されているのかもしれないとこの一文を読むと感じます。

教養というと高尚なもののように感じられますが、 「一人で時間をつぶせる技術」と思えばハードルは下がります。 いわゆる教養っぽい取り組みだけではなく、 DIYでなにか作ったり修理してみたり、お菓子を作って食べてみたり、 筋トレとかジョギングとかでストレスなく時間を使えるなら 「一人で時間をつぶせる技術」である「教養」があるといえるかもしれません。 このご時世ならオンラインで友人と会話を楽しむのも 「一人で時間をつぶせる技術」の拡張と考えられるかもしれません。

「教養(=一人で時間をつぶせる技術)」を磨いて感染症とともに生きる時代を乗り切りましょう。

ちなみにこのシーンはドラッグも含めて中毒患者が発生する原因についての、主人公による考察の場面です。 前後を含めて引用すると…

 アル中の要因は、あり余る「時間」だ。国の保障が行き届いていること がかえって皮肉な結果をもたらしていることになる。日本でもコンピュー タの導入などによって労働時間は大きく短縮されてくる。平均寿命の伸び と停年の落差も膨大な「空白の時間」を生む。「教養」のない人間には酒 を飲むことくらいしか残されていない。「教養」とは学歴のことではなく、 「一人で時間をつぶせる技術」のことでもある。
 要因は完璧なまでにそろっている。

私はほとんどお酒を飲みませんが、飲まれる方はお気をつけください。

毎日積立投信をセットしてみた件

こんにちは。

投資は10年ぐらいなんとなくインデックス運用で続けているのですがブログやなんかで手持ちの資産をオープンにするのは憚られるものです。とはいえ新規で始める分にはまあいいかなという感覚。

ということで見せる用の運用ということでSBI・バンガード・S&P500インデックス・ファンドを毎日1,000円積み立てることにしました。個人的にはNYダウでもMSCIのオールカントリーとかコクサイとかでもよかったんですが、まぁ、その辺は気分です。

ちなみに証券会社の流行はSBIか楽天と承知しているのですが、私のメインはマネックスです。10年ほど前、投資を始めようと思った時にマネックスとSBI同時に手続きを始めて先に開通したというだけの理由です。そのうち精査してもいいかもしれません。

 

RGBをリアルタイムで入れ替えて表示するツールをPythonで作ったよ

こんにちは。

私、色盲というのか色弱というのか色が苦手で、困ることはそんなに多くないのですが時々「こんなツールがあると助かるなあ」というときがあります。それも基本的にパソコン上での作業は、学生時代に見つけた「色々の色」を使うと概ね事足ります。

forest.watch.impress.co.jp

あともうちょいほしい機能としてはタイトルの通り、RGBを入れ替えて表示するというものがあります。ディスプレイの色は光の三原色であるRGB(=赤、緑、青)の強さを0~255の256段階で決定し、組み合わせることで表現されます。私の見え方ではRGBでいうとRに対する感度が弱く、Rの有無が識別のポイントになっている色同士の区別が難しいようです。例として…

f:id:mamiske:20210407005122p:plain

3つの数字は文字の色をRGBで示しています。①と②はR=255かR=0かの違いですので、瞬時で識別が難しいです。たとえば今の職場では図面のルールとして形状は①の色、寸法線は②の色となっています。多くの人はRに対する感度が高く、①と②は大きく違う色と認識されることが多いようなので認識に大きなギャップがあります。この線はどっちだ?というのを瞬時に見分けられると便利です。

Windows標準で拡大鏡というツールが入っていて色の反転ができますが、それは①と②を③と④に変えるものです。結局R=0かR=255かが識別のポイントなので、瞬時で判別が難しいです。多くの人にとっては全く違う色でしょうが、私にとって赤は目立たなく、黒と見間違うぐらい地味な暗い色なのです。一方でRとBを入れ替えて⑤と⑥にするとB=255かB=0かが識別のポイントになっているので簡単に識別できます。

人類の98%ぐらいの人には不要だと思いますが、この色を入れ替えるツールをPythonで作ってみました。ラジオボタンで選んだ変換をします。

import tkinter as tk
from tkinter import *
from PIL import ImageGrab, Image, ImageTk
import pyautogui as pgui
import numpy as np

root = tk.Tk()
root.geometry("300x200")
root.title("RGB Switcher")

cont_bln = tk.BooleanVar()
cont_bln.set(False)

img_size = 200
img_half = img_size / 2


# ラジオボタンのチェック確認用
var = tk.IntVar()
var.set(0)

def pil_to_tk(pil_image):
    global var
    im = np.array(pil_image)
    im_swap = im.copy()
    if var.get() == 0:
        im_swap[:, :, 0], im_swap[:, :, 2] = im[:, :, 2], im[:, :, 0]
    elif var.get() == 1:
        im_swap[:, :, 0], im_swap[:, :, 1] = im[:, :, 1], im[:, :, 0]
    elif var.get() == 2:
        im_swap[:, :, 1], im_swap[:, :, 2] = im[:, :, 2], im[:, :, 1]
    elif var.get() == 3:
        im_swap[:, :, 0], im_swap[:, :, 1] , im_swap[:, :, 2] \
                   = im[:, :, 2], im[:, :, 0] , im[:, :, 1]
    elif var.get() == 4:
        im_swap[:, :, 0], im_swap[:, :, 1] , im_swap[:, :, 2] \
                   = im[:, :, 1], im[:, :, 2] , im[:, :, 0]
        
    pil_img_swap = Image.fromarray(im_swap)

    # Tkinter画像オブジェクトをPIL画像オブジェクトから生成
    tk_image = ImageTk.PhotoImage(pil_img_swap)
    return tk_image


def cont_func():
    global cont_bln
    global tk_image
    global img_half
    if cont_bln.get() == True:
        x, y = pgui.position()
        pil_image = ImageGrab.grab ( bbox = ( x - img_half,
                                              y - img_half,
                                              x + img_half,
                                              y + img_half )
                                     )

        # PIL画像オブジェクトをTkinter画像オブジェクトに変換
        tk_image = pil_to_tk(pil_image)
        canvas.create_image(
        tk_image.width() // 2,
        tk_image.height() // 2,
        image=tk_image)
        root.after_idle( root.after, 0, cont_func )
        
def cont_pressed():
    global cont_bln
    if cont_bln.get() == False:
        cont_bln.set(True)
        root.after_idle( root.after, 0, cont_func )
    else:
        cont_bln.set(False)

# マウスポインタの位置を取得
x, y = pgui.position()
# マウスポインタ周辺の画像を取得
pil_image = ImageGrab.grab ( bbox = ( x - img_half,
                                      y - img_half,
                                      x + img_half,
                                      y + img_half )
                             )
# PIL画像オブジェクトをTkinter画像オブジェクトに変換
tk_image = pil_to_tk(pil_image)

frame = Frame(root, bd=1)
cont_btn = tk.Button(frame, text = "実行/停止", command=cont_pressed)
cont_chk = tk.Checkbutton(frame, variable = cont_bln, text = "実行中")
canvas = tk.Canvas(frame, width=img_size, height=img_size) 
rad_btn0 = tk.Radiobutton(frame, value=0, variable=var, text='RGB->BGR')
rad_btn1 = tk.Radiobutton(frame, value=1, variable=var, text='RGB->GRB')
rad_btn2 = tk.Radiobutton(frame, value=2, variable=var, text='RGB->RBG')
rad_btn3 = tk.Radiobutton(frame, value=3, variable=var, text='RGB->GBR')
rad_btn4 = tk.Radiobutton(frame, value=4, variable=var, text='RGB->BRG')

frame.grid(row=0,column=0)
canvas.pack(side=LEFT)
rad_btn0.pack(side=TOP)
rad_btn1.pack(side=TOP)
rad_btn2.pack(side=TOP)
rad_btn3.pack(side=TOP)
rad_btn4.pack(side=TOP)
cont_btn.pack(side=TOP)
cont_chk.pack(side=TOP)

root.attributes("-topmost", True)
root.mainloop()

参考にしたもの
NumPyでRGB画像の色チャンネルを分離して単色化、白黒化、色交換 | note.nkmk.me
[Python][Windows] Pythonでスクリーンキャプチャを行う - Qiita
【Python】ラジオボタン(Radiobutton)を作成する | 鎖プログラム
Python 3.x - Python3 Tkinter after()について|teratail
Tkinter 入門: 2. Widget を配置しよう
Python&tkinterで周期処理をしたいんだけどうまく行かなかった話と解決方法 - ウォーミングアップ

ちなみに何言っているかわからないかもしれませんが、いつも紛らわしいパワーポイントとエクセルのアイコンを見て
f:id:mamiske:20210407010206p:plain
「お前らホンマに違う色やったんやなあ」と思いました。

KiCADがもうすぐ日本語表示できそうなことに気づいた話

こんにちは。

回路図用のCADはいろいろ触ってみていて、無償のCADではKiCADが一番使いやすいなぁと思っていたのですが、日本語がうまく使えないのがネックでした。 フォントを持っていないのか、日本語のフォントをマージしてビルドしないと使えないようでした。以下のようなサイトを参考にしながらマージビルドにチャレンジして、だいたい途中でめんどくさくなってビルド済みのものを拾ってきては使っていました。現在正式版の最新が5.1.9に対して5.1.4の対応。 crl.sbd.bz

で、何とか日本語対応せんものかとあちこち検索かけていたらツイッターにこんなのが…

おおっ、と思ってNightly Buildをインストールすると確かに日本語表示が。

f:id:mamiske:20210113212435p:plain
KiCAD日本語表示

表示を見るとバージョン5.99。正式にはメジャーバージョンが上がってKiCAD 6.0での対応かな。これでだいぶ不満が解消します。

Python&tkinterで周期処理をしたいんだけどうまく行かなかった話と解決方法

こんにちは

回路の評価用に素人ながらPythonとtkinterを使ってツールを作っています。定期的、周期的にシリアル通信でコマンドを送信したくて色々試していました。調べて簡単に見つかるものはじわじわずれていったり、tkinterで使うと処理が帰ってこなくなったりするケースのものばかりだったのです。

そこでとりあえずうまくいった方法を。

import tkinter as tk
from tkinter import *
import time

root = tk.Tk()
root.geometry("200x50")
root.title("連続動作確認")

cont_bln = tk.BooleanVar()
cont_bln.set(False)

def cont_func():
    global cont_bln
    global cont_start  
    if cont_bln.get() == True:
        now = time.time()
        timediff = int ( ( now - cont_start ) * 1000 ) # msec
        next_count, tmp_time = divmod ( timediff, 1000 )
        next_time = 1000 - tmp_time
        # ここに処理を入れる
        print ( str(next_count) + " " + str(next_time) + " " + str(now) )
        root.after( next_time, cont_func )
        
def cont_pressed():
    global cont_bln
    global cont_start
    if cont_bln.get() == False:
        cont_bln.set(True)
        cont_start = time.time() # UNIX時間(秒)
        print ( "START " + str ( cont_start ) )
        root.after( 1000, cont_func )
    else:
        cont_bln.set(False)


frame = Frame(root, bd=1)
cont_btn = tk.Button(frame, text = "連続/停止", command=cont_pressed)
cont_chk = tk.Checkbutton(frame, variable = cont_bln, text = "連続動作中")

frame.grid(row=0,column=0)
cont_btn.pack(side=LEFT)
cont_chk.pack(side=LEFT)

root.mainloop()

ボタンを押すと1秒ごとに処理が走ります。チェックボックスの状態をそのままフラグとして使っているので、現状では動作中にチェックを外すと止まることになっています。実際使っているものからチャカっと切り出したので変なのが残っている気もしますが。

例えば以下のOK例と比べると、私の環境では少し毎回の精度が悪いようなんですが、なにか乱れる理由あるんですかねぇ。長期的にずれなければ毎回は多少ずれても良かったのでそのまま使っています。ちなみにあまり理解できていないこともありますが、リンク先の方法を使おうとすると処理が帰ってこない状態でした。

qiita.com

テクテクテクテクからテクテクライフへ

こんばんは。

以前テクテクテクテクというスマホのゲームがあって、結構好きで遊んでいましたがサービス終了していました。

「売上高900万円に対し、営業赤字が8億600万円」という状況で事業が継続できなかったようです。これはこれで適切に利益を得ないと結果的にユーザーにサービスを提供し続けられない、顧客のためにもならないという教訓があるようにも思いますが。

それはともかくそのころの反省も生かして?テクテクライフとしてこの10月1日にサービス開始したとの情報を受け、早速ダウンロード。BGMも懐かしく、早速通勤経路を塗っていました。プレイしながら思い出したことは、区画を完全に塗りつぶすとご褒美がもらえるので狭い区画の多い地域を攻めるのがよかった気がします。今回も有効かな?そうだ京都行こう。

www.tekutekulife.com

言い訳の効用

こんばんは。

言い訳は自分を守るためではなく、相手の納得のために使おう。両者は口から出る言葉やメールの文面には大きな違いはないけれど、最後のちょっとしたニュアンスに差が出ることがあります。

仕事なんだから先輩も上司も常軌を逸して怒り狂うことはありません。身を守るような下手な言い訳をすると、かえって怒りを買ってどんどん追い込まれてしまう。失敗や間違いを指摘してくれた人の納得につながる言い訳をしよう。

…などと感じる出来事がありました。疲れた。