Just figured I’d mention that I’m working on this:
http://www.subspacefield.org/security/hdb/
I think that I’ll run into needing some features from the File or
FileUtil classes (such as mapping from filename to inode numbers) that
likely won’t be present, or won’t be implemented on certain file
systems, OSes, and so on, so I’ll end up being a contributor.
This is my first ruby project, however, and I’m still learning.
By the way, if you know anyone (e.g. a student) who could benefit from
a case study in applying OOP/OOD to a real project, I’m writing it up
here:
http://www.subspacefield.org/~travis/hdb_history.html
My background is python, and here were my reactions to ruby:
-
Assignment is weird. Both names point to the same object,
unless it’s a “small” type (fits in a register).a = 5
b = a
b = 3
puts a # prints 5a = “hello”
b = a
b[‘hell’] = ‘t’
puts a # prints ‘to’That really confused me for a bit. Fix is easy - always use dup in
your initializers. It reminds me of the pass-by-value
vs. pass-by-reference semantics. -
I originally wrote some fancy set operations (like Set class but
not using a hash) using array operators like -=. Problem is that
these operates remove the same object from an array, but not an
equivalent (eql?) object. So when I compute metadata entries for
a file based on the file, and then based on saved metadata, the
same file with the same metadata is not the same object, so the -=
operator won’t actually remove it from the array.I’m considering the work it would require to implement -= using eql?
but it seems complicated, so I’m thinking of switching to using Set.
Downside of this is memory overhead for hashing and the random access
I won’t use much, also the fact that I build up these sets of
metadata
incrementally and so I’d be rehashing all the time. Building an
array
and then freezing it into a set seems possible, but cumbersome. -
What’s the syntax for class method constructors? I.E. I want four
different
ways to create metadata entries, some of which have overlapping
signatures,
so I can’t use a single initialzer method. (Yes, I know initialize is
not
a constructor).Currently I do this by having an empty initializer and doing
something like:
a = Whatever.new().create_from_string(string_args)
In general I like ruby - it’s a very terse language but not overly
cryptic.
The documentation could be improved, but that’s another list.
Also, whatever MLM you’re using (FML?) doesn’t recognize valid
RFC [2]822 addresses.
[email protected] IS a valid address, contrary to
what it believes. This seems to be the only MLM I’ve encountered that
doesn’t do correct parsing/identification of email addresses (web apps
are a different story… I wish people would RTFM…)