Showing posts with label Technology. Show all posts
Showing posts with label Technology. Show all posts

Friday, January 10, 2014

Tota Needs Your Help... More Importantly Your Feedback

So it's been a while since I last posted a blog, I have been busy trying to assemble and mobilize a team to work on 3asafeer, with the help of Noor El-Fadl from TasmeemME . I was able to connect with lots of positive creative people who are willing to help. And we are just getting started.

I have developed the first few basic features to get us started. And I really need your help (whoever is reading) in testing it. Any person can test it and provide their feedback in the comments below, But the highest value of help would be of people who have kids or know anybody who has kids, to let the kids use the website and then observe areas where they get stuck, get annoyed, or even get engaged and interested.

The website still has lots of bugs and is not yet touch friendly, and is only to be tested using chrome or firefox for now, the parts you can test are:

1- Read: There is one story available till now, the goal is to test the reader component.

2- Paint: A paint tool that allows kids to paint their favorite characters, if you find your kid asking for a certain character that is not there, let us know and we'll add it in no time.

3- Play: A simple mini-game that introduces the kids to Tota, who will be the main character in the games targeting 0-3 year old kids. they can control the emotions of Tota, and see him do certain actions.

You can have a glimpse on what those features look like through the images in this post. Looking forward for your comments and feedback.




Wednesday, December 11, 2013

An Enhanced Machine Translation Tool For Multi-lingual e-Commerce Websites (Machine & Human Translation)


The e-Commerce industry is becoming more and more competitive in the MENA region, with e-Commerce websites trying to provide customers with lower prices everyday; which means thinner margins everyday. this makes cost efficiency a critical factor in the success of an e-Commerce business. One of the costly processes of maintaining an e-Commerce website is publishing sold products information online. This process becomes even more complicated and costly when you need to provide multi-lingual information for your products to reach customers speaking different languages.

So How Do You Solve That Issue?
Manually translating the content for each product can be the solution when you are dealing with a small number of products, expensive items or when selling with high margins. but when you are talking about 30K+ unique SKUs varying in price, with thin margins then the Manual translation will severely hurt your bottom line.

So What About Machine Translation?
Machine translation can give you good results up to a certain extent, for example when it comes to brand names and product lines it fails miserably (ex. Hang Ten Ladies T-Shirts becomes "شنق عشرة نساء قمصان" or Nike Air Max Shoes becomes "أحذية نايك الجويه القصوى") which is totally not what you want your customers to see.  But when it comes to descriptive sentences machine translation does a great job.

The Solution
So the solution needs to use the best of human translation and machine translation for it to work, what if you were able to have a replacement list for brand names and product lines that you would build cumulatively before you send it for machine translation, then "Hang Ten Ladies T-Shirts" will become "هانغ تن بلايز ستّاتيه" which makes much more sense.

[Click The Image To Enlarge]

Machine Translation
There are many services available for machine translation from Google, Microsoft or even other specialized companies like translations.com, I found google to be best in terms of quality to cost. the cost is 20$ for each 1 million character, which is more than reasonable if you compare it to human translation. To Use Google translation API, you can use the link below:
https://cloud.google.com/console
for more information about pricing:
https://developers.google.com/translate/v2/pricing

Making Machine Translation More Cost Efficient (Translation Memory)
So even when you only pay 20$ for a 1 million character you might end up paying a lot when you want to translate 30K unique products information, so how to go around that difficulty. what if for each field you send for translation you keep the translated content in a local dictionary so next time this content is repeated you will get it from the local dictionary instead of sending it to google. This will save some money, and will allow you to refine translation to your liking for longer phrases. This is  concept called Translation Memory, more about it in the link below:
http://blog.globalizationpartners.com/what-is-a-translation-memory-%28tm%29.aspx

[Click The Image To Enlarge]

So Am I Supposed To Develop That Tool?
So after all of this ranting you might think, that this might sound good in theory, but it would need lots of time to build such a tool. Which cant be any further from the truth, I have developed a simple WPF application in a day that does just that, the source code is attached to this post you can use it and customize it the way you want, you can even ask me for help in using the application.

More Information About the Tool
This tool takes any excel sheet and translates columns you choose out of the excel sheet, and appends translated rows to the end of the excel sheet, it also saves (TranslationMemory) and (Replacement List) in a configurable location on your hard disk, you can access & edit that file using the same tool, all you have to do is configure your google API key and the location of the replacement file and translation Memory file.
[Click The Image To Enlarge]

Please shares your comments, ideas and questions in the comments section below.

DOWNLOAD THE APPLICATION SOURCE CODE HERE
Excel Translator WPF Application Source Code

DOWNLOAD THE APPLICATION INSTALLER HERE
Excel Translator Setup File

Thursday, December 5, 2013

How to Use a Snazzy Arabic Font For Your Website


If you are still using one of the basic default boring fonts for your website (because you think they are the only fonts that are supported by majority of browsers); you need to read on this post. And if you think there is not much Arabic fonts out there to use on your website that is supported by nearly all browsers then you definitely need to read on.

So how to go about using non-standard Arabic/English fonts on your website, and still have them supported by majority of browsers?

The secret lies in a CSS tag called @font-face that was introduced since CSS2 but that was not supported properly by all browsers till around late 2008. this will also allow you to use any non-standard English font on your website too. You add this CSS tag to your website's stylesheet which links a font name you choose to the font-file you want to display on your site.

A step by step Example:
1- Get a ttf (TrueType Font) or otf (Open Type) font file: For windows users you can go to "Control Panel > Fonts" copy a font from there and paste it to your desktop.

2- Go to http://www.fontsquirrel.com/tools/webfont-generator which is a service that allows you to create a web-font kit (from any font you have) to ensure that it will render on all browsers. this service will generate the following file extensions that will be used by different browsers: .eot, .svg, .otf, .woff, .ttf, and upload your font file that you copied to your desktop.

3- For Arabic I recommend you disable Subsetting, which is a process that eliminates extra symbols from the font file, and the following options are likely to work with all fonts, although they might not give you the most optimal results, it's worth experimenting with the options, but below is my recommendation.

[click the image to enlarge]

4- Now copy the files to the same folder of the CSS stylesheet you're using and add the following to your CSS:
@font-face{
    font-family:'GE_SS';/* this is the font name you want to use when applying this font to any element using font-family*/
    src: url('ge_ss_two_medium.eot');
    src: url('ge_ss_two_medium.eot?#iefix') format('embedded-opentype'), 
    url('ge_ss_two_medium.woff') format('woff'), 
    url('ge_ss_two_medium.ttf') format('truetype'), 
    url('ge_ss_two_medium.svg#ge_ss') format('svg');
    font-weight: normal;
    font-style:normal;
}

h1{
font-family:GE_SS,Tahoma,Arial;
}


IIS Users:
If you are using IIS7 you need to make sure that the fonts mime-types are defined properly, some fonts may not be even there in the mime-types, make sure you're using the following mime-types for your extensions:

extension: .eot      mime-type: application/vnd.ms-fontobject
extension: .otf       mime-type: application/x-font-otf
extension: .svg      mime-type: image/svg+xml
extension: .woff    mime-type: application/x-font-woff
extension: .ttf        mime-type: application/x-font-ttf

One Last Note:
Are you serving the fonts from a different domain, (ex. your website is "www.mywebsite.com" and the fonts are from "fonts.adobe.com", make sure that you add the CORS ("Access-Control-Allow-Origin:*") header to your response headers.

Have any questions, or need help implementing the font; just leave a comment below.

Tuesday, December 3, 2013

5 Pitfalls of online startups


I have been working for the past 10 years in the IT field, I have led technical teams building web products, And I have consulted a fair amount of start-ups, yet I'm no expert on the matter, but I thought sharing the most common and clear mistakes I've come across might spare some heartaches:


  1. Spending large amounts of money and time on the first version of the service/product. Products online need to go through the feedback loop of customers, otherwise any features you create are mere guesses; at best educated ones. Which leads to the next problem.
  2. Not creating multiple feedback mechanisms to understand & react to end users needs & wants. A lousy feedback form somewhere on the site is surely not enough. Proper analytics tools and visitor's session recording are among the must have basics to understand your customers.
  3. Over optimistic forecasts of early revenue, revenue in online businesses is tightly related to traffic you get, and since getting organic traffic takes time you usually need sometime to build up revenue, and some more time to tune your online service to suit customer needs & wants. Those over optimistic forecasts usually lead to severe cash flow problems.
  4. Relying heavily on outside vendors to develop and maintain your online business, no one party will be able to manage and understand your business more than you, so whenever you think about reaching out to 3rd party vendors always ensure that you have full control of the situation and even when they do the work for you, you have to fully understand the details of why and how they are doing it.
  5. Over-specing hosting infrastructure or team as if you were sure your company is the next Facebook, always make sure that your business is scalable, but what is more important is that you make sure that your infrastructure and support team size is the minimum needed to support your business, they will grow over time as your business grows; being a start-up it's crucial to be cost efficient in everything you do. Having high overhead for your online business is one of the most vicious killers of start-ups. Having a successful online business is more like a marathon so you need to have proper control over your spending so you can compete for the longer run.

There are many more pitfalls that encounter online start-ups, I've tried to mention the ones I saw as clear pitfalls that many start-ups fall for. All sighted from my humble experience in the MENA region.

Have any feedback, or disagree with any of the points mentioned, leave a comment below and share your ideas with us.  

Monday, November 25, 2013

I Cannot Use Markup to Correctly Order Bidirectional Text... It's Driving Me Crazy


So you are facing the problem with bi-di text which is a piece of text that contains both directions ltr & rtl. And most probably you're using Arabic with English.

I'll start with the quick fix for those who just want to fix it & don't want to know more and then will provide links that will explain more about it.

Quick Fix:
So to solve this in your markup you add the following invisible characters in your markup
Arabic‮‭ English ‬ Arabic,

These characters will switch the direction to rtl,ltr and back again to rtl.

Example:
Check the examples in the fiddle below, to understand the solution better:
http://jsfiddle.net/3amzooo/ThKAE/1

Read More:
To gain a better understanding of the bi-di text, the algorithm used to render it and how browsers deal with it read the links below:
http://en.wikipedia.org/wiki/Bi-directional_text
http://www.w3.org/International/articles/inline-bidi-markup/
https://www.w3.org/International/questions/qa-bidi-controls
https://www.w3.org/International/questions/qa-bidi-unicode-controls

Comment below to let me know if this helped you solve a problem, or if you need any help solving a similar problem.

Monday, November 18, 2013

Creating A Personalized Experience for Your Site Visitors: How to Detect Visitors' Country


So this is the first blog of a series on how to create a personalized experience for your website visitors. This part of the series will take care of getting and using the country of the visitor through 2 different ways:

1- HTML5 Geo-Location:


How it works?
As part of the html5 specification browsers need to support this functionality. And although both chrome and firefox use the google geolocation service in their implementation, the implementation can be done in different ways in the future following the specs. I have read somewhere that the Safari on IPhones actually uses the GPS on the device to provide the location information instead of WiFi-triangulation or cell-site geolocation.

Pros: 
  • Can get you more accurate information, you can get latitude and longitude of a visitor, so you can tell the city and even the street they are in.
  • Following the html5 specification, hopefully in the future the browsers implementation will be more solid than it is today.

Cons:

  • Will prompt the user asking to share location information. in the case of getting only the country, this could be an overkill. 
  • The prompt is shown in different places in different browsers and can go unseen which creates a horrible user experience IMHO.
  • Troublesome to code.

Example:
Check the fiddle in the link below for a simple example on using html5 geolocation:
http://jsfiddle.net/3amzooo/7ZA7p/

Read More:
http://www.w3schools.com/html/html5_geolocation.asp

2- Use of an IP range DB service API:


How it works?
This method works by storing IP ranges that belong to each country in a database, once you query using the visitors IP, it will return the country that is assigned the IP range that the IP your inquiring about (visitor's IP) falls within . 


Pros:

  • Quick method, doesn't need user consent.

Cons:

  • Might sometimes get wrong information since it's based on the database of IP address Ranges associated with each country.
  • Cannot get detailed information like latitude, longitude.
Example:
Check the fiddle in the link below for a simple example on using an API that uses a database to tell the location:
http://jsfiddle.net/3amzooo/kG4vC/

Read More & Resources:
http://freegeoip.net/
http://dev.maxmind.com/geoip/legacy/geolite/