エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

Ruby

aws-sdkで取得できるタグを扱いやすくするための覚書

動機 AWS のリソースの多くは key-value の組みをタグとして設定できるようになっているのですが。 例えば EC2 インスタンスを取得する aws-sdk のメソッド Aws::EC2::Client#describe_instances のレスポンスは次のようになっています。 resp.reservations[…

CSVファイルをフィルタリングする

「元のCSVファイルから特定の条件の行だけを抜き出した新しいCSVファイルを作成する」という仕事中の話題から。 Ruby Rubyでしたら、不都合がない限り標準添付のcsvライブラリを利用すると思います。 docs.ruby-lang.org onliner 「ファイルから読み込んで、…

Alpine.js が 3.x になり、いっそう利用しやすくなった

記事にするのが遅くなりましたが、6 月に Alpine.js が 3.0 にメジャーバージョンアップしました(ちなみに 2021-08-29 現在の最新は 3.2.4)。 alpinejs.dev 色々と改善されていますが、個人的に一番大きな利点はロジックをグローバルスコープに公開しなく…

Discord Webhook で Ruby からファイルを POST する

昨年の 10 月に Discord Webhook で Elixir からファイルを POST する方法を記事に書きましたが、その Ruby 版です。 テキストをPOSTする テキストのみの場合、net/http の Net::HTTP.post_form メソッドを使うことで簡単に POST できます。 パラメータとし…

Action Cable でサーバと通信し、Alpine.js で表示を更新する

Alpine.js です。 軽量で、宣言的で、リアクティブなふるまいを記述できるということで注目されている、ようです。 github.com 既存のフレームワークの Vue.js や React と比べてシンプルで軽量というところが注目点のようなのですが、わたしとしては HTML …

Ruby の Enumerable モジュールの使い方の覚書

Enumerable モジュールを使って Fibonacci number を実装する例です。 module Enumerable Fibonacci number - Wikipedia # fibonacci.rb class Fibonacci include Enumerable def each if block_given? n1, n2 = 1, 1 loop do yield n1 n1, n2 = n2, n1 + n2…

外部で生成したデータをActive Storageでattachしたいとき

つまりこうゆうことです。 探した範囲でははっきりとした情報が見つからなかったので、めも。 このようなモデルがあるばあい、 class Article < ApplicationRecord has_one_attached :image end たとえばこのようにすることで storage にデータを格納できま…

ActionCable のクライアントも Ruby で書きたい(前篇)〜Opal覚え書き

Action Cable を使いたいときがあります。 Ruby on Rails の app を書いているのですから、サーバもクライアントも Ruby で書くのが自然です。 というわけで。Opal を導入してみました。 Rails app を用意する rails new コマンドで適当な Rails app を作成…

Apex + AWS Lambda + Ruby 覚書

Ruby で書いた AWS Lambda の関数を Apex を使ってデプロイできたので、その時の覚書です。 誤りや認識間違いが混ざっているかもしれません。ご指摘いただけたら幸いです。 Apex – Serverless Infrastructure 仕事ではずっと Serverless + nodejs を使ってい…

Markdown から EPUB を作る

Markdown から EPUB を生成する方法の備忘録です。 Markdown から EPUB に変換するなら、md2review + Re:VIEW という強力な組み合わせがあります。 Re:VIEW - Digital Publishing System for Books and eBooks takahashim/md2review: a converter from Markd…

Amazon CloudWatch Logs からログを取得する gem を書いた

AWS に CloudWatch Logs というサービスがあります。 Amazon CloudWatch Logs とは? - Amazon CloudWatch ログ コンソールが用意されていますが、正直使いやすくありません。 awslogs という、CloudWatch Logs からログを取得するコマンドラインツールがあり…

塗らずに蹂躙する〜どう書くE10の問題から

今月の初めの土曜日、秋葉原/神田開催どう書くの第10回が開催されました。 オフラインリアルタイムどう書くE10 - 横浜へなちょこプログラミング勉強会 | Doorkeeper 問題とみなさんの回答へのリンクはこちらから。 mtsmfm blog - オフラインリアルタイムどう…

Fiddle を掻き鳴らしてみる

library fiddle (Ruby 2.3.0) *.dllや*.soなど、ダイナミックリンクライブラリを扱うためのライブラリです。 Ruby は痒い所に手が届く便利な言語だと知ってはいましたが、こんなに便利になっているとは思いませんでした。と、いうわけで。 Fibonacci Number …

Retriable gem の使い方のめも

GitHub - kamui/retriable: Retriable is an simple DSL to retry failed code blocks with randomized exponential backoff. インストール $ gem install retriable 実装例 require 'retriable' class SampleError < RuntimeError end puts <<~EOS | except…

抵抗器のカラーコードは虹の色

会社で「抵抗器のカラーコードは虹の順番だよ」という話をしたら。 「いや、そもそも虹の色の順番覚えてないから」と返されてしまいました。 そんなわけなので、Ruby の gem にしてみました。 gem は書き慣れていないので、雑です。 GitHub - mattsan/color_…

Ruby/RSVG と Cairo を使って SVG から PDF を生成しためも

前回 は C++ で書いたのですが、調べたら Ruby でも同じように書くことができることがわかりました。今回は libRSVG を Ruby から利用する Ruby/RSVG (rsvg2 gem) を利用。 ruby-gnome2/rsvg2 at master · ruby-gnome2/ruby-gnome2 · GitHub require 'rsvg2'…

Ruby で Haml を HTML にコンパイルする

使うべきは Haml::Engine#to_haml でした。 $ pry [1] pry(main)> require 'haml' => true [2] pry(main)> Haml::Engine.new('.hoge HOGE').to_html => "<div class='hoge'>HOGE</div>\n"

SVG から PDF

PDF を生成する prawn と、Prawn で SVG を解釈する prawn-svg を使って、haml で書いた SVG を PDF にした時のメモ。prawn-svg の利用例として書かれているコード を haml で書き直したものです。 require 'prawn-svg' require 'haml' Prawn::Document.gene…

かっこで括られたトークンを取り出す

これ とか これ の入力になっている (A)(BC)(DEF)のような文字列から括弧の中にある文字列を取り出したい、というのが動機。 まわせ! Bouwkamp!! 横へな2016.2.6 問題 ESM オフラインリアルタイムどう書く 拡大版 · GitHub Ruby def tokenize(s, left, right…

diff を清書する、加えて gem にする

気がつけば。diff を実装してから7年も経っていました。 diffをつくる(3) -後編 - エンジニアのソフトウェア的愛情 案の定、考え方がかなり頭から抜けて行ってしまっているのですが、当時 diff について詳しい記事を書かれていた方がいらっしゃって、加えて…

Config

GitHub - railsconfig/config: Easiest way to add multi-environment yaml settings to Rails, Sinatra, Pandrino and other Ruby projects. Gemfile gem 'config' install $ be rails g config:install create config/initializers/config.rb create confi…

SettingsLogic

GitHub - binarylogic/settingslogic: A simple and straightforward settings solution that uses an ERB enabled YAML file and a singleton design pattern. Gemfile に追加する。 gem 'settingslogic' config/initializers/settings.rb ファイルを追加す…

特定のモジュールをインクルードしているクラスを抽出する

探せばもっとよい方法があるかもしれない。 module Hoge def hoge puts "I'm #{self.class}. I'm including Hoge." end end class Foo include Hoge end class Bar include Hoge end class Baz < Bar end ObjectSpace.each_object(Class).select {|klass| kl…

read CSV file

備忘録。 # CP932 から UTF-8 に変換し、先頭行をヘッダとして読み込む CSV.foreach(csv_file_path, encoding: 'CP932:UTF-8', headers: true) do |row| p row # 行を Hash で欲しい場合 # p row.to_hash end

配列の回転

時計回りに90度 行を反転して転置(あるいは、転置して列を反転) 時計回りに180度 行を反転して列を反転(あるいは、列を反転して行を反転) 時計回りに270度 転置して行を反転(あるいは、列を反転して転置) [1] pry(main)> a = [[1, 2, 3], [4, 5, 6], […

逆波蘭記法計算機

備忘録。 Haskell operate :: [Integer] -> String -> [Integer] operate (r:l:st) "+" = (l + r):st operate (r:l:st) "-" = (l - r):st operate (r:l:st) "*" = (l * r):st operate (r:l:st) "/" = (l `div` r):st operate stack t = (read t::Integer):st…

海老で PDF を釣る

単票を作るために、Ruby で PDF を生成するライブラリ Prawn を試してみました。 Prawn: Fast, Nimble PDF Generation For Ruby Prawn by example (PDF) repository (GitHub) 以下、Prawn を使って PDF ができるまでの様子です。 Prawn を導入する RubyGem …

修練がてら DFA をいろんな言語で書いてみた

アンダースタンディング コンピュテーションを読んでいます。アンダースタンディング コンピュテーション ―単純な機械から不可能なプログラムまで作者: Tom Stuart,笹田耕一,笹井崇司出版社/メーカー: オライリージャパン発売日: 2014/09/18メディア: 大型本…

型システム入門

型システム入門 −プログラミング言語と型の理論−作者: Benjamin C. Pierce,住井英二郎,遠藤侑介,酒井政裕,今井敬吾,黒木裕介,今井宜洋,才川隆文,今井健男出版社/メーカー: オーム社発売日: 2013/03/26メディア: 単行本(ソフトカバー) クリック: 68回この商…

いかにして表計算の列名をつくるか・補遺・その補遺

おさらい。 いかにして表計算の列名をつくるか - エンジニアのソフトウェア的愛情 いかにして表計算の列名をつくるか・補遺 - エンジニアのソフトウェア的愛情 最終形態 先日、Haskellで無限長配列を生成する例を挙げました。再掲。 import Data.List(group)…