航海日誌

トップ 最新 追記
過去の日記
注意:

2007-09-01 [長年日記]

O [Ruby][Scala][Java] Ruby勉強会@関西

第19回 Ruby/Rails勉強会@関西のプログラムを募集します。

日時 2007 年 9 月 29 日 (土) 13:00〜17:00頃(予定)
場所 京都女子大学

Scalaネタとかしたら怒られるかしら.

「Ruby(動的型言語)からみたScala(静的型言語)とか」

まぁネタがねたなんで30分くらいしかしゃべれませんけど(^^;

追記: 応募してみました:-).

O [3DCMS][Java][Scala] 実装状況

実はコア部(APIやランタイム)は相変わらずJavaなのですが,一部実装をScalaで書き始めました.

どちらかというと機能の一部とか切り離しができるPlug-inとかそういう雑多なものなのですが,必要なものなので結構重要です.

もちろんScalaでは実現できないこともあるでしょうし,バグなどでトラブルに見舞われることもあるでしょうから,その場合はJavaに移植しなおすかもしれませんが,今のところコンストラクタとbreakの問題以外はなんとかなっています.

特にXMLなどのデータコンバージョン部分や雑多なロジックが多いGUI部分などで,比較的に簡潔にすっきりかけて重宝しています.3Dと相性が良いかもしれません.まぁいくつか型で悩むところも合ったりするわけですが(^^;.

またScalaはscalacでクラスファイルへコンパイル可能のため,Javaとの親和性がかなり高く組み込んで使う用途には最適です.現状ではJRubyではjrubycの完成度が低い事を考えるとScalaが私には一番の選択肢に思えます.Groovyもあったりするのですが,Scalaはパフォーマンスもいいのでいろんな意味で都合がよかったりします.

O [Java] Swing再入門GUIレイアウト

レイアウトマネージャの自作なんて当たり前だと思うけどw,参考になるんじゃないでしょうか.

いや実際はレイアウトマネージャの自作は殆どの人がしないでしょう.というのはそれほど敷居が低いものではないですし,仕様やアルゴリズムを考えるのはなかなか大変ですから.

しかしSwingを使いこなしている人なら一度は作ってみる価値があるでしょう.ただしEclipseやNetBeansとの連携を考えると,ある意味茨の道であることも覚悟する必要がありますけど(IDEのGUIエディタをどのくらい使用しているのかわかりませんが).

本日のツッコミ(全2件) [ツッコミを入れる]

O きしだ [開催場所がステキなひびき]

O keisuken [きしださん: 場所が場所だけに女の子率も高いです:-).]


2007-09-02 [長年日記]

O [PC] PC機器のリサイクル

自作PCはどうよ,とか,でかブツはどうなのよ,とかいろいろ疑問が尽きないですよね.

O [JavaScript][字句解析] 数式パーサを書く

さっさと作ってしまえるところがさすがだな.

O [Java] ユーティリティメソッドを用意しないjava.util.regexは腐ってるよな

と思う.

みんな疑問に感じてないのかな?

O [Scala][Java] ファイルの抽出

Rubyの例:

puts "--"
 
i = 1
Dir.glob("*.scala") {|file|
  puts file.gsub(/\.scala/, "-" + i + ".scala")
  i += 1
}
 
puts "--"
 
Dir.glob("*.scala") {|file|
  puts file[/^[^.]+/]
}

Scalaの例:

これは既にあるコードとして無視することw.

import scala.collection.mutable._
import java.io._
import java.util.regex._
 
class Dir(pathname: String) {
 
  val path = new File(pathname)
 
  def glob(regex: String): Array[File] = {
    val pattern = Pattern.compile(regex)
    val result = new ArrayBuffer[File]
    for(file <- path.listFiles)
      if(pattern.matcher(file.getName).matches()) result += file
    result.toArray
  }
}
 
def regex(pat: String): Pattern = Pattern.compile(pat)
 
def gsub(str: String, pat: String, rep: String): String =
  regex(pat).matcher(str).replaceAll(rep)
 
def matched(str: String, pat: String): String = {
  val matcher = regex(pat).matcher(str)
  if(matcher.find) str.substring(matcher.start, matcher.end)
  else ""
}

以下が大事なところ.

println("--")
 
var i = 1
for(file <- new Dir(".").glob(".*\\.scala")) {
  println(new File(
    file.getParentFile, gsub(file.getName, "\\.scala", "-" + i + ".scala")))
  i += 1
}
 
println("--")
 
for(file <- new Dir(".").glob(".*\\.scala")) {
  println(new File(
    file.getParentFile, matched(file.getName, "^[^.]+")))
}

まぁRubyのライブラリにあわせたからね,前半のコードは既にあるものとしてみれば,そう冗長でもない.

実は,Scala版の方がいろんな意味で優れていると思うけど,まぁそれはそれ.

ただ正規表現で困るのは,エスケープする時に\\になっちゃうことだろうか....これはかなり泣けると思ふ.またこのコード程度だとJavaとそう変わらない...(Javaも拡張for文があるし).

O [Scala][Java] scaladocをそろそろ使おう

scaladocをそろそろ使おう.

package jp.ne.cappuccino.keisuken.test.scala
 
/**
 * Foo class.
 * @author   NISHIMOTO Keisuke.
 */
class Foo {
 
  /**
   * No operation.
   */
  def nop {}
 
  /**
   * Is odd?
   * @param  a  target value.
   * @return  if odd then true.
   */
  def odd(a: int): boolean = (a % 2) != 0
}

基本的にJavaと同じみたい.混乱せずに済むのはありがたい.

本日のツッコミ(全6件) [ツッコミを入れる]

Before...

O keisuken [artonさん: うーん,maches/replaceAllはよいとしても,たとえばマッチした全部の結果とか,gro..]

O odz [> Javaの開発はユーティリティクラス作成からはじまる Apache Commons の存在がまさにそれを示してい..]

O keisuken [odzさん: まさに好例ですよね > Commons]


2007-09-03 [長年日記]

O [Scala][Java] Scala (programming language)

やはり天下のWikipediaでもScalaについては情報不足か....

O [Java] Javaが好きになれない理由

ああ,なるほど,まぁ私自身もCommonsはそうそう使わないのだけど,Virtual File System(VFS)とかFileUpload関連とかは,自分で作ってるものより使いやすくて信頼性のあがっているものはそのまま使ってます.

ただartonさんと私って似ているところもあるのかな,基本的に自分が使いたい機能に絞って自分用のライブラリを書くことが多いです.たぶん他の人がやっていない分野に手を出している事が多いからだと思いますし,ブラックボックスの欠点(仕様が明確ではない)もある程度わかっていてとのことです.

さて,この問題は私はいくつか要点があるように感じてます.

  • 便利な機能を標準的にAPIやライブラリと提供してくれるのはうれしい
  • 多くの人が使っているAPIやライブラリは信頼性が高いことが多い
  • 多くの人が使っているAPIやライブラリは複雑な事が多い(学習コストがバカにならないし,思い描いているものでないことが多い)
  • 自分で作ったものは適用範囲が低いかもしれないが,その分実装が小さくて改良がしやすく,かつ使いやすい
  • 自分で作ったものは自分で(あるいはチームで)責任をとる必要がある
  • 自分で作ったものは(初期時は)信頼性が低い
  • そもそも汎用ライブラリの乱用は必ずしも開発効率がいいとは限らないし,依存する事で全滅することも考えられる

まとまってませんが,こんなことを感じているところです.

私にとって「Javaが好きになれない」理由は,やはり標準APIの難しさ・面倒臭さです.そんなに過激な事は言っていないのですが,あまり開発者に優しくないんですよね.そこが嫌いなところです.

Commonsについてはどちらかというと肯定なのですが(もちろん嫌いなプロダクトもあります),リスクもあるわけですし,artonさんのおっしゃる通りチーム内の教育にはよくないという気持ちはよくわかります.

また充実したAPIやライブラリを備えていても,(その場面に合わせた)ユーティリティクラスを作る事は常にあるわけですから,それらを否定するつもりはないのですが,どうも程度の問題でJavaのソレは「レベル低すぎ」と思ってしまうんですよね(^^;.今回の動機はそこに集約されています.

ああ,まとまってないや,まぁいいや.

O [日記] 関東への交通機関再考

東京駅を目的地にして計算してみる.

飛行機の場合:

40分: 自宅-駅
40分: 駅-空港
30分: 登場手続き
70分: 飛行機
20分: 羽田チェックアウト
30分: モノレール
20分: 浜松町-東京駅
計: 250分=4:10
1020: 自宅-空港
15200: 飛行機運賃 特割1
470: モノレール
150: 浜松町-東京
計: 16840円

新幹線の場合:

40分: 自宅-駅
210分: 駅-東京駅
計: 250分=4:10
340円: 自宅-駅
16660円: 駅-東京駅 のぞみ
計: 17000円

うーん,時間もコストも変わらないな.

やはり時間的・手荷物の制限が緩い新幹線がいいなぁ.

何しろこの前飛行機で行って逆に到着時刻が遅くなってしまった経験をしてしまったので飛行機という選択肢はあんまし考えられないや.

やはり沖縄とか北海道とか遠隔地でないとあんまり意義を感じない.

O [Scala][Java] ScalaでActor

うーん,思ったほどActorの性能はよくないみたいだけど(Erlangと比べて),それはそれとしても,結構読みにくいコードになっちゃうな.

まぁ慣れていないからだろうけど....

それからScalaに手馴れた人が書くと,コードも違ったものになるなぁ.例えばArrayのメソッドと関数オブジェクトを利用してみたり(ex: Iterable#foreach),シンボルを使ってみたり(ex: case: 'write),演算子メソッドを多用してみたり(これは可読性がいいのか悪いのかわからない),参考になるな.追記: ErlangのActorとScalaのActorはほぼ同じものと考えていいらしい.しかし実装はかなり違っているみたい.ScalaはThreadと併用しているように思われる.

O [Scala][Java] case classの使いどころ,定数

いまいちわかってない.Scalaのソースを見てると定数として使われているところもある.それはなるほどと思ったけど(match caseできるので).

一方定数なのだけど,公開する場合はやはりobjectで公開するのが吉なのかな.内部公開ならtraitでもabstract classでもなんでもいいのだけど.

その辺実用的なプログラムを組もうと思うと別の言語であるために悩むことも多い.

objectとclassが分かれるのもまぁ戸惑ったりするところなんだけどね.

O [Ruby] Fiberとは

実はあんまり知らない.実装もちょっと眺めておいた方がいいのかなぁ.

やはり実装されたご本人の説明が参考に.

むー,Actorとは違うような気もするけど,基本はそう変わらないのかな.

なるほど,最近Scalaになれているせいか,Rubyのコードが読みにくくなってる(ALGOLぽい表記を受け付けなくなってる(^^;).

有効に使うためには,ブロックされないIOを使う必要があるとか,処理単位である程度処理の粒度を考える必要はありそうだね.

ScalaのActorがもうちょっと強いものだったら面白いものにありそうなんだけど,今のところどうなんだろうね.ちょっと遊んで見なきゃ.

JavaだとconcurrentなAPIがあったりnon-block IOとかあったりするので,むしろ有利そうだけど,ScalaのActorはまだリソース面で不安がありそうだから,記述のしやすさそのものが有効なのかも.

RubyのFiberは比較的多めに生成してもちゃんと動くみたいなので,面白い事ができそう.


2007-09-04 [長年日記]

O [Java][Scala] jFD,FastFileからわかる標準java.io.Fileの遅さ

いろいろ調べてみるとWindows上ではjava.io.Fileは遅いのだけど,File#listFilesなどはNTFS上ではどうも遅くないっぽい(こちらの実測ではあまり変わらないように思う).

FastFileを作られたK.Takata氏もおっしゃってるけど,NTFSではOS上での検索アルゴリズムが変わっているらしく,ファイルの抽出は比較的コストが低いかもしれないとのこと.

でもそれ以外にもあってFileのメタ情報である,名前・更新日付・サイズなどの情報の取得にはそれなりにコストがかかるらしく,画像ビューアであるCaffeineViewerではそこがボトルネックになっているようだ.

既に対処済みなのだけど,そのメタ情報をキャッシュするようにするだけでも,ソーティングなどが大幅に効率的になるのがその証拠だ.

しかしその状態でもjava.io.Fileを使わずFastFileに変えるだけでも30%ほどパフォーマンスが上がる.

逆に言うと,現時点ではNTFS上・Windows 2000以降であれば,java.io.Fileでも思ったほど遅くないと思う.

といっても,CaffeineViewみたいにただ単にFile#listFilesするだけではなく,listFilesしたリストからメタ情報まで取得するような状況ではあまりかわらないのであって,jFDのような場合は違うのかもしれない.

でもそろそろJava 6上でちゃんとベンチマークしてみるべきかもしれない.

O [3DCMS][ロボ] 中間報告会,第12回ROBO-ONE

確認してみたら,どちらも15(土)/16(日)だ.しまった.

ということで,M踏が優先されてしますので,高松のROBO-ONEは行けません.

ごめんなさいm(_ _)m.(誰となく)

本日のツッコミ(全4件) [ツッコミを入れる]

Before...

O keisuken [witchさん: ええ,またいつか. しかしROBO-ONE観戦はいつになるのだろう.関西付近でやる時は行ってみよう..]

O Shunji [ちょっと計測してみました。 Windows XP、Pentium4 3GHz、Java6で、ディレクトリのファイル一..]

O keisuken [Shunjiさん: こちらもすべきでしたけどありがとうございました. やはり遅いんですね.こちらは1万ファイルよりち..]


2007-09-05 [長年日記]

O [プログラミング][仕事] 日本の職場の良さ,ステレオタイプの欧米の職場,もうちょっと再考すべき

なんだかなぁ.エンジニアに大切なところはたぶんそんなところじゃないよ.

たとえば個室.個室には仕事を集中できるというメリットがある.一方で低いパーティションで仕切られる日本式の仕事場にもメリットがあって,人が常に近くにいるという状況も仕事を進めるにあたっていい環境となることが多い.

うまい飯をただで食わせるというのもあんまり関係ないんじゃないかなぁ.まぁ家族がいてかつ給与面に不安があると,仕事に集中できないだろうから,働いた分の給与を与える必要はあるだろうけど.

でも賛成したいところは個室とかそんなところではなくて,「少数精鋭」というところだ.基本的にプロジェクトがうまくいく基準は5人前後といわれていて,それ以上になると破綻することが多いと思う.もちろん実働部隊が5人だけですまない場合が多いわけだが,コアメンバーや小隊の人数は少なくすべきだ.

ということでこの記事はあくまでも参考程度に読む必要がある.


2007-09-06 [長年日記]

O [3DCMS][ソフト] Google製プレゼンテーションソフト

うーん,おもいっきりかぶるな.しかも本気ならかなうはずもないくらい完成度が高いだろうし.

O [Java][Scala] jFD,FastFileからわかる標準java.io.Fileの遅さ その弐

  • jFD開発したりしなかったり日誌(2007-09-05) - FastFile

Java SE 6でもある程度改善が見られるようですね....でもまだ改善の余地がある.

O [ゲーム][ハード] センサーバ

サードパーティ製のセンサーバ、なかなかよさそうですよ。プレゼン用に買っておきたいところ。

時間でオフタイマーを試してみたが、ほぼ1時間でセンサーバーの電源が切れた。ただし、なんの前兆も告知もなく、いきなりLEDが消灯してしまうため、ゲーム中だと突然操作ができなくなる可能性が高い。これはちょっといかがなものか? また、電源ONのまま切り忘れてしまったときに防止機能もないため、使っているときは注意したい。

これってプレゼン用途を考えてですよねww(違う.

O [3DCMS] FTP/WebDAV+WebサーバとCMSの違い

って,簡単に言えばこんなところなのかな.

  • コンテンツのメタデータを索引化する
  • メタデータの読み出しと検索
  • コンテンツとメタデータを使ったアプリケーション(BBS,Blog)

用は,コンテンツ本体だけではなくてメタデータをどう扱うかがCMSの本質なんだろうな.

O [Java] J/Invoke 1.0

アノテーションを使わなければいけない理由がわからないけど(いやわかってはいるが),おもしろそう.

O [ネタ] 測るという行為と誤差と経験と

んーとそれほど面白い記事ではないのだけど,でも興味深い.

最初はお手製の道具で測ってうまくいかず,専用の道具でもうまくいっていない.いや測れてはいるけど誤差が大きい.

この手のちゃんとした計測器でもちょっとした不注意で誤差を生む.

そういう経験を子供たちにもさせてあげたいなと思った次第.ちゃんとした計測器を貸し出して地域の建物などを計測する課題とか面白そうじゃない.夏休みの課題にぴったり?

O [化学][音楽][ハード] CDはそもそもオーバーサンプリングされてないでしょ

興味深い記事.基本的にLPに高い周波数を含めた情報を入れ込むことは可能だろうけど,再生するのはかなり難しそう.何せ物理法則には逆らえないので,共振・慣性・ヒステリシス・その他の原因から思ったほど情報は引っ張れ出せないように感じる.

さて気になったのはCDの方で,シャノンの定理からサンプリングは3倍とか5倍の奇数でかつもっとオーバーサンプリングな周波数でサンプリングせよとのお達しなので,44.1KHzでぶった切るという行為自体かなりナンセンスだと思う.少なくとも10KHz以上の周波数はまともにサンプリングできていない(フィルタの特性とかどうのこうの以前の問題).

今ならハードの進歩でもっと高い周波数で取れるだろうし,比較的効率のよい可逆圧縮と併用すればCDと同じ媒体でももっと情報を詰め込む事は出来るだろう.

またSACDみたいにもっと高い周波数でビットストリーム(1bitノイズシェーピング)で記録するという方式もあるから,いろんな意味でCDはマニア向きな特性の媒体にはなっていない.

しかしじゃぁCDの音質が悪いかというと,やはり高音は不自然な感じはするが,今時の高次のデジタルフィルタとDAコンバータは安価でもなかなかいい性能を出すので,気になるほどではない(少なくとも一般人には).

結局のところ当時の技術ではなかなかいい線で規格された媒体だったということなんだろうな.

それから人間の耳は高音(20KHz以上)の音はあまり聞き取れない性質があるが,倍音は聞き取れているという研究結果もあるので,20KHz以上の高周波部分も情報としてあったほうがいいらしい.

たぶんそういう前提があってSACDが作られたのだろう.1bitのノイズシェーピングは,高音になるほど分解能が劣化するが,ある意味合理的な特性になっていると思う.


2007-09-07 [長年日記]

O [言語][Scala][Java] Scalaの吐き出すコードはjavacに近い

こちらの記事.

Results
 
ray.java 	12.89s
ray.scala 	11.224s
ray.groovy 	2h 31m 42s

Scalaの実装を眺めてみたりクラスファイルを逆アセンブルしている人間としては当然の結果かなぁと思うけど,Groovy大敗.ここまでとは思わなかった.

原因はScalaはほぼクラスに1:1で,なるべく静的に解決しようとしているのに対して,Groovyは動的に解決していることが多いというのが起因でしょうね(リフレクションを多用してそうだし,実行時まで決まらない型はインタプリタ的な扱いになってるだろうし).

たぶんjijixiさんの心配なされているようなコードの悪さじゃないと思います(チューニングすれば数倍は速くなるかもしれませんが).

それから若干javacのよりscalacの方が速いのも面白いところですね.

追記: groovycは使ってないとのこと.どうもインタプリタでもバイトコードにコンパイルされて実行されるらしいので大きな問題ではないらしい(2から3秒程度違うだけとのこと).

追記2: Groovyの小数点演算がdoubleで(だけで)はない事がかなり大きいのかも.内部でBigDecimalで計算されていれば,もちろんけた違いに遅くなりそうなので,ちょっと可哀想ではありますね.一応"d"付でコードを書いているようですのでdoubleで計算することを期待したコードにはなっているようですが.

O [写真][日記] 朝サイクリング,近くの空港

[写真: 滑走路][写真: 管制塔][写真: 管制塔と建物]

サイクリングがてら近くの空港まで.

なんにもない土地にこれだけ広大な施設があるとなかなか圧巻.

近くとはいえ朝でも汗が出るほどの運動量があるのでちょうどいいサイクリングコースなのかも.

O [ネタ][アニメ][マンガ] 右翼アニメ・マンガが彼の国で流行っている!?

まぁコードギアスは日本が占領されてるから思ったほど感情ないんじゃないかなぁ。主人公は日本人じゃないし。ジパングについては読んだ事がないのでノーコメント。

作品を作品としてみているから多少感情を持っていたとしてもそれはそれだと思うな。

完全に阿呆ですね・・コードギアスに皇室は出てこないし、 ジパングは日本軍の核使用を止めさせようという内容だし、 ケロロはカルト的アニパロだ。

結局元記事を書いた人ってのは作品を見てないということだな。

O [CG][ハード] 3Dマウス

ぽちっとなしてみた.

O [獲物][PC][ハード] 今日の獲物

  • AOpen Aeolus F86GT-WDC2560X (GeForce 8600GT 256MB)

さすがにいいスコア出ますな。


2007-09-08 [長年日記]

O [Scala][Java] Extractor Patterns,apply/unapplyメソッド

Twitter@kmizuより,

object ClassName {
  def unapply(c: java.lang.Class) = Some(c.getName())
}
 
object MethodName {
  def unapply(m: java.lang.reflect.Method) = Some(m.getName())
}
 
val c = "hola".getClass()
val m = c.getMethods()(0)
 
for(ref <- Array(c, m)) {
  ref match {
    case ClassName(name) =>
      System.out.println("The class name is " + name)
    case MethodName(name) =>
      System.out.println("The method name is " + name)
  }
}

不思議なコードだ,というよりかなり解りにくい.case ClassName(name)で,ClassName#unapply(c)が呼ばれてるって事だな.でnameとして返り値が帰ってくると.

でunapplyの引数がClassタイプかMethodタイプかを判断してるってところか.

ちなみに,Someは,

case final class Some[+A](val x : A) extends Option[A]

てな事(case class)になってるので,match { case ...} でパターンマッチングできると.

で,我らが先輩であるjijixiさんによると,

なるほどそういう風に使うのか.

applyメソッドを使うと,Array(...)の様に,返り値を持った関数の様にも使える.

object Length {
  def apply(s: String): int = s.length
}
println(Length("Foo"))

とすれば,3が帰ってくる.Length.apply()とLength()が等価.

利点は簡単で,importすれば,objectを関数代わりに使えるという事.ユーティリティメソッド代わりにできるかな.

もう1つは,クラスそのものを関数オブジェクトの様にも使えるという事.

class Name(name: String) {
  def apply(): String = name
}
val name = new Name("Foo")
println(name())

これを実行すると"Foo"が表示される.

なんか,かなり重要なところは抑えたつもりだけど,まだまだ調査する事が多いな.Scalaはカオスだけど,覚えれば覚えるだけ楽が出来る.

追記: jijixiさんの同じ日の日記を読んでると,PartialFunctionというのもあるのか.いきなりパターンマッチング書けるというのは便利そう.

O [アニメ] 攻殻機動隊 S.A.C. 2nd GIG感想

いろいろあるんだけど,いろんな意味でかっこいいよねぇ.

やっぱり押井守は監督やっちゃいけないなと思ってしまった(何人かの方に怒られそうだけど(^^;).

2nd GIGでは押井守はストーリーコンセプトをしていて,基本的に監督はやってない.監督はS.A.C.と同じく神山健治で,S.A.C.の良さをそのまま引き継いでくれた.

と共に,ストーリーコンセプトに押井守が参加することによって重みや深みが出ている.

いや何が言いたいのかというと,押井守には2段ほどクッションが必要だということだ.一般向けならなおさらで,自身が監督するのはあまり好ましくないと思っている.

もちろん,GHOST IN THE SHELL / 攻殻機動隊,イノセンス,ビューティフルドリーマー,パトレイバーシリーズなどは好きだし,面白いと思ったが,やはりあくまでもマニア向きだよなと思う(唯一一般向けだったのはビューティフルドリーマーか).

それはともかく,一番気になったのは丸いヤツラだったわけだが,人工衛星にアレを積むのは無理な設定だ.遠隔で機械を制御するのに一番のネックは通信で,遅延と妨害が問題になる.

静止衛星なら常に通信ができるだろうが,遅延がかなり大きい.周回軌道なら遅延は無視できるだろうが,今度は周期的に直接通信ができなくなる.

もちろん地上のネットワークと併用すれば常に通信は可能だろうが,遅延が周期的に変わり,機械制御はかなり難しくなる.

また遠隔制御の場合,大深度地下など通信が出来ない場所では運用がそもそもできないから,エトロフでのげふげふな作戦なんか実行できなかったはずだ(実際には通信設備が設置されていたみたいだが).

まぁそれをいえばイノセンスだって後半のドンパチで素子が衛星でドールを動かしていたわけだけど,あれは中継する衛星を動的に変えるだけでいいし,遅延は少なかったはず.また自身の一部をダウンロードしていたというシーンもあったので,あっちはさほど問題じゃない.あれより今回のアレはもっと難しいということだ.

それが気になってあんまり後半は集中できなかった事だけ書いておくね(^^;.

ちなみに素子が人工衛星にアレを積んだのは,もう2度と失わないようにとの措置なのだろうけど,人工衛星はいづれ壊れるし,耐久時間が短いからちょっとなぁ,というのもありました.

まぁ最後はアレ自身が自分のコピーをどこかにしてたからふがふがするんだろうけど(^^;.

本日のツッコミ(全2件) [ツッコミを入れる]

O きむら(K) [>やっぱり押井守は監督やっちゃいけないなと思ってしまった わはは。 立喰師列伝はアニメじゃないから除外ですか?(私は..]

O keisuken [きむら(K)さん: 立喰師列伝はまだ観てないんですよ,面白いという話は聞いてます. スカイクローラは明らかにマニア向..]


2007-09-09 [長年日記]

O [言語] 言語開発合宿

2泊3日の期間内に、オレ言語の仕様とその処理系を作るというイベントです

ということらしいです.場所が決まっていないとの事なんですが,大体の場所は言っておいたほうがいいのでは?(東京とか大阪とか)

開催日時は,9/21から23になりそうとのことです.

Scalaやってることもあって(ScalaにはParser combinatorがある)参加したいのですが,次に週にRuby勉強会があるのと,M踏のがそれなりに忙しいので難しそう.あと場所次第ってのもありますね(あんまり遠いと参加が難しい).


2007-09-10 [長年日記]

O [3DCMS][HTML] JSONぽいHTML記述

@html(lang: ja-JP) {
  @head {
    @title {へろーわーるど}
  }
  @body {
    @p(class: foo, alt: "だんらく") {
      だんらく
    }
    @p あいうえお@strong{か}きくけこ
  }
}

JSONぽい記述がいいのかなぁと画策中.このアイデアは結構前から.

利点は,終了タグが冗長でないこと位かな.欠点はWikiよりも読みにくくなることかも.

Wikiと比べると利点はかなりあって,行指向ではないので要素の階層化が出来る事(Wikiでは階層化は限定的)かな.

いちおう行指向記述も用意しておく.

Wiki記法としてはもうちょっと簡単な方がいいので,

! あいうえお
あいうえお'''か'''きくけこ
@div(class: figure) {
  @img(src: cover-title.jpg)
}
<H1>あいうえお</H1>
<P>あいうえお<STRONG>か</STRONG>きくけこ</P>
<DIV class="figure">
  <IMG src="cover-title.jpg">
</DIV>

とかできたらいいのかな.Parsingが面倒臭そう.

本日のツッコミ(全2件) [ツッコミを入れる]

O えんどう [なんかM式みたいですなあ>JSON風]

O keisuken [えんどうさん: たしかにM式によく似てますね.Parsingしやすいように先頭に@なんてつけちゃってますけど(^^;..]


2007-09-11 [長年日記]

O [Java] FastFile 1.3リリース

出てます.いろいろ改良されていますので,私も使ってみたいと思います.

O [Ruby][Java] JRubyの前にまずRjbで

興味深い.DRUMは明らかにメソッド呼び出しが遅いので(Socketを使っているので),Rjbが有利.ただしThreadを使う場合は完全にプロセスが分かれているので問題にはならないのだが....

今のところ素のRubyとしてはJRubyの完成度が上がってきているが,まだC Rubyには及ばないところがあるから,RubyからJavaと連携したい場合はJRubyかRjbかになると思います.

私の場合は最近ScalaからJavaを呼び出すことばっかりやってるが(何しろScalaは型ありきだし),Rubyのよさをそろそろ再考しなくちゃな.月末にRuby勉強会@関西で発表するし

O [Java][Linux] 組込Linux(ARM)用Java SE SDK,現在無料お試し期間中

無料評価版を公開中との事ですので,組込をやっていてJavaに興味ある型は是非.

フィードバックがあれば,Java界のプラスにもなりますし,今後Javaで組込という世界も広がるので協力をお願いしたいです.

O [ネタ][科学] 1910年に想像した2000年の生活

ここではでてきていないけど,科学的に実現はできるが,倫理的に実現されていないものもあるし,想像されたものよりももっとぶっ飛んだのもできてきてる.

武装した車なんか,そのまま装甲車もあるし,戦車もある.

偵察に関しては,車やバイクだけではなく,今ならステルス戦闘機もあるし,無人偵察機も使われ始めたし,偵察衛星もある.

新聞を家で聞ける,となるとラジオとかTVもあるだろうけど,今ではインターネットがその役割になりつつあるし,音声メモなんか,今なら携帯電話でもできちゃうし,そのままメールで送っちゃう事も出来る.

面白いなぁ.

特に1900年初旬にはなかった概念はマッシュアップというか統合だ.例えばGPSとカメラを組み合わせて写真にメタ情報をつけるだけではなく,例えばGoogle Earthでやっているような,地図と写真を組み合わせたり....

1つ1つの技術は細かい経験や技術の積み上げで,生活にあまり大きな変化はないかもしれないが,それらの組み合わせで現在の生活は豊かになっていると思う.もちろんその反面黒いものがたくさんあるわけだが.

O [ネタ][PC][ハード][ソフト] 1967年に想像された1999年のパソコンライフ

なんかほとんど実現されているだけではなくて,そういう想像ができた事自体凄いなぁ.

ネットで買い物,オンライン決済,監視カメラもPCで観れるようになってるし....さすがに電源ボリューム(SW?)とかついてないけど,PCの形もそんなに違ってないかも(もっとスタイリッシュだけど).

いやこれみて思ったのは,Note PCはいいとしてもデスクトップは相変わらずでかい本体を持ってるよなということだろうか.まぁ新型iMacみたいなスタイリッシュなコンピュータもあるけど.

O [Java] クラスの再定義

スクリプト言語とか書いてる人は必須情報(どんだけいるんだ(^^;).

Java での クラスの再定義方法:

  • java.lang.instrument.Instrumentation#redefineClasses メソッド: 英語, 日本語
  • JVMTI の RedefineClasses 関数: 英語, 日本語
  • Java 5 以降で標準機能になった。千葉先生に教えて頂いて知る始末。

もうJava 5未満をサポートする理由なんてないね(怒られそうだけど).まぁgcj/gij/GNU Classpathなどを使っている人には悪いけど(最新版はGenerics/Enum/Anotation/に対応しているらしいが...).

本日のツッコミ(全4件) [ツッコミを入れる]

Before...

O さくらば [Java SE 6 だと、もう 1 つ JVMTI の RetransformClasses メソッドがあります。た..]

O keisuken [jargon: Faxみたいなイメージだね.いちいちPC切ってたのが印象的.]

O keisuken [さくらばさん: なるほど,Scriptingをサポートしただけのことはありますね. うーん,Java 5以降の機能は..]


2007-09-12 [長年日記]

O [プログラミング][言語] プログラミングをするにあたってマシン語は必要か

マシン語が必要ではない場面であれば学ぶ必要はないと思う.

私はZ80やx86な機械語をハンドアセンブルやアセンブラを使って遊んでた時代があって,CPUのアーキテクチャや原理を知るにあたって有意義だと感じてはいるものの,機械語を学ぶ事が必須という論調には否定的だ.

アルゴリズムにしろ,機械語にしろ,何も最初から全部学ぶ必要なんかない.最初から全部なんて無理なんだし,必要に応じて学んでいけばいい.

それよりも最初からOO言語でも関数言語でもいいから,もっとマクロなレベルから初めても大丈夫だと思う.教える側はそれなりに気を使うだろうけど.

追記: この議論は@kmizuとやってた.私だけの結論じゃないが,ほぼ同じ考えだ.


2007-09-13 [長年日記]

O [Java] ActiveObjects

個人的にはHibernateよりもActiveRecordの方が好み.ActiveObjectsがそんな感じのものになってれば使うかも.

性能はActiveRecordと十分張り合える感じだけど,先がRDBMSだからか大きな差がない感じ.

O [Java][Scala] Scala 2.6にMVML

Scala 2.6.0 finalがリリースされてたのか.まぁこっちはぼちぼち入れ替えよう.

MVELについてはあんまり興味ないなぁ.Scalaほどインパクトがないので.ただしJBossにバンドルされているみたい.

またJava Beansをうまく取り扱えるように文法ができていて,Web系で使うのには向いている感じ.というより意識しているわけなんだけど.

O [PC][TV][ハード] 8インチ液晶モニタ

ちょっと欲しいかも.

ちょっとしたデモでサーバを持ち出しする時とか,そういう時にはモニタが必須だから,こういった小さなヤツは重宝しそう.

といってもそうそう機会があるわけじゃないし,Note PCをサーバにでっち上げるなんて技もあるわけだから,使う機会少なそうだけど.まぁ自宅サーバのモニタとしても使えそうだから1台買っとく?

というよりさ,いい加減小さいモニタを出してくれませんかね.


2007-09-14 [長年日記]

O [Ruby][Java] Geotoolsを使ったベンチマーク

@takaiさん召還されてますよー.

んー,Rubyそのものが不利という話もありますね.とはいえ,同じオブジェクト空間を使ってるJRubyがC Ruby + rjbに負けているのは感覚的にアレかなと思いますが,rjbの(作者が)明示的な型指定でコストを下げている点を考えれば確かに納得いく結果かな.

ちなみにDRUMでやったら数倍から数十倍遅いと思います.


2007-09-15 [長年日記]

O [言語] 誰かの金でピザをたのむ言語

これだけに特化した言語ならDSLだ.

card.id = "XXXX-XXXX-XXXX-XXXX"
phone.no = "090-XXXX-XXXX"

これを,

$ dareka_no_kane_de_pizza_wo_tanomu yoshiori.dkpt

とかやると,どういう仕組みかわからないが,

  • 携帯のGPS情報から身近のピザ店を検索
  • card.idで代金を決算
  • phone.noあてにピザのお届け

が行われる言語.

もちろん,card.idの主とphone.noの主は同じにしてもいいが,別にしてもいい.別にしておけば,カードの持ち主のお金でピザが喰えるというものだ.

アイデア: @_tad_

追記: card.id,phone.noに特化してるのなら " で囲む必要もないな(´д`).

追記2: なんかP(l|r)aggerぽいような気もするが気にするな.

本日のツッコミ(全2件) [ツッコミを入れる]

O ヨシオリ [ちょwwww 名前がwwwww]

O きしだ [[これはひどい]]


2007-09-16 [長年日記]

O [3DCMS][日記] M踏中間報告会(合同)

[写真: ホテルからみた浜名湖の隣]

行ってきた.

場所は,浜名湖の某ホテルで,浜松駅から送迎バスで30分.結構遠い.

浜名湖のほとりではあるのだが,残念ながら浜名湖本体は見えない位置.でも結構いい景色.

15日,16日の両日あり,K PMとM PMの合同で,私の番は2日目.

発表はちょっと駆け足だったのだけど,まぁ無事終わった.

質問や注文があった.合同というのはやはり意義があるなぁ.

  • コンテンツを早急に作る事

他にもいくつか.

帰りは浜松駅まで送迎バスで買える.

残念ながら浜松駅周辺は車がないと観光ができないことが発覚したので近くの楽器博物館へ.かなり地味なものなのにそこそこ楽しめてしまった.

博物館は一人で行くより複数人で行くと結構面白いかも.


2007-09-17 [長年日記]

O [ハード][ゲーム] Jumbotron DS

O [Scala][Java] Parser Combinator

ScalaのParser Combinatorはかなり強力.

その証拠としてJSON Parserが上げられると思う.

もし機会があればソースを覗いてみるといいと思う.


2007-09-18 [長年日記]

O [TV][マンガ] 有閑倶楽部(TVドラマ)

jargonの日記で知ってはいたけど,録画しない・観ない.

作者は地元出身の豪腕一条ゆかりだし,マンガは大好きで単行本を持っているぐらいだがこういうのは生理的にだめ(^^;.

(もちろんTVドラマ化を否定するつもりはない.実際うまくやってる作品も多いから化けるかもしれないが,好きな作品ゆえ汚点を見るわけには逝かないのだ(^^;)

O [言語][Java][Scala] 動的言語対静的言語(ただしGroovy対Scala)

以前取り上げた話題.Matz氏が書いたのでその感想.

確かにMatz氏が言うように動的言語が遅いよという結論には行きにくいかも.また理由についても私が書いたのと同じでちょっとほっとする.

たぶん同じ処理をさせたらRuby + YARVでも遅いと思うし,傾向的に動的言語は遅いと思うけど,実際にベンチマークとってくれないかなぁ.

ただ今までの経験では,コレクション周りがJavaの方が遅かったり,あるいは大きな確保が出来なかったりする短所も見え隠れしてるから,静的か動的かだけではなく実装や仕様によるパフォーマンスの差異はかなり大きいと思う.

いつも誤解されるんだけどJava擁護派でも,やはり遅いシーンなんていくらでもあるんだから何が何でもJavaサイコーなんていうつもりはないですよ.

O [日記] イベントがある時は

かならず電源タップを持っていくこと

O [3DCMS] Googleドキュメントでプレゼンテーション機能

むー,見栄えの変更はオーサリングツールでできて,もちろんバージョン管理もできて,PowerPointのサブセットという感じだ.

Web上で動作するので,Webブラウザで表示できるし,共有機能で公開することも可能.

ただスタイルシートというかメタ情報をあまりいれなさそうな感じなんで,欲しいものとちょっと違うなぁ.

とはいえ,完成度はかなり高い.手ごわい.

O [3DCMS] Slidyのライセンスと,S5への鞍替え

3D CMSにはプレゼンテーションモードがあるのだが,現在使用しているSlidyのライセンスはW3Cのであるらしく,商用での配布などで問題があるかもしれないということを報告会で聞いた.

ということで,今のうちにライセンスが自由そうなS5に移行する事を考えておく.

とりあえずContentFilterの修正で対処可能なんでS5を使って慣れておかなければな.

O [Scala][Java] Structual subtyping

静的なDuck Typingみたいなもの.

class Foo {
  def name = "Foo"
}
 
class Boo {
  def name = "Boo"
}
 
val ma = Array[{def name: String}](new Foo, new Boo)
 
for(m <- ma) println(m.name)

継承関係のないクラスの同じ名前,同じシグネチャのメソッドを呼び出すことができる本当にDuck typingなもの.

これは用途によっては便利かもねぇ.いちいちabstract classとかtraitとかしなくともいいわけだから,適当につくったクラスやオブジェクトをまとめて扱う事が出来そうだし.

ただしメソッド名とメソッドシグネチャが合わないといけないのでつじつま合わせは必要.

class Foo {
  def name = "Foo"
}
 
class Boo {
  def name = "Boo"
}
 
def name(m: {def name: String}): String = m.name
 
println(name(new Foo))
println(name(new Boo))

なるほど,あらかじめ静的に型チェックはできそうだね.

純粋なfirst-classな言語であればこんなことをしなくとも,全部クロージャにすればいいわけだけども,そうしないのは,Scalaも実は純粋なfirst-classな言語じゃないからだ.これはRubyとも似てるけど,Java/C#寄り.

内部では,たぶんリフレクションで実装されていると思う.一応使う型があらかじめ決まっていれば,キャストすることで実行は可能だが(最適化の余地),不特定のクラスの場合はそうはいかないので,事前の型チェックのみで実行時はリフレクションということになりそう.

とかなると,この辺そこそこなパフォーマンスで実行してくれそうなinvokedynamicとか良さそうなんだけど,結局仕様は詰めれたんでしょうか.

O [Java][Scala] NetBeansでもサポートされているSchliemann

Schliemann自体はNetBeans専用ではないようなのだけど,これを上手く使うとエディタの補完や文法チェックなどに使えるみたい.

ScalaはNetBeansに対応していないので,これで作ればポーティングできるかも.

といっても自分でどうにかするつもりはないので他人任せ.

O [Java][Ruby][Scala] 久しぶりにJRubyでJavaなコードを使ってみると...

ダメです.明らかにコード数が増えます.

こういうのはScala向きのようですね.特にimport文が便利ですし.

O [言語] Lispの良いところを現実的な解釈で

O [言語][プログラミング] 機械語を知るべき論は相変わらず否定中

うーん,必須じゃないと思うよ.

ただし直に必要になる場面もあるし,その知識が必要になる場面があるというのは事実だし,間違っていないのだけど,必須じゃないということだけは強調しておこう.

前も言ったけど,必要な情報や経験は後からしてもいいんだよ.

O [TV] 着信御礼!ケータイ大喜利

22日 23:00(NHK総合)は着信御礼!ケータイ大喜利

忘れないように!

本日のツッコミ(全10件) [ツッコミを入れる]

Before...

O keisuken [えんどうさん: 私もわかっていないのですが,調査しているところです. HTML/XHTMLについては仕様そのものを変..]

O keisuken [このへんが関係あるのかなぁ... http://www.w3.org/2003/05/patentpolicy-pr..]

O keisuken [takano32さん: 必要最低限の想像力ですかねぇ,世の中にはほんとにコーダな人たちもいますし(^^;(いいとはい..]


2007-09-19 [長年日記]

O [3DCMS] GoogleDocsのプレゼンにはアウトラインモードと,単独プレビューができない問題が

とりあえず3D CMSには,Wikiモードとプレゼンモードがあって,Wikiモードがアウトラインモードとほぼ同じ意味になってるのだけど,図などのオブジェクトも一緒に表示されているのでそれを省略できるようにしなくちゃいけないよな.

さてGoogleDocsのプレゼンテーションだけど,アウトライン以外にもっと重要なものが抜けていて,ZIPファイル化して外部に持ち出せるのだが,これをブラウザで開いても体裁がぜんぜんダメで,これだとネットワークなしの環境ではプレゼンすることはできず,意味ないなぁという感じです.

それからスタイルシートがないことかなぁ,テーマではなくて,文字装飾やレイアウトなどが一発で変わらないと手間かかりすぎです.

まぁまだαかβでしょうから,徐々に改善していくのでしょう.

ただ脅威に感じるのは,機能不足かどうかじゃなくて(単独機能の)完成度が高い事なんですよねぇ.

O [ネタ][日本] こいつらわかってる

割と客観的なコメントになってて,おもしろいかも.

まんだらけギャラクシー記事が報告済みのようなので再読の事w.

O [3DCMS][HTML][XML][JavaScript] W3Cのソフトウェアライセンス

W3Cのソフトウェアライセンスは以下の通りだそうです.

私が解説すると誤解を招く恐れがあるので,各自自分で読んでくださいませ.

とりあえずHTMLやXML,Slidyなどをそのまま使いつづけるのに問題はなさそうに思えます.

ちょっと古いのですが,日本語訳が見つかりました.


2007-09-20 [長年日記]

O [言語] 解析表現文法(Parsing expression grammar: PEG)

TwitterやってるとやたらPEGが目に付く.実はPEGという省略語はつい最近までしらなかったりした(内容は知っている).

というか,そういう話が目に付くTwitterって偏ってるよねw.

O [ハード][PC][CPU] CellベースのCPU

やっと出してきましたか.SPE4機,HD対応MPEG2/H.264エンコーダ・デコーダ,1.5GHzで10Wと内容はなかなか良さそうです.

ただ回路規模がでかすぎて,あんまりコストを下げれそうにないので,家電などに組み込みするのはかなり厳しいのでは.

何に応用するのか難しい製品のような気はします.

業務用の民生機器なら十分元が取れそうですけど(TVカメラ,エフェクタ,FFTアナライザ,セキュリティ機器,TV会議システムなど).

O [ネタ] 毒電波を防ぐ何か

[画像: 毒電波を防ぐ何か]

作ってみましたw.


2007-09-21 [長年日記]

O [Java] そんな団体はじめて聞いたぞ「岡山Javaユーザーコミュニティー」

こんな団体が地元にあるのは始めて聞いたぞ:-).

ということで丸山先生が来られるとの事.

参加表明しときましょうか.

O [Java][Scala] jEditのScala modesを試してみる

[画像: jEdit + Scala modes]

なんかJava+Swingで動いているって感じしないですね.Java 6 SEで動かしてますがかなり軽いです.

Scala modesについてはインストールができなかったので,jEditの設定ファイルを直接編集して書き換えました.

入力補完はしてくれないのですが,まぁ定義語の強調と括弧などは補完してくれるので,かなりマシです.

O [OSS] 魔法のおなべ - Eric S. Raymond

Twitterで話題に上がったのでめも.

本日のツッコミ(全6件) [ツッコミを入れる]

Before...

O keisuken [はい,たいしたことはできませんけど,今後ともよろしくおねがいします.]

O yojik [> 魔法のおなべ ドックイヤーで考えると、遥か過去の文書なのに、今出てる議論は大体含んでいて、さらに未来の展望まで考..]

O keisuken [yojikさん: 実はちゃんと読んでなかったのです.昨日流し読みはしましたけど. 一読するに値する文章ですね.もっと..]


2007-09-22 [長年日記]

O [言語][Ruby][Java] Smalltalkも速いっ

VisualWorksすげー.またYARVもすげー.

こんだけ速ければ,今までCやFORTRANでばりばり書いてたコードをSmalltalkやRubyで書いてもいいケースは増える.

O [ネタ][写真] ひでー仕打ち(ぷちぷちでくるむ)

ティッシュが取れるよう穴があいているそうです.ちゅうかひどいいじめだw.

もちろん冗談だけどね.


2007-09-23 [長年日記]

O [録画][TV][アニメ] BSアニメ夜話,その他

BSアニメ夜話 第9段放送決定!.

9月25〜27日 各日24時!!

第1夜 「ど根性ガエル」
第2夜 「銀河鉄道の夜」
第3夜 「カウボーイビバップ(TVシリーズ)」

BSマンガ夜話 復活。

11月27日(火) 24:00〜 「作品未定」
11月28日(水) 24:00〜 「作品未定」
11月29日(木) 24:00〜 「作品未定」

O [Ruby][Java][Scala] 並行・並列機構,Fiber/Actor

RubyのsnapshotをCygwinでビルドしようとするとどうしても失敗する.しょうがないので,ruby-1.9-mswin32版を取ってきてそれを使った(そもそもビルドすることに興味はない).

f1 = f2 = nil
f1 = Fiber.new {
  f2.yield
}
f2 = Fiber.new {
  f1.yield
}
f1.yield

とかやると,f1が実行され,f2が実行される.RubyのFiberは順番が守られるようだ.

なおFiber.currentとかすると現在のFiberが返ってくるし,

Scalaの場合は,

case class E
var a1 = null
var a2 = null
a1 = actor {
  react {
    case E => a2 ! E
  }
}
a2 = actor {
  react {
    case E => a1 ! E
  }
}
a1 ! E

ちょっと冗長だが,基本的には同じ.reactはレシーバになっていて(返り値のあるreceiveもある),!メソッドによって呼び出される.caseで条件分岐されているが,どうも必ずメッセージ引数が必要で,なんらかの値を送っておく必要がある.今回はダミーでcase object Eを送っている.

ちなみに呼び出しの順番はきちんとは守られない.といっても並行機構では必ずしも順番は大事ではないので別に構わない.

ScalaのActorの順番が守られないのは,内部で並列化されているからだ.実際には並行・並列のハイブリッドになっているようだ.

FiberもActorももっといろんなことができるが,Ruby勉強会ではこれ以上は突っ込まない.

なお,Scalaの場合は,

val a1 = actor {
  var i = 0
  loop {
    println(i)
    i += 1
    if(i == 100) exit
  }
}
a1 ! E

とかやると,ループされる.

なお,actor, react, loopはすべてメソッドで,関数オブジェクトを代入している,という仕組みになっていて,Actorのために文法を作ってはいない.

Fiberもループされるようだ.

f1 = Fiber.new {
  loop {
    ...
  }
}

ちなみにloopはもともとRubyが持っている組込関数だそうだ.

O [Ruby][Java][Scala] Rubyは関数型言語じゃない,Ruby勉強会発表内容検討

というのをあらためて思った次第.

Scalaは関数型言語ぽく,Rubyとは性質が異なる事もわかった.

クラスを関数オブジェクトぽく使えるapplyメソッドや関数オブジェクトなどがScalaにはあって,RubyにもブロックをオブジェクトにできるProcなどがあるが(Proc.new, proc, lambda...),あんまり関数型ぽくない.

Scalaも思いっきり手続き型の言語でもあるけど,関数型の言語とも言えるのに比べて,ほぼおなじ事はできるけど,Rubyは手続き言語的性質が大きいように見られる.

そのあたりを説明する必要があるかな.

それから動的性質とメタプログラミングの関係も紐解く必要がある.

たぶんメタプログラミングと動的性質は相性がいいのだが,ここらへんを明確に例を示しながら書いておきたい.また逆に静的型付でもメタプログラミングができることも述べておかないとRubyなどの動的言語しかできないという誤解を招くので比較しておこう.

とりあえず,両者の文法とコード,FiberとActor,メタプログラミングあたりで攻めようと思う.

本日のツッコミ(全4件) [ツッコミを入れる]

Before...

O keisuken [ささださん: Cygwinに関してはビルドそのものに興味がないため,調べてません.rdocあたりで失敗していたようで..]

O ささだ [上記の例をやる場合は、require 'fiber' してから、Fiber#yield ではなく、Fiber#tra..]

O keisuken [ささださん: ああそれは知ってます > requireしなくてもいい 書いた後で情報は得ました. > Fiber ..]


2007-09-25 [長年日記]

O [日記] 最近の傾向

リンクできない日記やWebページは,Twitterに貼る

TwitterをChat代わりに

Twitterをメモ代わりに

まとまった考えをここに


2007-09-26 [長年日記]

O [Java][Scala][.Net] Scalaの側面

Scalaは,Java ME CLDCや.Netなどに対応している事はあまり知られていないが,浮気してみました実装ではなくて,ちゃんと実装されているようだ.

残念ながらランタイムであるcldcapi10.jarは117KBもあるので,iアプリなどには向かないが,SmartPhoneやPDAなどの機器なら十分動かす事ができそうだ.

一方.Net対応は,ソースを見る限りちゃんとやってそうなのだが,動かした事がないので完成度については未知数.

ただしランタイムは実装済みのようだし,ScalaコンパイラとランタイムはJavaと.Netの固有の部分以外は共通で分離されているようなので,バージョンアップがされてもちゃんと追従できているようだ.

ということで実はCLDC/.Net対応もかなりのトピックだと思う.


2007-09-27 [長年日記]

O [Ruby] Ruby on Railsは流行っているのか?

Twitterでは流れてしまったのに今更ながら再掲.

まぁ基本的に万能だと思いますよ.ちゃんと逃げ(Plug-inなど)は用意してくれてるし.

「規約うぜぇ,規約がRailsの特徴ですよ」というコメントがあって笑いました.両方とも大事で,立場によってやはり好みは分かれると思います.まぁ仕事だと好みではなくて,開発効率や品質,運用面での問題などが大事であって,好みは二の次でしょうけど.

で(仕事で)流行っているかどうかというと,話題に上がっていてそれなりに試してはいるので,流行っていると言えるけど,絶対数では少ないので,それほどでもないというのが現状でしょう.

やはり開発環境としてのできよりも,Ruby言語の経験不足(他の言語からの移行コスト),パフォーマンスが悪い,スケーラビリティ向上の法則がわからない,などの要因がボトルネックになっていて,普及を阻害していると思います.

パフォーマンスの悪さについてはWebアプリはフロントエンドで使われ,大半はデータベース処理に時間が喰われるので問題ない,という主張は間違っていないのだけども,やはり大きなサイトではデータベースに関係しないWebアプリもあるわけだし,少しでも速くしたいという要望が多いので,その論法は通りにくいでしょう.

ということでRailsを採用したとしても,Webコンテナをどういう組合せ・構成にするのか,負荷分散はどうするのか,パフォーマンス不足の部分にJavaやPHPと組み合わせるのかなどのノウハウが必要になってきますので,運用面ではいろいろ悩むと思います.

開発そのものについてですが,たぶん炎上しないように開発していくのは多くのケースで可能だと思います.良著なRails本がいくつもでていますし,AgileやXPの本質をちゃんと見抜いている人なら開発スパイラルをうまく向上させる事ができるはずです.

ということで「Railsが悪」という論法には否定的かな.

パフォーマンス不足については,今のところRailsの仕組み上しょうがないようです.eval使っているところが多いとの事で,YARV enabledな環境で動かせたとしても思ったほどパフォーマンスは良くならないと思われます.まぁ逆に言えばRailsのリファクタリングをすれば向上する余地は残っているともいえますが,開発スタイルと実装が密接にかかわっている事もあり,全く同じ開発スタイルのまま改善するのは困難かもしれません.

まぁそれらはともかくとして,JavaなりPythonなりPerlなりのWebアプリケーション開発環境になんらかの影響を与えたのは事実で,軽視すべきものじゃなさそうですね.

O [仕事][日記] 某大へ

女の子率40%位?たぶん過去最高じゃないかな.

内容については秘密.いろいろあるみたい.

3D CMSもちょっとデモ.ぼんやりはわかってもらったみたい.


2007-09-28 [長年日記]

O [Java] SSHといえば,

一般的にSecure Shellのことだと思いますが,JavaのSSHは別の意味があるらしいのです.

実はこの意味を知ったのは最近で,はっきりいうと「あんたバカァ」といってしまいたくなります(SSH(Struts+Spring+Hibernate)はマイナーすぎる).

まぁ,IDEなしで開発するのが難しい環境は興味ないからどうでもいいですけど.

O [Scala][Java] ループでストリームを処理するには

Scalaって妙に融通が効かないところがある.例えばループでbreak文が使えないことだ.

この前ちょっと困った事があった.

Reader reader = ...
char[] buf = new char[64 * 1024];
int len;
while((len = reader.read(buf)) > 0) {
  ...
}

というコードを何気なくJavaでは書いてしまうわけだが,Scalaだとうまくいかない.

var reader: Reader = ...
val buf: Array[Char] = new Array(64 * 1024)
var len: Int = 0
while((len = reader.read(buf)) > 0) {
  ...
}

を実行すると,

while.scala:8: warning: comparing values of types Ordered[Unit] and Unit using `>' will always yield false

とか言われるので,面倒なのでこう書いちゃう.

var reader: Reader = ...
val buf: Array[Char] = new Array(64 * 1024)
var len: Int = 0
def read: Int = {len = reader.read(buf); len}
while(read > 0) {
  ...
}

innner methodは,親メソッド内の変数を取れるので,こんなことができる.

どうもこの手のはまりどころはメソッドにする,というのが鉄則になるのだろう.

まぁそもそもブロックやユーティリティメソッドを持ったIOクラスを作ればいいじゃん,という問題なのだが,局所的にこういうコードが必要な場合はそうはいかないから,こういう方法もあることを覚えておこう.

O [Scala][Java] zipしてみる?

val keys = Array(1, 2, 3)
val values = Array("Foo", "Boo", "Bar")
 
val zippedValues = keys.zip(values)
 
for(value <- zippedValues) {
  println(value._1 + "=" + value._2)
}
1=Foo
2=Boo
3=Bar

ふーん.

ちなみに数が合わないと,

java.lang.Error: zipping arrays of different length

とか実行時に怒られた.

なんかこういうLLではありがちなメソッドが標準的に搭載されていると違和感を感じる.いやこれがふつーなんだろうけど,Java APIは低レベルで細かい配慮には欠けるので,ちょっとカルチャーショックを感じるのだ.

追記: みずしまさんからTupleの値を直接変数に入れたらとのことで、

for((key, value) <- zippedValues) {
  println(key + "=" + value)
}

がベストですね。

O [Scala][Java] ループでストリームを処理するには その弐

ブロックを使うといいらしいことがわかった.

var i = 0
while({i += 1; i} <= 10) {
  println(i)
}

を実行すると,

1
2
3
4
5
6
7
8
9
10

となる.

ブロックを関数の様に使っているわけだ.

ということでこれを応用すると,

var reader: Reader = ...
val buf: Array[Char] = new Array(64 * 1024)
var len: Int = 0
while({len = reader.read(buf); len} > 0) {
  ...
}

とできる.なるほど.

ただしブロック内のコードが多くなると,可読性が悪化するので,必要に応じてinner method化すればいい.

ということでJavaよりももっと柔軟性があることがわかってホッとする.

本日のツッコミ(全4件) [ツッコミを入れる]

Before...

O keisuken [ぐはっ(吐血 やられたw]

O みずしま [割とどうでもいいですが、 for((name, value) <- zippedValues) { print..]

O keisuken [みずしまさん: おお、当たり前ですね(^^;]


2007-09-29 [長年日記]

O [日記][Ruby] Ruby/Rails勉強会@関西-19,京都へ

ということで,そろそろ京都へ移動.

今回はしょっぱなの発表者なので,終わったら脱力感に見舞われること間違いなし(^^;.

O [日記][Ruby][Scala][Java] Ruby/Rails勉強会@関西-19,本番

うーん,観衆が置いてきぼりになるとは思ったのだけど,あえて重要な箇所以外はとばして話すようにした.どうしても濃い話題だからやむを得ないところがある.

膨大なページの資料も自分用として参考になるし,聴いた方も後から読んでふむふむと思っていただければなということで76ページ分書いた.

Gollumさんに宴会の後「時間内に終わらないんじゃないか」と指摘されたのだけど,最近はプレゼンの質はともかく時間だけは守るようにしているし,今回も時間内にできました.まぁリハーサルは3回ほどしているのでペースは把握しているのですけどね.

ということで,プレゼンタつたないかつちょっと難しすぎたなという反省はあるけど,資料もまぁまぁ用意したし勘弁してください.

Scalaはカオスな変態言語と言ったけど,Rubyが変態言語は言い過ぎw.いやPerlやPythonなどの一般人にも使えるLight-weightな言語ですよ.一般向けで判りやすく使いやすいということはすばらしい.

たぶん動的かどうかよりもそっちが大事かな.利便性を優先したというMatz氏の構想が特に近年好まれている事でしょう.

O [日記][Ruby][Scala][Java] Ruby/Rails勉強会@関西-19,全容

大学におけるRails教育の順番や教えるべきことについてはなかなか興味深かった.初めての人にMVCを教えてもやっぱり実感が湧かないと思う.実感を湧かせることがたぶん教育の本質だと思うので,最初はなるべく絞って話をしたほうがいいのかなぁと思ってました.

おかげでLingr/ruby-kansaiが凄い事にw.

Kagemushaも少ないコードで効果的なツールになっていて,Rubyの動的な性質を上手く使っていることに感心した.swapのブロック内だけ再現したいオブジェクトコードを入れ替えができて,テストで有効に使えると思う.

Javaだとこううまくはいかない.一応,Java 5からクラスの破棄を簡単にできるようになったので,おなじ事ができると思うけど,100行程度で収まるとは思えませんな.

Rubyの初級者講座は,思ったより難しいと感じました.オブジェクト指向も初心者は実感が湧かない分野ですよね.私がOOの本質が判り始めたのはC++を5年ほど遊びで使っている時はわからなくて(そもそもvirtual宣言がある言語は初心者には向かない),Javaを使い始めてからなんですけど,たぶん初心者はクラスもインスタンスもわからず混乱しそう.


2007-09-30 [長年日記]

O [Scala][Java] Scala使いをなんと言う?

Twitterでなんか議論が勝手に進んでるw.

Scalanaが優勢らしい.

しかしScalaな人はガチムチ認定なのかorz.

O [HTML][CSS] Webページにおける背景

はっきりいって背景って無地が一番ベストだよね.

大理石とかでこぼこした画像を貼ったりする人がいるけど,あれは字が読みにくくなるしちっとも人間に優しくない.

ということで色もつけない方がいいかも.白地でもいいと思う.

実際スタイリッシュでかっこいいサイトはそういうデザインが多い.

ということで初心者がWebデザインする時は,まず白地から始めよう.

O [FreeBSD] DHCPサーバ,Sambaサーバ,MTA,IPフィルタ,その他

未だにFreeBSD 4がイントラで動いている.

そろそろいろんなソフトウェアが動かなくなっている現状があるし,FreeBSD 6だとセキュリティやパフォーマンス,使い勝手が向上しているのでそろそろ移行しておきたい.

ということで現状では何が使えるのか調査中.

* DHCP: ISC版のdhcpd

* Samba: Samba 3.x

* MTA: Postfix 2.4

* IPフィルタ: IPfilterかなぁ

まぁDHCPもSambaもいい加減PCで動かさずに専用のストレージサーバでいいのかもしれないけど....

つうか,インターネットサーバ以外は低消費電力化をしなくちゃ.

本日のツッコミ(全4件) [ツッコミを入れる]

Before...

O keisuken [nasuviさん: ああ,この日記のデザインのことを言ってるんですかね? これはtDiaryが持ってるテーマでSTA..]

O keisuken [nasuviさん: こんな感じでどうでしょう.CSSを追加してみました.]

O nasuvi [説明不足ですみません。この日記のデザインのことでした.CSSの追加で、見やすくなりました STAR TREKの配色..]


やること、い〜っぱい(´д`)。

トップ 最新 追記