プログラミング

トップレベルスタイルSinatraの起動プロセス

トップレベルスタイル とは、以下のような書き方のことを指します: require 'sinatra' get '/hello' do 'hogehoge' end このスタイルで書かれたSinatraアプリケーションが、どのような手続きで起動しているのかを解説します。 TL;DR 以下のようなトップレベ…

職人じゃないけどAAがしたい!

作ったもの: https://image2aa.herokuapp.com/ AA(アスキーアート)とは AA(アスキーアート)というのは、上の画像のように文字で書かれた絵のことです。一般には「AA職人」が職人芸で作ります。 元々は画像が貼れない2chで絵を表現するための手段だったと思…

「熊野寮生だけど質問ある?」

CAMPHOR- Advent Calendar 2017 の 7日目 の記事です。 CAMPHOR-運営メンバーの @genya0407 です。 熊野寮ネタばかりで恐縮ですが、「熊野寮生だけど質問ある?」というWebサービスを作った話をします。 「熊野寮生だけど質問ある?」とは? 「熊野寮生だけ…

熊野寮でコードを書いて感謝された話

CAMPHOR- Advent Calendar 2017 の 2日目 の記事です。 CAMPHOR-運営メンバーの @genya0407 です。 熊野寮でコードを書いて感謝された話をします。 熊野寮 僕は京都大学の自治寮である熊野寮に住んでいます。 ガサが来たり過激派が住んでたりしますが、基本…

PNGを端末に表示するプログラムをRustで書いた

PNGを端末に表示するプログラムを作りました。 github.com 使い方 cargo run /Path/to/Windows_logo.png とすると、のように端末に画像が表示されます。透過画像も表示できます。 ちなみに、PNGの画像形式は何パターンかあるのですが、そのすべてに対応して…

PNGの規格を簡単に説明する

PNGの規格を勉強する機会があったので、その内容を簡単に説明します*1。 PNGはいくつかの"チャンク"が集まって構成されています。例えば、IHDRチャンクやIDATチャンク、PLTEチャンクなどがあります。では、PNGファイルという単なるバイト列から、どのように…

機能追加と同時にリファクタリングをしてもいいか

「機能追加と同時にリファクタリングをしてもいい」という記事がはてブに上がっていたので、思うところを述べる。 scrapbox.io 結論 機能追加とリファクタリングを同時にするのは 機能追加とリファクタリングを混ぜてPRを出すのは 問題意識 機能追加をする…

iter()とinto_iter()の違いを整理した

VectorをIteratorに変換する時にいつも混乱していたので整理した。 混乱 あるVectorの要素すべてを3倍するコードを考える。 fn main() { let vec1 = vec![1,2,3,4,5]; let vec2 = vec1.iter() .map(|i| i * 3) .collect::<Vec<i32>>(); println!("{:?}", vec1); print</vec<i32>…