3,791 reputation
21647
bio website connjur.uchc.edu
location Connecticut, USA
age 27
visits member for 2 years, 8 months
seen Jul 9 at 14:35

I work in a scientific computing group on the CONNJUR project, providing open-source software for NMR (Nuclear Magnetic Resonance) spectroscopy.

Check out some of my work on github:

  • NMRPyStar: an API for accessing archived NMR data files in the NMR-Star format used by the BMRB.

  • Miscue-js: validation of JSON files to deal with obnoxious and tricky interoperability issues such as number overflows and duplicate keys

Some technologies that I've used and like:

  • Python
  • git
  • Javascript
  • Haskell
  • Java
  • MySQL

Apr
8
revised Ensure that each class has only one responsibility, why?
deleted 20 characters in body
Apr
7
comment Ensure that each class has only one responsibility, why?
I think that you should add that to your answer.
Apr
7
revised Ensure that each class has only one responsibility, why?
deleted 81 characters in body
Apr
7
comment Ensure that each class has only one responsibility, why?
I don't think the points made here are justified. In particular, how do you avoid zero-sum games where simplifying a class causes other classes to become more complicated, with no net effect on the code base as a whole? I believe @Doval's answer does address this issue.
Apr
7
comment Why is Today() an example of an impure function?
Great answer as always, but it doesn't explicitly cover immutable free variables. They're not an input to the function -- not passed as a parameter -- but the function depends on them even if it's still referentially transparent.
Apr
6
comment Are monads a viable (maybe preferable) alternative to inheritance hierarchies?
@RobY sorry, but I feel that your comments contain too many unsound premises for me to helpfully respond. I would suggest 1) reading up on these topics, and 2) doing tons of examples. Make sure to cover algebraic data types, functors, applicatives, and of course monads. Also, a warning: be careful about "blurring" the definition of monad: if you're going to change the definition, is it really worth calling it a monad anymore? If some pattern or data type is useful to you, use it, but if it's not a monad, calling it so will likely confuse other people.
Apr
6
revised Are monads a viable (maybe preferable) alternative to inheritance hierarchies?
added 42 characters in body
Apr
6
comment Are monads a viable (maybe preferable) alternative to inheritance hierarchies?
@RobY You're welcome! By the way, if you haven't heard of it before, I recommend LYAH as it's a great source for learning monads (and Haskell!) because it has tons of examples (and I feel that doing tons of examples is the best way to tackle monads).
Apr
6
comment How to document a file format specification
I may be misunderstanding the question but it seems like you are looking for something like EBNF.
Apr
5
comment Are monads a viable (maybe preferable) alternative to inheritance hierarchies?
BTW, as you noted (but, sadly, removed, :( ) there are similarities between Monad,return,join and Monoid,id,append. +1 for noticing that!
Apr
5
revised Are monads a viable (maybe preferable) alternative to inheritance hierarchies?
aside on monoids shouldn't be in question. i'd suggest using comments instead
Apr
5
answered Are monads a viable (maybe preferable) alternative to inheritance hierarchies?
Apr
1
comment Why have private static methods?
Yes, there's a reason. Your public/default static methods can still call your private statics. Whether static methods should be used at all, and when it's appropriate to use private methods of any kind, are separate questions so be careful not to mix them with this question.
Mar
6
comment Is pattern-matching against types idiomatic or poor design?
Just to clarify, Some and None aren't types. They're both constructors whose types are forall a. a -> option a and forall a. option a (sorry, not sure what the syntax for type annotations is in F#).
Mar
6
comment Python methods vs builtin functions
or .: length . filter g . map f
Mar
6
comment Python methods vs builtin functions
What's so great about "chaining"? Why is my_list.map(f).filter(g).length() any better or more readable than len(filter(g, map(f, my_list))? IMHO the second form is more readable and I prefer it -- but that's just my opinion. I won't pretend it's objective. Another problem with this question is that you're confusing syntax -- a.b(c) versus b(a, c) -- with how methods/functions are organized (inside or outside of classes/objects). These are two distinct concepts.
Mar
3
comment Is pattern-matching against types idiomatic or poor design?
This -- But from an OOP perspective, that looks an awful lot like control-flow based on a runtime type check, which would typically be frowned on. -- sounds too dogmatic. Sometimes, you want to separate your ops from your hierarchy: maybe 1) you can't add an op to a hierarchy b/c you don't own the hierarchy; 2) the classes you want to have the op don't match your hierarchy; 3) you could add the op to your hierarchy, but don't want to b/c you don't want to clutter your hierarchy's API with a bunch of crap that most clients don't use.
Mar
1
comment Is there a web-specific reason for the design choices behind the JavaScript language?
@pllee thank you! Yes, that's what I was going for.
Feb
28
awarded  Nice Answer
Feb
25
revised Is there a web-specific reason for the design choices behind the JavaScript language?
deleted 17 characters in body