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

Linked listをJavaScriptで実装

JavaScriptで双方向連結リストを書いてみる。 function List() { this._length = arguments.length; for (var i = 0; i < arguments.length; i++) { this.addLast(arguments[i]); } } Object.defineProperties(List.prototype, { length: { get: function() …

argumentsオブジェクトと仮引数の謎挙動

JavaScriptのargumentsはなかなか不思議なオブジェクトで、配列のようで配列でなかったり、関数スコープで暗黙に作られていたり、きわめつけは… function hoge(a, b) { console.log(a); arguments[0] = 5; console.log(a); } hoge(1, 2); 1 5 !? function …

コンシステントハッシュ法

社内の勉強会で使用したコンシステントハッシュ法の資料です。 私の勤務している会社のあるサービスでコンシステントハッシュを使用しているのですが、そのサービス特有の事情や裏話は資料からカットしているため、ググって出てくる一般的な知識以上の内容は…

launchdでmongoDBを自動起動

以下のようなplistを書いて ~/Library/LaunchAgent/local.mongodb.plist に保存。 <plist version="1.0"> <dict> <key>KeepAlive</key> <false/> <key>RunAtLoad</key> <true/> <key>La…</key></true/></false/></dict></plist>

括弧を含むURLをmarkdownのリンク記法に入れる

Markdownのリンク記法でURLに括弧を含む場合、( は %28 、) は %29 に置き換えればよい http://www.example.com/(hoge) というURLに対して [リンク](http://www.example.com/(hoge)) は、リンク) となってしまう。 [リンク](http://www.example.com/%28hoge%…

if-else switchイデオム

文字列でswitchするときはif-else switchイデオムを使うほうが安全 - きしだのはてな ところが、残念なことに、sがnullの場合はdefaultには飛ばず、ぬるぽが発生します。 そこで、null判定は事前にif文で行うことになるので、次のようなif-else switchイデオ…

コンパイル言語でもJavaではセキュリティホールになりうる

なぜPHPでrequire("http://...")したらセキュリティホールなのに、Goならいいのか - kazuhoのメモ置き場 コンパイル言語でも、コンパイル時にプログラムの内容が確定しない言語、実行時にライブラリをダイナミックロードして、ロードパスにhttpのURL指定でき…

agをインストールしてみた

最近話題のag(the silver searcher)をMacPortsでインストールしようとしたところ、依存解決の段でいろんなライブラリの再ビルドが始まり、しまいにはmongoDBのビルドまで始まった。 世間の流行に逆らい、あえてMacPortsを使い続けていたのだが、さすがにデ…

RedmineのリポジトリブラウザでJavaScriptがダウンロードされる

タイトル通り「見る」をクリックしてもダウンロードされてしまう。Redmineのソース中のコメントに書かれているのだがascii文字が30%以下のファイル、つまり日本語のコメントが多く書かれているファイルはバイナリファイルとして扱われダウンロードされてしま…

mongoDBで一括シャーディング

mongoDBにはシャーディング環境では動作しないクエリがある。なので、自分は開発用PC上のmongoDBもシャーディングの設定をしている。 しかし、ステージング環境等のmongoDBからmongodumpしてmongorestoreをするとシャーディング設定が消えてしまう(dropオプ…

Web業界は衰退しました

Web業界とやらに思うこと SI業界で10年前に言われていたような事が、今度はWeb業界で言われているんですね。なるほど、こんな話題が出てくるほどWeb業界は落ちぶれてオワコンというわけだ。まぁ、Web系にいた知り合いも今やみんなソシャゲ作ってるし、最初に…

RedmineをMacOSXのlaunchdで起動する。rbenv編

rbenvでインストールしたRubyを使って、Redmineをlaunchdで自動起動させてみる。 rbenvのインストール ぐぐれ。 Redmineの設定 まず、redmineを適当なディレクトリに展開する。ここでは ~/apps/redmine/current。rbenvでruby1.9.3を設定。2.0ではpassngerの…

iTerm2 を Visor のように使う方法 | Weboo! Returns. 良い事を聞いた…

SQLアンチパターン

せっかくiPad miniを買ったのに壁紙を初音ミクにして喜んでいるだけではもったいないので、電子書籍版SQLアンチパターンを購入してみました。大型本を持ち歩く気にはなりませんが、iPad miniなら通勤電車の中でも読めるのでなかなか良い感じです。 SQLアンチ…

iPad mini買ったお 解像度に合わせて縦1024px、横768pxの画像を壁紙にすると、横向きにしたとき残念な事になってしまう。回転させても奇麗に表示させたければ、縦横1024pxの正方形の画像を使うのが良いらしい。

はてなブログのMarkdownモードがシンタックスハイライト対応していたようので、編集モードをMarkdownに切り替えてみた。 var a = [1,2,3,4].map(function(e){ return e * 2; }); Githubと同じ書き方のようだ。 class Hoge def hoge puts "hoge" end end

Googleで日本語ページを除外するグリモンを修正

またGoogle検索のデザインが変わり、日本語サイトを除外して検索するグリモンが使えなくなったので修正した。https://github.com/paulownia/greasemonkey/blob/master/googleNotInJapanese.user.jsインストールは右の方のRawをクリックで。Chromeの人は、一…

streamに汎用フィルタ処理

今度は任意のfunctionをフィルタ関数として使用するstreamを書いてみた。先日書いたテキストの行処理を行うストリームと組み合わせると便利に使えそう。 var stream = require('stream'); var util = require('util'); function StreamFilter(filter){ this.…

streamを使ってnode.jsで行処理する

node.jsのstreamはディスクやネットワークのIO処理を行うためのオブジェクトだが、それ自身ではIO処理を行わず別のstreamの後処理、前処理を行うフィルタとしても使うことができる。npmを探すと書き出す前にデータの暗号化や圧縮を行うstreamライブラリなど…

mongoDBとMySQLのlimit offset skip

mongoDBにはMySQLのoffset limitに似たskip limitという機能がありますが、名前だけでなく機能的にも差異があります。意外と知られていないようなのですが、MySQLでは以下のようなSQLで最初の10件を取り出す場合でもテーブルフルスキャンされてしまいます。 …

mongoDBでだいたい新しい順番にドキュメントを取得する

mongoDBのコレクションにはnatural orderという概念があります。sortせずにfindするとインサートされた時間が古いものから順番に取得されますが、この並び順がnatural order。新しい順にドキュメントを取得したい場合は sort に { $natural: -1 } と指定すれ…

node.jsで行処理

追記:今はこちらのライブラリがおすすめwww.npmjs.com

見てるページのドメインでgoogle site検索するブックマークレット

はてなブログに移行して「ブログ検索がない、使えない、まブログ毎にドメイン違うからGoogleでsite検索ですればいいか」と思ってブックマークレットを作成した。 javascript:(function(w){if(w)location.href='https://www.google.co.jp/search?q='+encodeUR…

コラッツの問題

数学SUGEEEEEEEEってなる話聞かせて:哲学ニュースnwk コラッツの問題 - Wikipedia なんかErlangで書けって言われた気がする -module(collatz). -export([main/1]). collatz([H|T]) when H /= 1 -> case H rem 2 of 0 -> collatz([H div 2, H | T]); 1 -> col…

nextTick等へ渡す関数に引数を設定する

function hoge(name, count) { var i = 0; (function fuga() { if (i < count) { console.log(name + ":" + i++); process.nextTick(fuga); } else { console.log(name + ":end"); } })(); みたいにクロージャでnextTickに値を渡す方法だけど、関数なのだか…

Object.values

Object.keysがあるのにObject.valuesがないので ObjectUtils.values = function(obj){ return Object.keys(obj).map(function(key){ return obj[key]; }); }; ついでにkey valueをイテレーション ObjectUtils.forEach = function(obj, callback) { var keys …

日食

ベイリービーズ?

MySQLについてLTしたのこと。

ある日いきなり社内勉強会でライトニングトークしてねwwと指命されたので、MySQLの話してきました。以前サイバーエージェントのエンジニアブログに掲載された「redis、それは危険なほどのスピード」という記事で比較対象になったMySQLに関して考察した内容…

process.nextTick

ClusterとSocket.IO について - nodejs_jp | Google グループほむほむ hoge("a", 10); hoge("b", 10); function hoge(name, count) { var i = 0; (function fuga() { if (i < count) { console.log(name + ":" + i++); fuga(); } else { console.log(name + …

createObjectURLとは何か?

createObjectURL、省メモリだとかaudioの再生がスムーズだとか言われてるけど、これが何物なのか日本語の詳しい説明が見当たらないので、自分の理解を書いておく。File APIの仕様書を軽く流し読みして得た理解なので正確さは保証しない。ま、大筋は間違っち…

Object.keys

javascript の オブジェクトが空かどうかを調べる場合 - Node.js日誌βObject.keysはオブジェクトのプロパティ名を配列で返すメソッド。for inの列挙と違って hasOwnProperty が true になるものだけが返る(だからオブジェクトが空かどうか調べられる)ので…

Redmineを1.4にバージョンアップ

手元のMacにインストールしてあるRedmineを1.4にバージョンアップしてみる。Redmine1.4はruby1.9で動作する。1.8より速いので1.9で動かそう。 $ rvm install 1.9.3 $ rvm gemset create redmine $ rvm use 1.9.3@redmine実行に必要なgemライブラリを入れる。…

CSSだけでtableを縦並びにする

CSS

ブラウザがCSS2に正しく対応していればCSSだけでテーブルを縦並びに変えられるお この表組み内の全セルを,縦並びに変更したいとする。 table要素でレイアウトした場合,このような変更はしんどい。 HTMLソースを書きなおして,テーブルの全行を2行ずつに分…

Google検索日本語ページ除外のグリモンをchromeに対応

Google ChromeはネイティブでGreaseMonkeyのユーザスクリプトに対応していると聞き、試してみたところ余裕で動作しなかったので、動作するように修正しました。このユーザスクリプトは「日本語のページを検索」の下に「日本語以外のページを検索」を追加しま…

nth-of-type、nth-childの使い方

CSS

週末、Jenkinsをさらに痛く改造するためCSSを弄っていて、テーブルの行にスタイルを当てようとしたのだが、一行目のtrがヘッダ行になっていて、class指定やtheadタグも無いのでヘッダ行とそれ以外を区別する術がなくて困った。なんとか2つ目以降のtrタグに…

WEB+DBのJenkins特集

買ったぜヒャッハー特集を読めばJenkinsが↓こんな感じにパワーアップ(しません)真面目な話が聞きたければ、川口さんとかさぼてんさんの所へ行きなwww!

ES 5thなクラスを生成3

前回はFunctionオブジェクトの拡張を試してみたのだけど、ネイティブオブジェクトに独自メソッドぶら下げるの気持ち悪いという意見もあるので、クラスを作るオブジェクトを作成してみる。 var Class = (function(){ var mixin = function(trait) { Object.de…

Jenkinsの見た目をカスタマイズ

Simple Themeというプラグインを使うと、任意のCSSやJSを読み込ませる事ができるらしい。イラストはこちら。ほむらさんが「どうして?…どうしてなの?何度やってもビルドできない」とソウルジェムを真っ黒にしながら継続的インテグレーションしてくれますお…

getterとsetter / Object.create(null)

GetterとSetter ES 5thからsetterとgetterの定義が仕様に入ったわけですが… var Hoge = Object.create({}, { // プロパティ val: { set: function(a){ this._a = a }, get: function(){ return this._a } }, // メソッド add: { value: function(a){ this._a…

ECMAScript 5thなオブジェクト生成の話2

昨日書いた new を使わないインスタンス生成は、実際に使ってみると、たかだかオブジェクトの生成ごときで Object.create(Hoge.prototype).init(); とか長いし、init呼ぶの忘れそうだし、init メソッド定義しないといけないし、return this 忘れるとハマるし…

ECMAScript 5th時代のクラス定義とインスタンス生成

オブジェクトの生成にnew演算子を使わないのが今どきらしい。じゃあ、どうすりゃいいのよ?こんなんで良さげ。 var Hoge = Object.create({}, { // プロパティ val: { set: function(a){ this._a = a }, get: function(){ return this._a }}, // メソッド ad…

Firefoxのトラックパッドジェスチャをカスタマイズ

Mac

Apple信者歴18年のぬるぽんです。こんにちは。MacBook Air使ってるのにマジックトラックパッドを買いました。やー、寒いんでこたつから手を出したくないんですよねw こたつの中ではマウス操作しにくいですが、トラックパッドなら使えるのですおwwさて、Ma…

MacのlaunchdでRedmineを自動起動

Mac

以前、passengerスタンドアローン版を使って自分のMacでRedmineを自動起動するようにしたのですが、rvmをアップデート(1.10.2)したら起動しなくなったでござる!調べた結果1.8.0〜1.10.2ではダメぽでした。launchd では以下のコマンドを実行している。 /User…

Gemfile.lockってバージョン管理すべき?

Gemを作ってるなら管理すべきでない、アプリを作ってるなら管理すべき、だそうです。 When developing a gem, use the gemspec method in your Gemfile to avoid duplication. In general, a gem’s Gemfile should contain the Rubygems source and a single…

他の言語に慣れた人がRubyを使ったときにつまずきがちな点

あと4つは募集中です他の言語というかJavaしか知らなかった昔の自分がつまづいたような気がする点を4つ メソッド名がJavaと違いすぎる 慣れるしかない…Java "hoge ".trim(); Ruby "hoge ".strip ダメなうらわざ、やったら負け class String alias :trim :st…

ビット演算で小数点切り捨て

ライセンスで話題のモバゲーDeNAのJavaScriptライブラリですけど、プログラマならライセンスよりソース読んでみようぜ。え、おまえもTwitterでライセンスpgrしてただろうって?なんの事すか?コードはかなり奇麗に書かれているので、読みやすいですよ。arcti…

Automatorを使って、プレビューで画像フォルダを開く

Mac

MacOSXのプレビューはかなり便利。ちょっとした画像編集もできるし、ビュアーとしても優秀。画像の入ったフォルダをプレビューにドラッグアンドドロップすると、 Apple謹製なので当然マルチタッチジェスチャにも対応。二本指スワイプで次の画像に進めたり、…

jQuery.ajaxのdeferred

jQuery.ajaxのdeferred版、コールバック設定用のメソッド名が変わるそうで… Deprecation Notice: The jqXHR.success(), jqXHR.error(), and jqXHR.complete() callbacks will be deprecated in jQuery 1.8. To prepare your code for their eventual removal…

git pushでWebサーバに公開

Webディレクトリをまるごとgitで管理している場合に、公開もgitで出来るようにするためのメモ。まず、bareなリモートリポジトリをWebサーバ上に置いてWebDAVかSSHでpushできるようにする。次にリモートリポジトリの hooks/post-receive に以下の記述を追加す…

マージソート

次はマージソート。マージソートは要素を半分ずつ分け、半分にしたものをさらに分ける、これを全部ばらばらになるまで繰り返して、結合する。結合する時に互いの先頭を比較して小さいのから取り出していくことでソートするというアルゴリズム。例によって、…