mja

2024-01-03 18:36

私生活2023。

  • 東横インに39泊していた
  • 他のホテル・サウナは7泊くらい
  • 東海道新幹線は39回乗ってた (奇数なのは年越しして元日に戻ってきたから)
  • 2022年は福岡行ったから2023年は北海道行ったし仙台にも行った
  • Bリーグの試合観戦したらおもしろかった
  • そういえば東京女子のプロレスもみた
  • そういえばサンリオピューロランドも行ってた
  • ふつうに暮らしてたら行かなかったであろうスポットとして岡崎のアピタに行ったのはだいぶ新鮮だった
  • 年越しでナガシマスパーランド行った
  • 飲みに行く機会多かった

2024年は節約して収入を増やしたい。

2022-12-24 19:53

ふりかえり。

  • 1月 スマホ案件を引き継いでもらって SaaS の機能開発にもどった
  • 2月 SaaS やってた
  • 3月 SaaS やってた
  • 4月 SaaS やってた
  • 5月 SaaS やってた、ログもすこしこねくりまわした
  • 6月 SaaS やってた
  • 7月 SaaS やってた
  • 8月 SaaS やってた
  • 9月 SaaS やってた (複数サービス)
  • 10月 SaaS やってた (複数サービス, 導入支援対応)
  • 11月 SaaS やってた (複数サービス, 導入支援対応)
  • 12月 BI ツールさわってた

なにかの案件なりチームなりの面倒を見るポジションでは…ではあるんだけど、定期的に遊撃部隊みたいな活動をすることになる。いろいろ中途半端にやってきたせいで社内の人手の足りないところに駆り出されてる。完全に昔とった杵柄でやってる感じで、ここから先つぶしがきくようできかないという予感がしている。

2021-12-31 01:18

1年というサイズは具体的に振り返りするには大きすぎるってさっき思った。なんとなく懐しむにはほどよい。2021年の振り返りをする。

業務としては、

  • ログこねくりまわしてあそんでた
    • BigQuery 便利だな~
    • あそんでた結果他の案件にかりだされる
  • SaaS の開発案件をやってた
    • Rails でバッチ (バッチやることおおいな)
    • 画面もやったりしてるけどなんもわからんみたいになりがち
  • スマホ
    • 何度目の昔とった杵柄かという感じだけど、あそばせておくより、自社サービスより受託が優先されるのはそれはそう
    • iOS はギリギリ追えそうだけど Android は自信ない (今回も iOS やってる)

など。

いちおうログをこねくりまわす業務する部署にいるので Google Professional Data Engineer の認定うけたりした。 弊社のリモート具合はどんなもんかというのも一応のこしとくと、平時は週1リモート可、緊急事態宣言でるとフルリモートから週3リモートくらいなかんじ。

私生活としては、そこそここの状況ながらもでかけられた。北海道いったらおそらく帰りの飛行機あたりのログで COCOA の濃厚接触判定が出たりしてたいへんだった。大阪もいったけどあんまり外出られる雰囲気じゃなかったから、セブンイレブンの肉すい (関東にはない) を2回ホテルで食べるなどした。愛知県は適切な時期に月1か月2くらいのペースで行った。

健康面の不安はだいぶあって健康診断とは別に人間ドックいったりした。血液検査で特定の抗原の値が閾値越えてて再検査することになったりしたが、ひとまずは大丈夫そう (他も異常がないこともないけど経過観察くらい)。あとは一時期首がすわらないようなめまいがする時期があったり (しばらくしたらキャリブレーションされて直った感じ)、右下腹部というか股関節のあたりに違和感があったり (最近おさまりつつあるけど1年以上つづいている)、手ばなしに健康と言えない。

2021-03-19 20:18

VPS の OS を再インストールする。

背景

ちゃんとメンテナンスしてなかったさくらの VPS をちゃんとする。

  • 2010年くらいに "さくらのVPS 980" というサービスで申し込んだものが "さくらのVPS 512" という名前になっていた
  • スペック
    • メモリ: 1 GB
    • ストレージ: HDD 25 GB
    • CPU: 2コア

いろいろアップデートされて 512 の要素なくなってる。

この10年いくつか VPS つかって身内むけのなんかいろいろをやってたけど、そういう瞬発力もなくなったので整理して、自前のこまごましたものを動かすサーバだけが残った。このサーバをどうにかする。

セットアップ

以前は複数人でいろいろやるし、みんな業務で CentOS さわることおおかったからそうしたけど、今はそうじゃないので DebianUbuntu にする。Debian にする。

  1. カスタム OS として Debian 10 (Buster) をえらぶ (VPS バージョンが v1 なのでカスタムでしかえらべないらしい)
  2. VNC コンソールで手仕込みするように言われるのでする
    1. ガイドにしたがっていく
    2. ユーザ名適当につけるなどする
    3. パーティションは全部つかうように (どうせあとからいじることないだろうし LVM はつかわない)
  3. 反映してインストールすると VNC が切られるので VPS コンソールにもどる
  4. 各種設定のサーバー情報編集から VNC コンソールキー配列で en-us にして起動
  5. 最初のユーザでログインし、 root になって apt-get (なんと apt をよく知らない) で更新しつつ sudo いれて最初のユーザを sudoers にいれようとしたら sudo グループがあったのでそこにいれる (adduser user sudo して再度ログイン)
  6. 自分用のアカウントを追加してそれも sudo できるようにしておく
  7. sudo apt-get install ssh して ssh ログインできるようにする
    • 気休めにポート変えとく
    • 鍵のみにしておく
    • sshd を restart

久し振りすぎてちゃんとしてるのかよくわからない…。コンテナあたりまえすぎてインストール行為やった記憶がない。

2021-01-01 05:07

技術的な振り返りもしておいたほうがいいなという気持ちがあって、すこし書き出してたけどこいつ考えまとまってねーなという文章が出てきて参った。意図しない自省トリガーで気持ちの負荷が大きい。瑣末なことでも言語化して整理するというのを怠ってきたツケが。忌憚なく文章を共有できる場所があればこうなる前に整理できた気がするのでインターネットのウェブログの出番か。会社でも仲間うちでも「今さらこういう話する?」みたいになりそうなんだよな、と勝手に思ってしまっている。

自身の体験とか思考から「あ~なるほど…」というところに達し「これあの文章にあったやつじゃん…」と思い至り「みんなこれがわかった上で話してるんだな…」と口をつぐむ。『読書について』のことが浮かんでしまう (曲解)。自分を通して出力することに意味があるんだよ~と逐一言い聞かせていく必要がある。


しかし現状は生煮えかつ消化不良という状態なので、悩むことでもなかったな、誰か答えを教えてくれ~って書けばいいだけだった。

  • iOS とか Android でのアプリ開発やってると「.NET ではその話題だいぶまえに通ったよ」とか「JavaScript での Web UI でそれ以前開拓しましたね」みたいな感じになるので、いっぱつ歴史を学んで Web フロントエンドをほどほどに学んでもどってくるとよさそう。PoEAA とか読んだらいいのかな。翻訳がひどいからという評判を理由にノータッチなのもどうかと思うので読むことにする。
  • 普段の業務に客観性がない気がしてる。工学的な分野ではあたりまえのように存在しているであろう定量的なアプローチを知りたい。
  • なんかもう考えるのもめんどうになってきた…考える体力がないので体力をつけたい…

2020-12-31 16:22

めっちゃ頭悪くなっていってると思う。幅優先とか今読んでもわからないから去年とか一昨年の自分は頭いいな!って思った。


1月は世の中がまだ2019年までと同じムードだったが、年始早々風邪らしきものにかかり半月咳が止まらず腹筋が筋肉痛になった。周囲で同じタイミングで風邪らしきものに罹患した同僚2人はその後喘息が悪化した。今にして思えば…いやわからんけども…という気持ちがある。その後しばらく体調不良がつづいた。

自粛の声が出始めるが、それまでは普通に名古屋にいってサウナしたりワイワイしたりしていた。1月がギリギリだった感じ。

イベントは2月にエコパに行ったあと蒲郡ボートレース場行ったのが最後だった気がする。と思ったが、2月末くらいにトークショーに行っていた。マスク着用は必須だったけど、それ以外は従来のままで今にして思うとそこそこリスクがある状態だったと思う。当時は自身の予防のためにマスクしといたらいいでしょうくらいの感覚だった。まだサウナも普通に行っていた。

3月は熊本に行って湯らっくすにも行く気マンマンだったが、イベントは中止になったし、旅行する者は非国民みたいなムードになったのでジェットスターに金払って空気運んでもらう状況となった。しかしイベントかサウナ以外に興味がないのかという感じするが実際そうだから仕方ないか。3月前半くらいから家で仕事する流れになっていって、その後6月くらいまでずっと家にいる感じになって異様でおもしろかった (興味深かった)。2月くらいから今年の前半の案件がはじまっていたが、全然話がすすまなくてすごかった。

その後在宅期間は何も特筆すべきこともなく、朝起きて夜寝るみたいな日々だった。こういうときこそ気持ちを日記するべきだが、よっぽど何もなかったのか夢日記が延々とつづられているのを今目の当たりにしているところ。9月末くらいに案件を気合いで終わらせて (本当に気合い)、10月頭にリリースできたのでとりあえずよかった。職責の範囲を越えるような業務というか自分のこと以外で手を焼くみたいなのは、片手間ではできないということがわかった。体制をうまいことできるようにしたい。

10月になって空気がゆるんだので名古屋に行ったりした。Go To の恩恵受けたけど、こんなん状況さえよければ滅茶苦茶得なのでタイミングよくやってほしい。業務も落ち着いたので半月くらい休んだ。いろいろ疲れちゃったなっていう気持ちとずっとハイテンションで半年仕事してきた気持ちとが混ざって、しばらく普通に仕事できる気がしないとか言ってたけど燃え尽きた状態になっていた。完全にダラダラしてた。よくない。


今年は2020年という状況もあろうかとは思うけど、人間のことを気にしてやっていくことが多かった。慮るみたいなウェットなことはもちろんとして、システムとかリソースという観点でも気にしないといけないことが多くて気疲ればかりで成長とかは全然ない感じ。作業自体は手癖で仕事をこなした。スマホアプリ案件だったのでむしろ昔とった杵柄状態ともいえる。

2019-12-29 22:43

Python 全然わからないのとツリーをどうあらわすかよくわかってなくてしっちゃかめっちゃか。

moja888.hatenadiary.org

このやつを Python で書いてみたやつ。手段が "わや" な状態で何か解く、みたいなのむずかしい。

MAP = """
**************************
*S* *                    *
* * *  *  *************  *
* *   *    ************  *
*    *                   *
************** ***********
*                        *
** ***********************
*      *              G  *
*  *      *********** *  *
*    *        ******* *  *
*       *                *
**************************
""".strip()

EXPECTED = """
**************************
*S* * $$$                *
*$* *$$*$ *************  *
*$* $$* $$$************  *
*$$$$*    $$$$$          *
**************$***********
* $$$$$$$$$$$$$          *
**$***********************
* $$$$$*$$$$$$$$$$$$$$G  *
*  *  $$$ *********** *  *
*    *        ******* *  *
*       *                *
**************************
""".strip()

WALL  = '*'
PATH  = ' '
START = 'S'
GOAL  = 'G'
ROUTE = '$'

def create_item_nodes(map_str):
    blocks = [list(line) for line in MAP.split('\n')]
    item_nodes = []
    for row, line in enumerate(blocks):
        for col, item in enumerate(line):
            node = (row, col)
            item_nodes.append((item, node))
    return item_nodes

def find_item_node(target_item, item_nodes):
    for item, node in item_nodes:
        if item == target_item:
            return node
    return None

def find_neighbors(node, path_nodes):
    row, col = node
    candidates = {(row + 1, col), (row - 1, col), (row, col + 1), (row, col - 1)}
    return [n for n in path_nodes if n in candidates]

def find_route(item_nodes):
    start = find_item_node(START, item_nodes)
    assert start, 'start not found'
    goal = find_item_node(GOAL, item_nodes)
    assert goal, 'goal not found'

    path_nodes = [node for item, node in item_nodes if item in {PATH, START, GOAL}]

    known_path = {start}
    direction_origin_nodes = {start}
    directions = []

    while True:
        next_direction_origin_nodes = []
        for direction_origin in direction_origin_nodes:
            neighbors = [neighbor for neighbor in find_neighbors(direction_origin, path_nodes) if neighbor not in known_path]
            directions += [(direction_origin, neighbor) for neighbor in neighbors]
            next_direction_origin_nodes += neighbors
        direction_origin_nodes = set(next_direction_origin_nodes)
        known_path = known_path.union(direction_origin_nodes)

        if goal in direction_origin_nodes:
            break
        if not direction_origin_nodes:
            raise ValueError('path not found')

    def find_direction_by_dest(dest_node, directions):
        for direction in reversed(directions):
            orig, dest = direction
            if dest == dest_node:
                return direction

    route = []
    dest_node = goal
    while dest_node is not start:
        direction = find_direction_by_dest(dest_node, directions)
        orig, dest = direction
        route.append(orig)
        dest_node = orig

    return list(reversed(route))

def main():
    item_nodes = create_item_nodes(MAP)
    route = find_route(item_nodes)

    matrix = [list(line) for line in [line for line in MAP.split('\n')]]
    for row, col in route:
        if matrix[row][col] == PATH:
            matrix[row][col] = ROUTE

    routed_map = '\n'.join([''.join(cols) for cols in matrix])

    print(routed_map)

    print('FOUND PATH LENGTH:', sum([1 for char in routed_map if char == '$']))
    print('EXPECTED PATH LENGTH:', sum([1 for char in EXPECTED if char == '$']))

if __name__ == '__main__':
    main()
% python route.py
**************************
*S* * $$$$               *
*$* *$$* $*************  *
*$*$$$*  $$************  *
*$$$ *    $$$$$          *
**************$***********
* $$$$$$$$$$$$$          *
**$***********************
* $$$$$*$$$$$$$$$$$$$$G  *
*  *  $$$ *********** *  *
*    *        ******* *  *
*       *                *
**************************
FOUND PATH LENGTH: 59
EXPECTED PATH LENGTH: 59

幅優先のつもりなので最短のはず…。