「1 + 1 = 2」の証明

私は大学生時代に数学を専攻していたのですが、飲み会でその話をすると「『1 + 1 = 2』を証明できるんでしょ?」なんて事をよく聞かれます。まあ、相手も本気で数学的な議論をしたいわけではないのですが、あまりによく聞かれるので、ここでひとつ「1 + 1 = …

誰もオフィスワークの効果を知らないという不安

オミクロン株出現がニュースを賑わせており、新型コロナウイルスの流行の行先先は不透明だけど、日本ではまずまず落ち着いた状況。 なので、私の勤務先でもリモートワーク解除を進める動きがあるらしい。 でも、私はオフィスワークへの切り戻しは不安。反対…

「監視は役割ではなくスキル」 by 入門監視

Mike Julian「入門監視」 オライリー刊を読んで、カルチャーショックというか、「我が意を得たり!」という思いをしたので、紹介します。 「監視は役割ではなくスキル」 私はソフトウェアエンジニア(Dev)に監視の知識は不要であり、 監視はインフラエンジ…

「権限の分離」をもっとよく知りたいと思う

私は最近「権限の分離(Segrecation of duties, SoD, セグリケーション)」について勉強し直したいと思っているのですが、 手近に良い本が見つからず、困っております。良い書籍や記事をご存知のいらっしゃったら、教えて下さると幸いです。 こんなことを言…

世界で0.1%の花

私が中学生のころに「世界に一つだけの花」という歌が流行りました。 一つとして同じものはないから NO.1にならなくてもいい もともと特別なOnly one といった歌詞が当時の世相にマッチしたようですが、「NO.1を目指す中でこそOnly one になれるんだ!」なん…

エンジニアの説明下手は「知識の誘惑幻惑効果」のせいかもしれない

ちょっと前、こんな記事が少し炎上していました。 説明が分かりにくいのは知的怠慢だ、技術者よ思い上がるな | 日経 xTECH(クロステック) https://tech.nikkeibp.co.jp/atcl/nxt/column/18/00148/100300081/?n_cid=nbpnxt_twbn 「エンジニアの説明下手」に…

なぜサードパーティ・ライブラリを避けるべきなのか?

例えば Pythonには標準ライブラリに urllib.requestというモジュールがありますが、高機能なサードパーティ・ライブラリである requests が普及しています。 しかし、私は先日あるプロジェクトであえてrequestsではなくurllib.requestを使うことを選びました…

ありがちな「なぜ”デスクトップLinux"は普及しなかったのか?」へのありがちな反論

ITmedia エンタープライズに、なぜ“デスクトップLinux”は普及しなかったのか?という記事が載っていました。デスクトップLinuxの失敗については今まで何度も色々な人が書いており、どうということは無い記事なのですが、 AppleのUIを最高と考える私にとって…

.app ドメインで、サーバーレスアプリを公開する

Googleが30億円かけてゲットした新ドメイン「.app」をついに運用開始 - GIGAZINE ということで、Google Domainでドメインを取得して、アプリを公開してみました。 https://www.mc-skin.app/ マインクラフトの、主人公キャラ用のスキンを作れるアプリです。

奥が深い症候群

ソフトウェア開発の職場でよく発症する症状 奥が深い症候群 使いにくいツールに「奥が深い」と言ってのめり込む症候群。往往にしてもっとシンプルな解決策が他にある。 Tex、C++、Perl、Vim、Emacs、弊社フレームワークなどで発症しがち。 理由があるはず症…

今までに使ったプログラミング言語

仕事でまともに使っている言語 Ruby Ruby on Rails のために使っている。 汎用言語としてはRubyが一番完成度が高いと思っている。 「標準ライブラリのメソッドが豊富」といったレベルだけではなく、 周辺ツールが充実している。依存関係したければBundler、…

Scalaの最も難しいところ

仕事でScalaで書いたプロジェクトを担当する機会がありました。 「Scalaは難しい」と時々言われます。 YammerがScalaからJavaへ移行中 matzとkmizuさんを中心としたscalaの複雑性についての話 私の感想は やっぱりScalaは難しい。 しかし、それはScala大好き…

「サービス層」「DAO層」はアンチパターンだ

転職して、Java(Jersey)とScala(Play)で書かれたWebアプリケーションをメンテを1年半ほどする機会があったのですが、Java系で特によく使われている(ような気がする) 「Controller / Service / Daoの3層に分ける設計」はアンチパターンであると思えてな…

direnvで、使用するdocker-machineを指定する

.envにこんな風に書けるようにします。 # .env use docker-machine my-rails-app ディレクトリに移動すると、自動的にdocker-machineを(まだ起動していないなら)起動し、docker-machine envで環境変数をセットします。 $ cd ~/Documents/my-project direnv…

Yggdroot/indentLineのせいでmarkdownの表示がおかしくなった

markdown編集中に"*hogehoge"が"hogehoge"のように変換されて表示されてしまう。この表示の仕方はVimのmarkdownモードの機能の1つで、set conceallevel=2が設定されているとこう表示する。 問題はset conceallevel=2などした覚えが無いということで、調べる…

Ruby初心者(つまり昨日の僕)に伝えたいRubyの7つのハマり所

書くのが楽しいプログラミング言語であるRubyですが、それでも「落とし穴」がいくつも存在します。 その中から私が最近ハマった落とし穴を7つ紹介します。 シンボルと文字列は異なる Rubyには「文字列(String)」("a" とか 'Hello world!')の他に、文字列…

rbenv環境で特定バージョンのコマンドを実行する(特にrubocop)

RBENV_VERSION環境変数を指定すればいい。 #!/bin/bash RBENV_VERSION=2.2.3 rbenv exec rubocop "$@" 背景 イマドキ、プロジェクトで使うRubyのバージョンを.ruby-versionやGemfileで指定していない人はいないと思いますが、その時困るのはgem install hoge…

RubyでHashの多重代入

params = {a: "hello", b: "world"} def foo(a:, b:) puts a + b end foo(params) # => helloworld って出来るんだから、 a:, b: = params puts a + b # => helloworld って出来ないのかしらん?Ruby 2.2ではできないみたい たしかClojureにこんな機能があっ…

Ruby初心者と忘れっぽい僕のための10の必須リンク先

部分集合が含まれているのは仕様です。 1. リファレンスマニュアル 寝るときに枕の下に敷くこと。 なお、リファレンスマニュアルは各バージョンごとにあるので、最新版(今は2.2.0)を見ましょう。 オブジェクト指向スクリプト言語 Ruby リファレンスマニュ…

Goライブラリもウルトラ簡単に作れる!

RubyGemはめっちゃ簡単に作れる! - 酒と泪とRubyとRailsとでRubyライブラリの公開方法が紹介されていました。 Goライブラリも知らないとハードル高そうに見えますが、実はかなり簡単につくれます。 これから積極的にGoライブラリを作ってOSSの世界に貢献し…

gulpにもmakeにも不満なWebデベロッパーためのRake(コンパイル・パターンマッチ・ファイル監視・通知)

イントロ 21世紀になって登場したフロントエンド向けビルドツールであるgrunt, gulpなどは、最近批判を受けているようだ。 【翻訳】Web世代のデベロッパーのためのmake - MOL 最近のビルドツールって何なの? - 檜山正幸のキマイラ飼育記 gulp問題ひきずり:…

DirenvでDotenvのファイル(.env)を読み込む

Dotenvは環境変数をファイル(.env)から読み込むためのRubyライブラリ。 Twelve-Factor Appなどでは、アプリケーションの設定は環境変数に格納することを推奨しており、Dotenvは本番と開発で環境変数を切り替えるのにうってつけ。 一方、開発環境で環境変数…

go-gitconfigで自作ツールの設定を~/.gitconfigに書く

Goプログラマ必携のGoライブラリ管理ツールghqは、 インストール先などを~/.gitconfigから取得するようになっています*1。 まぁ、非開発者はどうするかとか、そもそも他ツールの設定ファイルに相乗りするのはどうなのかとかは問題ですが、開発者用と割り切れ…

PythonのfileinputをGoで実装してみた

Pythonの○○をGoで実装してみたシリーズ fileinputは、行単位で処理を行うコマンド(特にUNIXフィルタ)を作るときなどに便利なライブラリ。 import fileinput for line in fileinput.input(): process(line) コマンドライン引数で与えられたファイルの行に順…

Python 3.3〜3.5の変更点まとめ(標準編)

この記事は3.2まではPythonを使っていたが、しばらくPythonを離れ、最近戻ってくることになった人*1向けに、 3.3〜3.5で何があったか(何が起こる予定か)をまとめる記事です。 *1:つまり私

Dockerの6つのtips

1. イメージを作る方法はDockerfileだけじゃない Packerもある。 Packer by HashiCorp Packer by HashiCorp Packerは様々な仮想環境のイメージを統一的な方法で作れるツールで、Virtualbox・AWS・DigitalOceanなどにも対応しています。 したがって、DigitalO…

メモ:ローカル環境でCookieが動かないなら、127.0.0.1を疑え。

Cookieを使った認証において、認証取得先とリダイレクト先などは同じ表記でなくてはならない。 すなわち、localhostと127.0.0.1は異なるホストとみなされる。設定ではどちらかに統一すること。

VMWare fusion上のXubuntuで?GVimが正しく描画されない問題

GVimでスクロールしたり、ggでジャンプしたりすると正しく再描画されず画面が真っ黒に。 (たちの悪いことに、マウスで少しスクロールすると再描画される。 そのため、絶妙な「不便で作業効率は落ちるけど一応使えてしまう」不具合になっている) どうやら前…

もしプログラミング言語がお昼ごはんだったら

ソフトウェアを開発するためのプログラミング言語には様々な種類があり、 歴史あるもの新しいもの、手軽さを重視したもの厳密さを追求したもの、など様々な種類があります。 ここでは、8種類のプログラミング言語を、それぞれお昼ごはんに例えてみました。 …

AngularJSのチュートリアルを移植して感じた、Elmの3つの良い点と不満点

これはElm Advent Calendar 2014の14日目の記事です。 AngularJSのチュートリアルをElmで再実装してみました! doloopwhile/elm-phonecat · GitHub まだ、本体のソースコードだけで、解説は何もないのですが・・・。 書いていて、気づいた事を、良い点・不満…