[Cuis] Wrapper for file access in different Smalltalk dialects

Masashi UMEZAWA ume at blueplane.jp
Thu Sep 3 21:27:02 CDT 2015


Hi Juan,

I've updated Cuis-Smalltalk-FileMan repository.
https://github.com/mumez/Cuis-Smalltalk-FileMan

I've added FmFileEntry>>tryReadStream, tryWriteStream,
readStreamIfError:, writeStreamIfError: and unit tests for them.

All tests were green on Windows. Please check.

Best regards,

2015-08-31 22:20 GMT+09:00 Juan Vuletich <juan at jvuletich.org>:
> Hi Masashi,
>
> Looks great to me. Please let us know when you update
> https://github.com/mumez/FileMan (or
> https://github.com/mumez/Cuis-Smalltalk-FileMan ), so we follow. Or post
> code to the mail list. As you prefer.
>
> Thanks!
> Juan Vuletich
>
>
> On 8/27/2015 12:24 PM, Masashi UMEZAWA wrote:
>>
>> Hi Juan,
>>
>> How about adding #tryWriteStream and #tryWriteStreamIfError: for
>> consistency.
>> Currently FmFileEntry has #writeStreamConfirming, but it is a bit
>> ad-hoc. It can be renamed to #tryWriteStream.
>>
>> So we can write:
>>
>> [ writeStream := 'foo.txt' asFileEntry tryWriteStream ] on:
>> FmFileIOAccessor fileExistsException do: [:ex | ].
>>
>> writeStream := 'foo.txt' asFileEntry tryWriteStreamIfError: [:ex | ].
>>
>> Best regards,
>>
>> 2015-08-24 22:42 GMT+09:00 Juan Vuletich<juan at jvuletich.org>:
>>>
>>> Hi Masashi,
>>>
>>> Ok. #tryReadStream is reasonable. Or maybe #readStreamOrFail.
>>>
>>> Any other suggestion? Preferences?
>>>
>>> Thanks,
>>> Juan Vuletich
>>>
>>>
>>> On 8/22/2015 10:15 AM, Masashi UMEZAWA wrote:
>>>>
>>>> Hi Juan,
>>>>
>>>> Yes, I'm concerning about backward-compatibility.
>>>> FmFileEntry>>#readStream has been used long. So I would prefer just
>>>> adding new APIs.
>>>>
>>>> Best regards,
>>>>
>>>>> I guess I would prefer #readStream for the basic, raising exceptions
>>>>> api,
>>>>> and maybe #readStreamNoFail or #readStreamOrEmpty or such for the
>>>>> "exception
>>>>> eating api" . In any case it is your call, I understand there is back
>>>>> compatibility to care about, and I'll be happy with your choice.
>>>>>
>>>>> Cheers,
>>>>> Juan Vuletich
>>>>>
>>>>>
>>>>>> 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