奥山にもみぢ踏み分け鳴く鹿の声聞く時ぞ秋は悲しき
Advent Calendar 2022 54日目1の記事です。
I'm looking forward to 12/25,2022
私のAdvent Calendar 2022 一覧。
元記事は、my friendの@QUANONさんの記事です。
いいネタありがとうございます!💜
もちろん、私はElixirでやってみます。
$\huge{Elixir}$
やりたいこと
画像ファイルが JPEG 2000 形式かどうかを判別したい。本来は JPEG 2000 形式の画像ファイルは拡張子が .jp2 である。しかし、拡張子が .jpg だったり MIME タイプが image/jpeg だったりしても、実際は JPEG 2000 形式である場合がある。そこで、バイナリデータを確認して判断する。
方法
マジックナンバー (フォーマット識別子) で判断する。RFC 3745 - MIME Type Registrations for JPEG 2000 (ISO/IEC 15444) には
Magic number(s): 12 byte string: X'0000 000C 6A50 2020 0D0A 870A' (for all JPEG-2000 family files)
と記載されているので、それに則る。
Elixir
Elixirですと、バイナリのパターンマッチもお手の物です。
お茶の子さいさいです。
画像はこちらのサイトから得られます。
match?(
<<0x00, 0x00, 0x00, 0x0C, 0x6A, 0x50, 0x20, 0x20, 0x0D, 0x0A, 0x87, 0x0A, _rest::binary>>,
File.read!("relax.jpeg"))
結果は、false
です。
match?(
<<0x00, 0x00, 0x00, 0x0C, 0x6A, 0x50, 0x20, 0x20, 0x0D, 0x0A, 0x87, 0x0A, _rest::binary>>,
File.read!("relax.jp2"))
結果は、true
です。
公式ドキュメントはこの辺です。
画像のダウンロードもElixirで楽しんじゃうよ!
@mnishiguchi さんのコメントをここにも書きました。
全部、Elixirで楽しみましょう!!!
Mix.install([:req])
relax_jpg_url = "https://www.fnordware.com/j2k/relax.jpg"
relax_jp2_url = "https://www.fnordware.com/j2k/relax.jp2"
%{status: 200, body: relax_jpg} = Req.get!(relax_jpg_url)
%{status: 200, body: relax_jp2} = Req.get!(relax_jp2_url)
match?(<<0x00, 0x00, 0x00, 0x0C, 0x6A, 0x50, 0x20, 0x20, 0x0D, 0x0A, 0x87, 0x0A, _rest::binary>>, relax_jpg)
match?(<<0x00, 0x00, 0x00, 0x0C, 0x6A, 0x50, 0x20, 0x20, 0x0D, 0x0A, 0x87, 0x0A, _rest::binary>>, relax_jp2)
Thanks a lotです!
バージョン情報
$ elixir -v
Erlang/OTP 24 [erts-12.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [jit]
Elixir 1.13.1 (compiled with Erlang/OTP 24)
付録
以下、付録です。
Elixirの誕生日は、2012年5月24日です。
そのため、今年の2022年5月24日は10周年を迎えます。
iex> Date.diff(~D[2022-05-24], ~D[2022-02-23])
90
そうそう!
2月24日発売予定のWEB+DB PRESS Vol.127で、ElixirとPhoenixの特集がでますよ〜
Elixir、Phoenixをはじめられたばかりの方も、腕におぼえがある方も、どんなものなのかなあと様子見をきめこんでいる方も、
つまりは
$\huge{全人類のみなみなさま!!!}$
お手にとって、お楽しみください!!!
We, @tamanugi @torifukukaiou @the_haigo @mokichi_s12m including me, wrote featured articles for WEB+DB PRESS Vol.127 about Elixir and Phoenix! It's being published on 24, Feb.https://t.co/UPNiVU1zG9
— 栗林健太郎 (@kentaro) February 4, 2022
fukuoka.ex特別編:WEB+DB PRESS vol127 Phoenix特集こたつで座談会
出版記念イベントが開催されます。
ぜひご参加ください。
2022/03/08(火) 19:30 〜 21:00
この本を多くの方に知っていただき、出版という ”おめでたい” イベントを、執筆陣全員と皆さまで、ぜひ同じこたつに入ってのんびり座談会するかのように楽しんでいただきたいと思います。
Elixir
最後の最後に、Elixirについて紹介します。
- |>でスイスイ、プログラミングしていくことができる素敵なプログラミング言語です
- さっそくプログラムの例を示します
-
Qiita APIを使わせていただいて、
Elixir
タグがついた最新の記事を20件取得しています - ここでは雰囲気をつかんでいただければ大丈夫です
Mix.install [{:req, "~> 0.2.1"}]
"https://qiita.com/api/v2/items?query=tag:Elixir"
|> URI.encode()
|> Req.get!(finch_options: [pool_timeout: 50000, receive_timeout: 50000])
|> Map.get(:body)
|> Enum.map(& Map.take(&1, ["title", "url"]))
Webアプリケーションを楽しむなら
IoTを楽しむなら
AIを楽しむなら
もっとElixirのことを知りたい方へオススメの書籍
- プログラミングElixir(第2版) -- オーム社
- Elixir実践ガイド -- インプレス
- アルケミスト − 夢を旅した少年 -- KADOKAWA
コミュニティ
-
elixir.jp Slack workspaceに参加してみてください
- マヂ、やさしい人ばっかりのコミュニティ
- あなたの困ったをきっと解決してくれるでしょう
- NervesJP Slack workspaceでは、NervesやIoTが好きな愉快なfolksたちがあなたの訪れを歓迎します
- たくさんのコミュニティがあります
(EDI/fukuoka.ex/kokura.ex & LiveView JP の @piacerex さん作 )
Elixirコミュニティに初めて接する方は下記がオススメです
Elixirコミュニティ の歩き方 -国内オンライン編-
https://speakerdeck.com/elijo/elixirkomiyunitei-falsebu-kifang-guo-nei-onrainbian
(piyopiyo.ex & エリジョ の nakoさん(@kn339264) 作、素敵な資料)
Elixirのイベント情報
@koga1020 さんが作成されたイベントカレンダーがあります。
https://elixir-jp-calendar.fly.dev/
気になるイベントにはぜひ参加してみましょう!!!
上記サイトの解説記事はこちらです。
I organize autoracex.
And I take part in NervesJP, fukuoka.ex, EDI, tokyo.ex, Pelemay.
I hope someday you'll join us.
We Are The Alchemists, my friends!