上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
コミュニティ検索 »
怖いねー、中国ではもう感染済み、死者も20人出てるんだー。

在中国日本国大使館の情報

しかも谷亮子の息子さん、ウイルス感染で帰国・入院とかしてたけど、
実は鳥インフルエンザだったらしいし。そりゃメダルどころじゃないわ。


上記ページに注意点が書いてあったので引用しときます。


3.日常生活上のご注意
中国に滞在・旅行される方におかれては、日常生活上次のようなご注意をお願いします。

(1)石けんでの手洗い、うがいなど通常の感染症予防対策を励行すること。

(2)生きた鳥に近寄らない、できるだけ飼育しない、死んでいる野鳥などに触れないこと。

(3)ウィルスは加熱(70度で5分間)により死滅しますが、冷凍では死滅しないので調理時は十分な加熱をし、卵や調理道具は十分洗浄すること。

(4)できるだけ発生地域への旅行は控え、旅行する場合は特に外務省海外安全ホームページ、感染症情報等を確認すること。


だって。みなさんも気をつけましょー。
このブログにも貼りましたが、Flashによる求人広告バナーを作りました。
見ての通り3Dで求人が回ってます。回ることの意味は考えちゃいけませんw

greenでのアフィリエイトも付けられるので、ブログやHPに貼りたいという方はこちらまでお問合わせください。

このアフィリエイトの報酬についてちょっと説明すると、

◆他社アフィリエイトでの報酬
・1クリック10円とか、1会員登録200円などの集客への対価
・商品購入した場合に商品代金の2%などの商品紹介への対価
なので、より多くのPVやクリックを集めればよいものが多いです。

が、greenのアフィリエイトは行動ベースでの成果報酬になっています。
どういうことかというと、

◆greenアフィリエイトでの報酬
・求人紹介したブログなどから会員登録後、その会員が転職決定時に25,000円
  ・紹介した求人に転職決定時には、さらに25,000円
というちょっと先の長い成果に対する対価です。

これのよいところは、
・紹介者は、自身が詳しい業界や職種の求人を詳しく紹介することで、長期的に高額な収入が得られる可能性がある(一人だけ転職決定でも25,000円)
・転職者は、クリック稼ぎなどの紛らわしい情報ではなく、紹介者の持っている知識を頼りに、より自身にあった求人を探すことができる
といった、紹介者・転職者双方にメリットがあるモデルを考えました。

転職サイトからの一方的な情報や、企業の求人広告だけではわからない情報を、ブロガーの方たちが補足・付加して紹介することで、最適な転職先を見つけて頂きたいですね。


ちなみに、現状の仕事に満足している人は、無理に転職はする必要はないと思っています。むしろ、満足している人が増えた方が(経済的にも、保安的にも)世の中の安定に繋がると思います。

ただ、仕事は生活の大半を占めるので、自分に合わない職場環境にいる人は、毎日の生活も楽しくないのではないかと思います。そういった人はより自分の可能性を広げられる職場を探すのも、毎日を楽しくする手段の一つじゃないかな、と思っています。
さらにいうと、適職に就ける人が増えればその分生産性も上がるので、日本経済全体のパフォーマンスも少しは上がるのでは、なんて想像もしています。

[追記]
そういえば、報酬は現金ではなくAmazonギフト券です。換金は行えないので、予めご了承ください。
(Amazonギフト券の利用方法は自由ですが、自己責任でお願いします)
コメント (0) | トラックバック (0)
コミュニティ検索 »
これおもしろーい。Phunっていうソフト。




直感的に操作できるのが素晴らしい。っていってもまだ入れてもいないけど。ダウンロードしただけ。
ここからダウンロードできます。


でもここ↓までリアルだとちょっと感動が薄れるのはなぜ?
リアリティは作られたものと認識した時点で価値が激減するということかな?
本物の役者さん、結構いいカメラ、Finalcutを使って、本格的に作ってみました。
といっても別に僕が作ったわけではなく、元役者のスタッフが一人で頑張ってネタ仕込み&撮影を引っ張ってやってくれました。
(最後のオチが若干弱いですが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に書いてある。
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/
プロフィール
 

miyazima

Author:miyazima
常に変化を好み、面白いことを探しています。次の次は?

カレンダー
 
01 | 2017/02 | 03
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 - - - -
カウンター
 
天気予報
 

-天気予報コム- -FC2-
ブログ内検索
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。