Robert Speer Web Development: Symfony, PHP, Wordpress, Business Analysis

16 Tips for Multi-Language Websites

Most of us in Web Dev are familiar with making CMS based websites, but adding languages is a very occasional task.  The good news is that multiple languages don’t have to be very hard, but the bad news is that each language added increases the content management task’s complexity, and done poorly translations are a budget killer.

Most CMS platforms like Drupal, WordPress, & Expression Engine can handle translations in some capacity.  When I did my research I found my preferred CMS of Apostrophe 1.5 did a good job, and I was happy with the results.  However my best advise is to pick a good team and do what they suggest… after verifying of course.   If you’re looking for an experienced team with competitive U.S. rates please contact me to discuss, even if I can’t help you I’ll probably be able to point to you to someone that can.

Web Site Translation Terms:

Web Site Translation Gotchas:

  1. The Russian language is the Ivan Drago (rocky 4) to your layout. It’s going to come in and blow stuff out just because it’s bigger.
  2. Every Language is likely to need some tweaking, this needs to be mitigated by having a layout with high tolerances for variable length content.
  3. Facilitate the language specific changes by appending the language code into the body tag’s class. This allows CSS rules to be written for specific languages. Example: <body class=”sinatra en”> OR <body class=”sinatra ru”>
  4. Each alphabet is going to need it’s own set of fonts. Very few fonts have every character of every alphabet. Seriously don’t ignore this, if you do you’ll be wondering why everything looks different in IE9, and I’ll forward you this URL and be a jerk about it. Examples of different alphabets would be Cyrillic for Russian & Greek, & every Asian variant of characters.
    1. [update Dec 11, 2012] A good reference for Chinese Fonts:  ”… recommendation for a sans-serif font stack is: font-family: arial, 黑体, 微软雅黑, 宋体, sans-serif;”
  5. Images:
    1. avoid text in images
    2. avoid images in the CSS files that change based on language
    3. depending on the CMS image captions may be difficult to translate
    4. often images will need to be re input into the CMS for each language this is not fun
  6. Video:
    1. Avoid embedded text, it’s expensive to re edit videos
    2. Make sure you plan on translating any voice overs
    3. You may find that services like YouTube.com & Vimeo.com are not available in all countries, like China
  7. Arabic & other right to left languages are tough, if you don’t need them call that out to help lower your estimate
  8. Start looking for a translator service ASAP, they can be a PITA, perhaps worse than developers ;)
  9. Try to get your translators to use the CMS for translations, that way they are more likely to fit the space provided & context. Plus you don’t have to migrate the content from one format to another and deal with the inevitable human errors in languages you don’t know.
  10. Make sure each language has it’s own URL, & language meta data is set correctly, that way search engines, like google, will index the site correctly
  11. You’ll need to decide if each translation is representing a language, country, or culture. This is so you can use the correct ISO code in your URL’s and database meta data. ISO code resources are linked in line above.
    1. Language codes are for the language family only
    2. Country codes are just for the country and imply a site that also has it’s content tailored to the country
    3. Cultures are a combination of country & language (British English, American English), you may prefer using cultures if you’ll have different content for different regions using the same language, this is L1on.
  12. Content change monitoring across languages is going to be tough. Most CMS’s don’t have logging for when content is changed so you have to keep track of where each language is. For example if you’ve changed the English version, but not the Spanish version.
  13. Most of your problems are going to be in CSS, a frontend developer experienced in multiple language websites will help the project go smoothly.
  14. Testing is a MUCH bigger problem. Instead of all pages in all browsers, it’s all pages in all browsers in ALL LANGUAGES. And the types of issues that come up require eyeballs & discipline to find.
  15. Avoid flags or other symbols of nationality, and make sure to respect things like simplified & traditional chinese, which implies mainland China or Taiwan, and both sides may have hurt feelings when you mix them up, so don’t be rude.
  16. Google Translate is not very reliable, but it looks good in a pinch.

All these things will cause you pain and suffering if you are not prepared for them.

Got more tips? Please post them in the comments, and thanks :)

Thanks to Betsey Kershaw of Sugarbeet Creative for commiseration on these hard knocks & the headline.

No degree? No Problem
(some hard knocks may apply)

How to get into Web Development with NO degree and NO debt.

I woke up this morning listening to MPR reporting on 800 newly unemployed workers from the now former Ford Ranger Plant. In that report a couple lamented the end of a time when someone could get a good job, work hard, and achieve the American dream of a nice home, & enough money to raise kids and retire.

Fortunately it’s still possible to get a good job making websites, it’s just not easy, but neither is working on an assembly line so lets suck it up and talk about a plan.

Is Web Development The Right Job For You?

The best advise I can give you here comes from a conversation with Robert Nelson about advise he’d give to a new developer.  It went something like this:

There are two parts of this job, the really stressful part, and the really hard part.  So you better really love programming or it’s going to be bad.

I can’t recommend enough to that you start playing around making websites as soon as possible.  If you’re not fascinated with it, enjoy the complexity, and the terrifying quantity of things to learn, find something else to do.  Programming is just not a job you can do and hate it.

I have talked to people who spent 2 years in a Web Development program, got all A’s, learned they did not like programming, and could not do it for a living.

Where To Start

Nobody, other than the Military, is going give you on the job training.  You can get a job in Software or Web Quality Assurance (QA) that will give you exposure to people who can answer your questions, point you in the right direction, and get some relevant experience.

You’ll need to be able to follow directions, write well, & use a computer.  Your job will be to use a computer to review websites & software to make sure it works & looks correctly.  To be effective at the job you’ll need to learn about common mistakes, differences in web browsers, security issues to test for, and environmental factors that effect the user experience.  To be good at it you’ll need to write bug reports that take less time to understand than they do to fix and use automated testing tools like Selenium to make yourself more efficient and valuable to your team.

The skills you learn in QA will make you a better Web Developer.  You will use them all to write software, and I’ve never heard about them being taught in school so you’re not at a major disadvantage.

This is going to be a hard job to get if you’ve never done it before.  If you can’t find a paying gig try for an unpaid internship.  Everybody needs more testing of their applications and everybody is cheap.  Do it well and in a year you should be making more than $15/hr, learn the automated testing tools, well, and you can get paid as well or better than most developers.

One thing to keep in mind is that bugs hurt developers feelings.  Even if we don’t admit it they all sting, so be kind even when you don’t have to be.

Below are some QA Jobs in Minneapolis from my favorite Job site indeed.com, as I write this there are 560 job postings for QA pro’s so get after it.


Making The Transition To Development

It is going to take you at least a year to get really good at QA, it’s better than digging a ditch but finding bugs usually pays less than making bugs.  Frontend Web Development like QA is one of those things that most schools ignore or do an AWFUL job of teaching so skipping the student loans and jumping right in is not a disadvantage.     Frontend Web Developers usually get a web design in the form of a layered Photoshop Document (PSD) and convert it into HTML & CSS.   Photoshop is a ridiculously expensive image editing program that I avoid like the plague, and is usually used by print hacks making bad websites, but that’s the gig.

HTML stands for Hyper Text Markup Language, it defines roughly what goes where on a website, it’s not hard to learn, you should have the basics down in about 8 hours of messing around.    I learned HTML on W3Schools using a tutorial much like this one: http://www.w3schools.com/html.   This one from Mozilla looks good as well and appears to be more current: https://developer.mozilla.org/en-US/learn/html.

CSS stands for Cascading Style Sheet, these files define what a website looks like.  CSS starts simple, but is very hard to keep that way, back in the day when I got started it was MUCH harder, but modern browsers have made cross browser CSS support more consistent.  Again W3Schools & Mozilla have some great free tutorials: https://developer.mozilla.org/en-US/learn/css  &   http://www.w3schools.com/css/.  A good resource to see the impressive flexibility of CSS is http://csszengarden.com, it uses one HTML file but allows designers to submit their own images and CSS files to make it look drastically different.

CSS is one of those things that many people claim to be able to do, but very few can do well.  It’s hard but writing good CSS is much like writing good applications.  It will teach you the value of coding standards, consistency, comments, & reusability.  I’m tempted to say so much about how not to write bad CSS but that’s for another blog post.

Your First CMS

So you can write HTML & CSS, but to market those skills you will need to pair them with one or more CMS’s.   A CMS is a Content Management System, they allow users to login to a administration interface and write their own content.   I’d suggest you get your own WordPress blog and play around with it.    There are a TON of learning WordPress sites & resources but start with the source and you’ll be fine http://learn.wordpress.com.  Getting really good at WordPress is hard but worth it, and you’ll definitely be able to move up the Web pay scale.

For this you’ll need a host to store it on, and a domain name to use to access it.  I’d suggest Dreamhost.com for both, Dreamhost is cheap and allows you to do a lot of things with out knowing much of the details.  Dreamhost.com is not very reliable, or fast, but it’s an excellent platform for learning about making websites.   Once you know WordPress you can start going out and making websites for people, do this as much as possible.  You’ll have to make several websites to get good at it.  If you can charge for them, it’s not uncommon for people to pay $2,000 for a basic wordpress site, although $500 to $1000 is much more common.

Again this is going to take a year or more to get good at, many people stop here and make a career of making WordPress sites, but there is more money to be made and bills to pay.

Advanced Interactions with Javascript & JQuery

JavaScript is the first real programming language you should start tinkering around with.  Most everyone starts by copy and pasting other people’s code and then breaking stuff until they get it figured out.   It’s a good first step, but expect things to get increasingly harder as you’ll getting into the world of programming.   Mozilla is again here to help https://developer.mozilla.org/en-US/learn/javascript with the basics.

Once you know the basics JQuery & JQuery UI will make fancy interactions fun.  JQuery is probably the most fun part of web development, and there’s definitely money in getting really good at JQuery.

Once you’ve mastered QA, HTML, CSS, & JavaScript/JQuery you will probably have about 5 years of industry experience and you’re a easily employable Frontend Web Developer.  Since the schools that teach these skills are few in number and of poor quality your School of Hard Knocks education is usually preferred.   However you can still move on to ever more complex skills that will make you more recession proof.

Backend Development

Backend Development is mostly pulling things out of a database and pushing things into them with a bunch of stuff in the middle.   There are some great self taught programmers but at this point a few classes will go a long way.    I’d strongly recommend a intro to programming class, and a intro do database design class at a technical school like Rasmussen or Hennepin Tech.  I got my A.A. in Web Programming from K-State Salina and I believe it was a great value. You don’t need the full technical degree to be productive, but the introductions to programming and databases will be a big help.

As far as languages lets check out Indeed’s Salary Trend data:

The salary graph makes Python & Ruby look great (and they are), but the demand graph below shows ASP to be in more demand.

It’s been my experience that ASP.NET and Microsoft languages pay well and have better tools that the other languages. Also Microsoft has released their excellent development tools in reduced feature set Express editions that are perfect for learning.

I use, and like PHP, however the money is clearly not in PHP.

Final Words

Becoming a well paid Web Developer is well within the reach of anyone with a good mind and determination.   It’s not easy, it’s usually stressful, but if you are crazy enough to like programming it’s a good gig with a ton of jobs all over the world.

If you have questions, any good developer will help you. We like to show off ;) and we are all keenly aware that this stuff is hard, at least the first couple times you did it.

Quick Tip: using format option with sfWidgetFormJqueryDate

It is not well documented how to use the format option for sfWidgetFormJQueryDate in the sfFormExtrasPlugin for Symfony 1.4.

However, once I learned about sfWidgetFormJQueryDate’s date_widget option it was pretty easy.  Just create a new date widget and use the format option there.

The example below needs to be in your form’s configure method and assumes our field is named “available”.  The format I chose gets rid of the forward slashes between the selects that were showing up to the right of the button that triggers the calendar input.  I’m also setting the button text.


$this->setWidget('available',
new sfWidgetFormJQueryDate(
array(
'config' => '{buttonText: "Choose Date"}',
'date_widget' => new sfWidgetFormDate(array('format'=>'%month%%day%%year%'))
)
)
);

hopefully this will make googling this little issue a little easier.

I support equal rights for all families

This is a web development blog, and I intend to keep it that way. However, I feel the issue of equal rights for all Americans is so important that I need to take advantage of the handful of hits a day I get to do my part to support marriage equality and individual rights.

The following video is the most influential I’ve seen, please take a moment to view it and help keep hate out of Minnesota by signing up to say informed at MnUnited.org

I’ll be back soon with more technology posts, please forgive me for going off topic with my personal politics

Interactive Infrastructure for under $25 a month

The hardest part of interactive projects is not the coding or ideation, its working efficiently as a collaborative team. There are ways to spend a ton of hours & money on your infrastructure, and then invest hours of maintenance every month, all on tools that don’t directly make you money.
More »

Apostrophe: An outstanding Symfony CMS with no backend

Update: November 30, 2012 a.KindEndeavor.com is a growing directory of Apostrophe CMS professionals like developers, designers, Testers, & Strategy folks.

Update: January 7 2012 – @dandyMedia did a companion post reviewing the Diem CMS.

Update: December 16 2011 – The demo links no longer work for this post it was pretty old anyway.

Update: this review refers to the 1.0 version, as of Jan 2010 the new 1.5 version is available: http://window.punkave.com/2011/01/18/apostrophe-1-5-released/

Why do I care and where is the  demo:

Live demo

Link: http://bit.ly/An_live_demo
Username: admin
Password: demo
* login info is prepopulated in the login form so you can just press the login button
** The database and media are  reset at the top each hour.

Why you care

More »

5 tips for Cheaper Web Development

1. Requests for Proposals pay for themselves

The RFP document will be how the development team provides an estimate on both the work described in the document and the risk you represent as a client. Better RFP documents will result in a higher response rate, more accurate estimates, less time in meetings talking about the RFP, and less padding to account for risk.

The customer acquisition process is the most expensive operation for a custom development shop. Every lead that comes in the door represents a mix of opportunity, risk, and expense that development teams work very hard to mitigate. The good news is that you are the one with the money to spend, but to get the most for your money, you need to maximize your vendors’ opportunity and minimize their risk and expense.

Start your RFP with the the project working name, who to contact with questions, and how and where to submit the RFP to. Next, write a short, high-level project summary that includes what you want to do and how you will define success. Follow the project summary with a project timeline with a deadline for submitting proposals, a start time, and when you need the project completed. If you have any specific technical requirements, include them. If parts of the project are already completed or will be sourced to other vendors, make that clear as well.

Make sure each page of the RFP has a page number; this will save you time when going over the document in phone calls. Section headings also help to quickly steer conversations to the relevant portion of the document.

Focus the RFP on what needs to be done and avoid how it is going to get done. Sometime there is a temptation to get into details, but a decent web development team will quickly figure that out on their own. There are exceptions, but focusing on what to do and not how to do it is a good rule of thumb.

Pro Tip: A good RFP document can replace about half of the scope of work document your development team will write, which translates to even more cost savings for you.

More »

symfony 1.3 Book by Tim Bowler & Wojciech Bancer

Symfony 1.3 Web Application Development is the latest book on the symfony PHP web framework and the first not written by the authors of the framework.

This allows the authors to adopt a more pragmatic style that favors 3rd party plugins.  This is a good thing because IMHO the most important thing about a framework is it’s library of extensions. More »

Internationalized (i18n) Admin Generator CRUD’s in Symfony 1.2.9 + Doctrine

I was having some trouble finding documentation on how to i18n generated CRUD’s, so once I figured (most) of it out I thought I’d share it

The Example Application

Content Block CRUD with French langage selected

Since I have to create a feature in my one of my current work projects to store random bits of content, like privacy policies and such, in multiple languages. I thought I’d double dip and use that for this example.  I’m calling the feature content blocks.  It will have a backend CRUD that will facilitate translations.  The UI I needed was to have the default language show up as well as one of the many languages this information would be translated into.  My app has the possibility of having more than 20 language options so putting them all in the CRUD at once was unreasonable. More »

Symfony Plugin Review: sfEasyGMapPlugin


Dzone

Symfony Plugin Review: sfEasyGMapPlugin

The sfEasyGmapPlugin seeks to encapsulate much many of the features in the Google Maps API and make them easily available in the Symfony PHP 5 Framework. More »

Symfony refactor of the Zend Quick Start Tutorial


Digg!
Dzone

Learning Zend Framework and getting a repetitive stress injury doing it

Edit: please see Matthew Weier O’Phinney’s (the current project lead for Zend Framework) response in the comments, there are some exciting things comming for ZF

My friends & colleagues have used Zend Framework (ZF) for a while, and I do my best to avoid it and use the Symfony PHP framework.  Initially I was open to learning ZF, I was just curious why people liked it.  The more questions I asked, the more I realized there were no good answers other than standards for standards sake, and variations on the Sunk Cost Fallacy.  If pressed I was told that I had to give Zend Framework a chance because it is a younger framework than Symfony, (um no).  Some of the developers had even written a library to add on to Zend Framework to make it more usable, it contained features that were already in Symfony.  IMHO, writing code to help a framework catch up is an excellent reason to switch to another framework.

This last week I was finally forced to use ZF, my rebellious use of Symfony only served to annoy the other developers, and had the potential to increase maintenance costs.  It seemed like a reasonable request, and all those developers couldn’t be wrong could they? More »

What Three Twin Cities Web Entrepreneurs have in common

The EstateSales.net story is similar to the other successful small to medium sized start-up stories I’ve heard from other Internet start-ups.  

  • Rob Buntz  has a story where he was involved in real estate as a investor, then a close relative needed to buy a house and didn’t want to pay a huge commission to a agent, and Webdigs.com was born.
  • Charles Bailey   told me a similar story on how he founded ResortsandLodges.com and went on to expand, through acquisitions and growth into TravelNet Solutions. He found a problem he solved the problem, he didn’t mess it up.
  • Daren Cotter this guy…ugh amazingly successful with all kinds of growth awards. Apparently Daren got involved in some early attempts at online customer loyalty sites decided he could do better, and did.  

What all these guys did was get out and participate in the community around them, pay attention, and find a problem with a magnetizable solution that could be repeated over and over, then they didn’t mess it up.  It’s not rocket science, it’s not fancy or glamorous, but it is lucrative & rewarding.

One importance difference between the 3 of these companies is that Webdigs.com has not found an effective way of communicating what they are about in 5 seconds.  In more traditional sales, a pitch is limited to a 30 second elevator speech.  However on websites I think that users only allow for more of a 5 second pick-up line.  Both TravelNet Solutions & CotterWeb do a better job of communicating to users almost instantly why their sites are compelling.

EstateSales.net – A great example of a niche market website

So I was browsing through craigslist.com, looking for some deals.  I happened across a post for some estate sales in the garage sale section.  And this site was listed for more information.

Turns out there are companies that do a lot of estate sales, which are pretty much well organized garage sales for the recently deceased or almost deceased.  From the EstateSales.net Story page I learned that Dan McQuade had made a little business out fixing up and selling old mixers.  

From that side project he ended up meeting several people who organized estate sales, and from them he found a under served, and inefficient market that could benefit from the reach, information throughput, and scalability of the Internet.

Fortunately his son Mickey knows a thing or two about making websites.  In only a few short years they were an overnight success ;)

Another awesome thing about this site is that they probably don’t have do deal with the hassle of a lot of employees.  Everything is probably, or should be, automated and manageable online from a beach chair in Jamaica.

If I wasn’t such a introverted curmudgeon I’d get out and find my own problems to solve and get rich off of, but for now I’ll just enjoy the success of others.

online bookstore optimized for “muddling through”

http://zoomii.com

This is a really interesting take on a online bookstore that is really optimized for free form exploration with a very intuitive interface for those accoustomed to a mouse with a scroll wheel.

Interesting User Interface, and it brings up some thought provoking usability questions.

This type of experimentation is going to lead to some very interesting Information architecture in the future.

Free Geek – Help the needy get nerdy in the Twin Cities!

FREE GEEK is a 501(c)(3) not for profit community organization that recycles used technology to provide computers, education, internet access and job skills training to those in need in exchange for community service.”

There are a couple of folks looking to set up a Free Geek branch in the in the the Twin Cities

If you are interested in helping out you can contact them here.

Here’s a video with the low down on why this organization is so cool:

Webdigs got a 8.5 rating on it’s mortgage calculator

I don’t know why I’m still surprised by the Internet, but there’s a guy who ranks loan calculators.

Fortunately he liked webdigs.com‘s mortgage calculator:

http://superloancalculators.com/?p=12

A new version of the mortgage calculator will be out soon, maybe we’ll break 9.

Webdigs.com, (with symfony inside) recognized as “kick ass” by Future of Real Estate Marketing

Future of Real Estate Marketing, a pretty awesome real estate blog, listed Webdigs.com as one of 10 “kick ass” real estate search sites.

This project would have been MUCH more difficult without Symfony providing structure, keeping the teams code somewhat consistent, taking care of so much drudgery.

http://www.futureofrealestatemarketing.com/10-kick-ass-real-estate-search-sites/

I got to admit, this was pretty cool, but not as cool as this

Twin Cities Real Estate is a Investors market

I’m not an agent, but I have been working on webigs.com for over a year now as a Developer. From what I’ve seen I feel fairly comfortable shooting my mouth (blog) off saying that the Twin Cities is not a Buyer’s market, or a real Seller’s Market.

I say this because the repo houses are dragging the aggregate numbers down and scaring sellers into lower prices, that are probably more in tune with prevailing wages. At the same time the Repo twisted numbers are causing buyers to make low ball offers and / or be unnecessarily nervous because of the uncertainty in the market.

From the data I see, and my experiences in multiple failed attempts at purchasing a home, decent well built houses at a fair price will sell fairly quickly to people who intend to live in the house.

Where the market gets really interesting is the opportunity to invest in real estate. Right now I think a lot of money has been scared out of the market, and the inventory of Bank Owned houses that that will take some work and 3 months of messing around is up. These barriers to entry are not unacceptable to someone who has bought and sold residential properties before. The upsides are the lower prices for Bank or Corporate owned prices and the good market for good houses.

My advice, for what little it’s worth, is if you’re an investor now is the time to put money into Real Estate. If you’re a home buyer, don’t think you’re going to get some amazing deal, but expect a fair deal. If your selling well the times are not as outstanding as they were, but they’re still pretty darn good.

Whatever you do use Webdigs.com and get 2/3 of the buyers agent commission back, or if your selling a easy flat fee of $2000. It’s hard to screw up when you’re saving that much to start with and you have a whole team of experienced agents working with you the whole way.

TableKit a easy sortable table based on Prototype.js

Many times using scripts I find on the Internet turns into kind of a hassle. They are usually unfinished side projects, or are kind of bloated and slow.

TableKit is not one of those scripts, it’s fast & easy to implement. Development time was low, and the designers didn’t complain too much about working with it. What it lets you do is create a html table slap in some ID’s & classes, load the js, and you have a really nice sortable table. This sort of elegance in design is never easy and the folks at Millstream Web Software have done a great job on this.

I used it on the Real Estate site I’m working on webdigs.com/mywebdigs (free sign up required) to organize our users favorite saved houses. I’ve found myself using it a lot for my own home search.

Happy Birthday Symfony (1st Symfony recruiter call, Zend Framework, & a happy client)

This last week has been really got me feeling pretty positive about the future of the Symfony PHP framework.

Last Thursday Erica Guay (erica D0T guay AT Sapphire.com) called me and is the first recruiter to ask me if I knew the Symfony framework. She’s got a pretty awesome opportunity near Boston, MA to fill if anyone is interested.

The next Tuesday I went to a presentation at Sierra Bravo here in Minneapolis, MN about the Zend Framework and Lucene. Maybe I’m a fanboy but it really looks like Zend has some catching up to do. Lucene is impressive and there is a Symfony plugin for it. Justin, Tom, and the rest of the Sierra Bravo Crew have already cranked out 5 Zend Framework sites but when I showed them the development environment in Symfony someone in the crowd literally said “wow”. It was admittedly a pretty nerdy bunch, when Justin (the presenter) mentioned a design patterns book he liked the guy next to me tapped his chest and made the peace line and said “that’s who I’m down with” :) If you are interested in attending their next presentation RSVP here.

The 3rd thing that reminded me how great Symfony is was just today when I showed a client an Admin Crud that I had created in about 30 min. He was pretty excited, and it’s nice to have happy clients.