endless pulse

どっくんどっくんふるえる毎日を過ごしています

Actorのスレッド

ちょっと作ってたらActorのスレッドについて面白いことがわかったのでメモ。例によって、、当たり前のことかもしれません。。

Actorは新しいスレッドを作る?

てっきり私はScalaのActorは新しいスレッドを作るのかと思ってました。Actorについて…は、また機会があったら書くこともあるかも知れませんが、ググるといっぱいでてきますのでそちらを参考に…!
要するに、Actor1つにつき1つのスレッドが立って、メッセージのやりとりで並行プログラミングを行う!っていう感じ…ですかね…(ものすごく語弊がある気がするので突っ込みあればいくらでもどうぞ)

けど、こんなサンプルプログラムを走らせたら面白いことに。

import scala.actors.Actor
import scala.actors.Actor._

class Samle extends Actor {

  def threadPrint = {
    var t = Thread.currentThread()
    println("Actor id = " + t.getId() + ", name = " + t.getName()) // スレッドIDと名前を表示
  }

  threadPrint

  def act() = {
      threadPrint
      val sub = new SubSample()
  }
}

class SubSample {

  def threadPrint = {
    var t = Thread.currentThread()
    println("Sub id = " + t.getId() + ", name = " + t.getName()) // スレッドIDと名前を表示
  }

  threadPrint
}

object Main {
  val sample = new Sample()

  def main (args : Array[String]) {

    sample.start

    var t = Thread.currentThread()
    println("Main id = " + t.getId() + ", name = " + t.getName()) // スレッドIDと名前を表示

    Thread.sleep(1000)
  }
}

実行結果

Actor id = 1, name = main
Main id = 1, name = main
Actor id = 10, name = ForkJoinPool-1-worker-0
Sub id = 10, name = ForkJoinPool-1-worker-0

ScalaのActorはactメソッドの中で新しいスレッドを作る

…ということですよね?←

…こともある、そうです。。
コメントにより、必ず新しいスレッドが作られるわけではないとのご指摘を受けたのでもうちょっと勉強します><


まあせっかくActorのクラスなのに何のメッセージのやりとりもない、ひどいサンプルでごめんなさい。なので想定したActorの振る舞いをちゃんと欲しいのであれば、actメソッドの中を必ず通してActorのクラスが振る舞うようにしないとね!と思ったりしたわけでした。


Scalaのシングルトンオブジェクトとクラス

Scalaのシングルトンオブジェクトとクラスの使い方について少し苦労したのでそのときのメモを転載。

記法(宣言)

Scalaにはクラス宣言とシングルトンオブジェクトの宣言がある。

class Sample {
  val a = 3
  def hello = {
    println("Hello, World!")
  }
}
object Sample {
  private val b = 4
  val c = 5

  def hello = {
     println("Hello, World again!")
  }
}

Javaを知っている方にはおなじみのクラスの宣言と、下はシングルトンオブジェクトの宣言。両方とも継承があればJavaとかと同じようにextends〜とかつなげればいい。トレイトも宣言時にwith〜とかやると使える。(トレイトについては使い慣れてないのでボロをださない程度の説明にしておきます。。)

同名のクラスとシングルトンオブジェクトが宣言できる。同名のメソッドを中で宣言しても怒られない。
一体この2つの違いは何なの?という話。

シングルトンオブジェクトはJavaでいうstaticなメソッド/フィールドだけのクラス

実はScalaには「static」という予約語はない。
えええー、じゃあ、staticな変数はどうするの?メソッドは?staticなクラスだって作りたいよ〜〜

というののために、シングルトンオブジェクトがある。
さっきの、object Sampleっていう宣言の方。
上記の例で言うと、object Sampleと書いた方はstaticなクラスとして扱える。
だから、外のクラスから、何もnewすることなしに

  Sample.hello

とかやると、JavaのStaticクラスのようにメソッドが扱える。
フィールドも、同じように扱える。上記の例で言うと

とかやると、JavaのStaticなメソッド/フィールドだけを持ったクラスのように扱える。上記の例で言うと

  Sample.c

とやると、cの値である5が得られる。
※ちなみに、このとき c は変数のgetterのメソッドとして呼ばれているらしい。ので実際にはメソッド名を扱ってるだけなのでフィールドの場合とかいう話じゃないです。。
変数をvarで宣言すると、setterメソッドとして

変数名_(代入したい値)

みたいなのが宣言される上に、

変数名 = 代入したい値

でも上記のsetterが呼び出されて代入できる

さらにちなみに、同名のクラスに対してのシングルトンオブジェクトは、コンパニオンオブジェクトと呼ばれ、コンパニオンオブジェクトの中のprivateで宣言されているものに対して、同名のクラスからであればアクセスできる。

ちょっと、「staticなメソッド」あたりを自分がしっかり理解していなかったみたいで、なぜシングルトンオブジェクトからクラスの方の変数が参照するやり方わかんねー!と思っていたけど、要するにthisを扱うのはstaticなメソッドでいられないから…という理解でいいんだよね?

参考にしたもの

※自分がちょっと勘違いしまくりだったので訂正しました。。

Netbeans6.9でScala for Mac

前回の記事(Scalaのインストールとかpluginとか(Mac OS X 10.6) - magicpulse)の続きになるかも。
EmacsScala-modeでかりかり書いてたのだけど、少しずつ大きなコードになってきたからNetbeans使おうと思ったらいろいろ問題が出たのでメモ。

実行環境

実行…できない?

Netbeansを起動させて、とりあえずScalaプロジェクトを作って動かしてみると、いきなり意味不明のエラーが。

You must set SCALA_HOME or environment property and append "-J-Dscala.home=scalahomepath" property to the end of "netbeans_default_options" in NetBeansInstallationPath/etc/netbeans.conf to point to Scala installation directory.

環境変数にパス通せってことかな?


Scala plugins for Netbeans6.9Wikiを見に行ってみると

のどちらかをやればいいようです。

SCALA_HOMEを設定してみた

が、環境変数の設定の仕方が本当に意味不明なことが書いてあって私にはまったくよくわからない。

  • ~/.Mac_OS_X/environment.plist というファイルを作って(フォルダがない場合は作る)以下のように書く。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>SCALA_HOME</key>
	<string>full/path/of/your/scala/home</string>
	<key>PATH</key>
	<string>/opt/local/bin:/opt/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/full/path/of/your/scala/home/bin</string>
</dict>
</plist>

ええ、と思いながらもやってみました。


だが同じエラーが出るorz
やり方が合ってないのか? 申し訳ないです、全然よくわかりません。いつもの方法(.bashrcとか.bash_profileとか)で環境変数を設定してみてもダメ。。。echoしたら出てたんだけどな。bashとは関係ないっていうこと? 私がおそらく環境変数の何たるかをちゃんと理解してないのでしょうが。うーん。

netbeans.confをいじる

そんなわけでOrの後をやることに。

netbeansInstall/etc/..ってあるけどそれどこよ?

私の場合は/Applications/NetBeans/NetBeans 6.9.1.app/Contents/Resources/NetBeans/etcでした。

落とし穴

netbeans.confの最後って書いてあるように見えるのだけどね、原文の英語は。最後に追加しても何も起きませんでした。

このブログのScalaのところに書いてあることに非常に助けられた。

  • すでにnetbeans.confの中にある変数netbeans_default_optionsの中身の最後に"-J-Dscala.home=/path/to/scala/home"を設定するらしい。
    • netbeans_default_options="〜〜〜"ってすでに文字列がいっぱい入ってる。(netbeans.confの真ん中ぐらいにあった)
    • そこの最後に付け足すだけ。

そんなわけでやってみたら……おお、さっきのエラーは出なくなった!

SCALA_HOMEの場所

が、また違うエラーが出ました私の場合。(ほとんどの人は上記の設定でいいはず)

[taskdef] Could not load definitions from resource scala/tools/ant/antlib.xml. It could not be found.
/scalala/scalala-read-only/scalala/build.xml:36: Problem: failed to create task or type scalac 

Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any / declarations have taken place.

scalacが見つからない???


SCALA_HOMEの場所が違っていたようです…


私は上記SCALA_HOME(もしくはnetbeans.confのscala/home)を設定するときに、コマンドのscalaがある場所を指定していました。私の場合はMacportsでいれたのでつまり

/opt/local/bin/scala

とか書いていたのだけど、これが間違いで、buildするときのxml読んでたら、SCALA_HOMEの下のフォルダのlib/scala-compiler.jarとか呼んでる…。思わずlocate scala-compilerとかしたら、私の場合は

/opt/local/share/scala-2.8/lib/scala-compiler.jar

に存在していました。なので、正しいSCALA_HOMEは

/opt/local/share/scala-2.8


これで無事に動いた!


LulzSecの記事

凄く心にとどめておきたい記事があったので。

記事内容

記事自体が削除されることを懸念して、以下にコピペしときます。

 大手企業サイトや政府関連サイトに一連の攻撃を仕掛けていた「Lulz Security(LulzSec)」を名乗る攻撃グループは、「恐れるべきは犯行を公表しているLulzSecではなく、公表されていない攻撃だ」とする声明を発表した。

 テキスト情報の共有サービス「Pastebin.com」で米国時間2011年6月17日に公開されたLulzSecの声明文では、米公共放送サービス(PBS)、ソニー、米Fox、アダルトサイト、米連邦捜査局(FBI)、米中央情報局(CIA)、オンラインゲームサーバーなどへの一連の攻撃は自身の仕業だとしている。

 LulzSecは、すべての攻撃者が犯行を公表するわけではないとして、今現在「Facebook」や「Skype」などのアカウントに攻撃者が潜み、情報を盗み出している危険性を暗示した。また、LulzSecが「Brink」ゲームの登録ユーザー20万人以上のデータを入手していることを明かし、「これを公表することによって、ユーザーはパスワードを変更することができるからむしろ安心だ」と説いた。

 さらにLulzSecは、サイトに攻撃を仕掛ける理由を「愉快だから」としている。「大混乱を見るのはとてもおもしろい。法の裁きを受けるまで、これからもわくわくするようなことを続ける」と述べている。

 ゲーム関連サイトに関しては、セガが6月19日に、同社の欧州子会社SEGA EUROPEが運営する顧客サービス「SEGAPASS」が攻撃を受け、129万人以上の個人情報が漏えいしていたことを発表した。米メディアの報道(CNET News.com)によると、LulzSecはミニブログサービス「Twitter」にセガ宛てのコメントを投稿し、「貴サイトを攻撃した集団を倒す手助けがしたい。我々はDreamcastが大好きだ」と申し出たという。

価値観の相違

思うことはいろいろあるけど、とりあえず四段落目。

  • さらにLulzSecは、サイトに攻撃を仕掛ける理由を「愉快だから」としている。「大混乱を見るのはとてもおもしろい。法の裁きを受けるまで、これからもわくわくするようなことを続ける」と述べている。

価値観が違うっていうのはこういうことなんだろう。守る人と攻撃する人、両方の価値観がおそらく調和できることってない。セキュリティを仕事の大きな要素にしていきたいと思っている人間としては、こういう価値観は大いに「理解」しておくべきだなと思った。「共感」は全くできないし、おそらく理解したり知っておかなければ「想像」することすらできないから。性善説なんて、セキュリティ問題においては考えてちゃ意味ないんだなー。

色々ガタガタですね…

あとは最近ガタガタだなあという印象。ここにSkypeFacebookが示唆されてるし、Dropboxでもなんかあったとか? ゲーム業界もずったずたに狙われてるし(なぜかセガが好かれている件は置いておいてw)、、ガタガタなところがどうとかではなく、こうやって狙われるとどの業界ももしかしたら慌てふためくのかなということを感じる。だってセキュリティ対策って高めれば高めるほどコストが高いんだもの。今後、この業界はどうなっていくんだろうね? いや…どうしていこうか?と言わなくちゃかな。

大規模SQLインジェクション攻撃「LizaMoon攻撃」

どうもこんにちは。今日はちょっと授業のためにセキュリティ問題を調べたので、そのまとめがてら。

「Lizamoon攻撃」

みなさん、Lizamoon攻撃という名前を聞いたことがありますか? いやー私は恥ずかしながら知らなかったです。

被害内容

まずは大まかな被害の内容から。

  • 2011/3月末〜4月頭にかけて、約22万にも及ぶサイトへの改ざん被害があった
    • ソースはwebSenceのブログ
    • その中に、Apple社のiTunesのサイトも含まれていた。(実質的な被害はここからは起きていない(はず))
  • 改ざんされたサイトに行くと、lizamoon.comなどというホスト名の攻撃サイトに誘導される(これが攻撃名の由来)
  • 攻撃サイトでは、MicroSoft Security Essentialsに似た偽AVソフトがDLされ、クレジットカード情報の入力が促される

と言ったところですね。Web改ざん→偽AVソフトDL→クレカ情報GETというありそうな流れっちゃありそうな流れ。けど、たった2ヶ月前にこんな大事件が起こっていたとは…。もっとセキュリティニュースに敏感にならないとなーと思っている次第です。実際に攻撃サイトに誘導されてから偽AVソフトがDLされるまでの動画があるので興味があればぜひ。

 

技術的背景

どんなヤバい技術が使われたかと言えば、SQLインジェクションですねー。SQLインジェクション自体は2008年に爆発的に増えたあと、「こう対策しろ」っていう意見がたくさん出ているのにも関わらず、まだまだなくなる気配を見せてない攻撃。Web開発者へのコストや構築機関の問題で、実際に対策が難しいというのがある様子。


IPAさんからSQLの使い方についての指標があるので、参考にするといいかも。


今回狙われたのは、Windows SQL ServerASPを用いて構築されたWebページらしい。(けど、iTunesのサイトもそうなのか?と今更ながらに疑問w そう書いてあったけど、裏をとったわけではないのでわからない) うーん、こうやってDBがどんどん普通のWebページにも入り込んでいる中、SQLインジェクションはやっぱりちゃんと対策したいところですね…。もしこれからガンガンWebページを作って行くことになったとしても、配慮したい。自分が個人情報を扱っていなくても、こうやって偽アンチウイルスソフトのDLをさせて入力させちゃあ、結局見に来た人が不幸になってしまうし…。


ultrapulse ver.2.xについて

こんにちは。ultrapulse ver.2.0が今日(2011/5/29)からとりあえず始動しました。いえ、ものすごくまだまだ機能は予定以下なのですが、動かしながら調整しようかなーと。また電力使用量が危なくなって来たら考えるけど。



とりあえず、ver. 1.0はトリでしたが、トリのご主人様である女の子にver.2.0では登場してもらいました。イメージは右の通りですがひどい絵だなw まあTwitter用で小さくなるからいいだろうと思ってたけどこう大きく表示するとwwwwあくまでイメージ用の仮の絵なので…これも近日中に差し替えなくては。。 せっかくなんで厨二全開な設定を考えました。

  • なまえ:ぱるす
  • しゅぞく:森の妖精
  • ねんれい:(人間換算)14
  • パートナー :ミードリ(トリ)
  • せいかく
    • どじっこ(?)
    • 都内在住
    • 地元は「森」
    • 「森」で発行している人間の国に関する月刊誌を発行している雑誌社の編集室に通っている
    • たまに渋谷とか甲府とかで遊ぶ
    • マカー
    • 自転車でよく出かける
    • 朝に弱い
    • デレられるとSっ気を発揮

で、せっかくなのでこの子を育てて行こうと思います。


現在ある機能は以下の通り

  • 毎時0分にランダムついーと (ソースは @magicalEmy のもののみw)
  • と思ってましたが、一日の特定の時間のみ、0分と30分に今のところつぶやいてます。今週末には修正します。。
  • 朝は挨拶に返事をしてくれます
    • ちょっとまだ未完成です。
  • 語尾に「にゃ!」をつけると…

近日中に追加予定の機能

  • あいさつ返しα
  • 地元「森」の詳細決定
  • いい加減にアイコン安定させろw


妄想としては

  • Twitter上で物語が進んで行く的な…。これももう少し考えたいところだけど。

で、みなさまに募集したいのは、この子にしゃべらせたいこと。@magicalEmy にでも、@ultrapulse にでも、お好きな方にメンションで教えてください。検閲いれてからなるべく採用していきたいと思います。


絵だけ差し替えたら、@magicalEmy の方で告知しよう…。さすがにこの絵はひどいw

ultrapulse history

2009/7/27 ver1.0 公開。「ミードリ」というトリ。はげましbotだった。
2009/9/4 ミードリは一旦眠ったまま、そのまま運用停止。
2011/5/29 ver2.0公開。「ぱるす」という妖精にチェンジ。機能はつぶやくのみ。
2011/6/1 発言の言葉を微調整。
2011/6/2 毎時0分につぶやくように修正
2011/6/8 雑誌編集室や、各所遊ぶ場所を追加
2011/6/28 人の呼びかけに反応するようになりました…ver2.1ということで

記事更新履歴

2011/5/29 記事作成
2011/6/1 書き直し用の絵の下書きを追加しておきました。
2011/6/2 性格を少しずつ決定
2011/6/8 職業が決定
2011/6/28 機能欄更新。朝の挨拶(未完)と、ねこっぽくデレるとSっ気が…

PC周辺どうしよう

どうもこんにちは、えみぃです。最近の悩みが堂々巡りしているので、メモがてら…。

PC周辺をどうしよう!

現在すっごく欲しいもの。

  • PC
  • PS3を映すディスプレイ

特にPCは必須。今年度の終わりまでには買わないと、今が研究室のPCに頼り切って生活しているせいで、現在の環境がことごとく失われるw けど、お金が無限に出て来るわけじゃないので検討しないとね…大きい買い物だし。


そんなわけで、とりあえず3月までにはPC買わなきゃ行けないんですけど、どうしようかなって。PCの候補は下記。基本的にCore i7にしたとして、予算。しないかもだけど。ちなみに学割で正規値段から-1万してある。

候補PC 予算
iMac27インチ 20万
iMac21.5インチ 15万
MacBookPro13インチ 13万
iMac27インチの場合

これをPS3映すディスプレイにするとしたら、他にかかる予算は以下。

モノ 予算
AT-HD620 25,000
HDMIケーブル 1,000
miniDisplayPortケーブル 3,000
合計 29,000

というわけで、iMacと合わせて、23万円で揃う。

  • メリット
    • ディスプレイが大きい。27インチ。感動。
    • しかもひとつで済むから、狭い机の上でのデュアルディスプレイがどうなのかを考えると現実的!
    • 念願のiMac27インチが買える!
  • デメリット

ちなみに下記のサイトを参考にしました。HDMIからMiniDisplayPortへの変換は他にもいろいろあるらしいけど、せっかくなら綺麗に映したいじゃん…!というわけで、この変換機にはする予定。

iMac21.5インチ、MacBookProの場合

この場合、PS3を映すディスプレイが別に欲しい。というわけで予算は以下。

モノ 予算
ディスプレイ24インチ 20,000
HDMIケーブル 1,000
miniDisplay-DVI変換ケーブル 2,000
合計 23,000

とすると、iMacの場合17.5万円、MacBookProの場合15.5万円で揃う。

  • メリット(共通)
  • デメリット(共通)
    • 机の上のディスプレイ占有領域について
    • 結局テレビもBlu-rayもゲームも24インチか〜
    • っていうかこの値段で24インチのディスプレイってきれいなの?
  • メリット(iMac)
    • iMacはかなり欲しい。
  • メリット(MacBookPro)
    • 持ち運びできる。
  • デメリット(MacBookPro)
    • 持ち運びできちゃう。…持ち運びたくない。
    • 念願のiMacが買えない
    • 来年以降、プラスでMagicMouseとか買いそう…
で、どうしよう。

あー迷う!迷うよ!いろいろ考えると、iMac21.5インチかなって気がして来ちゃうんだけどさ! あ、たぶんiMac27インチを買った場合、商品券はおそらく周辺ケーブルと、PSP購入という新たなものに使いそうですw PC用に10万ちょっとはとってあるので、安い方2つはかなり現実的にお買い物できそう。で、23万というお金が出るかというと…出ないので、夏にがんばってバイトします…。10万稼げば、他のを買う場合と変わらなくなるしね…! ただ、卒業旅行とかにまわせるお金をその場合はどうやって捻出するか?という大問題が。生活費を切り詰めれば…って言うけど最近浪費癖ついてるから本当にダメね…。


まあiMac購入はLionが乗るまで待とうと思っているんだけど…購入できるなら、ディスプレイだけでも早く購入しちゃいたい気がしていたりして…。どう思う?w