Posts Tagged ‘Newton’

Programming_of_NTE_2

水曜日, 1 月 28th, 1998

Programming of NTEncoding (2)
=============================

ども、GNUE(鵺)っす。

 NTEncoding講座の2回目です。

 今回は英語の通信ソフト文字化けした日本語のテキストをNewtonで
 見れるようにします。具体的には Newton 上で選択したテキストを
 変換するプログラムをつくります。

 【STEP1】

   NTK の Inspector から実行しますので、SDK に入っている testNTE
   をインストールして下さい。testNTE は Inspector で NTEncoding
   の API を使えるようにするために NTE というグローバル変数を定
   義します。SDK のマニュアルにある NTE_methods はすべて NTE と
   読み換えます。

 【STEP2】

   では次に、英語の通信ソフト(例えば NCU)で日本語のテキストを
   Notes に持ってきましょう。NCU なら Import 機能を使えば簡単に
   テキストを持ってこれます。

   さて、このとき日本語のテキストが文字化けしているのがわかるか
   と思います。これは、ASCII → UNICODE で変換されていますので
   Shift JIS でもなければ、UNICODE でもない不思議なコードになっ
   ています。NTEncoding ではこれを ‘|string.sjis| (sjis のよう
   な UNICODE という意味)と表記し、純粋な ShiftJIS (’sjis)と
   区別します。

   SDK に付属の「ShiftJIS コード変換」では ’sjis, ‘|string.jis|
   それぞれに対応する ‘|sjis:GNUE|, ‘|string.sjis:GNUE| が定義
   されています。

 【STEP3】

   では、Newton と NTK の Inspector を接続して、Inspectorから次
   のソースコードを入力して下さい。Newton側で問題のテキストを選
   択してからこのコードを実行します(ソースコードを選択してenter
   、詳しくは NTK のマニュアルを参照のこと)。

   さて、うまく日本語のテキストになりましたか?

—-

begin
local offsets := getHiliteOffsets();

if offsets then begin
foreach v in offsets do begin
local count := v[2] - v[1];
local str := NTE:code2uni( // ShiftJIS もどきを UNICODE に変換
v[0].text,
‘|string.sjis:GNUE|,
{offset: v[1], count: count}
);

v[0]:HandleInsertItems( // 変換した文字列で置き換えます
{
insertItems: str,
insertOffset: v[1],
replaceChars: count
});
end;
end;
end;

———————-

 【STEP4】

  さて、これを単体のソフトウェアとして完成させるのは各自やってみて下さい。
  パッケージにするには前回の “NTEncoding.stream” を使います。また、NTE
  は NTE_methods にします。

  たぶん TapBar から使えるようにするのが簡単でしょう。TapBar は Basuke
  さんのホームページから SDK をダウンロードできますので、是非挑戦してみ
  て下さい。

TapBar (C) Basuke.
http://www.saryo.org/basuke/


(c)1997 GNUE.

※このドキュメントは NIFTY-Serve の FNEWTON で発言したものの再録です

Programming_of_NTE_1

水曜日, 1 月 28th, 1998


Programming of NTEncoding (1)
=============================

ども、GNUE(鵺)っす。

不定期連載(きまぐれともいう(^^;)で NTEncoding のプログラミング講座を
やろうかと思います。

# NTK によるプログラミング知識があることを前提にしています。
# なお、NTEncoding は OS 2.0 以上でしか使用できません。

第一回の今回は通信ソフトの日本語対応(ShiftJIS)です。

 1)まず NTEncoding 1.0 SDK を用意して下さい。

    http://www.cyborg.or.jp/¯gnue/NTEncoding.html
    からダウンロードできます。

 2)次に Apple の Sample Code の “Basic Serial-1″ をハードディスク
   にコピーして下さい(NTK の CD-ROM に入っています)。

   ”Basic Serial-1″ は通信ソフトのサンプルコードです。
   このソースを修正して日本語対応(ShiftJIS対応)にします。

 3)”NTEncoding.stream” の追加

   ・NTEncoding 1.0 SDK から “NTEncoding.stream” をコピーして
    ”Basic Serial-1″ のフォルダに入れます。

   ・”Basic Serial”をオープンして “NTEncoding.stream” をプロジェ
    クトに追加します

   ・”NTEncoding.stream” を Option-↑ でリストの先頭に移動します

 4)ソースコードの修正

   ・”Basic Serial.t” をブラウザ表示します
   ・vMainApp の viewSetupFormScript を選択します
   ・次の2ヵ所を修正します

   self.fEndPoint := { _proto: NTE_protoBasicEndPoint, ←修正
             _parent: self,
             NTEncoding: {defaultEncoding: ’sjis}, ←追加
             exceptionHandler: MExceptionHandler,
             fConnectAction: nil,
             fConnectAddress: nil,
             fDisconnectSlip: nil,
             fPowerOffState: nil,
             fQuiet: nil, };

 5)あとは Build して Newton にインストールして下さい。
   パソコンの通信ソフトを 19200bps, 8bit, stop 1, None で設定して通信します。

   注)「ShiftJIS コード変換」をインストールするのを忘れないでね(^^;

【まとめ】

  以上を見てわかるように次の3ヵ所を修正するだけで簡単に通信ソフトの
  日本語対応が行なえます。

   ・”NTEncoding.stream” をプロジェクトに追加
   ・protoBasicEndPoint を NTE_protoBasicEndPoint に置き換える
   ・NTEncoding: {defaultEncoding: ’sjis} を追加

  実際にちゃんとした通信ソフトを作るには Prefs を使うように推奨
  していますが、詳細は SDK付属のドキュメントを参照してね(^^;


(c)1997 GNUE.

※このドキュメントは NIFTY-Serve の FNEWTON で発言したものの再録です

NTE_1.1_progress

火曜日, 1 月 27th, 1998


progress 機能
=============

NTEncoding 1.1 で新しく追加した API です。

 :code2uni(code, def, option), :uni2code(str, def, option) の引数 option で
次の slot を指定できるようになりました。

   progressScript: func(count, totalCount)… // 処理状況を表示するスクリプト
   progressStep: 100, // progressScript を実行する間隔(初期値=1)

 ※ progress 機能をサポートしていない変換モジュールではこの機能は無視されます。

ex.

local bin := “適当にデータを入れてね(^_-)-☆”;
local opts :=
{
closebox: nil,
icon: nil,
statusText: “Test”,
gauge: 0,
titleText “One moment, pleaseÉ”,
};

local fn := func (contextView)
begin
nte:code2uni(bin, ‘|base64:GNUE|, {
progressStep: 2,
progressScript:
func(count, totalCount)
begin
opts.gauge := count * 100 div totalCount;
contextView:SetStatus(’vGauge, opts);
end});
end; // workFunc

doProgress(’vgauge, opts, fn);


(c)1997 GNUE.

NTE_1.1_def_id

火曜日, 1 月 27th, 1998


NTEncodingDef の id
===================

NTEncoding 1.0 では呼び出された NTEncodingDef がどういう symbol で
regist されているか知ることはできませんでした。

そこで NTEncoding 1.1 では呼び出された NTEncodingDef の id slot に
regist されている symbol を自動的に格納するようにしました。

新しい “NTEncoding.stream” ファイルを使うことによりこの機能が使える
ようになります。


(c)1997 GNUE.

NTE_1.1_prefs_of_defs

木曜日, 12 月 4th, 1997


NTEncodingDef の prefs
======================

NTEncoding 1.1 では NTEncodingDef 自身が prefsView を持ち、その
NTEncodingDef のための設定を prefs に保存する仕様が追加されまし
た。

prefsView
———

NTEncodingDef の prefsView slot に protoPrefsRollItem ベース
の prefsView を作成することができます(オプション)。prefsView
では以下の slot および method を使用します。

path

NTEncoding の prefs からこの NTEncodingDef 固有の設定
値までの path です(省略可)。省略された場合は、この
NTEncodingDef を登録したときの symbol が使用されます。

prefs

自動的に prefsView に作成され NTEncoding の prefs
から path で指定されたデータが格納されます。この
値で frame でこの frame を変更することにより設定
値を格納します。

:changedPrefs(slot)

prefs 内のデータを変更した場合に呼び出します。
引数は変更されたデータの slot symbol です。

ex.

:?changedPrefs(’kout);

<利用方法>

prefsView は NTE_protoPrefsItem または NTE_protoPrefsRollItem
で表示されるモジュール・リストを「ピッ」という音がするまでタッ
プすることにより呼び出すことができます。prefsView が nil の場
合は何もしません。

プログラムからの利用方法
————————

GetPrefsNTEncoding method で NTEncodingDef を呼び出すことにより自
動的に NTEncodingDef の prefs slot に代入されます。uni2code, code2uni
method からは prefs slot を参照します。


(c)1997 GNUE.

NTE_1.1_prefs

水曜日, 11 月 26th, 1997


prefs の拡張仕様
================

GetPrefsNTEncoding
——————

:GetPrefsNTEncoding(prefs, opts) の引数 opts で frame が使えるように
なりました。以下の slot が使用できます。

defaultEncoding: ‘|binary.base64|, // デフォルトの classSymbol
path: ‘binaryEncoding, // classSymbol の登録されている path
// 省略時は ‘defaultEncoding
ValidTest: func(def)…, // 使える def かどうかをチェックします

引数 opts が symbol の場合は NTEncoding 1.1 と同じように defaultEncoding
として処理されます。完全上位互換なので特に昔のソースを変更する必要はあり
ません。

・path slot は1つの prefs に複数のエンコーディングの設定を保存したい
場合に有効である。これにより複数の設定をしたいのだけど、エレガントに
それを実現する方法がないと悩む必要はなくなる(エレガントでなければ今
まででも可能であった)。

なお、これは prefs のアクセスの部分だけなので、 prefs の設定画面は開
発者が自分で作成すること。

・ValidTest slot はモジュールが自分のプログラムで使うための充分な仕様を
満たしているかどうかチェックするのに有効である。具体的な例としては、
今回 NTEncoding 1.1 で拡張された MIME 関連の method がサポートされて
いるかどうかである。

ex.

ValidTest: func(def) isFunction(def.MIME_CurrEncodingType),

こうしておけば、間違って MIME 関連に対応していないモジュールがインス
トールされていても無視されるだけなので安全なプログラムを記述すること
ができる。

NTE_protoPrefsItem, NTE_protoPrefsRollItem
——————————————

VersionCheck: func(def)… をサポートしました(省略可)。
返り値は nil or message (String) でなければいけません。
返り値がある場合は右下に表示されます。

ex.

VersionCheck: func(def) if not isFunction(def.MIME_CurrEncodingType) then “old”,

インストールされているモジュールが利用可能かどうかをユーザに明示する
ために利用します。


(c)1997 GNUE.

Newtonの特徴(3)

金曜日, 11 月 21st, 1997


ども、GNUE(鵺)です。

 『パソコン雑誌が語らない Newtonの特徴』(3) のお時間です(^^;

 さて、Newtonにカードを挿入してみて下さい。
 もしデータがカードに入っていたら、そのデータが現われますよね?
 カードを抜いたら、そのデータが消えますね?
 (カードを抜くのにはちょっとコツがいりますが(^^;)

   これが『Newtonの特徴』です。

 え、こんなの当り前じゃないかって?
 そう、確かに Newton では当り前です。
 でも、パソコンや他の携帯コンピュータでは当り前ではありません(きっぱり)

 例えば、Mac に FD を挿入してみてください。
 FDのアイコンがデスクトップに現われますよね。でも、それだけです。
 仮に住所録ソフトが動いていたとします。FDを挿入したからといって
 表示している住所録の名簿が増えますか? FDに入っている住所録の
 データを見るには、そのファイルをオープンしなければいけないはず
 です。しかも、別のウィンドウがオープンするだけで、内蔵HDの住所
 データとFDの住所データがまるで1つのファイルのように表示される
 ことはありません。

 もう理解できましたよね。
 これが Newton の大きな特徴の一つです。

 なんかいつも当り前に使っているので忘れがちですが、
 Newtonは他にはないユニークな特徴をいくつも持って
 います。


(c)1997 GNUE.

※このドキュメントは NIFTY-Serve の FNEWTON で発言したものの再録です

Newtonの特徴(2)

金曜日, 11 月 21st, 1997


ども、GNUE(鵺)です。

 Newtonの使い勝手に大きく影響しているのが『Undo』機能です。

 最初から間違いがないに越したことはないけれど、間違いのな
 い完全な人間というものは存在しません。人間が必ずミスを犯
 す存在なら、ミスが犯したときにはそのミスを速やかにリカバ
 リしたいものです。『Undo』はミスを犯した直後なら「ちょっ
 と、それ待った!」と取り消せる機能です。

 一度『Undo』の便利さを知ってしまうと、もうそれのない世界
 では暮らせないと言っても言いすぎではありません。

 いまどき『Undo』機能なんて珍しい機能でもなんでもありませ
 んが、なぜか Newton 以外の携帯コンピュータで『Undo』機能
 がないのか不思議でなりません。


(c)1997 GNUE.

※このドキュメントは NIFTY-Serve の FNEWTON で発言したものの再録です

Newtonの特徴(1)

金曜日, 11 月 21st, 1997


ども、GNUE(鵺)っす。

 いっぺんに、まとまった文章を書くとしんどいので
 思いついたこを少しずつ書きます。

 Newtonは他にはない特徴をいろいろ持っているのだ
 けど、その1つが『Save操作』がないということで
 す。

 たぶんここにアクセスしている人はパソコンを使い
 こなしている人ばかりなので、『Save操作』を何も
 不思議に思わなくなっているかもしれません。

 では聞きますが、日常生活で『Save操作』なんて存
 在しますか? 紙にメモを書いてから『Save』をし
 ますか? しかも、『Save』をしないと書いたはず
 のメモが跡形もなく消えてしまうなんてことがあり
 ますか?

 昔何かで読んだ話によると、パソコンを初めて使っ
 た人が一番最初につまずくのがFileへの『Save』
 だそうです。

 『Save』を忘れて、せっかくいままで書いた文章
 が消えてしまう。あるいは、パソコンがフリーズ
 したために書いた文章が消える。パソコンの世界
 ではあたり前のことです。

 でも、Newtonは違います。ユーザが『Save操作』
 しなくてもデータが保存されます。あの悪名高い
 リスタートのときですら、データがまるごとなく
 なってしまうことはありません。

# どうも、マスコミとかは見た目とか、機能ばかりに
# 囚われて、この『Save操作』がないという非常に重
# 要な特徴が見過ごされているように思います。


(c)1997 GNUE.

※このドキュメントは NIFTY-Serve の FNEWTON で発言したものの再録です

Personal Computing VS Personal Computer…

金曜日, 11 月 21st, 1997


ども、GNUE(鵺)っす。

 パーソナルコンピューティングとパーソナルコンピュータについて、疑問を
 投げかけてみます(^^;

 パーソナルコンピューティングという言葉を初めて使ったのはアラン・ケイ
 だけど、パーソナルコンピュータは Appleの創始者の1人ウォズニアックが
 ガレージで Apple I を創ったのが最初である。

 よくアラン・ケイは有名な『ダイナブック』でパーソナルコンピュータを予言
 したと言われるが、彼が予言したのはパーソナルコンピューティング(個人の
 ためのコンピューティング)であって、現在のパーソナルコンピュータ(個人
 のコンピュータ)ではない。

 言葉は非常に似ているが、この2つは同じではない(きっぱり)。

 ウォズニアックは個人で使えるコンピュータが欲しかったからパーソナルコン
 ピュータを創った(当時、コンピュータは個人が所有するものではなかった)
 し、アラン・ケイは個人の思考を増幅するコンピュータが欲しかったのでパー
 ソナルコンピューティングという言葉を使ったわけである。

 現在、パソコンはパーソナルコンピューティングのためと道具と思われている
 が、実際はビジネスコンピューティングで使われることのほうが多いし、また
 必ずしもパーソナルコンピューティングのためにパソコンが必要だという思い
 込みが正しいとも限らない。

 パソコンを使う限り、人は『コンピュータ』を意識せざる得ないでしょう。
 パソコンは所詮、パーソナルなコンピュータではあっても、それ以上のもので
 はないからです。

 はっきりいって、ほとんどの個人ユーザにはパソコンは必要ないのではないだ
 ろうかということを思ってます。本当に必要なのはパーソナルコンピューティ
 ングを実現するための『道具』であってパーソナルなコンピュータではないの
 ではないかと。

 Newtonに期待しているのはパーソナルコンピューティングの『道具』になるこ
 とです。間違ってもパソコンにはなって欲しくないと思っています。だから、
 PDA(パーソナル・デジタル・アシスタント)には賛同するし。HA(ハン
 ドヘルド・コンピュータ)と呼ぶことには非常に危惧を感じます。

 さて、あなたが欲しているのは『パーソナルコンピューティング』なのか?
 それとも『パーソナルコンピュータ』なのか?

 そういう、お前はどうかって?
 そりゃ、両方です。だって、どっちも好きなんだもの…(^^;(^^;(^^;

# ひとつ書きはじめたら止まらなくなってしまった…(^^;
# いつまで続くか………………….


(c)1997 GNUE.

※このドキュメントは NIFTY-Serve の FNEWTON で発言したものの再録です