helion-prime
home about us blogs contacts

Blogs

This weblog by Helion-Prime Solutions about software design, experience, business, the web, simplicity and more
Blogs

Google voice versus skype

August 26th, 2010 by alex.shapovalov

Yes, it’s finally happened, we can call regular phones with Google voice. That Google Voice VoIP functionality based on Gizmo5 technology [http://www.google.com/gizmo5/]. Also good news are: Google agreed to trial free calling booths at an airport and a pair of universities!

Now, all that we need is to compare prices and test quality.

Prices comparison

Country Google voice Skype
United States free 2.4 ¢/min (incl. VAT)
Canada free 2.4 ¢/min (incl. VAT)
India 6 ¢/min 10.6 ¢/min (incl. VAT)
UK landline 2 ¢/min 2.4 ¢/min (incl. VAT)
UK mobile 18 ¢/min 29.10 ¢/min (incl. VAT)
Mexico landline 10 ¢/min 11.4 ¢/min (incl. VAT)
Mexico mobile 19 ¢/min 38.6 ¢/min (incl. VAT)
France landline 2 ¢/min 2.4 ¢/min (incl. VAT)
France mobile 15 ¢/min 23.3 ¢/min (incl. VAT)
Russia landline 4 ¢/min 5.5 ¢/min (incl. VAT)
Russia mobile 6 ¢/min 8.2 ¢/min (incl. VAT)
Russia Moscow 2 ¢/min 2.4 ¢/min (incl. VAT)
Russia Saint-Petersburg 2 ¢/min 2.4 ¢/min (incl. VAT)



As you see Google set lower prices for all cases, even if it’s few cents. You can make own comparisons for your local places:
Skype rates [http://www.skype.com/intl/en-us/prices/payg-rates/]
Google rates [https://www.google.com/voice/b/0/rates].

Quality testing

We have compared quality of sound in the same places with same computer configuration. For most cases they show almost same results.

Here we need to mention only 2 things:
Gmail Voice has clearer sound in most cases.
Skype provides better noise cancellation.

Be Sociable, Share!

35 lessons of 35 years

August 18th, 2010 by vasiliy.kiryanov

Ryan Freitas shares some ideas

Work

- Debates over terminology and semantics are for archivists and academics. If you’re interested in the living heart of what you do, focus on building things rather than talking about them.
- No one gives a damn about the size of your to-do list.
- How we handle ambiguity and failure have a lot to do with our potential for success.
- Your reputation is more important than your paycheck, and your integrity is worth more than your career.

Money

- Recognize the time value of money, and start spending appropriately.
- Overtip everybody. Doormen, valets, bartenders – their job is in fact tougher than yours. They have to put up with people like you all day.
- Debt, no matter how creatively structured, is anathema to peace of mind.
- Leisure travel is expensive, but it is by no means an indulgence.

Read full list on: http://ryanfreitas.tumblr.com/post/968361763/35-lessons-in-35-years

Be Sociable, Share!

3 great ways to improve website usability

April 12th, 2010 by vasiliy.kiryanov

web heatmap systems

They have been used for displaying areas of a Web page most frequently scanned by visitors, and allow you to understand how people are using your website. This is quite useful to find layouts that don’t work as intended or areas that should be changed.

heatmap screenshot

There are many open-source tools that you can integrate into your site, free solutions and paid services with enormous amounts of features. Just make a Google search, and check few most appropriate solutions.

user testing

There are few steps:
1. Understand what are your users, find out target group.
2. Establish use cases of your system, main flows of your system like: site sing-up, password recovery, post search, etc.
3. Ask some users from target group to go thru all use cases.

Few notes:
Check where users stuck and simplify the flow.
Ask simple questions, let them explain why they made something and if the result corresponded with the idea they had in mind.
Ask them what functionality your site lack?
Ask them what was hard to use on your site.

It can be hard to estimation how many users you may need for testing. Jeff Sauro wrote great article where explained why five users should be sufficient to find most of your interface problems.
Check it: http://www.measuringusability.com/five-users.php

log analysis/analytics

You can get a lot of useful information that can make your site better by analyzing information from logs or by installing external tracking tools.

Features that can help to improve site usability:
Visiting by days of week and rush hours,
Domains/countries of hosts visitors,
Most viewed posts and exit pages,
Browsers used,
HTTP errors,
Screen size, etc.

related links

Scrolling and Attention : http://www.useit.com/alertbox/scrolling-attention.html
Do users fail a task and still rate it as easy? : http://www.measuringusability.com/failed-sat.php

also I want to recommend 1 book that impressed me:
Steve Krug’s “Rocket Surgery Made Easy: The Do-It-Yourself Guide to Finding and Fixing Usability Problems”

Be Sociable, Share!

Deployment of Ruby on Rails applications on OpenBSD

April 5th, 2010 by alex.shapovalov

Preamble

In this post I will define typical production environment on OpenBSD OS for deployment of Ruby on Rails applications.

There are few common things:
1. The Ruby on Rails framework doesn’t support concurrent running in multiple threads within the same process, and so to scale it and fully utilize available hardware we need to execute application in several processes.
2. We need load-balancer to spread incoming requests between application instances.
3. We need separate web-server to serve static content.

Overall configuration

At first all incoming HTTP requests from a clients come to httpd web-server, it servers all static content, and send other requests to HAProxy.
HAProxy receives requests and selects free Thin instance, forwards the request to it, receives a response and passes it back to httpd.

Following diagram should give you basic understanding about common work of components :
deployment diagram

OpenBSD Httpd – standard OpenBSD web-server

I suggest OpenBSD standard web-server as you can find it as part of OpenBSD base installation, it checked for security issues and being updated as part of OpenBSD. We will use it to serve static content and don’t bother our Thin servers.

file: httpd.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
BindAddress SERVER_IP_ADDRESS

# Dynamic Shared Object (DSO) Support
# caching proxy
LoadModule proxy_module /usr/lib/apache/modules/libproxy.so

# allow Symbolic Links for root of our static content and all sub-directories

Options +FollowSymLinks
ServerAdmin ADMIN_EMAIL

# path to root of our static content
DocumentRoot /var/www/railsdocs/RAILS_PROJECT/public
ServerName SERVER_NAME
ServerAlias www.SERVER_NAME

# directories that contain static content (they excluded from dispatching to HAProxy)
ProxyPass /images !
ProxyPass /stylesheets !
ProxyPass /javascripts !
ProxyPass /500.html !
ProxyPass /503.html !

# address where to send and from receive requests (HAProxy listens that address)
ProxyPass / http://127.0.0.1:4000/
ProxyPassReverse / http://127.0.0.1:4000/

# Disallows remote servers to be mapped into the space of the local server.
ProxyRequests Off

# Don't use incoming Host HTTP request header for proxy request.
ProxyPreserveHost Off

ErrorLog logs/SERVER_NAME-error_log
CustomLog logs/SERVER_NAME-access_log common

see for configuration details: man httpd

For OpenBSD 4.6/4.6 -Stable
It’s the hard part, OpenBSD4.6 has a bug in mod_proxy module so ‘!’ directive doesn’t work.
You have to edit following file: /usr/src/usr.sbin/httpd/src/modules/proxy/mod_proxy.c

Find method: static int proxy_trans(request_rec *r)
in that method after condition: if (len > 0) {
add 2 string:

1
2
if (ent[i].real[0] == '!' && ent[i].real[1] == '\0')
return DECLINED;

so final part of code:

1
2
3
if (len > 0) {
if (ent[i].real[0] == '!' && ent[i].real[1] == '\0')
return DECLINED;

Then recompile your system, it’s common procedure for following -stable so you should already know it otherwise see for details for building instructions: http://www.openbsd.org/faq/faq5.html

Thin – high performance ruby web server

We need some Ruby web-server, and it seems that at this time Thin provides best performance.
At least we see such results on Thin homepage: http://code.macournoyer.com/thin/

file: start.sh

1
2
# start work instances
thin start -C thin-production.yml

file: thin-production.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
---
environment
: production

port
: 4001
address
: 127.0.0.1
daemonize
: true
servers
: 4

chdir
: /var/www/railsdocs/RAILS_PROJECT
pid
: tmp/pids/thin.pid
log
: log/thin.log

user
: myuser
group
: mygroup

require
: []

see for configuration details: http://code.macournoyer.com/thin/usage/

HAproxy – TCP/ HTTP load balancer

As Rails doesn’t support concurrent running each incoming request should be assigned to a separate process. HAProxy can be configured to send only one request at a time to every Thin server, it will always pick instance that is not busy with something.

It provides bunch of other useful things like:
– route HTTP requests depending on statically assigned cookies ;
– switch to backup servers in the event a main one fails ;
– accept connections to special ports dedicated to service monitoring ;
– add/modify/delete HTTP headers both ways ;
– block requests matching a particular pattern ;
for full documentation see: http://haproxy.1wt.eu/#docs

note:
If someone thinks that we could use nginx for that purpose check following performance comparison of HAProxy and Nginx:
http://affectioncode.wordpress.com/2008/06/28/another-comparison-of-haproxy-and-nginx/

file: haproxy.cfg

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
defaults
log     global
mode    http

# provides more detailed information about HTTP contents, such as the request and some cookies
option  httplog
# do not to log any session which didn't transfer any data
option  dontlognull
# allow the proxy to break their persistence and redistribute connections in case of failure
option  redispatch

# the number of attempts to reconnect after a connection failure to a server
retries 3

# the time we accept to wait for a connection to establish on a server
contimeout      100000
# the time we accept to wait for data from the client, or for the client to accept data
clitimeout      100000
# the time we accept to wait for data from the server, or for the server to accept data
srvtimeout      100000

listen project_proxy 127.0.0.1:4000
balance roundrobin

# creates an HTTP 'X-Forwarded-For' header which contains the client's IP address.
# This is useful to let the final web server know what the client address was
option forwardfor

# using “maxconn 1″ improves performance with Rails.
# As Rails instance can process only 1 request “maxconn 1″ force HAProxy to select next free instance

server  app1_1 127.0.0.1:4001 check inter 60000 rise 2 fall 5 maxconn 1
server  app1_2 127.0.0.1:4002 check inter 60000 rise 2 fall 5 maxconn 1
server  app1_3 127.0.0.1:4003 check inter 60000 rise 2 fall 5 maxconn 1
server  app1_4 127.0.0.1:4004 check inter 60000 rise 2 fall 5 maxconn 1

# httpd web-server will handle it in case of 503, 504 errors due to it's static content
errorloc    503  http://DOMAIN_NAME/503.html
errorloc    504  http://DOMAIN_NAME/504.html

# statistics page thru http://127.0.0.1:8080
listen stats 127.0.0.1:8080
balance roundrobin
mode http
stats uri   /

see for configuration details: http://haproxy.1wt.eu/#docs

Be Sociable, Share!

3 new great book you should read

April 2nd, 2010 by vasiliy.kiryanov

Rework

Jason Fried, and David Heinemeier Hansson’s | buy on Amazon

“Jason Fried and David Hansson follow their own advice in REWORK, laying bare the surprising philosophies at the core of 37signals’ success and inspiring us to put them into practice. There’s no jargon or filler here just hundreds of brilliantly simple rules for success. Part entrepreneurial handbook for the twenty-first century, part manifesto for anyone wondering how work really works in the modern age, REWORK is required reading for anyone tired of business platitudes.”
–Chris Anderson, New York Times bestselling author of THE LONG TAIL and FREE

The Laws of Simplicity

John Maeda’s | buy on Amazon

“Keep it simple, Stupid” is an old piece of advice, so much so that it’s often abbreviated as the “KISS principle.” But it’s advice that’s often ignored, and MIT Professor John Maeda aims to change that. . . . Designers and marketers will find Maeda’s book both interesting and useful….”
— New York Post

Rocket Surgery Made Easy: The Do-It-Yourself Guide to Finding and Fixing Usability Problems

Steve Krug’s | buy on Amazon

“It’s been known for years that usability testing can dramatically improve products. But with a typical price tag of $5,000 to $10,000 for a usability consultant to conduct each round of tests, it rarely happens.

In this how-to companion to Don’t Make Me Think: A Common Sense Approach to Web Usability, Steve Krug spells out an approach to usability testing that anyone can easily apply to their own web site, application, or other product.

By paring the process of testing and fixing products down to its essentials, Rocket Surgery makes it realistic for teams to test early and often, catching problems while it’s still easy to fix them. Rocket Surgery Made Easy adds demonstration videos to the proven mix of clear writing, before-and-after examples, witty illustrations, and practical advice that made Don’t Make Me Think so popular.“
– Amazon editorial

Be Sociable, Share!
©2010 Helion-Prime Solutions Ltd.
Custom Software Development Agile Company.