|

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

雑記: 2008-10

雑記


JScript 覚書2つ

2008-10-10

var ForReading = 1;

function readFile( path ){
  var fso, fin; 
  fso = new ActiveXObject( "Scripting.FileSystemObject" ); 
  fin = fso.OpenTextFile( path, ForReading ); 
  var content = fin.ReadAll();
  fin.Close(); 
  return content;
}

WScript.Echo( readFile( 'foo.txt' ) );

読み込み対象である foo.txt の中身が空の場合、次のメッセージが出る。

Microsoft JScript 実行時エラー: ファイルの最後を超えた入力を行おうとしました。

ちなみに、ファイルが存在しない場合は 「ファイルが見つかりません。」という異なるメッセージが出る。


var ForReading = 1;
var hideWindow = 0    //ウィンドウを非表示
var shell = new ActiveXObject( "WScript.Shell" );

function readFile( path ){
  var fso, fin; 
  fso = new ActiveXObject( "Scripting.FileSystemObject" ); 
  fin = fso.OpenTextFile( path, ForReading ); 
  var content = fin.ReadAll();
  fin.Close(); 
  return content;
}

shell.Run( "cmd /c echo " + new Date() + " > foo.txt", hideWindow );

WScript.Echo( readFile( 'foo.txt' ) );
// → shell.Runで上書きされる前の foo.txt の内容が表示される

foo.txt への書き込みが完了してから次の処理を実行させたい場合、 Run() の第3引数を true にする。


2008-10-04

Ubuntu Studio でフォルダ共有

普通の Ubuntuではメニューに「フォルダの共有」があるが、Ubuntu Studioにはない。

Synaptic で検索すると、「nautilus-share」というそれらしいパッケージが見つかり、 インストール済み。

当てずっぽうでコマンドを探してみたところ、 sudo shares-admin で「フォルダの共有」設定ツールが起動した。

あとはたぶん普通のUbuntuでの設定と同じ。

[2008-10-10] 素のUbuntuでも 8.04 で無くなっていたようです → ubuntu 8.04 "フォルダの共有" - Google 検索

スポンサーサイト

solved: Cannot open shared library /usr/lib/alsa-lib/libasound_module_pcm_pulse.so

Ubuntu Studio 8.04 にて。

$ aplay -Dpulse foo.wav
ALSA lib pcm.c:2106:(snd_pcm_open_conf) Cannot open shared library /usr/lib/alsa-lib/libasound_module_pcm_pulse.so
aplay: main:546: オーディオオープンエラー No such file or directory

Synaptic などで libasound2-plugins をインストール。

$ aplay -Dpulse foo.wav
ALSA lib pcm.c:2145:(snd_pcm_open_noupdate) Unknown PCM pulse
aplay: main:546: オーディオオープンエラー No such file or directory

~/.asoundrc が無かったので、新規に作成し以下の内容にする。

pcm.pulse {
    type pulse
}

ctl.pulse {
    type pulse
}

これで aplay -Dpulse foo.wav で音が出るようになった。再起動はたぶん不要。

参考(外部リンク)

ImageStamper: 特定の時点で画像に適用されているライセンスを記録するwebサービス

ImageStamper

Cameron Parkins, 2008-07-01

ImageStamper is a free tool “for keeping dated, independently verified copies of license conditions associated with creative commons images.” You can see an example of how it works here . From ImageStamper:

ImageStamper はフリーなツールであり 「CCLの適用された画像に関する、日付を与えられ、独立して確認されたライセンス状態のコピーを保持」する。 どのように働くかを ここ で見ることができる。 以下は ImageStamper からの引用:

ImageStamper can act as your witness when you inspect the copyright license of an image that you want to download and use. You can ask ImageStamper to look at the web page with the image to independently verify what exact license conditions apply to that image. ImageStamper will visit this webpage from one of its servers and produce an image ‘timestamp’ ― a dated record of image contents and of the license conditions that apply to that image. This timestamp will then be permanently stored in your account and you can present it as evidence that you were given appropriate rights to use the image.

ImageStamper は、あなたが画像をダウンロードし、それを使おうと思ったときに著作権ライセンスを確認するのに役に立ちます。 どのようなライセンスがその画像に適用されているか確実に確かめるために、ImageStamperを使ってその画像があるウェブページを探すことができます。 ImageStamperのサーバはそのウェブページを訪問してその画像の日付と適用されたライセンスを取得し、「タイムスタンプ」を生成します。 このタイムスタンプは永続的にあなたのアカウントに保存され、あなたがその画像を使う権利を持っていることを示す証拠として使うことができます。

You can help with the development of the project (still in BETA) by giving feedback at the ImageStamper forum .

まだベータ版であり、 ImageStamper のフォーラム にフィードバックすることで開発に協力できる。

Creative Commons License
This work by sonota is licensed under a Creative Commons Attribution 3.0 Unported License.
Based on a work at creativecommons.org.

毎度ながら訳がこなれてなくてすいません。 要するに、Aさんが作った画像を再配布したり派生作品を作る際に 「その時点では○○というライセンスがその画像に適用されていた」 という証拠を残すためのサービス、ということのようです。

個人が勝手に「あの時点では○○というライセンスがこの画像に適用されていた」 と主張するよりも、信頼度を増すサービスを間に入れて 安心して作品を利用できる体制を作ろうという試みでしょうかね。

ちなみに現時点で対応しているのは Flickr に置かれている画像のみであり、 近いうちに deviantART などの画像投稿サイトに対応する予定とのことです。

選択範囲を外部プログラムで加工するサクラエディタ用JScriptマクロの雛形

マクロ=JScript、加工用プログラム=Rubyスクリプト という組み合わせで書いてます。

Rubyスクリプトは引数にファイルのパス 1つだけを取り、結果を標準出力に出すようにします。

適当なので適宜改造してください。

2014-08-10 追記: gist にも置きました。最新版はこちらを見てください。
https://gist.github.com/sonota/75f2288b904446ba31c6

// selection-macro-template.js
// 2010-03-25


function checkPath( path ){
  if( ! path.match( /\\$/ ) ){
    path += "\\";
  }
  return path;
}


//================================


var envPath    = "C:\\ruby\\bin\\ruby.exe";
var macroDir   = "C:\\apps\\sakuraW_r1714\\macro\\";

macroDir = checkPath( macroDir );

var scriptPath   = macroDir + "XXXX.rb";
var tempFileSrc  = macroDir + "____temp_src.txt";
var tempFileDest = macroDir + "____temp_dest.txt";

var timeoutSec = 10;


//================================


var ForReading = 1;
var ForWriting = 2;

var wShell = new ActiveXObject( "WScript.Shell" );

var vbHide              = 0; //ウィンドウを非表示
var vbNormalFocus       = 1; //通常のウィンドウ、かつ最前面のウィンドウ
var vbMinimizedFocus    = 2; //最小化、かつ最前面のウィンドウ
var vbMaximizedFocus    = 3; //最大化、かつ最前面のウィンドウ
var vbNormalNoFocus     = 4; //通常のウィンドウ、ただし、最前面にはならない
var vbMinimizedNoFocus  = 6; //最小化、ただし、最前面にはならない
/*
 参考:
 1.10 プログラムを実行する、ファイルやフォルダを開く(Runメソッド)
 http://www.happy2-island.com/vbs/cafe02/capter00110.shtml
 */


//================================


function pathExists( varName, type ){
  var path = eval(varName);
  var fso = new ActiveXObject( "Scripting.FileSystemObject" );
  var typeMsg;
  var result = true;

  switch(type){
  case "file":
    typeMsg = "ファイル";
    if( ! fso.FileExists( path ) ){
      result = false;
    }
    break;
  case "folder":
    typeMsg = "フォルダ";
    if( ! fso.FolderExists( path ) ){
      result = false;
    }
    break;
  default:
    wShell.Popup( "変数 type の指定が間違っています。" );
    return;
  }

  if( ! result ){
    wShell.Popup( typeMsg + ' "' + path + "\" が見つかりません。\n変数 " + varName + " のパス指定を確認してください。" );
    return false;
  }else{
    return true;
  }
}


//================================


function writeFile( path, content ){
  var fso = new ActiveXObject( "Scripting.FileSystemObject" );
  var fout = fso.CreateTextFile( path );
  fout.WriteLine( content );
  fout.Close();
}


function readFile( path ){
  var fso = new ActiveXObject( "Scripting.FileSystemObject" );
  var fout = fso.OpenTextFile( path, ForReading );
  var content = fout.ReadAll();
  fout.Close();
  return content;
}


//================================


function callFromSakuraEditor(){
  var macroPath  = ExpandParameter( "$M" ); // このマクロファイルのパス

  if(    ! pathExists( "envPath"   , "file"   )
      || ! pathExists( "macroDir"  , "folder" )
      || ! pathExists( "scriptPath", "file"   )
  ){
    return;
  }

  var selectedStr = GetSelectedString(0);
  var fso = new ActiveXObject( "Scripting.FileSystemObject" );
  if( fso.FileExists( tempFileSrc  ) ){ fso.GetFile( tempFileSrc  ).Delete(); }
  if( fso.FileExists( tempFileDest ) ){ fso.GetFile( tempFileDest ).Delete(); }

  writeFile( tempFileSrc, selectedStr );

  var commandStr = 'cscript "' + macroPath + '"';
  wShell.Run( commandStr, vbHide, true );

  insText( readFile( tempFileDest ) );

  if( fso.FileExists( tempFileSrc  ) ){ fso.GetFile( tempFileSrc  ).Delete(); }
  if( fso.FileExists( tempFileDest ) ){ fso.GetFile( tempFileDest ).Delete(); }
}


function callFromCScript(){
  var commandStr = 'cmd /c  ' + envPath + '  "' + scriptPath +'"  "'+ tempFileSrc + '"' ;
  var execObj = wShell.Exec( commandStr );

  // 処理が終了するか、またはタイムアウトするまで待つ
  var startSec = (new Date()).getTime();
  while( execObj.status == 0){
    WScript.Sleep( 500 );
    if( (new Date()).getTime() - startSec > timeoutSec * 1000 ){
      break;
    }
  }

  var result;
  if( execObj.exitCode == 0){
    result = execObj.StdOut.ReadAll();
  }else{
    result = execObj.StdErr.ReadAll();
  }
  writeFile( tempFileDest, result );
}


//================================


if( typeof Editor !== "undefined" ){
  callFromSakuraEditor();
}else if( typeof WScript !== "undefined" ){
  callFromCScript();
}else{
  wShell.Popup( "呼び出し元が不正です。" );
}


/* 
 参考:
 Rekisa 取扱説明書 サクラエディタとの連携
 http://hp.vector.co.jp/authors/VA017396/software/Rekisa/Manual/usage_SakuraEditor.html
 */

雑メモ: Krita でタブレットペンの追従が遅い時に確認すべき設定箇所

設定箇所 2つ

その1

デスクトップで右クリック → 背景の変更 (またはコマンド gnome-appearance-properties) → 外観の設定 → [視覚効果]タブ

[効果なし] と [通常効果] から選択。 [追加効果] については略。

その2

Krita のメニューから 設定 → Kritaを設定 → 表示

ここで OpenGL の有効/無効を選択。

結果

自分の環境で試したところ、以下のような結果になりました。

効果なし + OpenGL無効(チェックなし): 
  カーソルの追従が遅くなる場合がある。

効果なし + OpenGL有効(チェックあり): 
  問題なし。

通常効果 + OpenGL無効(チェックなし): 
  カーソル追従が遅くもっさり。実用にはつらい。

通常効果 + OpenGL有効(チェックあり): 
  カーソルの追従には問題ないが画面がちらつく。

環境など

Ubuntu Studio 8.04
Wacom BAMBOO MTE-450
Krita 1.6.3

その他

カーソル追従の遅延があまりにひどくて私は「Kritaは(まだ)使えない」 と結論してたんですが、 ycumsさん に教えてもらってこの設定に気づきました。感謝!

libsndfile でコンプレッサもどき

やっつけ。動作説明は図とソースを見てください。以上。

2008-11-16 LADSPAプラグイン化してみました → http://docs.google.com/Doc?id=d26vnfx_10767nz53cz

/*
20081005
gcc comp-modoki.c -lsndfile -o comp-modoki
comp-modoki  file_in  file_out  lv1  lv2

file_in を読み込んで 1フレームずつ読み、
コンプレッサ処理もどきをしてfile_out に移し替える
入力ファイルのフォーマットは 16bit, ステレオ(チャンネル数=2)とする。
*/

#include <stdio.h>
#include <stdlib.h>
#include <sndfile.h>

void comp_proc( double* val, double lv1, double lv2 ){
//  printf( "%.4f  %.4f  %.4f  \n", *val, lv1, lv2 );
  if( *val < lv1 && -lv1 < *val ){
    *val = *val * ( lv2 / lv1 );
  }else{
    if( *val > 0 ){
      *val = ((*val-lv1) * (1-lv2) / (1-lv1)) + lv2 ;
    }else{
      *val = ((*val+lv1) * (1-lv2) / (1-lv1)) - lv2 ;
    }
  }
}

int main( int argc, char** argv ){
  char* file_in  = argv[1] ;
  char* file_out = argv[2] ;
  double lv1 = atof( argv[3] );
  double lv2 = atof( argv[4] );

  SNDFILE* sfr;
  SNDFILE* sfw;
  SF_INFO sinfo;

  sinfo.format = 0;

  // ファイル開く
  sfr = sf_open( file_in, SFM_READ, &sinfo );
  sfw = sf_open( file_out, SFM_WRITE, &sinfo );

  sf_count_t count = 1;
  double val[ (int)count * sinfo.channels ];

  int ch;
  int a = 0;
  sf_count_t read_num;
  while(1){
    read_num = sf_readf_double(  sfr, val, count) ;
    // printf( "% 4d:  L: %0.2f  -  R: %0.2f  -  %6d \n", a/44100, val[0], val[1], (int)read_num );

    if( read_num != count ){ 
      // ファイル終端まで達したらループ抜ける
      break; 
    } else {
      // 処理して書き込む
      for( ch=0; ch<sinfo.channels; ch++ ){
        comp_proc( &val[ch], lv1, lv2 );
      }
      sf_writef_double( sfw, val, count) ;
    }

    a++;
  }

  // ファイル閉じる
  sf_close( sfr );
  sf_close( sfw );

  return 0;
}

2008-10-05 間違ってたので一部修正。



** ホームに戻る

|
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。