Vim 8.0 リリース!

Vim 8.0 released! Vim 8.0が先ほどリリースされました。10年ぶりのVimのメジャーバージョンアップです。 Vimのバージョンをcronで毎日上げ続け、最新のパッチを確認し続ける日々を送ってきました。そして、今日も夜11時のcronでバージョンが上がりました。…

JavaScriptのsetTimeoutをログに出す

setTimeoutは難しい。いつ呼ばれるかよく分からないし、ライブラリーを使うとそのライブラリーがsetTimeoutを使いすぎてしまう。よく分からなかったけどsetTimeoutすると動くからそうしていた、んだけど実はタイミングの関係で偶然うまく動いているように見…

CSVファイルをSQLのクエリで集計できるqコマンドをHaskellで実装してみました!

先日、Twitterでqコマンドが話題になっていました。 github.com スターが3000を超えていてすごいですね。2014年から開発されているツールで、Pythonで書かれています。 これはGoで実装してみたいなーと思っていたところ、mattnさんが素早く実装されていまし…

Go言語でbase58コマンドを作りました

Go

Go言語でbase58コマンドを書きました。コマンドラインツールだけではなくて、Goのパッケージとして作っています。 github.com 仕事の関係でbase58を扱うことがあり、base64コマンドのように素早くコマンドラインで変換できるツールが欲しくなったので作りま…

30のプログラミング言語でFast inverse square rootを実装してみました!

あなたの好きな言語は何ですか。そして、あなたの好きなアルゴリズムは何ですか。 好きな言語があると、その言語でどんな問題でも解決しようとなりがちになります。その言語を極めるのは素晴らしいことですが、その言語や似たような言語でしかコードが書けな…

AtCoder Beginner Contest 040

A - 赤赤赤赤青 n個の中の特定の一つのブロックを隣り合うブロックの入れ替えによって両端のいずれかに移動する最小の回数。 main :: IO () main = getContents >>= print . (\[n, x] -> min (x - 1) (n - x)) . map read . words B - □□□□□ n個のタイルをど…

HHKBを買いました・他近況報告

4月頃から仕事中に両手の小指に痛みを感じるようになり、コードを書いては少し手を休めないとつらくなっていました。意図的に小指を使わないように打鍵したり、比較的指を使わないレビュー作業を合間に挟んだりしていたのですが、痛みは出てきたり引いたりと…

しまなみ海道を走ってきました

大学時代の友人に誘われて、しまなみ海道を自転車で走ってきました。 ゴールデンウィークということもあり、福山で乗り換えるとちらほら自転車乗りたちが見え始め、尾道ではたくさんの人たちが自転車を組み立てていました。9:30ごろ尾道からフェリーに乗り向…

端末の上で動かして遊べる!迷路コマンドをGo言語で書きました!

Go

迷路で遊びたくなったので作りました。Goで書いています。 github.com Homebrewをお使いの方は、次のコマンドでインストールしてください。 $ brew install itchyny/tap/maze そうでない方は、次のコマンドでビルドしてインストールするか、 $ go get -u git…

Vimの標準プラグインmatchparenが遅かったので8倍くらい速いプラグインを作りました

Vim

コードを書いているとき、対応する括弧はとても大事です。エディターの中でカーソル下の括弧がどこと対応しているかが一目でわかると便利です。Vimの標準のプラグインにmatchparenというプラグインがあります (:h matchparen)。 私もずっとmatchparenのハイ…

最近の技術トピック・他近況報告

こんにちは。id:itchynyです。 自分の中で、ブログに書く価値のある内容どうかという基準がインフレしてしまって、最近は全くブログを書けていませんでした。 業務の中で学んだこと、家に帰ってから書いたコード、その他技術的に考えていることなど、ブログ…

Vimの<C-f>でスクロールしていくと最後一行になってしまうのを直す設定

Vim

Vimの<C-f>を押していくと、最後に一行だけになってしまいます。 おっと行き過ぎたと言ってわざわざ戻っている方も多いのではないでしょうか。 この世の中にはたくさんスクロールのUIがありますが、普通はこうなっていません。 ウェブブラウザーのスクロールも、P</c-f>…

Haskellでimport文をソートするプラグイン vim-haskell-sort-import を作りました

Go言語には、gofmtというコードフォーマッターがあります。 標準ライブラリーで備えており、このフォーマッターをかけることを半ば強制することにより、Goで書かれたコードはどれも統一的なスタイルをしているように見えます。 gofmtには様々な機能がありま…

Haskellで無限個の無限リストをソートされた形で結合する

CodeforcesやProject Eulerの問題には、無限リストをうまく使うと綺麗に解くことができる問題がたくさんあります。 数列の性質から探索範囲の上界を決めて解を探索することが多いのですが、きちんとした根拠を持って上界を決めることができることは少なく、…

2015年を振り返って

今年は働き始めた年でした。環境が大きく変わりました。新しい環境は毎日刺激が多く、とても楽しく過ごしています。 入社してちょうど三か月した時、自分にとってとても大きなことが起こりました。ある仕事を与えられたのですが、その解決したい問題に対する…

Haskellで書かれたおもしろいFizzBuzz ― Haskellで読めないコードに遭遇した時に解読する方法を徹底解説!

Haskellには抽象的な高階関数や演算子がいくつもあり、たまにそれらを巧妙に用いたコードがでてきて感心することがあります。 他の人が書いたHaskellのコードを読んでいると、なかなか面白いものと遭遇したりします。 巧妙に書かれたコードを解読していくと…

汎用的なコードの依存関係の抽出ツール rexdep を作りました! ― 正規表現で依存関係を大雑把に抽出しよう!

Go

あらすじ ソフトウェアの中の依存関係について 正規表現で抽出できることとその限界 コードの依存関係を抽出するツール rexdep を作りました ソフトウェアの構造を概観するには あなたは、大きなソフトウェアを目にした時、何をしますか? ファイルが何十、…

Vim用のHaskellインデントプラグインvim-haskell-indentを作りました

Haskellはインデントが意味を持つ言語です。コーディングするときには、エディターがいかに心地よく空気を読んでインデントを入れてくれるかが重要になってきます。HaskellのVim用インデントプラグインはこれまでいくつかありましたが、それらはどれも機能が…

詳細PDF入門 ー 実装して学ぼう!PDFファイルの構造とその書き方読み方

PDFのファイル構造を理解すると、テキストエディタでも直接PDFファイルを作ることができるようになります。このエントリーではPDFファイルの基礎要素を説明し、簡単なPDFファイルを例にしてファイル構造を説明します。更に、テキストを渡すとPDFファイルを吐…

YAPC::Asia Tokyo 2015に参加しました

YAPC::Asia Tokyoに初めて参加しました。これまで存在自体はなんとなく知っていた気がしますが、あまり自分がweb業界に入ることは想像していなかったので、関心がありませんでした。いざ参加してみますと、YAPC::Asia Tokyoは想像していたよりも規模が大きく…

sjsp 0.1.0 をリリースしました

先日作ったsjspですが、その挙動も安定し、最低限必要かと思われるオプションを作ったので、最初の安定版リリースとして0.1.0というタグを打ちました。 github.com 同時に、Hackageにもアップロードしました。 sjsp: Simple JavaScript Profiler これでGitHu…

シンプルでかつ最高のJavaScriptプロファイラ sjsp を作りました! ― Webアプリケーションが複雑化する中でプロファイラに求められるものとは何か

あらすじ Web技術が複雑になる中で、JavaScriptのプロファイリングをとる方法とは。 プロファイリングを取るためのコードを手で書いてみましょう。 とてもシンプルで、かつ最高のJavaScriptプロファイラ sjsp を作りました。 本当にあった怖い話 上司 「とに…

Osaka.vim #4に参加しました

様々なVim使いの集い、Vimについて開発する会、Osaka.vim #4に参加してきました。実は、Osaka.vimはかつて一度、Osaka.vim #1に参加しておりますので、二回目の参加でした。 Osaka.vimもくもく会は、とにかく5時間弱、Vimについてもくもくと開発する会です。…

GitHubのヘッダーを改善する! Google Chrome用拡張 GitHub Better Headerを作りました

最近、GitHubのヘッダーのデザインに変更があり、いくつかのリンクの位置が移動しました。Pull requestやIssuesのリンクはなかなか便利で、これはいい改善なのですが、元々あったリンクでよくクリックしていたものがドロップダウンの中に入ってしまい、使い…

AtCoder Regular Contest 040

A - 床塗 'R' と 'C' を数えるだけ。 import Data.Functor ((<$>)) main :: IO () main = putStrLn =<< solve <$> (concat <$> tail <$> lines <$> getContents) solve :: String -> String solve xs = case length (filter (=='R') xs) `compare` length (f…

歩きスマホと横断歩道の見切り横断は本気で危険だと思った

先日、青山にあるオフィスで仕事を終えて、渋谷駅まで向かうため、あたしは青山通りを歩いていました。夜の8時前、あたりはすっかり薄暗くなっていました。とある交差点で信号が赤になり、あたしは横断歩道の少し手前で立ち止まりました。その時、背の低い女…

AtCoder Beginner Contest 024

A - 動物園 子供がいくらで大人がいくらなので団体の入場料はという問題。問題文にある通りに計算すればよい。 main :: IO () main = getContents >>= print . solve . map read . words solve :: [Integer] -> Integer solve [ a, b, c, k, s, t ] = a * s …

映画『名探偵コナン 業火の向日葵』を観てきました

さすが日曜日のお昼ですね、満席でした。場所はMOVIX京都。女性が多かった。七割くらいかなぁ。子供は意外と少なかった気がします。 映画『名探偵コナン 業火の向日葵(ごうかのひまわり)』公式サイトwww.conan-movie.jp ― ゴッホの名画「ひまわり」を七枚…

AtCoder Regular Contest 039

A - A - B problem 3桁固定だと愚直に解ける。 main :: IO () main = getContents >>= print . solve . words solve :: [String] -> Int solve [ a@[ a0, a1, a2 ] , b@[ b0, b1, b2 ] ] = maximum [ read a' - read b' | (a', b') <- concat $ [ [ ([ k, a1…

Google Code Jam 2015 Qualification Round

これからもたまにはコンテスト参加しよう。あたしがんばるもん。まぁCodeforcesは日本時間だとつらい感じに開催されているので、寝不足にならないように程々にね? A. Standing Ovation 左からなめて行って、足らなかったら観客を足す。足した観客はみんな拍…