みずりゅの自由帳

主に参加したイベントやソフトウェア技術/開発について記録しています

deploy.fmに出演しました

2018年11月にdeploy.fmと言うPodcastにゲスト出演しました。放送が公開されて1週間ほど経過したので、軽く振り返ってみようと思います。

なお、deploy.fmとは、パーソナリティであるtakasy ( @takattata )さんが、ゲストのエンジニアの経緯/経歴を聞き、そして趣味などの話をするPodcastとなっています。なお、takasyさんはiOSAndroidのモバイルアプリエンジニアであるので、出演者は主にアプリエンジニアの方が多いようです。とは言え、私のようにモバイルアプリエンジニアでないゲストも出演しています。

takattata.github.io

 

続きを読む

みずりゅのこの道わが旅2018〜成長への遥かな旅路〜

この記事は、#セイチョウ・ジャーニー Advent Calendar 3日目の記事です。

 

adventar.org

 

この一年の自分の成長について、振り返ってみます。

なお、「アドベントカレンダーって何かけばいいの?」と迷っていた際にTVアイコンの方から「表に姿を現し始めた前後のあたりが気になります」とアドバイスを頂けました。なので、その辺りからのことを振り返って書いてみます。

続きを読む

しがないラジオmeetup2で恩送りLTをしてきた。

今回は参加レポートではなく、LTの作成過程/発表における自分の葛藤について書きました。その理由は最後に書いています。

 

2018年11月28日、しがないラジオmeetup 2に参加してLTをしてきました

LT枠をゲットした際には、やろうと思っていたある野望がありました。しかし、その内容は滑ってしまう可能性もありました。そのため、参加申込時には申込画面を3回リロードしています。その間にLT枠が埋まったら諦めよう、でももしもLT枠が空いていたら一歩踏み出そう、と決心しました。

そして、運命の3回目のリロード。画面確認後、空いているLT枠。私は、LT枠での参加を申し込みました。

 

shiganai.connpass.com

 

続きを読む

Python3でMBOXからバイナリで読み込んだメッセージデータの改行コードを変更する

備忘メモ。

mbox形式のファイルからメッセージを取り出して保存する際に利用した方法。
諸般の事情で、改行コードをLFからCRLFにする必要があった。

本来ならテキストベースで一行ずつ読み込んで保存する際に改行コードを付ければ良いが、メールデータだとメールヘッダやメッセージ本文のエンコードを都度確認しておかないとエンコードできない文字が出てくる場合がある。
変換できない文字を無視するという対応もあったが、できるだけ元に近い状態にしておきたかった。

そのため、バイナリでデータを読み込んで、バイナリデータ上で置換を行い、バイナリでファイルに書き込むようにした。

以下、改行「LF(¥n)」を「CRLF(¥r¥n)」に変換する場合の例。

  1. キーとメッセージ(バイナリデータ)を引数で渡す。
  2. メッセージのバイナリデータを、replaceで「b'¥n'」の箇所を「b'¥r¥n'」に変換する。
  3. キーの値からファイル名を作る。
  4. 作成したファイル名でバイナリモードでファイルを開き、バイナリデータを書き込む。
def write_contents(index, mail):
    mail = mail.replace(b'¥n', b'¥r¥n')
    filename = format(index, '04d') + '.eml'
    file = open(filename, mode='wb')
    file.write(mail)
    file.close()

なお、「LF」と「CRLF」が混在していた場合は、このやり方だと「CRCRLF」となる。
そのため、一旦はCRLFをLFに変換した後で、もう一度LFをCRLFに変換するなどの工夫をしておく方が良いのかもしれない。

「スーパー定時」という名前の付箋紙

先日参加した「Tech-on Meetup#3」で、楽天の及部さんの登壇で「やっていることに名前をつける」のは大事という話をきいた。その後、ふと思い出したことがあったので記録しておこうと思う。

スクラムを使ってアジャイルな開発をしていた時、私たちのチームでは壁を使って物理カンバン(壁に模造紙を貼り、その上に付箋紙を貼ったタスクボード)を使って、各メンバのタスクを見える化していた。そして、作業開始時の朝会と定時直前の夕会で、やること/やったこと、困ったこと等を共有していた。

そんな中で、直接のタスクとは関係ない、付箋紙が数枚存在していた。それが、タイトルにもある「スーパー定時」という名の付箋紙である。これらの付箋紙は複数枚が用意されていた。

これは何なのか。

 

続きを読む

Everyone Outputerはどのようにして具現化していくのか?

今回の内容は「応援」になります。タイトルは釣りです。

2018/11/19に「Everyone Outputer」というイベントに参加しました。今回が第一回目とのこと。

everyone-outputer.connpass.com

ところで、この「Everyone Outputer」という名称、どこかでみた記憶がありませんか?

・・・と白々しく書きましたが、知っている方には今更ですね。技術書典5で物理本が完売した書籍のうちの一つ「セイチョウ・ジャーニー」の第3章、「マヨイ・ジャーニー」に出てくる架空の勉強会イベントですね。

それがなぜ、現実世界に現れたのでしょうか?

 

※ちなみに、セイチョウ・ジャーニーは、これっすね。

booth.pm

 

続きを読む

Python3でmbox形式のファイルからメッセージを取り出す

備忘メモ。

Python3で「mbox」形式のファイルから1つずつメール(=メッセージ)を取り出すのに利用した方法。

ライブラリ「mailbox」を利用する。
https://docs.python.jp/3/library/mailbox.html

import mailbox

def read_contents(file):
    mbox = mailbox.mbox(file)
    keys = mbox.keys()
    return [(k, mbox.get_bytes(k)) for k in keys]

mbox形式のファイルパスを引数fileで指定し、mbox形式で開く。
keys()でキーを全て取得。
その後、キーを指定してmboxからメッセージをバイナリ形式で取り出している。
これで「メッセージを一意に表すキー」と「対応するメッセージのバイナリデータ」の組み合わせの配列が戻り値となる。
なお、キーは0から始まる連番である。つまり、1通目はキーが0、2通目はキーが1となる。
そのため「N通目以降から取り出したい」という場合なら、「if k >= N -1」をfor文に付与してやる。

    return [(k, mbox.get_bytes(k)) for k in keys if k >= N -1]

メールヘッダの先頭にある"From "の扱い

「mbox.get_bytes(k)」で取得した場合、メッセージの区切りである「メールヘッダの先頭にある"From "(From+半角スペース)」の行が削除されている。
「メールヘッダの先頭にある"From "」の行も欲しかったのでソースコードを確認してみると、クラス「_mboxMMDF」の場合は「def get_bytes(self, key, from_=False):」で定義されていた。なお、「_mboxMMDF」は「mailbox.mbox()」の「__init__」で設定されている。

https://github.com/python/cpython/blob/3.6/Lib/mailbox.py
https://github.com/python/cpython/blob/3.6/Lib/mailbox.py#L789
https://github.com/python/cpython/blob/3.6/Lib/mailbox.py#L835


これにならい、「mbox.get_bytes(k)」を「mbox.get_bytes(k, True)」にして実施してみたところ、「メールヘッダの先頭にある"From "」の行も取得することができた。

import mailbox

def read_contents(file):
    mbox = mailbox.mbox(file)
    keys = mbox.keys()
    return [(k, mbox.get_bytes(k, True)) for k in keys]

余談:
「mbox 固有の動作をするメッセージ」は以下に書かれてもいる。
https://docs.python.jp/3/library/mailbox.html#mailbox.mboxMessage