I’ve finished my 3.5 year stint writing Scala, and I haven’t stopped missing writing Clojure. The knowledge of Clojure continues to heighten and inform my programmer sensibilities. One thing that I appreciated about Scala is that it was as good of a medium as you might practically find to allow writing Clojure without writing Clojure. I liked to think of Scala as the canvas on which I painted my Clojure ideas. Because Scala makes itself amenable to many styles of programming at once (at least, FP and OOP), it was possible to write code by imagining what the Clojure code would look like, and then writing that in Scala syntax. Interestingly, the more I did this, and the more faithfully I did so, the more people implicitly (no pun intended!) acknowledged the code as “good Scala code”. Because, you know, most Scala programmers agree that good Scala code puts “val”s at the top of a function body, uses immutable collections exclusively, prefers functions over (object) methods, and makes functions small, stateless, and composable. More on that later. Here, I want to simply release some of the code that I wrote in Scala to fill in a few perceived gaps in Scala’s Seq abstraction, where the perception is based on what I was accustomed to using in Clojure.
The podcast story “Meet the last native speakers of Hawaiian” is a fascinating story about how to revitalize a language that almost (but not quite) went out of existence. The story of Hawaii and the Hawaiian language probably shares some elements in common with the story of many Native American languages and nations/cultures/tribes. The story of Hawaii is interesting because, despite the efforts to squelch the language from existence, there still remain pockets where the language is still spoken. Similar to the story of Myaamia, a concerted effort by community-based linguists and collective support from the community was crucial. The efforts are successful in that many kids grow up knowing how to speak Hawaiian because they go to Hawaiian-language primary schools. With the basic step solved, the next-step problems take its place.
The podcast story “How the Miami Tribe got its language back” is really fascinating. The Myammia (“Miami”) tribe and language lost its last speaker decades ago. The story of how and why the language went out of usage is not pleasant, but worth knowing. Regardless, thanks to the work of early linguists during the time when the language was spoken, there were historical records of the language (vocab, pronunciation, and perhaps grammar). Thanks to the interest of a Myammia descendent, a linguist, and a seed amount of resources, a lot of work coalesced in reviving the language into something that is spoken by a few hundred people on some basis. For a language that had completely died decades ago, that’s remarkable. Hearing the full story is worth it, especially for certain tidbits that do not appear in the written article. For example, students came from distant, disparate regions to learn the Myammia language at Miami University (OH), but there was not as much speaking among the students outside of the class as they hoped. It remained mainly an academic exercise of second-language learning. The big spark happened when they introduced a new class to the curriculum that also taught the history and traditions of the Myammia. There was a huge upsurge in usage and attachment to the language as a sense of identity took root among the learners.
The new post from the Google Design blog entitled “The New Wave of Indian Type” is very interesting. The differences already noticeable in the examples of Tamil fonts in the blog post is already striking. And the blog post, of course, is showcasing fonts with open-source licenses and encouraging people to use them as starting points to create their own. I like these ideas very much.
If you have seen the talk that Tim and I presented at Clojure/West in October on Learning Clojure through Logo, it should come as no surprise that topics of education, technology, and language are of interest. A couple of recent articles were published that caught my attention:
The Tamil Internet Conference in 2018 is taking place on July 4-6 in Coimbatore, Tamil Nadu, India. Anyone interested in submitting papers should do so before March 30 (see the above link for further details).
In my previous job, I had a basic grasp of writing a SQL query, but I was never quite comfortable with “advanced” queries. (By “advanced”, it’s more like intermediate at best — it’s the nuances of joins, group-bys, having vs. where.) I was told that whatever SQL I didn’t know would be “easy” to pick up and would happen naturally, although in practice that never quite happened. It wasn’t until I started to come up with a system for solving interview-style programming problems that I started to similarly come up with a system for writing any SQL query. The following is the result, which is less of a “tutorial” for “beginner SQL” and more of a systematic process for constructing a SQL query:
The last 18 months have been eventful even if my updates have been sparse. Here’s a quick rundown of some of the things that I’ve been up to:
Happy New Year, and hoping that 2018 is a good year!
The Tamil Internet Conference for 2017 in Toronto, Ontario, Canada just concluded. I presented a more in-depth explanation of my previous post on prefix trees along with specific examples of how I have used them.
Here is the full paper that I submitted for the conference proceedings, entitled “Prefix Trees (Tries) for Tamil Language Processing”. Here is the slide deck for the presentation I gave in the conference.
The following is the full text of the paper from the link above:
I recently was tasked with performing an ETL task that should be done as efficiently and quickly as possible. The work led me to learn more about parallel and distributed processing in Clojure. In addition to having a greater appreciation for what Clojure enables (once again), I also pushed the boundaries of what I thought is possible using the available tools. I ultimately ended up writing a Spark job whose executors are each running N threads (currently, N=3). But the path to that solution taught as much by what didn’t work as much as what did work.