Tamil Text Processing with Open-Tamil

Introduction

“”ஓர் ஆயிரம் கழித்தல் ஐந்து பெருக்கல் (ஒன்பது கூட்டல் ஒன்று)” என்பதை எப்படி 950 என்று கணினி புரிந்து கொள்ளும் ? Open-Tamil வழியாகத்தான் – வாங்க இதை பார்க்கலாம்.

Open-Tamil is a free and open-source Tamil Text / Natural Language Processing library (NLP) written in Python, and developed since early 2010s. This blog post is cover our gaps in marketing (on our part, ofcourse) Open-Tamil regarding the capabilities and features presented by Open-Tamil python library. Open-Tamil Python package is distributed under MIT license.

Documentation

Open-Tamil project is currently in the release v0.96 – the Python package can be found here. Documentation from Sphinx for Open-Tamil package can be found on Tamilpesu.us site at this URL.

Installation

Open-Tamil can be installed by running the following command from your terminal with root privileges on Python3. You cannot use current/later versions of Open-Tamil with v2.x – please refer to older releases on pypi page which are still available to you.

$ pip install –upgrade open-tamil>=0.96

If you want to install locally, you can run this command instead,

$ pip install –upgrade open-tamil>=0.96 –user

Python Modules

Open-Tamil provides the following Python modules with various classess and functionalities. You can learn more about them from browsing our documentation.

In summary we can list them as follows,

  Module    Functionality
1

tamil

Tamil tokenization, word ordering, encoding converters, numerals, text summarizer

  Subpackages tamil.txt2ipa package Submodules
tamil.txt2ipa.ipaconvert module
tamil.txt2ipa.transliteration module
tamil.txt2ipa.unicode2ipa module
Module contents
tamil.txt2unicode package Submodules
tamil.txt2unicode.encode2unicode module
tamil.txt2unicode.encode2utf8 module
tamil.txt2unicode.orddic module
tamil.txt2unicode.unicode2encode module
Module contents
tamil.utils package Submodules
tamil.utils.TextSummaryExtractor module
tamil.utils.santhirules module
Module contents
Submodules
tamil.date module
tamil.iscii module
tamil.numeral module
tamil.regexp module
tamil.tscii module
tamil.tscii2utf8 module
tamil.tweetparser module
tamil.utf8 module
tamil.wordutils module
Module contents
2

ngram

corpus modeling classes

  ngram.Corpus module
ngram.Distance module
ngram.LetterModels module
ngram.WordModels module
3

solthiruthi

Tamil spelling checker algorithms

  solthiruthi package
Submodules
solthiruthi.Ezhimai module
solthiruthi.WordSpeller module
solthiruthi.data_parser module
solthiruthi.datastore module
solthiruthi.dictionary module
solthiruthi.dom module
solthiruthi.heuristics module
solthiruthi.morphology module
solthiruthi.resources module
solthiruthi.scoring module
solthiruthi.solthiruthi module
solthiruthi.suggestions module
solthiruthi.vinaisorkal module
Module contents
4

spell

Tamil spelling checker application

  spell package
5

tamilmorse

Morse code utilities for Tamil; இந்த தொகுப்பில் தமிழுக்கான மோர்சு குறிகளை உருவாக்கவும், குறியீடுகளை பிரித்துப்பார்கவும் முடியும்.

  tamilmorse package
Submodules
tamilmorse.morse_encode module
tamilmorse.morse_decode module
6

tamilsandhi

Tamil sandhi rules checker

  tamilsandhi package
தமிழில் சந்திப்பிழை திருத்தி உருவாக்கவும் பிழைக திருத்தவும் உதவியாகஇந்த நிரல் தொகுப்பு வழிவகுக்கும். ஏரக்குறைய 40-விதிகளை கொண்டது இந்த நிரல் தொகுப்பை உருவாக்கியவர் திருமதி. நித்யா. மேலும் விவரங்களுக்க https://github.com/nithyadurai87/tamil-sandhi-checker
7

transliterate

Transliteration tables for Jaffna, University of Madras, Bamini schemes; both forward/backward transliteration algorithms

  transliterate package Submodules
transliterate.UOM module
transliterate.algorithm module
transliterate.azhagi module
transliterate.combinational module
transliterate.jaffna module
Module contents
8

tamilstemmer

This module is new in version 0.96 and provides access to simple stemmer functions originally created by Damodharan Rajalingam.

  Tamil Stemmer source code
9

examples

Various examples and utilities in Open-Tamil package; nifty code tips and tricks

  Open-Tamil source code examples like numeral to audio generation, ngram generation, corpus analysis etc. see link here.

Calculator Example

One fun use of the API is to build interactive websites like tamilpesu.us but a more interesting use is to build a text based calculator taking inputs in form of Tamil numerals with Tamil words for arithmetic operations like add, subtract, multiply and divide.

“”ஓர் ஆயிரம் கழித்தல் ஐந்து பெருக்கல் (ஒன்பது கூட்டல் ஒன்று)” என்பதை எப்படி 950 என்று கணினி புரிந்து கொள்ளும் ?

Using Open-Tamil we can parse the numerals back to numbers and form a simple mathematical infix expression;

1000 – 5 * ( 9 + 1 )

then use Python eval() we can use Python parser and evaluator to build the expression tree and compute the post-order traversal and execute the expression to receive the result, which in our case is not surprisingly,

950.

Well, all this can be done in less than 30 lines of code using Open-Tamil; if you don’t believe me check-out the code here.

Credits

A large number of individuals have contributed their time and effort over the years in many capacities to the project; should you wish to acknowledge this project in your research, products you can choose to cite any of our published works of relevance to you; our publications are listed here.

As always if you wish to report bugs, or share your comments please write an email to me ezhillang AT gmail DOT com or file an issue at github.

 

ஆடுகளம் – 2020

Tamil projects for 2019-2020

Over the course of this year, since translating Ruby Kin, and preparing a summary of 3 years work on spell-checker for Tamil Internet Conference – 2019, I’ve been thinking of next level of interesting projects.

The following have come to mind, expressed in Twitter @ezhillang in various forms. Here they are in simply chronological order,

  1. Translating “Data Structures and Algorithms” book in Tamil
  2. Translating/Writing a “Debugging Techniques” book in Tamil: ‘கணினி செயல்முறை நிரகளில் வழுநீக்கம்‘ – பயிற்சி, நூல்
    • Debugging techniques are important learning milestone for any professional software/hardware developer which are usually learnt on the job and essentially skipped in academia (perhaps for practical purposes).
  3. (Research/Proof-of-concept) Viterbi algorithm based spelling correction algorithm for Tamil
  4. (Research/Proof-of-concept) Concordance based context ambiguity resolution for Tamil spelling correction.

Contingent on our levels and degrees of success we can share our work in forums like Tamil Internet Conference, ACL or ACM, etc.

நிவாடா மாகனத்தில் மலையேரும் சமயம் மொட்டை வெயிலில் எடுத்த தம்படம் 🙂

As always collaborators are welcome: email: ezhillang -AT- gmail -DOT- com

ஒலி உரை மாற்றி வெளியீடு!

உங்களது தமிழ் உரைகளை ஒலி வடிவாக்க கணியம் அறக்கட்டளைஒரு புதிய சேவைஉருவாக்கியுள்ளது. பயன்படுத்த சுட்டி http://tts.kaniyam.com

அழகின் சிறிப்பு. தமிழ் தோட்டத்தில் ஒரு ரோஜா.

இந்த செயலியின் வெளியீடு அறிக்கையை இங்கு காணலாம்:  வாழ்துக்கள் கணியம் அறக்கட்டளை, குழு நபர்கள்! ‘ஊரே கூடி தேர் இழுத்ததாக’ சுவையான http://tts.kaniyam.comஉரையொலி மாற்றியைவெளியீட்டு செய்தியில் குறிப்பிடதும் ஒரு திறமூல உறவுகளின் சிறப்பு!. அடுத்ததா எப்போதிருவிழா?  🎇🎠✨

செயல்படுத்துதல்

சரி இந்த சேவையை எப்படி செயல்படுத்தலாம் ? இதோ இதனை படிப்படியாக புட்டு வைக்க முயற்சி கீழே. இதில் உங்களது உரைவடிவ கோப்புக்களை [file] தளத்தில் ஏற்ற வேண்டும் – பின்பு தளம் உங்களது .

  1. கணக்கை உருவக்குங்கள்; இதில் பயனர் பெயர், கடவுச்சொல் குடுக்கவேண்டும்.
  2. இரண்டாவது, தளத்தில் இருந்து ஒரு மினஞ்சல் வரும் – அந்த சுட்டியை திறக்கவும்.
  3. தற்போது நீங்கள் உள்நூழயலாம்; [இதற்கு எற்கணவே படி 1-இல் குடுக்கப்பட்டுள்ள திரையில் செல்லலாம்]. உங்களது உரையை சாதா கோப்பாக இதில் இடவும். PDF போன்ற கோப்புகளை நிங்கள் இந்த செயலியில் இடும்முன் மாற்றவேண்டும்.
  4. ஏற்றுமதி செய்தபின் தளம் உங்களது உரையை ஒலியாக மாற்ற சில நேரம் ஆகும். இதனால் உங்களது வோலை முடிந்த பின் அதற்க்கான் மின் அஞ்சலை பெரும் வரை காத்திருக்கவும். தற்ச்சமையம் உடனுக்குடன் பெரும்வகை இதனை செயல் படுத்த இயலாது.
  5. மின் அஞ்சல் வந்தபின் அதனில் உள்ள சுட்டியில் உங்கள் உரை மின் ஒலிவடிவில்! முற்றிலும் இலவசம்!


ஒலிமாற்றியின் தரம்!

நீங்களே கேட்டு முடிவு செய்யுங்கள்! எனது மூல கோப்பு இங்கு – இதன் வெளியீடு ஒலி இங்கு கேட்கவும்.

தொழில்நூட்பங்கள்

ஒரு மூத்த கணினி நிரலாளரின் கூற்றின் படி ‘கணினித்துரையின் கோட்பாடுகள் கண்டறிந்து சில பத்தாண்டுகளே ஆனது. இதில் உள்ள கோட்பாடுகள் இயற்க்கை அறிவியலால் கட்டுப்பட்டதல்ல’ என்ற பொருளில் இந்த படைப்பை நான் பாற்க்கிரேன்.

உரை-ஒலி மாற்றியில் பல digitial signal processing சவால்கள் உள்ளன. இவற்றை படிப்படியாக கடந்த பெருமை, உழைப்பு, பாராட்டுக்கள் பேரா. திரு. தி. நாகராஜன் [SSN பொறியியல் கல்லூரி] -யை சேரும். இவரது தலைமையில் unit-selection-synthesis என்ற முறையில் Festival என்ற எடின்புரூ பல்கலைக்கழகத்தின் ஆராய்ச்சி தளத்தின்வாயில் இவரது தமிழ் மொழி ஆராய்ச்சிகள் இருந்திருக்கின்றன.

IT-SSN தமிழ் உரைஒலி மாற்றியைசிறப்பாக ஆறாச்சி செய்த பேராசிரியர் திரு.தி.நாகராஜன். link: http://www.ssn.edu.in/Speech_Lab/members/drtnagarajan.html) ssn.edu.in/Speech_Lab/mem…
Festival – இதன் வாயில் இன்று ஒரு தமிழ் திருவிழா

ஆனால் இந்த இவரது ஆராய்ச்சிகள், இந்திய அரசின் வரி பணத்தில் ஒரு பங்கில் இருந்து வந்தாலும், இது எளிதில் பொது வளியில் இந்த மென்பொருள் வெளிவரவில்லை; இதற்கு தகவல் தொழில் நூட்பம் சட்டத்தின் கீழ் [RTI] திரு. சீனிவாசன் சென்ற ஆண்டு முயற்சிகள் எடுத்தும் வழி நடத்தியும், தனது பணிகளினால் இந்த மென்பொருளை பொது வெளியில் பயன்படுத்தும் அளவில் கொண்டுவந்தார்.

கிட் இல் வெளியீடு: மே மாதம் 2018
https://github.com/tshrinivasan/tamil-tts-install

இது இரண்டு மட்டுமே நமக்கு இன்ரு கணியத்தில் இந்த சேவை கிடைக்க மூல காரணமாக இருக்கிரது. கணியம் ஆசிரியர் அவரது வெளியீட்டில் வலை சர்வர் மென்பொருள் கட்டமைப்பு அதனை உருவாக்கியவர்கள் பற்றியும் குறிப்பிட்டுள்ளார்.

கணியம் அறக்கட்டளை, IIT-SSN கூட்டனி, மேலும் அயராமல் உழைத்து பொது மக்கள் பயன்பாட்டிற்கு இந்த தொழில் நூட்பங்களை வழங்கிய அனைவருக்கும் இதயம்கனிந்த நன்றி! வாழ்க, வளமுடன்.

Apple apotheosis

Today, I had a chance to go to the Apple store. Trying the Apple stylus is a great tool for graphic artist.

iPhone XS [or XR?] with beautiful rendering of tamilpesu.us
Tangram game with App-based and interactive setup

I think Apple has elevated engineering to a high water-mark. Wow. Engineers can make magic when we all work together driving other professional designers, artists, marketers, manufacturers to synthesize beautiful experience. Technology, is magic.

Tamil in Morse-code

Can we compose a Tamil Morse-code ? Yes, we can.

315px-International_Morse_Code.svg

International Morse Code – Source: Wikipedia

  1. Start with a frequency count of Tamil letters from various sources
  2. Build a probability distribution from the frequency counts
  3. Build a Huffman code using the above distribution
  4. Each letter of Tamil alphabet gets a Morse code : 0 = ‘.’, 1 – ‘-‘.
    புள்ளி, கோடு.

Tamil Morse Code Table generated from Open-Tamil library. See here for full code and methodology. Full table follows.

Can you decode what this Morse code means in Tamil ? Hint: 2 words (4,5) letters long

...-. --.--.. .---..--.--- .-..-. ...-. ---.-. -----.--.- .--....- ..-..-

Please note table was updated to show letters in most-frequent to least-frequent alphabets and their code-words used. Updated after publishing on Aug 16th, 2018.

Source coding theory

Information theory provides us with tools to calculate the information content of symbols in a language, i.e. alphabets in our case. Average codeword length was 6.45652 bits, which is rounded to 7bits.
According to 230+ symbols of encoded in binary without attention to letter frequency we would be using ceil[ log2[230] ] ~ 8bits per symbol, so the usage of Morse code provides a related data compression of 12.5%!

Previously, I had written about Morse code for Tamil in this blog here, and relationship with Unigram, Bigram and Trigram models and word-structure in Tamil language.

  1. ம் -> --..
  2. த -> -...
  3. க -> ...-.
  4. ல் -> ..---
  5. த் -> ----.
  6. க் -> -.---
  7. ன் -> -.--.
  8. ர -> .....-
  9. ப -> ....--
  10. வ -> ..--.-
  11. தி -> ..-..-
  12. ச -> ..-.-.
  13. கு -> .----.
  14. ம -> .---.-
  15. ப் -> .--..-
  16. ட் -> .--.-.
  17. டு -> .-...-
  18. ர் -> .-..-.
  19. ய -> .-.-.-
  20. அ -> ---..-
  21. ட -> ---.--
  22. ரு -> ---.-.
  23. பு -> -..---
  24. கா -> -..--.
  25. து -> -..-.-
  26. ல -> -.-..-
  27. வி -> .......
  28. டி -> ....-..
  29. ண் -> ....-.-
  30. சி -> ...---.
  31. ன -> ..--...
  32. ரி -> ..-....
  33. ங் -> ..-...-
  34. ந் -> ..-.---
  35. ற் -> .-----.
  36. இ -> .--...-
  37. று -> .-..---
  38. ச் -> .-....-
  39. சு -> .-..--.
  40. பா -> .-.----
  41. கி -> .-.--..
  42. பி -> .-.--.-
  43. வா -> .-.-...
  44. மு -> -----..
  45. ள் -> ---....
  46. லை -> --.--..
  47. உ -> --.--.-
  48. டை -> --.-..-
  49. தா -> --.-.--
  50. ண -> -..-...
  51. கை -> -..-..-
  52. ஆ -> -.-...-
  53. மா -> -.-.---
  54. ய் -> -.-.-.-
  55. ள -> ......-.
  56. சா -> ...--..-
  57. ற -> ...--.--
  58. லி -> ..--..--
  59. வு -> .---...-
  60. கொ -> .---..-.
  61. ந -> .--.....
  62. நி -> .--....-
  63. ஞ் -> .--.----
  64. ரா -> .--.---.
  65. ணி -> .--.--..
  66. ளி -> .--.--.-
  67. யா -> .-......
  68. நா -> .-.-..--
  69. றி -> .-.-..-.
  70. கோ -> -------.
  71. செ -> ------..
  72. ழி -> ------.-
  73. னி -> -----.-.
  74. ழு -> --.-----
  75. மி -> --.----.
  76. யி -> --.-....
  77. பொ -> --.-.-..
  78. ரை -> --.-.-.-
  79. வெ -> -.-.....
  80. எ -> -.-.--..
  81. மை -> -.-.--.-
  82. றை -> -.-.-..-
  83. பூ -> ......--.
  84. ழ -> ...-----.
  85. னை -> ...----..
  86. லா -> ...--.-..
  87. சை -> ..--..-.-
  88. வை -> ..-.--...
  89. போ -> ..-.--..-
  90. கூ -> ..-.--.-.
  91. வே -> .--------
  92. டா -> .-------.
  93. தை -> .------..
  94. பெ -> .---....-
  95. ளை -> .---..---
  96. தே -> .-.---...
  97. ஒ -> .-.---.--
  98. ழ் -> -----.---
  99. லு -> ---...---
  100. நீ -> ---...-..
  101. சீ -> ---...-.-
  102. தீ -> --.---...
  103. மூ -> --.---..-
  104. தொ -> --.---.--
  105. ணை -> --.---.-.
  106. ஏ -> --.-...-.
  107. நெ -> -.-....-.
  108. ளு -> -.-.-....
  109. னா -> ......----
  110. சூ -> ......---.
  111. மே -> ...-------
  112. தோ -> ...------.
  113. தெ -> ...----.-.
  114. சொ -> ...--.....
  115. சே -> ...--....-
  116. தூ -> ...--...--
  117. யு -> ...--...-.
  118. பே -> ...--.-.--
  119. வீ -> ..--..-..-
  120. ஊ -> .------.--
  121. னு -> .---......
  122. யோ -> .---.....-
  123. சோ -> .---..--..
  124. கே -> .-.....---
  125. ழை -> .-.....--.
  126. ணு -> .-.---..--
  127. ஓ -> .-.---.-..
  128. கெ -> ----------
  129. கீ -> --------..
  130. றா -> --------.-
  131. பை -> -----.--..
  132. ணா -> -----.--.-
  133. ரோ -> ---...--.-
  134. மொ -> -.-....--.
  135. மெ -> -.-.-...--
  136. லோ -> ...----.---
  137. பீ -> ...----.--.
  138. ளா -> ...--.-.-.-
  139. ஈ -> ..--..-....
  140. ஞா -> ..--..-...-
  141. மீ -> ..-.--.----
  142. வ் -> ..-.--.--..
  143. மோ -> ..-.--.--.-
  144. நு -> .---..--.-.
  145. ஐ -> .-.....-..-
  146. ரே -> .-.....-.-.
  147. நோ -> .-.---..-.-
  148. நே -> .-.---.-.--
  149. நூ -> ---------..
  150. யெ -> --.-...----
  151. லே -> --.-...--..
  152. ரீ -> -.-....----
  153. நொ -> -.-....---.
  154. யை -> -.-.-...-..
  155. ழா -> ...--.-.-...
  156. ரூ -> ...--.-.-..-
  157. னோ -> .------.-.--
  158. ஞ -> .---..--.---
  159. யூ -> .---..--.--.
  160. வோ -> .-.....-....
  161. யே -> .-.....-.---
  162. லெ -> .-.---..-...
  163. ரெ -> .-.---.-.-.-
  164. ணீ -> ---...--....
  165. டோ -> ---...--..--
  166. டெ -> ---...--...-
  167. கௌ -> ---...--..-.
  168. ணெ -> --.-...---..
  169. சௌ -> --.-...---.-
  170. றெ -> ..-.--.---...
  171. லூ -> ..-.--.---..-
  172. றோ -> .------.-....
  173. னே -> ..-.--.---.--
  174. னீ -> .------.-..-.
  175. நை -> .------.-..--
  176. டூ -> .------.-.-..
  177. னெ -> .-.....-.--..
  178. டே -> .-.....-.--.-
  179. ஞெ -> .-.---..-..--
  180. ளெ -> .-.---.-.-...
  181. டீ -> ---------.---
  182. யொ -> ---------.--.
  183. பௌ -> ---------.-..
  184. ஃ -> --.-...--.---
  185. ஔ -> --.-...--.-..
  186. ஞை -> -.-.-...-.---
  187. யீ -> -.-.-...-.--.
  188. றொ -> -.-.-...-.-.-
  189. வொ -> .------.-...--
  190. வூ -> ..-.--.---.-..
  191. னூ -> .------.-.-.--
  192. ளோ -> .-.....-...---
  193. ணோ -> .------.-.-.-.
  194. றே -> .-.....-...--.
  195. மௌ -> .-.....-...-..
  196. தௌ -> .-.---..-..-..
  197. ளே -> .-.---.-.-..-.
  198. லொ -> .-.---.-.-..--
  199. றூ -> ---------.-.--
  200. ரொ -> --.-...--.--..
  201. டொ -> --.-...--.-.-.
  202. ங -> -.-.-...-.-...
  203. ணே -> ..-.--.---.-.--
  204. ளீ -> .------.-...-..
  205. ழூ -> .-.....-...-.-.
  206. ளொ -> .-.---..-..-.-.
  207. ரௌ -> .-.---..-..-.--
  208. யௌ -> ---------.-.-..
  209. னொ -> ---------.-.-.-
  210. ழோ -> --.-...--.-.--.
  211. ளூ -> --.-...--.-.---
  212. ஞி -> -.-.-...-.-..--
  213. ணொ -> .-.....-...-.---
  214. ணூ -> .------.-...-.--
  215. ழீ -> .-.....-...-.--.
  216. ஸ் -> --.-...--.--.--.
  217. வௌ -> -.-.-...-.-..-..
  218. ஞீ -> --.-...--.--.---
  219. ஷ் -> ..-.--.---.-.-...
  220. ஷி -> ..-.--.---.-.-..-
  221. ழெ -> ..-.--.---.-.-.-.
  222. றீ -> .------.-...-.-.-
  223. நௌ -> ..-.--.---.-.-.--
  224. ஞே -> .------.-...-.-..
  225. லௌ -> --.-...--.--.-..-
  226. ஞொ -> -.-.-...-.-..-.--
  227. ஙு -> --.-...--.--.-...
  228. ஷ -> --.-...--.--.-.---
  229. ழொ -> --.-...--.--.-.--.
  230. ழே -> -.-.-...-.-..-.-.
  231. டௌ -> --.-...--.--.-.-.-
  232. ஞூ -> --.-...--.--.-.-..

Caveats and Closing Comments

Of course 15 of 247 letters are perhaps not received any codeword in this codebook. Further with inclusion of Grantha letters, 323 letters exist in Tamil some of which we don’t have code words.

Further, a large text corpus like Project Madurai’s [PM] unigram frequency distribution maybe useful to develop a widely representative Morse code table. Once you have this PM unigram data, you know how to get this Tamil Morse codebook regenerated!

open-tamil on web

Today, you are welcome to play with open-tamil API via web at http://tamilpesu.us

DXrBTyUX0AEm7ET.jpg-large

Generating multiplication tables via Open-Tamil APIs’: http://tamilpesu.us/vaypaadu/

This is collective work of our team underlying the website (written in Django+Python) highlighting various aspects of open-tamil like transliteration, numeral generation, encoding converters, spell checker among other things. At this time I hope to keep the website running through most of this year, and add features as git-repo https://github.com/Ezhil-Language-Foundation/open-tamil gets updated.

Thanks to Mr. Syed Abuthahir, many months ago, in winter of 2017, he has developed an interface for open-tamil on the web and shared with us under GNU Affero GPL terms. Later, we is added as part of main open-tamil as well.

Open-Tamil moves forward; come join us!

-Muthu

Famous Indian Computer Science / Math scientists [WIP]

Who are the famous Indian men and women in computers/math ? Help me make a list!
My list ofcourse (is incomplete I’m sure) and currently includes Ramanujan, (Honorary Indian) Alan Turing (born in India), Aryabhatta, Narendra Karmarkar, Agrawal–Kayal–Saxena of AKS primality test, email inventor Shiva Ayyadurai, Raj Reddy (CMU), late Rajeev Motwani, Madhu Sudan, Arokiasamy Paulraj, P Vaidyanathan, Venkatesan Guruswami, Ravi Sethi, Jitendra Malik, …
This is work-in-progress. Please leave comments, critiques below.