OK, here goes. My finishing project formy Open University degree (started in 1974 and finished in 2017!) was a routing program for freight cars on US model railways - written in VAST Smalltalk with a Seaside front end and a Riak back end. Riak is a multi-user, fail over resilient Key/Value (K/V) database. I used it on a Linux server as I couldn’t get it going under MacOS. However, now I have finished my degree, I have disposed of the server so, for my new project I didn’t have a database. I had built my own K/V database some years ago to run the management and web software for a scale model shop that I owned at that time so I decided that I would recreate that database for my current use.
TinkKV is my Smalltalk K/V. It relies on the OS for saving and retrieving objects which are saved using STON (Smalltalk Object Notation) format. Simple, there are two levels of bucket - 1) ‘Bucket’ and 2) ’SubBucket’. There can be multiple buckets which can contain multiple sub buckets. In my application, items are stored under two keys - FAOEntry (the basic entry object) which is the primary bucket, and multiple sub buckets keyed by the category of each object. It is a single user, local machine DB which is extremely fast - retrieves 189 records in 0.18 seconds on an M1 Mac. Family Accounts is a simple home accounts management package that will evolve over the coming month but basically imports transactions from a NatWest Sage Accounts format download and inserts them into the database. Each object can be categorised for budget control and each budget can be displayed. The program can import a set of regular items (in CSV format) that recur monthly so that a monthly budget can be managed. It is written in Pharo 8.0. I have been writing Smalltalk since 1990 when I started with Digitalk Visual Smalltalk but since about 1996 I have been using IBM/Instantiations VisualAge (VAST). I started the program, knowing nothing about Pharo, around the 15th January so it has taken just about a month of 1 -2 hours a day firstly to get to grips with Pharo and then to write the DB and Program. I have found Pharo quite difficult to come to grips with as, in comparison to VAST, it seems to be written for academics rather than business apps. However, once I got my head around how it was all put together, I found it an easy transition and great fun to use. I had expected to continue with VAST under Parallels but found that neither Parallels (well partially) or Windows 10 currently works successfully on an M1 MacBookAir. I did try to get hold of VisualWorks but didn’t get any response to my request for a download for some reason. I have written a good few frameworks for VAST so, now that my program is running successfully, I will have a look and see if I can port anything else. Watch this space. David Pennington Totally Objects (Http://www.totallyobjects.com <http://www.totallyobjects.com/>) > On 13 Feb 2021, at 11:09, Stéphane Ducasse <stephane.duca...@inria.fr> wrote: > > Hi david > > Two points: > - I would love to have a little success story about your application > = one paragraph what is does + one paragraph how technology is > cool :) > > - if you need we have a native VM for M1 (the stackVM). > > S. > >> On 11 Feb 2021, at 20:38, David Pennington <da...@totallyobjects.com >> <mailto:da...@totallyobjects.com>> wrote: >> >> Hi there Peter >> >> I have been writing Smalltalk since 1990 first with Digitalk and then >> IBM/Instantiations VAST. However, I am a newbie with Pharo having only used >> it for the last 3 weeks so I am pleased to have got my first Seaside app >> working successfully - it’s a home banking management app that imports from >> Sage compatible CSV files supplied by NatWest. This is the only real >> difficulty so I am very pleased with the work. >> >> I use my own brand key/value database that saves objects out to the disk. >> With my new M1 MacBookAir, I am getting read and write values around .3 >> second for 125 records so I am very happy. >> >> I have yet to look at deleting the old file before writing but I am sure >> that this will make it superb. >> >> Many thanks for your help in this. >> >> David >> TotallyObjects >> http://www.totallyobjects <http://www.totallyobjects/>.com >> >> Your suggestion worked perfectly - I truncate the file and it parses >> >>> On 11 Feb 2021, at 17:07, <pe...@pbkresearch.co.uk >>> <mailto:pe...@pbkresearch.co.uk>> <pe...@pbkresearch.co.uk >>> <mailto:pe...@pbkresearch.co.uk>> wrote: >>> >>> David >>> I think you are misreading the debugger display. The bit you are missing is >>> the last few characters in the evaluation display, after the closing >>> parenthesis. They should not be there if it is displaying a dictionary. >>> Evidently the variable 'aDict' is in fact an association whose key is the >>> dictionary and whose value is nil. >>> >>> I can't see where it goes from there, but I think you need to look more >>> closely at the preceding line, FAOEntry>>getEntryObjectFrom:, and see what >>> exactly it does with the junk in your .dat file. >>> >>> HTH >>> >>> Peter Kenny >>> >>> >>> -----Original Message----- >>> From: David Pennington <da...@totallyobjects.com >>> <mailto:da...@totallyobjects.com>> >>> Sent: 11 February 2021 16:46 >>> To: Any question about pharo is welcome <pharo-users@lists.pharo.org >>> <mailto:pharo-users@lists.pharo.org>> >>> Subject: [Pharo-users] Re: Problem with Dictionary and Associations >>> >>> Thank you for that but it doesn’t resolve my problem. Why does the stack >>> move to an Association when doing the access to the dictionary? It is the >>> Association indexing that fails as it won’t allow #entryAmount as a key. >>> >>> If I inspect the following code (STON fromString: result ) in the line ^ >>> self makeObject: (STON fromString: result ) I get an Association. Why don’t >>> I get a Dictionary. I did two days ago when all of this was working >>> perfectly and we were happily matching the Pharo Seaside display to our >>> bank account :=) >>> >>> David >>> >>>> On 11 Feb 2021, at 16:39, Sven Van Caekenberghe <s...@stfx.eu >>>> <mailto:s...@stfx.eu>> wrote: >>>> >>>> I can parse the file data you provided: >>>> >>>> STON fromString: >>>> '{#entryName:''Housekeeping'',#entryDate:Date[''2021-02-25Z''],#transactionID:''2021022501'',#entryAmount:-400/1s8,#entryCategory:''Housekeeping'',#entryDescription:''Housekeeping'',#match:nil}ousekeeping'',#match:nil}' >>>> >>>> >>>> "a Dictionary(#entryAmount->-400.00000000s8 #entryCategory->'Housekeeping' >>>> #entryDate->25 February 2021 #entryDescription->'Housekeeping' >>>> #entryName->'Housekeeping' #match->nil #transactionID->'2021022501' )" >>>> >>>> (BTW, this is STON not JSON). >>>> >>>> What I do see in the input is junk after the last } >>>> >>>> That can happen when you overwrite an existing file with shorter content. >>>> You should truncate such a file. >>>> >>>> From your screenshot I can see nothing wrong, #entryAmount seems an >>>> existing key in aDict, that should just work. >>>> >>>>> On 11 Feb 2021, at 16:33, David Pennington <da...@totallyobjects.com >>>>> <mailto:da...@totallyobjects.com>> wrote: >>>>> >>>>> I attach a couple of screen shots and a file containing the item that I >>>>> am trying to open. What else can I supply? This has been working for a >>>>> couple of weeks and suddenly doesn’t work. I save the JSON and then load >>>>> it back again. I enclose a file with the JSON as contents. As you can see >>>>> from the screenshot, the debugger shows it as a dictionary but the >>>>> execution path takes it to an Association which is what I don’t >>>>> understand. >>>>> >>>>> <stack.rtf><20210225 01><screenshot.png> >>>>> >>>>>> On 10 Feb 2021, at 19:17, Sven Van Caekenberghe <s...@stfx.eu >>>>>> <mailto:s...@stfx.eu>> wrote: >>>>>> >>>>>> Hi David, >>>>>> >>>>>>> On 10 Feb 2021, at 19:18, da...@totallyobjects.com >>>>>>> <mailto:da...@totallyobjects.com> wrote: >>>>>>> >>>>>>> I am using STON to objects out to disk. Up to two days ago, I was >>>>>>> reading them in as Dictionaries and converting to objects from there. >>>>>>> All of a sudden yesterday morning, I got an error saying that the >>>>>>> association is only indexable with integers. Even so, I don't seem to >>>>>>> be able to access the contents. >>>>>>> >>>>>>> Fistly, any ideas why this has changed and secondly, any ideas how to >>>>>>> fix it? >>>>>>> >>>>>>> David >>>>>>> Totally Objects >>>>>>> >>>>>>> Sent from my Huawei tablet >>>>>> >>>>>> I am afraid I need more information. >>>>>> >>>>>> Could you create a reproducible case ? >>>>>> Do you have a stack trace ? >>>>>> >>>>>> In any case, STON is a text format, that can be edited (in most cases, >>>>>> shared or circular references being hard to edit by hand). >>>>>> >>>>>> Sven >>>>> >> > > -------------------------------------------- > Stéphane Ducasse > http://stephane.ducasse.free.fr <http://stephane.ducasse.free.fr/> / > http://www.pharo.org <http://www.pharo.org/> > 03 59 35 87 52 > Assistant: Aurore Dalle > FAX 03 59 57 78 50 > TEL 03 59 35 86 16 > S. Ducasse - Inria > 40, avenue Halley, > Parc Scientifique de la Haute Borne, Bât.A, Park Plaza > Villeneuve d'Ascq 59650 > France >