image

  • フォト Amazonギフト券
    ※この時計の時刻は、閲覧しているパソコンのものであり、必ずしも正確な時間とは限りません

検索

最近のトラックバック

無料ブログはココログ

xfy

2008-09-14

タイマー付きダイアログボックス

Timerdialog

- http://homepage2.nifty.com/youichi_kato/src.html
  > タイマー付きダイアログボックス (2008-09-14)
として、xfy/xvcd 上で、
       操作をしないでいると自動的にクローズするダイアログボックス
を作ってみた。
<instructio:post delay="m-sec" ...> を利用している。
秒数部分は秒単位でカウントダウンして表示更新もしている。


現状では、それなりの記述を個々のダイアログに追加しないといけない。
既存ダイアログに、ちょっとした記述追加だけで、こういった機能を追加できるような仕組みが欲しいなぁ。
# ruby での module include みたいな...

2008-08-21

ruby on xfy, jruby on xfy

こんな記事が出た。
- http://xfy.justblog.jp/labs/2008/08/ruby-2065.html
> xfy 実験室: Rubyの世界にはワクワクがいっぱい! あれ?
> ... GEM で追加できる exifr と rmagick4j というモジュールを使ったサンプルをご紹介します...

gem を知ってしまうと、
xfy のプラグインインストール/アンインストールも ruby の gem みたいな
管理にして欲しいと思う人がでてくるはず。
ぜひ gem のような管理の仕組みをつくり、さらに GUI操作環境 を xfy 上に構築して欲しいなぁ。
# netbeasns の ruby gems 管理はなかなか便利だと思う。
# ruby gems や mac ports に対する xfy での GUI クライアントも欲しいけど。

hpricot という gem をつかうと、 html (少しぐらい不整合があってもよい)を処理できる。
その結果を  ruby の標準のxml 操作ライブラリーをつかうことで目的にそった xml に変換ができる。
# rss が提供されていない サイトに対して、自前で rss を生成するなんてことができる。

xml に変換さえできればしめたもの。
xfy/xvcd の template 機能で (レンダリング + 編集可能) なアプリケション画面が自然に作成できる!

net で拾った もこもこ雲の画像。

Kumo5

2008-08-17

xfy リスト表示コンポーネントで Drag & Drop (その2)

- https://www.xfytec.com/community/modules/newbb/viewtopic.php?topic_id=245&forum=8
> xfy コミュニティ - Generated Link from XML file for Blog
この記事の中でこんなコードが示されていた。

            <xvcd:action event="event:drop-target">
                <inst:param name="event:event" />
                <inst:if test="$event:event/event:drop-target/@type = 'drop'">
                    <inst:variable name="url" select="$event:event//lsp:url"/>
                    <inst:variable name="fragment" select="function:synchronous-document($url)"/>
                    <xvcd:insert ref="//d2l:dropped-xml" position="last-child" select="$fragment/*"/>
                </inst:if>
            </xvcd:action>

$event:event//lsp:url として、 Desktop や ファイルエクスプローラから File などを xfy の画面に drop したときの URL を取得できるようだ。

- https://www.xfytec.com/community/modules/mydownloads/singlefile.php?lid=184&lang=ja
> xfy コミュニティ - ImageEasy for Blog Editor
のデモ画像でも、xfy の外から image ファイルを deop して取り込んでいる様子が示されている。
down load したzip ファイルを展開して、blog-imageeasy.xvcd を眺めると、やはり
$event:event//lsp:url を利用していることがわかった。

そこで先の List での drag & drop に 外部からの drap 対応を追加してみた。

Xfyuserdata02
          <list:list type="{xvcd:user-data('type')}">

の直後に以下のコードを追加した。

              <xvcd:action event="event:drop-target">
                <instruction:param name="event:event" />
                <instruction:if test="$event:event/event:drop-target/@type = 'drop'">

                  <instruction:variable name = "url" select="function:url-decode($event:event//lsp:url)"/>
                  <instruction:choose>
                    <instruction:when test="function:ends-with($url, '/')">
                      <xvcd:insert ref="." position="last-child" caret-move="none">
                        <simple:folder name="{$url}" />
                      </xvcd:insert>
                    </instruction:when>
                    <instruction:otherwise>
                      <xvcd:insert ref="." position="last-child" caret-move="none">
                        <simple:file name="{$url}" />
                      </xvcd:insert>
                    </instruction:otherwise>
                  </instruction:choose>
                </instruction:if>
              </xvcd:action>

xfy 外部から File を drop したとき、その URL さえ取得できれば、その後はアプリケーションに即した様々な処理が可能だろう。

P.S.
windows や Mac でのターミナル画面でも、File/Folder をドロップするとファイルパスがコマンドライン行に追加される。
cd と打ってから、Folder を drop して、長い文字列をタイプすることなく directory 移動することができる。

2008-08-16

xfy リスト表示コンポーネントで Drag & Drop

- http://homepage2.nifty.com/youichi_kato/src.html
    xfy リストコンポーネントで Drag & Drop (2008-08-16)
として ドラッグ&ドラッグでのリスト項目順番移動の実験をしてみた。
Drag 中の表示をいろいろ工夫したかったが、List:item には style 指定で細かな表示の変化を与えられないようだ。
実験コードでは Bold 表示指定だけをしている。
# 移動先を 下線で示したり、移動結果を薄色で表示( ゴースト表示)したかったが、ちょっと面倒そう...
http://www.dhtmlgoodies.com/scripts/drag-drop-folder-tree/drag-drop-folder-tree.html
http://unageanu.sakura.ne.jp/blog-samples/071002/
http://www.tkrb.jp/guide/2008/01/rails_ajax.html
# > つくるぶガイドブログ: ドラッグアンドドロップで並べ替え(Rails + Ajax)

Listdnd

2008-08-14

user-data に xml 内容を保存する

いまさらながらではあるが、
- https://www.xfytec.com/community/modules/news/article.php?storyid=278#top
> xfy コミュニティ - XVCD プログラミング Tips集 目次
なんてページがあることを知った。

読んでいて思いついたことをメモしておく。
つぎのような記載があったけど、
- https://www.xfytec.com/community/modules/news/article.php?storyid=314#variables
> Q. variableとuser-dataの違いは?

> ... user-dataは何度でも書き換えが可能な変数です。user-dataはテキストデータのみ設定可能です。...

function:dom-to-xml-string / function:xml-string-to-dom をつかって、 string 化したものを user-data に保存するようにすれば、xml データの保存もできるのでは?
実際にためしてみよう。
Xfyuserdata
  上2行に variable に保持した xml 断片から生成したもの
  下2行に user-data に保持した html 断片(string <-> dom 変換を利用) から生成したものが表示できている。
message-box には user-data に保持している文字列を表示している。

以下に ソースコード(2ファイル) を示す。
2番目のソース中の太字部分が、variable, use-data への値設定の箇所である。

$ cat HelloWorld.xml
<?xml version="1.0"?>

<hw:document xmlns:hw="http://xmlns.example.com/developer/tutorial/helloworld">
    <hw:message>
        Hello World!
    </hw:message>
</hw:document>

$ cat HelloWorld.xvcd
<?xml version="1.0"?>

<xvcd:xvcd
   xmlns:xvcd="http://xmlns.xfy.com/xvcd"
   xmlns="http://www.w3.org/1999/xhtml"
   xmlns:function="http://xmlns.xfy.com/function"
   xmlns:instruction="http://xmlns.xfy.com/instruction"
   xmlns:ctrl="http://xmlns.xfy.com/controls"

   xmlns:hw="http://xmlns.example.com/developer/tutorial/helloworld"
   version="1.0">

  <xvcd:vocabulary name="HelloWorld" match="hw:document" call-template="root"/>

  <xvcd:template name="root">
    <html>
      <body>
    <xvcd:apply-templates/>
      </body>
    </html>
  </xvcd:template>

  <xvcd:template match="hw:message">

   <xvcd:variable name="val">
      <hw:data>
    <hw:item>Internet Explorer</hw:item>
    <hw:item>Netscape Navigator</hw:item>
      </hw:data>
    </xvcd:variable>

    <xvcd:user-data name="data-text" value="{function:dom-to-xml-string($val)}"/>

    value:<br />
    <xvcd:for-each select="$val/hw:data/hw:item">
      <xvcd:value-of select="."/><br />
    </xvcd:for-each>

    user-data:<br />
    <xvcd:for-each select="function:xml-string-to-dom(xvcd:user-data('data-text'))/hw:data/hw:item">
      <xvcd:value-of select="."/><br />
    </xvcd:for-each>

    <span align="right">
      <ctrl:trigger>
        <ctrl:label>DEBUG:variable</ctrl:label>
        <xvcd:action event="ctrl:triggered" >
          <instruction:call name="debug">
            <instruction:with-param name="str" select="function:dom-to-xml-string($val)" />
          </instruction:call>
        </xvcd:action>
      </ctrl:trigger>

      <ctrl:trigger>
        <ctrl:label>DEBUG:user-data</ctrl:label>
        <xvcd:action event="ctrl:triggered" >
          <instruction:call name="debug">
            <instruction:with-param name="str" select="xvcd:user-data('data-text')"/>
          </instruction:call>
        </xvcd:action>
      </ctrl:trigger>
    </span>

  </xvcd:template>

  <xvcd:command name="debug">
    <instruction:param name="str"/>
    <instruction:message-box>
      <xvcd:value-of select="$str"/>
    </instruction:message-box>
  </xvcd:command>

</xvcd:xvcd>

2008-08-07

java の ScriptEngineManage の実験

- http://d.hatena.ne.jp/koichiarchi/20070821/1187669141
> JavaからRubyを使う - koichi’s swap memory

この記事にある java のサンプルを MacOSX 10.5 で動作させてみた。

その前に まずは、
classpath 指定をして java を実行する shell script をつくった。

$ cat run.sh
#! /bin/sh

JRUBY_LIBS=\
$JRUBY_HOME/lib/bsf.jar:\
$JRUBY_HOME/lib/jruby.jar:\
$JRUBY_HOME/lib/profile.jar:\
/Users/youichikato/work/www/jsr223-engine/jruby/build/jruby-engine.jar

java -cp $JRUBY_LIBS:. $*

まずは、有効な engine の調査だ。
$ cat ScriptEngineSearch.java
// See
//  http://d.hatena.ne.jp/koichiarchi/20070810/1186736204

import javax.script.ScriptEngineFactory;
import javax.script.ScriptEngineManager;

/**
* 使用可能なスクリプトエンジンを調べる
*/
class ScriptEngineSearch {
    public static void main(String args[]) {
        ScriptEngineManager manager = new ScriptEngineManager();

        // 使用可能なエンジンの一覧を取得
        for (ScriptEngineFactory engine : manager.getEngineFactories()) {
            System.out.println("enfine full name = " + engine.getEngineName());

            // エンジン生成時に使用出来るショートネーム
            for (String shortName : engine.getNames()) {
                System.out.println("- engine short name = " + shortName);
            }
        }
    }
}

走らせると
$ ./run.sh ScriptEngineSearch
nfine full name = JRuby Engine
- engine short name = jruby
- engine short name = ruby
enfine full name = AppleScriptEngine
- engine short name = AppleScriptEngine
- engine short name = AppleScript
- engine short name = OSA

おー、jruby が認識されている。

次は、外部の jruby scriファイルを実行する例だ。
$ cat tax.rb
def tax(m)
  puts m * 1.05
end

$ cat JRubyFileExecute.java
// See
//  http://d.hatena.ne.jp/koichiarchi/20070821/1187669141

import java.io.FileReader;
import java.io.IOException;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class JRubyFileExecute {

    private static ScriptEngine ruby = new ScriptEngineManager().getEngineByName("ruby");

    public static void main(String[] args) throws ScriptException, IOException {
        FileReader reader = new FileReader(args[0]);
        ruby.eval(reader);
        ruby.put("m", 980);
        ruby.eval("tax($m)");
    }
}

走らせると、
$ ./run.sh JRubyFileExecute tax.rb
1029.0
素晴らしい!

- https://scripting.dev.java.net/
> scripting: Project Home Page
には、サポートされる script の一覧がある。

java のソースコードを生成 or 入力し、それを compile して実行
なんてことをすれば、java を script 言語のように扱えるだろう。

2008-07-31

xfy 実験室: Java Powered 拡張コマンド の記事を読んだ

- http://xfy.justblog.jp/labs/2008/07/java-powered-ec.html
> xfy 実験室: Java Powered 拡張コマンドを使いやすく「メイクアップ」

この記事では、
    <extcommander:call-command
       plugin-id="com.xfy.community.samples.exthelloworld"
       selected-text="{xvcd:user-data('CITED')}"
        entry-xml-string="{function:dom-to-xml-string(/)}"
        return-to="result"/>
    >
というような形で  xvcd から java でつくったプラグインを呼びだせるという雛形が示された。

java 側で、ProcessBuilder を使う事で、任意の外部コマンドを呼び出し、そのコマンドでの処理結果を
xfy 側に返すことができるし、外部コマンド側で ダイアログなどの GUI を利用することもできそうだ。

xfy/xvcd での XML でのプログラミングは敷居が高い。
自分が知っている言語で処理を行い、XML に整形して結果を返すだけなら、敷居はぐっと低くなる。
JSON の利用や、 RDB の利用、web-service の利用、画像ファイル生成なども自分の知っている言語で、
その言語での既存ライブラリーを自由に使えるのはとても便利と思う。
( http://ja.doukaku.org/lang/ にあるような
  haskell, smalltalk, C#, phthon, perl, ruby, schema, Scala, javascript, PHP, ... をどれでも使える!)

xfy は "複合文書" を処理するシステムだが、その処理自体も "複合言語" で記述ができることになる。
これに "複合マシン" (分散処理、グリッドコンピューチング、P2P ...) といった要素も加わると、3C (3つの Commpaund) が実現できそうだ。


net で拾った テクノロジーの進化のパターン の画像 ( http://thik.jpn.org/archives/2005/10/_3_3.html )

2008-07-26

Java製拡張コマンド(ExtHelloWorld.java) を改造 (その2)

xfy blog editor から ruby  スクリプトを呼び出す例として、
  - erb を使って九九の表を生成
  - ruby/tk で ファイル選択ダイアログ、色選択ダイアログを開く
をつくってみた。どちらも問題なく xfy blog editor から動作するようだ。
- http://homepage2.nifty.com/youichi_kato/src.html
>  ExtHelloWorld.java の改造を登録 -002(2008-07-26)

xfy/xvcd でダイアログをつくるより、ruby/tk でダイアログをつくるほうが簡単な場合もありそうだ。

Chooser01

上のスクリーンショットは、chooser.rb を xfy blog editor から実行したものだ。
左上の小さな winodow が、ruby/tk でのメインウインドウだ。
[open] ボタンをクリックして、 ファイル選択ダイアログを出している最中の画面だ。
MacOSX(10.5) で動作させており、MacOS の通常のファイル選択ダイアログが出ている。

次は ruby の代わりに jruby を使うことで、 xfy blog editor 中の java クラスを利用することができるかを試す予定。

2008-07-22

ExtHelloWorld.java の改造を登録 (2008-07-22)

- http://homepage2.nifty.com/youichi_kato/src.html
  ProcessBuilder 生成を
  Process p = new ProcessBuilder(command).start();
 ー>
        Process p = new ProcessBuilder("ruby", command).start();
   と書き換えることで、 フルパス指定した ruby スクリプトを実行し、その stdout 出力を blog 記事取り込めた。
    Screen01

次はファイル選択ダイアログを出すようにしよう。
// ダイアログは java で書く? ruby で書く?

さらに ruby から ImageMagic を呼び出すことで、画像処理 (サムネイル作成など)のプラグインを ruby スクリプトで作れそうな気もする...

2008-07-18

Java製拡張コマンド(ExtHelloWorld.java) を改造

Screnn00

- http://xfy.justblog.jp/labs/2008/07/hello-worldjava.html
> xfy 実験室: お約束の『Hello World』で、Java製拡張コマンドを理解する
として、 java で xfy blog editor の拡張コマンドを作成する方法の解説があった。

ExtHelloWolrd.java を改造して、外部コマンドを実行して、その結果を はりつけられるように変更してみた。
- http://homepage2.nifty.com/youichi_kato/src.html
    ExtHelloWorld.java の改造を登録 (2008-07-18)
mac 上の javase6 で作業した。build.xml がそのままでは動作しなかった。
javac のオプションに 1.6 を指定するとエラーになるようだ。

改行の扱い、漢字コードの扱い、エラー処理などができていないが、
"date" や "ls" なんてコマンドの出力結果を取り込むことはできる。

bat ファイル、shell スクリプト、ruby スクリプトを実行するようにすれば、
これらのスクリプトで 拡張コマンドをつくれるようになるかもしれない。

xfy/xvcd/java という組み合わせあら、xfy/xvcd/ruby という組み合わせでのプログラミングへの道が開かれつつあるかもしれない。
(ruby の代わりに jruby, scala, factor など 様々な言語の可能性も...)

より以前の記事一覧

mokuji

2013年12月
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
29 30 31        

google

  • twitter
  • __
  • _
    Googleボットチェッカー

合わせて読む

  • 合わせて読む
    フィードメーター - katoy: cocolog あわせて読みたい

リンク