SpiderMonkey 学習:js-ctypes 入門

2017-03-10 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-03-08)の記事「JavaScript:SpiderMonkey で行く」で、
SpiderMonkey 1.8.5 が入手できた。

SpiderMonkey 1.8.5」には、
  ・・・・・
  ・・・・・
  New JavaScript language features
  ・・・・・
  SpiderMonkey 1.8.5 also ships with js-ctypes,
   a foreign-function interface for privileged JavaScript.
  ・・・・・
  ・・・・・
とある。
即ち、Google 翻訳 で、
  SpiderMonkey 1.8.5には、特権付きJavaScript用の
  外部関数インターフェイスであるjs-ctypesも付属しています。

これは、
3年前(2014-05-12)の記事「Python 学習:インタプリタの拡張?」で書いている、
Python の“ctypes”モジュール
や、
昨年(2016-01-12)の記事「Lua 学習:FFI Library」で書いている、
LuaJIT の“FFI”ライブラリ
に相当するもの?


早速、
Standard OS Libraries」ページにある、
最初のサンプルコード:
  This example was created on Windows XP SP2.
  It is a full working example; just copy & paste it to try it out.
この27行をコピー&ペーストして起動してみた。


エラー発生

1行目の:
  Components.utils.import("resource://gre/modules/ctypes.jsm");
24、25行目:
  Components.utils.reportError(ret);
  Components.utils.reportError(point);


どうする?

1行目はコメントアウト(=削除)

24、25行目は、
  print( ret )
  print( point )
に変更した。

これで、正常に動作した。

本家から入手したものじゃないので、こうなるのか???

でも、<紙>にとっては、こっちの方が使い勝手が良い。


---------------

ランダムに動作確認

1.コマンド起動時の引数は?
   arguments 配列で受ける

2.インポートは?
   load( 'hoge.js' ); とかで読み込まれる

2.スリープ関数は?
   sleep(5) とか、秒単位で指定する

3.現在時刻は?
   dateNow() 13桁+小数点以下3桁

4.キーボード入力待ちは?
   var s = readline(); とかで

5.プログラム終了は?
   quit();

※ thisFilename() はエラーとなった。


最後に、
少しはまともな?コード:
// ---------- ファイルのサイズ取得 -----
var c_Rd = parseInt( "80000000", 16 );
var libK = ctypes.open( "KERNEL32.dll" );
var CreateFile = libK.declare( 'CreateFileA', ctypes.winapi_abi, ctypes.int32_t,
ctypes.char.ptr, ctypes.uint32_t, ctypes.int32_t, ctypes.int32_t,
ctypes.int32_t, ctypes.int32_t, ctypes.int32_t );

var fp = CreateFile( 'zzz.txt', c_Rd, 0, 0, 3, 128, 0 );
print( fp ); // 確認の為

var getfsz = libK.declare( 'GetFileSize', ctypes.winapi_abi, ctypes.int32_t,
ctypes.int32_t, ctypes.int32_t );
var ss = getfsz( fp, 0 ); // 第2引数は学習不足
print( ss ); // 正しく得られた(サイズが4GB未満のファイル)

libK.close();
var str = readline();
こんな感じで行ける?


本日はここまで。


SpiderMonkey ( JavaScript / js-ctypes ) 学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


170209

JavaScript:SpiderMonkey で行く

2017-03-08 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-03-06)の記事「WSH / JScript - Win32API」では、

  ・・・・・
  ・・・・・
  どうしようかな?

  このまま突っ走るか?
  或いは他をあたるか?
  ・・・・・
  ・・・・・

で終わっていた。


やはり、SpiderMonkey で行くか?

と云うことで、・・・・・

4年前(2013-12-15)の記事「SpiderMonkey:JavaScriptインタプリタ」で、
  ・・・・・
  ・・・・・
  改めて「JavaScript」について調べてみた。
  ・・・・・
  ・・・・・
  で、「js.exe」「cygwin1.dll」の2つを同一ディレクトリに格納。
  どっちも、1.78MB だった。
  早速、そのまま、「js.exe」をダブルクリック。
  DOS窓がでて、
  “js> ”と表示された。
  マウスは働かないが???
  上下矢印キーは働く。
  「Example Usage:」にある最初の2行分を打ち込んでみた。
  
  js> function f(x){return x+5}
  js> f(7)
  ( ; を付けずに、Enter キー押下 )
  12
  と表示された。
  少し、弄ってみようかナ?????
  ・・・・・
  ・・・・・
と書いた格納場所を探したが、見つからない。
(マシンが代わっているから)

ダウンロードしたモノを探し出し、
2つを持ってきた。
当時の通り動いた。(当たり前か)

だが、これは Ver 1.6 と古い(?)

最新のモノを探してみた。

本家サイト:SpiderMonkey < MDN - Mozilla Developer Network
に依ると、
最新版は“SpiderMonkey 38”のようですネ。

しかし、ビルド済みの Winodws 版を見つけることが出来ない?

少し古いものでも無いのか?


さんざん探した挙げ句
かなり(?)古いものだが、
SpiderMonkey 1.8.5 for Windows
を見つけた。

早速ダウンロードさせて頂いた。
「spidermonkey-1.8.5.zip」 2010/11/24 858KB

書庫の中身は「js.exe」「nspr4.dll」「js-help.txt」の3つダケ。

これら3つを、
例によって D:/TOOL ディレクトリに、
SpiderMonkey ディレクトリを作って格納した。
旧版の「js.exe」は 1.78MB だったが、今度は 1.72MB だ。

尚、旧版は「cygwin1.dll」だったが、今度は「nspr4.dll」ですネ。


先日(2017-03-05)の記事「WSH / JScript 学習初め」で書いたコードを
それぞれで実行してみた。
3,235mS だったものが、727mS と大幅にスピードアップした。
つまり、Ver 1.6 に比べて、約4.5倍速?

また、WSH の JScript に比べて2.4倍速?


それで、もろもろ導入手順を実行。
1.上記の通り、システムを格納:D:/TOO/SpiderMonkey/ に。
2.レジストリへ登録:参照記事(2016-04-02):
   ファイルD&DでAP起動(レジストリ版)
   注)これで、WSH は使えなくなる。
3.パス( Path ) に登録:D:\TOO\SpiderMonkey


序でに、
今後のテストで作成するコード(プログラム)の格納場所として、
  E:/_SpiderMonkey/ ディレクトリを作成した。


本日はここまで。


SpiderMonkey ( JavaScript ) 学習の始まり?


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


170209

WSH / JScript - Win32API

2017-03-06 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-03-05)の記事「WSH / JScript 学習初め」で、
度肝を抜かれたが、・・・・・

めげずに、
JScript win32API
と検索して、

“CX's Hello, World!”サイトの記事:
Hello, Win32 API(JScript) World!
を見つけた。
  Win32 API(JScript)
   Win32 API は、Windows の機能にアクセスする為の
  API(Application Programming Interface)である。
   JScript には Win32 API を直接呼び出す機能は存在しないが、
  他のコンポーネントを経由することで、呼び出すことが可能である。
   Win32 API を呼び出すことが可能なコンポーネントとしては
  「DynamicWrapper」「SFC mini」「Excel」等がある。
  ・・・・・
  ・・・・・
と云うことで、
3通りのコードが載っている。

順番に試してみた。

 ・ DynamicWrapper を経由した Win32 API 呼出し例

 ・ SFC mini を経由した Win32 API 呼出し例

 ・ Excel を経由した Win32 API 呼出し例


“DynamicWrapper”も、“SFC mini”も、見つからないエラー

Excel 経由は動いた。


あれこれ、調べてみたら、

原因は単純だった。
“DynamicWrapper”“SFC mini”いずれも、
追加インストールが必要だった。



“電子ブロック工房”サイトの、
JavascriptでWin32APIが利用しやすくなる『win32api.js』
この記事は、2008年10月9日 付の記事で、
  ・・・・・
  ・・・・・
  Javascript(JScript)からSFC mini経由でWin32APIを簡単に
  利用できるようにするwin32api.jsを作ったので公開します。
  ・・・・・
  ・・・・・

どうしようかな?

このまま突っ走るか?
或いは他をあたるか?


本日はここまで。


JavaScript ( WSH / JScript ) 学習は続く?


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


170208

WSH / JScript 学習初め

2017-03-05 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-03-04)の記事「JavaScript はどうか?」で、
  ・・・・・
  ・・・・・
  今度こそは、
  WSH(Windows Script Host)でJScriptの学習を本格化(?)
  でしょうか?

  Windows 7 マシンなので、
  何処かで“コマンド窓”を出せば“cscript hoge.js”で行ける。
  ・・・・・
  ・・・・・
と書いた。


WSH Jscript」と検索して、

WSH JScriptを使いこなそう ~目次~」を見つけた。


ここの、
 2.結果の出力方法
  ・テキストファイルへの書き込み

にあるコードを頂いて実行してみた。

コードは以下:
// ------------- Wt_File.js
// 関数を追加:
function print( str ){
WScript.Echo( str );
}

// ファイル関連の操作を提供するオブジェクトを取得
var fs = new ActiveXObject( "Scripting.FileSystemObject" );

// ファイルを開く
var file = fs.OpenTextFile( "result.txt", 2, true );

file.WriteLine( "正常終了" );
file.WriteLine( "処理件数は100件" );

// ファイルを閉じる
file.Close();

// オブジェクトを解放
fs = null;

print( "終了" );
ですネ。
これを、DOS窓で、
  cscript //nologo Wt_File.js
で実行。
カレントに「result.txt」の名前のファイルが作成され、
内容もOK。


上記検索で、更に
“zakuroishikuro - Qiita”の、
Node.jsと比べるとWSH(JScript)は170倍ぐらい遅い?(適当)
もあった。

ギョッとしたが、
試してみた。

コードは:
// ---------------- bench_wsh.js
function print(str){
WScript.Echo(str);
}
// -----------------------------
var a = 0, MAX = 10000000;
var start = new Date();

for (var i = 0; i < MAX; i++) {
a += (i + 1 * 10 / 5) ;
}

var end = new Date();
//出力
start_time = start.getTime();
end_time = end.getTime()

print(end_time - start_time + '\nend: ' + end_time + '\nstart: ' + start_time);
です。

実行結果は、
やはり、1,750 (mS) ほどだった。

聞きしにまさる遅さダ。

どうしようか???


本日はここまで。


JavaScript ( WSH / JScript ) 学習は続く?


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


170207

JavaScript はどうか?

2017-03-04 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
JavaScriptどうか
とは云っても、プログラミング言語は道具=手段ですネ。

本来は、
目的=何をやりたいかがあって、その手段として何を選ぶか?
と云うことですが、
<紙>はプロじゃ無くアマ=趣味の世界なので、
単純に何が出来るかが問題。

何はともあれ、温故知新と云うことで、
過去のブログ記事を確認してみた。

JavaScript 検索結果・・・75件ほどあった。

中でも、
6年前(2011-03-10)の記事「改めて、Jmol の勉強:Java と JavaScript」で、
  ・・・・・
  ・・・・・
  HTML の勉強(?)の延長線上で、
  「JavaScript」も一緒に勉強しよう。
  化学部活動では、いろんな言語を勉強しないとやっていけない(?)
  ・・・・・
  ・・・・・
と書き、
翌日の記事「JavaScript 入門 の入門」で、
  「改めて、Jmol の勉強:Java と JavaScript」から、
  「JavaScript」に(?)入門します。
  ・・・・・
  ・・・・・
だったが、
三日坊主だったような。

それから2年後(2013-12-15)の記事「SpiderMonkey:JavaScriptインタプリタ」で、
  ・・・・・
  ・・・・・
  改めて「JavaScript」について調べてみた。
  ・・・・・
  ・・・・・
  で、「js.exe」「cygwin1.dll」の2つを同一ディレクトリに格納。
  どっちも、1.78MB だった。
  早速、そのまま、「js.exe」をダブルクリック。
  DOS窓がでて、
  “js> ”と表示された。
  マウスは働かないが???
  上下矢印キーは働く。
  「Example Usage:」にある最初の2行分を打ち込んでみた。
  
  js> function f(x){return x+5}
  js> f(7)
  ( ; を付けずに、Enter キー押下 )
  12
  と表示された。
  少し、弄ってみようかナ?????
  ・・・・・
  ・・・・・
と云った状況です。

その後、
JavaScriptでファイル入出力
JavaScript:プログラム起動
等を書いていた。

昨年になって、
10月(2016-10-07)の記事:ImageJ で、JavaScript
同(2016-10-09)の記事:ImageJ + JavaScript 試し
同(2016-10-10)の記事:ImageJ + JavaScript では問題大
を書いていた。

さらに、
11月(2016-11-04)の記事:Emscripten の性能(一例)
でも“JavaScript”が出てくる。


以上の中では、
4年前(2013-12-20)の記事「JavaScript:プログラム起動
  ・・・・・
  ・・・・・
  結論:
  頑張って、MDNから「nsIProcess インターフェース」を学習し、活用する。
  あるいは、
  何も考えないで「WSH」を使う。
  もしくは、
  Firefoxに「JSActions」を導入して、「JavaScript」を学習する。
  と云うことでしょうか?????
  ・・・・・
  ・・・・・
に辿り着く。

今度こそは、
WSH(Windows Script Host)でJScriptの学習を本格化(?)
でしょうか?

Windows 7 マシンなので、
何処かで“コマンド窓”を出せば“cscript hoge.js”で行ける。


本日はここまで。


JavaScript 学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


170204-06

PyClient:SymPy 版

2017-03-03 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-03-01)の記事「PyClient:curve_fit 版」に続いて、

SymPy を使いやすくするため、・・・・・

取り敢えずの“SUB_3.lua”の見直しを行った。

これまでの、一行コード用はそのままで、
複数行に対応する関数を追加。
これにおいては、SymPy変数の定義を可能にした。

名前は“SUB_4.lua”とした。
----- これは単純に書き直したダケ
function Py_SymPy( str_ ) -- 行の右辺のみ 用
local st=[[
from sympy import *
var('a:z')
SV=str(
]]
.. str_ ..
[[ )
]]
IT[0]=#st+1
Py.PyFun( 'Exec', IT, st, SV )
return ffi.string( SV )
end

----- これは追加分 -----
function Py_SymPy2( str_, ... ) -- 複数行 用
local pp = {...}
local st = [[
from sympy import *
var('a:z')
ans=symbols('ans')
ans='nil'
]]
if #pp == 1 then
local v = split( pp[1] )
for i=1,#v do
st = st .. fmt( '%s=symbols("%s");', v[i],v[i] )
end
end
st = st .. '\n' .. str_
.. [[
SV=str(ans)
]]
IT[0]=#st+1
Py.PyFun( 'Exec', IT, st, SV )
return ffi.string( SV )
end
以上が SymPy 用の部分。

これを使った例:
--------------- test_use_SUB_4_SymPy.gsl

require'SUB_4' -- IT[40], SV[4097] 定義済み
-------------------------------------

------------------ サンプル1
ss=Py_SymPy'diff( x**3+3*x**2+2, x, 1 )' -- 'x' で、1回微分
print( ss ) -- 3*x**2 + 6*x
----- SymPy 変数は1文字のみ( a ~ z )

------------------ サンプル4
st=[[
ff = 2 * xx ** 2 - kk * xx + 1
gg = diff(ff,xx,1) #
ans = str( gg.subs([(xx,0)]) )
]]
print( Py_SymPy2( st, ' xx kk ' ) ) -- 複数行用
----- SymPy 変数は1文字のみ( a ~ z ) 又は、ans(戻り文字列)
----- 及び、第2引数(文字列)で空白区切りで自由に指定
これで真の PyClient ???


本日はここまで。


PyClient ( Lua / GSL Shell) 学習は続く?


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


170205

PyClient:curve_fit 版

2017-03-01 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-02-27)の記事「PyClient:LuaPy_GSL モジュールのラッパー」で書いた、
  ・・・・・
  ・・・・・
  PyClient サブを作った。
  手始めなので、名前は取り敢えず“SUB.lua”とした。
  ・・・・・
  ・・・・・

この取り敢えずの“SUB.lua”を使って、
昨年(2016-08-15)の記事「Lua から scipy.optimize.curve_fit
にある処理コードを書き直してみた。


作ったのは:
---------------- test_use_SUB_Fitting.gsl

require'SUB' -- IT[40], SV[4097] 定義済み
--------------------------------

----- Python での実行文
ST = [[
from scipy.optimize import curve_fit
xx=8
x = np.zeros( xx, dtype=np.float )
y = np.zeros( xx, dtype=np.float )
_=ct.cdll.msvcrt.memcpy( np_data(x), IT[1], xx*8 )
_=ct.cdll.msvcrt.memcpy( np_data(y), IT[2], xx*8 )
def yfx( x, a, b ): return a*(x**(-1/b))
abV, _ = curve_fit( yfx, x, y, p0=(1,1) )
r = doubleA( IT[3] )
r[0] = abV[0]; r[1] = abV[1]
]]
--------------- データ
IT[1] = Int( matrix.vec{ 1, 2, 3, 4, 5, 6, 7, 10 }.data )
IT[2] = Int( matrix.vec{ 8, 7, 6.5, 6, 5.8, 5.3, 5, 4 }.data )
r = ffi.new( 'double[2]' ) -- 戻り値用
IT[3] = Int( r )
-----------------------------
ss=Py_Exec( ST ) --------- これが、PyClient ???
Py_End()

--- 戻り値
print( r[0] ) --> 8.2595111874288 これが、a
print( r[1] ) --> 3.942786255794 これが、b
print( ss ) --- 戻り文字列 : 不使用( nil )
こんな感じ???

かなりスッキリした。

だが、
見直してみると、まだ PyClient にはほど遠い様ダ。

なので、
“SUB.lua”に以下の関数を追加定義し“SUB_3”とした。
----- 追加分 -----
function Py_Fit( x_, y_, k_, f_, p_ ) -- =====
local n = #x_
IT[1]=Int(x_.data); IT[2]=Int(y_.data); IT[3]=Int(r)
local kk = #split( k_, ',' )
local st = 'from scipy.optimize import curve_fit\n'
.. fmt('xx=%d\n', n)
.. [[
x = np.zeros( xx, dtype=np.float )
y = np.zeros( xx, dtype=np.float )
_ = ct.cdll.msvcrt.memcpy( np_data(x), IT[1], xx*8 )
_ = ct.cdll.msvcrt.memcpy( np_data(y), IT[2], xx*8 )
rr = doubleA( IT[3] )
]]
.. fmt('def yfx( x, %s ): return %s\n', k_, f_ )
.. fmt('r,_ = curve_fit( yfx, x, y, p0=(%s) )\n', p_ )
for k=0,kk-1 do
st = st .. fmt('rr[%d]=r[%d]\n', k, k )
end
IT[0]=#st+1
Py.PyFun( 'Exec', IT, st, SV )
rt={}
for k=1,kk do rt[k]=r[k-1] end
return rt
end
これを使うと、
--------------- test_use_SUB_3_Fitting.gsl

require'SUB_3' -- IT[40], SV[4097] 定義済み
--------------------------------

-- データ:x,y は、 matrix.vec で定義するコト。
x = matrix.vec{ 1, 2, 3, 4, 5, 6, 7, 10 }
y = matrix.vec{ 8, 7, 6.5, 6, 5.8, 5.3, 5, 4 }
--------------------------------
-- データ、係数リスト(変数は x)、Fit 関数、初期推定値
r = Py_Fit( x, y, 'a, b', 'a*(x**(-1/b))', '1,1' )
--- 戻り値
print( r[1] ) --> 8.2595111874288 これが、a
print( r[2] ) --> 3.942786255794 これが、b
Py_End()
これで完璧???
(自己満足?)


本日はここまで。


PyClient ( Lua / GSL Shell) 学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


170202,04

PyClient:LuaPy_GSL モジュールのラッパー

2017-02-27 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-02-26)の記事「LuaPy_GSL モジュール:格納場所」までで、
以前(2017-02-19)書いた記事「LuaPy_GSL モジュールで SymPy」の如く、
自作モジュール“LuaPy_GSL.lua”が完成の域に達した?

そこで、
そもそもの発端であった
以前(2017-01-23)の記事「クライアント/サーバ:プロセス間通信
に答えられるように“LuaPy_GSL モジュール”のラッパーとして、
PyClient サブを作った。
手始めなので、名前は取り敢えず“SUB.lua”とした。

作ったのは:
-------------------------- SUB.lua
local Py = require'LuaPy_GSL'
-------------------------------

Py.PyIni( 'SUB_LuaPy_GSL_Gen' ) -- Python 初期化済みに。
IT = ffi.new( 'int32_t[40]' ) -- 序でに定義。
SV = ffi.new( 'uint8_t[4097]' )

-------------------------------

function Py_Exec( str_ ) -- これが PyClient 相当???
IT[0] = #str_ + 1
Py.PyFun( 'Exec', IT, str_, SV )
return ffi.string( SV )
end

function Py_SymPy( str_ ) -- SymPy 用*****
local st = 'from sympy import *;var("a:z");SV=str( '..str_..' );\n'
IT[0] = #st + 1
Py.PyFun( 'Exec', IT, st, SV )
return ffi.string( SV )
end

function Py_End()
Py.PyFin() -- Python ファイナライズ
end
こんなもの。

これを使ったテストメイン(汎用):
------------------- test_use_SUB_Gen.gsl

require'SUB' -- IT[40], SV[4097] 定義済み
--------------------------------

----- Python での実行文
ST = [[
DT=doubleA(IT[1]); DV=doubleA(IT[2])
DV[0]=DT[3]; print DV[0],DT[3]
SV='HOGE'+str(DV[0])
]]
--------------- テスト用データ
DT = ffi.new( 'double[10]', 50.5, 60.5, 70.5, 80.5 )
DV = ffi.new( 'double[10]' )

--------------------------------
IT[1]=Int(DT); IT[2]=Int(DV) -- IT[0] は予約済
ss=Py_Exec( ST ) ------- これが、PyClient ???
Py_End()

print( DV[0],DV[1] ) --- 戻り値
print( ss ) --- 戻り文字列
これで、・・・・・
OK

続けてもう1つ。
SymPy を使った例:
------------------- test_use_SUB_SymPy.gsl
require'SUB' -- IT[40], SV[4097] 定義済み
--------------------------------

----------------- サンプル1
ss=Py_SymPy'diff( x**3+3*x**2+2, x, 1 )' -- 'x' で、1回微分
print( ss ) -- 3*x**2 + 6*x
---------------- サンプル2
ss=Py_SymPy'solve( x**2+4*x+a, x )' -- 引数1を引数2で解く
print( ss ) -- [-sqrt(-a + 4) -2, sqrt(-a + 4) -2]
----------------- サンプル3
ss=Py_SymPy'diff( sin(x), x, 2 )' -- 'x' で、2回微分
print( ss ) -- -sin(x)

Py_End()
これの方が“PyClient”っぽい???

出来た。


本日はここまで。


PyClient ( Lua / GSL Shell) 学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


170202

LuaPy_GSL モジュール:格納場所

2017-02-26 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
先日(2017-02-17)の記事「LuaPy_GSL モジュール化」では、

  ・・・・・
  ・・・・・
  'python27.lib'、'LuaPy_GSL.lua'、'SUB_LuaPy_GSL_Gen.py'
  は、何処に置いておけばイイのか?
  3つともメインの'test_use_LuaPy_GSL.gsl'と同じ処に置けばイイけど。
  ・・・・・
  ・・・・・

等と書き、保留にしていた。


やっと、確定した。

結論としては、・・・・・

'python27.lib' ・・・ これは、“ライブラリ”扱いですね。

'LuaPy_GSL.lua'・・・ これは、“モジュールですね。

そうすると、
昨年(2016-03-30)の記事「GSL Shell 学習:モジュール/ライブラリ格納場所
で書いた通り。

  ・・・・・
  ・・・・・
  この「D:/TOOL/Lua」を「X」とすると、
  ・・・・・
  ・・・・・
  “モジュール”は、「X/gsl-shell/gsl-shell/」に格納する。
  ・・・・・
  ・・・・・
  一方、“ライブラリ”は、「X/gsl-shell/」に格納する。
  ・・・・・
  ・・・・・

に従う。



では、
'SUB_LuaPy_GSL_Gen.py'
は何処に?

モジュール 'LuaPy_GSL.lua'
の中身は、
・・・・・
・・・・・
function Py.PyIni( m ) -- int PyIni( char* m )
py.Py_Initialize()
pName = py.PyString_FromString( charA(m) )
pModule = py.PyImport_Import( pName )
pDict = py.PyModule_GetDict( pModule )
return 0;
end
・・・・・
・・・・・
と書いている。
つまり、'PyImport_Import(~)'
と云うことは、Python で import するもの???


こんな記事が見つかった:
Pythonのimportについてまとめる

  ・・・・・
  ・・・・・
  読み込み時に検索する範囲

  1.実行ディレクトリと同ディレクトリ
  2.カレントディレクトリ
  3.環境変数「PYTHONPATH」に列挙したディレクトリ
  4.sys.pathに含むディレクトリ
  ・・・・・
  ・・・・・


そうすると、
この中の4番目がよろしい?

つまり、(Python じゃないけど)GSL Shell のパス:
前記「X/gsl-shell/」に格納する。
ことで、
一件落着ダ。


本日はここまで。


LuaPy_GSL 学習は続く?


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


170128

タイマー:OpenCV 版

2017-02-24 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-02-22)の記事「タイマー:IupTimer 版」では、
IUP(Portable User Interface) には、IupTimer があるので、
Win32API に頼らずに タイマー 機能が使えた。


今回は、
OpenCV”で窓を出している状況で、
“タイマー”機能を使うには?
について学習。

“OpenCV”には、IupTimer の様な関数が無い?
なので、SetTimer を使う?

こんな感じ:
----------------------- test_Timer_OpenCV.gsl
cv2 = require'cv2'
NULL=voidA(0)
ffi.cdef[[
typedef void ( __stdcall* T_Proc )( void* hWnd, int Msg, int id, int time );
int SetTimer( void* hWnd, // window handle
int nIDEvent, // timer ID
int uElapse, // time-out value ( ms )
void* func ); // callback function
]]
-----------------------------------------
TCB = ffi.cast( 'T_Proc', function( a, b, c, d )
i=i+1; print( i, a, b, c, d ) -- i, NULL, 275, aaa, time
end )
i=0
aaa=ffi.C.SetTimer( NULL, 0, 200, TCB )
print(aaa)

img = cv2.cvCreateMat( 2, 2, 0 )
cv2.cvNamedWindow( charA('dmy'), 0 )

cv2.cvShowImage( charA('dmy'), img )
cv2.cvWaitKey(0)

cv2.cvDestroyAllWindows() -- 後処理
print( i ) -- 確認
でしょうか?


でも、いずれ
-- ・・・・・
-- ・・・・・
while true do
cv2.cvShowImage( charA('dmy'), img )
cv2.cvWaitKey(50)
-- ・・・・・
-- ・・・・・
end
-- ・・・・・
-- ・・・・・
の様に、
(例えば、50mSの)インターバルでループするものなので、
そのループ内で(コールバック相当の)関数を呼べばよい。
つまり、
改めて“タイマー”機能を使う必要が無いかも。


本日はここまで。


タイマー 学習は続く?


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


170129,0202
おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
02 | 2017/03 | 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 29 30 31 -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク