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

glitched-16

こっちの方が怖くていいな。

参照:サケグリッチ

夜、寝る前に布団のなかで、

(画像グリッチってデジタルなホラー表現に使えるんじゃね?)

と唐突に思い、布団から飛び起きてこちらを参考にいろんなパターンを生成するコードを書いてみた。

# 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

jpgとgifを試してみたんですが、単なる文字置換なのでフォーマットの性質がモロにでて面白い。jpgの場合はカオス過ぎてもうちょっと別のパターンを使った方が良さそう。

gif

gifの場合は何色が何個続くかってだけなので不気味感はちょっと少なめ。jpgとgifでそれぞれ怖そうなのは下記の2つぐらいかなあ。

bell-8-6

bell-7-8

参照:hysysk:blog: today's glitch 3

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の依存で入る)見覚えのあるマークが。

Terminal — zsh — 80×24

これ、Twitterで聞いたらハートを横にしたマークなんですね。(屁的なものかと思ってた)

「sqlite3-rubyはsqlite3に変わったYO!」ってだけの警告文なのに誰が書いたのか分かるのって凄い個性ですね・・・。

authorを見に行ってみる。

sqlite3-ruby | RubyGems.org | your community gem host

やっぱりアンタか・・・。

フォーマットはhtml。epubもpdfもメンドイ。というか単なるWebサイトであって欲しい。ユーザー登録が必要なWebサイトで、サインインしていれば買った本のページが見れる。

僕にとってテキストを一番読み易いのはスマホ + 横書き + 無限縦スクロール(要はWebでよくある奴)なのでスマホでいい塩梅のレイアウトにして欲しい。(はてなダイアリーのスマホ版Webぐらいで十分読み易い)

著作権やライセンス表示はしっかりいれるが、システムで縛らず、無茶した奴をタイーホするぐらいにして欲しい。

縦書きやレイアウトにこだわりたい本は印刷物を同じページから買えるようにする。

懸念点

  1. 無法者やそもそも著作権に頓着しない外人への対応。
  2. 所有感がないこと。(僕は気にならないが)

PayPal Express Checkout, Subscriptionsに行ってきました。

発表の内容については@mochizさんがまとめられています。

Ninjava/PayPal Express Checkout, Subscriptions - Tokyo PayPal Develope... - mochiz blog」 

結論からいって僕は凄く面白かったです。発表の内容も参考になったし(RecurringPaymentが10秒ぐらいPendingになるとか)、何よりいつもの勉強会やイベントなどと違うカオス感が斬新でした。それに、どんなイベントでも一回目っていうのは濃い人が集まるもので、大体面白いものなんですよね。

僕は普段、どういうイベントなのか想像が付く場合は、「後でスライドみればいいかな?」と思って行かないことが多いんですが、今回はイベントの立ち上げ方から実際のイベント、飲み会と予想できない/はじめてのことだらけで楽しかったです。

発表は半分が日本語、半分が英語で、会場は日本語通じる率90%、英語通じる率70%みたいな感じでカオス。僕も英語の部分は20%ぐらいしかわかりませんでしたw。

でも技術に関しては共通なのでなんとかなるもんで、適当に酔っ払いました。

こういうイベントを@mreinschさんがまた企画しているのでまた行ってみたいと思います。

ttfのwebfontをWebFont Loaderで読み込む時に"fontがapplication/octet-streamになってるぞ"みたいなnoticeが出る。

ローカル(WEBrick)では出てなかったので気付かなかったがHeroku(nginx + thin)では出てる。

キモイので自前のnginxがあるサーバーにfontを移して/etc/nginx/mime.typesに下記を追加。

application/x-font-ttf    ttf;

ブラウザのDeveloper ToolsのNetworkでcontent-typeが楽に確認できて便利。

怖話

まだ空きがあるはず!今日はTokyo PayPal Developers Groupのイベントですよ!

PayPal Express Checkout, Subscriptions - Tokyo PayPal Developers Group

セレゴ・ジャパン様がミーティングルームとプロジェクターを貸してくださいました。場所は渋谷駅の北川、セルリアンタワーから歩いて2分ほどです。地図:http://www.cerego.com/en/contact-us/

開場は19:30から、発表の開始は20:00頃です。イベント終了後、おそらく近くのお店で懇親会が行われます。

paypal-express@novさんのお話も絶対聞きたいし、@mreinschさんが作った、簡単にPayPalの定期支払いが出来るRailsプラグインのsubscription_fuも超注目なのです。

っていうか、今やってる仕事のプロジェクトでもsubscription_fu使うので行かなければならないのです。そしてsubscription_fuの低レイヤー部分はpaypal-expressに置き換えられる予定なので両方必聴なのです。

iOS Simulatorは深っかいディレクトリにあっていつもググるのでSpotlightなどのLauncherの検索パスに含めておく。

/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications

Alfred Preferences

僕の場合はAlfredなのでこんな感じ。

Alfred

# Gemfile:
group :development
  gem 'haml-rails'
end

真面目なサイトを作る時になんでSlimじゃなくてHamlかっていうと、ちょこちょこバグがあるからです・・・。