Posts Tagged ‘Newton’

Newton DNA

火曜日, 9月 7th, 2004

Newton Never Dies. It only gets new Hardware(Paul Guyot)
Fans Keep Newton in Motion(Wired News)
今も健在アップルの『Newton』、パリでカンファレンスを開催(Wired News 日本版)

いいぬまさんのところでも既に紹介されているが Apple Expo に合せて開催された World Wide Newton Conference(WWNC) において Paul Guyot氏の Einstein project(アインシュタイン・プロジェクト)の成果である Newton ハードウェアエミュレータが発表されたらしい。Wired News の記事で Mac OS X で動作する Newton ハードウェアエミュレータの写真を見ることができる(ぶらぼ〜!)

ところで Wired News 日本版の記事の「Newtonコミュニティーの中には違う考えのメンバーもいるのだと注意を促す。」以降の箇所が少し気になる(原文だとニュアンスが違うのかもしれないが)。道は決してひとつではない。Einstein project のようなハードウェアエミュレータもひとつの道だし、OS の移植もひとつの道である。私の NewtonScript インタプリタだってひとつの道かもしれない。無理な意思統一などしなくても、それぞれが自分の信じる道を進めばいいのではないだろうか。

覚書:Mac OS X で NTK を起動する

火曜日, 6月 8th, 2004

下記のファイルを Classic の機能拡張フォルダに入れる。

– AppleTalk ADSP Tool
– TCPSerial

TCPSerial がキモ。USB Serial ケーブルなどは必要なし。

Programming_of_NTE_3

水曜日, 1月 28th, 1998


Programming of NTEncoding (3)
=============================

ども、GNUE(鵺)っす。

 NTEncoding講座の3回目です。
 今回は Prefs についてです。

 【何故必要か?】

   NTEncoding の Prefs には2つの意味があります。

     1) エンコーディングの種類を切り替える

      パソコンと通信する場合は ShiftJIS ですが、例えばUNIXと通信したい
      場合は EUC(変換モジュールはまだない(^^;)とコード変換する必要が
      あります。そういった場合、プログラムを変更することなく Prefs で
      エンコーディングの種類を切り替えるだけで対応できます。

      その他にも、中国語の変換モジュールが作成されれば、そのまま中国語
      のコード変換が可能になります。

      Web Browser の Encoding 設定をイメージしてもらうとわかりやすいか
      もしれません。

     2) 変換モジュールの優先順位を決める

      NTEncodingではプログラマが用途に応じて変換モジュールをつくること
      ができるようになっています。例えば、パッケージのサイズが大きいけ
      ど処理速度の速い変換モジュールとか、NEC 外字に対応した変換モジュ
      ールなどです。

      そうすると、同じ種類の複数の変換モジュールがNewtonにインストール
      される可能性があります。そういった場合、どの変換モジュールを使っ
      ていいかプログラムがわからなくなってしまいます。そこでどの優先順
      位で変換モジュールを使うかを決めるわけです。

 【どうやって使うか?】

   NTEncoding では NTE_protoPrefsRollItem と NTE_protoPrefsItem という2つ
   の proto を用意しています。NTE_protoPrefsRollItem は protoPrefsRollItem
   ベースでそのまま RegPrefs や TapBarの kRegTapBarPrefFunc で登録すること
   ができます。もっと独自の Prefs にしたいという場合は NTE_protoPrefsItem
   を使ってカスタマイズします。

   ここでは NTE_protoPrefsRollItem を例にとります。

   defineGlobalConstant('kNTE_prefs,
     {
       _proto:     NTE_protoPrefsRollItem,
       overview:    kAppName,         // タイトル
       defaultEncoding: '|string.sjis|,      // デフォルト
       classSpec:    {subClass: 'string},    // '|string.xxxx|
                               のみ選択可能

       viewSetupFormScript:
        func()
        begin
         self.appPrefs := getAppPrefs(kAppSymbol, {});
         self.prefs := appPrefs.NTEncoding;    // prefs を設定

         inherited:?viewSetupFormScript();
        end,

       changedPrefs:
        func(slot)
        begin
         appPrefs.NTEncoding := prefs;      // prefs を保存
         entryChangeXmit(appPrefs, nil);
        end,
     });

   InstallScript := func(partFrame, removeFrame)
   begin
    RegPrefs(kAppSymbol, kNTE_prefs);
   end;

   RemoveScript := func(removeFrame)
   begin
    UnRegPrefs(kAppSymbol);
   end;

  この Prefs の設定を使用するには

    local prefs := getAppPrefs(kAppSymbol, {}).NTEncoding;
    local def := NTE_methods:GetPrefsNTEncoding(prefs, '|string.sjis|);
    local str := NTE_methods:uni2code("てすと", def, nil);

  を使います。

  詳しい使い方に関しては 1.0 SDK のドキュメントを参考にして下さい。

---
(c)1997 GNUE.

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

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 で発言したものの再録です