Google I/O – Rumors/Expectations

Like any other Google fanboy, I am looking forward to Google I/O this year, which starts on May 15.
Since I follow tons of tech news websites, I constantly am flooded with rumors of what people are expecting at Google I/O. So, I decided to combine all the rumors and expectations in one place.

So, here we go…

Nexus 7
People are expecting a new Nexus 7 tablet this year with upgraded specs, but probably at the same price. Rumors are that it will sport a 1920×1200 resolution, 5-megapixel rear camera, faster Qualcomm processor and wireless charging.

Google Play Games
This is new! I just heard that Google has been working on Play Games for some time and might launch it this summer. It supposedly includes multiplayer support, in-game chat, leaderboards, lobbies and achievements.

Google Babel/Hangout
This is one of the features that I desperately want and have been wanting for quite a long time, since I use GTalk, Google Voice and Google+. It would be nice to see all these services combined into one app.

Android 5.0
Another thing that I am excited about! It’s been quite some time since Google came out with a new OS (well, not really long time) and I am hoping to get my hands on this shiny new OS soon!

Google Glass
Google previewed a developer version of Glass last year. Hopefully, they will make it open for public this year.

Nexus 4, 5 and Motorola Phone
Nearly every Google fanboy heard of Google buying out Motorola last year. But what about a Google-Motorola phone? When are they coming out with one? Hopefully this I/O?

We will just have to wait and see what gets launched and what remains a rumor. Only 2 days left. Be excited.

Posted in Technology | Leave a comment

Email, Mobile, Web Development

Seeing the unexpected is something email developers get used to. But when you coded a soft blue background and instead are faced with a glaring black background in Outlook, you might be a little alarmed at this unusual interpretation!

This problem occurs only in Outlook and Lotus Notes because of a bug that mis-interprets the three-digit hexadecimal shorthand color codes on <table> and <td> tags.

Despite the blue and gray hexadecimal colors here, this will show a black background in Lotus Notes and most versions of Outlook:

<table bgcolor=”#ccf”>   <tr>     <td bgcolor=”#eee”>This is trouble!</td>   </tr> < /table>

The solution is as easy as adding three more digits to the hexadecimal code to make it the complete six digits as follows:

<table bgcolor=”#ccccff”>   <tr>     <td bgcolor=”#eeeeee”>This is the solution!</td>   </tr> < /table>

Those three digits make the difference between a black background and a pretty blue one. If you weren’t feeling blue before you saw the black background, you probably were after you saw it. But fortunately, there’s an easy solution and count on Sundog to bring a little silver lining into your email Outlook. Pun intended.

Litmus has a great article on email backgrounds.

Posted in Technology | Tagged , , | Leave a comment

Salesforce – How to create onItemClickListener for List Adapter

As a beginner in Salesforce Mobile App development, I am learning new stuff everyday. Recently I had a situation where I wanted to attach onItemClickListener to items in my list that were fetched dynamically from Salesforce.
I tried to look for a solution on Google, but 5 pages in I still couldn’t find the solution.

Finally, I found what I was looking for on a blog.

But it still wasn’t exactly what I wanted. Since I didn’t have much knowledge about ListView or List Adapters at that time, it took me a little while to make it fit to what I was looking for. So, I decided to write this blog to help out anyone who is in the same situation as I was.
I assume you have a little knowledge about Salesforce REST API and little Android development knowledge.

Here’s a code snippet:
private RestClient client;
private ArrayAdapter listAdapter;
private ListView timeList;

// onCreate method

@Override
public void onResume() {
findViewById(R.id.root).setVisibility(View.INVISIBLE);

// Create list adapter
listAdapter = new ArrayAdapter

(this, android.R.layout.simple_list_item_1, new ArrayList

());

timeList = (ListView) findViewById(R.id.contacts_list);
timeList.setAdapter(listAdapter);
timeList.setTextFilterEnabled(true);

super.onResume();
}

@Override
public void onResume(RestClient client) {
// Keeping reference to rest client
this.client = client;
// Show everything
findViewById(R.id.root).setVisibility(View.VISIBLE);
try {
sendRequest(“SELECT Name, Date__c, FROM MyObject__c WHERE User__c=‘00111222a333444’ ORDER BY Date__c ASC”);
} catch (UnsupportedEncodingException e) {

e.printStackTrace();
}
}

private void sendRequest(String soql) throws UnsupportedEncodingException {
RestRequest restRequest = RestRequest.getRequestForQuery(getString(R.string.api_version), soql);

client.sendAsync(restRequest, new AsyncRequestCallback() {
@Override
public void onSuccess(RestRequest request, RestResponse result) {
try {
listAdapter.clear();
JSONArray records = result.asJSONObject().getJSONArray(“records”);
for (int i = 0; i

< records.length(); i++) {
String oldDate = records.getJSONObject(i).getString(

“Date__c”);
String[] formatDate = oldDate.split(”-”);
String formatMonth = null;

if(formatDate[1].contains(“01”)) formatMonth = “January”;
else if(formatDate[1].contains(“02”)) formatMonth = “February”;
else if(formatDate[1].contains(“03”)) formatMonth = “March”;
else if(formatDate[1].contains(“04”)) formatMonth = “April”;
else if(formatDate[1].contains(“05”)) formatMonth = “May”;
else if(formatDate[1].contains(“06”)) formatMonth = “June”;
else if(formatDate[1].contains(“07”)) formatMonth = “July”;
else if(formatDate[1].contains(“08”)) formatMonth = “August”;
else if(formatDate[1].contains(“09”)) formatMonth = “September”;
else if(formatDate[1].contains(“10”)) formatMonth = “October”;
else if(formatDate[1].contains(“11”)) formatMonth = “November”;
else if(formatDate[1].contains(“12”)) formatMonth = “December”;
else formatMonth = “None”;

String formattedDate = formatMonth + ” ” + formatDate[2] + “, ” + formatDate[0];
listAdapter.add(formattedDate);

timeList.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> arg0,
View v, int position, long id) {
AlertDialog.Builder adb = new AlertDialog.Builder(
MainActivity.this);
adb.setTitle(“ListView OnClick”);
adb.setMessage(“Selected Item is = “
+ timeList.getItemAtPosition(position));
adb.setPositiveButton(“Ok”, null);
adb.show();

}
});

}
} catch (Exception e) {
onError(e);
}
}

@Override
public void onError(Exception exception) {
Toast.makeText(MainActivity.this,
MainActivity.this.getString(ForceApp.APP.getSalesforceR().stringGenericError(), exception.toString()),
Toast.LENGTH_LONG).show();
}
});
}

Source: Android Helper Blog

Posted in Technology | Tagged , , , , | Leave a comment

Five Points to Remember when Sending Emails with Salesforce

Email is so important for many of today’s business processes and marketing concepts. These emails can easily be sent with Salesforce, but it is important to keep in mind the best ways to use emails within Salesforce.  Here are five points that I try to keep in mind when laying out a solution to a set of email requirements.

1) Remember your Limits
Salesforce has different limits depending on how the emails are sent.
A) If emails are sent via APEX you can only send 10 sendEmail methods in one transaction.  These APEX emails are usually sent from behind a Visualforce page or from a trigger.  APEX Governor Limits
B) Of these emails sent via APEX there is a limit of 1000 single emails and 1000 mass emails per day to external addresses.  APEX Governor Limits
C) If emails are sent via Workflow rules, then there is a limit of 1000 emails per day per Standard Salesforce license.  So if you have 10 Salesforce licenses you can send out 10,000 emails in one day.  Workflow Email Limits
D) You can send an unlimited number of emails to your internal users.  APEX Governor Limits.  This is very important to note.

2) List out your Email Options within Salesforce
Within Salesforce there are so many ways to send our emails.
A) Emails can be sent out with Workflow rules.
B) Emails can be sent out through the Single or Mass email methods in APEX.
C) Emails can be sent out by users.  Click on the Contacts or Leads tab in in the ‘Tools’ section. In the bottom right corner there is a ‘Mass Email’ option.
D) Emails can be sent by integrating with 3rd party providers.  See #5 below.
E) On certain HTML emails Salesforce can track the date it was first opened, the number of times it was opened, and the date it was most recently opened.  Make sure you add the HTML Email Status related list to your contact, lead and/or person-account page layouts before sending out your HTML emails.  Here is that documentation.

3) Read up on all that has been written about Emails with Salesforce.
Email functionality is so integral to getting processes accomplished that there is a lot written up about how to manage them.  Doing a simple Google search and reading some detailed blogs like this one will get you a head start on knowing what road to go down.  Also check out threads like this one at the Force.com Discussion Boards.  There are a lot of great technical details out there to get you started.

4) Know that Salesforce is not a Mass Email tool
Salesforce has email limits for a reason. It is not the tool of choice if you are building your requirements around large email marketing actions.  There are a lot of options to get a solid number of emails out of Salesforce, but it must be understood that at some point those limits will be reached.  If you are doing a one-day event then maybe you can get Salesforce to bump up your limits for one day, but for mass email requirements that are longer than a day other solutions will need to be researched.

5) What are some of these other options for 3rd party email integration with Salesforce?
Here are some of the other email options that I have come across and I am sure there are many more.
Marketo
Constant Contact
Exact Target
Campaign Monitor
Mail Chimp
AWeber Communications
Amazon Simple Email Service

Which one you pick will all depend on what type of features you are looking for.  Example requirements would be:  What type of reporting do you need on your emails?  When it was opened?  If it was opened?  The last time it was opened?  How many times it was opened?  Are you worried about your emails ending up in the Spam folder?  Check out the features and pricing of each of the options listed above and I believe you will find one that will meet your requirements.

Good luck with your emails!  Please comment if you have something to share about emails with Salesforce!

Posted in Technology | Tagged , , , , | 1 Comment

Customize Link URLs with Responsive Email Design

Problem

What would you do in this situation? You own Company X and you’re preparing to send out an email advertising your new mobile site. You want to highlight some of the mobile features that aren’t available on the full site. Keep in mind this is not a responsive site, but a separate m.companyx.com site. Your copy may read something like this: Check out the new mobile site at m.companyx.com and start exploring our products and live updates on the go. All three links are mobile specific and would point the user to the mobile site regardless of what platform they accessed the email from. Do you send your desktop users to the mobile site that is obviously not optimized for a huge monitor display? At the same time, you don’t want to compromise your mobile audience that can take advantage of the mobile-specific links. What do you do?

NOTE: For the purpose of this example, assume that the pages on your mobile site do not necessarily map to a specific page on your desktop site and redirects are not an option.

Solution

Good news! You don’t have to choose one of the options. You can have both. Using a little responsive design CSS trickery, you can change the links in the email based on what platform the email is opened on. Or rather, you show and hide the two versions of the link depending on the screen size.

HTML and CSS for Desktop

…and <a href=”desktop/news” class=”desktopLink”>live updates</a> <a href=”mobile/live_updates/current” class=”mobileLink” style=”display:none; font-size:0px”>live updates</a> on the go.

By default, I’ve hidden the mobile link in two ways. The display:none hides the mobile link on most desktop and web email clients, but Gmail and some versions of Outlook ignore this property. Setting the font-size to zero satisfies these two clients so desktop users will be sent to the desktop site.

CSS for mobile
Mobile uses the same HTML, but simply overrides the desktop styles to show the mobile link instead.

@media only screen and (max-device-width: 500px) {
a[class=mobileLink] {
display: inline !important;
font-size: 24px !important;
}
a[class=desktopLink] {
display: none !important;
}
}

Recipients that open the email on mobile (see Dont’ Forget About Mobile When Testing Emails for mobile email market share) will be sent to the mobile site. Wherever this email is accessed, it will send the users to the right site. This is especially useful for deep links that may not have a specific redirect to span desktop and mobile but you want to make sure that users have access to a specific product no matter what. It’s a seamless transition for the user and doesn’t require any thought on their part.

This has been tested on Outlook 2000-2013, Hotmail, Yahoo! Mail, AOL Mail, Apple Mail, Lotus Notes, Android, iPhone, and Windows Phone and displays the correct link based on the platform.

Posted in Technology | Tagged , , | Leave a comment

Getting Logged-in userId in Salesforce Android SDK – Mobile App

If you are a developer who works with Salesforce, you are well aware that using the user Id of the currently logged in user is vital to a lot of custom development.  The same could be said for mobile applications that are built on the Salesforce platform.  I have already expressed myself over the lack of documentation for something that seems so important for both iOS and Hybrid applications.  Now comes Android’s turn.

My previous Android applications were built before the SDK using the REST API or did not have a need for the current user Id.  Today I found myself looking for where it was by fumbling my way through the SDK code after looking around Google for a while.  Here is how you access the user Id in your application.

I’m assuming you have an instance of RestClient within your activity.  Use that instance to create a new instance of ClientInfo.  ClientInfo has a property for the userId.  Your code would look something like this (client is the instance of RestClient):

1
2
3
ClientInfo ci = this.client.getClientInfo();
String userId = ci.userId;
Log.d(“YOURAPP”, “userId:  “ + userId);

There you have it!  Not very difficult but somewhat of a pain if you don’t know where to find it or where to look.

Posted in Technology | Tagged , , | Leave a comment

Salesforce.com Summer ‘13 Release Highlights

The Summer ‘13 release for Salesforce is set to hit production starting May 10th and contains the following key features:

Chatter Communities – Generally Available

Salesforce Communities can be seen as the next evolution of the existing portal (customer, partner) offerings.  Key differences include an updated native interface as well as the integration of Chatter into portals.  Additional capabilities, such as access to dashboards, is also a key difference from the legacy portals.  Similar to the portal products, Communities can be customized to incorporate a company’s brand, custom navigation, and other functionality.  This customization can be done using both Force.com Sites as well as Site.com.  Watch for a future blog post in regards to leveraging this new portal platform.

Site.com Enhancements

Site.com has been deemed Salesforce’s long-term solution for building and maintaining web sites/pages on the Force.com platform.  Site.com provides business users with the ability to contribute text, images, and data without coding via a rich-text editor.  Meanwhile, control over which items can be edited, and by whom can be closely controlled to ensure site integrity.  Additionally, dynamic content can be added to pages through an integration with the existing Salesforce.com database. This is especially valuable when needing to display data that is already stored within Salesforce.  Good examples might be product and pricing information as well as partner (dealer/distributor) information.

With the Summer ‘13 Release, Site.com is getting some key enhancements to increase its usability:

Authenticated Community Support – Site.com currently only supports publishing to public web pages.  However, with Summer ‘13, Site.com can be coupled with the aforementioned Communities platform, allowing for sites, or even specific site resources (folders/pages) to be restricted to certain, authenticated users.

Site.com Sandbox – Currently Site.com is only available to be used in the production environment.  This can be problematic when the site you are working to build is integrating with Salesforce.com data objects/fields that may not be in production.  With Summer ’13, Site.com is available on sandbox environments.  It is important to note that with Summer ‘13, you can’t move any work from sandbox to a production environment and there is an additional cost associated with Site.com sandbox.

Custom Widgets – With the new widgets feature, existing page elements, custom code, and CSS can be combined to create completely custom, reusable widgets. This feature will undoubtedly further enable business users to be able to construct more pages with less help of a web developer or admin.

Customizable Price Books and Archiving

Price books are a key component of opportunity management within Salesforce.  However, the ability to customize the price book object, like can be done with other Salesforce objects, was limited.  With Summer ’13, you can now add custom fields, record types, and page layouts.  This enables companies to add another layer of flexibility to how they are managing their products and pricing.  Previously, each logical product group or business segment could have their own price book, but this was essentially a logical separation with no opportunity to customize for the unique needs of the product group.  With Summer ‘13, custom fields can be used in conjunction with record types and page layouts to give each product group this flexibility.

Data.com Social Key (Beta)
As Salesforce continues to integrate Social data capabilities into the platform, capturing social profile information about customers and leads becomes increasingly important.  Without having the various social handles for each contact, there really isn’t any value of Social Contacts in Salesforce.  Currently, each contact in Salesforce must be manually linked to each of the social profiles.  This can certainly be daunting to obtain and enter several social network handles for each existing record.

With Summer ‘13, Salesforce is releasing the Beta version of Data.com Social Key to solve this very problem.  Similar to the existing Data.com offering that helps to ‘fill in’ data such as phone numbers and titles for existing contacts, the Social Key will help to automatically capture social network handles for contacts.  Social Key Beta will currently provide social handles for LinkedIn, Twitter, and Facebook for contacts and leads in the United States only.

Posted in Technology | Tagged | Leave a comment

Unique Bus Shelter Advertising

Advertisers have taken the drab, dreary bus stop and transformed it into something fun and interactive. The following are a few of my favorites:

Caribou Coffee Oven Bus Shelter
Colle + McVoy created these working bus shelters with real heat coils and a working clock to promote Caribou Coffee’s new Hot ‘n Wholesome menu.

Caribou bus shelter

McCain Ready Baked Jackets (baked potatoes Yank!)
JCDecaux developed this campaign in the UK for McCain. The giant fiberglass baked potato (jacket) warms up and releases the smell of baked potatoes when the consumer pushes a button on the shelter. It also dispenses a coupon to buy the ready baked jackets.

McCain baked jackets

Mr. Kipling’s Cake Dispensing Bus Stop
101 London developed this campaign in the UK for Mr. Kipling’s Angel Slices. Nineteen locations dispensed 500 pieces of cake per day at the touch of a button. The smell of Angel Slices was also released from a scent spray inside the interactive display.

Kipling Angel Cakes

NRMA Musical Bus Shelter
Whybin/TBWA from Sydney, Australia developed this campaign for NRMA Insurance. Once a customer scans the QR code, music plays from the custom sound system, demonstrating that NRMA insures extras (like custom sound systems) that their competitors don’t.

NRMA bus shelter 1

 

NRMA bus shelter 2

 

Posted in Technology | Tagged , , | Leave a comment

How to use Smartsheet predecessors to organize your task lists

Dependencies, in my opinion, are the key reason to use a tool like Smartsheet or Microsoft Project – it seems like there are always reasons why one thing can’t start until another thing has completed.  Although Smartsheet isn’t quite as smart as Microsoft Project, it gets the gist of the dependencies and adds the ability to collaborate with team members more easily, in a more user friendly interface.  Note: for large, highly technical project, I would recommend Microsoft Project over Smartsheet due to its more robust capabilities.

When building out projects in Smartsheet I like them to be in a phase approach with various milestones and deliverables.  In this example we had a dependency that the system be refreshed before we could start development, but that didn’t mean that we could start the architecture/design phase simultaneously.  Smartsheet helped me to be able to visualize in the gantt when development (line 11) could truly start – based on completion of the system refresh (line 2) and the project requirements (line 8). If the system refresh would have moved, my development phase start date would get pushed to a further date.

Example 1

One other key piece to this project was the delivery date to the customer.  It couldn’t be any later than May 6, as this was the scheduled training session with the user group.  To ensure that changes throughout the project to delivery dates wouldn’t impact the training date, I set up conditional formatting to alert me if/when the Finish Date of line 26 was later than May 6.  In the screenshots below you can see that when the release date gets pushed out a day, line 26 changes to May 7 and turns red.

On target deadline:

May6deadline

Past Deadline:

May7Overdue

 

Posted in Technology | Tagged , , , , | 2 Comments

Millennials Demand Engagement

The advertising executive David Ogilvy once said, “The consumer is not a moron, she is your wife.” In the 1960s, this was Ogilvy’s plea for smarter advertising. “A mere slogan and a few vapid adjectives [won’t] persuade her to buy anything,” he said. A similar appeal could be made today. A simple website, commercial or print ad won’t effectively persuade Millennials to buy anything. They demand engagement.

For them, branded website content won’t motivate. A highly-produced SuperBowl ad isn’t interactive enough. Print ads can’t be produced fast enough to have timely impact. Companies without a higher-purpose are commodities.

A recent study by The Boston Consulting Group (BCG) found four common themes among Millennials:

“I want it fast, and I want it now.”

“I trust my friends more than ‘corporate mouthpieces.’”

“I’m a social creature – both online and offline.”

“I can make the world a better place.”

It’s these reasons that gamified systems serve as the foundation for strong engagement for Millennials.

As the most technology savvy generation, they interact with touch screen devices all day. They have short attention spans. They demand beautifully-designed user interfaces. They don’t want to observe the story, they want to create it. They’re also gamers.

They love challenges. They love winning – and losing. They crave social interaction through gameplay. They enjoy interacting with made-up worlds.

For marketers, the challenge is to create similar experiences that also fulfill business objectives. It’s the balance of these goals that supports the successful practice of gamification.

Posted in Technology | Tagged | Leave a comment