macosxにpostgres9.0.4をインストール
macosxで作りはじめたrails3アプリ、データベースをsqlite3からpostgresに切り替える。
※rvmとrails3とmacportsはインストール済みの前提。
$ gem install pg
pg_configがないぞ、というエラー。
checking for pg_config... no No pg_config... trying anyway. If building fails, please try again with --with-pg-config=/path/to/pg_config
そこでmacportsでpostgresをインストールすることにした。以下、その手順。
最近portsを使っていなかったので、
$ sudo port selfupdate
パッケージ名を調べる
$ port search postgres
バージョン9.0.4をインストールする。
$ sudo port install postgresql90 $ sudo port install postgresql90-server
表示されたメッセージに従って以下の手順。
$ sudo port load postgresql90-server $ sudo mkdir -p /opt/local/var/db/postgresql90/defaultdb $ sudo chown postgres:postgres /opt/local/var/db/postgresql90/defaultdb $ sudo su postgres -c '/opt/local/lib/postgresql90/bin/initdb -D /opt/local/var/db/postgresql90/defaultdb'
あらためてpgのインストール
$ gem install pg -- --with-pg-config=/opt/local/lib/postgresql90/bin/pg_config Building native extensions. This could take a while... Successfully installed pg-0.11.0 1 gem installed Installing ri documentation for pg-0.11.0... Installing RDoc documentation for pg-0.11.0...
以下、rails3アプリのルートディレクトリで操作。
Gemfileに以下を追加。
gem 'pg'
バンドルのインストール。
$ bundle install ... Using pg (0.11.0) ... Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
database.ymlはこんな感じで。
test: adapter: postgresql database: june_test username: rails password: rails host: 127.0.0.1 encoding: utf8
この段階でtest/unitを実行すると
PGError: FATAL: role "rails" does not exist
ここで、ロールを追加するか、アクセス制限を緩和するか、方針を考える。
ErlangでSOAPをデコードしてみる
#!/opt/local/bin/escript -include_lib("xmerl/include/xmerl.hrl"). main(_) -> XmlData = "<soapenv:Envelope " ++ "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " ++ "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" " ++ "xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" " ++ "xmlns:cwmp=\"urn:dslforum-org:cwmp-1-0\">" ++ "<soapenv:Header>" ++ "<cwmp:ID soap-env:mustUnderstand=\"1\">999</cwmp:ID>" ++ "<cwmp:HoldRequest soap-env:mustUnderstand=\"1\">0</cwmp:HoldRequest>" ++ "</soapenv:Header>" ++ "<soapenv:Body>" ++ "</soapenv:Body>" ++ "</soapenv:Envelope>", {Header, Body} = unmarshall(XmlData), io:format("SoapHeader: ~p~n", [Header]), io:format("SoapBody: ~p~n", [Body]). unmarshall(Xml) -> {SoapEnv, _Rest} = xmerl_scan:string(Xml), [SoapHead, SoapBody] = SoapEnv#xmlElement.content, { [soap_header(C) || C <- SoapHead#xmlElement.content], [soap_body(C) || C <- SoapBody#xmlElement.content] }. soap_header(C) -> Name = C#xmlElement.name, [Value] = [Content#xmlText.value || Content <- C#xmlElement.content], Attr = [{A#xmlAttribute.name, A#xmlAttribute.value} || A <- C#xmlElement.attributes], {Name, Value, Attr}. soap_body(C) -> { C#xmlElement.name, C#xmlElement.content, C#xmlElement.attributes }.
node.jsの練習(v0.4対応)
v0.3.6でhttp.request() と http.get()が導入された。
http.Clientインスタンスを作成しclient.request()を呼ぶ従来のインターフェイスは非推奨とのこと。
var http = require('http'); http.createServer(function (req, res) { var proxy_headers = req.headers, proxy_req, options; function _options() { var host = req.headers.host, h, _host, _port; if(host.indexOf(':') > 0){ h = host.split(':'); _host = h[0]; _port = parseInt(h[1],10); } else { _host = host; _port = 80; } return { host: _host, port: _port, method: req.method, path: req.url, headers: req.headers }; } function _proxy_response(proxy_res) { var headers = proxy_res.headers; res.writeHead(proxy_res.statusCode, headers); proxy_res.on('data', function(chunk) { res.write(chunk); }); proxy_res.on('end', function() { res.end(); }); } options = _options(proxy_headers.host); if (req.method === 'GET'){ proxy_req = http.get(options, _proxy_response); } else if(req.method === 'POST'){ proxy_req = http.request(options, _proxy_response); req.on('data',function(chunk){ proxy_req.write(chunk); }); req.on('end',function(){ proxy_req.end(); }); } }).listen(8080, "localhost");
node.jsの練習
簡単なhttp proxyを書いてみた。
var http = require('http'); http.createServer(function (req, res) { var proxy_headers = req.headers, proxy_req, client; function _client(host) { var h, _host, _port; if(host.indexOf(':') > 0){ h = host.split(':'); _host = h[0]; _port = parseInt(h[1],10); } else { _host = host; _port = 80; } return http.createClient( _port, _host ); } function _proxy_response(proxy_res) { var headers = proxy_res.headers; res.writeHead(proxy_res.statusCode, headers); proxy_res.on('data', function(chunk) { res.write(chunk); }); proxy_res.on('end', function() { res.end(); }); } client = _client(proxy_headers.host); if (req.method === 'GET'){ proxy_req = client.request(req.method, req.url, proxy_headers); proxy_req.end(); proxy_req.on('response', _proxy_response); } else if(req.method === 'POST'){ proxy_req = client.request(req.method, req.url, proxy_headers); req.on('data',function(chunk){ proxy_req.write(chunk); }); req.on('end',function(){ proxy_req.end(); proxy_req.on('response', _proxy_response); }); } }).listen(8080, "localhost");
@jennyholzer
- A LOT OF PROFESSIONALS ARE CRACKPOTS
- プロの多くはイカれてる
- A RELAXED MAN IS NOT NECESSARILY A BETTER MAN
- リラックスしてる男がましな男とはかぎらない
- A SINGLE EVENT CAN HAVE INFINITELY MANY INTERPRETATIONS
- ひとつの事象には際限ない解釈がありえる
- A SOLID HOME BASE BUILDS A SENSE OF SELF
- 根拠地は自己意識を形成する
- ABSOLUTE SUBMISSION CAN BE A FORM OF FREEDOM
- 無条件降伏は自由の形式のひとつ
- ABSTRACTION IS A TYPE OF DECADENCE
- 抽象は堕落の一型式
- ACTION CAUSES MORE TROUBLE THAN THOUGHT
- 思想より行動が迷惑
- AN ELITE IS INEVITABLE
- エリートは避けられない
- ANGER OR HATE CAN BE A USEFUL MOTIVATING FORCE
- 怒りと憎しみは人を動かすのに使える
- AT TIMES INACTIVITY IS PREFERABLE TO MINDLESS FUNCTIONING
- 何もしない方が思慮に欠けた機能になるよりいいときもある
- BEING SURE OF YOURSELF MEANS YOU'RE A FOOL
- バカほど自信がある
- CALM IS MORE CONDUCTIVE TO CREATIVITY THAN IS ANXIETY
- 心配するより冷静でいる方が創造性は高まる
- CLASS STRUCTURE IS AS ARTIFICIAL AS PLASTIC
- 階級構造はプラスチックなみに人工的
- CONFUSING YOURSELF IS A WAY TO STAY HONEST
- 自分に正直になるには自分を混乱させることです
- DISGUST IS THE APPROPRIATE RESPONSE TO MOST SITUATIONS
- どんな状況であれ十中八九むかつくしかない
- DON'T PLACE TO MUCH TRUST IN EXPERTS
- 専門家を信頼しすぎないように
- DYING AND COMING BACK GIVES YOU CONSIDERABLE PERSPECTIVE
- 死からの生還は重要な透視図をもたらす
- ENSURE THAT YOUR LIFE STAYS IN FLUX
- 流動的な生活の持続を確保せよ
- EVEN YOUR FAMILY CAN BETRAY YOU
- 家族でさえあなたを裏切ることがある
- EVERYONE'S WORK IS EQUALLY IMPORTANT
- 誰の仕事であれ等しく重要
- EVERYTHING THAT'S INTERESTING IS NEW
- 面白いものはどれも新しい
- EXCEPTIONAL PEOPLE DESERVE SPECIAL CONCESSIONS
- 例外的なひとたちは特権に値する
- EXTREME BEHAVIOR HAS ITS BASIS IN PATHOLOGICAL PSYCHOLOGY
- 極端な行動は病的心理学に根拠がある
- FAKE OR REAL INDIFFERENCE IS A POWERFUL PERSONAL WEAPON
- 装っていてもいなくても無関心は強力な私的武器
- GOING WITH THE FLOW IS SOOTHING BUT RISKY
- 流れに沿っていれば不安はないけど危険
- GOOD DEEDS EVENTUALLY ARE REWARDED
- 善行はいつか報われる
- GRASS ROOTS AGITATION IS THE ONLY HOPE
- 草の根の煽動に期待するしかない
- GUILT AND SELF-LACERATION ARE INDULGENCES
- 罪と自傷は免罪符
- HUMANISM IS OBSOLETE
- 人間中心主義は流行らない
- IDEALS ARE REPLACED BY CONVENTIONAL GOALS AT A CERTAIN AGE
- ある年齢までに到達すべきありきたりな目標に差し替えられた理想
- IF YOU CAN'T LEAVE YOUR MARK GIVE UP
- 自分の印を残せなければ、あきらめろ
- IF YOU LIVE SIMPLY THERE IS NOTHING TO WORRY ABOUT
- 単純に生きていれば何も悩まない
- IT IS HEROIC TO TRY TO STOP TIME
- 英雄は時間を止めようとする
- IT IS IN YOUR SELF-INTEREST TO FIND A WAY TO BE VERY TENDER
- やさしく振る舞う術を学ぶのは自分のため
- IT'S BETTER TO BE NAIVE THAN JADED
- すれからしより世間知らずがいい
- IT'S GOOD TO GIVE EXTRA MONEY TO CHARITY
- 余ったお金で慈善するのはいいことだ
- IT'S NOT GOOD TO HOLD TOO MANY ABSOLUTES
- 絶対的なものをあまりにたくさん抱えこむのはよくない
- KNOWING YOURSELF LETS YOU UNDERSTAND OTHERS
- 自分自身を知ることで他人を理解する
- LACK OF CHARISMA CAN BE FATAL
- カリスマのなさは取り返しがつかない
- LEISURE TIME IS A GIGANTIC SMOKE SCREEN
- 余暇は巨大煙幕
- LISTEN WHEN YOUR BODY TALKS
- 体が話すときは耳をすませろ
- LOOKING BACK IS THE FIRST SIGN OF AGING AND DECAY
- 回想は老衰の最初の兆候
- LOVING ANIMALS IS A SUBSTITUTE ACTIVITY
- 動物愛好は代償行動
- LOW EXPECTATIONS ARE GOOD PROTECTION
- 期待が小さければ失うものも少ない
- MEN ARE NOT MONOGAMOUS BY NATURE
- 単婚は男性の自然ではない
- MODERATION KILLS THE SPIRIT
- 節度が精神をだめにする
- MOSTLY YOU SHOULD MIND YOUR OWN BUSINESS
- 余計なちょっかいは出すべからず
- NOISE CAN BE HOSTILE
- ノイズは敵になる
- NOTHING UPSETS THE BALANCE OF GOOD AND EVIL
- 吉と凶のバランスはひっくり返せない
- OFTEN YOU SHOULD ACT LIKE YOU ARE SEXLESS
- ときにはセックスレスのふりをすべきだ
- OPACITY IS AN IRRESISTIBLE CHALLENG
- 不透明性は抗し難い欲望をかきたてる
- PAIN CAN BE A VERY POSITIVE THING
- 傷はとても肯定的なものになりえる
- PLANNING FOR THE FUTURE IS ESCAPISM
- 将来設計は現実逃避
- PLAYING IT SAFE CAN CAUSE A LOT OF DAMAGE IN THE LONG RUN
- 安全な遊びは長い目でみればたくさんの被害をもたらす
- PUSH YOURSELF TO THE LIMIT AS OFTEN AS POSSIBLE
- 可能なかぎり何度でも自分を限界に押しやれ
- REMEMBER YOU ALWAYS HAVE FREEDOM OF CHOICE
- どんなときでも選択の自由があることを忘れないように
- RESOLUTIONS SERVE TO EASE OUR CONSCIENCE
- 決断は我々の良心をゆるめるものだ
- REVOLUTION BEGINS WITH CHANGES IN THE INDIVIDUAL
- 革命は個々人の変化からはじまる
- ROMANTIC LOVE WAS INVENTED TO MANIPULATE WOMEN
- 恋愛は女を操るためにつくりだされた
- SALVATION CAN'T BE BOUGHT AND SOLD
- 救済が売り買いされていいはずがない
- SELF-AWARENESS CAN BE CRIPPLING
- 自己認識のせいで動けなくなるかもしれない
- SELFISHNESS IS THE MOST BASIC MOTIVATION
- それをやる一番の理由は、自分のため
- SIN IS A MEANS OF SOCIAL CONTROL
- 罪はソーシャルな管理手段
- SLIPPING INTO MADNESS IS GOOD FOR THE SAKE OF COMPARISON
- 比較するために狂ってみるのはいいことだ
- SLOPPY THINKING GETS WORSE OVER TIME
- ずさんな思考がますます悪化する
- SOMETIMES THINGS SEEM TO HAPPEN OF THEIR OWN ACCORD
- ときどきモノゴトはひとりでに起きるようだ
- STRONG EMOTIONAL ATTACHMENT STEMS FROM BASIC INSECURITY
- 強い執着心は不安から生じる
- TAKING A STRONG STAND PUBLICIZES THE OPPOSITE POSITION
- 立場を強調して反対意見を訴える
- TECHNOLOGY WILL MAKE OR BREAK US
- テクノロジーはわれわれを作り、あるいは壊すだろう
- THE FUTURE IS STUPID
- 未来はばかげている
- THE IDEA OF TRANSCENDENCE IS USED TO OBSCURE OPPRESSION
- 超越という概念は抑圧をぼかすために使われる
- THE NEW IS NOTHING BUT A RESTATEMENT OF THE OLD
- 新しいものは古いものを言い換えただけ
- THE ONLY WAY TO BE PURE IS TO STAY BY YOURSELF
- 純粋になる唯一の方法は独りでいること
- THERE'S NOTHING EXCEPT WHAT YOU SENSE
- 感覚できるものがすべて
- THERE'S NOTHING REDEEMING IN TOIL
- 労苦を埋め合わせるものはない
- THINKING TOO MUCH CAN ONLY CAUSE PROBLEMS
- 考えすぎは問題を起こすだけ
- UNIQUE THINGS MUST BE THE MOST VALUABLE
- 他に存在しないものは一番高く売れなければならない
- UNQUESTIONING LOVE DEMONSTRATES LARGESSE OF SPIRIT
- 疑いのない愛が示す精霊の贈りもの
- VIOLENCE IS PERMISSIBLE EVEN DESIRABLE OCCASIONALLY
- 暴力はそれが望ましいときでさえ許される
- WISHING THINGS AWAY IS NOT EFFECTIVE
- あれがなければと思うのは実効的でない
- YOU ARE A VICTIM OF THE RULES YOU LIVE BY
- あなたはあなたの規則の犠牲者
- YOU ARE RESPONSIBLE FOR CONSTITUTING THE MEANING OF THINGS
- あなたはその意味が構成されるのに関与している
- YOU ARE THE PAST PRESENT AND FUTURE
- 他者は時間である
- YOU CAN'T FOOL OTHERS IF YOU'RE FOOLING YOURSELF
- 自分を嗤うものは他人を嗤えない
- YOU MUST BE INTIMATE WITH A TOKEN FEW
- わずかな印と親密に
- YOU MUST HAVE ONE GRAND PASSION
- 熱愛の対象をひとつ持たなければならない
- YOUR ACTIONS ARE POINTLESS IF NO ONE NOTICES
- 誰も注目しない行動は無意味
パウルクレーの色彩円環
『教育スケッチブック』Fig.87をモチーフに作図
void setup() { size(320, 460); colorMode(HSB,360,100,100); background(#FFFFFF); fig86(); translate(-width/2, -height/2); fig87(); } void fig86() { strokeWeight(2); smooth(); translate(width/2, height/2); for(float h=0; h < 360; h+=0.25){ float s = 99; float b = 99; for(int r=79; r > 0; r--){ float a = r / 79.0 * 90.0; b = 99.0 * sin(radians(a)); float ch = h; if(h < 120){ ch = h / 2; } else if(h < 180){ ch = h - 60; } else if(h < 240){ ch = 120 + (h - 180)* 2; } else { ch = h; } color c = color(ch, s, b); float x = r*cos(radians(h-60.0)) + width / 2; float y = r*sin(radians(h-60.0)) + height / 2; set((int)x, (int)y, c); } } stroke(0,0,100,128); for(int i = 0; i < 6; i++){ line(0,0,80*cos(radians(60*i)),80*sin(radians(60*i))); } noFill(); stroke(#ffffff); ellipse(0, 0, 160.0, 160.0); } void fig87() { stroke(#000000); smooth(); translate(width/2, height/2); fill(#666666); ellipse(0,0,30,30); int s = 99; int b = 99; for(int i=0; i < 6; i++){ switch(i){ case 0: fill(29,s,b); // ORANGE break; case 1: fill(59,s,b); // YELLOW break; case 2: fill(119,s,b); // GREEN break; case 3: fill(239,s,b); // BLUE break; case 4: fill(299,s,b); // VIOLET break; case 5: fill(0,s,b); // RED break; } ellipse(80*cos(radians(60*i)),80*sin(radians(60*i)),60,60); line(0,0,50*cos(radians(60*i)),50*sin(radians(60*i))); } noFill(); ellipse(0,0,160,160); }