The ility's

I found this great list of the “ility’s” - the things that make writing industrial strength software hard:

  • Reliability
  • Integrity
  • Usability
  • Maintainability
  • Testability
  • Interoperability
  • Flexibility
  • Reuseability
  • Portability
  • Clarity
  • Modifiability
  • Understandability (isn’t that Clarity?)
  • Validity
  • Functionality
  • Generality
And some that don’t end with “ity”:
  • Correctness (but maybe that is reliability?)
  • Documentation
  • Economy
  • Efficiency
Source: “The Profession of IT: Software Quality”, Communications of the ACM, Vol 59, No 9, September 2016, Page 23


Neural spelling corrector

My spelling corrector, which uses a neural network as the underlying algorithm, miscorrects four of the 49,168 words in the dictionary. The thing about this neural net is it is constructed logically rather than from a massive learning set. As an acceptance test, I have it validate that every word in the dictionary corrects to itself. (The “training” of the neural net takes about 100 ms - that is, the time to load the dictionary and make the connections.)

(Try it here: http://ec2-54-221-105-181.compute-1.amazonaws.com/?word=kayler ; put in your own word instead of “kayler”. )
Below are the only errors it makes in my test set of 49,000 words. These words look identical to the neural network. Luckily this is uncommon!



Benchmarking is fun:
On a Raspberry Pi 3 using just one core, the time to validate the dictionary is 1h 1m 38s. With all four cores running, the time is 17m 26s (not quite a 4x speedup but close).
On an AWS X1.32xlarge instance using just one core, the time to validate is 7m 6s. A single core on the AWS machine beats the Raspberry Pi’s four cores.
With all 128 cores running, the time is 14s. An X1.32xlarge rents for (in late 2018) about $13 / hour.
Raspberry Pi3 single core: 1 hour and a minute. X1.32xlarge at AWS with 128 cores: 14s.