Archive

Archive for the ‘Technology’ Category

August Force.com Developer Meetup

August 1st, 2011 No comments

The Seattle Force.com User Group is back in business. Let’s get together to discuss anything related to force.com/salesforce.com development.

When: Thursday, Auguest 4th, 4:00pm

Where:
F5 Networks
401 Elliott Avenue West
4th Floor, Einstein conference room
Seattle, WA 98119

Google maps link

I wanted to get this notice out as soon as possible and currently there are no specific demos or speakers planned so it will be more of an open forum. If you have something awesome you’d like to show off please let me know. I could always whip something up as well if we want to get down and dirty with some code dives.

Hope to see you there!

Categories: Apex, Technology, Visualforce

Dynamic Visualforce Components, why they scare the ish out of me

June 8th, 2011 19 comments

Dynamic Visualforce Components are coming and they scare me…a lot. Before we can even begin to discuss why we need to review the basics of the model-view-controller pattern. If you aren’t familiar with the MVC pattern here is the basic run down when it comes to web apps that use MVC. Model, this represents your database and contains information on they fields in your database, validation rules, relationships, etc. View, this is the visual display of a model or many models. It says output the fields of a record in HTML on some web page and style them this way. This is where you can visually control how the data is displayed to the user. Controller, this is the code that retrieves and manipulates data from the Model and then prepares it for the View to use. A web app will most likely consist of many Models, Views, and Controllers. Some people may want to overcomplicated the MVC pattern, and it does vary slightly based on the platform or framework, but for the most part this is exactly how it works 97% of the time. So in the force.com world it looks a little like this:

Model
These would be custom objects, you can add fields, create validation rules, and build relationships with other objects.

View
Visualforce pages are the view and allow you to output information from the model as an HTML webpage.

Controller
One or many Apex classes associated with a Visualforce page. Here you can query and manipulate data before it is sent to the view for output.

So what does any of this have to do with Dynamic Visualforce Components (DVCs)? The reason is that DVCs allow developers to completely mangle and destroy the model-view-controller design pattern. They allow you to completely define the display from the controller. So basically MVC becomes M(VehCiv) or perhaps Model Viewroller as the View and the Controller start to get all mixed up. Big flipping deal you might say, all of the other hip cool web technologies (Rails) allow you to inject markup from the controller. Yes, they do, and there are people in those communities that feel the exact same way I do about mixing aspects of MVC, just because you can doesn’t mean you should.

Here is a very basic example of how mixing up the MVC can cause trouble. Let’s say you are working on a project where you have a web designer who is great at making spiffy looking websites and a developer that understands all the back end work. If you keep the View and the Controller separate these people can work individually on their part of the project. When you start to combine the View and the Controller the web design guy might be waiting for the developer to get the output setup so he can style it. Or maybe even worse you end up have a web designer starting to poke around in controller code, not ideal.

Mixing the View and the Controller also makes things more complicated and difficult for others to understand. When looking through a controller you now have to start mentally separating the view code and the logic code. For the consultants out there that sometimes have to inherit other’s code I do not envy you when you have to dig through someone else messy code, DVCs will make it messier.

Okay Jason, we get the point, but there are times when we need DVCs to meet the project requirements! Are there? Do you really need to use them? Doubtful. Yes, there are some use cases out there that can only be solved with DVCs but these are actually pretty rare. So if you think you need to use DVC’s, think again, and the ask someone else, perhaps on the force.com developer forums, and then if you still think you need them go for it. Personally, I still can’t think of a super great example for DVCs, but I’m sure after this post I’ll be inundated with use cases where only DVCs can save the day!

So here is an example of using DVC vs not using them. This is actually the example taken from the recent Force.com Summer 11 webinar. The goal is to get an output that looks like this:

An unknown number of tabs is the dynamic piece that needs to be solved. Here is one way to do it with DVCs. First the page. One thing I will point out right way is that when you look at this page you have no idea what constitutes the dynamic components. There is nothing that lets you know if they are a table, a div, text, etc. You would need to go look in the controller to see exactly what the dynamic component is made of. It is less markup but it is also inherently less descriptive and as mentioned before more difficult to understand. This is one of the core advantages to staying true to the MVC pattern. On a View it should be dead simple to understand the generated markup and output.

<apex:page controller="TopOpportunityController">
    <apex:stylesheet value="{!$Resource.CustomTableCSS}"/>
    <apex:sectionHeader title="Top 10 Open Opprtunities"/> 
    <h1>Total Expected Revenue from Top 10 Opportunities:</h1> $
    <apex:dynamicComponent componentValue="{!OppTotal}"/><br/><br/>
    <apex:dynamicComponent componentValue="{!tabbedView}"/>
</apex:page>

Next the controller. Notice that we are querying the data but also directly manipulating and defining the view in this controller. For me, when these two areas start to combine it can become blurring on exactly what code is interacting with the Model and what code is interacting with the View.

public with sharing class TopOpportunityController {
 
    private List<Opportunity> topOpportunities;
    public Double opportunityTotal {get;set;}
 
    public TopOpportunityController (){
        topOpportunities = [SELECT closeDate, TotalOpportunityQuantity, Id, Name,
                            AccountId, Account.Name, Probability, ExpectedRevenue, 
                            stageName, Amount, Account.Open_Opportunities_Total__c FROM 
                            Opportunity where isClosed=false ORDER BY  
                            Account.Open_Opportunities_Total__c DESC, Account.Name, 
                            ExpectedRevenue DESC LIMIT 10]; 
    }
 
    public Component.Apex.TabPanel getTabbedView(){
        Component.Apex.TabPanel panel = new Component.Apex.TabPanel(
                                                       switchType = 'client',
                                                       title = 'Top 10 Opportunities');
 
        String lastAccountId;
        opportunityTotal = 0;
 
        for (Integer i = 0; i< topOpportunities.size(); i++){
            Opportunity o = topOpportunities[i];
            opportunityTotal += o.ExpectedRevenue;
 
            //If we have a new Account record, need to create a new Tab
            if (lastAccountId != o.AccountId){
                Component.Apex.Tab acctTab = new Component.Apex.Tab();
                acctTab.label = o.Account.Name;
                panel.childComponents.add(acctTab);
            }    
 
            Component.Apex.OutputText oppText = new Component.Apex.OutputText(escape = false);
 
            oppText.value = '';
 
            //If this is a new tab, start a new <table>
            if (lastAccountId != o.AccountId){
                oppText.value += '<table class="customT"><thead class="customT"><tr class="customT"><th class="customT">Opportunity Name</th><th class="customT">Probability</th><th class="customT">Stage</th><th class="customT">Expected Revenue</th></tr><tBody class="customT"></thead><tBody class="customT">';
            }
 
            oppText.value += '<tr><td class="customT">' + o.Name + '</td>';
            oppText.value += '<td class="customT">' + o.Probability + '</td>';
            oppText.value += '<td class="customT">' + o.StageName + '</td>';
            oppText.value += '<td class="customT">' + o.ExpectedRevenue + '</td>';
            oppText.value += '</tr>';            
 
            if ( (i == topOpportunities.size() -1) || o.AccountId != topOpportunities[i+1].AccountId ){
                 oppText.value += '</tBody></table>';     
            } 
 
            panel.childComponents.get(panel.childComponents.size() -1 ).childComponents.add(oppText);
 
            lastAccountId = o.AccountId;
        }
        return panel;
    }
 
    public Component.Apex.OutputText getOppTotal(){
         Component.Apex.OutputText oppTotal = new Component.Apex.OutputText();
         oppTotal.expressions.value='{!opportunityTotal}';
         return oppTotal;
    }
}

So how would you do it mister smarty pants? Oh, I’m glad you asked. I would still use Dynamic Visualforce, just not Dynamic Visualforce Components. In my approach I want to look at the controller first. Notice that this controller has nothing related to the structure and style of the View. It only queries and process information from the Model. This should make it easier to understand exactly what the code is doing from a logic standpoint as you do not need to mentally separate the View logic. Some of the variables control how the information will be displayed on the page and this is okay, this is exactly what a controller should do. One thing to notice is the use of Maps. Map support was recently added to Visualforce as Dynamic Visualforce and is it is fan-freakin-awesome. I would bet it will solve 95% of your dynamic Visualforce needs. The other 5% is for Dynamic Visualforce Components.

public class TopOppsController {
 
    public List<Id> accountIds {get; set;}
    public Map<Id,String> acctIdNameMap {get; set;}
    public Map<Id,List<Opportunity>> acctIdToOppsMap {get; set;}
    public Opportunity totalOppAmount {get; set;} //User Opportunity object amount field as wrapper for total, outputField will format currency
 
    public TopOppsController(){
        buildOppList();
    }
 
    public void buildOppList(){
        //Instantiate variables
        accountIds = new List<Id>();
        acctIdNameMap = new Map<Id,String>();
        acctIdToOppsMap = new Map<Id,List<Opportunity>>();
        totalOppAmount = new Opportunity(Amount = 0);
 
        //Query the Opps
        List<Opportunity> opps =    [SELECT CloseDate, Id, Name, AccountId, Account.Name, Probability, StageName, Amount 
                                    FROM Opportunity 
                                    WHERE isClosed=false ORDER BY Account.Open_Opportunities_Total__c DESC, Account.Name, Amount DESC LIMIT 10]; 
 
        //Process the opps
        for(Opportunity opp : opps){
            //Increment total amount
            totalOppAmount.Amount += opp.Amount;
 
            //Add accountId and Name to map, these Id -> Name map values can be used in Visualforce page
            acctIdNameMap.put(opp.AccountId,opp.Account.Name); 
 
            //Add Opps to Account ID -> List<Opps> map, the List values in this map can be use in Visualforce datatables
            if(acctIdToOppsMap.get(opp.AccountId) == null){
                acctIdToOppsMap.put(opp.AccountId,new List<Opportunity>());   
                accountIds.add(opp.AccountId); //We add account Ids to list and then we can iterate over this in page and pull values from Maps in the controller
            }
 
            acctIdToOppsMap.get(opp.AccountId).add(opp);
        } 
    }
}

Next up is my Visualforce page. One of the first things you will notice is that I had to use a little bit if jQuery magic. In my first attempt I tried to use an apex:repeat component inside of an apex:tabPanel but this simply does not work. So a bit unwillingly I turned to jQueryUI to address the tab issue. The good news is that using the jQuery UI tab panel is ridiculous easy: 1) Create a div that will represent the tab panel. 2) In this div create list of <a> links where href is the Id of a seperate div representing the corresponding panel. 3) Four lines of jQuery javascript. I’ll admit this is not 100% native where as DVCs are but this approach is actually very simple. It also makes it easier to see what the view is doing, and actually provides complete control over the tab panel style, and interaction. Even if you did use the native tab panel, it is doing the tab switching with javascript anyway ;-P .

So all that aside the page should be pretty easy to understand. With out any type of inline comments you’d be able to see we have a list of <a> links that is outputting an account name. Then for each one of these names we also have a corresponding data table. Keeping the View out of the controller makes it much easier to see how the page is formatted….or at least I think it makes it easier. You lose this type of natural documentation when using DVCs.

You can see a working example by clicking here.

<apex:page controller="TopOppsController" >
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"/>
    <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.12/jquery-ui.min.js"/>
    <apex:stylesheet value="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.0/themes/ui-lightness/jquery-ui.css"/>
 
    <script type="text/javascript">
         var j$ = jQuery.noConflict();
 
        j$(document).ready(function() {
            j$("#tabs").tabs();
        });
    </script>
 
    <apex:sectionHeader title="Top 10 Opps!"/>
 
    <h1>Total Amount from Top 10 Opportunities: </h1> <apex:outputField value="{!totalOppAmount.Amount}"/><br/><br/>
 
    <div id="tabs">
        <ul>
            <apex:repeat value="{!accountIds}" var="acctId"> <!-- Loop through list of account Ids -->
                <li><a href="#tabs-{!acctId}">{!acctIdNameMap[acctId]}</a></li> <!-- use account Id to get values from acctIdNameMap -->
            </apex:repeat>
         </ul>
           <apex:repeat value="{!accountIds}" var="acctId"> <!-- Look through list of account Ids -->
               <div id="tabs-{!acctId}">
                   <apex:pageBlock mode="edit">
                       <apex:pageBlockTable value="{!acctIdToOppsMap[acctId]}" var="opp" width="100%" > <!-- use account Id to get list of opps from acctIdToOppsMap -->
                           <apex:column value="{!opp.Name}"/>
                           <apex:column value="{!opp.Probability}"/>
                          <apex:column value="{!opp.StageName}"/>
                          <apex:column value="{!opp.Amount}"/>
                     </apex:pageBlockTable>  
                 </apex:pageBlock>
             </div>
         </apex:repeat>
    </div>
 
</apex:page>

So in the end DVCs have a purpose but more often then not you will probably not need them to meet your specific requirements. The real danger is using them when you really don’t need to and I’m hoping everything I’ve listed in this post explains why you should make a conscious effort to only use them when absolutely necessary. In the end this will make your apps easier to understand and then when you leave your company to go start the next million dollar start up the poor sap that inherits your code won’t go insane trying to understand the mess that is your controllers.

Categories: Apex, Technology, Visualforce

The Best Way to Explain Code Changes

September 15th, 2010 No comments

Categories: Technology

Seattle Force.com User Group – August 2010

August 5th, 2010 No comments

Major late notice here but today is a Seattle Force.com user group. If you are are Force.com pro or a n00b looking for more information about this platform swing by.

WHO: Me, you, and some other cool peeps.

WHAT: Discuss force.com related topics, questions, and technologies

WHEN: Today, August 5, 2010 4:00PM

WHERE:
West Monroe Partners
1215 4th Ave, Suite 1010
Seattle, WA 98161

WHY: See WHO & WHAT

This month’s meeting will be an open forum for any questions and discussion topics you may have.

Categories: salesforce, Technology

Why I Can’t Buy the iPhone 4 (but really want to)

July 16th, 2010 5 comments

This phone is cool, very cool. I really want it and when the first reviews started to come out I knew this would be my next phone. Enter the antenna issue.

Shortly after launch reports started to surface that touching the little back band in the lower left corner would significantly reduce cellular reception. Worst case the iPhone would go from five bars to no service. This was concerning. When the 3G came out there were reports of yellow tinted screens but this turned out to be a non issues so I thought I would wait it out to see what happens. Yet the reports continued to roll in.

We all know what happens next and if you are reading this I don’t need to go in to detail so here is the short version.

Read more…

Categories: Technology

Dear Apple: Please Add Image Stabilization to iPhone Video

June 21st, 2010 6 comments

There was a time long ago when home made videos where smooth and stable. The main reason for this was the size of the camera. Look at this bad boy…

vhs

While the quality of the video was horrible it was usually pretty stable and not bouncing all over the place. For starters it would literally rest on your shoulder which is a pretty solid platform. It is also physically large and therefore requires a lot more movement to cause a shaky recording. Over the years this has become more and more of a problem as cameras have become smaller and smaller.

Read more…

Categories: Technology

Seattle Force.com Developer Meeting – June 2010

May 28th, 2010 No comments

UPDATE: I’ll be demoing how to authenticate with OAuth using Force.com and how this can be used with the Twitter API.

It’s that time again for the Seattle Force.com Developer Meetup. Details below…

When: 6/3/2010 4:00 PM – 6:00 PM Pacific Daylight Time
Where: 7 Simple Machines Office
Subject: Seattle Force.com User Group Meeting – June 3
Comments: This month, our meeting will be held in a new venue. 7 Simple Machines has offered up a change in venue for us in June.

Location:
Their office is located at:
800 Maynard Ave S, Suite 208
Seattle, WA 98134

http://www.7simplemachines.com/views/ContactUs.aspx

As always, bring your any ideas and questions to the meeting to discuss with everyone!

Dear Microsoft, Please sue me.

May 20th, 2010 5 comments

As you’ve probably heard Microsoft is suing salesforce.com over nine patents Microsoft holds. One would probably assume these patents are for some ultra complicated algorithm or computer process hidden within the depths of top secret Microsoft source code. Well you’d be wrong, really wrong.

Let’s take a look at just a few of the patents they are suing over.

1) System and method for providing and displaying a web page having an embedded menu
2) Method and system for stacking toolbars in a computer display

Wait, what?!?! They own a patent on a flipping web menu!?! Yes, it would appear so. So if you have ever created or implemented a menu on a web page you are infringing on a Microsoft patent. See the menu across the top of this page? Yup, I’m a rebel.

3) Aggregation of system settings into objects

I’m not patent lawyer but I’m pretty sure this one means you can’t store some type of system setting (aka text/boolean/etc) value in an object. I didn’t read through the entire patent filing but I’m guessing ‘object’ refers to a class object or database object. So if I can’t store system settings in any of these two places where on earth can I store them! Maybe Microsoft thinks there is some pixie dust magic land where settings can be stored.

4) Timing and velocity control for displaying graphical information

This is lawyer speak for a time delayed tool tip. If you put your mouse over an icon, stop, wait 300ms, and show a tool tip you are busted! So the thousands of websites that have implemented this type of functionality are infringing on a Microsoft patent.

These are just a few of the patents Microsoft is suing over and the others I didn’t list are just as ridiculous.

What is all this madness? Well, there is a lot of crack smoking going on here. First we have the US Patent office smoking crack and approving ridiculous patents like these. Secondly, we have Microsoft smoking a little something suing over these absurd patents. If they were really concerned about protecting their intellectual property they would be suing a lot more people that have implemented these types of features, but they aren’t. They are suing a company that is a direct competitor that is innovating faster and more successfully than Microsoft in the given space. It’s is clear Microsoft is using it’s size and money ($250B) to take on a smaller company like salesforce ($10B) in the courtroom rather than on the keyboard which is just sad.

Some will say, “But Jason, you are biased supporter of salesforce.com”. Yup, that is probably true, but Microsoft isn’t really suing salesforce.com. They are suing all of us. Where “us” is any web developer or smaller company that has created the functionality mentioned above.

Categories: salesforce, Technology

Seattle Force.com Developer Meeting

March 31st, 2010 No comments

There is a another force.com developer meeting for Seattle coming up this Thursday. If you are in the Seattle area and want to meetup or learn more about developing on the force.com platform please stop by.

Just a friendly reminder that this Thursday, April 1st at 4:00pm will be the our monthly meeting.

The meetings as always will be held in the West Monroe Partners office located at:

1215 4th Ave, Suite 1010
Seattle, WA 98161

This session will be an open forum so bring any questions, problems, and/or issues you have so we can discuss with the group.

If you have something cool you’d like to show off or present let me know and we can arrange for you to speak at one of the upcoming sessions.

Improve the New Salesforce UI with Greasemonkey

March 17th, 2010 8 comments

In my last post (you can read it here) I was ranting like an angry hippopotamus about the new salesforce.com UI released with Spring 10 and what I think it should look like. This follow up post will show you how to make the changes I proposed in that post a reality.

Before we work the magic and make the new UI even better I want to expand on some of my thoughts regarding the new UI. Some may say it is “change” and change is hard, you just need to get used to it. Not true. Change should never be hard. Change should be something better. It should be a measurable improvement over the previous version. A perfect example of this was the recent redesign of cnn.com. This was a massive improvement and nearly everyone everyone applauded the changes. Change was easy because it made our user experience better. I don’t hate the new salesforce UI. I don’t even not like it. There is just something about it that doesn’t feel right. I can’t place my finger on it but I think the changes I’ve made below will make a huge improvement. Blah blah blah, enough pointless blabbering, let’s get to the good stuff.

Since the original post I have had some time to get comfortable with the new UI and several of the changes I initially proposed probably aren’t needed.  My first stab at changing the UI was also a bit bold, too bold. I took my changes of the UI to the extreme to really emphasize the direction I think the new UI needs to move. In reality the changes needed are much softer. What it came down to in the end was eliminating the massive amount of white space in the record detail section and bringing back the old style page block section separators. So how do we do this? Greasemonkey to the rescue!!!!

The first ingredient of awesomesauce is to install the Greasemonkey plugin for the Firefox browser. You can download that here. Greasemonkey allows you customize websites with fancy pants JavaScript.


Read more…

Categories: Technology, Visualforce

The New Salesforce UI Should Look Like This

March 11th, 2010 19 comments

UPDATE: See the follow up post here: Improve the New Salesforce UI with Greasemonkey

The new salesforce.com UI has been rolled out to all instances as of March 6th and the feedback is starting to roll in. Based on the feedback I have heard, direct and indirect, is that there appears to be four groups of people. A few people that love it, a few people that like it, a lot of people that are undecided, and a lot of people that don’t like it. This is probably not the distribution of feedback salesforce was hoping for.

Read more…

Categories: Technology, Visualforce

Seattle Force.com Developer Group

March 3rd, 2010 No comments

Heads up that if you are a Force.com/Salesforce developer or want to learn more about force.com development in the Seattle area there is a meeting this Thursday, the 4th.

The meetings as always will be held in the West Monroe Partners office located at:

1215 4th Ave, Suite 1010

Seattle, WA 98161

When:  Thursday, March 4th, 2010

Start Time: 4:00 PM

This session will be an open forum so bring any questions, problems, and/or issues you have so we can discuss with the group. If we finish early, we can maybe grab a beer at one of the local bars downtown.

If you are interested even a little please stop by.

Categories: Apex, Technology, Visualforce

Why JavaScript Scares Me

November 11th, 2009 2 comments

If you have read this blog before you will get the vibe that I am anti javascript. This is a fair assessment as I really don’t like using javascript. I can already hear the people yelling, “JavaScript is great! It can do so many cool things”. Yes, I know, but why add more complexity if I don’t need to? Here is the story of why JavaScript scares me.

This story starts back in my sophomore year of college when I took my first “programming” class. It was basically an intro to computers (easy peasy) but about half of the class was building websites with JavaScript applications. For these assignments we were required to use notepad to build the Javascript and websites. For someone that had never really done any sort of programming this was incredibly frustrating. One wrong character and you were hosed. Oh, and don’t forget this was in the dark ages before Firefox and Firebug. Make change, save, refresh Internet Explorer (blech!), repeat, repeat, repeat. Ugh, this was so lame and left a bad taste in my mouth when it came to “programming”.

screenhunter_13-nov-10-13-33

Next up was CSE142, the intro to programming class that is supposed to weed out computer science majors. This was all java programming and we actually got to use an IDE that would show syntax errors before you compiled. This was probably the hardest class I have ever taken but it has also been the most useful class I have ever taken. After this I was feeling better about programming and things were looking up…… enter the infamous s-control.

Once out of school and at my job, after having an admin role for about six months, I decided to take a stab at updating some s-controls. What a pain. Flashbacks of javascript notepad editing flashed through my head. S-controls are so messy. I wasted hours trying to add basic functionality. Once I got it to work in one browser I realized it didn’t work in another (guess which one). This only reconfirmed my thoughts that javascript is a time suck and a pain to work with. Thankfully Apex and Visualforce were soon released and s-controls with javascript were a thing of the past.

scontrolvs

So where do I stand today? When it comes to Force.com apps I still try to keep my javascript usage to an absolute minimum. I know a lot of the Visualforce pizazz is all based on Javascript but this is script I don’t have to manage. They make sure it works, and works across all browsers.

With all of this said and done I do have a confession to make. I feel like I am having an affair with my own beliefs but I am slowly falling in love with that little bundle of joy know as the jQuery and jQuery UI JavaScript libraries. Once you get over the learning curve of understanding the basics on how to using this library it makes working with JavaScript, dare I say, almost enjoyable. I am still a bit nervous about browser compatibility and the maintenance required but jQuery is lessening these fears. So yes, I am starting to open up a little more to JavaScript and I have some blog posts planned to demo the cool things jQuery can do in tandem with the Force.com platform.

Categories: Technology, Visualforce

Hello Twitter

November 6th, 2009 3 comments

I am now on Twitter. Hello my little bird friend.

I put it off for a long time mainly because I don’t care what people are eating for lunch or what movie they just saw. At least this is what I figured most of Twitter was about (and a lot of it still is) but this view changed rather quickly just a few days ago.

My little blog here in the corner of the internet gets traffic mainly from the developer.force.com discussion boards, from links posted on other Force.com related blogs, and the occasional search engine hit (Visualforce Popup is a hot one from search engines). It’s not a lot of traffic, but it is steady. After my Dreamforce 2009 Predictions post I saw a significant spike it traffic coming from Twitter. That blog post was tweeted by two different people and I saw site traffic increase three fold. It was easy to see the benefits of Twitter. Digging into some of the tweets I discovered what is a nice little ecosystem of Force.com/Salesforce.com users that actually post, errr…tweet, about relevant topics.

I have actually had a Twitter account for about a year now but I was one in the masses that had no tweets and no followers. Okay, so I had one tweet, which ironically was about me eating some pie. I remember the post (fric!, tweet) exactly and I was trying to explain to my parents, aunts, and uncles what Twitter was. I went on to explain it’s some lame micro blogging site where people post about everything they do. So of course I made a useless post about what I was eating. Oh how naive.

My main use of  Twitter will be to take advantage of this Force.com community, follow some trends, and post (oh my goodness… tweet) about force.com topics. Heck, maybe I’ll even toss in what I’m eating once in awhile……just kidding.

Now I ask for your help. Who are some great people in the twitter community to follow? What are some good tags to follow? I’ve already got #dreamforce, #force.com, and #salesforce. Please help this Twitter noob.

Click here for my Twitter page.

Categories: Life, Technology

iPhone 3Gs

June 10th, 2009 No comments

On Monday Apple released the next iteration of the iPhone and I have to say my response can be summed up as, “eh”.

2x Speed:
A faster CPU and more RAM is a nice addition but definitely not worth the cost for current 3G owners. Faster loading web pages would be nice but at the same time I think to myself, “I can access any website in the world no matter where I am”. The fact that I can do this with my phone is still pretty cool and faster is nice but the core functionality is the same.

Video recording:
My 5 year old Samsung flip phone that cost me $29 had this… 5 years ago.

Voice control:
Is nice but I would probably never use it. Mainly because the current iPhone UI is so streamlined I can access anything I need to pretty quick. And honestly the only place that I may use this would be in my car but it is so loud (18 year old Integra with a shot suspension) I have my doubts it could clearly understand me. I also feel sort of stupid talking at a phone, ya that sounds weird, but until it has a nice female British accent, can ask my how my day is going, and can carry a conversation I’ll stick with manual inputs.

Digital Compass:
This, with out a doubt, has the most potential. It will definitely help with navigation but I think this type of technology together with GPS and the potential for ground breaking mobile applications. I plan to have separate post going into more detail.

I think for all iPhone users the most excitement will come from the new iPhone OS 3.0. Finally, from a software standpoint, this will give very little to gripe about once it is released as it address many of the open issue since the original iPhone was released. Including:

Landscape keyboard for email and web. Yes!
Copy and paste. Rarely actually needed it but will be nice.
Download movies and TV Shows. Cool, will rarely use it.
Tethering. Cool, but we all know AT&T will charge too much.
MMS. Now my Mom won’t ask why my “fancy little phone” doesn’t get the text images she sends me.

Categories: Technology