AFAIK missing non-gui packages can be relocated in addons.  It also depends
on beta testers' feedback to decide which of these packages worth the
effort.

Вск, 28 Ноя 2010, Henry Rich писал(а):
> What?? What good reason is there to retire something simple that works? 
>   I use jfiles all over.
> 
> Is there a doc somewhere that discusses migration from J6 to J7?  I rely 
> on wd, forms, grid, jfiles, sockets, winAPI.
> 
> Henry Rich
> 
> On 11/28/2010 7:40 PM, John Baker wrote:
> > With the recent J 7.01 betas there have been rumbles that jfiles will be
> > retired in the not to distant future.  There are many good reasons for this
> > so I started exploring jfiles alternatives and I think that sqlite may be
> > viable.
> >
> > Here's the good news:
> >
> > 1) sqlite is very stable, fast and produces binary compatible databases
> > across all the OSs jsoftware supports.  You can copy a sqlite database from
> > a mac to linux or windows machine and access it without a single tweak.
> > sqlite is even available on android and the iphone and is embedded in major
> > software products like Adobe Lightroom.
> >
> > 2) data stored in sqlite format can be easily manipulated outside of J.  A
> > huge plus for many.
> >
> > 3) The relaxed implied typing in sqlite, (it ignores limits on literals and
> > binary types), is well suited to J.
> >
> > 4) It's small and meant to be embedded.
> >
> > With so much going for it I spent sometime this weekend hacking around in
> > J/C# .
> >
> > The following C# test program uses the ADO.NET sqlite provider at:
> > http://sqlite.phxsoftware.com/
> >
> > Oleg's J sqlite addon:   http://www.jsoftware.com/jwiki/Addons/data/sqlite
> >
> > and a C#/J com interface I put together see:
> > http://bakerjd99.wordpress.com/2010/05/28/a-c-net-class-for-calling-j/
> >
> > It looks like you can easily stuff and fetch J binary data from all these
> > environments without a big fuss:
> >
> > using System;
> > using System.Collections.Generic;
> > using System.IO;
> > using System.Text;
> > using System.Data;
> > using System.Data.Common;
> > using JServerClass;
> > using LescasseConsulting.AplServer;
> > using System.Data.SQLite;
> >
> > namespace SqliteTest00
> > {
> >      class Program
> >      {
> >
> >          // test sqlite database
> >          private const string testdb = @"c:\temp\test.sqlite";
> >
> >          // test apl workspace
> >          private const string apltestws = @"C:\pd\apl\aplwin\utf8";
> >
> >          private static JServer StartJServer(JServer.JScriptType st, string
> > inputscript)
> >          {
> >              // start a new J server and load root script
> >              JServer js = new JServer(st, inputscript);
> >              js.jShowServer = true;
> >              return js;
> >          }
> >
> >          private static AplServer StartAPLServer(string ws)
> >          {
> >              AplServer apl = new AplServer(ws);
> >              apl.Visible = 1;
> >              return apl;
> >          }
> >
> >          static void Main(string[] args)
> >          {
> >
> >              // clear any old database
> >              if (File.Exists(testdb)) File.Delete(testdb);
> >
> >              // start J
> >              JServer js = StartJServer(JServer.JScriptType.OnlyProfile, "");
> >
> >              // load up JOD databases - fetch words
> >              js.jDo("require 'general/jod'");
> >              js.jDo("od ;:'play utils'");
> >              js.jDo("'rc wordtable'=: 0 10 get }.dnl''");
> >
> >              // split up wordtable for JServer casting interface
> >              js.jDo("jwords=: 0 {" + '"' + "1 wordtable");
> >              js.jDo("jdefinitions=: 2 {" + '"' + "1 wordtable");
> >              js.jDo("jclasses=: ; 1 {" + '"' + "1 wordtable");
> >
> >              // set JOD nouns (stored as binaries) as byte strings
> >              js.jDo("nmask=: 0 = jclasses");
> >              js.jDo("(nmask # 0 {" + '"' + "1 wordtable) =: nmask # 2 {" +
> > '"' + "1 wordtable");
> >
> >              // load J sqlite interface - uses different dll than
> >              // the one used by the C# library but so far I haven't
> >              // seen any data compatibility issues.
> >              js.jDo("load 'data/sqlite'");
> >
> >              // tell J where the test database is
> >              js.jSet("testdb", testdb);
> >
> >              // create J sqlite object for test database
> >              js.jDo("]db=: testdb conew 'psqlite'");
> >              //js.jDo("blobsize__db 100000");
> >
> >              //// start APL and load test workspace
> >              //AplServer apl = StartAPLServer(apltestws);
> >
> >              // we use these three SQLite objects
> >              SQLiteConnection sqlite_conn;
> >              SQLiteCommand sqlite_cmd;
> >              SQLiteDataReader sqlite_datareader;
> >
> >              // create new database connection
> >              sqlite_conn = new SQLiteConnection("Data Source=" + testdb +
> > ";Version=3;New=True;Compress=True;");
> >
> >              // open connection
> >              sqlite_conn.Open();
> >
> >              // create a new SQL command
> >              sqlite_cmd = sqlite_conn.CreateCommand();
> >
> >              // create table
> >              sqlite_cmd.CommandText = "CREATE TABLE test (word text primary
> > key, nameclass integer, definition text, nounvalue blob);";
> >              sqlite_cmd.ExecuteNonQuery();
> >
> >              string[] jwords;
> >              js.jGet("jwords", out jwords);
> >
> >              string[] jdefinitions;
> >              js.jGet("jdefinitions", out jdefinitions);
> >
> >              int[] jnameclasses;
> >              js.jGet("jclasses", out jnameclasses);
> >
> >              if ((jwords.Length != jdefinitions.Length) || (jwords.Length !=
> > jnameclasses.Length))
> >              {
> >                  // list lengths match coming out of JOD if they
> >                  // do not here the interface has punked my data
> >                  return;
> >              }
> >
> >              using (SQLiteTransaction mytransaction =
> > sqlite_conn.BeginTransaction())
> >              {
> >                  using (SQLiteCommand mycommand = new
> > SQLiteCommand(sqlite_conn))
> >                  {
> >                      SQLiteParameter myparam1 = new SQLiteParameter();
> >                      SQLiteParameter myparam2 = new SQLiteParameter();
> >                      SQLiteParameter myparam3 = new SQLiteParameter();
> >                      SQLiteParameter myparam4 = new
> > SQLiteParameter(DbType.Binary);
> >
> >                      mycommand.CommandText = "INSERT INTO test (word,
> > nameclass, definition, nounvalue) VALUES(?,?,?,?)";
> >                      mycommand.Parameters.Add(myparam1);
> >                      mycommand.Parameters.Add(myparam2);
> >                      mycommand.Parameters.Add(myparam3);
> >                      mycommand.Parameters.Add(myparam4);
> >
> >                      for (int i = 0; i<  jwords.Length; i++)
> >                      {
> >                          string wname = jwords[i];
> >                          int wclass = jnameclasses[i];
> >
> >                          myparam1.Value = wname;
> >                          myparam2.Value = wclass;
> >
> >                          // JOD stores nouns as binaries all other words are
> > text
> >                          if (0<  wclass)
> >                              myparam3.Value = (string)jdefinitions[i];
> >                          else
> >                          {
> >                              // fetch JOD binary
> >                              byte[] nounvalue;
> >                              js.jGet(wname, out nounvalue);
> >                              myparam4.Value = nounvalue;
> >                          }
> >
> >                          mycommand.ExecuteNonQuery();
> >                      }
> >                  }
> >                  mytransaction.Commit();
> >              }
> >
> >              // close C# sqlite connection
> >              sqlite_conn.Close();
> >
> >              // fetch words name from sqlite table and compare with 
> > originals
> >              js.jDo("sqlwords=: strtbl__db 'select word from test'");
> >              js.jDo("jwords -: , }. sqlwords");
> >
> >              // fetch all noun binaries and compare with orginals
> >              js.jDo("sbinaries=: }. strquery__db 'select word,nounvalue from
> > test where nameclass=0'");
> >              js.jDo("sbinaries -: (0 {" + '"' + "1 sbinaries) ,. " + '"' +
> > ".&.>  0 {" + '"' + "1 sbinaries");
> >
> >              // fetch all literals and compare with orginals
> >              js.jDo("sliterals=: }. strquery__db 'select word,definition 
> > from
> > test where nameclass>0'");
> >              js.jDo("sliterals -: (-.nmask) # 0 2 {" + '"' +"1 wordtable");
> >
> >              //// apl does not automatically shutdown
> >              //apl.CloseAPL();
> >          }
> >
> >      }
> >
> > }
> >
> >
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm

-- 
regards,
====================================================
GPG key 1024D/4434BAB3 2008-08-24
gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to