Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - Peter.Higgins

#1
Programming / Re: Why use PVX?
June 18, 2024, 04:35:09 PM
Cedric,
A client just hired an excellent BBX programmer who picked up PVX like he sleeps with the manual under his pillow.  The languages are very simual, but the file system, Dictionary and Nomads are all far simpler than the BBX versions. 
A bonus is java as that skill is requred for BBX gui.
He seems pretty happy with the change.  There are no major users of BBX left so its hard to find work in it.  I spent a year and a half in BBX and learned things about PVX like string templates that are barely mentioned in PVX.
Python seems to be the closest language to PVX but has 60 string functions covered by the 6 PVX ones and doesn't have a comparable object model.  I'm not a fan of libraries.  If it did I problably would have switched.
Object Nomads is absolutely great for moving all logic out of the nomads files.  Grids are so much easier to maintain with an objects for load and interface, business and file logic with only the screen configuration and managment in the program. 
#2
Chris,
Hope the following few tricks that can save Dev and network time with nomads are helpful.

Put as little configuration in Nomads as possible. Especially for grids.
Use the Nomads variables as much as possible ie. PERFORM ";Change"+ID$
Minimize control network traffic with Pseudo Multi-Properties or Multi-Property Access

Grids have the most speed complaints so the following really speeded things up.
Read/write by linedata records. 
Use Pseudo Multi-Properties to configure. Every . removes a network round trip.
load data first in the largest string(s) you can transfer.  I've been using gMaxSize=500000
Add Minimal colors afterwards and send in as few Pseudo Multi-Properties strings as possible.
Use the grd'Fmt$ to both configure the grid and return the IOLIST. 
Its not possible to mix and match every property in one Multi-Properties submission, especially fmt$.
A bonus to FMT$ is easy editing of named fields to match files, OTF grid formatting and easy sorts and column swapping.  Iolists don't care about column order, control properties do.   
Use the Sheet'Range()'PasteSpecial() for loading grids to Excel and/or clipboard tabbed delimited for non excel
IF windows server & client the MS safe array method works well too
#3
Mike,
This answers my question.  Having only a Linux license, with no Linux server at the moment, I was hoping to get some of what I wanted to do for the next project done before the weekend.  Miss the developer license for sure. 
I was hoping to run the Windx IT locally to edit in memory without connecting to the server or local file. 
Attempts so far have at best popped a connection launch panel so I moved on.

I copy and paste back and forth bits and whole programs between UltraEdit, client IT when available, and Server IT numerous times a day depending on what needs doing.  Substring replacement with composite record variables is what I need the most because it saves hours of large file memorizing and reference and highlights or fixes scope issues.
#4
Is it possible to use the Client *IT with the WindX plugin.  I have substantial mods to my version that save much time on certain conversion tasks and do not want to install my IT version on client servers. 
#5
Jeff,
I preload data filtered by object then READ DATA from that into the nomads fields. 
If one or more objects are used, all the validation and bulk loading scope can be separated from the GUI interface.

The way I load files most often is to add a drop button or key field on the panel to load the list/file/spreadsheet into a grid with a test mode to indicate new/changed before update.   
#6
Programming / Re: Strange if then else behavior
May 11, 2023, 05:41:59 PM
Mike,
Thanks Mike.  Your comments on the Curly braces and forward scanning are very helpful.  I've found the UltraEdit text editor really helps when set for Pvx code to match braces.  Now I know to also reduce lines.   I use the GOSUB method often for simplifying the decision logic which can reduce lines processed by listing IF decisions lines in declining frequency and putting a return at the end of each.
#7
Programming / Re: Ai future?
May 11, 2023, 05:22:20 PM
I too was wondering what the IP restrictions were on training an AI on coding with PVX as it would be much easier to clean up old systems or convert to a object based one with such diligent help.
#8
Server parameter in CALL "*web/sftp;receive" is confusing me somewhat. 
I recently implemented a client with Id/Password where the domain:port only worked as domain;port. (Delimiter = Semi-Colon)
The next client using a cert only works with domain:port.
Is there a way to know when to use a certain delimiter in the domain sent? 
#9
Language / Re: Key function - Key Generate
December 06, 2022, 12:34:40 PM
Thank you Mike,
All good reasons to use the internally keyed files for new stuff.   
#10
Language / Key function - Key Generate
December 05, 2022, 06:52:16 PM
The really useful part of this functions Key Generate is not having to enumerate alternate keys for padding. 
But it does not return a complete key padded for trailing empty fields in external key files as shown below. 
I haven't checked it yet against the internal files as empty trailing fields are less likely by design.
So enumeration of keys or hard coding padding data may still be necessary.
Wondering if I am missing something here? 
I would expect and prefer to mid/stp the result if a partial key was wanted.
Still on Version 1410. 

01 OPEN (1)"OP9002" ! External Prime key file, Key 3 is 4 Fields, 33 bytes - 20:7:2:4
02 cmd$="key(1,key=""00190579172397"":""5850720"":""  "":""    "",kno=3)"
03 x$=EVS(cmd$)
04 PRINT HTA(x$)
05 PRINT LEN(x$)
06 cmd$="key(1,key=""00190579172397"":""5850720"":"""":"""",kno=3)"
07 x$=EVS(cmd$)
08 PRINT HTA(x$)
09 PRINT LEN(x$)
10 cmd$="key(1,key=""00190579172397"":""5850720"",kno=3)"
11 x$=EVS(cmd$)
12 PRINT HTA(x$)
13 PRINT LEN(x$)
14 CLOSE (1)
15 END

-;run
303031393035373931373233393700000000000035383530373230202020202020
33
3030313930353739313732333937000000000000353835303732300000
29
303031393035373931373233393700000000000035383530373230
27
#11
Programming / Re: Reverse or limit VER *
August 11, 2022, 03:56:15 PM
Yes that was useful to set the 50 limit when someone who made frequent saves joined the crew. ::)
#12
Programming / Reverse or limit VER *
August 10, 2022, 05:29:54 PM
For a while we've been able to VER 2 for instance to get the date/Time/Version number of a program.  This has stopped working recently.  Since the system program count is set a 50, VER * is pretty much useless as it only shows the last 10 lines or so.  Is there a way to limit or reverse the list?
#13
Programming / Reverse or limit VER *
August 10, 2022, 05:28:40 PM
For a while we've been able to VER 2 for instance to get the date/Time/Version number of a program and it has stopped working in the last couple of weeks.  Since the program count is set a 50, VER * is pretty much useless as it only shows the last 10 lines or so.  Is there a way to limit or reverse the list?
#14
Mike,
Its a typo and should be str(AAARecord.RoadsideAssistenceNumber$ or str(Phone$ 
The summary is in an Object, composite strings for AAA$ & AAARec$ work but AAARecord$ will not. 
AAA is a place holder for a number of file names fortunately all 3 letters. 
Please note on the system in question that AAARecord.RoadsideAssistenceNumber$ works in a run or called program just not in objects.
#15
I use records frequently as object parameters and find the structure neither remains after the enter, or in a local variable.  So I must do the following in every method. Except I've found debugging that a variable of len 9 will not return data from a composite string although the structure is there. Note: I have not played with how long a variable still works.   Curious if I missed something in documentation,  if this is unusual  behavior, or just an object limitation?  version 2017 on Linux.

! Doesn't work
ENTER (FILEREC$),(FILEIOL$)
DIM AAARecord$:fileiol$
AAARecord$=FILEREC$
phone$=AAA.RoadsideAssistenceNumber$
? lst(iol(AAARecord$))  ! will show Structure. 
? str(AAA.RoadsideAssistenceNumber$:"xxx-xxx-xxxx")
   -   -   

! This works
ENTER (FILEREC$),(FILEIOL$)
DIM AAA$:fileiol$
AAA$=FILEREC$
phone$=AAA.RoadsideAssistenceNumber$
? str(phone$:"xxx-xxx-xxxx")
888-888-8888