Dec 10 2015
Building a Minimum Viable Product (MVP) is a method of developing new products
by validating hypotheses using feedback from real users as soon as possible. This is supposed to reduce risk and to ensure a good
return on investment.
It is most often used together with Agile development methodologies.
But there’s no such thing as a free lunch and while it reduces some types of risk, MVP also introduces some risks of its own.
Nov 25 2015
In the team that develops Allegro Recommendation Platform we weren’t happy with our integration tests. Long setup and
assertions blocks resulted in a low signal—to—noise ratio and poor readability. These tests were also full of ad hoc
variables like 1, ABC, OK or NOK, which caused that it was hard to find a connection between input and output
data. Moreover, any change in an API caused changes in many tests.
Nov 16 2015
Whether you are forming a new agile team or mixing people in an already existing team you start somewhat afresh. In an existing team the balance and group
dynamics changes, in a new team people are experiencing each other for the first time and checking what the boundaries are. I don’t want to get into details
of what can possibly happen — it’s best if you dig into works of Bruce Tuckman and his four-stage model or Gustave Le Bon’s
“The Crowd”. The former indicated that the team goes through the stages of Forming - Storming -
Norming - Performing. I would like to concentrate on the very initial stage of “Forming” the team in the first weeks of it’s existence.
Nov 10 2015
At Allegro, you can sell items at a fixed price (buy now) or at auction.
Auctions are still a popular sales format, especially in categories such as antiques and art or clothing.
So far, buyers fighting for an item had to refresh the web page in the last seconds of the auction to verify that the offer had not been overbid.
This made bidding difficult and less fun. Last year real time bidding process for all mobile users was introduced.
In this article I want to show how to create a simple application that provides real-time bidding, based on Allegro auctions.
We will use WebSockets, SockJS
and the latest, third version of Vert.x.
We will create a frontend for fast bidding that communicates with a microservice written in Java 8 and based on Vert.x.
Oct 16 2015
I certainly do not recommend that you play poker or blackjack at work. However, there are situations where both you as an individual
and your company as a whole must gamble. And the stakes are often high.
Oct 5 2015
In this article I will show you that if you want to implement good logging into your application then you should have
a strong knowledge of logging API, spend some time considering what and when to log and last but not least: remember that
logging is a cost paid in your application’s responsiveness.
Sep 24 2015
Today, in an age of great popularity of test automation, we can observe a growing number of different frameworks which
allow us to write scripts and programs that simulate human actions performed on the website under test. The most popular
solution is Selenium WebDriver framework, which is compatible with the majority of common languages.
Broad compatibility is a big advantage of Selenium especially in cases when we have to write some tests integrated to
our application project, because no matter in which language we write the application, Selenium probably has an API for
that language too. But there are also situations, like writing a standalone test suite, when we can decide which
technology we’d most like to use. Taking into consideration this case, let me introduce to you a short
comparison of three JDK-based technologies:
Sep 16 2015
This is a story about a Team working in Scrum that wanted to turn to Kanban and ended up, deliberately, working in something resembling
Scrum-ban. Scrum-ban basics can be found in Wikipedia. We did not follow all of them.
Sep 8 2015
Switching from monolith to microservices requires a very solid technical ecosystem. One of the most crucial subsystems is
monitoring. But for monitoring to work, you need data to monitor. At Allegro, we decided to use
Graphite as metrics storage and to build our monitoring ecosystem around tools
that integrate with it.
Aug 27 2015
All over the Internet there are code snippets that show how to make a blur effect on Android. But if you want to
introduce blur as a part of your app design and use it as an effect to hide content under dialogs, drawer etc. there is
no ready solution for all UI components. That’s why I wrote the Fogger library.
Aug 24 2015
Consider you are an Android application developer. You created a mobile application for your website and you would like to enable your
users to browse content of your website using a mobile app. It’s easy if a website uses RESTful guidelines for creating URLs.
Problem comes when a website uses SEO friendly URLs. Handling such links is hard because regular expression mechanism in Android manifest is flawed.
Aug 20 2015
Development is an immanent part of every person’s life. Evolution-wise, whoever fails to develop, dies.
Aug 6 2015
Today we would like to share our experience with Apache Spark,
and how to deal with one of the most annoying aspects of the framework.
This article assumes basic knowledge of Apache Spark.
If you feel uncomfortable with the basics of Spark, we recommend you to participate in an excellent
online course
prepared by the creators of Spark.
Jul 27 2015
At Allegro we try to take advantage of all opportunities to learn something new and to share our knowledge with others.
So far, we’ve held a number of internal conferences and meetings, and you may have seen our employees talk at JUGs and
conferences such as Devoxx PL or Confitura.
Jul 9 2015
SOA (Service Oriented Architecture) as a modern approach to build distributed enterprise applications gives us many benefits,
including resiliency and fault-tolerance. On the other hand, there are many new kinds of SOA-specific faults,
like publishing, discovery, composition, binding or execution faults (as stated in
A Fault Taxonomy for Service-Oriented Architecture). Error handling is one of the most
important things to have services right designed and implemented
(see article Error Handling Considerations in SOA Analysis & Design).
In this article, I want to focus only on a small aspect of this broad subject: unexpected service behaviors which,
if not properly handled by the client, can lead to application inaccessibility.
Jul 2 2015
Recently I had a chance to take part in the first edition of a new Python event in Poland, PyWaw
Summit conference. Python has a very active community in Poland, Europe and around the globe.
What sets the community apart is its accessibility and friendliness. After all, as mentioned by Marc-André Lemburg in
his PyWaw Summit day one keynote,
the language is a tribute to Monty Python, and is designed to be fun. The fun factor and friendliness were evident at
PyWaw Summit, a conference organized by Warsaw Python User Group. Being a sysadmin in my first ever
conference devoted to programming only, I felt very welcome and got a lot of very useful first hand information on the
newest features, trends and techniques from Python professionals.
Jun 24 2015
At Allegro we use many open-source tools that support our work.
Sometimes we are not able to find what we want and this is
a perfect moment to fill the gap and to
share with the community. We are proud to announce
Camus Compressor — a tool
that merges files created by Camus
on HDFS and saves
them in a compressed format.
Jun 17 2015
The pace of today’s world seems to be getting faster and faster. Trends, technologies, requirements and possibilities change in a blink of an eye. When I graduated from the Complex of Mechanical, Electrical and Electronic Schools in Toruń (ZSMEiE) 7 years ago,
I knew that one day I would work on the largest projects at Allegro Group as well as I know that many others Students don’t have any vision of their future role in their own life.
After almost 4 years of my career I decided to share my experience with people who face the same choice
I faced 7 years ago.
Jun 10 2015
In the era of NoSQL, SQL language is becoming extremely popular in Hadoop Ecosystem.
Several query engines are being developed to make SQL queries work better and faster
in an environment that totally differs from traditional relational databases.
Jun 1 2015
A lot has already been written about WebP, a new image format created by Google
that provides both lossy and lossless compression of images displayed on the web. However, this solution is still not
popular in web development.
May 29 2015
Groovy is a dynamic, object-oriented programming language for the Java platform. Its name comes
from slang, where “groovy” means “cool”, “amazing” or “fashionable”. This programming
language was designed to be so, but is it still groovy nowadays? Creator of Groovy,
James Strachan, admitted that he wouldn’t have created Groovy if he had known anything about Scala. But his project started living its own
life. Let’s take a look at what it has to offer us now.
May 26 2015
The first question is — what is overmocking? There are a couple of answers. When you mock something that you can leave or
even should use as it is — this is overmocking. An example of this is a POJO object. Other way to overmock your test is
to mock all the dependencies and rely only on verifying interactions with mock objects. You will see that in my
examples. Overmocking can also happen when you mock something that you don’t own like an external library.
May 20 2015
According to Moore’s law the number of transistors
in an integrated circuit doubles approximately every two years. However, the exponential
processor transistor growth does not always translate into exponentially greater practical CPU
performance. Processor manufacturers for years delivered processors with higher clock rates and
instruction parallelism. As a result, single-threaded code executed faster on newer generations of
processors. Of course, it is impossible to speed up clock rates infinitely and processors like
AMD FX-9590 with turbo clock speed at 5 GHz are rather unique.
Today, processor manufacturers favour multi-core processors.
It is common to have a quad-core CPU in smartphones, not to mention laptops or even desktop PCs.
Consequently, software has to be written in a multi-threaded manner to take full advantage of the
hardware. Thread pools can help programmers
harness multi-core CPUs.
May 13 2015
According to best practices, when developing a service, one should provide a client for it.
If your service API undergoes changes quite often, constant client updates may become troublesome.
In this article, I will show you how to develop (quickly and effortlessly!) a JAX-RS client that handles all API changes smoothly.
May 8 2015
At Allegro we use many open-source tools that support our work. Sometimes we are not able to find what we want and
this is a perfect moment to fill the gap and to share with the community. We are proud to announce an
initial release of Elasticsearch reindex tool — a tool that
provides an easy way to rebuild indexes in elasticsearch.