最近のpowはコンフリクトしない。完。
powはversion毎のディレクトリを作ってlatestなものにcurrentからsymlinkが張られるのでupdateも普通にインストールするだけでいい。
$ curl get.pow.cx | sh最近のpowはコンフリクトしない。完。
powはversion毎のディレクトリを作ってlatestなものにcurrentからsymlinkが張られるのでupdateも普通にインストールするだけでいい。
$ curl get.pow.cx | shさくらVPS 512のDebian Squeezeに入れた。(さくらVPS 512にSqueezeを入れる方法はこちら)
$ sudo apt-get remove --purge apache2* apache2.2* php5*
$ sudo apt-get autoremove
$ sudo vi /etc/apt/source.list
deb http://packages.dotdeb.org squeeze all
deb-src http://packages.dotdeb.org squeeze all
$ wget http://www.dotdeb.org/dotdeb.gpg
$ cat dotdeb.gpg | sudo apt-key add -
$ rm dotdeb.gpg
$ sudo apt-get install nginx
server {
listen 80;
server_name unk.fjord.jp;
location / {
root /var/www/unk.fjord.jp;
index index.html index.php;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /var/www/unk.fjord.jp$fastcgi_script_name;
}
}
$ sudo apt-get install php5-fpm
$ sudo apt-get install php5-apc
$ sudo apt-get install mysql-client mysql-server php5-mysql
(略)
速いし良い感じッス。
// fib.js
function fib(n) {
if (n == 0 || n == 1) return n;
return fib(n - 1) + fib(n - 2);
}
$ npm install js2coffee -g
$ js2coffee fib.js > fib.coffee
// fib.coffee
fib = (n) ->
if n == 0 or n == 1
return n
fib(n - 1) + fib(n - 2)
「(既存プロジェクトのjsを変換して)ふー・・・」
「弊社もcoffee導入しました(キリッ」
$ git clone git://github.com/isaacs/nave.git ~/.nave
$ cd ~/.nave
$ ./nave.sh install stable
ここで普通は~/.zshrcとかにnave.sh use stableとか書けとありますが、設定したshellをもう一段階開くのが何か嫌だ。(確かにVirtual Environment for Nodeって感じではあるが)
キモス。
% env | grep NODE
NODE_PATH=/Users/komagata/.nave/installed/0.4.8/lib/node
% env | grep NAVE
NAVEVERSION=0.4.8
NAVE=0.4.8
NAVELVL=1
NAVE_DIR=/Users/komagata/.nave
NAVE_ROOT=/Users/komagata/.nave/installed
NAVE_SRC=/Users/komagata/.nave/src
それっぽい環境変数+PATHを手動で.zshrc設定に手動で設定することにした。
export PATH=~/.nave/installed/0.4.8/bin:$PATH
export NODE_PATH=/Users/komagata/.nave/installed/0.4.8/lib/node
export NAVEVERSION=0.4.8
export NAVE=0.4.8
export NAVELVL=1
export NAVE_DIR=/Users/komagata/.nave
export NAVE_ROOT=/Users/komagata/.nave/installed
export NAVE_SRC=/Users/komagata/.nave/src
$ curl http://npmjs.org/install.sh | sh
インストールは楽。
1.0.0から?は普通にnpm installするとcurrent directoryのnode_module以下に入る。この名前も嫌だなあ。そうするとライブラリはプロジェクト毎のnode_moduleに入り、普段使いのコマンドとして使えない。その場合は-g(global)オプションを付けてinstallすればいいらしい。
$ npm install coffee-script -g
これでcoffeeコマンドが使えるようになりました。
しかし、これだとrequire出来なくなっちゃうのでnpm link fooでglobalな場所に入ったライブラリからcurrentのnode_moduleへシンボリックリンクを貼る必要がある。これはsucksでございます。
動きの早い界隈なので暫くしたらもっと便利になるかもしれません。
Bundle 'kchmck/vim-coffee-script'
vundlerを使ってる場合は上記を.vimrcに追加して:BundleInstall。また、autocmdでファイル保存と同時にcompileするようにしてもいいけど、railsとかだとディレクトリ違うのでウザイかも。
:CoffeeMakeでコンパイル。
:'<,'>CoffeeCompile
console.log('foo');
visual選択してcompileなんてシャレオツなことも。
# Gemfile:
gem 'barista'
gem 'therubyracer-heroku'
$ rails g barista:install
coffeeをrailsに提供するからバリスタってか?heroku上ではコンパイルするためのjs実装が無いのでエラーが出る(ローカルではnodejsを使ってます)。therubyracerはv8のrubyバインディング。therubyracer-herokuはそれをherokuで動かすためのもの(何やってるのかはわからない。見てない)。
jpgのグリッチをもうちょっと。
こちらのpythonのコードをrubyで書いて幾つかのパターンを作ってみた。
#!/usr/bin/env ruby
require 'rubygems'
require 'mini_magick'
require 'base64'
path = ARGV.first
img = MiniMagick::Image.open(path)
txt = Base64.encode64(open(path, 'rb') {|f| f.read }).gsub(/\n/, '')
num = img[:width] * img[:height] / 10000
(1..32).each do |i|
glitched_txt = txt.split(//).map do |c|
if c == '0' and rand(num) == 0
rand(9).to_s
else
c
end
end.join
open("glitched-#{i}.jpg", 'wb') {|f| f.write(Base64.decode64(glitched_txt)) }
end
こっちの方が怖くていいな。
参照:サケグリッチ
夜、寝る前に布団のなかで、
(画像グリッチってデジタルなホラー表現に使えるんじゃね?)
と唐突に思い、布団から飛び起きてこちらを参考にいろんなパターンを生成するコードを書いてみた。
# glitch.rb
(1..9).each do |i|
(1..9).each do |h|
`cat bell.jpg | sed 's/#{i}/#{h}/g' > bell-#{i}-#{h}.jpg` unless i == h
end
end
元の画像はこれ。
沢山できてる。
jpgとgifを試してみたんですが、単なる文字置換なのでフォーマットの性質がモロにでて面白い。jpgの場合はカオス過ぎてもうちょっと別のパターンを使った方が良さそう。
gifの場合は何色が何個続くかってだけなので不気味感はちょっと少なめ。jpgとgifでそれぞれ怖そうなのは下記の2つぐらいかなあ。
cofeescriptを使ってみました。気になっていたのは親クラスのコンストラクタを呼ぶ方法(のスマートな書き方)。
以前は、JavaScript Good Partsに載っていたnewやprototypeを使わない方法でやっていたんですが、coffeeのextendsはどういうコードを吐くんだろう?
// foo.coffee
class Foo
constructor: (name) ->
console.log name
class Bar extends Foo
constructor: ->
super 'unk'
// foo.js
var Bar, Foo;
var __hasProp = Object.prototype.hasOwnProperty, __extends = function(child, parent) {
for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; }
function ctor() { this.constructor = child; }
ctor.prototype = parent.prototype;
child.prototype = new ctor;
child.__super__ = parent.prototype;
return child;
};
Foo = (function() {
function Foo(name) {
console.log(name);
}
return Foo;
})();
Bar = (function() {
__extends(Bar, Foo);
function Bar() {
Bar.__super__.constructor.call(this, 'unk');
}
return Bar;
})();
オブジェクト指向で書けるライブラリによくあるextends関数を作ってそれを使ってるだけでした。まあ、そりゃそうか。
coffee自体は綺麗だし、SASS/SCSSみたいに最初のうちは吐かれたjsを確認しながらになるけど、段々js見る頻度が減ってきてるので殆ど見ないで行けるようになれば使えるなーと思いました。
sqlite3-rubyをインストールしたら(tapsの依存で入る)見覚えのあるマークが。
これ、Twitterで聞いたらハートを横にしたマークなんですね。(屁的なものかと思ってた)
「sqlite3-rubyはsqlite3に変わったYO!」ってだけの警告文なのに誰が書いたのか分かるのって凄い個性ですね・・・。
authorを見に行ってみる。
やっぱりアンタか・・・。
フォーマットはhtml。epubもpdfもメンドイ。というか単なるWebサイトであって欲しい。ユーザー登録が必要なWebサイトで、サインインしていれば買った本のページが見れる。
僕にとってテキストを一番読み易いのはスマホ + 横書き + 無限縦スクロール(要はWebでよくある奴)なのでスマホでいい塩梅のレイアウトにして欲しい。(はてなダイアリーのスマホ版Webぐらいで十分読み易い)
著作権やライセンス表示はしっかりいれるが、システムで縛らず、無茶した奴をタイーホするぐらいにして欲しい。
縦書きやレイアウトにこだわりたい本は印刷物を同じページから買えるようにする。