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

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

備忘録:aws-sdk gem を使って AWS S3 にファイルをアップロードする

require 'aws-sdk' client = Aws::S3::Client.new( access_key_id: 'your-aws-access-key-id', secret_access_key: 'your-aws-secret-access-key', region: 'your-region') client.put_object( bucket: 'target-backet-name', key: 'sample.txt', body: File…

Elixir の OptionParser.parse はハイフンをアンダスコアに置き換える

OptionParser.parse(["--show-all"], [switches: [show_all: :boolean]]) # => {[show_all: true], [], []} OptionParser.parse(["--show_all"], [switches: [show_all: :boolean]]) # => {[], [], [{"--show_all", nil}]} Elixir converts switches to unde…

備忘録:ファイルの存在確認

#!/bin/bash for f in $*; do if [ -f $f ]; then echo "file '$f' IS EXISTS" elif [ -d $f ]; then echo "'$f' IS DIRECTORY" else echo "'$f' IS NOT EXISTS" fi done

「どう書く」をElixirで書いたときのテストを簡単にする

Elixir でコールバックってどうやって実装しているのだろうと調べてみたら、マクロで実現されていました。なるほど。 その昔 C 言語でマクロを使ってコードを生成していたのを思い出した。 そんなわけで。マクロを使って「どう書く」のテストを実行するモジ…

移転しています

「はてなダイアリー」が役目を終えつつあるということで重い腰を上げて移転作業をしています。 わたしのブログは「ダイアリー」に書いているにもかかわらず、にポストする記事は月一回ペースの事実上「マンスリー」になっていて、看板に偽りあり状態だったの…

矩形の中の矩形

オフラインリアルタイムどう書くE14 の中で、@yancya さんが書かれたターゲットとなる矩形(配列の配列)を取り出すコードがスマートだったので、Prolog で書いてみました。 https://gist.github.com/yancya/cfdafda3a7c80866f25e17887e0c8ca1#file-main-rb-…

第3回ESMどう書くを開催しました

前回開催からおよそ1年半。第3回社内向けどう書くを開催しました。 プログラミングElixir 現在、社内で「プログラミングElixir」の読書会を開催しています。プログラミングElixir作者: Dave Thomas,笹田耕一,鳥井雪出版社/メーカー: オーム社発売日: 2016/08…

ビットをもっと自由自在に扱える言語

Elixir を学んでいます。 ビットをもっと自由自在に扱えるようにしてみた 7 年ほど前にビット操作を支援するコードを C++ で書いたことがあります。 ビットをもっと自由自在に扱えるようにしてみた。 - エンジニアのソフトウェア的愛情 ビットをもっと自由自…

Redis Pub/Sub in Elixir 覚書

Exredis を使っています。 GitHub - artemeff/exredis: Redis client for Elixir defmodule Subscribe do def sub(channel) do {:ok ,client_sub} = Exredis.Sub.start_link pid = Kernel.self Exredis.Sub.subscribe(client_sub, channel, fn msg -> send(p…

RPN in Elixir

# Rpn.eval "3 1 - 2.1 +" # => 4.1 defmodule Rpn do def eval(expression) do eval(tokenize(expression), []) end defp eval([], [result]), do: result defp eval(["+"|tokens], [rhs, lhs|stack]), do: eval(tokens, [lhs + rhs | stack]) defp eval(["…

span

練習。 % span.pro :- module(span, [span/2]). span(From, From, [From]) :- !. span(From, To, [From|Span]) :- From < To, From1 is From + 1, span(From1, To, Span), !. % span-test.pro :- include(span). main :- span(1, 10, S), format("~p~n", [S]…

Prolog で特殊文字をリテラルに書く

\x で始まり \ で終えます。末尾があることに注意。例:バックスペース(0x08)を出力しています。 $ gprolog | ?- format("~s\x08\~s~n", ["ABc", "CDE"]). ABCDE

オブラブカレンダーができました

やがて1月も終わろうという時期ですが。 2017 年版オブラブカレンダーができました。 去る 1 月 11 日 には事業部のご挨拶とともにできあがったカレンダーをお渡しする会を開きました。2017 アジャイル事業部 年始のご挨拶の会を開催しました - esm アジャイ…

Prolog だって Key-Value を扱いたい

不思議な記述を見つけました。 An object in JSON is presented as a bunch of keys and values within curly braces, in Prolog I have used a function and a KV list like so: obj([key1-value1, key2-value2, ...]). Present your terms like that and e…

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

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

FizzBuzzを宣言的に書く、宣言できない場合は宣言っぽく書く

プログラミング Elixir を読んでいます。プログラミングElixir作者: Dave Thomas,笹田耕一,鳥井雪出版社/メーカー: オーム社発売日: 2016/08/19メディア: 単行本(ソフトカバー)この商品を含むブログ (3件) を見る Elixir プログラミング Elixir の第5章で …

Prolog が解くに適した問題がある

Prolog でコードをたびたび書いてはいますが、実用的なプログラムを Prolog で書けたためしがないというのが正直なところです。使い所がつかめていないのがその原因。今もまだつかめているわけではないのですが、Prolog ならば自然に表現できて簡単に解ける…

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"

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

それぞれのサイト。 Projects/LibRsvg - GNOME Wiki! cairographics.org 今回参照したドキュメント。 Cairo: A Vector Graphics Library: cairo_t Cairo: A Vector Graphics Library: PDF Surfaces RsvgHandle: RSVG Libary Reference Manual Error Reportin…

SVG から PDF

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

QRコードを生成したときのめも

QRencode で QR コードを生成し、Magick++(ImageMagick の C++ API)で画像ファイルに保存してみた、ときのめも。 QRencode: Main Page Magick++, C++ API @ ImageMagick この二つのライブラリは、Mac の場合、 Homebrew でインストールできます。 ソースコ…

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

これ とか これ の入力になっている (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

もっと気軽に Prolog でフィボナッチ数列

先日、フィボナッチ数列を求める Prolog のコードを書いたわけですが。もっとすっきりと書けることに気がつきました。 add(X, Y, Z) :- Z is (X + Y). fib(N, Fib) :- length(Fib, N), append(Fib, [_], [1|Fib2]), append(Fib2, [_], [1|Fib3]), maplist(ad…

Fibonacci numbers with Prolog

% fib.pro :- initialization(main). add(X, Y, Z) :- Z is (X + Y). fib(N, [1,1|Fib3]) :- append(Fib1, [_], Fib2), append(Fib2, [_], Fib3), length([1,1|Fib3], N), maplist(add, [1,1|Fib1], [1|Fib2], Fib3), !. puts(N) :- format("~d~n", [N]). ma…

Prolog の append がとてもユーティリティ

リスト操作は append で、だいたいどうにかなるこということがわかりました。 % 先頭の要素を取得する head(List, Head) :- append([Head], _, List). % 末尾の要素を取得する(標準装備でした) % last(List, Last) :- append(_, [Last], List). % 先頭の要…

配列の回転

時計回りに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…

iTunes の CD の情報を JavaScript で設定する

CD を購入した時に、iTunes 上で情報を設定するのが面倒だったのでスクリプトでなんとかしようと思ったらなんとかなったので、そのメモ。従来から AppleScript で iTunes を操作することはできましたが、AppleScript は不得意なため Yosemite から使えるよう…

第2回 ESM オフラインリアルタイムどう書くを開催しました

前回開催から2ヶ月あまり。12月24日に第2回を開催しました。 前回のレポート「mtsmfm blog - ESM オフラインリアルタイムどう書くを開催しました」 今回はわたしが問題を作成し、@mtsmfm に相談、調整をお願いしての出題になりました。 ※公開後に寄せていた…

昔のお題をCypherで解いてみる

グラフデータベースならグラフ理論の問題ぐらい解けるだろう、という乱暴な短絡思考から昔のグラフのお題を解いてみました。 C++のtemplateが問題を解く - エンジニアのソフトウェア的愛情 昔のお題がネタなら、今回の解法もネタだったりします。 とにかくCy…

Neo4j と Cypher に手を出す

仕事でグラフデータベースが利用される案件が目につくようになってきました。というわけで。Neo4j に手を出してみた顛末の記録です。ちなみに。プラットフォームは OS X El Capitan です。 Neo4j, the world's leading graph database - Neo4j Graph Databas…

右に回す、Prologで

rotate という操作があります。要素を回転させる操作です。 いろいろな場面で Prolog の強力さを目の当たりにするのですが、今回はこの rotate という操作について見ていきます。 なお rotate させるばあい、方向として右と左がありますが、考え方は同じなの…

Evernote のノートのタイトルに住所を付け加える

先日、Evernote Food のサポートが終了するので… - エンジニアのソフトウェア的愛情 という記事を書きました。その最後に 同じ要領で notes[i].longitude(), notes[i].latitude() を使えば位置情報を取得できるので、住所を設定することもできると思います。…

XP祭り2015に行ってきた

昨日 2015年9月12日、XP祭り2015“俺も!!”が開催されました。 雑な感想 日本一、XPに近いところにいる純粋な営業職 Passion + Skill + Small Team 俺も!「老害」 〜〜〜〜〜〜〜〜 〜〜〜〜〜〜〜〜 〜〜〜〜〜〜〜〜 LUMINOUS GROUND 初参戦から8年 ブロ…

Evernote Food のサポートが終了するので…

Evernote Food のサポートの終了が決まりました。 Evernote Food サポート終了のお知らせ - Evernote ナレッジベース 不満な点はあるにはあったもののこの 2 年半ほど使い続けていたので、少々残念に感じているところ。代替手段を探していたのですが、日時場…

駒の移動できる位置をビット演算で求める

C++

King's Vallery というゲームがあります。 キングスバレー「King's Valley」公式ページ これの駒の移動できる位置をビット演算で求めてみようと思います。細かくは、一手目は家臣駒を動かさないといけないとか、家臣駒は King's Vallery に入れないとかあり…

this is not global

めも。 A = 10; console.log('A = ' + A); console.log('this.A = ' + this.A); console.log('global.A = ' + global.A); 実行結果。 $ node what-is-global.js A = 10 this.A = undefined global.A = 10 ただし。 $ node > A = 10 10 > this.A 10 > global.…

JavaScriptでEvernoteを操作する、ただしYosemiteにかぎる

OS X が Yosemite になって、標準で JavaScript を扱えるようになりました。使い方について、こちらの方が詳しくまとめられています。 知らないうちにMacがシステム標準でJavaScriptで操作できるようになってた (JXA) - Qiita JavaScript で AppleScript と…

海老で PDF を釣る

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

RailsとHamlでSVG

ふつうに ブラウザがインラインのSVG表示に対応していれば、HamlでSVGを書くとそのまま表示してくれます。app/controllers/circles_controller.rb class CirclesController < ApplicationController def index @circles = 30.times.map { {x: rand(500), y: …