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
> 

Reply via email to