サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
今年の「#文学」
oogatta.hatenadiary.jp
ので困っていましたが… プログラミング用フォント Ricty に、思いっきり… 一部のフォントサイズで半角文字と全角文字の横幅比が 1:2 にならないことがあります。 ピクセル値 (px) が偶数でないとき、どのフォントにおいても起こりうる問題です。 一般的な 96 DPI のフォントレンダリングでは、9 pt、10.5 pt、12 pt、13.5 pt、15 pt など、1.5 の倍数を指定すると 1:2 で表示されると思います。 って書いてあってふっとびました。 知らなかったよーん。 emacs で height 105 にしたら見事にぴったり…。
僕 bats 好きなんですよ。なので Test-Kitchen でめっちょテスト書きます。なんとなくふわっとした複合的な要件は Serverspec で書きます。どちらにせよ、アプリじゃ無くてインフラなので、普段の25倍くらいは書きたいところです。 そんでいっぱしのレシピが書けて、クックブックが仕上がって、 git push して、そのあといろんなやり方で実際の環境、成果物をつくりますよね。自分の場合 docker のコンテナと IAM と Vagrant BOX にします。 VPS や自前のハードウェアに展開することが全く無いので、実際の論理マシンに直接 Chef を流すことが今はないのです。 なので、作るのは今 packer を gradle で動かして作ってます。 そこまではいいんですが、じゃあそこで例えば Vagrant の Box ができあがったとして、これもう一回、レシピ作った
Why you should build an Immutable Infrastructure | via @codeship こないだの Codeship のブログ見てて、自分も今ちょうどまさにそこに取り組んでいたのでいやほんとそうだなーって思って、でもアホだからほっとくと自分でも自分がどういうゴールで仕事してるのかわかんなくなるんですよね…。なのでポイントだけ抜き出してみました。また例によって僕の言葉も入ってるので、実際に彼らが何と言ってるかは原文を確認してください。ちなみに会社にいる時間で20分くらいかけて書きました!!。ありがとうございます!!。 Immutable Infrastructure とは その場で更新されること無く、必要に応じてデプロイ毎に交換される Immutable Component の集まり。 Immutable Component は単独及び独立にテスト・
Ubuntu でずいぶん前に作ってた Packer の json で CentOS 用の box 作ろうと思ったら途中でハングした感じになってた。どうも reboot したとき、その script は exit するのだけど、 sshd やら network やらはまだちょっとの間生きているので Packer が次の script を走らせてしまうみたいだ。 Ubuntu の時は大丈夫だったのはなんでだ?。ただの奇跡かな。 reboot の実装違うとかかな。 で、ドキュメントとソース見たら、 ssh が切れたらすぐに次のスクリプトには進めなくなる上に、最大で start_retry_timeout 時間分待って再接続して次のスクリプトから進めてくれるということだったので、 #!/bin/bash -eux systemctl stop sshd reboot 当然こんな感じになりました。ば
こないだの続きで最終的に Docker のイメージを作るんですけど、途中 Dockerfile じゃなくて Chef で作ってます。同じ構成コードで Docker のイメージ以外も作りたくて。というわけで Berkshelf です。 repositories { mavenCentral() } buildscript { repositories { jcenter() } dependencies { classpath 'org.gradle.api.plugins:gradle-docker-plugin:0.2' } } apply plugin: 'docker' apply from: '../berks.gradle' import org.gradle.api.plugins.docker.tasks.* import org.gradle.api.plugins.doc
なにしろいま表題のような感じでいろいろ試してるんです。そうしたら、本当に38.9℃の熱を出して2日間寝込んでしまいました。 寝込んでいる間 Kindle Paperwhite で Manning の『 Gradle in Action 』を途中まで読みました。この作者の Benjamin Muschko さん、 Gradleware 社の方なんですが、なんと Docker のプラグインを書いています。 検索すると出てくるもう1本は build に特化したもので、 Muschko さんのは、うたい文句通り動けば Docker API の gradle クライアントです。ちなみに、僕のところではうたい文句通り動いていない部分があるので Groovy 勉強してパッチ見てもらいたいと思います…。 というわけで入れてみました。 Gradle 初めてなので、おかしなことやってるかもしれません。 Gra
このところ Docker やってます。前にやってたのが去年の10月でさすがに半年以上立ってるので進化していて Docker Hub ができてほんと助かります。 private な image の共有はサーバ自分で立てろ、とかだったので…。 Dockerfile 内で、 build を実行している環境の環境変数を参照したい docker - Get environment variable value in Dockerfile - Stack Overflow cat Dockerfile | envsubst | docker build -t my-target - これ冴えてますよねえー。 envsubst yum も apt も gettext 入れると一発で入りました。ただ、標準入力から Dockerfile の内容を受け取る上の書式だと context 渡せないので、これで一回
今朝、クロネコさんの荷物問い合わせ結果画面をリロードしつつ「配達中」ステータスになるのを待っていたら、なんかこれは人間のやることじゃないぞと思い立ち、 Chrome の Extension を書きました。 それがこれ、クロネコヤマタブルです。 しかしこの Extension 自体はどうでも良く、詰まったりへえと思ったところを書きます。 background の js では cross origin な XHR が使える https://github.com/oogatta/kuronekoyamatable/blob/master/main.js#L25 普通に使えちゃうんですね。 var xhr = new XMLHttpRequest(); xhr.open('POST', 'https://api.pushover.net/1/messages.json', true); xhr.o
事情あってクリーンインストールしたので Windows 8.1 に ruby を入れ直そうと思ったが、 RubyInstaller に 2.1 が来ないのと、 Windows のことだしいつ RubyInstaller の更新止まってしまうか分からない。最低限のことはサードパーティに頼らず自分で出来た方が良いよなと思いやってみたら(ある程度は)できた。 Visual Studio 2013 Express for Desktop 入れる。 開発者コマンド プロンプト for VS2013 を立ち上げる。スタートメニューの "Visual Studio ツール" ってとこに入ってた。 実はこの "開発者コマンド プロンプト for VS2013" って %comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 12.0\Com
job configuration file を書くときの準備。全部 cookbook に書いてあるのですが、一応。 ちなみに私が今回書いたのは Vagrant の precise box 用なので、 Upstart のバージョンは 1.5 となります。 ちゃんと認識されているか # initctl listSystem Job は /etc/init の中に XXXX.conf として配置する。 1.6 までの User Job は $HOME/.init/ だが、 User Job は仮想ターミナルへのログ出力機能が無いので root が無いとかどうしてもという時以外はあんまり使わない方が良さそう。 root を知っていれば Sytem Job 中で setuid/setgid した方が良い。 1.7 からの Session Job は $XDG_CONFIG_HOME/upstart
独立環境を起動しながらもホストでファイルの編集をしたらそれがすぐにゲストに反映されるように、ということが Vagrant の Synced Folders を使えばできる。 例えば Rails プロジェクトのルートディレクトリに Vagrantfile を置き、そこから vagrant up する。何も設定しなければ、このホスト側の Rails のルートディレクトリがゲスト側の /vagrant ディレクトリになり、ホスト側でファイルを編集すると、すぐゲスト側に反映される。嬉しい。 さて、この /vagrant ディレクトリで rails server したい。一回すること自体は、 provisioning のタイミングは既にマウントされているので、好きなようにやったらいいんだけど、 vagrant halt && vagrant up の場合再度 provisioning されないので、
この正月休み帯状疱疹にかかって都合7日間布団の中におり、その後3日間は出社せず自宅で作業していました。 自宅作業の際 Photoshop を使う必要があったため、 Windows 機(エロゲから音楽再生からやっている私のメイン PC 。メモリ32GB)といつもの Ubuntu ノート2台立ち上げて作業していましたがこれが面倒くさくなり、開発環境が Vagrant (の VirtualBox の Ubuntu )で提供されていることをいいことに完全に Windows 上で作業しました。 Emacs はもともと入ってましたがもう使ってなくて、 RubyMine と秀丸(フリーカーソル)でやってます。 Ruby は RubyInstaller と pik で既に構築済みでした。 Ruby は DevKit も入れておくとかなり捗ります。 putty 周りは必須です。 Chocolatey Win
とても簡単 「自分の開発環境用だし、既存の Configuration Management System の資産が無いのに使っても意味あるかな?」 とか思ってましたが、意味も何もとんでもなく簡単なので、「環境構築のコマンドをメモっておく」くらいなら Vagrantfile 書いたほうがいいんじゃないかって感じでした。その後 Chef やら Ansible に移していく、っていうスケールの道もありますし。 例えば Vagrant が配布してる裸の precise 64bit ボックスを使って、既に rbenv で動いている rails のルートディレクトリから独立した開発環境を立ち上げるには… # -*- mode: ruby -*- # vi: set ft=ruby : VAGRANTFILE_API_VERSION = "2" $apt_script = <<SCRIPT echo
特に誰にも相談したり説明したりせず作り始める 所属組織内で誰も付いてこない 流行らない OR ディスられる がんばってるのに誰も理解してくれない! AND インターネットに共有して(じつはここが最初のプレゼンテーション)初めて「イイネ!」って言われる ぐれる OR さらに孤高の存在へ… おっさんになると、このパターンを死ぬほど見てきたことに気づく。どうするか。 泥臭い奴 作り始める前に以下のことをどれかやる (解決策は自分の中にあるのだがあえて解決したい問題について知らないふりして)相談する 根回し ニーズの調査・掘り起こし(そんな問題があることをみんなに認識させる) 前触れ告知 飲み会に出席 作った後公開する前に以下のことをどれかやる ドキュメントを書く プレゼンテーションを用意する(動画など) ヒューマンインターフェースのブラッシュアップ 説明会をやる 上司を説得して採用させる 自分の
code https://gist.github.com/oogatta/7208821 <!DOCTYPE html> <html> <head> <script src="test.js"></script> </head> <body> </body> </html> var isFunction = function(object) { // only with 'typeof' return typeof object == 'function'; }; // run in one thread. piled up karma var result = ''; for ( var i=1; i<12; i++ ) { // the number varies. I'm not sure why. It might be the defference between 32bit a
$ git clone -b [branch] --single-branch [remote-repository]でした。 古い文章だと $ mkdir test $ cd test $ git init $ git remote add [remote] [remote-repository] $ git fetch [remote] $ git co [branch]って書いてるのもあるけど、これだと remote tracking branch がリモートリポジトリにある全ブランチ分できてしまうのに対し、 --single-branch ではその時 -b で指定したブランチ分のみできる。 --single-branch で clone すると、それ以降の git fetch [remote] でも --single-branch した時のブランチだけが fetch されて来ます。
JavaScript 僕はもともと VisualStudio で JavaScript を書いていて、 VisualStudio の、どのバージョンからだったからか忘れてしまいましたが、「これからは Web だ」って言い出したときに実装された JS 用の Intellisense がかなり高機能で、型推論ばりばりで、感動して JS 書いていたんですが、なにせ色々ありまして、私の開発機が会社も自宅も Linux になってしまったこともあり、しばらくお別れしておりました。 で、去年くらいに「 Intellisense と同じくらいすごい」と評判になったのが WebStorm で、確かに同じくらいすごい!(馬鹿っぽい感想)。 が、これもまた色々ありまして手放し、今は Emacs を使っておりまして、と言うのも、今は tern てのがありまして、これがですね、私 donate もしたんですが、同じ
一昨日書いた、 IE10 で JavaScript から localStorage を使おうとすると「アクセスが拒否されました( Access is denied )」エラーで実行時エラーになる問題 - oogattaの勉強日記 に id:sakurai_youhei さんからコメントいただきました。ファイルの権限の問題なら、 ProcessMonitor でファイル I/O の様子を見てみると良いと。なるほど!! 帰ってきて、壊れてる方のアカウントにログインして、早速見てみました。判明しました。 C:\Users\oogatta\AppData\LocalLow\Microsoft\Internet Explorer\DOMStoreに書き込めてない。 oogatta はユーザ名です。 そもそも、これまでずっと AppData\Local を見ていました。 LocalLow ってなんだ…
追記 Windows8 の「リフレッシュ」機能を使った後、 IE10 や Silverlight がおかしいときの原因(のその一つ) - oogattaの勉強日記 コメントでアドバイスいただいた内容でフォローアップ書きました。 ここからもともとの本文 ずっと前から悩まされていたこの問題、検索すると、世界中でちらほらと困っている人がいて、そして、大抵「俺のところでは再現しない」と言われてみんな落ち込んでいる。私も落ち込みました。何が辛いって、 window.localStorage プロパティにアクセスした時点で実行時エラーになってしまうところ。 直接の原因はわからず仕舞いながら、「 Internet Explorer の設定をリセット&個人情報を削除する」では効果が無く、管理者権限で IE10 を起動する、または新規にユーザを作ってそのユーザで IE10 を起動すると正常通り localS
バージョンが上がるたびに試しているけど、ちょっと耐えられないくらい汚い。 Swing のせいらしい。 http://youtrack.jetbrains.com/issue/IDEA-57233 JetBrains 的には「 Linux デスクトップのシェアは少ないんで Swing 止めるとかないわ」ってことらしいので、ほっといても駄目みたい。で、コメントをずーっと読むと、結局 http://stackoverflow.com/questions/6151426/phpstorm-editor-fonts-on-linux-systems bin/webstorm.vmoptions または bin/phpstorm.vmoptions に -Dawt.useSystemAAFontSettings=lcd -Dswing.aatext=trueを追加して起動したら、随分ましになった。これ
動作サンプル消しちゃったの直しました。 以下の内容は、『 mixi Engineers' JavaScript Advent Calendar 2012 』の12月19日分として投稿したものの転載です。内容に差異はありません。 bfcache について覚えて帰ってもらいます。 こんばんは。日々、一体お兄ちゃんだけど愛さえあれば関係ないのかどうなのか、そこのところについて確認作業を怠らないものです。 今日、偶然にもこれを閲覧してしまったみなさまには、近代ブラウザの誇る謎機能、 bfcache について覚えて帰っていただきます。どうぞよろしくお願いいたします。 bfcache (正式名称なのか、別名なのか定かではありませんが Back-Forwad Cache とも呼ばれます)をおもむろに Google さんに検索いただくと、権限のありそうな回答は Using Firefox 1.5 cach
ペアリング 昔 Ubuntu 10 くらいの頃に買って、 Bluetooth ペアリングがどうしてもできなくて泣き寝入りして会社の引き出しの奥にしまった Magic Trackpad ですが、 http://ubuntuforums.org/showthread.php?t=2080770 12.10でも依然としてできねえというスレが立ったりしてアレなんですが、しれっと「 blueman-manager を使えばできたよ」と書いてある。そこで入れてみました。 ペアリングできました。 「信頼できる機器としてマークする」ってやると、ログオフログインしても大丈夫。通知エリアに2つ Bluetooth のマークが出てるのがダサいけど、とりあえず仕方ない。動くだけで嬉しい。 デュアルモニタで上下と左右の比率がおかしい しかし、左右にデュアルモニタにしてる環境なので、左右にめっちゃ速くて、上下に遅いと
タイトルの通りなんですけども…。 var image = new Image(); images.src = "data:image/jpeg;base64,..."; var canvas = document.getElementById("c"); var ctx = canvas.getContext("2d"); ctx.drawImage(image, 0, 0); はダメで、 var canvas = document.getElementById("c"); var ctx = canvas.getContext("2d"); var image = new Image(); images.onload = function() { ctx.drawImage(image, 0, 0); } images.src = "data:image/jpeg;base64,..."
エッチなコンテンツ満載の HDD の中身を整理していたら、なにやら全く再生できない動画ファイルを見つけた。入っていた HDD からムフフな動画であることは確実なので、なんとしても再生したいと思い、色々検索した結果次の通り回復した。ちなみに全然関係無いが、文化放送A&Gもずっと聴けない私の自作マシンでした。 ResetDRM Microsoft 様謹製 ResetDRM なるツールを使って DRM 周りのファイルを綺麗にする。 http://support.microsoft.com/kb/976590/ja この通りにします。再起動。 DisableProtectedAudioDG レジストリ値を 0 に すると、なんということか文化放送A&Gは再生できるようになった!。地味に嬉しい。しかし、最大のターゲットであるムフフな動画は、 (購入元である) DMM への認証画面が出て ID/Pas
メモリが16Gもある会社のワークステーション。というわけで tmpfs で /tmp にマウントしちゃってるわけですけど、 Google Chrome のキャッシュディレクトリは $HOME/.cache/google-chrome だった。 これは freedesktop.org で決めているディレクトリルールのうち、 XDG_CACHE_HOME という環境変数のルールに従っていて、これがセットされていればそこ、無ければ $HOME/.cache/ を使うからね。という事らしい。 へぇーと思ったので、試しに /tmp 以下に設定してみる。とりあえず深く考えず ~/.profile に書いてみる。 失敗。 えー、と思ったので検索。 ~/.xprofile というのを作って書くともっと早い段階らしい。再起動。 export XDG_CACHE_HOME="/tmp/.${USER}/cac
https://github.com/ndbroadbent/scm_breeze 頭おかしいほど作りこまれた SCM (今は git だけ)用 CLI サポートシェルスクリプト+ ruby スクリプト群です。ぜひ一度体験してみてください。久々に作り手の生の情熱を感じます。 必要 bash(4?) or zsh ruby ※ ruby は 1.8 で試しました。 2.0 だと gs コマンドで文字コードに関するエラーが出ました。自分 ruby に明るくないので詳しく追いかけていません。 インストール $ git clone git://github.com/ndbroadbent/scm_breeze.git ~/.scm_breeze $ ~/.scm_breeze/install.sh $ source ~/.bashrc # or source ~/.zshrc 個人用設定 .git
昨日の記事を書いたとき、一応少しはテストしてみるかと思って、実際に手元の IE7 と IE8 で動かしてみたんです。 そしたらなぜか IE7 でもネイティヴ JSON オブジェクトが存在するわけですよ。わけがわからない。これは間違いなく IE8 から実装されたものです。 さらに、勤務先のサービスでは X-UA-Compatible が未だに EmulateIE7 なので、その環境で試したわけですよ。つまり、 IE8 で見ようが、 IE9 で見ようが、「ドキュメントモード」が「IE7 標準」になる状況ですね。 その場合、本物の IE7 と同じになるはずなんですけど、なぜか JSON に加えて、 localStorage/sessionStorage と、 onhashchange と postMessage と XDomainRequest が使えてしまうんです。というか、昨日挙げたもので使
IE6 への対応が一段落した昨今、 IE7 もいよいよ事実上市場から姿を消す日が近づいてきたようです。flickr が今年以降リリースする新機能にて IE7 をサポートしないことを表明しました。私の勤務先でも、今ものすごい勢いで IE7 のシェアが低下しており、今年の夏から冬にかけて、今の IE6 と同じくらいのシェアになるかもしれない勢いです。 というわけで、 IE の最低動作保証バージョンが 7 から 8 になったら何ができるようになるのか、僕らの caniuse.com を見てざっと洗い出してみましたのでご参照ください。 CSS inline-block display:inline-block が使えます。IE 6/7 では "display:inline; zoom:1;" で代用していたと思います。 Table Display display:table 、 display:t
encodeURIComponent の URIComponent って何 ECMAScript の escape() は Version3 では deprecated で、代わりに encodeURI() と encodeURIComponent() を使うようにものの本には書いてあります。でも僕が愚かなあまり違いがわかっていなかったんですが、今日わかりました。 encodeURI() は、URI 全体として有効な文字になるようにする。なので/や:や#といった URI のデリミタとして予約されている文字はエスケープされないし、もちろん_など、とにかく URI につかっても問題ない記号はエスケープされない(馬鹿っぽい結論ですみません)。 encodeURIComponent() は、URI Component として有効な文字になるようにする。でこの URI Component というのが
次のページ
このページを最初にブックマークしてみませんか?
『oogatta のブログ』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く