Your company is growing: orders increase, you are hiring more people, the warehouse is getting bigger. It’s getting harder and harder to keep track of everything through post-its strewn all over the office, or through the large spreadsheet you have so carefully built during the past few months.

If you ever find yourself in this situation, it means it’s time for you to start using an ERP software.

READ MORE

Quando Absolute Vodka, qualche anno fa, lanciò la prima campagna pubblicitaria su WhatsApp, fu subito storia. Sebbene la case history fosse significativa a livello creativo, quello che la rese davvero unica fu l’intuizione dei suoi creatori: in tempi non sospetti, avevano scovato il potenziale di questo tipo di canale per le iniziative di marketing.

READ MORE

Here at MONK Software we strongly believe in collaborative software. Open Source community is something great and so huge that we just want to say thanks to everyone out there who keeps doing great projects/libraries & blog articles. Thanks for sharing!

During our latest iOS project, we needed something that Apple’s APIs don’t provide. We were searching for a sort of UIImagePicker with an embedded photo library, but we were unable to find something that would have suited our needs. So we just thought it would have been great to create something ad hoc for us and obviously share it this new component with the community and, just as obviously, release it Open Source.

READ MORE

The Big Data and also Machine Learning conference in Rome has finished on last Saturday, so I thought I’d write some observations, thoughts and perhaps troll a bit (a troll a day keep the doctor away).

First a bit of a disclaimer – it’s my first non-purely developer conference, so some of the things that were odd to me, might be totally normal in this space. Moreover, maybe me not being a native Italian didn’t allow me to appreciate all the presentations and conversations to their full potential.

READ MORE

According to the latest data released by WeAreSocial, 2.8 billion people use social networks at least once month – and almost all of them (2.4 billions) do it from their smartphones. This no longer is a surprise. However, what is mostly disruptive is the change social media are currently experiencing. In no time, stream walls and public posts are running out of fashion.

Though Facebook still tops the list as the most used social platforms, Zuckerberg has clearly put his heart (and wallet) into instant messaging apps. WhatsApp and FB Messenger (followed by QQ, WeChat and a number of other lesser-known ones), proved once more to be the users’ favourite apps leaving Twitter, YouTube and even Instagram behind in terms of loyalty and engagement.

READ MORE

From the 5th to the 7th of October, some of us were back in Belgium, in the cozy town of Louvain-La-Neuve-Universite,
for the Odoo Experience 2016. It’s the biggest Odoo conference in the world, with more than 2000 attendees of
all kinds, from developers to end-users, wandering their way through the “Aula Magna” building to see as much as possible
of the 150+ talks end events scheduled in these three days of workshops, bussiness cases, tutorials,
good food and plenty of Belgian beer.

READ MORE

photo_2016-10-03_18-47-31

It was a very stressed week the one after the #GoHeroes event that involved startupper, venture capitalists, journalists and in general many curious people. It was also a very good chance to write something on it with a fresh minded behaviour. We’ve got to develop and re-read this notes to find a link among the many rounds of sessions had these days.

What sent us Heroes? The first answer is:

Italy can innovate, but above all, Italians can innovate.

 

READ MORE

In the recent years substantial percentage of my work as a backend developer was to create API for other components of larger systems. Mobile applications, rich javascript frontends and of course other backend services.

API is an interface between two software components. Very often those components are written by different people or even different teams.

At MONK, as Giuseppe described in his last post we test our API with Rspec. For the past several years, with every project we had to maintain three versions of API. Why three?

READ MORE

Today we are happy to announce our contribution to the open source world: the XML2JSON gem!

It all started out as a simple side project (more on that on a future post). One of the problems we faced was the XML format. Being rubyists, we don’t find ourselves at ease around XML, so we decided to convert it to JSON and then work with it.

Unfortunately we didn’t find an easy way to do it. No .to_json magic method :(.

Also, we didn’t find a gem or a library to deal with it. There are libraries out there that solve this problem. One of them is activesupport, that extends the Hash class with a from_xml method. The problem with this gem is that it does not handle the conversion the way we need. We wanted an almost transparent conversion from the XML format to the JSON one.

So we decided to write our own library.

These are the main points that make our library different.

Multiple elements are pluralized

    <?xml version="1.0">
    <root>
        <author>
            <name>Giuseppe Modarelli</name>
        </author>
        <author>
            <name>Andrea D'Ippolito</name>
        </author>
    </root>

becomes

    {
        "root": {
            "authors": [
                {
                    "name": "Giuseppe Modarelli"
                },
                {
                    "name": "Andrea D'Ippolito"
                }
            ]
        }
    }

Nodes attributes do not becomes keys

    <?xml version="1.0">
    <root>
        <link href="http://gmodarelli.com" rel="self" />
    </root>

becomes

    {
        "root": {
            "link": {
                "_attributes": {
                    "href": "http://gmodarelli.com",
                    "rel": "self"
                }
            }
        }
    }

Namespaces are treated like attributes

    <?xml version="1.0">
    <root xmlns:"http://some.namespace.definition">
        <link href="http://www.andreadippolito.it" rel="self" />
    </root>

becomes

    {
        "root": {
            "_namespaces": {
                "xmlns": "http://some.namespace.definition"
            },
            "link": {
                "_attributes": {
                    "href": "http://www.andreadippolito.it",
                    "rel": "self"
                }
            }
        }
    }

When there are both attributes and text inside a node

    <?xml version="1.0">
    <root>
        <link href="http://www.wearemonk.com" rel="self">wearemonk.com</link>
    </root>

becomes

    {
        "root": {
            "link": {
                "_attributes": {
                    "href": "http://www.andreadippolito.it",
                    "rel": "self"
                },
                "_text":  "wearemonk.com"
            }
        }
    }

Naming

We chose _attributes, _namespaces and _text out of our liking, but we provided a way to change them.

    XML2JSON.config do |c|
        c.attributes_key = "my_attributes"
        c.namespaces_key = "my_namespaces"
        c.text_key = "my_text"
    end

The Gem

When we finally got ourself a working version, we thought about every time we solved a big problem with a simple gem install. So we decided to share our little library with the world and turn it into a gem.

The gem is still in its early days of development. As of today it is version 0.4.0 and it can only be installed through github

gem 'xml2json', git: 'git@github.com:monksoftware/xml2json.git'

We are planning to release it to Rubygems (as soon as we find out how :D).

If you have any suggestions, feature requests or bug reports please go to Github and fork the repo!

Happy coding!

Seriously? “We are Monk” and we haven’t brewed our own beer yet?

Make an own beer was the first thing that came to my mind when I got into this company. Honestly that was my purpose everyday since then }:-)

As MONKs we like crafting, we like to discover how stuff are done, we like to taste and enjoy everything that comes out of our hands. This is true for software, it’s so much true for foods and drinks.

So we scheduled our first Monk beer brewing! The recipe came out quite easily since it was the first one I had to keep it simple. An American Pale Ale single malt and single hop, that was the target. Brewing day was a kind of workshop, everyone paid attention to all the steps and  got hands “dirty”.

As a open source enthusiasts we don’t keep the secret of our recipe:) Feel free to follow it and make you own beer! This is how to do it in 10 steps:

  1. Malt is simply barley that has been steeped, germinated and dried. The first step is to crush it – not too hard, just enough to extract starch. The best pale ale malt to choose is Maris Otter.
  2. Put the crushed malt into warm water (~ 64°C) for at least one hour. This is one of the most important phase, called “mash” – it’s where starch is converted into sugar.
  3. After one hour, raise the temperature to 78°C to stop starch extraction. Next start to filter the wort, leaving the spent grains in the pot.
  4. Pour other 78°C water on top of the spent grains, to increase the wort volume and to clean the grain better. Get all the sugar out. This is phase is called “sparge”.
  5. What you have now is a fermentable liquid. To make beer out of it we need hop and yeast. First boil this wort for one hour. When boiling starts add a bit of hop into proper bag to give some bitterness that will balance the sweet of the sugars dissolved. Later during the boiling add a bit more of hop to enanche the aroma (we used Citra hop).
  6. After boiling you have to chill the wort as quickly as possible. For best result use a cooling device made of copper and reach 20°C, the ideal temperature to activate the yeast.
  7. Put the wort into the fermenter, remove the hopbags and inoculate the yeast.
  8. Now fermentations start and goes on for a week. After that decant quickly into a second fermenter for another week. And then finally bottling.
  9. While bottling add a bit of sugar – it gives refermentation which a craft beer requires.
  10. The process is finished! Leave warm bottles for 5 days and then put straight to the cellar. Now be patient and wait as long as you can (2 weeks minimum) to untap the first one :-)

Ready? Let us know if you like it or have a suggestions to make it better!

This time we started with the simplest style but next time we will challenge ourself brewing an authentic trappist or abbey beer. Hopefully the belgian monks will be proud of us :)

Cheers! Na zdrowie! Cincin!