It's good to hear that jfiles has fans and users.  I second Henry's remarks
jfiles is simple and works very well.  It should live on in j7's.

Another utility that should live on is the humble scripts verb.  I keep
typing scripts in j7.01 only to get the value error blues.

Cheers

2010/11/29 Björn Helgason <[email protected]>

> This is a BIG issue and a very important one.
>
> The forms question alone is HUGE.
>
> 2010/11/29 Henry Rich <[email protected]>
>
> > 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
> >
>
>
>
> --
> Björn Helgason, Verkfræðingur
> Fornustekkum II
> 781 Hornafirði,
> t-póst: [email protected]
> gsm: +3546985532
> sími: +3544781286
> http://groups.google.com/group/J-Programming
>
>
> Tæknikunnátta höndlar hið flókna, sköpunargáfa er meistari einfaldleikans
>
> góður kennari getur stigið á tær án þess að glansinn fari af skónum
>          /|_      .-----------------------------------.
>         ,'  .\  /  | Með léttri lund verður        |
>     ,--'    _,'   | Dagurinn í dag                     |
>    /       /       | Enn betri en gærdagurinn  |
>   (   -.  |        `-----------------------------------'
>   |     ) |         (\_ _/)
>  (`-.  '--.)       (='.'=)   ♖♘♗♕♔♙
>   `. )----'        (")_(") ☃☠
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>



-- 
John D. Baker
[email protected]
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to