[Cuis] Wrapper for file access in different Smalltalk dialects

Masashi UMEZAWA ume at blueplane.jp
Wed Aug 19 20:35:28 CDT 2015


Hi all,

Sorry for the late reply. I've missed the mail...

As I recall, I have deliberately selected not using Exceptions mainly
for portability.

Actually there are various non-existent-file exceptions -
FileDoesNotExist (Squeak), FileDoesNotExistException (Pharo),
OSErrorHolder nonexistentSignal (VW).

Originally old FileMan did not have exception wrappers, but it has
now. So I think it is a good time to introduce exception-aware APIs.

How about adding tryReadStream series?

[ readStream := 'foo.txt' asFileEntry tryReadStream ] on:
FmFileIOAccessor fileDoesNotExistException do: [:ex | ].

readStream := 'foo.txt' asFileEntry tryReadStreamIfError: [:ex | ].

Best regards,

2015-07-27 23:58 GMT+09:00 Juan Vuletich <juan at jvuletich.org>:
> Hi Masashi,
>
> Recently we found that in FileMan, if we do
>
> 'inexistentFile' asFileEntry readStream
>
> we get an empty readStream.
>
> I think it is better to throw the #fileDoesNotExistException , as
> FileDirectory did, and let the user handle the exception appropriately. But
> I would not want to break compatibility with FileMan, as the main purpose of
> FileMan is to give compatibility amongst dialects.
>
> Are there good reasons to avoid the exception? Should we add another method,
> besides #readStream when we want a readStream strictly on existing file
> contents?
>
> Thanks,
> Juan Vuletich
>
>
>
> On 6/14/2015 8:38 AM, Masashi UMEZAWA wrote:
>>
>> Hello Juan,
>>
>> Thank you for the patches and more tests! I'll adapt those updates for
>> other FileMan ports.
>>
>> Best regards,
>>
>> 2015-06-07 12:42 GMT+09:00 Juan Vuletich<juan at jvuletich.org>:
>>>
>>> Hi Masashi,
>>>
>>> I was trying FileMan tests today and I saw they create some folders in my
>>> drive. The names looked a bit strange, so I took a closer look and found
>>> a
>>> couple of bugs. At least on Windows, #testRecursiveDelete instead of
>>> creating
>>>        subDir/aaa/bbb/ccc/ddd/eee/fff/ggg/test1
>>> it created
>>>         subDir/bbb/ccc/eee/ggg/test!
>>>
>>> So I wrote a few more tests on the issues I saw, and teaked the code to
>>> make
>>> them pass. The result is attached, and I think is useful for all ports of
>>> FileMan.
>>>
>>> Thanks,
>>> Juan Vuletich
>>>
>>> On 5/26/2015 11:34 PM, Masashi UMEZAWA wrote:
>>>>
>>>> Hi all,
>>>>
>>>> I think it is nice if FileMan is on the core package repository.
>>>>
>>>> FileMan for Cuis (and Squeak) has minimum dependencies to the existing
>>>> FileDirectory and DirectoryEntry. FileMan selectively uses a few
>>>> methods of them.
>>>>
>>>> So we can gradually adopt FileMan interfaces and trim the
>>>> FileDirectory and DirectoryEntry's non-intuitive methods.
>>>>
>>>> Another way of cleaning-up the file-related classes is to port
>>>> FileSystems to Cuis.
>>>> But since Cuis is a lightweight Smalltalk dialect, FileSystems might
>>>> be an overkill.
>>>>
>>>> Best regards,
>>>>
>>>> 2015-05-19 9:42 GMT+09:00 Juan Vuletich<juan at jvuletich.org>:
>>>>>
>>>>> Hi Folks,
>>>>>
>>>>> I apologize for talking before taking even a quick look, but anyway,
>>>>> We'd
>>>>> take a good look at this. And seriously consider replacing files stuff
>>>>> in
>>>>> Cuis base. Or at least adopting it as a core package in our repo.
>>>>>
>>>>> Thoughts?
>>>>>
>>>>> Masashi-san: opinions?
>>>>>
>>>>> Thanks,
>>>>> Juan Vuletich
>>>>>
>>>>>
>>>>> On 5/17/2015 12:07 PM, H. Hirzel wrote:
>>>>>>
>>>>>> Below are the comments from the FileMan package.
>>>>>>
>>>>>> Question: How do you compare the FileMan package to the FileSystem
>>>>>> package in Pharo?
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> https://github.com/mumez/Cuis-Smalltalk-FileMan/blob/master/FileMan-Core.pck.st#L45
>>>>>> I represent a single file entry (including directory).
>>>>>> You can write data by #fileContents: , and read the data by
>>>>>> #fileContents.
>>>>>> ---
>>>>>> mu 11/6/2006 20:21!
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> https://github.com/mumez/Cuis-Smalltalk-FileMan/blob/master/FileMan-Core.pck.st#L53
>>>>>> I represent a single file directory.
>>>>>> I implement various directory specific behaviors.
>>>>>> You can write data by #at:put: , and read the data by #at:.
>>>>>> ---
>>>>>> mu 11/6/2006 20:21
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> https://github.com/mumez/Cuis-Smalltalk-FileMan/blob/master/FileMan-Core.pck.st#L63
>>>>>> !FmFileIOAccessor commentStamp: '<historical>' prior: 0!
>>>>>> I am an accessor to the low level file IO.
>>>>>> You can extend/rewrite me if you port FileMan to other Smalltalk
>>>>>> dialects.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> https://github.com/mumez/Cuis-Smalltalk-FileMan/blob/master/FileMan-Example.pck.st#L44
>>>>>> !FmBackupDirectoryEntry commentStamp: 'mu 5/4/2007 23:26' prior: 0!
>>>>>> This is a simple example for adding special behaviors to
>>>>>> FmDirectoryEntry.
>>>>>> I backup file contents automatically, while users are not conscious
>>>>>> about
>>>>>> that.
>>>>>> Usage:
>>>>>> dir := './withBackup' asDirectoryEntry: FmBackupDirectoryEntry.
>>>>>> dir at: 'text' put: 'abc'.
>>>>>> dir at: 'text' put: 'def'.
>>>>>> (dir at: 'text') inspect. "def"
>>>>>> (dir backupAt: 'text') inspect. "abc"
>>>>>> ((dir / 'sub') at: 'text2' put: '123').
>>>>>> ((dir / 'sub') at: 'text2' put: '456').
>>>>>> ((dir / 'sub') at: 'text2') inspect. "456"
>>>>>> ((dir / 'sub') backupAt: 'text2') inspect. "123"
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> https://github.com/mumez/Cuis-Smalltalk-FileMan/blob/master/FileMan-Example.pck.st#L63
>>>>>> This is a simple example for adding special behaviors to
>>>>>> FmDirectoryEntry.
>>>>>> I put and get file contents as gzipped, while users are not conscious
>>>>>> about that.
>>>>>> Usage:
>>>>>> | dir |
>>>>>> dir := './gzipped2' asDirectoryEntry: FmGZipDirectoryEntry.
>>>>>> dir binaryAt: 'bin' put: #(1 2 3 12 34 56) asByteArray.
>>>>>> (dir binaryAt: 'bin') inspect.
>>>>>> dir at: 'text' put: 'This will be gzipped'.
>>>>>> (dir at: 'text') inspect.
>>>>>> I would be useful for storing/loading big contents in a simple
>>>>>> dictionary-like manner.
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 5/17/15, H. Hirzel<hannes.hirzel at gmail.com>    wrote:
>>>>>>>
>>>>>>> Hello Masashi-san
>>>>>>>
>>>>>>> I'd like to come back to your FileMan package
>>>>>>>
>>>>>>> https://github.com/mumez/Cuis-Smalltalk-FileMan
>>>>>>>
>>>>>>> and ask a question.
>>>>>>>
>>>>>>> Is this package a port from somewhere or did you write it from
>>>>>>> scratch?
>>>>>>>
>>>>>>> Some background information is appreciated.
>>>>>>>
>>>>>>> There is no description
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> https://github.com/mumez/Cuis-Smalltalk-FileMan/blob/master/FileMan-Example.pck.st#L2
>>>>>>>
>>>>>>> Thank you in advance
>>>>>>>
>>>>>>> Hannes Hirzel
>>>>>>>
>>>>>>>
>>>>>>> On 5/2/14, Masashi UMEZAWA<ume at blueplane.jp>    wrote:
>>>>>>>>
>>>>>>>> Hi all,
>>>>>>>>
>>>>>>>> Thank you for the kind words. I've just started Cuis on March, and I
>>>>>>>> was impressed with its cleanness, simplicity, etc.
>>>>>>>> So I did a introductory presentation at Tokyo Smalltalkers meeting.
>>>>>>>> It
>>>>>>>> was successful.
>>>>>>>> Now I'm planning to port Folktale (telnet-base object shell), and
>>>>>>>> SIXX
>>>>>>>> to Cuis. My pace maybe slow, but please stay tuned. ;)
>>>>>>>>
>>>>>>>> Best regards,
>>>>>>>>
>>>>>>>> 2014-05-02 1:05 GMT+09:00 Germán Arduino<garduino at gmail.com>:
>>>>>>>>>
>>>>>>>>> Wow, I was completely unaware of Masashi working in Cuis! Welcome
>>>>>>>>> aboard!!
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> 2014-05-01 12:19 GMT-03:00 H. Hirzel<hannes.hirzel at gmail.com>:
>>>>>>>>>
>>>>>>>>>> Thank you for the link to  Masashi Umezawa's presentation.
>>>>>>>>>>
>>>>>>>>>> It is from 2014 and talks about
>>>>>>>>>>
>>>>>>>>>> - the number of classes compared to Squeak and Pharo
>>>>>>>>>> - the size of Morphic -- Morph allSelectors size "=>    502"
>>>>>>>>>> - something I do not fully get about instance variables
>>>>>>>>>>         'bounds owner submorphs fullBounds color extension'
>>>>>>>>>>         versus
>>>>>>>>>>        'owner submorphs location layoutNeeded layoutSpec
>>>>>>>>>> properties'
>>>>>>>>>> - layoutSpec
>>>>>>>>>> - PackageInfo
>>>>>>>>>> - version control with git
>>>>>>>>>> - Feature require: '<PackageName>'.
>>>>>>>>>> - your Unicode package
>>>>>>>>>> https://github.com/KenDickey/Cuis-Smalltalk-Unicode
>>>>>>>>>> -
>>>>>>>>>> https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-StyledTextEditor
>>>>>>>>>> - How to query for other Cuis-Smalltalk repositories
>>>>>>>>>>                 https://github.com/search?q=cuis-smalltalk
>>>>>>>>>>
>>>>>>>>>> All things which we will include Cuis documentation effort.
>>>>>>>>>>
>>>>>>>>>> --Hannes
>>>>>>>>>>
>>>>>>>>>> On 5/1/14, Ken Dickey<Ken.Dickey at whidbey.com>    wrote:
>>>>>>>>>>>
>>>>>>>>>>> On Thu, 1 May 2014 07:28:54 +0000
>>>>>>>>>>> "H. Hirzel"<hannes.hirzel at gmail.com>    wrote:
>>>>>>>>>>>
>>>>>>>>>>>> A noteworthy effort
>>>>>>>>>>>>
>>>>>>>>>>>>          https://github.com/mumez/Cuis-Smalltalk-FileMan
>>>>>>>>>>>
>>>>>>>>>>> Yes.  Masashi Umezawa is the man in Japan!
>>>>>>>>>>>
>>>>>>>>>>> He should introduce himself.
>>>>>>>>>>>
>>>>>>>>>>> He gave a talk about Cuis at the 63rd Smalltalkers' meeting in
>>>>>>>>>>> Tokyo:
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> http://www.smalltalk-users.jp/Home/gao-zhi/dai63kaismalltalkbenkyoukai/shiryou
>>>>>>>>>>>
>>>>>>>>>>> Masashi has ported several packages to CUis.
>>>>>>>>>>>
>>>>>>>>>>> Because of Unicode interest, I was made aware that recent font
>>>>>>>>>>> tweaks
>>>>>>>>>>> have
>>>>>>>>>>> broken my Unicode package in the latest Cuis versions.
>>>>>>>>>>>
>>>>>>>>>>> Masashi-san, would you care to tell us about yourself and what
>>>>>>>>>>> people
>>>>>>>>>>> there
>>>>>>>>>>> think about Cuis?
>>>>>>>>>>>
>>>>>>>>>>> -KenD
>>>>>>
>>>>>> _______________________________________________
>>>>>> Cuis mailing list
>>>>>> Cuis at jvuletich.org
>>>>>> http://jvuletich.org/mailman/listinfo/cuis_jvuletich.org
>>>>>
>>>>>
>>>>
>>
>>
>

-- 
[:masashi | ^umezawa]




More information about the Cuis mailing list