Let me bring you into my world

You’d wonder what can keep somebody working in an office, at a desk, and talk with different people from all over the world every day, some of them angry and anxious, others frustrated or just annoyed because of the color of a button.

The answer is that it’s just amazing how wonderful the feeling can be of assisting someone and managing to resolve different issues - some of them simple, some complicated that can involve numerous tests, or sometimes backend assistance; sometimes it’s just about asking the right questions, other times complex troubleshooting might be required.

As a help desk analyst job, you’ll have to connect with customers, understand their experience with your application, and assist them in knowing the product inside-out, but most importantly offer them the assurance that the product they’re using will bring them to success in their own business.

It takes a certain mix of skills, personal characteristics and values to really make it in a support career. Providing outsourcing support services for international companies allowed me to connect with people from all over the world and from different cultures, people with different restrictions and needs depending on their country or region. What I can tell you is that I do remember every conversation with these people, no matter the nation or language barriers. I spoke with amazing people that were looking for “better”, for quality, for improvement and I verily appreciate and respect each and every one of them.

Besides the customers that you’re working with every day through different communication channels, there is the team you’re part of.

My background is in IT and Education Sciences. I’ve combined my knowledge from these two areas and it seems that they go well together, as they’ve helped me over the last 4 years since I started my career as a technical support analyst.

Somehow, I have passion for the role I took, but the most importantly I find joy in my day-to-day tasks and this is also because I work with wonderful folks and I am here referring to my colleagues.

I started with Intelligent Bee almost a year ago, I still remember the first day when I came in for the interview - being a shy person, sometimes I feel uncomfortable in new situations or with strangers, but the people I’ve met here gave me confidence and comfort. They make me feel as part of the team and have done so even when I was still in the interview process. My ideas and needs were listened to and still are - no matter if it is the CEO or my manager, the HR, the colleagues from dev or support, I’ve always been encouraged to stand up for my ideas and have been helped to achieve my goals.

Well, all of these things bring me to work every day. And you should see our office, it makes you feel like you’re right at home.


Emulate a Redis Failover with Docker

Reading the Redis documentation can be a bit confusing without the hands-on experience. You could in theory create multiple processes of the Redis Server on your machine and configure each of them in part, but what if you could do it in a few commands? Not only that but emulate the network they’re connected to as well.

I’ve been looking into this and there’s a few examples out there on Web, the best one I could find was this one: https://github.com/AliyunContainerService/redis-cluster

So, starting from that example, I’ve tried to do the next best thing, which is to create a single docker-compose.yml file for all of it. Removing the need to build each image, just to do a docker-compose up and scale as needed.

Here’s what I got:

master:
  image: redis
slave:
  image: redis
  command: redis-server --slaveof master 6379
  links:
    - master
sentinel:
  image: redis
  command: >
    bash -c "echo 'port 26379' > sentinel.conf &&
    echo 'dir /tmp' >> sentinel.conf &&
    echo 'sentinel monitor master master 6379 2' >> sentinel.conf &&
    echo 'sentinel down-after-milliseconds master 5000' >> sentinel.conf &&
    echo 'sentinel parallel-syncs master 1' >> sentinel.conf &&
    echo 'sentinel failover-timeout master 5000' >> sentinel.conf &&
    cat sentinel.conf &&
    redis-server sentinel.conf --sentinel"
  links:
    - master
    - slave

Basically, after saving this into a docker-compose.yml file and running docker-compose up in that folder you’ll get this:

You can now scale as needed. For example, by running:

docker-compose scale slave=2 sentinel=3

You’ll end up with:

To initiale a failover, you’ll need to take the master out of the picture, you can do that with:

docker-compose pause master

You can now observe the communication between the sentinels and slaves. After the down-after-milliseconds and failover timeout passes, one of the slaves will be selected for promotion.

After the sentinels agree on the selection, the slave will become the new master.

You can now unpause the old master by doing this:

docker-compose unpause master

The old master will now become a slave of the new master and perform a sync.

That’s about it. As an exercise you could try setting up a cluster starting from this and observe failovers there.


should your online business use API?

Why Should Your Online Business Offer API

There are several ways to extend a business model but API is a hot topic right now as the online world is expanding very fast. If you’re a developer or at least interacted with APIs before, you probably know why public APIs are so important, but there’s a big chance you didn’t hear or care about them before and now you’re wondering why everyone talks about them.

What is an API

In computer programming, an application programming interface (API) is a set of subroutine definitions, protocols, and tools for building application software. In general terms, it's a set of clearly defined methods of communication between various software components. (Wikipedia)

There is a simple way of saying this: an API is like a contract between two computer software agreeing to share information in a more or less standardised way.

Now it’s pretty clear what are we talking about, but why are them so important? How can APIs help us? In the following rows I will try to argument some good reasons.

Getting Started with Building APIs in Symfony2

Grow your business

You can grow your online business by integrating with additional tools or apps and engaging with others. This can be done using public APIs.

Let’s take Uber and Google Maps: everytime you search directions in Google Maps (from home to work, i.e.) you can automatically request an Uber, see your driver on the map or even contact him, all without having to leave Maps app thanks to Uber’s API.

Or if you have an online store, you might wanna offer public APIs so other apps can request price offers and display your products on their platforms.

Get ready for scaling

It’s all sweet and fun to start a new business and you probably want to do it faster and cost effective. Usually this means a monolithic application.

Success means scaling and this can be done by breaking the app into microservices. This will enable multiple options for you.

Let’s say you have a microservice that is being used very often and affects your server. That microservice can be moved on a new server with dedicated resources only for it and it will be accessible for the rest of the app via an API.

Or there is the case when you want to rewrite a single microservice (some languages are more efficient than others). This is the beauty of standardised API - you only have to make sure you accept the same API call as before and return the answer in the same format, so other dependent services won’t be affected.

Time saving

UX/UI is very important and we strongly advise you to continue to invest in that area, but there are cases when having to explore an UI for some actions is time consuming for some (more technical) users.

Let’s take SendGrid and their Marketing Campaigns app. You can create a new campaign by going through the UI process or you can simply make a call to their API. Second option is usually faster (but for more technical people or at least you need to develop an integration first) and the flow will always be the same, while UI can suffer some modifications over the time.

Mobile app

At some point you will probably want to add a dedicated mobile app to your business. Having APIs makes it possible. You are free to develop a new design or a new template without any changes on the API side.

Providing APIs must be a concern for every company, whether they focus on internal operations, partner integrations or public access. Join the revolution! Add API support to your product! Get a free quote now.


Better is possible and real

We all wish, hope and want for good things to happen as often as possible in our life. Even from the beginning, we are all trying to be good kids, then, as teenagers to get good grades, as young people to graduate a good college, as adults to have a good job, to build a good family and live a good life. Good is enough, is normal...is perfect. But let me ask you something: isn’t it interesting the fact that we are so used with the presence of good things in our life and we take them for granted because they are ordinary, but when something extraordinary, unexpected happens, we are so amazed and exalted and overwhelmed and we start wondering: how is this possible? How can be something good, better? What is this better thing that just happened? Why didn’t this happen before? When will it happen again? And so on. We have definitely heard that better is real and we have seen it in others life, but we have never experienced it in our lives.

Well, this is where I stand up and say: BETTER is real! Something extraordinary, unexpected, something better really happened to me and I want to share my experience with you.

I’ve always dreamed about a good job. I’ve tried to study as much as I could to gain all the necessary information I needed to be sure that I will get the job. It wasn’t easy… but time flew fast and I have graduated the college. Frankly being, due to educational system and society, I wasn’t 100% sure that I will get the job I’ve dreamed about. Anyway, I hoped and I have started looking for the desired job. The reality was cruel, but, in the end, the job offer was signed. Yeeeeey! I felt so good! I have a good job! Now I am satisfied! Once I got the job, I did my best to be a good employee and to fit in this new and nice environment. But after a while, I have realized that this job was just a good job and nothing more. The company I’ve worked for and the teammates I’ve been working with were good, the view from my desk’s window was good, everything was just good. I’ve started feeling that good was no longer enough. Therefore, when the window of opportunity was opened, I quickly flew like a shy but courageous bee outside of the good zone. Once I've escaped from the good zone, I’ve heard rumors about the land of the better.

Have you ever felt the need of better? Have you ever realised that good is no longer good enough and you want something better, you need something better even if it is sometimes impossible to get it? Well, I felt the same. Also, let me tell you that the impossible is achievable. How? With support from people who are ready to believe in you and help you to grow professionally and gain priceless experience within their team. This is how it happened to me. I have found a better job and a better company for me, for my needs (yes, I’m aware of the fact that good and better are subjective beliefs, we have different perceptions about what they mean).  I have met here the most amazing team I’ve ever had the chance to work with (if you don’t believe me, just come and find out for yourself). From the CEO to the newest colleague, everyone is BETTER. I am telling you, they've welcomed me with such love and kindness. A better job is defined, among other things, by a better team you work with.

And did I tell you about the view from my desk’s window? You and I will probably never find a better view than the one I enjoy everyday. From an unbeliever in better, I am now a strong believer and I will remain the same. Why? Because I have now a better job and I work with better people for a better company. I thought it is impossible, but now I have it and I love it and I know, feel and believe that it will last a very long time from now on.

I’m now part of a “beehive" filled with highly intelligent, strong, hardworking, funny and talented “bees” which are ready to provide the best “honey” in order to uniquely identify the company from the rest of the world through the highest quality of friendship, projects and delivered products.

Better is possible and real!


Counting lines and words using Go

For those who need to count words and lines in text files, an easy approach for this matter is to use bufio.ScanWords and bufio.ScanLine in order to quickly solve the problem.

To count words:

input := "Spicy jalapeno pastrami ut ham turducken.\n Lorem sed ullamco, leberkas sint short loin strip steak ut shoulder shankle porchetta venison prosciutto turducken swine.\n Deserunt kevin frankfurter tongue aliqua incididunt tri-tip shank nostrud.\n"
scanner := bufio.NewScanner(strings.NewReader(input))

// Set the split function for the scanning operation.
scanner.Split(bufio.ScanWords)

// Count the words.
count := 0
for scanner.Scan() {
    count++
}

if err := scanner.Err(); err != nil {
    fmt.Fprintln(os.Stderr, "reading input:", err)
}

fmt.Printf("%d\n", count)

ScanWords is a split function for a Scanner that returns each space-separated (checks unicode.IsSpace) word of text, with trimmed whitespace.

To count lines:

input := "Spicy jalapeno pastrami ut ham turducken.\n Lorem sed ullamco, leberkas sint short loin strip steak ut shoulder shankle porchetta venison prosciutto turducken swine.\n Deserunt kevin frankfurter tongue aliqua incididunt tri-tip shank nostrud.\n"
scanner := bufio.NewScanner(strings.NewReader(input))

// Set the split function for the scanning operation.
scanner.Split(bufio. ScanLines)

// Count the lines.
count := 0
for scanner.Scan() {
    count++
}

if err := scanner.Err(); err != nil {
    fmt.Fprintln(os.Stderr, "reading input:", err)
}

fmt.Printf("%d\n", count)

ScanLines is a split function for a Scanner that returns each line of text (separated by "\r?\n"). It returns also empty lines and the last line is returned even if it has no newline at the end.