Sooyeon and I have been very busy for the past 7 months with our brand new baby daughter Haereen. When I get a few spare seconds I still work on my personal projects but it's been pretty slow going as of late. I'm definitely not complaining since Haereen is totally worth it. Anyway, here is a summary of some of the things I've worked on in my free time.
dongsa.net 2.0 preview
dongsa.net is a Korean verb conjugation algorithm that explains the contractions and exceptional rules for many tenses and levels of politeness. The current version is written in Python but there was a whole rewrite of the engine into JavaScript over two years ago to make it easier to port to Android and iOS. I've had the rewrite sitting in a branch for around a year now but it's only been a month or so since I pushed up preview.dongsa.net.
- English definitions and search
- http://preview.dongsa.net/?search=fly
- http://preview.dongsa.net/?search=하다
- This was made possible by Kyubyong Park graciously allowing me to use his database of English definitions of Korean verbs.
- Stemmer - the new stemmer reverses the conjugation process. You can see how it works here. Basically, there is list of flattened out Korean verbs (so "춥다" is stored as "ㅊㅜㅂㄷㅏ". It goes through the flattened version of the conjugated form (say "추웠어요" -> "ㅊㅜㅇㅜㅓㅆㅇㅓㅇㅛ") that is passed in and strips one bit off at a time and looks for all verbs that match it. It requires that the verb is in the database and doesn't yet work for some forms of irregulars (ㄹ dropping verbs) but it's a start.
- I've had these changes sitting in a branch for almost a year now. There are only a few items left on the todo list before I can switch dongsa.net over to this new version. The biggest todo item is to make it look better. I am clearly not a designer. If that's your thing and you want to help out I would greatly appreciate it.
qc a QuickCheck implementation in Python
- Added support (in the python-3 branch) for checking annotations (a new Python 3 feature):
>>> def simple_adder(a : int, b : int) -> int:
... return a + b
...
>>> from qc import check_annotations
>>> check_annotations(simple_adder)
>>>
>>> def lying_adder(a : int, b : int) -> int:
... return 'result: %d' % (a + b,)
...
>>> check_annotations(lying_adder)
Traceback (most recent call last):
File "", line 1, in
File "qc/__init__.py", line 137, in check_annotations
f.__name__, output, response_type, test_args))
AssertionError: Was expecting lying_adder to return <class 'int'> but got <class 'str'> with these arguments: {'a': 0, 'b': 0}
>>>
dbmigrate
- Added support for Postgres.