読者です 読者をやめる 読者になる 読者になる

VimプラグインのTravis CIテストを複数のVimのバージョンで動かそう

Vim

Vimプラグインにテストがあるのはあたりまえ。 そういう空気になってきたのはここ3年くらいのことでしょうか。 私自身、昔はあまりテスト文化に慣れておらず、「Vimプラグインみたいな小さなスクリプトにテストなんているのか?自分のプラグインは普段から使…

円周率の16進数表現100億桁目を求めてみた! ― 円周率の世界記録をどのように検証するか ―

あなたは円周率を何桁言えますか。3.14159…という、あの数字です。 円周率の小数部分は無限に続き、循環することもありません。 古来より、数学者は円周率の値を様々な幾何学的な近似や公式を用いて計算してきました。 その桁数は計算機の発明により飛躍的に…

LLVM APIを使ってみよう! 〜 Brainf**kコンパイラをIRBuilderで書き直してみた 〜

先日LLVMの入門記事を書きました。 clangが吐くLLVM IR (Intermediate representation, 中間表現) を頼りに、Brainf**kのコンパイラを書いてみました。 itchyny.hatenablog.com この記事で書いたコードでは、直接printfでLLVM IRの命令を出力していました。 …

LLVMを始めよう! 〜 LLVM IRの基礎はclangが教えてくれた・Brainf**kコンパイラを作ってみよう 〜

コンパイラを作ってみたいと思っていても、アセンブリ言語はよくわからない。 パーサーみたいなコードは書いたことがあるけれど、コード生成の処理はさっぱりだ。 実行ファイルをバイナリエディターで見るとかなにそれ怖い。 そんな私なのですが、LLVMに興味…

二週間で簡単なインタープリタ言語を実装してみた (日記)

私は昔から言語処理系に興味があり、自分で言語を作ることを夢見てきました。 しかし、いざ言語を実装しようと思って言語処理系に関する本を読んでも何から手を付けていいか分からず、アセンブラもまともに読めないまま、数年が経ってしまいました。 大学時…

2016年を振り返って

会社は二年目に入り業務にも慣れ、ある程度まとまった仕事を任せられるようになりました。 携わっているサービスのコードに詳しくなり、リファクタリングの方向性を示して改善を進めてきました。 難しい障害も乗り越えながら、引き継いだ手綱を何とか制御で…

珍しいSHA1ハッシュを追い求めて

「SHA1ハッシュってあるだろう?」 放課後、いつものように情報処理室に行くと、高山先輩が嬉しそうな顔でそう言った。 「ええ、SHA1、ありますね」 「SHA1って何桁か覚えているかい?」 「えっと…」 一年下の後輩、岡村が口を開いた。 「50桁くらいはありま…

git grepで仕事してる

私はコードを書く時に頻繁にgit grepを使っていて、一日に何回くらいgit grepを使っているのか気になったのでログを取ってみました。 2016 10/24 月: 61 2016 10/25 火: 36 2016 10/26 水: 19 2016 10/27 木: 80 2016 10/28 金: 51 2016 10/31 月: 96 2016 1…

スマホが割れた日

その瞬間は、前触れもなくやってきた。 いつものように、仕事帰りに烏丸御池の交差点で信号待ちをしていた。ちょうど赤に変わったタイミングで時間があったので、スマホでニュースを眺めていた。信号が切り替わり、そろそろ渡ろうとしてスマホをポケットにし…

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/maze/maze そうでない方は、次のコマンドでビルドしてインストールするか、 $ go get -u gi…

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というタグを打ちました。 itchyny/sjspgithub.com 同時に、Hackageにもアップロードしました。 sjsp: Simple JavaScript Profiler…

シンプルでかつ最高の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 左からなめて行って、足らなかったら観客を足す。足した観客はみんな拍…

映画『ソロモンの偽証 後篇・裁判』を観に行きました

ソロモンの偽証の後篇を観に行きました。映画公開日に行ったため、映画館は満員でした。ただチケットは当日行ってから真ん中の席が取れたので、そんなに予約していくほど熱狂的な人は多くない様子でした。後篇は、いよいよ裁判そして解決編です。映画の最初…

なんかまぁ実際のところ、本当に入った会社に関する入社記事に関しては

時間かけてゆっくりかけて書きたいって感じなんて申し訳ないですが、まぁそんな感じです。マジで申し訳ない。あといっちにぃじゃなくていちにぃでいいっすよ。 (呼びやすい方で。追記: と言うか4/1に入社エントリーを書くと、某社のネタに埋もれてマジでもっ…

株式会社はてなに入社しました

株式会社はてなに入社しました株式会社はてなに入社しました - hitode909の日記

スマホデビューしました - さようならW54T

ようやくあたしもスマートフォンを手にしてしまいました。スマホデビューです! iPhone 6です。今は、フリック入力が難しくて、文字を入力するのにも苦労しています。これまでiPadを持っていたので、操作やUIについては慣れていますが、小さいようで片手で持…

大学時代六年間に集めたLaTeXのtips

ドキュメントのスタイル 任意の紙の大きさ \documentclass[papersize]{article} \AtBeginDvi{\special{papersize=300mm,400mm}} \setlength{\paperwidth}{600mm} \setlength{\paperheight}{500mm} \ifx\pdfoutput\undefined\else \setlength{\pdfpagewidth}{…

京都・東山花灯路に行ってきました

京都・東山花灯路公式サイトには『「灯り」をテーマとする新たな観光資源の創出事業』と書いてあります。まぁ要するに東山地区のライトアップイベントですよ。場所は、三条から知恩院前の通り、円山公園、八坂神社、そしてねねの道を通って高台寺、圓徳院、…

映画『ソロモンの偽証 前篇・事件』を観ました

中学校を舞台にしたサスペンス映画。宮部みゆきによる原作同名作品を元にした、二部作映画の前篇。以前から気になっていた作品で、ようやく観に行くことが出来ました。しかし、平日だからかお客さんはほとんどおらず、一割程度といったところ。頑張って宣伝…

1 NIKKOR 18.5mm f/1.8を買いました

愛機J4の標準のズームレンズを使っていると、どうしても暗いところでは綺麗に撮れないことに気が付きます。例えば、薄暗い飲み屋の中で友達を撮りたいといったシーンでは、絞りをいっぱいまで開いてISOを1600くらいまで上げても、シャッタースピードが1/8く…

映画『花とアリス殺人事件』を観に行きました

よく他の映画の宣伝枠で流れていたので、気になって観に行きました。しかし、公開日後初の日曜日の昼にも関わらず、お客さんは2割ほどしか入っていませんでした。宣伝の仕方の問題なのか、そもそもターゲットが分かりにくいのではないでしょうか。興業的には…

『劇場版 PSYCHO-PASS サイコパス』を観に行きました

以前から作品の名前は知っていましたが、どうも血の気が多いアニメは苦手なもので、ずっと避けていました。アニメ作品を一切見ていないのに劇場版を語る資格はないかと思いますが、そんな私でも楽しめました。最初は打たれた人が膨れ上がるのがグロいなぁと…

Vimで自動的にファイルタイプを設定してくれる便利プラグインvim-autoftを作りました!

Vim

あなたは次のような場面を経験したことはありませんか? Webページからコード片をコピーする 保存するまでもない時はファイルを作らずに、Vimの無名バッファーに貼り付ける シンタックスハイライトされねぇじゃねぇか!!!と怒る :set ft=ほげほげ あるいは…