みずりゅの自由帳

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

プログラミング

Gleam v0.24の「In-project Elixir support」機能が気になる

備忘メモ: Rust+Elixirな関数型言語「Gleam」のv.0.24が、2022.10.25(現地時間)でリリースされました。 gleam.run 今回のリリースで、「In-project Elixir support」機能が追加されたので、備忘として残しておく。 この機能は簡単にいうと、Gleamプロジェ…

だからメール送信する機能には関わりたくないのよね、というお気持ち

備忘。 戒めの意味を含めて記録しておく。 でも、半分は愚痴。 文中には一部フェイク入れています。 概要 お仕事で、ある操作を行った利用者に対してメールを送信する機能の新規追加/改修を行った。 その際に、いくつかの点でハマり、結果として想定よりも…

Rustで文字列中のダブルクォーテーションと中括弧のエスケープ処理

備忘メモ。 忘れてまたググりそうなので。Rustで、文字列*1中にダブルクォーテーション(")と中括弧*2({と})を含めたい場合、エスケープ処理が必要になる。結論だけ先に書いとく。 ダブルクォーテーションの場合、エスケープ文字(\)を使って「\"」のよ…

RubyのSafe Navigation Operator(&.)を知る

備忘。 今まで知らなかったので、記憶に留めたいので記録しておく。 hoge&.empty? のように、「&.」をつけたRubyの記法を、最近知りました。 「Safe Navigation Operator」(別名:「ぼっち演算子」)と言って、オブジェクト(この場合「hoge」)がnilでも、…

ISO 5258、ヒトの性別表記に関する国際規格

備忘。 とある書籍の正誤表*1を読んでて、「へー」となった箇所があったので、記憶に残して起きたくて記載。ヒトの性別表記に関する規格として、国際規格ISO 5258というのがあるらしい。 これによると、性別の識別子には「GENDER」ではなく「SEX」(または、…

「コラッツの予想」をElixirで書いて無限ループさせてしまった

備忘。 初歩的なミスをしたので、戒めのために記録。 Twitter上でコラッツの予想(正しくは『コラッツの問題』?)に関する話を見かけて、「この問題の式を各種言語で書いてみるか。とりあえず、最初はElixirから書いてみよう」と思ったのがきっかけ。 それ…

Go言語でのInteger Overflow対策にはstrconv.ParseIntを利用する

前回書いた、「「Gophers Office Hours #13 〜セキュリティ回〜」で話されていたInteger Overflowの話。」の続き。発表者の@rung氏からInteger Overflowの根本対策の話を聞いたので、実際にコードにして確認してみた。

「Gophers Office Hours #13 〜セキュリティ回〜」で話されていたInteger Overflowの話。

2020年10月19日、オンラインイベント「Gophers Office Hours #13 〜セキュリティ回〜」に参加しました。 イベントの詳細はこちら。mercari.connpass.comこのイベントでは、Go言語のセキュアコーディングの話をされていたのですが、その中で話されていた「Int…

tokyo.ex #13に参加して、Elixir本体をコンパイルしてきた

2019/09/29に、「tokyo.ex #13 elixir本体ソースコードもくもくリード会」に参加してきました。 今回は、fukuoka.ex さんとのオンライン接続によるコラボ開催(笑)です。beam-lang.connpass.comfukuokaex.connpass.comそのイベントで、独自のコードを含めて…

ssh接続したUbuntu 19.04 でasdfコマンドが呼べなかった

Ubuntu 19.04 にインストールしたasdfコマンドをssh接続で利用しようとした際に遭遇。 概要: asdfコマンドが利用できるUbuntu 19.04に対して別端末からsshでログイン。 その際に、asdfコマンドへのパスが通っていなかった。 同様の設定をしていた「CentOS 7…

ホストマシンの違いでコンテナ内でmix local.hexが実行できなかった話

よくある「Proxy環境下」でハマった話。ElixirのPhoenix Frameworkの開発環境を作ろうと思い、Dockerfileを用意。 だが、同じDockerfileを使ってイメージ/コンテナを作成したにも関わらず、ホストマシンのOSの違いで「mix local.hex」コマンドが実行できる…

Dockerを使ってPhoenixを試す

ElixirベースのフレームワークであるPhoenix Frameworkをちょっと試してみたい人向け。 Elixirインストール済みのDockerを利用して、Phoenixを構築/起動するまでの手順。ひとまずは、コンテナは都度消す設定(--rmオプションの付与)にしています。手順は以…

Moment.jsのaddメソッドの実行では元の値も変わる

Moment.jsを利用して、現在日時を基準にして連続した日時データを取得しようとした際に確認した事象です。 const m = moment() for (let i = 0; i < 30; i++) { let cur_date1 = m.add(i ,"minutes").format('YYYY-MM-DD HH:mm') //以下略 } 上のコードの期…

go-wkhtmltopdfでHTMLをPDF出力

自分が担当している運用作業の中で、数十個のグラフが表示されるHTMLをPDFに変換して、そのPDFをエビデンスとして保管する作業があります。これまではHTMLをブラウザに表示した後に印刷ボタンを押し、出力先をPDFにするという手順で実施していました。最初は…

Go勉強会 Webアプリケーション編 (gRPC)に参加してきた。

2019/02/19(火)に「Go勉強会 Webアプリケーション編 」に参加してきました。今回の題材は「gRPC」です。gRPCは、公式ページのQuick Startをいくつかの言語で実施して、Basics(英文)のページを読んで一旦止まっていたので、ある意味では復習になりました。…

gRPCのクライアントを動かそうとしてno_proxyに惑わされる。

前回に続き、gRPCとProxy配下の環境ネタ。ちなみに、前回ハマってた内容はこちら。 mzryuka.hatenablog.jp前提として、Proxy配下の環境。 localhost内でGo言語以外の言語で動かしたgRPCのクライアントが、gRPCのサーバ側にアクセスできなかった。 ホストOS上…

PHP環境をDockerで作ろうとしてpeclで「No releases available for package "pecl.php.net/grpc"」エラーになったのはProxyが原因だった

タイトルで結論が出ているんですけどね。 Dockerファイル内で実施していたapt-getが問題なく動いていたので、peclの通信がProxyにブロックされているとはすぐに思いつけませんでした。

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

備忘メモ。mbox形式のファイルからメッセージを取り出して保存する際に利用した方法。 諸般の事情で、改行コードをLFからCRLFにする必要があった。本来ならテキストベースで一行ずつ読み込んで保存する際に改行コードを付ければ良いが、メールデータだとメー…

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

備忘メモ。Python3で「mbox」形式のファイルから1つずつメール(=メッセージ)を取り出すのに利用した方法。ライブラリ「mailbox」を利用する。 https://docs.python.jp/3/library/mailbox.html import mailbox def read_contents(file): mbox = mailbox.mb…

Python3でforループ式をワンライナーで記述する

備忘メモ。Python3でforループを書く際、処理が1-2行なら1行(ワンライナー)で記述できる。例えば、「配列の値」と「その値を2倍した値」を出力したい場合。 keys = [1,2,3,4,5,6,7,8] for k in keys: print(k, k*2) これは、次のように書ける。 keys = […

GolangのParseとParseInLocationで「0001-01-01 00:00:00 +0000 UTC」にならない日時対応

※Goのバージョンは1.9.1で確認しています。Go言語で特定の文字列から時刻(Time型)を生成する際には、パッケージ「time」の「Parse」や「ParseInLocation」を利用します。 違いは、ParseがUTC固定で、ParseInLocationがLocation(「”Asia/Tokyo”」等)を指…

GolangのListenAndServerで「missing port in address」が出た時に対応したこと

Go言語で「http.ListenAndServe」を使った際に、エラーメッセージ「missing port in address」が出た時の対処メモ。もっとも、オチは「渡す引数の設定値を間違えていた」というポカミスで、恥ずかしい限りなのですが。