Elixir 문자로 재생
8442 단어 Elixir
분위기에서 엔지니어하고 있습니다.
트리입니다만 어제 열을 내고 최고의 이브를 보내고, 한층 더 크리스마스인 것조차 잊고 있었으므로, 지금 산타씨도 깜짝 놀랄 정도로 대황해서 되는 것입니다.
그렇다고 해서 몇번 달여 모르겠지만, Elixir의 이상한(?) 문자 세계에서 놀아요.
그녀 (망상)에서 L ○ NE 왔다.
77 101 114 114 121 67 104 114 105 115 116 109 97 115
Elixir은 시점에서 감명 좋은 사람은 즉시 무엇이 쓰여 있는지 알 수 있군요.
이런 L○NE를 보내주는 바이너리인 그녀가 있으면 기쁘네요.
확실하지 않은 경우 Elixir를 인스코하고 Repl을 시작하고 귀여운 그녀를 위해 무엇이 쓰여 있는지 읽어보십시오.
$ iex
Erlang/OTP 22 [erts-10.6.1] [source] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1] [hipe] [dtrace]
Interactive Elixir (1.9.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> <<77, 101, 114, 114, 121, 67, 104, 114, 105, 115, 116, 109, 97, 115>>
"MerryChristmas"
멋진 메시지!
<<>> 바이너리 세계로 쉽게 다이빙
대부분의 프로그래밍 언어인 File을 읽거나 하는 사람을 살펴보겠습니다.
File.read("hoge.wav")
# {:ok,
# <<82, 73, 70, 70, 252, 94, 66, 2, 87, 65, 86, 69, 102, 109, 116, 32, 16, 0, 0,
# 0, 1, 0, 2, 0, 68, 172, 0, 0, 16, 177, 2, 0, 4, 0, 16, 0, 100, 97, 116, 97,
# 236, 93, 66, 2, 0, 0, 0, 0, ...>>}
여기에서 Wave 파일을 모처럼 읽었으므로 깜박이 헤더를 들여다 보겠습니다. Wave 파일의 구조에 대해서는 별도로 참조하십시오.
defmodule Wave do
def parse(file) do
File.read(file)
|> header()
end
def header({:error, _}), do: {:error, "読み込み失敗"}
def header({:ok, body}) do
<<riff :: binary-size(4), size :: unsigned-size(32), wave_header :: binary-size(4), fmt_chunk :: binary-size(4), rest :: binary>> = body
IO.inspect riff
IO.inspect size
IO.inspect wave_header
IO.inspect fmt_chunk
IO.inspect rest
end
end
적절한 Wave 파일을 읽어보십시오.
$ iex -S mix
iex(1)> Wave.parse("hoge.wav")
"RIFF"
4234035714
"WAVE"
"fmt "
<<16, 0, 0, 0, 1, 0, 2, 0, 68, 172, 0, 0, 16, 177, 2, 0, 4, 0, 16, 0, 100, 97,
116, 97, 236, 93, 66, 2, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 2, 0, 254, 255,
253, 255, 3, 0, 4, 0, 252, 255, ...>>
패턴 매치 최고.
문자도 이진
뭐야.
"a" <> "b" # "ab"
"a" <> <<0>> # <<97, 0>>
match? "a", <<97>> # true
결국 그 숫자는 뭔가 ASCII입니다.
아무튼 이 근처는 Elixir의 튜토리얼에서도 쓰고 있는 것이군요.
더 분해해 보자
조금 전의 그녀로부터의 메시지의 머리 글자 "M"로 조금 깊은 해자."M" <> <<0>>
가 <<77, 0>>
이므로 <<77>> == "M"
네요( ?M
만으로도 조사할 수 있습니다).77
는 2진수로 1001101
네요. 이것을 Elixir로 쓰면
<<0::1, 1::1, 0::1, 0::1, 1::1, 1::1, 0::1, 1::1>>
라는 것은
$ iex -S mix
iex(1)> <<0::1, 1::1, 0::1, 0::1, 1::1, 1::1, 0::1, 1::1>>
"M"
iex(2)> match? "M", <<0::1, 1::1, 0::1, 0::1, 1::1, 1::1, 0::1, 1::1>>
true
이것만 보면 알 수가 없네요.
요약
평소에는 그다지 접하지 않는 0/1의 세계에, 의외로 간편하게 들어갈 수 있는 재미가 Elixir에는 있다고 생각합니다.
후왓과 이해하고 있던 bit라든지의 단위에 대해서가 클리어가 되지구나.
그리고 Elixir의 패턴 매치 덕분에 이 손의 코드는 짧게 쓸 수 있다고 생각합니다.
전 전 전직에서는 Elixir를 사용해 상당히 바이너리 놀고 즐겼습니다. 그때 만든 라이브러리가 몇 개 공개했을 터…
의외로 이야기가 퍼지지 않아 곤란했습니다만, 우선 메리 크리스마스.
여러분 어드벤트 캘린더 수고하셨습니다.
Reference
이 문제에 관하여(Elixir 문자로 재생), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/h_tera/items/a383a88720eaab7beb85
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
77 101 114 114 121 67 104 114 105 115 116 109 97 115
$ iex
Erlang/OTP 22 [erts-10.6.1] [source] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1] [hipe] [dtrace]
Interactive Elixir (1.9.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> <<77, 101, 114, 114, 121, 67, 104, 114, 105, 115, 116, 109, 97, 115>>
"MerryChristmas"
대부분의 프로그래밍 언어인 File을 읽거나 하는 사람을 살펴보겠습니다.
File.read("hoge.wav")
# {:ok,
# <<82, 73, 70, 70, 252, 94, 66, 2, 87, 65, 86, 69, 102, 109, 116, 32, 16, 0, 0,
# 0, 1, 0, 2, 0, 68, 172, 0, 0, 16, 177, 2, 0, 4, 0, 16, 0, 100, 97, 116, 97,
# 236, 93, 66, 2, 0, 0, 0, 0, ...>>}
여기에서 Wave 파일을 모처럼 읽었으므로 깜박이 헤더를 들여다 보겠습니다. Wave 파일의 구조에 대해서는 별도로 참조하십시오.
defmodule Wave do
def parse(file) do
File.read(file)
|> header()
end
def header({:error, _}), do: {:error, "読み込み失敗"}
def header({:ok, body}) do
<<riff :: binary-size(4), size :: unsigned-size(32), wave_header :: binary-size(4), fmt_chunk :: binary-size(4), rest :: binary>> = body
IO.inspect riff
IO.inspect size
IO.inspect wave_header
IO.inspect fmt_chunk
IO.inspect rest
end
end
적절한 Wave 파일을 읽어보십시오.
$ iex -S mix
iex(1)> Wave.parse("hoge.wav")
"RIFF"
4234035714
"WAVE"
"fmt "
<<16, 0, 0, 0, 1, 0, 2, 0, 68, 172, 0, 0, 16, 177, 2, 0, 4, 0, 16, 0, 100, 97,
116, 97, 236, 93, 66, 2, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 2, 0, 254, 255,
253, 255, 3, 0, 4, 0, 252, 255, ...>>
패턴 매치 최고.
문자도 이진
뭐야.
"a" <> "b" # "ab"
"a" <> <<0>> # <<97, 0>>
match? "a", <<97>> # true
결국 그 숫자는 뭔가 ASCII입니다.
아무튼 이 근처는 Elixir의 튜토리얼에서도 쓰고 있는 것이군요.
더 분해해 보자
조금 전의 그녀로부터의 메시지의 머리 글자 "M"로 조금 깊은 해자."M" <> <<0>>
가 <<77, 0>>
이므로 <<77>> == "M"
네요( ?M
만으로도 조사할 수 있습니다).77
는 2진수로 1001101
네요. 이것을 Elixir로 쓰면
<<0::1, 1::1, 0::1, 0::1, 1::1, 1::1, 0::1, 1::1>>
라는 것은
$ iex -S mix
iex(1)> <<0::1, 1::1, 0::1, 0::1, 1::1, 1::1, 0::1, 1::1>>
"M"
iex(2)> match? "M", <<0::1, 1::1, 0::1, 0::1, 1::1, 1::1, 0::1, 1::1>>
true
이것만 보면 알 수가 없네요.
요약
평소에는 그다지 접하지 않는 0/1의 세계에, 의외로 간편하게 들어갈 수 있는 재미가 Elixir에는 있다고 생각합니다.
후왓과 이해하고 있던 bit라든지의 단위에 대해서가 클리어가 되지구나.
그리고 Elixir의 패턴 매치 덕분에 이 손의 코드는 짧게 쓸 수 있다고 생각합니다.
전 전 전직에서는 Elixir를 사용해 상당히 바이너리 놀고 즐겼습니다. 그때 만든 라이브러리가 몇 개 공개했을 터…
의외로 이야기가 퍼지지 않아 곤란했습니다만, 우선 메리 크리스마스.
여러분 어드벤트 캘린더 수고하셨습니다.
Reference
이 문제에 관하여(Elixir 문자로 재생), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/h_tera/items/a383a88720eaab7beb85
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
"a" <> "b" # "ab"
"a" <> <<0>> # <<97, 0>>
match? "a", <<97>> # true
조금 전의 그녀로부터의 메시지의 머리 글자 "M"로 조금 깊은 해자.
"M" <> <<0>>
가 <<77, 0>>
이므로 <<77>> == "M"
네요( ?M
만으로도 조사할 수 있습니다).77
는 2진수로 1001101
네요. 이것을 Elixir로 쓰면<<0::1, 1::1, 0::1, 0::1, 1::1, 1::1, 0::1, 1::1>>
라는 것은
$ iex -S mix
iex(1)> <<0::1, 1::1, 0::1, 0::1, 1::1, 1::1, 0::1, 1::1>>
"M"
iex(2)> match? "M", <<0::1, 1::1, 0::1, 0::1, 1::1, 1::1, 0::1, 1::1>>
true
이것만 보면 알 수가 없네요.
요약
평소에는 그다지 접하지 않는 0/1의 세계에, 의외로 간편하게 들어갈 수 있는 재미가 Elixir에는 있다고 생각합니다.
후왓과 이해하고 있던 bit라든지의 단위에 대해서가 클리어가 되지구나.
그리고 Elixir의 패턴 매치 덕분에 이 손의 코드는 짧게 쓸 수 있다고 생각합니다.
전 전 전직에서는 Elixir를 사용해 상당히 바이너리 놀고 즐겼습니다. 그때 만든 라이브러리가 몇 개 공개했을 터…
의외로 이야기가 퍼지지 않아 곤란했습니다만, 우선 메리 크리스마스.
여러분 어드벤트 캘린더 수고하셨습니다.
Reference
이 문제에 관하여(Elixir 문자로 재생), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/h_tera/items/a383a88720eaab7beb85
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Elixir 문자로 재생), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/h_tera/items/a383a88720eaab7beb85텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)