Blog Posts
-
Static is back
Having been in the field of software development for over 11 years, which is not much but should be enough to start gathering some understanding of the field, I’ve had the chance to see different trends come and go. Agile and back again The Agile Man... -
Manas Unified Principles and Practices
Update: After more than 5 years since being written, this post no longer represents our current development practices. We keep it here for historical purposes only. At Manas we have never strictly adhered to pre-canned methodologies, such as Scrum. A... -
GraphQL Hackathon
After having used ReactJS in several of our projects with great success, be it in a vanilla javascript approach, combined with Redux, or in Clojurescript through Reagent, we wanted to test GraphQL as an alternative to REST for exposing the data from... -
Running Crystal on Docker
We have been migrating most of our projects to run on Docker containers for a while now, and since Crystal is our new favourite language ever since its first commit, running Crystal on Docker was a natural consequence as soon as we started using it i... -
Second Crystal meetup recap
On May 11th we organised the second Crystal language meetup here in Buenos Aires. In case you are still not familiar with Crystal, check out this blogpost on the story behind it and how we ended up creating an awesome programming language with a thri... -
React Native Hackathon
At Manas we organise internal hackathons on a monthly basis, with the goal to explore new technologies, languages, frameworks, paradigms, or whatever we want to play with; thus both satisfying our need to be constantly learning, and evaluating the to... -
InSTEDD platform tools training at WFP mVAM
During the first days of February, Nicolás and I had the pleasure of being invited to train staff from the mobile Vulnerability Analysis and Mapping (mVAM) project at the World Food Programme (WFP), the food aid arm of the United Nations, on InSTEDD... -
Let’s Encrypt certificate auto-renewal in docker-powered nginx reverse proxy
If you have been following our blog, you’ll know that sometimes we blog about events, sometimes about projects, sometimes about travels, and sometimes about highly technical and very specific stuff. I hope that by the title of the article you have ea... -
Switching Rails database per git branch
Working with the git-flow pattern in an application involves a lot of switching back and forth along several branches. Whether it is implementing a new feature in a dedicated branch, applying a hotfix to a deployed version, or making the final touche... -
Logging for Rails apps in Docker
We can all agree that logging is key in every setup: having useful logs from the components in your environment is your best tool in diagnosing issues and keeping track of the health of your applications. Of course, Docker-based deployments are no ex... -
Linear algebra in Crystal from LAPACK
This week Martín started a project for implementing linear algebra routines in Crystal by binding to LAPACK, a de-facto standard library for such operations. You can check out the project in github at mverzilli/crystalla, as in Crystal Linear Algebra... -
Annotate shapefile with data from Geonames
When building any location-aware application, one of the first problems is how to build the locations database for the application, and what information is actually needed: names, ISO codes, latitude/longitude, boundaries, bounding boxes, administrat... -
Epihack Tanzania 2014
During this past week, Martín and I had the pleasure of attending Epihack Tanzania 2014 in Arusha as InSTEDD facilitators of the event. This Epihack, 3rd of its nature, was organised by SACIDS with the support of the Skoll Global Threats Fund. Epihac... -
Extracting Subject Alternative Name from Microsoft authentication client certificates
Among the client certificates present in an HSPD-12 smart card, you may find a Windows Smart Card Login certificate used for authentication, which has several particularities, one of them being storing the Subject Alternative Name (this is, the Windo... -
Organizing coffeescript code in a Rails 3 app
Ever since Rails 3.1 adopted coffeescript within the asset pipeline as a default, coffescript has become an increasingly popular language for easily writing your javascript code. Despite a lot of tutorials out there on how to write coffee and take ad... -
How to check if object can be destroyed if it has dependent: restrict associations
Rails provides several handy options for specifying how to deal with associated models upon deletion, for example: class Blog has_many :posts, :dependent => :destroy end The destroy value for the dependent option will call the destroy method for ever... -
Default request parameters in Rails functional tests
I was looking for an easy way to force every request in a functional test in Rails to use a set of parameters by default, regardless of being specified explicitly. This is, every time I write: it "should get index" do get :index end Rails should actu... -
InSTEDD at Pacific Endeavor 2011
Pacific Endeavor is a humanitarian communication workshop, organized by the US Pacific Command, which brings together military representatives from all SE Asia, NGOs and industry leaders. Its main goal is to improve the multi-national communications... -
Using xmpp for mocking SMS channel in Nuntium
For those of you not familiar with it, Nuntium is an open-source tool we developed together with InSTEDD for easily building applications that rely on SMS for communication. Even though several other kinds of channels are supported, such as email or... -
Thesis in Computer Science
After a long time, I have finally finished my thesis to get the MSc in Computer Science degree, from FCEN UBA. It has been almost a year since I started working in the thesis in the context of Manas Research, and before that I had been working on it... -
Careful when truncating strings
One of our Rails applications has to consume an RSS. Nothing fancy here, we simply wanted to extract some fields from each item and store them in the PostgreSQL DB (app was hosted on heroku). Simply slicing the string seemed to work at first: summary... -
Translating route names in ASP NET MVC
One of the web applications we develop has support for multiple languages, and we got the request to have also the route names translated. As such, a user visiting the site in english and navigating to the stores page should be redirected to example. -
Gettext C# Utilities
The Gettext C# Utilities GNU project, containing convenient classes, templates, scripts and tools for easily implementing gettext i18n support for C# and ASP NET applications, has been polished up and version 1.0 is ready for download. I’ve written w... -
Modelling graph coloring with integer linear programming
In previous posts I have presented separately the graph coloring problem, as well as its generalization, the partitioned graph coloring problem, and linear programming. It is time to put both of them toghether, by modelling an instance of graph color... -
Careful when using mutable types as default arguments in Python
As an intermezzo in the blog posts regarding my thesis, I’d like to point out an unexpected (or at least, unexpected for me) behaviour in Python’s way of constructing default arguments. Suppose we have the following python class MyClass, with an init... -
Partitioned Graph Coloring
Before going into how to solve the partitioned graph coloring problem using integer linear programming (which is the goal of my thesis), I thought it would be a good idea to actually explain what is the partitioned graph coloring problem (or PCP from... -
What is Linear Programming
Despite being able to simply provide a link to wikipedia’s already excellent article on Linear Programming, I wanted to provide a short introduction in order to present what I am doing exactly on my thesis in a future article. Linear Programming is b... -
Making a thesis 2.0
Continuing with the tradition started by Beta two years ago here in Manas, I am now dedicating all my efforts to finish my thesis in order to obtain my MSc degree in Computer Science at FCEN-UBA. Having started it a few months ago, Manas generously s... -
Deleting children with accepts_nested_attributes_for in Rails
On the previous post I wrote a few lines on the basic usage of the accepts_nested_attributes_for method in rails models. I strongly recommend reading that post before this one if you haven’t. Although there is a standard way for deleting items, there... -
Handling children with accepts_nested_attributes_for in Rails
Rails makes it easy to build HTML forms associated to a certain model. Simply using the form_for instruction on the view, writing a simple update method in the controller and setting validation logic on the model, makes standard CRUD operations incre... -
Status Update
It’s been a while since the last time I wrote something here. I realize I’ve promised several posts which never got written, such as some experiments with bizarre random number generators, the architecture of the silverlight DynamicDeepZoom app we ha... -
Parameterized Tests
In order to prevent the dreadful copy-paste habits in unit tests (remember, tests are also code, so all the good practices you use when writing code should also apply to tests) a common pattern to test similar behaviour when slightly changing the inp... -
Javascript strings translation with gettext
In a previous post I mentioned a few ways of dealing with i18n of strings in ASP.NET pages with gettext. Now it’s time for javascript code. Although javascript code in ASP.NET pages can be internationalized using the <%= %gt; syntax, pure js files ar... -
Gettext i18n strings in ASP.NET controls
In the last post I blogged about using gettext to internationalize strings in C#. However, using the Messages.T("Hello world") syntax in ASP.NET can be a little cumbersome. Luckily, ASP.NET controls can work as a solution for this issue. Adding a sim... -
Using GNU Gettext for i18n in C# and ASP.NET
We are in the process of dealing with the internationalization and localization of one of our open source web applications, which is fully developed using C# and ASP.NET MVC. Although ASP.NET already provides easy support for i18n via the usage of re... -
Microsoft Codecamp Buenos Aires 2009 Source Code and Presentation
For those of you who attended to the talk (thanks a lot for attending, by the way), you may find in Codeplex project DynamicDeepZoom all the source code we used for the example we presented, as well as the presentation (in Spanish). And for those of... -
Microsoft Codecamp Buenos Aires 2009
On September 26th, Martin Verzilli and I will be making a presentation at Microsoft CodeCamp event on Silverlight DeepZoom technology. The presentation will focus on exploiting a much underused feature of the deep zoom control, which is the ability t... -
Sharing users among systems
One of the issues that arose during the integration process was how to maintain user identity when integrating between different systems. During the exercise, data was moved around anonymously, without having more than a display name describing an it... -
Camp Roberts RELIEF Recap
This past week at Camp Roberts has been incredible. All of the groups present did an amazing work, and we got to test InSTEDD’s GeoChat in a completely different scenario and integrate it with most of the other applications present to come up with a... -
Camp Roberts CBE
This week Star Tides, in partnership with the Naval Postgraduate School, will be organizing a Concept-based Experimentation (CBE) in Camp Roberts (CA). The objective is to to analyze the state of the art of current social and information related appl... -
Tests are also Code
Many times we put all of our effort in developing an elegant solution to a certain problem we have, thus leaving testing to a second place, without too much consideration for it. Regardless of being using TDD or just creating unit tests for the alrea... -
State vs Behaviour Verification
I stumbled upon an excellent article by Martin Fowler in which he describes the difference between stubs and mocks, and afterwards the difference between classic and mockist TDD. Be warned, the article is a few years old, but still a highly recommend... -
Beauty
Some time ago I found a quotation by Buckminster Fuller: When I’m working on a problem, I never think about beauty. I think only how to solve the problem. But when I have finished, if the solution is not beautiful, I know it is wrong. Although Fuller... -
Neyun Beta is Ready
After over a year of development, Neyun is finally out for public use. The site is currently in beta, and an invite (or beta request approved) is required to use it. Neyun is a rich web application that we have been developing along with Ary, Martin... -
Silverlight Xaml Guidelines
One of the key components of any Silverlight (or WPF) application is XAML, as it serves as the definition for every visual element. Being a markup language intended to replace a bunch of UI-creating-code (remember WinForms?), it can quickly get out o... -
Randomness
How a simple algorithm for generating a random output can be biased may be a very difficult analysis, and unless every step is carefully analyzed, randomness can be easily lost. In this post I’ll go through some basics of probabilities, using an idea... -
Silverlight Tutorial Video
(Since this post is about a Silverlight Tutorial Video published in Spanish for Microsoft Latin America and Universo Bit, I will write it in Spanish as well.) El diciembre pasado tuve la oportunidad de grabar un video introductorio de Silverlight par... -
SimpleDb SQL-Like Query Language
In my last post, I blogged about non-first normal form, SimpleDb in particular, and the problems that arose in the query language when dealing with multiple attributes, such as “a != b” not being the same as “not a = b”. The SimpleDb team has now rel... -
Non First Normal Form
Normalization is one of the key concepts involved when designing a good relational database model. There is quite a lot of theory behind this relatively simple concept as you can see from the wikipedia article. To make a long story short, you have to... -
User32.dll deleted by AVG8
Last night I was a victim of the AVG8 bug that marked User32.dll as a trojan (just a false positive). What annoys me the most is not the bug per se, but the fact that AVG Heal option simply deleted the file without any warning or simply backuping it... -
Command pattern in Web Apps
The command pattern is a behavioural pattern that encapsulates a request made to a certain object inside a Command object. Each type of command knows how to Execute() itself, as well as its target instances. In the example above, taken from the Gang... -
Controls Contract
An interesting feature of Silverlight is how the interaction between visuals and logic (this is, between designers and developers) is handled. It uses a so-called Parts and States Model, which is ensured by a contract specified with attributes in the... -
Saturation variable function for treemaps
For those of you not familiar with a treemap, it is simply a bunch of boxes somehow arranged inside a bigger box; each of them also contains its own set of smaller boxes, and so on. Each box has an associated weight that determines its size. It is a... -
Silverlight Loaded Events
A common scenario in the development of GUI applications is the presence of different events fired by the engine as the visual tree is constructed and rendered. And Silverlight, of course, is no exception. While WPF provides Initialized and Loaded ev... -
Paging in Data-Bound ListBox in Silverlight
A useful feature for most data-bound items presenting controls is the ability to page their data, by showing only the first n elements and requesting the rest on demand as the users scrolls down the view. This is specially useful when downloading eac... -
Silverlight Dependency Properties
WPF introduced a new concept for managing properties which is dependency properties. Dependency properties can act as standard properties, but also offer a lot more functionality, such as data binding, assignment through resources, setters in styles,... -
Refactoring to WebClient
Since Silverlight 2 Beta 2 introduced the WebClient class, I decided to refactor an application we had by replacing all references to HttpWebRequest with the new client. Its methods seemed much more simple and clear, and I didn’t even need to write a... -
Binding Lights
For almost any developer who has worked in GUIs the concept of data binding should be at least familiar. If you have an Article and want to show its code and price, you just place two textboxes bound to those properties and place some invisible magic... -
Silverlight 2 Beta 2 Breaking Changes
Silverlight 2 Beta 2 has introduced a number of fixes, additions and changes to the previous Beta 1 version. As I said in a previous post, I believe the improved error handling and detailed exceptions are among the best improvements, and also the les... -
Beta-Lighting the web
One of the current most interesting technologies around is Microsoft Silverlight, whose intention is to provide a programmer and designer friendly way to develop web UIs. It is basically a subset of Windows Presentation Foundation, although it has a...
Projects
-
IVR App Builder
1 /7 Client InSTEDD (innovative support to emergencies diseases & disasters) is a non-profit organization focused on improving global health and safety by implementing a blend of social and technical approaches. InSTEDD works closely with communities... -
Connecting trucks with cargo
1 /5 Client Avancargo is an Argentinean company who seeks to optimize land transport in Latin America, by facilitating the process of finding and booking cargo vehicles through a platform that puts together supply and demand in one place, thus simpli... -
Multi-modal survey tool
1 /6 Client Surveda was developed in collaboration with InSTEDD as part of the Bloomberg Philanthropies Data for Health Initiative NCD Mobile Phone Survey. In the context of this project, the tool collects critical information about noncommunicable d... -
Service location optimization
1 /5 Client PlanWise is a tool developed by Concern’s Innovations initiative, in partnership with InSTEDD. It helps planners and responders in low-resources settings see how they can serve as many people as possible, as cost-effectively as they can,... -
Connected Diagnostics
1 /6 Client CDx (Connected Diagnostics initiative) is a collaborative initiative between InSTEDD and FIND that seeks to use diagnostic data to improve healthcare delivery, outbreak detection and response, and health systems management, working also a... -
Tracking Health Status
1 /4 Client Health Check was developed in partnership with InSTEDD for the Division of Global Migration and Quarantine of the CDC (Center for Disease Control and Prevention), to keep track of the wellbeing of federal employees that were traveling fro... -
Time tracking
1 /4 Concept Brium tracks the time each member of your team spends on different activities, by asking them through chat what they are doing. A couple of words a day is all it needs to provide your company with accurate timesheets. 2 /4 Requirements &... -
Diagnostics Visualization
1 /4 Client Cepheid is a worldwide molecular diagnostics company which manufactures, among others, the GeneXpert family of systems: accurate yet easy-to-use machines which automate testing for organisms and genetic-based diseases. Thanks to the agile... -
SMS Polls
1 /3 Client Developed as part of InSTEDD’s platform tools, Pollit allows the user to easily define a questionnaire composed of free text, numeric or multiple choice questions, by importing an online Google Form. By supplying a list of mobile phones t... -
SMS Reminders
1 /3 Client Remindem was developed together with InSTEDD with the aim to provide support and information in the form reminders to different groups. Use cases include health tips for expecting mothers based on which week of pregnancy they are, study a... -
Disease Visualization
1 /3 Client Developed with InSTEDD and the Task Force for Global Health in a project with the link_to 'Public Health Informations Institute', 'http://www.phii.org/', 'aria-label': 'Public Health Informations Institute' for the US Centers for Disease... -
SMS Group Chat
1 /3 Client GeoChat is a flexible open source group communications technology developed for InSTEDD, that lets team members interact to maintain shared geospatial awareness of who is doing what where over any device, on any platform, over any network... -
Flood Monitoring
1 /3 Client This project was developed in partnership with iReckon. 2 /3 Approach Breda Waterakkers is a development project situated in Breda, Holland, that seeks to provide safe canals to avoid flooding in the area due to the recent increase in con... -
Crowd Micro Tasking
1 /3 Client The inspiration for TaskMeUp came from a mini-tool we developed against the clock during our response to Haiti’s earthquake, sms2geo, which allowed first-responders in Haiti to send a text message asking for a specific location and have t...