aTech Media

The purveyors of fine software.

Our fancy new office!

After many years of moving around the place, last October we renovated and moved into a new office. At time, we forgot to share any pics or really talk about it but we've finally got around to posting some pics on Facebook.

Image

If you're not a friend already on Facebook, why not go and "friend us" and take a look at some new office pics?

Deploy

New Deploy Website

Deploy, our code deployment platform, has been growing very quickly in popularity over the last 12 months and we finally thought it was time to give its website a bit of a refresh.

Image

The new site focuses on the feature & benefits of using Deploy and keeps things simple. Check it out!

We've got a few nice things planned for the next couple of weeks on Deploy too - including support for other "cloud" endpoints as well as a few UI tweaks.

Deploy

Deploy to Amazon S3

Image

For a while now, Amazon S3 has supported the hosting of static websites. This makes S3 an ideal platform for placing small, static websites. S3 can also be used in conjunction with Amazon Cloudfront for CDN services.

Today we're launching a feature in Deploy that will allow you to deploy to an S3 bucket directly from your repository. To add an S3 server to your project just select "Amazon S3" from the protocol list and enter your Access Key ID, Secret Access Key and Bucket Name.

Of course, your new S3 server supports Deploy's automatic deployments, and multi-server deployments to give you a supremely flexible workflow. For example, you can add your new S3 server into an existing server group for automatic deployment of your assets to S3 for use in your CDN.

Image

We've also made a few changes to the add server interface to make it a bit more intuitive and a bit less cluttered. The top half of the page is now dedicated to server connection details and upload paths and the lower half is dedicated to optional deployment parameters such as the branch the server tracks and the server environment.

If you have any comments or suggestions about this feature, please let us know on our community site.

Sirportly

What makes an online customer unhappy?

Here's a depressing statistic: 65% of people have received poor customer service online. This presents both danger and opportunity for businesses...

Image

The Danger

64% of people would not return to a company online that provided bad customer service, no matter how much they enjoyed the product or service on offer.

With online shopping in the UK topping £50bn in 2012, this means over £20bn could be lost as a result of customer dissatisfaction. This number is staggering. Even if it’s only half true, it is still a huge amount of money being lost by online businesses.

The challenge is that often online prices reduce margins and yet customer service can be time consuming and expensive to provide.

The Opportunity

The growth of online retail in the UK has brought with it opportunities as well as problems. Businesses that are able to adapt and offer outstanding service online, with great products at great prices, are more likely to win and retain business. 94% of people would recommend a company if they had a good customer service experience with them, and 93% of people said it makes them loyal to a company.

The Problem

The Internet empowers businesses to provide good customer service quickly and easily, so why are so many falling short? Outdated and disorganised methods of responding to customers are causing the problem, resulting most commonly in these mistakes:

  • A slow response; 50% of people say companies have left them waiting, and if that’s not infuriating enough…
  • 31% have been completely ignored after submitting a query to an online customer service department. That is simply not good enough. Businesses need to be armed with an on-the-ball customer response team otherwise everything will fall apart.
  • 36% have been given a response to a customer service query made on the web that doesn’t solve the problem. These people might as well have been ignored – what’s the use in a response that doesn’t at least seek to solve the problem, no matter how friendly and professional it is? Speaking of which…
  • 11% have received a rude response. There is never a good reason for this. Your customer service team need to be able to keep its cool in even the most heated situations.
  • Failing to respond to customers effectively using social media is reputation-suicide. 35% of Brits have used social media to badmouth a company’s customer service capabilities. Ideally, you don’t want it to come to this, and by resolving the above mistakes there’s a better chance it won’t. If it does happen, you need to ready with a capable and good-humoured team that can deliver positive customer service in a public environment.

The Solution

There's nothing stopping these businesses streamlining their customer service process to enable them to efficiently handle more queries with the same number of staff. Online helpdesks like our own Sirportly allow your customer service team to connect with customers wherever they are, seamlessly integrate social media services and stay in control of customer support data. This will help them cut out unnecessary mistakes and keep customers happy, ultimately encouraging loyalty to your business and positive word of mouth.

Related Articles

Codebase

Code Review Features

We're introducing two new code review features into Codebase today; comments on individual lines in a commit and merge requests.

Merge Requests

Image

Merge requests allows a feature branch to be reviewed in a formal way before being merged into a mainline branch. You'll find this helpful if you tend to work with feature branches and have someone responsible for checking over changes before merging deploying them to live or staging environments.

The merge request view enables you to see the all of the changes that would be made by merging the two branches. If the branches can be merged without any conflicts then you'll be offered a button to automatically merge pressing this will take care of the merging for you.

We've needed to move some items in the repository navigation to make way for merge requests, so the "Branches" and "Tags" tabs can now be found linked from our new, enhanced "Browsing" menu. Merge Requests can be found in the tabs at the top of the repository browser.

Inline Commenting

Codebase has allowed you to comment on commits for some time, but sometimes you need to comment on a specific line of code, maybe to highlight its genius, or deride it's madness. Now you can, just hit press the comment icon next to a line of code in a commit or diff to add a comment to that line.

Image

Encrypting & Signing in Ruby

Securing your communications between parts of your infrastructure has never been more important. For encryption, in most cases, you can rely on normal SSL on HTTP connections (HTTPS) however what happens when you're not using HTTP or you need don't have the option of using HTTPS?

What is encryption & data signing?

Encryption is the process of converting data into a format which means it can only be read by someone who possesses a private key. This is particularly useful if you want to send sensitive data over an insecure network connection to a known consumer.

Signing is the process of generating a "signature" which links some data to a given "producer". For exampe, if I wanted to send some data to Charlie and he needed to be sure it came from me, I could sign the data with my private key and he could verify it was signed by me and that it was authentic.

These two techniques are very useful and, at aTech, we use them both extensively in many of our apps. They are used heavily in our single-sign on system in order to ensure that authentication requests are only submitted by our applications and responses are always received from our SSO app.

What can I do?

Many years ago we created a very simple wrapper around OpenSSL which allows you to easily encrypt/decrypt/sign/verify data. We re-released this today under a new name and with much improved documentation.

 Generating some keys

Before you can start using EncryptoSigno, you will need a keypair. A keypair is a set of two keys, one public and one private. You should always keep your private key secure however your public key can be distributed as you see fit without compromising security. The two commands below will create a private & public key for you.

$ openssl genrsa -out path/to/private.key 2048
$ openssl rsa -pubout -in path/to/private.key -out path/to/public.key

In order to use these keys in your application, you will need to load them into your Ruby application as and when required. You can just read them from the file and store them in a variable, as shown below:

private_key = File.read("path/to/private.key")
public_key  = File.read("path/to/public.key")

Encrypting & Decrypting

In this encryption example, we are going to send some data to a colleague who has provided us with their public key. They will then be able to read this data by decrypting it using their private key.

string = "I love bananas but I don't want anyone other than you to know this!"
encrypted_string = EncryptoSigno.encrypt(public_key, string)

Decrypting data is just as easy as encrypting it. You just need to pass your private key and some encrypted data to the decrypt method as shown below:

decrypted_string = EncryptoSigno.decrypt(private_key, encrypted_string)

Signing & Verifying

We want to send some data to someone and they need to be sure that the data originated from us. To do this, we will sign our data and send a signature along with the data which they can use (along with our public key, which would be distributed separately) to verify it was signed by us.

string = "Your access code is 123456."
signature = EncryptoSigno.sign(private_key, string)

The signature variable will contain a Base64 signature which you can transmit along with the string. Remember, this is not like encryption and the signature does not include your original data so this must be sent too.

If you receive a signature, you can use the verify method to determine whether it was signed using a provided public key or not.

EncryptoSigno.verify(public_key, signature, string) #=> true or false

Conclusion

I hope this post highlights some of the benefits of encrypting & signing data and also provides a simple way to achieve this in Ruby. For more information, check out the docs.

Choose one of our applications:

Reset your aTech Media password