yanom blog

様々な技術について書きます

デフォルトテレワークなりました

皆さん、テレワークしてますか?
弊社でも、今週ついにデフォルトテレワーク宣言が出されました。
(ただし、都合上テレワークできない人は出社可)
3月頃からぼちぼちテレワークを始め、ようやく慣れてきました。
(個人的には集中しすぎてしまうので、意識的に休憩を入れるようにしています)
子どもは毎日家で楽しそうにフォートナイトで遊んでいます。

さて、出社できなくて結構困るのが運動ではないでしょうか。
私も、一日40分ほど歩いて出社していたのでそれがなくなって体重が増加してきました。。
ということで、最近HIITトレーニングバービーチャレンジしています。

世間が落ち着いた頃に、体重も減っているといいな。。。
現場からは以上です。

Svelte入門した

Svelteをご存知でしょうか?
ReactやVueのようなフレームワークの一つなのですが、Reactほど学習コストが高くないのがポイントです。
また、「仮想DOM」の技術は使われていませんが、宣言的なUIで記述でき高速に動作するように設計されています。 そのため、個人の開発やPoCといった小規模開発に向いていると考えています。

公式のドキュメントチュートリアルは全文英語ですが、
難しい単語はないため苦手な方でも理解しやすいかと思います。
ソースコードgithubで公開されており、コミュニティも活発に活動してます。

日本での知名度はまだまだですが、 個人で使えて、Reactほど難しくないフレームワークをお探しの方は試してみてはいかがでしょうか?

Go言語でつくるインタプリタを読んだ

たまに、見かける本で個人的に興味があったGo言語でつくるインタプリタを読み終わりました。
そして、無事にMonkey言語を実装し終わりました。
言語を実装したのは初めてでしたが、動くところまでいけて良かった。
(12月末から始めて、2月は殆どやれていなかったので実質2ヶ月程度かかりました)

本の内容については、色んな方が触れられているので割愛しますが、少しずつ自作言語が動いていく達成感と、テストが通り思い通りに動作したときの快感が最高でした。
素晴らしい本をありがとう。
興味のある方はぜひ買ってみて下さい!

serviceで起動したアプリを正しく起動する

最近、今更ながらserviceで起動するアプリを作成しています。
処理としては、service startされたらデーモン化して常時動くようなアプリになっています。
その際、/var/run/配下にpidファイルを作成します。

問題

  • /var/run/配下のpidファイルが作成出来なかった場合でも、アプリが起動してしまう

これは、sudoでアプリを起動しなかった場合に、/var/run/配下の書き込み権限がなくpidファイルが作成出来ないのですが、アプリはお構いなしに起動してしまうという話です。

対処

def daemonize():
    pid = os.fork()
    if pid > 0:
        try:
            pid_file = open(pid_file_path, 'w')
        except Exception as e:
            logger.error(e)
            os.kill(0, signal.SIGKILL) #pidファイル作成に失敗した場合に子プロセスをkillする
            sys.exit(2)
        pid_file.write(str(pid) + "\n")
        pid_file.close()
        sys.exit()
    if pid == 0:
        main()

ひとまず、これで上手いこと動きました。
が、本当にこの方法で良いのかは分かりません。
誰か詳しい人教えて下さい。

dreamerdream.hateblo.jp

テレワークしてみた

今色んなところで話題になっているテレワークを私も先週からしてます。
弊社もなんだかんだテレワークが推奨されつつあり、そのうちテレワーク勤務だけになるかもしれません。
ただ、テレワークが出来るには出来るんですが設備の対応が追いついていないのか、テレワーク者の人数が増えるにつれて回線が重くなっておりまだまだ快適とは言いづらい状況です。。。
回線が重いだけならともかく、vpnに接続できなかったりすると仕事にならないんですよねぇ。。。
まぁテレワークできるだけましということで頑張ります。

notionを使い始めた

皆さんは普段の自分の考えをどういう形で残していますか?
わたしは、去年scrapboxを使いはじめました。
scrapboxでは、日記的に日々起こったことを記録していまして、何がいいかって過去の自分と思いがけないところでリンクしたりするのがとても楽しいです。
ただ、scrapboxだとまとまった記事みたいなのは少し書きづらいんですよね、フリーフォーマットなのがいい所なんですが自由すぎて書きづらい。
なので、まとまった情報を書き残す場所を探していたところNotionがいい感じでした。
Notionの使い方は散々他の方が記事にしているので割愛しますが、私の場合は普段の日記をscrapboxに、技術的なまとまった情報をNotionに残すようにしています。
目下一番の残念ポイントは、会社のproxy下ではNotionのデスクトップアプリが動かいないことですかね。。。
いつまで続くかわかりませんが試してみたいと思います。

ansible inventoryファイルをいい感じに作りたい

ansibleを最近使っていますが、自分が使いたい形式のinventoryファイルの作成に手間取ったのでライブラリを作って公開しました。
2020/02/10追記
仕事でansibleを使ってるんですが、その際にインベントリファイルを動的に(DBに格納されている情報などから)生成する必要がありました。
pythonでiniファイルを扱う場合、標準ライブラリであるConfigParserを使うのが一般的なようです。
しかし、ansibleの場合一般的なiniファイルの形式と少し違う箇所があります。

  • 一般的な例
  [DEFAULT]
  ServerAliveInterval = 45
  Compression = yes
  CompressionLevel = 9
  ForwardX11 = yes

  [bitbucket.org]
  User = hg

  [topsecret.server.com]
  Port = 50022
  ForwardX11 = no
  • ansibleの場合
  [linux]
  <ホスト名/IPアドレス> <key>=<value> <key>=<value> <key>=<value>

このように、行頭にホスト名を指定したかったり、複数key/valueを入れたかったりしたかったのですが、
標準ライブラリのconfigparserではできそうになかった(ちゃんと調べてませんが・・・)のと、pythonでライブラリを公開したかった(主な理由)ので、 作りました
使い方などは、readmeを御覧ください。
また、pythonでのライブラリ公開手順については、以下を参考にさせていただきました(twineを使いました)

よければ、使ってみてください。