Cisco CRM Adapter with Firefox

I will assume you have the server connected and working properly, this post focuses solely on getting the CRM adapter working with Firefox 3.x, 6.x.  The version I’m working with is Cisco_Unified_CRM_Connector_7.52, which allows you to install the server or client.  This is Cisco’s latest version and upon install it includes Salesforce.com Adapter 3.00.  Install the adapter, including the Firefox extension and perform the following steps:

  • Download the Demo Adapter 3.01.  This includes the Salesforce.com Adapter 3.01.
  • Run through setup and install it in a different directory.  Ensure you install the Firefox extension.  Cisco’s in C:\Program Files\Cisco\CRM Connector\Salesforce.com Adapter\ and Salesforce in C:\Program Files\Salesforce.com\Demo Adapter 3.01.
  • Go to the Demo Adapter 3.01 folder and register the SFDCFirefoxConnector.dll and SFDCFirefoxConnectorPS.dll.
    • You can register them by double clicking on the file and opening them with C:\Windows\System32\regsvr32.exe
  • Restart Firefox.

Firefox should now be working with your Salesforce.com instance.  Please note that you now have two adapters and you must be running Cisco’s version 3.00 in order for this to work.  I’m assuming someone at Cisco didn’t package the right DLL and or the right Firefox extension (which is included in the Demo Adapter 3.01 folder sfdcffextension.xpi).

~dmacias

Android Development: Clickable TextView Relative Layout Using Tables

I’ve been playing around with the Google Android SDK, since there are a couple of mobile application ideas I’ve been tossing around.  However, since it’s been longer than 10 years since I’ve done any real Java development I’m taking it pretty slow and just getting used to the tools available for Android development.

The very first thing is to go through the tutorials that Google has put together, they will give you a very quick understanding on how Android is put together and what all the pieces do in order to construct an application.

Next, appearance is everything, so you need to get familiar with layouts and DroidDraw is the best tool available for understanding how things align.  Use the DroidDraw generated code as a template and play around accordingly.

Finally, play around.

The first application I wanted to create was a gym schedule for my local gym and I will be updating the world as I move along.  The first thing I’ve created is the layout and basic functionality of the application.  This will consist of a couple of rows with the pertinent information as well as a clickable text area which will provide more information about the class.  Notice that all data is static as this is just a framework for what I hope the final application to look like.

Here’s the final product as of this point:

image

The breakdown of the code is as follows:

colors.xml

   1: <;?xml version="1.0" encoding="UTF-8"?>

   2: <;resources>

   3:         <;color name="grey">#C0C0C0</color>

   4:         <;color name="black">#000000</color>

   5:         <;color name="light_grey">#A8A8A8</color>

   6: <;/resources>

main.xml

   1: <;?xml version="1.0" encoding="utf-8"?>

   2: <;TableLayout xmlns:android="http://schemas.android.com/apk/res/android"

   3:     android:layout_width="fill_parent"

   4:     android:layout_height="fill_parent"

   5:     android:stretchColumns="*">;

   6:     <TableRow android:background="@color/grey" >

   7:         <;TextView

   8:             android:textStyle="bold"

   9:             android:text="Monday"

  10:             android:padding="3dip" 

  11:             android:textColor="@color/black"

  12:             android:textSize="18sp"

  13:             />;

  14:     </TableRow>

  15:     <;TableRow android:background="@color/light_grey">

  16:         <;TextView android:text="Time" android:padding="3dip" 

  17:             android:textColor="@color/black" android:textStyle="bold" />;

  18:         <TextView android:text="Class" android:padding="3dip" 

  19:             android:textColor="@color/black" android:textStyle="bold" />;

  20:         <TextView android:text="Studio" android:padding="3dip" 

  21:             android:textColor="@color/black" android:textStyle="bold" />;

  22:         <TextView android:text="Instructor" android:padding="3dip" 

  23:             android:textColor="@color/black" android:textStyle="bold"/>;

  24:     </TableRow>    

  25:     <;TableRow android:background="@color/grey">

  26:         <;TextView android:id="@+id/Time" android:text="6:00 AM" android:padding="3dip" 

  27:             android:textColor="@color/black" />;

  28:         <TextView android:id="@+id/Class" android:text="Cycle" android:padding="3dip" 

  29:             android:textColor="@color/black" />;

  30:         <TextView android:id="@+id/Studio" android:text="C" android:padding="3dip" 

  31:             android:textColor="@color/black" />;

  32:         <TextView android:id="@+id/Instructor" android:text="Jamie" android:padding="3dip" 

  33:             android:textColor="@color/black"/>;

  34:     </TableRow>

  35:     <;TableRow android:background="@color/light_grey" >

  36:         <;TextView />

  37:         <;TextView />

  38:         <;TextView />

  39:         <;TextView android:id="@+id/MoreInfo" android:text="More Info >" android:padding="3dip"

  40:         android:textColor="@color/black" android:onClick="onClick" android:clickable="true"/>; 

  41:     </TableRow>

  42:         <;TableRow android:background="@color/grey">

  43:         <;TextView android:id="@+id/Time" android:text="7:00 PM" android:padding="3dip" 

  44:             android:textColor="@color/black" />;

  45:         <TextView android:id="@+id/Class" android:text="Fundamentals of Yoga" android:padding="3dip" 

  46:             android:textColor="@color/black" />;

  47:         <TextView android:id="@+id/Studio" android:text="GF" android:padding="3dip" 

  48:             android:textColor="@color/black" />;

  49:         <TextView android:id="@+id/Instructor" android:text="Eleanor" android:padding="3dip" 

  50:             android:textColor="@color/black"/>;

  51:     </TableRow>

  52:     <;TableRow android:background="@color/light_grey" >

  53:         <;TextView />

  54:         <;TextView />

  55:         <;TextView />

  56:         <;TextView android:id="@+id/MoreInfo" android:text="More Info >" android:padding="3dip"

  57:         android:textColor="@color/black" android:onClick="onClick" android:clickable="true"/>; 

  58:     </TableRow>

  59: </TableLayout>

.java file:

   1: package com.example.RelativeLayout;

   2: 

   3: import android.app.Activity;

   4: import android.os.Bundle;

   5: import android.view.View;

   6: import android.widget.Toast;

   7: 

   8: public class RelativeLayout extends Activity {

   9:     /** Called when the activity is first created. */

  10:     @Override

  11:     public void onCreate(Bundle savedInstanceState) {

  12:         super.onCreate(savedInstanceState);

  13:         setContentView(R.layout.main);

  14:     }

  15:     public void onClick(View v){

  16:         Toast toast = Toast.makeText(getApplicationContext(), 

  17: "Cycle/Spinning – Stationary bike cardio workout in a 

  18: group setting. Water bottles and a towel required 

  19: for attendance.", Toast.LENGTH_LONG);

  20:         toast.show();

  21:     }

  22: }

  23:  

~david

Playing around with Twitter API using Tweepy

Yes, this is the kind of stuff I find myself doing when I’m bored.  Just a quick tutorial on using the Twitter python library called Tweepy.  Examples include authentication, print your statuses, and print your mentions.

First, you need to authenticate using OAuth as simple authentication has been disabled by Twitter.  I will not repeat what has already been done, so this is the best way to do it.  If you have no problems with that example, then at the end you will have a simple python script which allows you to update your status via the command line.  However, the most important piece is the authentication:

   1:  #!/usr/bin/env python
   2:   
   3:  import sys
   4:  import tweepy
   5:   
   6:  CONSUMER_KEY = 'Your stuff'
   7:  CONSUMER_SECRET = 'Your stuff'
   8:  ACCESS_KEY = 'Your stuff'
   9:  ACCESS_SECRET = 'Your stuff'
  10:   
  11:  auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
  12:  auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)
  13:  api = tweepy.API(auth)

This will allow you to authenticate against Twitter and be able to work with the API.  Now you can add to your python script the code below.

How about printing your status updates?

   1:  statuses = tweepy.Cursor(api.user_timeline).items()
   2:   
   3:  for status in statuses:
   4:          print " "
   5:          print status.text

How about printing your mentions?

   1:  mymentions= tweepy.Cursor(api.mentions).items()
   2:   
   3:  for status in mymentions:
   4:          print " "
   5:          print status.text

 

The Tweepy API reference has a ton of great information.  As well as the Twitter API wiki.

~david

mRemote and Cisco’s AnyConnect Client Issues

I love mRemote.  Makes keeping track of all the different connections (RDP, VNC, SSH, etc.) a breeze.  However, I’ve recently noticed that after I installed Cisco’s AnyConnect client I could no longer open my existing connections or create new connections.  Upon startup I would receive the following window:

mRemoteSecurityPassword

What I ended up having to do is remove AnyConnect and then disable FIPS encryption following this link http://support.microsoft.com/kb/811770.

WindowsPolicy

Works like a charm now.  More than likely you don’t have to remove AnyConnect, however I don’t use it that much and rather just remove it all together.

~david

PS: The mRemote project is dead at version 1.5, there’s a fork out there called mRemoteNG which I’m trying out check it out here http://www.mremoteng.org/.

Create Hyperlinks to Worksheets with Excel VBA

This took me a couple of hours to get working, which means that one of two things happened.  I am very rusty in my VB or nothing I found online made sense.  I’m going with a little bit of the former and a lot of the latter.

The problem I was facing is that I wanted to create an Excel dashboard which linked worksheets in the file.  I wanted to do this dynamically using VBA in order to be able to get a snapshot of the whole workbook without having to go sheet by sheet.

The final code looks like this:

   1:  LinkToSheet = "'" & Sheets(i).Name & "'!A1"
   2:  NewSheet.Hyperlinks.Add Anchor:=NewSheet.Cells(10 + c, 6), Address:="", 
   3:  SubAddress:=LinkToSheet, ScreenTip:="", TextToDisplay:=""
 

Now to break it down a bit for those of us who need a little help with VB.  This part of the code dictates the worksheet where the hyperlink will go, in this case I have a variable called NewSheet:

   1:  NewSheet.Hyperlinks.Add
 

The Anchor property is the location of where to put the hyperlink.  In my case it’s dynamic, but for most people it might be a static location (e.g. F2) like this:

 
   1:  NewSheet.Hyperlinks.Add Anchor:=F2
 

The Address property needs to be blank if you’re linking to other worksheets, you use this if you’re linking to other files or URLs.  The LinkToSheet variable is used because some of the worksheet names I use have spaces, so I need to be able to format my worksheet as ‘WorkSheet Name’!A1.  Finally, the last two properties are more adornments than anything else in case you have to have a hover tip or display different text than the name of the worksheet.

~david

Cisco UCCE Outbound Option Find Query Rule for Dialed Record

Here’s a simple query using an inner join to find out which query rule added a certain record to the dialer.  This is pretty useful when you’re trying to figure out why a record was dialed which went to the wrong skill group.  The only challenge here is joining two different tables in two different databases, in this case the HDS and AW databases.

 

SELECT [DateTime]
      ,[CustomerTimeZone] AS CustTimeZone
      ,[CampaignID]
      ,[CallResult]
      ,[CallStatusZone1]
      ,[CallStatusZone2]
      ,[asp_awdb].[dbo].[t_Query_Rule].QueryRuleName
      ,[DialingListID]
      ,[Phone]
      ,[SkillGroupSkillTargetID] AS SGID
      ,[AgentPeripheralNumber] AS AgentExt
      ,[PeripheralCallKey]
      ,[CallDuration]
      ,[AccountNumber]
      ,[FirstName]
      ,[LastName]
      ,[CallbackPhone]
      ,[CallbackDateTime]
      ,[DialingMode]
      ,[DialerID]
      ,[ImportRuleDateTime]
  FROM [dam_hds].[dbo].[t_Dialer_Detail]
INNER JOIN [dam_awdb].[dbo].[t_Query_Rule] on [dam_hds].[dbo].[t_Dialer_Detail].QueryRuleID = [dam_awdb].[dbo].[t_Query_Rule].QueryRuleID
WHERE DateTime > ’10/01/2010′
ORDER BY DateTime DESC

Presto!

~david

Sprint’s HTC EVO

I decided to put my Windows HTC Touch Pro 2 out in the pasture and go for the much hyped “first ever 4g phone”, the HTC EVO.  Best decision ever concerning a phone!

First and foremost, this is the best phone I’ve ever had.  The software is great, the responsiveness is amazing, and it has all sorts of randomly cool features.

The Pros:

  • Great screen.
  • Integration with Google products is flawless.
  • Turn by turn navigation with Google maps.
  • FM radio.
  • Sprint TV, great during the world cup.
  • Apps like Swype, NYT, Google Voice, Google Voice Search.

The Cons:

  • Dealing with Exchange invitations, not as clean as with Windows.
  • No unified inbox like WebOS.
  • Battery hog, but all smart phones are, will need to charge it after a few hours of heavy use.
  • Not enough widgets for shortcuts and displaying vital information on the screen.

 

~david

CTIOS Error 10125

PeripheralErrorCode:10125 AgentID:1000 UniqueObjectID:agent.5000.1000
     MessageID:eControlFailureConf MessageType:eSetAgentStateRequest
     ErrorMessage:IPCC Error [10125]You have attempted to log into an invalid
     instrument.  If you think it is correct there could be a configuration error.
      Otherwise, check the number and try again. FilterTarget:agent.5000.1000

I recently ran into this error and for the life of me could not figure out what was wrong.  So, the first thing I did was make sure it was happening on more than one PC, check.  Next, checked if it was happening with more than one phone, check.  Next, check if it happens with both PGs… this is where I noticed that I could login to one PG, but not to the other.  Which then lead me to check the configuration of both PGs and found that the PG configuration for the PG where the login was failing had an agent extension of 7 digits instead of 10 digits.  Thus why CTIOS was rejecting my login to a phone with an extension with 10 digits.

Presto!

~david

2 Months with Sprint’s HTC Touch Pro 2

If you recall last year I posted a few Tweets about the, then upcoming, Palm Pre and how much I was looking forward to this phone.  Later on I posted a story about about my impressions with the Palm Pre.  After a few months of sticking with it and really giving it a try I had to let it go and go back to Windows Mobile.  Yes, I am a Microsoft slave when it comes to phones.  I missed the integration with Exchange, I missed the seamless connectivity with Outlook, I missed being able to tweak it to try and make it far more efficient and faster.

It now has been around two months since I’ve made the switch and I can’t really complain, I got everything I expected from Windows Mobile.  First, let’s start with the phone.

The HTC Touch Pro 2 retails for $599.99 at Sprint.com.  Yes, that’s $600 dollars for a phone!  Yes, I thought it was insane when I saw the price tag.  Not only is/was the phone incredibly pricey, it was close to impossible to find it at Sprint stores.  The excuse I always got was that since it was so pricey not a lot of stores carried it and it was considered a specialty item.  Good thing I didn’t ask for diamond encrusted keys.  Regardless, I turned to my trusted friend Craig Newman and his awesome website http://craigslist.org/ and found someone letting go of their phone for $250.  Finding the guy, haggling with him, and finally getting the phone is a whole other story, but ultimately I paid the asking price and began my journey back to the dark side.

Happy with my purchase I decided that this phone had so much potential, which was being thrown away by the stock operating system provided by Sprint.  First and foremost, there was Windows 6.5 and the phone runs Windows 6 stock.  Second, there was HTC’s Sense UI, among other tweaks available which would put this phone over the top when it came to usability.

When it comes to hacking your phone and making it do things it might not be supposed to do, you head over to the always awesome and informative, http://forum.ppcgeeks.com/.  After a few days of research I decided to give Mike and his http://www.mightyrom.com/ a spin.  Flashing your phone is not for the faint of heart, I was pretty nervous something would happen in the middle of the flash which would render my phone useless, but thankfully everything has been great so far and I’ve enjoyed what my phone has become.

The key features I love about this phone:

– Great voice quality, including the speaker.

– A keyboard, I love having a physical keyboard.

– Very responsive, more than my Palm Pre.

Cons:

– This thing is a brick, it’s huge.

– It’s Windows, which needs a kick to restart it ever few days… well maybe about once every two weeks.

– Windows Marketplace sucks.

~david