green |
2008/06/27(金) 11:22
このブログにも貼りましたが、Flashによる求人広告バナーを作りました。
見ての通り3Dで求人が回ってます。回ることの意味は考えちゃいけませんw
greenでのアフィリエイトも付けられるので、ブログやHPに貼りたいという方はこちらまでお問合わせください。
このアフィリエイトの報酬についてちょっと説明すると、
◆他社アフィリエイトでの報酬
・1クリック10円とか、1会員登録200円などの集客への対価
・商品購入した場合に商品代金の2%などの商品紹介への対価
なので、より多くのPVやクリックを集めればよいものが多いです。
が、greenのアフィリエイトは行動ベースでの成果報酬になっています。
どういうことかというと、
◆greenアフィリエイトでの報酬
・求人紹介したブログなどから会員登録後、その会員が転職決定時に25,000円
・紹介した求人に転職決定時には、さらに25,000円
というちょっと先の長い成果に対する対価です。
これのよいところは、
・紹介者は、自身が詳しい業界や職種の求人を詳しく紹介することで、長期的に高額な収入が得られる可能性がある(一人だけ転職決定でも25,000円)
・転職者は、クリック稼ぎなどの紛らわしい情報ではなく、紹介者の持っている知識を頼りに、より自身にあった求人を探すことができる
といった、紹介者・転職者双方にメリットがあるモデルを考えました。
転職サイトからの一方的な情報や、企業の求人広告だけではわからない情報を、ブロガーの方たちが補足・付加して紹介することで、最適な転職先を見つけて頂きたいですね。
ちなみに、現状の仕事に満足している人は、無理に転職はする必要はないと思っています。むしろ、満足している人が増えた方が(経済的にも、保安的にも)世の中の安定に繋がると思います。
ただ、仕事は生活の大半を占めるので、自分に合わない職場環境にいる人は、毎日の生活も楽しくないのではないかと思います。そういった人はより自分の可能性を広げられる職場を探すのも、毎日を楽しくする手段の一つじゃないかな、と思っています。
さらにいうと、適職に就ける人が増えればその分生産性も上がるので、日本経済全体のパフォーマンスも少しは上がるのでは、なんて想像もしています。
[追記]
そういえば、報酬は現金ではなくAmazonギフト券です。換金は行えないので、予めご了承ください。
(Amazonギフト券の利用方法は自由ですが、自己責任でお願いします)
見ての通り3Dで求人が回ってます。回ることの意味は考えちゃいけませんw
greenでのアフィリエイトも付けられるので、ブログやHPに貼りたいという方はこちらまでお問合わせください。
このアフィリエイトの報酬についてちょっと説明すると、
◆他社アフィリエイトでの報酬
・1クリック10円とか、1会員登録200円などの集客への対価
・商品購入した場合に商品代金の2%などの商品紹介への対価
なので、より多くのPVやクリックを集めればよいものが多いです。
が、greenのアフィリエイトは行動ベースでの成果報酬になっています。
どういうことかというと、
◆greenアフィリエイトでの報酬
・求人紹介したブログなどから会員登録後、その会員が転職決定時に25,000円
・紹介した求人に転職決定時には、さらに25,000円
というちょっと先の長い成果に対する対価です。
これのよいところは、
・紹介者は、自身が詳しい業界や職種の求人を詳しく紹介することで、長期的に高額な収入が得られる可能性がある(一人だけ転職決定でも25,000円)
・転職者は、クリック稼ぎなどの紛らわしい情報ではなく、紹介者の持っている知識を頼りに、より自身にあった求人を探すことができる
といった、紹介者・転職者双方にメリットがあるモデルを考えました。
転職サイトからの一方的な情報や、企業の求人広告だけではわからない情報を、ブロガーの方たちが補足・付加して紹介することで、最適な転職先を見つけて頂きたいですね。
ちなみに、現状の仕事に満足している人は、無理に転職はする必要はないと思っています。むしろ、満足している人が増えた方が(経済的にも、保安的にも)世の中の安定に繋がると思います。
ただ、仕事は生活の大半を占めるので、自分に合わない職場環境にいる人は、毎日の生活も楽しくないのではないかと思います。そういった人はより自分の可能性を広げられる職場を探すのも、毎日を楽しくする手段の一つじゃないかな、と思っています。
さらにいうと、適職に就ける人が増えればその分生産性も上がるので、日本経済全体のパフォーマンスも少しは上がるのでは、なんて想像もしています。
[追記]
そういえば、報酬は現金ではなくAmazonギフト券です。換金は行えないので、予めご了承ください。
(Amazonギフト券の利用方法は自由ですが、自己責任でお願いします)
Misc |
2008/05/10(土) 01:41
これおもしろーい。Phunっていうソフト。
直感的に操作できるのが素晴らしい。っていってもまだ入れてもいないけど。ダウンロードしただけ。
ここからダウンロードできます。
でもここ↓までリアルだとちょっと感動が薄れるのはなぜ?
リアリティは作られたものと認識した時点で価値が激減するということかな?
直感的に操作できるのが素晴らしい。っていってもまだ入れてもいないけど。ダウンロードしただけ。
ここからダウンロードできます。
でもここ↓までリアルだとちょっと感動が薄れるのはなぜ?
リアリティは作られたものと認識した時点で価値が激減するということかな?
green |
2008/04/08(火) 10:40
本物の役者さん、結構いいカメラ、Finalcutを使って、本格的に作ってみました。
といっても別に僕が作ったわけではなく、元役者のスタッフが一人で頑張ってネタ仕込み&撮影を引っ張ってやってくれました。
(最後のオチが若干弱いですがw)なかなかのクオリティで、良い出来だと思うのですが。
特に編集が素晴らしい。こういうビデオって、音取りと編集でほとんどのクオリティが決まったりするものなんですが、よくできてると思います。
しかもこういうのをYouTubeに上げたりして、こうやってネットに公開・紹介できるのって、改めてすごい世の中になってきたなー、と思う今日この頃です。
今後もいろいろやって行きたいですなあ。
ぜひ一度ご覧ください↓
といっても別に僕が作ったわけではなく、元役者のスタッフが一人で頑張ってネタ仕込み&撮影を引っ張ってやってくれました。
(最後のオチが若干弱いですがw)なかなかのクオリティで、良い出来だと思うのですが。
特に編集が素晴らしい。こういうビデオって、音取りと編集でほとんどのクオリティが決まったりするものなんですが、よくできてると思います。
しかもこういうのをYouTubeに上げたりして、こうやってネットに公開・紹介できるのって、改めてすごい世の中になってきたなー、と思う今日この頃です。
今後もいろいろやって行きたいですなあ。
ぜひ一度ご覧ください↓
JRuby |
2008/03/22(土) 03:06
Rubyでスクレイピングするツールを書いていたら、何万件とか順次処理じゃ遅すぎて待てない。
すでに6時間以上経過しているが、まだ1/5残ってる・・・。(使用メモリが増えないので継続できている)
まあ、他人のサイトにそんなに負荷かけるなよ、という話は置いといて。
というわけでスレッドを使おう → Javaで書こう → スクレイピング&DB保存処理を書き直し → orz
となったので、Javaで書くのはやめてJRubyで書くことにしました。 これならMechanize使ってるスクレイピング処理、ActiveRecord使ってるDB関連処理を書き直さず、Javaでネイティブスレッドの恩恵を受けられる!はず。
JRuby1.1RC3で試す。もうすぐ1.1リリースかな。
まずはJRubyでjava.lang.Threadを使うところからやってみよ。
これはJRubyのsamplesフォルダのthread.rbに書いてある。
当然ながらこれは動く。
そもそもJavaでスレッドってどう書くんだっけ?という方はこちらがわかりやすい。
調べていたら以下のようなエントリを発見。
http://www.atdot.net/~ko1/diary/edit_comment.cgi?mode=long&year=2007&month=6&day=12
試しにここで紹介されてるコードも実行してみる。
お、動くじゃん。このとき問題だった点は解消されているということかな?
と思ったら何度か実行したらエラーになった。
RubyStringがスレッドセーフじゃないのかな?ということで文字列ではなく配列に結果を代入。
Deadlock With ReentrantLock and Java Integration
さて、でもせっかくなのでRunnableで実装してみよっと。上のコードも動く時は動くし。
でもどうにも情報が見つからず。当てずっぽうでやってみる。
めんどいので結論。
(コードハイライトがおかしくて、一部このままでは動きません。実際のコードはview plainという灰色のリンクを押してください)
これから実装するなら、Thread継承でもOK。
とりあえず動かすことはできたので、試しにスクレイピング&DB保存のやつで実践してみよっと。 もちろんクリティカルな処理には使わない方がよいのは自明なので、あしからず。
お、ちょうど処理も終わった。
ちなみに、ようやくコードのハイライト表示をできるようにしました。でも一部表示がおかしいな。(strstrとかなってる。これじゃ動かんな)
参考
http://blog.37to.net/2007/06/syntax_highlighter/
まあ、他人のサイトにそんなに負荷かけるなよ、という話は置いといて。
というわけでスレッドを使おう → Javaで書こう → スクレイピング&DB保存処理を書き直し → orz
となったので、Javaで書くのはやめてJRubyで書くことにしました。 これならMechanize使ってるスクレイピング処理、ActiveRecord使ってるDB関連処理を書き直さず、Javaでネイティブスレッドの恩恵を受けられる!はず。
JRuby1.1RC3で試す。もうすぐ1.1リリースかな。
まずはJRubyでjava.lang.Threadを使うところからやってみよ。
これはJRubyのsamplesフォルダのthread.rbに書いてある。
x = Thread.new { sleep 0.1; print "x"; print "y"; print "z" }
a = Thread.new { print "a"; print "b"; sleep 0.2; print "c" }
x.join # Let the threads finish before
a.join # main thread exits...
なるほど、Thread.newにブロックを渡すとrun()で実行されるのね。当然ながらこれは動く。
そもそもJavaでスレッドってどう書くんだっけ?という方はこちらがわかりやすい。
調べていたら以下のようなエントリを発見。
http://www.atdot.net/~ko1/diary/edit_comment.cgi?mode=long&year=2007&month=6&day=12
試しにここで紹介されてるコードも実行してみる。
str = ''
max = 1000
(1..4).map{|e|
Thread.new(e){|ti|
max.times{
str << ti.to_s
}
}
}.each{|t| t.join}
p str
お、動くじゃん。このとき問題だった点は解消されているということかな?
と思ったら何度か実行したらエラーになった。
Exception in thread "Ruby Thread8970080" java.lang.ArrayIndexOutOfBoundsException
at java.lang.System.arraycopy(Native Method)
at org.jruby.util.ByteList.ensure(ByteList.java:187)
at org.jruby.RubyString.modify(RubyString.java:243)
at org.jruby.RubyString.cat(RubyString.java:577)
at org.jruby.RubyString.append(RubyString.java:1037)
at org.jruby.RubyString.concat(RubyString.java:1049)
・・・以下略
エラーの内容は若干違うけど、やっぱりダメかね。RubyStringがスレッドセーフじゃないのかな?ということで文字列ではなく配列に結果を代入。
ary = []
max = 1000
(1..4).map{|e|
Thread.new(e){|ti|
max.times{
ary << ti.to_s
}
}
}.each{|t| t.join}
p ary
でもエラー。今度はぬるぽ。
Exception in thread "main" java.lang.NullPointerException
at org.jruby.RubyArray.inspectAry(RubyArray.java:1099)
at org.jruby.RubyArray.inspect(RubyArray.java:1125)
at org.jruby.RubyArrayInvoker$inspect_method_0_0.call(Unknown Source)
at org.jruby.internal.runtime.methods.JavaMethod$JavaMethodZero.call(JavaMethod.java:82)
at org.jruby.RubyClass.invoke(RubyClass.java:236)
at org.jruby.javasupport.util.RuntimeHelpers.invoke(RuntimeHelpers.java:314)
at org.jruby.RubyObject.callMethod(RubyObject.java:466)
at org.jruby.RubyKernel.p(RubyKernel.java:334)
at org.jruby.RubyKernelInvoker$p_s_method_0_0.call(Unknown Source)
at org.jruby.internal.runtime.methods.JavaMethod$JavaMethodNoBlock.call(JavaMethod.java:63)
at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:78)
at org.jruby.runtime.CallSite$InlineCachingCallSite.cacheAndCall(CallSite.java:147)
at org.jruby.runtime.CallSite$InlineCachingCallSite.call(CallSite.java:307)
at ruby.C_3a_.Users.kazuhiro.t2.__file__(t2.rb:10)
at ruby.C_3a_.Users.kazuhiro.t2.load(t2.rb)
at org.jruby.Ruby.runScript(Ruby.java:510)
at org.jruby.Ruby.runNormally(Ruby.java:430)
at org.jruby.Ruby.runFromMain(Ruby.java:310)
at org.jruby.Main.run(Main.java:141)
at org.jruby.Main.run(Main.java:88)
at org.jruby.Main.main(Main.java:79)
よくわからんが、受取側のオブジェクトに排他がかけれてない?samplesのやつもvoidな処理だしなあ。JRubyのJIRAを見たらこういうバグも上がっていた。あんまり関係ないかもだけど。Deadlock With ReentrantLock and Java Integration
さて、でもせっかくなのでRunnableで実装してみよっと。上のコードも動く時は動くし。
でもどうにも情報が見つからず。当てずっぽうでやってみる。
めんどいので結論。
(コードハイライトがおかしくて、一部このままでは動きません。実際のコードはview plainという灰色のリンクを押してください)
require 'java'
class Test
include java.lang.Runnable
def initialize(str = "a")
@str = str
end
def run
100.times {
print @str
}
end
end
runnables = []
runnables << Test.new
runnables << Test.new("b")
runnables << Test.new("c")
runnables << Test.new("d")
runnables.map{|runner|
Thread.new(runner){|r| r.run}
}.each{|t| t.join}
いろいろ試した結果、なぜかJavaではvoidのはずのRunnable#run()で結果を返せたり。
Thread.newの引数にはブロックが必要なのでRunnableの意味ないなー、と思っていたらrun()をhoge()とかに変えたり、そもそもRunnableのincludeやめても動いた。Thread.newには任意のオブジェクトを渡せるみたい。Runnable意味ねー。
class Test
def initialize(str = "a")
@str = str
end
def hoge
100.times {
print @str
}
end
end
runnables = []
runnables << Test.new
runnables << Test.new("b")
runnables << Test.new("c")
runnables << Test.new("d")
runnables.map{|runner|
Thread.new(runner){|r| r.hoge}
}.each{|t| t.join}
これって、もし既存のクラスの処理をマルチスレッドで実行しようと思ったら、Thread.newに渡してブロックでメソッド呼んだら終了ってこと?すごいじゃん!(ちゃんと動けば・・・)
これから実装するなら、Thread継承でもOK。
require 'java'
class ThreadTest < java.lang.Thread
def initialize(type = "a")
@type = type
end
def run
100.times {
print @type
}
end
end
threads = []
threads << ThreadTest.new
threads << ThreadTest.new("b")
threads << ThreadTest.new("c")
threads << ThreadTest.new("d")
threads.each{|t| t.start}
threads.each{|t| t.join}
ここでrun()をhoge()とか違うメソッド名にすると何も出力されなくなったので、確かにThread#run()が実行されているみたい。
とりあえず動かすことはできたので、試しにスクレイピング&DB保存のやつで実践してみよっと。 もちろんクリティカルな処理には使わない方がよいのは自明なので、あしからず。
お、ちょうど処理も終わった。
ちなみに、ようやくコードのハイライト表示をできるようにしました。でも一部表示がおかしいな。(strstrとかなってる。これじゃ動かんな)
参考
http://blog.37to.net/2007/06/syntax_highlighter/
OSS |
2007/09/06(木) 22:17
こりゃ便利だ、と思って使ってみました。
Talend Open Studio
結論から言うと、いい部分と悪い部分とある感じでした。
悪いというか、自分の使いたかった用途にフィットしなかった感じ。
■イイ!
・接続できるDBが多い。AccessもOracleもOK。
・Java or Perlでデータ変換処理が書ける。いろいろやるよりコード書いた方が早い。
・UIの使い勝手がそこそこよい。マニュアルほとんど見ずに簡単なデータ移行ができた。
■イマイチ
・変換の処理を繋ぐときに、いちいち変数をドラッグ&ドロップしないとダメ。仕方ないのはわかるがめんどい。
・スキーマを勝手に読んでくれる機能がない。DBからの抽出は必ずSQLを書く必要がある。
・変換が多くなると、処理があちこちに分散してしまう。このツールに限ったことではない。ETLツールの宿命。その代わり、ロジックを実装する人へのアサインを細かく分散できる。こっちのメリットが大きいプロジェクトには向いていると言える。
Railsでデータ移行ツールを一回作れば使いまわせるので、そっちの方が柔軟性があっていいかも。Railsにデータ移行ツールがついてくれば、もっとWebアプリをRailsで再構築しようという人・プロジェクト・会社は増える気がするなあ。
でもUIのついたETLツールが無償で使えるなんて、いい時代になったもんだ。
ちなみにこんなのもありますが、ブラウザベースなのでUIがイマイチでした。
日本製だし(OpenOLAPを作った会社製)、作りは良さそうでしたが途中で使うのを止めました。
OpenStaging
Talend Open Studio
結論から言うと、いい部分と悪い部分とある感じでした。
悪いというか、自分の使いたかった用途にフィットしなかった感じ。
■イイ!
・接続できるDBが多い。AccessもOracleもOK。
・Java or Perlでデータ変換処理が書ける。いろいろやるよりコード書いた方が早い。
・UIの使い勝手がそこそこよい。マニュアルほとんど見ずに簡単なデータ移行ができた。
■イマイチ
・変換の処理を繋ぐときに、いちいち変数をドラッグ&ドロップしないとダメ。仕方ないのはわかるがめんどい。
・スキーマを勝手に読んでくれる機能がない。DBからの抽出は必ずSQLを書く必要がある。
・変換が多くなると、処理があちこちに分散してしまう。このツールに限ったことではない。ETLツールの宿命。その代わり、ロジックを実装する人へのアサインを細かく分散できる。こっちのメリットが大きいプロジェクトには向いていると言える。
Railsでデータ移行ツールを一回作れば使いまわせるので、そっちの方が柔軟性があっていいかも。Railsにデータ移行ツールがついてくれば、もっとWebアプリをRailsで再構築しようという人・プロジェクト・会社は増える気がするなあ。
でもUIのついたETLツールが無償で使えるなんて、いい時代になったもんだ。
ちなみにこんなのもありますが、ブラウザベースなのでUIがイマイチでした。
日本製だし(OpenOLAPを作った会社製)、作りは良さそうでしたが途中で使うのを止めました。
OpenStaging




