Hi Offray,

Regarding the error, I’m guessing that ReStore doesn’t have a table object for 
your NitterUser class for some reason. Could you try:

   myReStore tableForClass: NitterUser

…and check if this is returning nil? If so there’s an issue with creating the 
table for the class; you could try stepping through

   NitterUser reStoreDefinition asTableIn: myReStore

...to get an idea of what’s wrong.

If this isn’t the issue please let me know.

Regarding the manual, I’ll send this to you by mail.

Cheers.

John



> On 6 Apr 2022, at 19:48, Offray Vladimir Luna Cárdenas 
> <offray.l...@mutabit.com> wrote:
> 
> Thanks Jhon, it definitively helps.
> 
> What I did was to extract some important metadata as slots of the Tweet 
> object and made explicit the authorId, which allows me to trace tweets 
> authorship:
> 
> ===
> Tweet>>class #reStoreDefinition 
> ^ super reStoreDefinition 
>     defineAsID: #id; 
>     define: #text as: String; 
>     define: #created as: String; 
>     define: #authorId as: String; 
>     define: #timelines as: (Dictionary of: String -> String); yourself
> 
> ===
> Also I'm going to put in the radar the idea of storing STON strings for 
> metadata residues.
> 
> On a related matter, I'm still unable to store properly the NitterUser, which 
> inherits from TwitterUser  into SQLite and always get a pre-commit error: 
> "#idDataField was send to nil" when I ran "myNitterUser store". Here is my 
> TwitterUser storing definition:
> 
> ===
> TwitterUser>>class #reStoreDefinition 
>     ^ super reStoreDefinition 
>             defineAsID: #id; 
>             define: #userName as: String; 
>             define: #profileImageUrl as: String; 
>             define: #profileBio as: String; 
>             "define: #createdAt as: String;" 
>             yourself.
> 
> ===
> 
> What I'm missing? And more importantly: how can I debug the message, so I can 
> asign the proper non nil object as receiver of #idDataField ?
> 
> Finally (for now ;-) ), the ReStore manual has been and important learning 
> resource. Are you the author? And if so, would you be so kind to upload the 
> Word source code to the Documentation/ folder in the repository under a 
> permissive license that allow at least some format changes? We would like to 
> add some table of contents and translate it to other formats, as we have done 
> before with other free/libre cultural works (see [1] [2]).
> 
> [1] https://mutabit.com/repos.fossil/datafem 
> <https://mutabit.com/repos.fossil/datafem>
> [2] https://mutabit.com/repos.fossil/mapeda/ 
> <https://mutabit.com/repos.fossil/mapeda/>
> 
> Thanks,
> 
> Offray
> On 6/04/22 2:52, John Aspinall wrote:
>> Hi Offray, 
>> 
>> You’re correct that ReStore can’t store that kind of mixed dictionary 
>> directly. You could store the entire STON text as one string and reify it on 
>> read, though that would mean you can’t easily query on the metadata. 
>> 
>> A compromise solution would be to define objects and slots for the key data 
>> you’d need to query on and a STON string for the residue. This could be a 
>> better solution anyway as excessive/complex Dictionaries can be a sign that 
>> you need to define a new class/classes. For your particular project this 
>> would depend on how similar the metadata is between tweets - if there’s not 
>> much commonality then a Dictionary approach may be more appropriate. 
>> 
>> Hope this helps,
>> 
>> John
>> 
>> 
>> 
>>> On 5 Apr 2022, at 20:07, Offray Vladimir Luna Cárdenas 
>>> <offray.l...@mutabit.com <mailto:offray.l...@mutabit.com>> wrote:
>>> 
>>> Hi all,
>>> 
>>> First of all, despite of being on a non-directly related matter with my 
>>> question, congrats of Pharo 10.
>>> 
>>> We (as now we have 2 active Smalltalkers in my country... Yay!) are 
>>> creating a civic tech project with Pharo/Lepiter and we would like to store 
>>> some Tweet metadata coming from Nitter[1]. As we're dealing with the 
>>> differences between the official Twitter API and the unofficial Nitter one, 
>>> we put the metadata we need in a dictionary that has several kinds of 
>>> objects, from ordered collections to other dictionaries. 
>>> [1] https://nitter.net/about <https://nitter.net/about>
>>> Currently if we serialize a Tweet object in STON, we get this:
>>> 
>>> Tweet { #created : 'Tue, 05 Apr 2022 12:37:56 GMT', #text : '
>>> 
>>> [ANN] Pharo 10 Released: pharo.org/news/pharo10-relea… 
>>> <https://pharo.org/news/pharo10-released>\n', #id : '1511322244353597443', 
>>> #user : NitterUser { #userName : 'pharoproject', #profileImageUrl : URL [ 
>>> 'http://nitter.42l.fr/pic/pbs.twimg.com/profile_images/541743734/icone-pharo-1_400x400.png
>>>  
>>> <http://nitter.42l.fr/pic/pbs.twimg.com/profile_images/541743734/icone-pharo-1_400x400.png>'
>>>  ] }, #metadata : { 'queries' : OrderedCollection [ { 'date' : DateAndTime 
>>> [ '2022-04-05T13:36:58.546011-05:00' ], 'parameters' : 
>>> 'https://nitter.42l.fr/pharoproject <https://nitter.42l.fr/pharoproject>' } 
>>> ], 'timelines' : { 'pharoproject' : '1511048498703126529' } } }
>>> As you can see, the metadata slot contains a dictionary with mixed classes 
>>> of objects. But I read in the ReStore manual[2] (pg 14):
>>> 
>>> """
>>> 
>>> Like other collections, the class of elements for both key and value can be 
>>> any other
>>> persistent class, and will be the same for all elements of that collection 
>>> (except in the case of
>>> inheritance).
>>> """
>>> So, is ReStore unable to store metadata dictionaries like the one described 
>>> in the previous STON code? if this is possible, how can I define it in the 
>>> Tweet class>>reStoreDefinition? 
>>> For the moment, I'm going to create a explicit "timelines" slot to store 
>>> what was being stored at the #timelines key of the metadata dictionary. 
>>> But, as metadata increases, instead of moving variables previously inside 
>>> of a dictionary as explicit slots of an object, I think that having a 
>>> explicit way of storing dictionaries with different kinds of objects, in 
>>> contrast with only uniform ones, would be needed (but I don't know if this 
>>> is in the design scope of ReStore).
>>> 
>>> BTW, Lepiter has allow us to build a pretty fluent interface to browser 
>>> Twitter/Nitter profiles and messages. Here it is how such UI looks for 
>>> browsing last @pharoproject tweets:
>>> 
>>> https://i.imgur.com/bxFze1g.png <https://i.imgur.com/bxFze1g.png>
>>> Any help on how to use ReStore in storing mixed dictionaries is appreciated.
>>> 
>>> Thanks,
>>> 
>>> Offray
>> 

Reply via email to