Our Blog

Nuestro equipo de especialistas quiso compartir algunos artículos sobre tecnologías, servicios, tendencias y novedades de nuestra industria en la era de la transformación digital.

Key concepts about acceleration with FPGA

Key concepts about acceleration with FPGA

In our previous article “Hardware Acceleration with FPGAs“, we learned about what programmable logic devices are called FPGAs (Field-Programmable Gate Array), discussed their use as a companion to CPUs to achieve this acceleration, and named some advantages of use versus GPUs (Graphics Processing Unit).

To get a better idea, we will delve into the technical aspects to understand how they generally work, from how acceleration is achieved or how technology is accessed, to some considerations for its use with a software solution.

Key concepts
The two main reasons why FPGAs have higher performance than CPUs would be the possibility of using custom hardware and its great parallelism power.
Let’s take as an example to perform a sum of 1,000 values, in the case of CPUs, which are made up of fixed general-purpose hardware, the process would begin with the storage of the values ​​in RAM memory, then they pass to the internal memory of quick accesses (memory Cache) where they will be taken to load two registers.

After configuring the Logical Arithmetic Unit (ALU) to achieve the desired operation, a partial sum of these 1,000 values ​​is performed and the result is stored in a third register. Then, a new value is taken, the partial result obtained in the previous point is loaded and the operation is performed again.

After the last iteration, the final result is saved in the Caché memory where the information will be accessible in case it is required later, being stored in the system RAM to be a consolidated value of the running program. In the case of an FPGA, the entire previous cycle is reduced to 1,000 registers, where their values ​​are directly added at the same time.

We must bear in mind that, sometimes, the FPGA will have to read values ​​from a system RAM memory, finding itself in a situation similar to that of the CPU. However, the advantage over CPUs is that it does not have 1,000 general-purpose registers that can be given the exclusive use of storing values ​​for a sum. In contrast, a CPU has few registers available to be shared in performing different operations.

An example to understand the power and acceleration of FPGAs would be to visualize that we have a loop of five instructions in the CPU’s program memory, it takes data from memory, processes it and returns it. This execution would be sequential, an instruction per time-lapse, forcing them to get to the last one in order to start the process again.
In an FPGA, the equivalent of each of the CPU instructions can be executed in a parallel block, feeding each input with the previous output.

As we can see in the image, we see that the time elapsed until the first data is obtained is the same in both cases, however, the period in which 4 results are achieved in a CPU is achieved up to 16 in the FPGA.
Although it is a didactic example, keep in mind that, thanks to the average hardware with which FPGAs can be configured, the acceleration could be up to hundreds or thousands of times in a real implementation.

It should be noted that FPGAs used as accelerators that accompany a CPU has spread in recent years. On the one hand, thanks to the high transfer rates achieved by the PCI Express protocol (used on the PC to interconnect the two devices in question).

On the other, given the speeds and storage capacity offered by DDR memories. For what accelerating makes sense, the amount of data involved has to be such that it is worth the entire process of moving it to the accelerator. On the other hand, we must be in the presence of a complex mathematical algorithm, where each step requires the results of the previous step, capable of being divided and parallelizable.

The Hardware Needed for Acceleration
The two main manufacturers of FPGAs, Xilinx, and Intel, offer a variety of accelerator cards, called Alveo and PAC respectively, that connect to the PCI Express buses of a server.
When wanting to include them in our infrastructure, we must consider the specifications of the receiving server equipment, as well as the system configurations and licenses of the development software.

There are services, such as Amazon, that offer ready-to-use development images elastically, as well as instances of Xilinx hardware. Keep in mind that there are also other services, such as Microsoft Azure whose instances are based on Intel devices, or in the case of Nimbix, with support from both platforms, to name a few.

Using accelerators
Accelerator development is a task associated with a circuit design that involves the use of a hardware description language (HDL), although you can alternatively High-Level Synthesis (HLS), a subset of the C / C ++ language. Finally, OpenCL can be used just like in developing GPU accelerators. Usually, this type of technology is binding on Electronic Engineering specialists such as programming experts.

Fortunately, both technology providers and third-parties offer ready-to-use accelerators for known and widely used algorithms. Accelerated software applications are written in C / C ++, but there are APIs available for other languages, such as Python, Java, or Scala.

In case you need to perform any additional optimization, you will need to convert C / C ++ applications on a client/server, create a plugin, or perform a binding. In addition, there are also frameworks and libraries ready to use without changes from the application, related to Machine Learning, image, and video processing, SQL and NoSQL databases, among others.

From Huenei, we can accompany you through the adoption of this technology. After analyzing your application, we can offer you the infrastructure that best suits your processes. One option is advice on the use of available frameworks, libraries, and accelerated solutions, which do not require changes to the source code.

Another alternative is refactoring using a special API with custom accelerators, or directly initiating developments with a view to using these solutions. In any case, you will have the guide of specialists who are up to date with the latest trends in this area, which are so necessary in order to face the challenges of data with exponential growth and the use of computationally complex algorithms.

Tools to make an Interactive Prototype

Tools to make an Interactive Prototype

The creative process to design an efficient interface and user experience is crucial in a Mobile Application Development project, since important variables depend on it, such as the adoption rate of end-users, as well as the general satisfaction index.

For this reason, software development companies place a lot of emphasis on optimizing the design and approval process, validating all proposals before starting the development phase, which is the one that consumes the most resources; resorting then to the use of tools such as the Interactive Prototype.

Today, there are many tools that provide the opportunity to review all phases of a project, stimulate feedback among team members, and not least: it gives us a fairly clear idea of what the project experience will be like. user.
Taking into account the importance of this phase in a development project, we have compiled the best tools to make an interactive prototype:

It is an application produced for MacOS, widely recognized and used by the most demanding designers to create interactive and animated prototypes in software development. Among its main functionalities, we could name the following:

  • Animated transitions:Flinto has an excellent transition designer that allows you to create your own animated transitions in a very simple way. You do not need to schedule, or schedule, the transition designer is quite intuitive, you just have to place any element where you want and it will be ready.
  • Various behaviors: With the behavior designer you can create micro-interactions within the screens, a perfect function if you want to add loop animations, buttons, scrolling animations or switches.
  • Scrolling feature: You can add scrollable areas with just one click and also create amazing animations based on the scrolling found in the behavior designer.
  • Drawing Resources: excellent drawing tools that will allow you to design simple models to your liking or edit texts and shapes inserted from Sketch. You can even make animations of vector curves.

Learn more about Flinto on their website.

It is a fairly intuitive and dynamic tool for creating prototypes “all in one” recommended for applications and web pages, with it you can review from wireframes to highly interactive prototypes.
JustInMind will allow you to start a project from the beginning, for example, go from clickable wireframes to 100% interactive prototypes in order to have a very broad idea of mobile gestures, online interactions, making the UX / UI work easier. Among its main functionalities are:

  • Efficient design: with this tool you can choose the size, style and distribution of all kinds of elements in the user interface in order to adjust it to the appearance of your screens.
  • Online interactions: You have the possibility to design web experiences through a wide catalog of interactions and animations, ranging from simple links to increasingly complex interactions.
  • Infinity of mobile gestures: You can choose from a wide variety of gestures that will allow you to slide, move, touch, rotate and even pinch the prototype of your mobile application.
  • Liquid design: defines liquid containers thanks to which the elements of a page will be able to adapt without problems to the different screen sizes, aspect ratios and orientations.
  • Automatic size adjustment: It will allow you to instinctively change the size of the groups of elements on each page, saving multiple changes in the software design and giving a real space for creation.
  • Featured Object Attachment: This feature enables object retention in containers or displays, a feature that combined with free movement provides more responsive experiences.

Want to know more about JustInMind? Check their official site.

This tool gives you the facility to share and comment on a project live with the client, making it an excellent strategy to manage and streamline times and processes.
You can also manage the versions of your projects by synchronizing Illustrator or Photoshop with the app, preventing you from getting lost in a maze of folders and layers of various files. Some of its features include:

  • Presence of click and over-click: You can choose between click or scroll access points to indicate what are the user flows in the prototype.
  • Access points to other windows: InVision enables you to configure links that link to other screens in your prototype, external URL style, anchor points, quick access and more.
  • Template design: thinking about those recurring elements such as menus, this function enables you to configure templates with access points for this type of need and apply them globally to the prototype through a click.
  • Gesture Inclusion and Transitions: Gestures like double tap and swipe can be added to show interactions in the prototype and enhance the user experience in real life.
  • Various interactions and animations: Introduce animations such as pulling down or to the right to reveal the interaction capacity of your prototype.

Check Invision website to know more about their tool.

Are you not clear about the benefits of making an Interactive Prototype? We let you know in our blog post “Benefits of making an interactive prototype“.
Fluid UI
Ideas can be prototyped in no time thanks to Fluid UI, and not only that, it is possible to share, collaborate and feed back with the opinion of your team, recommended for small applications.
Design the layout of the primary views of your app linking each view to controls that connect with others, giving way to a more interactive, dynamic and representative demonstration of the final result. Its main characteristics are:

  • Effective prototyping: it has a fairly complete and pre-built user interface kit to design materials, Wireframing, iOS, among others.
  • Collaboration in real time: provides the possibility for the entire team to work simultaneously on the same prototype.
  • Dynamic previews: Adding interactions to your prototype will be more fun, efficient and productive thanks to the visual linking function.
  • High and low fidelity: Fluid UI is compatible with any style you require, regardless of whether it is a high or low fidelity prototype.
  • Access from any device: it is possible to access the prototypes in the desktop app or by logging on to the Internet, without any problem.
  • Mobile testing available: With Fluid UI you can test your prototypes on various mobile devices, such as phones or tablets, through free playback apps.

For more information about Fluid UI, visit their website: https://www.fluidui.com/

Perhaps its most outstanding feature is the inclusion of an engine that allows you to create animations for mobile applications through a timeline that will determine how long the animation will last. Other of its functionalities are:

  • Easy drag and drop action: Special for moving files from the desktop directly to the panel for quick loading, making it easier for you to find all your assets.
  • Masking Tool: Mask, crop, frame or create animations without leaving the Proto.io editor.
  • Various animations available: They include scale, move, rotate, resize and fade and can be applied to any element.
  • Actions: With an extensive series of actions, you can navigate, use logic, control emails, GIFs, audios, videos, switch screens, make a call, visit a URL and more.
  • Export as HTML: Ideal for previewing and storing the project even offline, as well as for downloading all Javascript, CCS, and HTML files plus all project assets.

At https://proto.io/ you will have the opportunity to know all the details of this tool.

The good user experience is becoming an end rather than a means thanks to the weight it has on companies achieving their business objectives.
A satisfied user is not only more likely to use our application more, increasing the possibilities of monetization, but also tends to recommend it more, allowing more users to be reached without investing so many resources in marketing and recommendation.
If you want to know more about our development services, we invite you to visit our Mobile Development page.

Hardware Acceleration with FPGAs

Hardware Acceleration with FPGAs

The revolution derived from the rise and spread of computers posed a before and after, standing out in the dizzying
The root of this development was the born of the CPU. As we well know, these are general-purpose devices, designed to execute sequential code. However, in recent years, high computational cost applications emerged, which generated the need for specific hardware architectures.

One solution consisted of creating graphics processors (GPUs), which were introduced in the 1980s to free CPUs from demanding tasks, first with the handling of 2D pixels, and then with the rendering of 3D scenes, which involved a great increase in their computing power. The current architecture of hundreds of specialized parallel processors results in high efficiency for executing operations, which led to their use as general-purpose accelerators. However, if the problem to be solved is not perfectly adapted, development complexity increases, and performance decreases.

What are FPGAs?
Both CPUs and GPUs have fixed hardware architecture. The alternative with reconfigurable architecture, are the devices known as Field-programmable Gate Array (FPGA). They are made up of logical blocks (they solve simple functions and, optionally, save the result in a register) and a powerful interconnection matrix. They can be considered integrated blank circuits, with a great capacity for parallelism, which can be adapted to solve specific tasks in a performative way.

What are they for us?
The general concept behind the use of this technology is that a complex computationally demanding algorithm moves from an application running on the CPU to an accelerator implemented on the FPGA. When the application requires an accelerated task, the CPU transmits the data and continues with its tasks, the FPGA processes them and returns them for later use, freeing the CPU from the said task and executing it in less time.

The acceleration factor to obtain will depend on the algorithm, the amount and type of data. It can be expected from a few times to thousands, that in processes that take days to compute translates it down to hours or minutes. This is not only an improvement in the user experience but also a decrease in energy and infrastructure costs.
While any complex and demanding algorithm is potentially accelerable, there are typical use cases, such as:

Deep / Machine Learning and Artificial Intelligence in general
Predictive Analysis type applications (eg Advanced fraud detection), Classification (eg New customer segmentation, Automatic document classification), Recommendation Engines (eg Personalized Marketing), etc. Accelerated frameworks and libraries are available such as TensorFlow, Apache Spark ML, Keras, Scikit-learn, Caffe, and XG Boost.

Financial Model Analysis
Used in Banks, Fintech, Insurance, for example, to detect fraudulent transactions in real-time. Also for Risk Analysis (with CPU, banks can only perform risk models once a day, but with FPGAs, they can perform this analysis in real-time). In finance, algorithms such as the accelerated Monte Carlo are used, which estimates the variation over time of stock instruments.

Computer vision
Interpretation of Medical or Satellite Images, etc. with accelerated OpenCV algorithms.
Video processing in real-time: Used in all kinds of automotive applications, Retail (Analytics in Activity in Stores), Health, etc. using OpenCV accelerated algorithms and FFmpeg tools.

Big data
Real-time analysis of large volumes of data, for example, coming from IoT devices via Apache Spark.

Data centers
Hybrid Data Centers, with different types of calculations for different types of tasks (CPU, GPU, FPGA, ASIC).

Cryptography, Compression, Audit of networks in real-time, etc.

Typically, accelerators are invoked from C / C ++ APIs, but languages such as Java, Python, Scala or R can also be used and distributed frameworks such as Apache Spark ML and Apache Mahout

Some disadvantages
Not all processes can be accelerated. Similar to what happens with GPUs, applying this technology erroneously entails slow execution, due to the penalty for moving data between devices.

In addition, it must be taken into account that a server infrastructure with higher requirements is required for its development and use. Finally, to achieve a high-quality final product, highly specialized know-how is needed, which is scarce in today’s market.

In recent years, FPGA technology has approached the world of software development thanks to accelerator boards and cloud services. The reasons for using them range from achieving times that are not otherwise met or improving the user experience, to reducing energy and accommodation costs.

Any software that involves complex algorithms and large amounts of data is a candidate for hardware acceleration. Some typical use cases include, but are not limited to, genomic research, financial model analysis, augmented reality and machine vision systems, big data processing, and computer network security.

How to carry out an AMO process?

How to carry out an AMO process?

Regardless of industry or size, the businesses that operate globally today rely on commercial application systems to stimulate production chains, manage markets, maintain connections with partners and customers, and drive operations in the short and medium-term.

Therefore, many companies need to outsource application management, but they have no idea how much they need it, or how soon they should have it. If you consider that your company may require this process and need more information, in the next section we will tell you how to determine it and how to carry it out successfully.

Determine the scope and need of your company
We often find companies where their comparative advantage and focus of their business rely heavily on technology, but not only in-house for a single department, but also for processes that support the entire company.
Therefore, it turns out to be more efficient and even profitable to opt for Outsourced Application Management. To determine if this is one of the needs of your company, answer the following basic questions:

Do we have identified which technological activities and processes will be of great support to manage my business more efficiently? Do we have difficulty finding, hiring, and retaining technology-savvy professionals? Do we have sufficient command of technological platforms and applications by ourselves? Can we keep them updated without a problem? Do we want to manage a trained in-house team to face all the challenges that the company’s technological management requires?

By answering these questions, you will quickly and easily determine the needs of your company against AMO.

Types of outsorcing and their strategies

Total subcontracting:
In this sense, the provider will be in charge of comprehensively managing all the activities related to the support, improvement, and optimization of the applications belonging to the company. This type of outsourcing should provide technological services, and in turn, provide ideas and recommendations to economize, improve and evolve applications, taking into account new business requirements. In addition, it will be responsible for implementing appropriate digital innovation initiatives and business continuity plans in the event of unexpected situations (such as the COVID-19 pandemic).

Selective subcontracting:
This type of OAM consists of entrusting the provider with only a very specific part of the management of the company’s applications. Their responsibility may be related to troubleshooting or updating and improving resources, or they may also encompass a group of objectives such as monitoring, management, troubleshooting, and application maintenance. This type of outsourcing is recommended for those areas that are more complex than individual tasks but do not interfere with any more complete process.

Some tips to get the right partner for your project
To choose the right partner for your company, the first thing we must take into account will be some fundamental details of its preparation and technological mastery. For example:

  • Must possess sufficient technical knowledge of various technologies and be able to provide feasible solutions.
  • You must have experience in agile service delivery methodologies that allows you to understand which is the most efficient way in which you can divide a project into several phases.
  • The partner must be scalable, that is, there must be the possibility of adding more members to the team if necessary to meet the times of a project.
  • The cost-benefit ratio is another important point for outsourcing. The number of hours to allocate and the seniority of the team are some of the elements that should be examined calmly before closing a contract.
  • Consider looking for a partner that can align in terms of time zone, this way communication will be much more fluid.

Once we have found the professional who adapts to all our needs, it is time to create a favorable work dynamic whose organization is key to achieving the proposed objectives in the expected time. Some of the actions that as a company you should take into account are the following:

Define your expectations with this process
It is important that the partner knows exactly what is expected of their work and why they were selected, this will help to lay the foundations for a good business relationship, as well as a better performance of the project. From this, the service measurement indicators can be identified.

Provide your partner with all the necessary knowledge about the industry
A checklist of the activities or processes required is not the best option, it is necessary for your partner to internalize the needs of the business, what are the final customers and what do they need, what are the expectations of the industry, among others. Involve this professional as part of the work team, as another member of the company, and it is very likely that you will get better results. In Huenei, the first phase of the AMO service execution is the training and knowledge transfer of those who are currently responsible for the applications.

Don’t forget to measure and compare
To understand what you can improve and how the overall performance of your project has been, it is important to keep the correct and updated metrics. In this way it will be possible to implement the corrections that the area requires instead of having setbacks or continuing with inefficient strategies. At Huenei we issue monthly metrics to our clients to measure the quality of the service (some graph can be included).

Define your company’s strategy
It is extremely important that your partner understands the path they must follow, what are the phases and objectives to be met in the short, medium and long term without needing to come to a standstill and ask “now what next?”. The annual planning of the service allows us to have a roadmap to assign the requirements of the business needs backlog.

Determine clear delivery dates
Maintaining an updated roadmap that indicates which processes or platforms will be outsourced and in what time, will be decisive in obtaining the expected results and without delays. This allows your partner to identify the demand for resources.

Never stop asking yourself “how can we improve”
Continual improvement is undoubtedly the key to successful work when it comes to outsourcing. Keep the entire team motivated and informed about every relevant aspect of the business and always ask how they can continue to add value to the work they do.

We are in an increasingly competitive world, so it is important that companies can implement more efficient systems to meet the needs of their customers and continue to improve within the industry.
In this sense, spending time and money optimizing your own resources and systems with the help of technology experts, as outsourcing is, is undoubtedly one of the smartest and most profitable ways to grow your business.

Main benefits of RPA for your company

Main benefits of RPA for your company

The technology of the new era is designed to reduce costs, increase productivity and provide clearer management of the processes and practices carried out by the company. It is proven that a robot works faster offering better results.

Because everything needs to be auditable and measurable, human intervention has lagged behind, being overtaken by RPA (Robotic Process Automation), a game-changer capable of saving time and money by performing tasks. repetitive manuals much more efficiently.

What is RPA and what is it for?
Robotic process automation is the mechanism that enables us to program software, making it possible for a machine to imitate and complete many human tasks in digital systems in order to operate any business procedure.
In the same way that a human would, these “robots” manage the user interface of a computer system to compile data and manipulate applications, they also perform interpretations, execute responses, and are capable of interacting with other systems in order to perform a great variety of repetitive tasks.

The use of software robots such as these represent savings and increased efficiency for any company since the machines do not require rest, they do not make mistakes, they are not distracting and they are less expensive than a human employee.

Integrating RPA represents an important difference if we take into account traditional IT integration mechanisms, which have always been based on Application Programming Interfaces (APIs), a form of interaction between machines supported by data layers that operate in an underlying architectural layer of the UI. Instead of being “trained” through instructional development based on multiple codes, APIs are configured or programmed through demonstration steps.

RPA instead can be “trained” more effectively, demonstrating that software robots are virtual workers who can quickly learn from a business user. However, there are some other substantial differences that we will examine below:

RPA Vs traditional automation

  • Implementation: RPA is focused on a simple, learn-and-repeat form of automation that has a faster response time than traditional automation. The best part is that RPA does not require complicated programming or test execution.
  • Target customer: RPA is perfect for technology-oriented SMEs, where they can train robots on how to handle traditional automation projects when they need developers as well as a significant input in information technology.
  • Personalization: Unlike traditional automation, RPA can be customized according to the needs of each user and can be applied to both personal and business applications. A good example of personalization would be a bot that extracts information, responds to emails, and even responds to chats on social networks associated with the company.

Main benefits of RPA

  • Economical workforce: In the past, automating did not reduce jobs, however, this scenario may change with the latest report from RPA providers where they estimate savings of 30% to 60% for companies. This translates to savings in hiring, retention and settlement costs.
  • Optimized resources: with RPA, slow dynamics are left behind and subject to possible errors, such as employees who manually enter forms in different systems or manually copy data between systems, delaying the efficiency of the service provided by a company. Software robots can be trained in a short time to provide the highest performance.
  • Total focus: allows employees to focus on enriching activities for their position and for the company, resulting in a significant improvement in the service it offers, as well as stimulating their ability to innovate and solve problems in other areas.
  • Optimizes regulatory compliance and data analysis: Any process carried out by the RPA promises to be highly thorough so it can be audited without a hitch. Virtually all manual errors are eliminated resulting in higher quality data allowing for more reliable analysis. Perhaps the most plausible feature is that software robots interact with legacy or older systems, finding data that was previously difficult to extract.

Some cons of using RPA

Since most companies do not have defined and organized processes, it can be cumbersome to switch to RPA. Many companies choose to automate this to compensate, but they automate the wrong areas or get confused by reverse-engineering the intent.
RPAs are great at carrying out predictable, repetitive, and rule-based processes, they are not good when faced with variability. Some weaknesses in RPA arise when compared to decision-making typical of human thought.

When the human works in a repetitive but variable work, they usually apply a level of lucidity at work that can generate calls for attention, questioning, questions to others and necessary doubts when something in the dynamics they carry out seems abnormal or out of place. However, although this characteristic can be modeled in RPA, it is truly difficult to achieve, so the variability is not as positive for this type of robot.

Also, RPA does not react well to changes, not even small changes. If a dependent system changes, the processes manipulated by RPA may not be assimilated with the ease that the human being assimilates the changes and improvises without realizing it.


RPA has a great ability to eliminate repetitive manual processes that consume too much time, increasing productivity in other areas, such as in the daily work of an accountant. Robotic process automation improves the efficiency with which accurate data is delivered, as well as providing real-time access to financial data and various types of reporting and analysis.

Automating using RPA helps to better manage the work carried out by the work team, guaranteeing greater freedom to cover other areas that require the workforce or the human spirit.