sk4

helvetica ほしい

経緯

swf上で、文字をグリグリ変形させたい。フォントを指定した上で。
フォント埋め込み→ベクター化(flashでいう分解みたいな)とか出来ればいいんだけど、ぐぐったけど無理そう。 

あれ、そういえばPapervision3dとか、ベクターのフォントに対応してたような気がするけどどうなってるんだろう

Papervision3Dソース見てみる

helvetiva フォントのベクター情報がびっちり
__motifs["A"] = 'M',[34.4,43.75,['L',[43.35,69.9]],...みたいな。すっごい力技。

これを拝借してうまい具合にできないもんか。
helvetica自体は埋め込んでも問題なさそうだし(制限はあるけど

ってことは、僕がhelveticaのライセンスを持ってれば解決するのでは!

ほしい

補足&自分用まとめ

Q.helvetica、お高いんでしょう?
A. http://new.myfonts.com/fonts/adobe/helvetica/

Q.勝手にPapervision3Dのフォントデータ使っていいのか?
A.ライセンス確認しよう
 → MITだったので多分大丈夫、っていうかよくみたらフォントの部分は別ライブラリだった!(FIVe3Dというやつ。これもMIT。平気そう)

Q.他のフォントで似たようにできないの?
 Papervison3Dのhelveticaのフォントデータはどうやって作成したんだろう?
A.FIVe3Dのサイトから、フォントデータを作成するためのライブラリ?を落とせるらしい!: 参考
 これつかえばできるらしい!
 でもflashがいるらしい...

つまり

helvetica使う → フォント買って、FIVe3Dのフォントデータ使えばおk
その他のフォント使う → flash買う必要あり
ということかな

rails 関連で割とどうでもよいメモ

気になった処理を追う

Rails 2.3.5

class User < ActiveRecord::Base
  has_many :hobbies
end
class Hobby < ActiveRecord::Base
  beloings_to :user
end

こんな関係のクラスがあったとして、

コンソールで1人ユーザーを適当にとってきて、

ruby script/console
>>
>> aaa = User.find :first
=> #<User id: 1, name: "test">


ユーザーのインスタンスからホビーをみてみると、

>> aaa.hobbies
=> [#<Hobby id: 1, user_id: 1>, #<Hobby id: 2, user_id: 1>]
>>

こんな感じで配列がかえってきます。

>> aaa.hobbies.class
=> Array

まちがいなく配列ですね。


でも、

>> aaa.hobbies.create
=> #<Hobby id: 3, user_id: 1>

こんなことできちゃう。

>> aaa.hobbies.methods.grep(/create/)
=> []

Array に create なんてメソッドないのに。。。
なんで??

で、ちょっとgrepとかで探してみた。

vendor/rails/activerecord/lib/active_record/associations/association_collection.rb

 15     # Association proxies in Active Record are middlemen between the object that
 16     # holds the association, known as the <tt>@owner</tt>, and the actual associated
 17     # object, known as the <tt>@target</tt>. The kind of association any proxy is
 18     # about is available in <tt>@reflection</tt>. That's an instance of the class
 19     # ActiveRecord::Reflection::AssociationReflection.
 20     #
 21     # For example, given
 22     #
 23     #   class Blog < ActiveRecord::Base
 24     #     has_many :posts
 25     #   end
 26     #
 27     #   blog = Blog.find(:first)
 28     #
 29     # the association proxy in <tt>blog.posts</tt> has the object in +blog+ as
 30     # <tt>@owner</tt>, the collection of its posts as <tt>@target</tt>, and
 31     # the <tt>@reflection</tt> object represents a <tt>:has_many</tt> macro.
 32     #
 33     # This class has most of the basic instance methods removed, and delegates
 34     # unknown methods to <tt>@target</tt> via <tt>method_missing</tt>. As a
 35     # corner case, it even removes the +class+ method and that's why you get
 36     #
 37     #   blog.posts.class # => Array
 38     #
 39     # though the object behind <tt>blog.posts</tt> is not an Array, but an
 40     # ActiveRecord::Associations::HasManyAssociation.

このへんかな。
とりあえず

  not an Array, but an ActiveRecord::Associations::HasManyAssociation

だけよんだ。

こんどちゃんとみたいのでめも。

find で conditions に in をいくつか指定

names = ["たろうくん", "ひとしくん", "はなこさん"]
find(:all, :conditions => ["name in ( #{Array.new(names.size,'?').join(',')} )", *names])

こんなんでいいのかな。
いい感じに書けるなにかが用意してあったりしないだろうか

autotest 環境整える

ぐぐると色々でてくるんだけど、autotest が新しめのと古いのだと違うみたい。
ちょっとこんがらがったよ。

まずいれる
gem install ZenTest
gem install autotest_screen
gem install autotest-rails
gem install redgreen
設定ファイルをコピー

cp /home/sk4/.gem/ruby/1.8/gems/ZenTest-4.2.1/example_dot_autotest.rb ~/.autote

早速設定する

vim ~/.autotest

# 2行追加
require 'redgreen'
require 'autotest/screen'

rspec 使うので環境変数も設定します

export RSPEC=true

※ここ参照 http://blog.s21g.com/articles/913

できた。

なにこれすごいいいかんじ...

windowsmacgrowl とかそれ系のが良さげですね

ついでにテスト用サーバを立ち上げっぱなしにするように

参考: http://blog.tkmr.org/tatsuya/show/361-rails-macosx-rspec-zentest-growl

RAILS_ROOT/spec/spec.opts に --drb を追記
こんなかんじになりました。

$ cat spec/spec.opts 
--colour
--format progress
--loadby mtime
--reverse
--drb

参考元とはちょっと違い、spec_server はgemで入れる必要があるのでインストール
ここみながら。rspec-rails-1.2.9 から spec_server が 別gem になりました - yuumi3のお仕事日記

$ gem install spork

で、RAILS_ROOT に移動して、

$ spork --bootstrap
Using RSpec
Bootstrapping /home/sk4/projects/test_app/spec/spec_helper.rb.
Done. Edit /home/sk4/projects/test_app/spec/spec_helper.rb now with your favorite text editor and follow the instructions.

なんか、spec_helper.rb に require 'spork' とか足してくれたっぽい。

で、立ち上げる

ruby script/spec_server

たぶんこれでよいはず。
ちゃんとうごいてますおめでとう

rails でアプリ作成準備

DB作成
su - postgres
createdb test_app_test
createdb test_app_dev
プロジェクト作成
rails test_app
cd test_app
ruby script/generate rspec
ruby script/generate rspec_model User name:string
vim config/database.yml
development:
  adapter: postgresql
  database: test_app_dev
  username: postgres
  password: postgres
                                  
test:
  adapter: postgresql
  database: test_app_test
  username: postgres
  password: postgres
cd vendor/plugins
gem unpack rspec
gem unpack rspec-rails
mv rspec-1.3.0 rspec
mv rspec-rails-1.3.0 rspec-rails
migrateしてみる
$ rake db:migrate
(in /home/sk4/projects/test_app)
rake aborted!
No such file or directory - /tmp/.s.PGSQL.5432

エラーになった。
ubuntuだとtmpファイルの場所が他と違うところに設定されるよう。
http://blog.memo.vg/2008/09/ubuntupostgresql.html
ここを参考に、unix_socket_directory を '/tmp' に設定して再起動。

sudo vim /etc/postgresql/8.4/main/postgresql.conf
sudo /etc/init.d/postgresql-8.4 stop
sudo /etc/init.d/postgresql-8.4 start

そしたら、

$ rake db:migrate
(in /home/sk4/projects/test_app)
rake aborted!
FATAL   C28000  MIdent authentication failed for user "postgres"        Fauth.c L273    Rauth_failed

(See full trace by running task with --trace)

こんなエラー。

これも上記参考サイトに権限が足りなくてでてると書いてあったので、そこに書いてあるとおり pg_hba.conf の設定変更。
で、再起動。

sudo vim /etc/postgresql/8.4/main/pg_hba.conf
sudo /etc/init.d/postgresql-8.4 stop
sudo /etc/init.d/postgresql-8.4 start

すると…

rake db:migrate 
(in /home/sk4/projects/test_app)
rake aborted!
undefined method `quote_ident' for PGconn:Class

(See full trace by running task with --trace)

なんか違うエラーが。
ぐぐったところ、これは postgres-pr が新しめの rails に対応してないかららしい。
Google グループ
ここに書いてあるとおりのことをやってみる。

vim config/initializers/new_rails_defaults.rb

で、

 def PGconn.quote_id(name)
   %("#{name}")
 end

を最初に追記。

rake db:migrate
(in /home/sk4/projects/test_app)
==  CreateUsers: migrating ====================================================
-- create_table(:users)
   -> 0.0551s
==  CreateUsers: migrated (0.0552s) ===========================================

やっとできた。。

てすとも。

rake db:migrate RAILS_ENV=test

テストコード実行してみる

ruby script/spec -c spec/
.

Finished in 0.024017 seconds

1 example, 0 failures

よし。
時間かかったから準備のみで終了。
そういえば、こないだ ubuntu きどうしない!とわめいていましたが、結局ディストリを再インストールしました。。

はてな有料版のお試し中

昨日か一昨日か、書いて消した記事の書き直しです。
ちなみに記事消した理由は、記事に内容がまとまってなくって言いたいことが意味不明で後で見直したら恥ずかしくなってつい消しちゃったという感じです。

さて。さりげなくはてなの有料版(お試し期間)にしてみまして、ファイルのアップロードが出来るようになったから swf あげようとして別のとこではまったりしていました。
swf の中から 別ファイル(3dのモデルデータね)を読み込みたかったんだけど、これがうまくいかなくてね。。エラーがでるんですよ。

そのときにflashプレーヤーが吐いたエラーは以下。

Error #2044: ハンドルされていない securityError : text=Error #2048: セキュリティサンドボックス侵害 : https://file-hatena.com/diary/files/sk4/files/xxx.swf?expire=xxx&session_key=xxxは http://d.hatena.ne.jp/sk4/files/sune.mqo からデータを読み込めません。

これはあれですね。異なるドメイン間ではセキュリティ上の理由でむやみやたらにやりとりできませんというアレ。

そもそも何で両方はてなにあげたのにドメイン違うって言われるのかというと、swf のURL的には http://d.hatena.ne.jp/sk4/files/xxx.swf のようになっているのですが、アクセスすると別ドメイン(file-hatena.com)にリダイレクトされるみたい。
なので実際には、https://file-hatena.com/diary/files/sk4/files/xxxxxx このようになります。アップロードしたファイル全部ね。

アップロードしたファイル全部ならドメインも一緒でもんだいねーじゃんか、という感じなんですが、まぁ実際そうで問題なかったんですけど、僕が1つ勘違いをしていまして。

swf からモデルデータ読み込む際、読み込み先のパスを http://d.hatena.ne.jp/sk4/files/xxx.mqo としてたんですが、この形式のパスはファイルに直なんじゃなくって、http://d.hatena.ne.jp ドメインから iframe でデータを返しているみたいです。
モデルデータを読み込むつもりが d.hatena.ne.jp からのiframeが書いてあるhtmlを読み込んでいたわけですね。

なので当然、swfが file-hatena.com ですから、どめいんちげーよと怒られていたと。

解決法(未完)

swf からファイル読み込む際に、dパラメータを付与してやれば html かました状態じゃなくて、直接ファイルを返してくれるみたい。
こんな感じに。

http://d.hatena.ne.jp/sk4/files/xxx.mqo?d=y

そうすると、d.hatena.ne.jp になってますがそっからリダイレクトされて直接 file-hatena.com からデータ取得できます。

常識だよ!と思われるかもしれませんが。。知らなかったんだよ。

まぁそのように修正しても結局別エラーでちゃって、そんでまだこの話は未完なんですけどね。

TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。

これは今度調べよう。

ちなみに、crossdomain.xmlは置かないそうです。
http://i.hatena.ne.jp/idea/8635

2010-1-17 追記

だめかも。

とりあえず

TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。

これは、モデルデータの読み込みが完了していないのに次の処理をしていたところが問題のよう。なんでまた別の問題か。

で、そこなおしたんですけど、セキュリティサンドボックス侵害のエラーは相変わらずでてます。

そもそも、リダイレクト後にドメインが同じになるから問題ない、っていう考えが間違っている気がしてきた。
読込先のドメインがswfと違った時点でこの制限に引っかかっちゃうのかな。そうだよね。

Embed とかで埋め込めないもんかな。

BetweenAS3練習

BetweenAS3のさわりだけ。

BetweenAS3ってのはトゥイーン系のライブラリです。

ていうか似たようなライブラリありすぎてどれにすべきなのか分かりません。。

wonderfl build flash online | 面白法人カヤック


そういえばこないだ入れたubuntu、起動しなくなった><

shなんてコマンドねーよとか言われる始末。

直前の、アップデートマネージャ?による大量アップデートのせいかなぁ。どうしたもんかね

ubuntu 9.10(64-bit)

年末ということでHDDの中も大掃除していたんですが、意外に中身詰まってたみたいで、全然片付かず。
途中で面倒くさくなり「いっそ新しくOSいれちゃえばいいんじゃない?」ということでubuntuをインストールしてみることにしました。

パーティションきってある1つのHDDの中にvista残しつつubuntuいれましたよ。あれ?全然掃除できてない?
以下、その過程の軽いメモです。

入れたもの

ubuntu 9.10(64-bit)

64-bitのマシンは初めてだったり。
日本語環境用にオリジナルubuntuにパッケージを追加した「日本語 Remix CD」というものがあったんですが、こちらは64-bitのものがみつからなかったため本家からDLしてきました。

Get Ubuntu | Download | Ubuntu
Alternative download options, including Ubuntu installer for Windows のリンクをクリックすると64-bitえらべます)

イメージファイル名が ubuntu-9.10-desktop-amd64.iso になってて不安になりましたが、intelのでもこのファイルでよいそう。

落としてきたのをCDに焼いてセットしてマシンを起動させインストール。
インストール自体は特に問題なく完了。swap4GBにした。ファイルシステムext4

インストール後やったこと

ネットワーク設定

System -> Preferences -> Network Connections から設定。
つながるようになったけど、Update Manager からもろもろアップデートかけたらつながんなくなった。
同じように設定してもだめだったので、CUIから設定。

$ sudo vi /etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.1.4
network 192.168.1.0
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameservers 192.168.1.1
$ sudo vi /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.1.1

で、

$ sudo /etc/init.d/networking restart

つながった!

デュアルディスプレイ対応

ここをみながらNVIDIAのドライバをいれたらおkでした。
デュアルモニタ | アタシのUbuntu備忘録
[nvidiaドライバを導入する方法 - 第2版] by ひねもすLinux

といってもやったことは

$ sudo apt-get install build-essential linux-source linux-headers-`uname -r` xserver-xorg-dev

だけかな。
そのあとリブートかけて、

System -> Administration -> Hardware Drivers で、Recommendedってなってる方をぽちって、avtivateをすると、色々ドライバ落として入れてくれます。リスタートが必要ですよといわれたのでやる。

設定は、

$ sudo nvidia-settings

からね。
sudoからやんないと権限なくて保存できないです。

日本語入力

http://wassr.jp/user/tenforward/statuses/qtSLLPwChg

分かった.入力メソッドに二つ Anthy がある.しかも,デフォルトで追加されているのはそっけない何の設定も出来ない方だ.どう違うんだ? こんなの分かるわけないやん.まあ,最初から日本語環境整ったやつでインストールしたらええんやろうけど.

こことまったく同じはまりかたをしました。
日本語入力できないAnthyで頑張ってたけど、ibus-anthyをインストールしてリブートかけたら新しくいれたAnthy(王冠のマークのやつ)が設定できるようになってたのでそれ設定していいかんじに。

$ sudo apt-get install ibus-anthy
キーバインディングをちょっと変更

職場ではmac + HHKpro という環境で、コマンドキーとスペースで日本語/英字の入力を切り替えているので、それに合わせる。
掃除しようとpro持って帰ってきてたのでproで設定しますが、おうちのはliteです。けど一緒ですよねきっと。

ここを参考に。
ubulog: キーバインディングを変えてみた

xevコマンドでスペース両隣のキーコードしらべたら、左ダイヤ=133、右ダイヤ=134とのこと。
ついでに右altも僕は使わないので、適当に割り当て。こいつは108でした。

以下の割り当てにしてみます。
左ダイヤ(133)=Ctrl key
右ダイヤ(134)=Hyper key
右オルト(108)=Super key

なんだハイパーとかスーパーとか。
まぁいいや。
とりあえず左ダイヤにあてたCtrl keyとスペース同時押しで日本語入力に切り替わるように設定。
IBusの設定でできます。ほんとはMeta+spaceでできるようにしたかったんだけどうまく設定できず)

vi ~/.Xmodmap
clear Control
keycode 133 = Control_L
keycode 37 = Control_L
keycode 134 = Hyper_R
keycode 108 = Super_R
add Control = Control_L

こんな感じになりました。

で、再読み込み。

xmodmap ~/.Xmodmap

でもなんか変なんだよなぁ。
例えばfirefoxだとダイヤキーに割り当てた方のCtrlキー+C でコピーとかできない。
普通のCtrlキーだとできるんだけれども。後で確認。

デスクトップにごみばこ

ゴミ箱やっぱりほしいよねということで。

$ gconftool-2 --type bool --set /apps/nautilus/desktop/trash_icon_visible

これから

開発関連もろもろいれなきゃ。。

ubuntuに追加で色々インストール

(勝手に追加していくかも)

postgresql
sudo apt-get install postgresql
sudo passwd postgres
su - postgres
createdb test20091230
psql test20091230

(initdbみつからなくてやってないけどできた。勝手にやってくれたのかな)

memcached
sudo apt-get install memcached
ruby
sudo apt-get install ruby ruby1.8-dev irb rdoc ri
gem
wget  http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz
tar zxvf rubygems-1.3.5.tgz rubygems-1.3.5/
cd rubygems-1.3.5/
sudo ruby setup.rb
sudo ln -s /usr/bin/gem1.8 /usr/bin/gem
postgres-pr
gem install postgres-pr
mongrel
gem install mongrel
memcache-client
gem install memcache-client
rails
gem install rails
export PATH=$PATH:~/.gem/ruby/1.8/bin
sudo apt-get install libopenssl-ruby
rspec
gem install rspec
gem install rspec-rails --version '=1.3.0' # rspecと合わせた
ZenTest
gem install ZenTest
cucumber
gem install cucumber
vim plugin
gem install vim-ruby

gem listはこんなかんじ。

$ gem list

*** LOCAL GEMS ***

actionmailer (2.3.5)
actionpack (2.3.5)
activerecord (2.3.5)
activeresource (2.3.5)
activesupport (2.3.5)
builder (2.1.2)
cgi_multipart_eof_fix (2.5.0)
cucumber (0.5.3)
daemons (1.0.10)
diff-lcs (1.1.2)
fastthread (1.0.7)
gem_plugin (0.2.3)
json_pure (1.2.0)
memcache-client (1.7.7)
mongrel (1.1.5)
polyglot (0.2.9)
postgres-pr (0.6.1)
rack (1.0.1)
rails (2.3.5)
rake (0.8.7)
rspec (1.2.9)
rspec-rails (1.2.9)
term-ansicolor (1.0.4)
treetop (1.4.3)
vim-ruby (2007.05.07)
ZenTest (4.2.1)
いろいろ
sudo apt-get install zsh
sudo apt-get install vim
sudo apt-get install ctags

あんまテストやんない子なんですけどそれ系を勢いでかなり入れてしまいました。
頑張ろうという想いを込めて。

あとぽすぐれ、ソースから入れたほうがよかったかも。
ubuntu特有コマンドとかあってなんか微妙。そもそもどこにどう入ったのかわからない。

…あとやることはなんだろ。
vimを自分色にするのと、flashと、あ、あとiTunes的なアプリをいれよう。appleLossless聴けるやつ。
年明けかなー。