December 30, 2011

Year's results...

I think, that today is appropriate time to look back onto what happened in 2011th, and to think, what to do in next year. Many things happened in 2011th...
  • I got promotion to principal engineer, so some new activities were added to my usual duties, I started to work more closely with other teams around the world.
  • Traveled a bit - was in England on business trip,  together with wife were 3rd time on Canary Islands, spent a week traveling in England, Holland, plus did some trips in Germany (Cologne, Rhein, etc.).
  • Rode 2000km on my bicycle, and want to make more next year...
  • Participated in release of several books in different roles: as technical proofreader for Mannings "Mahout in Action" & "Tika in Action", and as translator for Russian translation of famous "Types and Programming Languages", plus I helped slightly in translation/proofing of more functional programming-related books that will be released next year (in Russia).
  • Open-source activity wasn't so great as before, because of lack of free time, usually did small patches for different projects - muse, haskell-mode, mahout, CEDET, incanter, and several more.
  • Tried to continue to write articles, so at begin of year, I wrote article about TDD & Unit testing in C++, and at the end of year, wrote (together with Dmitry Bushenko) small tutorial (in Russian) on how to extend Emacs for refactoring of code. We plan to extend this article with more examples, including more tools from CEDET/Semantic, and than translate it to English.  Also gave a talk about Emacs for Scala.by user group (via Google+ Hangout)...
  • Read a lot, mostly technical books...
  • And one of the most interesting experiences was participation in Stanford's University experiment - online classes on Artificial Intelligence (AI) and Machine Learning (ML). It was very interesting to study there, and they teach me many new interesting things + plus I had a chance to read some books that were bought some time ago, but simply stayed on my bookself, for example, Artificial Intelligence: A Modern Approach. I got only 89% overall score on AI class (I need to check my homeworks more carefully ;-), but anyway it's very interesting experience. ML class was more "easy" for me, but it also was interesting and allowed me to study many new things.  I hadn't received my certificate for ML class yet, but I hope that it will be good - I did all homeworks & programming tasks... (If you hand't participated in that courses, I recommend to look onto actual list of cources at ML Class site, maybe you'll find something interesting for you - they will offer much more courses in January-March!).


What's next? I plan to investigate topics that are interesting for me - natural language processing (including study at Stanford's NLP class), machine learning, etc. Plan to participate more actively in open source projects, especially in Clojure-related. Continue to read new books (I already prepared pile of books for reading on vacation). Will try to make my personal record in cycling (I plan to make 3000km next year :-). And do many other things...

And now, I want to wish Happy New Year to everybody!

November 2, 2011

Planet Clojure's milestone

Today, Planet Clojure reached another milestone, and now combines feeds from more than 300 blogs (301, precisely).

P.S. I have a question - does anybody interested in Planet Clojure in other languages than English? For example, I maintain Russian Planet Clojure separately, but maybe it will be better to combine all planets in one place, as subdomains of Planet Clojure?

November 1, 2011

Miscellaneous...

I hadn't blogged since May, and many things happened since that time.

In June, together with my wife we traveled to England and spent a week, visiting different cities. Although we visited not so much, so we're planning to make another trip to Scotland, and maybe other parts of UK.

Cycling was also big time consumer (this year I made about 2,000km on bicycle), but I like this activity, and planning to upgrade my bicycle next year to something speedy - don't know yet what to select - road bike or time trial bike...

Book-related

As usual, I read a lot, investigating new (for me) technologies & best practices.
Together with Manning's team, I participated (as technical proofreader) in publishing of two books: Mahout in Action, and Tika in Action. First book was very interesting for me, as I planned to study this technology anyway, and work with Manning allowed me to dig more deeply into all examples, code, etc. This book is different from other machine learning books because it shows how to solve ML tasks with Mahout in practice.
Week ago another book-related project also was finished - Russian translation of well-known book on type theory - Types and Programming Languages by Benjamin C. Pierce. This project lasted for 3 years, but at the end we produced high-quality translation of this book (and it's free in ebook form!). I hope that I'll receive paper book shortly.
And more projects are in progress ;-)

Programming & other IT-related projects

I also continued to experiment with different technologies to get new experience (not related to work) - Mahout, Lucene, Hadoop, Erlang, Haskell, and many other.
Some work also was made with Clojure, but not so much, I hope that I'll have more free time at winter.
Also I participate in AI & ML classes from Stanford, and like them a lot, although not so much free time left. First is more hard, as it requires to do more study on your own, seeking for new information, etc. (I forgot many things since I finished university :-) While second is more self-contained - you're usually don't need to search much in external sources to make your homework. Some time was needed to read Octave manual, but this was not so complicated. Although now I'm also studying how to program with R, to help my wife with thesis.


More things happened & happening, than I wrote about, and I'll try to blog more often.

May 31, 2011

Test, please ignore...

test for clojure planet

May 14, 2011

Small books review

I hadn't blogged for a long time, and also wanted to blog about books, read during last 2 months, but currently I have no time - several releases straight at work, plus there are several personal projects, so I decided, that I'll write only about very interesting books.  You can find reviews of my read books on Goodreads.

Shortly about read books

During my vacation in March, I finished The Art of the Metabobject Protocol, that was in my reading queue for a long time. This book gives understanding how CLOS was designed, how concrete solutions was selected, etc.
In April I read 2 books from Manning (they asked for review): Tika in Action и ManifoldCF in Action. First wasn't very interesting for me - I'm working in this branch for a long time, plus I already used tika in my projects, but I think, that book will interesting for peoples who will need to extract meta-data & text from files in different formats.  And second book was very interesting - I bought it when it was released as MEAP, but I hadn't time to start read it. This book describes ManifoldCF - extensible framework for work with different content repositories, from which you can fetch information for indexing, or similar processing. This framework is very interesting for me, and I hope, that I'll use it in one of my projects.

April 6, 2011

Advertising in the "Practice of functional programming" journal

If you want to hire talented software developers in Russia, or other countries of ex-USSR, then you can publish your ad in the "Practice of functional programming" journal.  Currently journal has about 10 thousand readers across almost all parts of ex-USSR, and I believe, that they are talented people.
To get more details on pricing, etc. you need to write to following e-mail address.

February 15, 2011

Unit testing in C++

I forgot to mention here, that I wrote small article on unit testing in C++ using Boost.Test and Google C++ Mocking Framework. I have plans on extending this article, so comments and suggestions could be very useful

February 11, 2011

Readings digest. January 2011

Maybe you noticed that there was no books review for December — I had too much to do, so I hadn't finished reading of any book. But Christmas and New Year brought me more free time, and I finished reading of several books.

DSLs in Action

Sometime ago I decided, that I need to read something about domain specific languages (DSL) to find new ideas, compare with my own implementation (I developed several DSLs, that I use in my projects), and maybe improve my solutions. I selected DSLs in Action, written by Debasish Ghosh, who is well-known developer in Scala community, although he is also using other languages, for example, Haskell, Groovy, Clojure. When I was trying to select which book to read, I also thought about Domain-Specific Languages book, written by Martin Fowler, but Manning offered good discount on books, so I bought their book ;-)

This book is written using very simple and clear language, but it provides very interesting information. Author uses in examples different languages — Ruby, Groovy, Scala, Clojure (in this book the only languages that are working on JVM are used, so some things are applicable only to this platform). This allows to demonstrate different approaches to design and development of DSLs (you can also read author's post on why this book is polyglotic).

First part of book is dedicated to DSLs basics — author begins with description what is DSL, what parts it consists from, which types of DSLs are exist, how they are executed, benefits and drawbacks of using DSLs in your projects. Separate section describes how to model specific domains, and how this affect DSLs structure.

Second chapter demonstrates simple DSL, built in Java, and analysis of its drawbacks is performed. In the next section, the similar DSL is created with Groovy, and its benefits are described, comparing with first implementation. In the rest of this chapter the DSLs implementation patterns are reviewed.

The third chapter is dedicated to description of how to integrated DSLs into your project. It describes java scripting engine, Spring-based integration, and some other. For each of approaches, benefits and drawbacks are analyzed, including how it could affect DSL's implementation, and related questions.

The second part (chapters 4-8) concentrates on DSLs implementation using different programming languages. 4th chapter describes common patterns in implementation of internal DSLs — meta-programming, typed abstractions, run-time code generation, etc. And next 2 chapters (5 and 6) demonstrate this with DSLs implementation in Ruby, Groovy, Clojure, and Scala.

Seventh chapter continues DSLs implementation theme with description of how to implement external DSLs. The different types of parsers of reviewed, that could be used to parse DSL's code, and small example of ANTLR's usage is provided. There is also small section on Xtext — Eclipse's framework, that simplifies development of external DSLs.

In 8th chapter, the use of parsers combinators is demonstrated with application to development of external DSLs. Chapter begins with small introduction to parsers combinators, and continues with demonstration of how Scala's parsers library could be used to create external DSL.

The last part of the book provides some thoughts on modern tendencies in DSLs development, support tools, etc.

Besides main material, the book has several appendixes that contain short descriptions of programming languages, that were used in book, so you can get familiar with them, if you hadn't used them yet. Separately, I want to mention "philosophical" appendix A, that dedicated to discussion of role of abstractions in domain modeling, how purity and lack of side effects affect development, and some related problems. Besides this, you can also look on appendix B, that discusses role of meta-programming in DSL's development.

Conclusion: if you're using and/or developing DSLs, or you're interested in this topic, then you need to read this book — it contains a lot of practical information, that could be useful in DSLs development.

Camel in Action

For one of my "pet" projects I was need to create data processing system that will get and process data from different sources, so, after some googling, I found Apache Camel, that was looked pretty interesting and mature project, so I bought at Manning the Camel in Action books, written by Claus Ibsen and Jonathan Anstey.

The book begins (chapter 1) with introduction into Apache Camel — which tasks are solved with it, which components it consists from, etc. The second chapter provides more detailed description of routes, and how you can create them using code in Java or Spring.

The second part of book describes basic Camel's techniques — how to convert data, handle errors, test code, use additional components (such as JMS, databases, etc.).

And third parts provides description of how to work with transactions inside Camel's workflow, how to process data concurrently. There are also chapters on deployment of projects, that are using Camel, and how to monitor Camel in production environment.

Separate chapter (11th) describes development process for projects that are using Camel, including development of new adapters and components. Besides this, there is description of DSL, written in Scala (although, from my point of view, the scalaz-camel project looks more interesting), and also shown how to use Camel with other languages.

Conclusion: if you interested in Apache Camel's usage, then you can acquire this book — it contain pretty good introduction to this system, and could be used as reference to some of the base components.

P.S. The new project was also created to integrate Clojure with Apache Camel. Project is called Hackamore, and if you interested in it, then you can join to discussions in specially created mailing list.

Test-driven development: By Example

Several days ago I made a presentation (for our internal developers seminar) on test driven development (TDD) and unit testing, and during preparation, I decided to read something from peoples, who were founders of this movement. The Extreme Programming series I read many years ago, right after release of corresponding books, so I decided to read the Test Driven Development: By Example book by Kent Beck.

Book isn't big (about 200 pages), but I think, that it still too big for this topic — author took small problem (exchange conversion), and describes test-driven implementation of solution in great details. This example is used in the first part of the book to demonstrate basics of TDD and unit testing.

In the second part, TDD is illustrated by implementing of xUnit-like testing framework for Python language, with detailed description of all necessary steps.

The third part of the book is dedicated to description of base approaches and patterns in test-driven development, how to design code for testability, how to design tests, etc.

Conclusion: this is pretty good introduction to TDD, but I could recommend it only for people who never used TDD in their work — it's too elementary from my point of view. Although, there are some good advices on code organization, workflow, etc. But if you know something about unit testing, then you can find other sources of information.

February 1, 2011

Additions to haskell-mode

Between Christmas and New Year I had some time to hack haskell-mode (this was planned for a long time) - I added support for hlint (the hs-lint command) and haskell style scanner (the hs-scan command). As before, hs-lint supports replacement of code with suggestions.
Patches were sent to maintainer, but they not committed into main repository yet. But in the meantime you can use my fork. Please, send me comments and suggestions on these changes...