Life consists of all kinds of experiences. Some experiences are common, and we can go through them every day. Having a tasty meal. Sitting in traffic. Chatting with friends. Watching a good movie. These kinds of moments make up 97% of our lives. We don't think too much about these moments, they just happen.

Then there are those other experiences. The first day at a new job. The last day at an old job. A spectacular vacation far away. Getting married. Graduating from college. These things complete the last 3% of our lives. But these moments don't just come and disappear, they stay with us. We never forget these moments, and they eventually become part of how we think and how we live. Experiences that define who we are. Here are some 3% experiences that I'd like to share with you.

Above are a few of the 70+ children who live at Shepherd's Field Children's Village a foster home in China that goes all out to provide care, housing, education, and adoption opportunities for orphans with special needs. Miraculously, they are a private, non-profit organization. And Shepherd's Field has definitely seen some miracles. For example, back in 2002 when searching for land to build their facility on, the government offered them property for a price of 1 RMB, equivalent to 12 US cents. A far cry from the appraised value of $150,000. And for the last 12 years they've recieved many other acts of generosity. International doctors regularly visit the facility to donate their skills and time. Companies have donated millions into a new vocational education building that's being built. Every miracle that supports the foundation, supports the kids.

And here are a some of the faces from a group of Liferay employees in our China office who visited Shepherd's Field a couple weeks ago. None of us knew what to expect from the trip, but we prepared some games, crafts, and songs that the kids really enjoyed. But I don't think we could've done anything to prepare for the huge impression that these kids made on us during our time with them. I want to share these impressions with you too:

These kids know how to love. The word I heard all week was "gēge" (哥哥). Gēge! Gēge! Gēge! (almost rhymes with "burger") The children would keep shouting this to us, starting from the very first day. I feel like I started to hear this word in my sleep! It means "older brother". For the girls in the group, they would always hear Jiějiě (姐姐), which means "older sister". The kids would say this to me, and would always be lifting their arms just like this:

The children always wanted us to hold and carry them. As the group videographer, so many times I was trying to film the kids, but I had to stop because they would shout gēge to me and reach out to me. They didn't even know who I was, but I know it didn't matter to them. That's just how trusting, and innocent they are. They are not afraid, they have no inhibitions. They just love to be held, they love to play, they love to connect. Some kids were even very considerate to us, making sure that we weren't too hot or uncomfortable during play time. We were all really surprised by how caring they were.

These kids are truly happy. I will never forget this boy I got to spend time with in one of the houses. He always sat on the floor and played with a rubik's cube. I sat in front of him, and right away he gave me this little plastic duck so I could play next to him. I tried talking to him, but he was very quiet. I don't remember how it happened, but I took the duck and walked it across his back, making quacking sounds. He couldn't stop laughing and laughing. If I stopped, then he would take the duck and put it back in my hands, gesturing for me to keep on tickling him with the duck.

I later saw him sitting in a wheelchair, and I realized that he can't walk, and for whatever reason he is unable to speak much. But I feel like he had a smile on his face every time I saw him. On the very last day, I went back to his house to give him my last goodbye. When he saw me, he smiled and quacked at me just like when I was playing with him days before. That moment, I will remember forever.

From the outside it feels like these orphans don't have much. They don't have money, or gadgets, or lots of toys. They don't have their actual families. We thought that we would have to work hard to bring light and joy into their lives. But we quickly realized that they are already full of joy. The children are well cared for, they have everything they need. They have good food everyday, they have comfortable homes, and they have each other, the caretakers, the teachers, and the staff as their family. A huge 24/7 family. And they even have visitors like us who visit each week and play, play, play with them. They are never alone! These children have very little to worry about. It was amazing to spend time with them.

Meeting these kids can change your life. They don't have many of the creature comforts that we have, and they live with different disabilities - yet they are happy. Genuinely happy. The result is that their happiness feels very pure, and innocent. That kind of happiness is infectious. We went to the orphanage to love on the children, but it almost felt like the opposite - the staff and kids wanted to show love to us.

The whole trip was really inspiring and heartfelt. Many of us reflected on ways that we can be more loving towards our own friends, family, and coworkers. We even had a group chatroom with the whole team, and we were sending beautful photos to each other even after everyone already went back home:

I hope this post has been encouraging and helps you see a bit more of what Liferay the company is doing to help communities across the globe. For more info about Shepherd's Field Children's Village and how you might be able to get involved, visit: http://www.chinaorphans.org/

I promise to blog about behavioral analytics soon. Promise. But I have a valueable tangent that I think will be helpful to many (including myself).

Let's get productive What I want to share about goes beyond job description or industry. You may be a developer, a customer rep, a QA specialist, a manager, or CEO. You may be in software, or aerospace, or fashion, or farming. No matter who you are, one universal thing we all care about is reaching our goals. Making progress. Just getting stuff done, and hopefully getting it done without great confusion, pain, or hair loss. I mean, who doesn't want to be more productive?

I'm sure you've all said this before: "I've been so busy running around all day, helping people and working on so many things... But I feel like I didn't get anything done!" This happens to all of us. Lots of things can steal our productivity, like context switching, or unclear requirements, or when coworkers keep showing you the latest photos of cats playing piano (guilty). So some things definitely decrease our productivity and we need to minimize those.

But we can also do things that maximize productivity. Now, I don't claim to be an authority in this subject, but my team has found some practices that really work for us and have helped us to work faster, be more focused, and even feel happier at the end of each work week (and no, I'm not referring to the happy hour that the LA office has every Friday afternoon). I believe the following 5 disciplines have been our "secret sauce" to increasing our productivity, and I believe they can help you and your team too.

1) Make a shared task list that your team can learn to love and own. Now, I know this sounds super basic, but don't log off and leave just yet. Most people have a list, or board, or backlog, or whatever you want to call it. But there are some guidelines that will make your list a useful tool, and not something that the team gets confused by:

All tasks on the list should be crystal clear. Or think of it this way: if no one else on the team understands it, then it shouldn't be on the list. No one wants to touch a task that's half-baked or confusing, and it wastes everyone's time. So your list shouldn't be filled with cloudy ideas, big dreams, or vague placeholders. A well defined set of tasks allows people to collaborate and take action.

Tasks should have a finite ending point. Create a clear finish line for each task. For example, it might be considered done after it's been passed to the next department. Or when it matches the mockup. Or after it's been demo'ed to stakeholders. Or after it passes QA. Or even all of the above! This gives the team something to aim for, and ensures that there are no loose ends. No one wants to work on the never ending story!

2) Meet with purpose, and meet often. I've been to so many meetings that leave people thinking, "What was the point of that?" Even worse when it was a long meeting because that's a lot of wasted time. No more. My team has meetings that are more than just useful, but we instictively meet because it helps us get things done fast.

Use your team's task list as the center of discussion. Remember our beautiful list from the first point above? You will talk about that list. You will learn to love that list. Go down the list and discuss the progress of each task. How is this task going? What's left? Who needs help with it? Sometimes it's a simple status report, sometimes it turns into an all out debate, but the point is that everyone in the team now has visibility and a piece of ownership in what's going on.

Meet daily. Here at Liferay, there is meeting phobia like nowhere else. We hate to lose time and context switch, especially if a meeting seemingly does not contribute to anything. Well, for one, if you meet often, the meetings are shorter. In monthly or weekly meetings, you can meander and miss details, there's just too much information to catch up on. If you meet daily, the meetings are concise and quick. But also, if you meet daily, you catch issues more quickly. People don't go off course. You can celebrate each task the day it was finished. The instant feedback keeps the team feeling alive and healthy.

3) Prioritize your tasks. This one sounds the simplest, but depending on how tangled your departments are, this may be a huge challenge. But the goal is to get your team's task list into priority order. And the simpler it is, the better. I've experienced ticket priorities, and business values, and google docs, and all sorts of meetings that, when all combined, convolute any sense of priority whatsoever. This is how my team does it: we order the tasks from top to bottom. Whatever is on top has to be done first. Whatever is on bottom has to wait for the stuff on top. Every two weeks, we refresh the list. For you it might be every week, or every month. But a clearly prioritized list will keep everyone laser focused on the most important goals, and you will see the results immediately.

4) Gather ideas from retrospective meetings. I think retrospective meetings or debriefings are neglected way too often. We work and work and work, finish things, then press on to more work. And the argument is, "We don't have time to do a retro. That's valuable time we can spend getting more stuff done!" But... that's like owning a car and saying, "I don't take my car to the shop for checkups because I don't have time!"... until something goes wrong and you're forced to figure out what happened afterwards. Good retrospective meetings will help prevent problems, and actually boost your team's effectiveness. Here are some guidelines for running productive retros:

Keep it fresh. Don't always do the same thing, like say, "list the negatives and list the positives". It gets old really fast. Do something different each time, and get ideas from sites like Retr-o-mat. Even change up the location - one time we did retro at a coffee house, which felt more relaxed for conversation.

Take it slow. I've been in retros that were only 30 minutes or less and it stifles conversation and brainstorming. Sometimes it takes people time to warm up and for the ideas and comments to start flowing. We usually budget 1.5 hours, and we can always finish early. It depends on the size of your team, and how often you retro.

Don't leave without action items. This is where the magic happens. Have everyone suggest ways to improve. Vote on the favorites and make those your action items. Then post these somewhere visible and do it! Inevitably, if my team can't see the action items somewhere, we'll forget! And then ironically we'll find ourselves suggesting the same ideas at the next retro. Learn from our mistakes!

Having these meetings may feel like a timesink, but ultimately it will push everyone to work more smoothly and more efficiently.

5) Set a rest day for self-enrichment. Because our team became so focused on high priority tasks, we found that seemingly "less important" items would fall off the map. Things like:

Blogging to the community or to the internal company

Writing wikis or "code recipes" of cool stuff we did recently

Teaching other teammates (or even other departments) useful knowledge and tips

Investing in side projects that involve your job skills - doesn't have to be work related!

Aren't these all the things that we all neglect, but always say, "I wish I could find the time to do these things." Well, if you can, just declare a day for it. We call ours a "Sprint Sabbath", and have it every other week. If the retrospective meeting I mentioned about earlier is to grow your team, think of this rest day as a way to grow the individuals. Sure, sometimes our rest day sometimes gets pushed around by high priority deadlines or emergencies, but we still look forward to it because it helps the team refresh and restart before more projects come down the pipeline.

One step at a time Again, these are components that have worked well for us so far, independent of any methodology (though it may look suspiciously "agile"). But at the root, agile or not, I think these will all apply well to most any team and context. If you are already doing many of these things, then that's awesome! But if you aren't doing these things and would like to give them a try, then I'd recommend applying gradually, one step at a time starting from #1 down to #5. Feel free to comment with any questions or thoughts.

I would like to bring attention to a hot topic around the Liferay offices lately, and one that you should definitely consider for the websites that you are working on: behavioral analytics. I'd like to explain this with a small example that you might be able to relate to:

Let's all start with a lovely place that I call Cup Island:

I took this photo in the Liferay LA office last Friday morning. This is one of the small tables downstairs near our lounge/reading area. You can see this table immediately when you enter our North entrance. It is usually dotted with different mugs and glasses throughout the day. This is Cup Island.

As I was taking this photo, Shannon from our Marketing department said to me, "why are people leaving their used cups around? Someone should probably put them away."

And to someone who notices Cup Island for the first time, this is the natural response. In fact, I have left a cup here before, and had it disappear into the hands of the facilities cleaning team (which they kindly gave back to me after panicking over its disappearance).

But I explained to Shannon the purpose of Cup Island. "Don't worry, these cups aren't left here to die," (I'm paraphrasing a little bit), "this is a temporarily holding place until their owners come back for them."

You see, the reason that Shannon didn't realize this is because she is a woman. Wait - I don't mean this in a bad way - what I mean is, Cup Island only exists near the men's restroom.

So that is the purpose of Cup Island - a convenient place to put cups when using the restroom. To other people, this might only be Decorative Plant Island. It really depends on why you use the table.

So why use it to hold cups? Let's understand the audience. This restroom is near the kitchen, the only kitchen at our office, and the only place to get drinks from. And more than half of the employees at Liferay don't work on this side of the building, but instead work either upstairs or in another wing.

So when an engineer who sits upstairs needs to use the restroom, they are probably thinking, "I should also bring my cup with me so I can visit the kitchen in one trip." And right before they go into the restroom, they see this table, leave their cup, and pick it up when they exit the restroom.

So how can we improve this situation? Well, it depends on what we want to achieve. We cannot ask employees to stop drinking water, or to stop using the restroom (some of you may be thinking that asking for one may lead to the other anyway, but after a while our employees would cease to exist).

If our goal is to stop people from leaving cups on the island, we could try providing larger cups, so refills might not be as necessary. Or we could build a kitcken that is closer to the employees (or move employees closer to the kitchen). Or we could simply just remove the table. Employees may leave their cups further away, or just take two trips from their desks, which might cost them convenience and time.

If our goal is to make Cup Island easier to use, we could remove the huge plant and make more cup space. Or we could turn it into a Super Cup Island, with more capacity and a handy labeling system so people never get their cups confused.

Whatever we choose, these needs still exist: (1) everyone needs to drink water, and (2) everyone needs to use the restroom. But behavioral analytics tells us that the kitchen or bathroom may be too far away.

Learning to improve websites based on user behavior

For the redesign of liferay.com, we are trying to study where people are leaving their "cups" on our website. We know that there are community members, enterprise customers, trainees, partners, event goers, internal staff, liferay newbies, and evaluators - each of us enjoying the site, or fighting with it. We are studying how people use the site, where they are clicking, and trying to figure out why. If we can really understand our users, only then can we improve their experience. We're playing around with Crazy Egg, Google Analytics, and some other marketing tools. We're suggesting to the core product team that it would be killer to bake web analytics directly into Liferay Portal. Hey, it would make my job a lot easier.

Admittedly, this is not a new subject at all. Admittedly, Liferay has lots of room for improvement (the webteam would know, as we are working on our instance of 6.1 day in and day out). For Portal 6.2, we've started doing in-house user testing - I know this because I was just tested last week! And we've begun to make incremental improvements to the website. I already have examples of some small victories we've had lately, but I will save that for the next post.

We do have some lovely UI and content changes on the way. Just to prove how serious I am: the code is already committed and was approved by Brian Chan himself (well, he approves everyone's code). Stay tuned, same web time, same web channel.

Create affinity diagram to find common issues and brainstorm solutions.

Create plan for improving liferay.com site flow and site metrics.

Propose new site flow and metrics.

Revise and re-propose site flow and metrics.

Answer to random inquisition and fears about site flow and metrics.

Get over our own fears about site flow and metrics.

High fives around the house.

So after a couple hours of giving each other high fives (a couple hours is all the office can sustain, since we do have noise level rules to maintain around here), we each realized: "Oh right. We still have to like, make the redesigned website. Right." But being the clever guy I am, I said to myself, "No wait. Let's blog first." After all, I cannot deny who I am.

All exagerated explanations and untruthful introductory paragraphs aside, our team was ready to move forward with wireframes. But being the clever team we are, we said to ourselves, "Let's make the wireframe a clickable document. No wait, let's also make it editable so people can collab over content. No wait, let's just turn the wireframe into a wireframe website. Totally. Sweet."

So that's what we did in Liferay. It's kind of like when you use google docs with other people to create something that would normally take much longer if you did it separately. You're working on one paragraph, while someone else is fixing punctuation, while someone fixes grammar, while someone else is pasting in pointless animated .gifs of cats... Ok, guilty.

It's like that, but with an entire website instead. Design created a wireframe for us, we created a new site instance, created a new theme, and after dragging a bunch of gray, content-hungry portlets onto each page, we now have a website sketch pad, ready to go.

So our site skeleton is in the perfect place for multi-department collaboration. The marketing team is plugging in content and scheming page flow metrics, design is dreaming up the theme and layout, and the webteam is going to code in functionality to make the site more interactive and intuitive than ever before. Throughout this process, the whole company will be able to see and click through the site as it takes shape day by day.

And the beautiful part is, once we bring the website to a place that we like, going live with it should be as simple (fingers crossed) as exporting the new community onto the production server, and revealing it. What we see is what we get. If anything, we have more fear about just getting all the departments *agree* on things than actually getting the implementation done!

If all goes well (no promises, but we're definitely rooting for it), we also fancy the idea of opening the beta site up to the community to get feedback, since you guys are the people who use the site the most anyway =) That's definitely been my motto as of late: "Just give 'em what they want!"

The web and design teams are hot on the heels of upgrading liferay.com, with a full redesign soon after. We're still running our site map through executive approval, but our hope is to make a shift from how our current site flows. We want to streamline our navigation and content so everything is focused on and around our flagship product: Liferay Portal. By doing this we can serve our first-time visitors clearer messaging, and also set ourselves up for quicker turnarounds in refreshing and improving site content.

Another another main focus we have is beefing up our site analytics so we can see how people are flowing through our site, where the roadblocks are, and renovating those areas. One thing that we've been testing and am excited to share is a simple way to do A-B testing via web content templates.

So what's A-B testing? If you're unfamiliar with A-B testing, it's a little bit like blind-folding people and having them compare Coca-Cola versus Pepsi. Or a hamburger with special sauce versus a hamburger with new improved special sauce. Or a website banner that uses a stock image, versus a website banner that is done with in-house illustration. The idea is to serve users a 50/50 sampling of two versions of content, and sit back and watch the comparison results come in - the version that gets the most hits/clicks/downloads wins. Then you can keep the "winner", and if/when needed, you can pit the winner against newer revisions of content.

So pictured above is one example of where we've implemented this: our Enterprise Portal signup form. The pre-existing form was looking pretty plain and we thought it could use a minor refresh. The issue is that we've seen that lots of people land on this form just to leave it without ever filling it out. So as a really quick update, Design passed us some prettier styling, and we incorporated it into one of our two CMS template velocity blocks like so:

It's pretty darn simple, but it works like magic. We added disctinct google event tracking scripts to each of the submit form buttons, with an onclick like so:

onclick="_gaq.push(['_trackEvent', 'A-B Tests', 'Get It Now Form Submit', 'Original']);"

onclick="_gaq.push(['_trackEvent', 'A-B Tests', 'Get It Now Form Submit', 'Revision 12-20-2012']);"

....and the results have been rolling in over the past few weeks. What does the final tally look like?

So over 21 days of testing, the results are super close. The new form has so far been .8% more successful that the pre-existing form (using my math, not google's math). This tells us that, well, (1) the styling change in this case doesn't matter, and (2) at least our velocity function is great at giving a nice 50/50 of version A versus B!

Though this particular test didn't yield very riveting effects, the goal was to just set ourselves up for future experiments and start to include hard metrics in guiding and proving our website decisions. Hopefully this can help some of you out there who are trying to incorporate the same type of things to improve your website.

Every year, we gather all the ranks of Liferay worker bees from across the universe, via planes, trains, and cars, so we can take part in what is known as our Annual Liferay Retreat. Support, Events, Legal, GM's, HR, QA, C-levels - you name it - everyone spends a weekend together in Southern California at a retreat site. During the weekend there are some business panel talks, some team building games, but most of all, some good time to just relax and catch up with one another about both Liferay and life itself. During that time our company feels less like a global, high-profile, enterprise corporation, but instead we transform into an ethnic village meet-and-greet. I speak from experience when I say that it's not everyday you get to play a roudy game of spoons with developers from Spanish, Brazilian, and US offices, while being warmed by a fire place and a cup of local San Diegan beer. I miss it already.

Ryan (core Marketplace dev) figuring out how to fit 380 faces into a photo

And it's amazing to see how the Liferay village has grown. New offices have sprouted in Japan, Australia, France, and some 2nd offices like in Brazil. Not everyone could make it out to the retreat (local operations must persist!), but the headcount was nearly 400 - and more than half of that number were flown in from somewhere other than Los Angeles County. I'm quite sure we've nearly doubled the head count from last year - a blessing considering how difficult the economy has been for many around the world. The LA Office Facilities Manager had concerns that all the staffing prior to the retreat wouldn't be able to fit in our new building, let alone clear our already tight building permits. Luckily everyone fit just fine. But hey - there's always next year!

Liferay doing good in New Jersey

But if you've known Liferay for some amount of time, we don't stop at just numbers and small talk - we want to know that our 0's and 1's count for something. So the retreat is a time for us to hear about how Liferay Foundation and how our profits are helping people in all walks of life. There's work being done in starting a new Liferay office in a small town in Ohio to help employment. Groups of company-sponsored Liferay folk went to help rebuild New Orleans and Sendai. Liferay has donated and setup computer labs for students at a school in Watts, Los Angeles. Before our retreat was even done, a handful of our guys left early to catch a plane to New Jersey to help people who've been devastated by Hurricane Sandy. That and take some photos at White Castle =)

All in all, it's been amazing year of milestones for Liferay, and of course none of this would've been possible without all the contributions and support from our fans, customers, and users alike - so take this paragraph as a big THANK YOU. There's much to look forward to in 2013, so until then, Happy Holidays!

Liferay.com is getting a facelift. Fresh theme, content, re-flowed flows - the whole 10 yards (why would anyone want to go only 9 yards, when it doesn't even get them a 1st down?). And we're not just going to change the site once, but we really want to focus on giving ourselves a new platform for analytics, A/B testing, and the flexibilty to make incremental site refreshes and improvements over the long and short haul. It's gonna be good.

Given our open source roots and thriving community - the more innovative "ah-HA!" ideas we can get (including ideas from you!) the better! And that's where we've started - by creating a sort of "new idea stew".

And quite the stew we have created. We've had dozens and dozens of meetings with all sides of our company, gathering as many dreams and ideas as possible from our partners, events team, training team, support folk, international offices - all across the Liferay map. Some feedback we heard came in resounding choruses ("Make the website less static! More interactive! And for goodness sake, more intuitive!"), and some ideas were new and ingenious, ("Turn the user dashboard into a one-stop shop for apps, license keys, news, suggested downloads, and everything that is hip and cool!").

So how does one gather so much feedback and make any sense of it? We needed a way to "connect the dots", to give each idea a chance, while still letting the common themes simmer to the top. Check it out - here's a draft of our affinity diagram (insert magic twinkly sounds and flowery hand motions).

Doesn't it look somewhat intimidating and professional?? Yeah... *long, dreamy sigh.. followed by being startled into sudden awareness* So yeah, the idea is to find all of the common issues/ideas and plop them into groupings - groupings that settle into bigger groupings, that snowball into top priorities for us to answer in our coming months of concept brainstorms, wireframes, and development. Hopefully something like this can help some of you if you're in the very same scenario for your company website. More updates to come!

We are still young in this re-designing endeavor, but we'd love to hear your ideas and hopefully add a post-it idea in your name. What do you want to see happen on liferay.com?

In a previous blog post we mentioned that we are currently upgrading the Liferay.com site. We wanted to share more about that process in hopes that it'll be helpful to other Liferay users who want to upgrade as well.

To upgrade from 6.0 to Liferay Portal 6.1 EE GA2 here's what we did:

1. downloaded the 6.1 EE GA2 tomcat bundle

2. copied the db and the /data folder

3. updated the portal-ext.properties file

4. started the app server

The upgrade process runs automatically. This is a snapshot from a test we ran last week:

Also in moving to 6.1EE GA2, we will be our own support customer! If there are bugs and patches that you encounter, then we'll be on the same page as the rest of the Liferay 6.1 community, doing everything to make Liferay Portal the best product it can be. This year we also hope to work more closely with Liferay Support so that patches that we need can be more easily distributed to our users. Maybe we'll even get to the point where fixes are automatically sent out and installed similar to how anti-virus software updates work.

So, what changes will you see on the Liferay.com site? None! There won't be any visible changes, everything will work just like before. We have some exciting changes in store when we perform a overhaul of our website, so stay tuned. In the meantime, here's some other interesting info for Liferay.com:

Here in the LA office we don't officially do anything special for Halloween, but lots of people still dress up in costume anyway... which almost makes it funnier. Here are a few snapshots from the office today:

A Recipe For Going Mobile

I thought this would be a great chance to look back and share the development recipe we followed. Again, we did all of this in a little over one week's time, so I cannot promise that it is the absolute best way, but it's definitely a way to get it done without losing too much hair.

Everything here applies to either theme level development, or changes to content/template styling. My goal is to keep this somewhat high level, just hitting on the parts that may not be totally obvious to everyone (well, at least not all of this was obvious to me before starting on the project). I hope this is helpful for someone out there. It sure would have been helpful for me 2 weeks ago, ha.

1) Class Management - adding the classes you need so you can start styling NOW

a) Add classes for your viewports Using Alloy's Viewport gives you a set of nice classes to work with for common browser widths (mobile or not). Add these lines between the <head></head> tags in your portal_normal.vm theme file to get the classes auto-injected:

b) Add a class to hide content from mobile Some content probably isn't applicable to mobile. So you can create a class like .mob-hide to hide those things. Prepend them with whatever viewport width(s) that you need:

.aui-view-lt720 .mob-hide {
display: none;
}

c) Add a class to fix content flow Some content may already be styled with hardcoded pixel widths. Defining a class like .mob-100 can convert them to 100% width (or any other useful percentage that you need), allowing elements to adjust without overflowing or breaking:

.aui-view-lt720 .mob-100 {
width: 100%;
}

d) Add a class for your homepage We needed a class just for our homepage so we could do major surgery on it without affecting the whole site. To add .home-page to your home, add this to your init_custom.vm:

a) Setup your meta tags Setup your meta tags to make sure that smaller viewports load pixel for pixel to the width of the device's browser by placing this meta tag between your <head></head> tags:

<meta content="width=device-width" name="viewport">

b) Replace fixed widths on your "wrappers" If you have fixed width on your wrapper, banner, content, or any of your outermost wrapping elements, convert them over to percentages (probably width: 100%) so your site can breath in and out with the viewport size.

c) Wrap or hide your 2nd, 3rd, 4th etc. columns There is very little screen width for mobile, so do what you can to either wrap your columns or even hide them if they're not needed.

d) Add percentage widths on your images Any relatively large images in <img> tags will prevent your site from flowing properly. Make sure to give them a percentage width so they will shrink with the wrapper. Same goes for iframes or any other embedded content.

Different examples of navigation styling to accomodate mobile

3) Navigation Management - converting the main navigation to something that is intuitive

a) Let your nav items wrap If your navigation elements are inline left to right, then you'll likely need to re-style them so they wrap to accomodate less screen width.

b) Don't let your main navigation and your content fight Don't leave your main navigation stacked on top, just to push all the actual content down below the fold. This forces users to scroll down on every page of your site. Instead you can either put the main navigation on the bottom, or create a popout navigation, or just turn your homepage into the main nav, and provide a back button on all other pages (that's the way we went).

Nate getting feedback from Ce (manager of events)

4) Top Liberally With Testing

Test in your browser. Test on your phone. Test on your coworker's phone. Test on tablets, test on phablets. Have other people hit the site on their own so you can get their feedback. We found random, random, bugs on specific phone models that we wouldn't have found with phone emulators. You get the idea.

That's all I have for today. Hey! Have a great week. Friday is only a day away.

Coming to a mobile device near you

Things have been going fairly well in converting the Spain Symposium website into a mobile-friendly experience. The goal is to give our Symposium goers all the info they need at the flick of a thumb, all the while allowing the Spain events team to update on the fly (even during the event!) and have it refresh live.

At this point we are about 90% done with development, only left with code review and design review for (hopefully) minor tweaks.

Preserving the dynamic navigation

The good, the bad, and the humbling

Some things that we were initialy worried about were solved really quickly:

1) Liferay layout columns made hiding content consistent and clean. It was literally 1 line of CSS (3 lines with source formatting) and all the page layouts across the site were done!

2) All the Alloy UI popup widgets (aui-overlay-context-panel) were already rendering correctly on mobile. Only a couple adjustments to the align property made things centered and mobile-screen friendly.

3) Adding a small form language toggle into the theme was two lines of code.

One line to define what languages we're using and one line to display the toggle. The toggle works flawlessly. A snap.

4) We utilized $velocityCount on the main navigation to give each link its own numbered class name. This allowed us to give color and icons to the existing nav, and if the Spain office needs to add more pages, we can now style those too.

5) We also added id="page$layout.layoutId" to our body tag, giving us #page1, #page2 etc. This is how we we're able to easily hide/show content on a per-page basis.

Car = Liferay. Bird = webteam.

What wasn't as fun:

1) grabbing each mobile device around the office and saying things like, "Wait! I thought [device x] was supposed to be [some pixel count] wide!" We had to take extra care to convert fixed widths into percentages and plan for elements to "flow" on each page.

2) Oh, retina displays. We replaced most images across the site with 2x images, using width percentages for img tags, and background-size for background images. Retinafying? Retinacation? Retinanamification. But it looks beautiful now.

3) Fixing styling for content in both English and Spanish. This is a testimony as to why it's good to put as much HTML as possible into the template, and leave only copy inside the article.

What was humbling:

We could not leverage Alloy viewport as we had anticipated because out of box Liferay loads AUI last (for a plethra of good reasons), but this made the mobile site "pop" in from the full site, instead of loading up the viewports we needed immediately. I talked with some of our UI Engineers and found that it can be adjusted to load first, but only portal-wide, affecting Liferay.com as a whole - not an option for us. Regardless, Jon Neal (who makes responsive watermelons) had a handy js script that works great and loads fast for the seamless experience we wanted.

Coordinating articles, localization, templates, and theme into production

Takeoff is optional, landing is mandatory

The theme is committed, and now it's just a matter of careful timing and gluing together all of our "behind the scenes" content changes and the deployed code. Overall it's been an amazingly smooth process, from starting off wishing we had an extra two weeks, to saying 5 days later: "Hey.. we're done!" We can't wait for the code to roll out so you can kick the tires and give us some feedback (we'll let you know when it's up and running).

Things are chugging along here on the webteam side - there's nothing better than getting a lot of work done and it also being Friday @ 5pm.

Not everyone gets a chance to visit the Magical Kingdom (Liferay US Office) in their lives, but if you are ever so lucky then you might notice lots of humorous, yet functional signs hanging about. These were made, by request from Brian Chan, by our fantabulous graphic design team.

Sometimes lightning strikes. Sometimes lightning strikes twice. And sometimes lighting strikes a bunch of times while you're already busy with the Liferay North America Symposium and a pending website upgrade and a bunch of Liferay Marketplace updates and other ongoing, daily website tasks.

A few weeks ago our team got a JIRA ticket, requesting us to make the already beautiful Spain Symposium website, into a mobile-responsive website. So the backstory is that North America was able to whip up iOS and Android mobile apps for their event with the efforts of James Falkner, but the Spain office has less bandwidth to do the same.

BUT we have Liferay. Bandwith or not, large teams or not: where there is Liferay, there is hope. That or.. Liferay is like a box of chocolates? Whatever cheesy pun, we know what to do: we need to make the Spain Symposium site mobile-friendly for our end users... and in a pinch. Due to review and release processes, not counting weekends, we really only have 7 business days to get this thing done. (insert delirious laughter)

Thankfully, our Liferay instance makes the process easier than it would be without. We have Theme Variations, we have Alloy UI to make our viewports a snap, and we do have a Jon Neal who can squeeze mobile responsiveness out of a watermelon. I am not kidding.

The requirements we are aiming for are: 1) Reduce content to one column 2) Utilize the SAME content, so the Spain office can update content in one place, and it will show on both versions of the site 3) Convert the homepage into main navigation only, and all other pages will only have a "home" button to link back to it 4) Users should not have to "zoom in" to read or interact with the site.

Today we meet to create our development game plan, tomorrow we start coding, the rest of the week is just dodging other quick deadlines. Dodging lightning...

Well, not totally "duh". It may be obvious that we use Liferay... but how do we use it? How does our business operate with Liferay products, day to day? What's the good? What's the difficult? Do we deploy out of box? Do we inspect with (fire)fox? Do we collaborate from a house? Do we develop with a mouse? Well, we definitely use Liferay here and there. We use Liferay anywhere!

In-house we have an awesome design department, and terrific marketing team, and right where the rubber meets the Liferay road, we have the webteam. The few. The proud.

Enter myself and the rest of the webteam: five excellent developers, two back-end, and three front-end. Each day we walk into the office (or in some cases work remotely) to make the magic for liferay.com, to meet the demands of the business, our internal office, our clients, and most importantly, good ol' end users just like you.

In the coming weeks I'm excited to use this blog to open up the doors of Liferay a little more, let you in on how we work and what we're working on. We do have a company camera (just barely came in the mail about a month ago), so I think you deserve the grand tour as well.

Team Beachbody is a health and fitness solution hub that provides resources for people who are looking to get in shape or improve their health. Their site features a vibrant community, numerous products and product reviews, videos, trainer tips, and even Facebook integration. Please visit their site to learn more about their health tips and offerings.

The Ministry of Foreign Affairs (commonly known as Wisma Putra) was constructed by the Malaysian government to ensure sustained growth in the country's international relations. It aims to establish close ties with other nations while respecting the differences found between nations. The site features various facts and information about their vision and goals for diplomacy.

International Charter Space & Major Disasters was initiated by European space agencies to provide space data acquisition and delivery to people impacted by disasters. The site features various news clips, facts, and photos regarding natural and man-made disasters. Visit their website to get the latest news and information about catastrophic events around the world.

The Palestinian Youth Portal is a partnership between public and private sectors to create economic opportunities for the Palestinian people and help them carry out the responsibilities of citizenship and good governance. The website fosters youth development through the means of education, entertainment, and social networking. Surf their site to see if something catches your eye. (Apply a translator if necessary!)

AnyWeb|Osys is the biggest Cisco-authorized learning partner in Switzerland. They offer hands-on training courses with the right equipment as well as network professionals to help advance a person's skills in Cisco networking. To learn more about their offerings, please visit their website.

Thaixperience is a website that offers the full scoop on Thai arts, history, culture, food, region, activities, and hotspots. With personal stories and photos, this site allows you to either prepare for your next vacation or live vicariously through the fresh content. Please visit Thaixperience to learn more about this "tropical concrete paradise."