We are searching for an accomplished PHP Developer to join our team.


  • Create quality solutions 
  • Developing code as per the business necessities 
  • Communicating and sharing knowledge with other skilled professionals in the team 


  • Proficiency knowledge of PHP, Drupal, JavaScript and jQuery / at least 3 years experience
  • Extremely fluent with HTML5/XHTML and CSS
  • Experience with source control system such as Git 
  • Experience in building user interfaces for websites and web applications
  • Great team player 
  • Fluent English

If you are interested please send us your CV, portfolio or GitHub profile on jobs[at]re4m.com.


How to choose the right IT company for your business

You have tirelessly worked for many years to be at the point where you are now. You have a successful business and you care for its growth. But the growth comes with new challenges. We live in an era where the customers want more, better, more efficient, faster, no matter what industry you are working in. On the other hand, you heard some rumors that your competition is already working on a new product or a service, and it seems like they have a better web presence and maybe a modern mobile application too. And you have that old looking program which is down for a third time this week! What can you do?

Investing in a quality IT services is a must nowadays. The term IT service may include a wide range of different services: designing a website, developing a custom program or a mobile application specific for your business, overcoming technical problems, IT training for your employees or technical support for the recently developed program.

  1. Be sure what you need

First of all, you should have knowledge what your business truly needs. Is it a completely new website or only the content should be updated? Does your business need 24/7 professional technical support or just occasionally, when an incident happens? Do you want to develop a mobile application for your product? Maybe take a step further and represent it through AR/VR application? One possible solution is to make a list of all websites or mobile applications which you like in order to have them as a reference when presenting to the IT team. Or complete a list with all the IT problems you are currently facing. Another important thing you should have in mind is a budget. You know best how much you can invest in IT services or improved infrastructure and should present that budget to the IT company’s manager as well.

2. Make a research and list of all possible partners

After you make a list with all the responsibilities you expect the team to accomplish or maybe the range of technologies which should be used, the next step is to do a research about the companies offering those services. Extract keywords from the list and use them to filter the companies. Maintain an Excel or any other document to fill in information for better insight – details like company name, services they offer, country they are operating in, contact details and any other details you will like or dislike about them. This document will be of great help later, when you should contact and arrange meetings with them.

3. Visit their website and social media

A company’s website is the first place a potential client visits. Here, you can get an insight on the company, read their history, meet the team members, see their latest projects and the services they offer. If an IT company doesn’t have a website, or has one that looks pretty old, that is often a bad sign. At least they should have a “Maintenance mode” web page informing the potential clients. Having active social media profiles is important as well. Through social media, you can learn many things about them too. Are the social media profiles maintained regularly or just from time to time? What is the content like? Do they organize some kind of workshops or have knowledge sharing sessions? Do they attend conferences or events organized by the IT community? These questions can help you find out more information about the company you are likely to begin working with.

4. See portfolio and ask for code/work samples

Have a look at the use cases and the work samples from their portfolio. Do not be afraid if you  cannot find too many items in the Projects section -maybe they’re currently working on something or have a confidential agreement with the client. But you can contact them and ask them directly about the projects they have completed and about everything else they can do for you.

5. Ask for recommendations

Many companies often have testimonials on their website from clients or partners who work with. If you cannot find any, you can always ask for one from their previous or current customers. On the other hand, you can use your network and ask them to recommend a team. Another approach is to ask for it on the social media channels or groups.

6. Arrange a meeting and ask questions

He who asks a question is a fool for five minutes; he who does not ask a question remains a fool forever – A Chinese proverb.

Ask the short listed companies for a meeting – no matter whether using a third-party software like Skype or the meeting is in person.

Do not be afraid or ashamed to ask questions and have an honest conversation with the representative on the meeting. Prepare a list of questions before the meeting and talk to the manager about them, no matter how unimportant they may seem at the moment. You will be surprised how many things will be clearer and more understandable to you.

The same thing applies for the interviewee as well – if they seem like they know and understand everything from the first glance – something is wrong. Another bad sign is overconfidence and not listening to client’s expectations and demands.

7. Ensure good communication

Communication is one of the most important skills in our everyday life, especially in business. A person can be the best professional, but if he/she lacks communication skills, no one can see the potential. Having good and regular communication with the IT team is essential for successfully completing the project or for regular maintenance. Maybe having weekly meetings or they should write monthly reports? Maybe the communication should be on a daily basis so the team has to include you in their chat system? Whatever communication method you are using – email, chat system, phone or meetings in personal, the most important thing is to say and listen. That’s the only way for ensuring progress and building a good relationship with your future IT partner.

8. Make a contract

The journey for finding the right IT partner finally comes to an end! You have successfully gotten better your business’ needs, spent time researching and contacting a large number of IT companies, went through their profiles and had a number of meetings. Now you have to make a decision. But how to know if it’s going to be the right one? The truth is – you cannot truly know. But from all the teams you have gone through a meeting, one or two teams marked all the checkboxes on your list – they have consistent clients, they are here to explain everything for the technology or the process itself. They also have an open channel for communication and can be here for you anytime you need anything from them, even if it is only a tip or advice. They can negotiate about the budget as well and are ready to listen to your business needs. The next and last step would be to prepare a contact and start working together.

If you are looking for a consistent, efficient and trustworthy IT partner, do not hesitate to contact us and schedule a call.


Mithril – Getting Started

This is the first blog of the technical series for the client-side JavaScript framework – Mithril

Nowadays, there are many JavaScript framework options which make developers’ lives easier, and the choice of which framework to work with on your next project can really be a tough one. Today, in terms of usage, Angular and React are the leading frameworks, with Vue.js constantly increasing its popularity. And then, there’s Mithril.

Mithril is a very compact and fast framework for building Single Page Applications and supports all modern browsers. According to the framework comparison chart on the official Mithril documentation website, we can see the following:

Framework Download size Update performance Documentation
Mithril v.2.0.0 8 kb 6.4 ms Well-written, easy to understand
Angular v2.0 135 kb 11.5 ms More complex than the others
React v 64 kb 12.1 ms Well-written, easy to understand
Vue v2.0 40 kb 9.8 ms Well-written, easy to understand

Table 1: Performances based on benchmark tests

According to the data presented in the table, we can see that Mithril has shown better performance in comparison to the other frameworks.


There are several ways to add/include Mithril.js in your project. The following are the quickest and easiest ways of including Mithril:

Directly in the JS file

By installing the package in your command line interface (CLI)

  • NPM – Using the command:
    $ npm install mithril --save 

    and including it by using  “require(‘mithril’);” or “import m from ‘mithril’

DOM elements

DOM(Document Object Model) is the way Javascript sees its containing pages’ data. It is an object that includes how the HTML/XHTML/XML is formatted. Examples for DOM elements include html, body, div etc. You can use CSS and add classes or id to DOM elements in order to style them and JavaScript to interact with them.

The m() function is one of the most important in Mithril.js. It is used to render any HTML components by calling it.

The m() function contains the following parameters:

  • selector – (required) This argument is of type String or Object. It is required and can be a CSS selector or component.
  • attributes – (optional) This argument is of type Object. It an optional argument and refers to HTML attributes or element properties
  • children – (optional) This argument is optional and can either be a renderable object (m calls or strings), or an array of them

The m() function return a vnode.

Example 1:

See the Pen Mithril – Example 1 by Monika Jandrevska (@monika-jandrevska) on CodePen.0

The m.render() function generates a virtual DOM tree and mounts it to the document.body. The document.body represents the <body> or <frameset> node of the current document. The “Hello World” string is example text that would be rendered.

Example 2:

See the Pen Mithril – Example 2 by Monika Jandrevska (@monika-jandrevska) on CodePen.0

This example shows how to express a paragraph with class paragraph1 and text “My frist paragraph in Mithril”.

The HTML output of the expression above is:

<p class=”paragraph1”>My first paragraph in Mithril</p>

Example 3:

See the Pen Mithril – Example 3 by Monika Jandrevska (@monika-jandrevska) on CodePen.0

This example shows how to handle multiple DOM elements. A div which acts like container, with class wrapper holds two child nodes – heading with class title and text “My first app in Mithril”, and button with text “Click here”.


A Mithril component is basically an object with view() function. Using components in Mithril has several advantages:

  • Maintainability – Make change in only one file instead of making the same change in large number of files.
  • Reusability – Develop a component and use it whenever you need. Example for it is a Header component in a SPA.
  • Well-structured code – The usage of components decreases the complexity of the code. The code can be easily structured if there are several components instead of one big messy file
  • State data –  Data can be passed as an argument and used via this.vnode.data
  • Lifecycle callbacks –  Lifecycle callbacks are functions which called at various points during the lifetime of a component. (More about lifecycle methods in the next blog)

See the Pen Mithril – Components by Monika Jandrevska (@monika-jandrevska) on CodePen.0

In this example, Screen1 component is created using the view function. The return statement contains a div container with another div element in it and a button, when clicked, the alert function is called. The alert function simply prints text in the console. The m.mount() function, as the name implies, mounts the component to the virtual DOM. This component can be activated with the following line of code:

m.mount(document.body, Screen1);

The difference between m.mount() and m.render() is that m.mount() activates Mithril’s auto-redrawing system. According to the code above, the following HTML structure is created:


     <div class=”title”>Title</div>

     <button>Click me!</button>



Since one-page applications are very rare, we should find a way to navigate through different pages of the application. This is where routing comes in. It literally means ‘jumping’ from one view to another. It is used to navigate users between different views of the application.

The following example takes a user from Screen 1 to Screen 2:

See the Pen Mithril – Routing by Monika Jandrevska (@monika-jandrevska) on CodePen.0

The #! Is called hashbang and is used to indicate that after the ‘/’, follows a route path.

If the application has several views, then m.route() is used:

m.route(root, "/screen1", {//default route
"/screen2": Screen2, //route for view called Screen2
"/screen2Details/:id": Screen3, //route for view called Screen2Details with id as parameter
"/screen4": Screen4, //route for view called Screen4

The route after the root component is a default one, and if something is wrong with the specific route or the component, then Mithril renders the default root.


XHR(XMLHttpRequest) is a method for communicating with the server. Mithril provides it’s own implementation (m.request) making XHR requests easy and attempts a redraw upon each XHR completion.

I will use REM as server for testing requests, which has also CORS enabled and can be accessed from anywhere. This server is used in the official documentation as well.

Here is an example of request for getting a list of users:

var users = []; // initializing an empty array called users
var listUsers = function(){
            method: “GET”,
            url: “http://rem-rest-api.herokuapp.com/api/users”,
            withCredentials: true,

The m.request() function contains the following parameters:

  • Method – which type of action should be used, e.g other methods are PUT, DELETE, POST
  • Url – an url for the endpoint
  • Data – the actual data we are sending or receiving from the server (optional parameter)
  • withCredentials: whether to enable cookies or not


Mithril is very approachable, especially for beginners. It’s a tiny and elegant framework. It’s fast rendering structure is well-suited for different kinds of projects. Mithril.js is a fast and compact framework. The documentation on the official website is easy to read and implement.

This first blog covered the introduction to Mithril, the performance comparison to similar frameworks, as well as explanation and some simple examples for components, XHR and routing.

The next blog will be dedicated to Mithril key concepts – vnodes, the autoredraw system, keys, lifecycle methods and components. Stay tuned and read our blogs at: https://re4m.com/blog/.



Online Marketing for Beginners

Marketing your product online helps you to connect to more customers and increases your chance of getting in more sales and reaching that online marketing success. However, if you are one of those people who are just starting to venture into this online business you may find it hard to setup a strong base in this market.

Thankfully there are a lot of successful entrepreneurs who are willing to help and share their knowledge to make your online business venture a feat and fruitful one. There are also a lot of options and tips online that you can undertake should you wish to be successful in this field. Below are some tips that you might want to consider when starting your online venture:

As a starter in the business it would be beneficial to have a professional website that is easy to navigate and provide information to customers fast. Having presentable and professional web pages and online accounts also helps an entrepreneur or marketer get better impression from visitors and customers and would likely lead to a beneficial transaction between parties. Checking the current trend in the design industry helps a lot on giving you an idea of what a professional website should look like.

Attend webinars of well-established marketers, attend to as many as you can until you are confident you have learned enough knowledge from them. It doesn’t matter if your field or niche is different as theirs, what matters is that you learn how they deliver their webinars to their audience and how they establish a connection with them. Learning how to deal with customers properly in real-time would help you build a strong connection with them and it makes you provide your message and sales pitch more easily.

Ask expert advice and don’t be afraid to partner with some established marketers. There are a lot of generous online and offline consultants that are more than willing to share their knowledge to aspiring individuals in the market, don’t be afraid to approach them. Partnering with some of the well-established consultants in the market today does not only benefit you to gain more knowledge from the business but it also helps you get some leads. And leads are important if you wish your business to last long and be successful.

Online marketing and consultancy business requires a lot of time, effort, enough skills and most specially connections if you are still establishing your name. It may not be easy at first but if you get utilize the appropriate tools for your business and acquire the right knowledge things will be a bit easier. Always make connections with new and old individuals in the market, you will learn exciting information and get a better grasp of the business as you move towards imprinting success on your name in the industry.