Friday, 28 April 2017

Four openings for Haskell developers at Standard Chartered

I'm happy to announce that the Strats team at Standard Chartered is still hiring! We currently have openings for four roles. These will typically involve direct contact with traders to automate processes, often in rapid delivery style.

The growing Strats team now consists of about 40 developers in either Singapore or London, working exclusively in Haskell. Dozens of people from other teams are also writing Haskell code, so this is a chance to join what's probably the largest Haskell dev team in the world, and work on the largest Haskell codebase (over 3 million lines of code).

We currently offer only contractor positions (with the possibility of conversion to permanent in the future) with very competitive compensation. We require demonstrated experience in typed FP (Haskell, OCaml, F# etc); no financial background is required. We also require physical presence in either Singapore or London, and offer a relocation package for international moves. Flexible work arrangements are possible, but relocation to the UK or Singapore is necessary.

If this sounds exciting to you, please email your CV and a short motivation text to Feel free to also ask any questions you might have.

Saturday, 25 June 2016

Marie Curie individual fellowship application text

Back in 2014 I applied for a Marie Curie fellowship. This was towards the end of my postdoc at Oxford, and then I got my current position at Standard Chartered before I heard back from the European Commission on the results of the Marie Curie. It was accepted with a score of 96%, which is something I'm very proud of, and also very thankful to everyone who helped me prepare the submission.
However, it is now clear that I will not be taking that position, as I am settled in London and at Standard Chartered. I still quite like the proposal, though, and, when writing it, I remember having wanted to see examples of successful Marie Curie proposals to have an idea of what they would look like. As such, I'm making the text of my own Marie Curie fellowship application available online. I hope this can help others to write successful applications, and maybe some of its ideas can be taken on by other researchers. Feel free to adapt any of the ideas in the proposal (but please give credit when it is due, and remember that the European Commission uses plagiarism detection software). It's available on my website, and linked below. I made the LaTeX template for the application available before.

José Pedro Magalhães. Models of Structure in Music (MoStMusic). Marie Sklodowska-Curie Individual Fellowship application, 2014.

Sunday, 15 February 2015

Busy week: three new paper drafts!

After a busy week for me and my co-authors, I'm happy to share three new paper drafts.

Generic programming (GP) is a form of abstraction in programming languages that serves to reduce code duplication by exploiting the regular structure of algebraic datatypes. Several different approaches to GP in Haskell have surfaced, giving rise to the problem of code duplication across GP libraries. Given the original goals of GP, the is a rather unfortunate turn of events. Fortunately, we can convert between the different representations of each approach, which allows us to "borrow" generic functions from different approaches, avoiding the need to reimplement every generic function in every single GP library.

In previous work we have shown how existing GP libraries relate to each other. In this paper we go one step further and advocate "hierarchical GP": through proper design of different GP approaches, each library can fit neatly in a hierarchy, greatly minimizing the amount of supporting infrastructure necessary for each approach, and allowing each library to be specific and concise, while eliminating code duplication overall. We introduce a new library for GP in Haskell intended to sit at the top of the "GP hierarchy". This library contains a lot of structural information, and is not intended to be used directly. Instead, it is a good starting point for generating generic representations for other libraries. This approach is also suitable for being the only library with native compiler support; all other approaches can be obtained from this one by simple conversion of representations in plain Haskell code.

Applications which deal with editing of structured data over multiple iterations, such as structure editors, exercise assistants, or applications which support incremental computation, need to represent transformations between different versions of data. A general notion of "transformation" should be more informative than what is obtained by computing the difference between the old and the new term, as diff algorithms generally consider only insert, copy, and delete operations. Transformations, however, may involve swapping elements, or duplicating them, and a good representation of transformations should not involve unnecessary repetition of data, or lose shared structure between the old and new term. 

In this paper we take a detailed look at the notion of transformation on strongly-typed structures. Our transformations are datatype-generic, and thus can be applied to a large class of data structures. We focus on representing transformations in a way that maximally captures the common substructure between the old and new term. This is of particular importance to a specific class of applications: that of incremental computations which recompute information only for the parts of the tree that are affected by a transformation. 

We present a library for encoding such transformations over families of datatypes, together with an algorithm for computing a transformation from one term into another, while retaining shared common substructures. We provide practical examples of how to encode transformations, as well as a realistic application to computing transformations between different revisions of a program. 

The most widely used generic-programming system in the Haskell community, Scrap Your Boilerplate (SYB), also happens to be one of the slowest. Generic traversals in SYB are often an order of magnitude slower than equivalent handwritten, non-generic traversals. Thus while SYB allows the concise expression of many traversals, its use incurs a significant runtime cost. Existing techniques for optimizing other generic-programming systems are not able to eliminate this overhead. 

This paper presents an optimization that eliminates this cost. Essentially, it is a partial evaluation that takes advantage of domain-specific knowledge about the structure of SYB. It optimizes SYB traversals to be as fast as handwritten, non-generic code, and benchmarks show that this optimization improves the speed of SYB traversals by an order of magnitude or more. 

Tuesday, 10 February 2015

I got awarded a Marie Curie individual fellowship!

After over 5 months waiting, I heard back from the European Commission: my Marie Curie Individual Fellowship has been selected for funding! This means two years of funding for research at Utrecht University in my project. In case you're curious, here's an excerpt of the summary of my project proposal:
Music is an art form with a very long history, and continues to engage millions of people today. Music Information Retrieval (MIR), the exciting interdisciplinary science that brings together music and computer science, is a growing field of research with the potential to enrich pure computer science knowledge while creating real-world applications that the general public can benefit from. While the marriage of art and science is often troublesome, MIR has the benefit that many aspects of music are highly structural and have been subject to rigorous formalisation for a long time. Formalisation and computers go hand in hand, and MIR researchers have therefore been developing models of musical structure for many years, and putting them to use in several applications. However, such models, so far, have had limited impact; they are commonly restricted to one specific aspect of music (such as harmony or form), can be hard to implement computationally (due, for example, to the way ambiguity is handled), and are often too technical to be used directly by musicologists who are not familiar with programming language details.
However, models are valuable. Unlike machine learning approaches, model-based MIR provides a real insight about the underlying structure, and can benefit from the input of musicologist experts. Furthermore, a single model can be applied to multiple important MIR tasks (such as retrieval, analysis, and automatic composition). The research goal of this project is thus to give musical models the impact they deserve, advancing the practical embodiment of hierarchical musical structurein its various formsin computer science through the development of new, functional Models of Structure in Music (MoStMusic). Specifically, I intend to develop functional models of musical form, melody, and harmony that enable an easy, fast, and flexible way of creating model-enhanced MIR applications. Being executable, these models will pave the way for true content-based music analysis and retrieval---an underestimated and underexplored area. As a showcase of a model-enhanced application, I will create an online music analyser that automatically computes the structure present in a user-submitted piece, and displays it in an interactive interface that highlights the structural shape of music.

Monday, 21 July 2014

LaTeX template for the Marie Sklodowska-Curie Individual Fellowships application (H2020-MSCA-IF-2014)

I've created  a LaTeX template for the Marie Sklodowska-Curie Individual Fellowships application (H2020-MSCA-IF-2014). It's based on a version that I found online for the previous call; I've tried to update it for the 2014 call. I made this because I couldn't stand the idea of using the provided Word template (especially because of references). Hopefully it fits within the prescribed guidelines, but I cannot guarantee that. Pull requests to improve the template are welcome!