User Experience (UX) and User Interface (UI) are among the most complicated, misused and misinterpreted terms in software development. In the last few years as an industry, we’ve been focusing on responsive and intuitive designs of interfaces in the contexts far beyond mobile apps. Non-responsive and unintuitive designs have been rightly ditched. That is why good UX is so important. The product must be well-designed if it is to attract users. In addition, to satisfy the user, a friendly and simple look is essential.
The terms UX and UI designs often go hand in hand, and are often confused. So what do they have in common and what are the differences? In both cases the aim is the same – to help the product succeed. But can it be achieved by focusing only on one of the areas?
A few weeks ago my workmate asked me a question: “How does the Spring Framework handle a self-invocation on a creation of beans?” He was thinking about a situation like this one:
Recently I have been working on some code in which I was using ThreadLocal variables. This give me possibility to chew over the ThreadLocal variables concept again. The basic idea of this approach is quite simple. Every thread has its own copy of a ThreadLocalMap. When you ask for the value of the ThreadLocal variable it will search for this value in the ThreadLocalMap variable instance of the current thread.
The larger a project, the harder it is to test the code, and with most of the tests being functional – we have to face the problem: we finalize the task, the user story, or close the entire sprint and we have to wait for the tests for hours. This process can be vastly accelerated, even in legacy applications from the era of the PHP 4.
Above all, it is worth introducing unit tests into the new code – extract dependencies outside the code and test what is actually being developed. The tests are supposed to check our logical code, not the library or ORM. The introduction of unit tests is, however, a long-term step that does not give immediate results, which is why I’d like to show you what can be done on top of that.
Firstly, it must be said that one could write a book about the subject and still barely scratch the surface, so I’ll keep this article very brief and only touch upon the practical aspects based on my own experience – assuming a more difficult scenario, when the project has a lot of tests using the MySQL database.
The “why” part
I am sure that if you’ve not been using docker so far, you’ve heard about docker and most probably you’ve read about it. It’s been a very popular topic for at least few years now. So I assume you have at least some knowledge about it.
I don’t want to describe the architecture of docker. There have been thousands of articles, webinars and screen casts about it.
We’ve recently had a spike in our sprint to check out blockchain technology. The goal was to assess it and check potential use in our FinTech scenarios rather than implement anything. We obviously started with bitcoin – blockchain’s No 1 implementation.
There are many resources on the Web explaining how it works (starting with their WIKI). It requires some time to understand it but it’s not a rocket science. One of our younger team members managed to go through it without problems and effectively explained it to the rest of the team.
Our names are Justyna Setlak, Szymon Matwijów and Julian Pszczołowski. We are students who did an internship in Fingo during 2016 summer holidays.
Our task was to create a server whose API one can use to authenticate and authorize users – something like login in with Facebook – and a web app to manage the server comfortably.
We were using .NET Core 1.0.0, .NET Framework 4.6.1 and Jenkins as a continuous integration tool, which was building, testing and publishing the code. It was really a surprise to us that we had to work in ASP.NET Core 1.0.0 instead of an earlier version.
Laravel supports various cache drivers out of the box. One of them is Redis. I am not going to describe Redis with it’s features and advantages here, it’s not the purpose of this document. The only important point in scope of this document is that Redis supports tags. Feel free to google a bit what is „cache tagging”.
In many cases configuring a new server is a repetitive task. Once the operating system is installed, we have to add accounts for administrators, install some basic packages, setup the application and secure everything. Even though there are some differences between servers designed for two different applications, certainly there will be some common things too. Especially in case of the same technology (not to mention exactly the same stack, like Symfony + nginx + MySQL).
For almost two years we’ve used Ansible at FINGO for preparing configuration of servers. This allowed us to spend more time on creative and interesting things, since the repetitive tasks were written once and now we can just include them from some common modules.
At FINGO we promote a culture of maturity and lasting relationships. This helps us build better software and deliver value for our clients in the long run.