Secrets of a Buccaneer-Scholar is part auto-biography and part blueprint for an alternative method of learning that does not fit into the memorization, recitation system that is mostly what the American educational system practices

As Mark Twain once wrote:

I've never let my school interfere with my education.

So it was with James Marcus Bach, a high- school dropout.  James discusses his history and the methods he used to educate himself in the computer sciences.  James became an industry-recognized software testing expert and according to his blog, now “teaches, speaks, and writes about thinking and learning.â€?

In the book, James introduces you to his SACKED SCOWS process for learning:

  1. Scouting Obsessively
  2. Authentic Problems
  3. Cognitive Savvy
  4. Knowledge Attracts Knowledge
  5. Experimentation
  6. Disposable Time
  7. Stories
  8. Contrasting Ideas
  9. Other Minds
  10. Words and Pictures
  11. Systems Thinking

As well as other non-conventional learning techniques.

In reading the book, I found many similarities in the way James educated himself and my own experiences.  Is this book for everyone?  Probably not.  But, I think it will appeal to people who do not learn in the “typicalâ€? manner provided by our educational system. 

Even if you don’t find the entire book valuable, there are some very interesting techniques found within that may cause a light bulb to appear over your head and make you say, “Now that makes sense to me.�

Anyway, at less than 200 pages, it’s a fairly quick read and should be well worth your time investment.

 

Additional Info

http://www.buccaneerscholar.com/

http://twitter.com/jamesmarcusbach

 

WordPress and Automatic Upgrades

On June 29, 2010, in WordPress, by Mitch Milam

I run my blog on the WordPress blog engine, which is a phenomenal product.

I actually have two blogs: http://blogs.infinite-x.net, which I installed myself and totally maintain, and http://crmaccelerators.net, which is my company blog and which was installed by my provider, http://myhosting.com after I moved my web site over to their systems. 

Since I am the one who initially installed WordPress I sometimes run into issues based on the way that I configured it.  In a nutshell, I’m not a Linux person in any stretch of the imagination so I’m constantly trolling for any issues that I run into.  Most of the time they can be found within the WordPress ecosphere so solutions are really not a problem.

Starting with WordPress 2.something, they introduced the ability to automatically upgrade the blog engine through the Administration interface.  This saved a ton of time since FTPing was no longer required.

Except it would not work on my blog.  I received an error that looked something like this:

Warning: file_exists() [function.file-exists]: open_basedir restriction in effect.

What the heck does that mean?

I never found a really good answer until today:

http://www.dzuchara.com/wordpress-upgrade-bug-fix

I took the information in that post and compared it to my crmaccelerators blog which myhosting installed.  I found that the “tmpâ€? folder was set incorrectly within my wpconfig.php file and after making a one-line change, all was well and good in the world and I now have automatic upgrade capability for both my blog engine and the plug-ins that I use.

 

If you have spent any time at all writing JavaScript for CRM you have probably made at least one programming error that has resulted in your page failing to work properly.

CRM will display the following in the bottom-left corner of your page:

image

Not very helpful, and sometimes not very noticeable either. However, when you close the window CRM will display the following dialog:

image

Now we’re getting somewhere.  This is CRM’s built-in error collection tool that the CRM development team uses to record and track errors within CRM.  The data is scrubbed of anything that resembles personal or proprietary information then sends the data ( as long as you click Send Error Report ) to a collection server at one of Microsoft’s Internet sites.

But, this information can also be helpful to you, since you caused the error.

If you click the middle link, View the data that will be sent to Microsoft you will see the actual JavaScript error that cause the error on the page:

 image

Well that is all great, good, and wonderful, but what does it mean?  Expected what???

You have two options:

1) You can hunt down an Internet that has a character table that lists characters and their numeric value; or:

2) You can turn to Google.  Simply paste the message into the search box of Internet Explorer ( the top box ), press Enter, and the results will be shown in your default language on the Google search page:

image

Alas, Bing Search does not seem to offer the same capability.

 

So there you have it.  Hopefully this will help the next time you accidentally introduce an error into your code.

As a final note, sometimes the information shown in the error message dialog is of no use to you at all.  You will see something like, an error occurred on line 743, character 15.  Since CRM wraps your code within their code, this type of information is less than useful to you so you may spend more than a little time tracing down your exact problem.

Special thanks to Daniel Cox who showed me the Google trick.

 

Book Recommendation: Bounce

On June 25, 2010, in Book Reviews and Recommendations, by Mitch Milam

You don’t find many business-oriented books that are actually fun to read but Bounce is one of them.  Keith McFarland wrote Bounce as a story about fictional characters at a fictional company who are going through tough economic times and facing cost cutting directives from their corporate headquarters while simultaneously loosing customers and market share.

Sound familiar, anyone?

 

Overview

Keith explores the concept that an organization must face a period of disintegration before it can be reintegrated into something better and stronger – what he calls a Bounce.

The book consists of a main story which illustrates putting the principles of the Bounce in action and is followed by section where he outlines in more detail the key principles:

 

Six Key Principles of the Bounce:

  • embrace the bounce
  • manage the anxiety
  • manage the mental factors
  • manage the money
  • manage the mission ( in the military style )
  • manage the morale ( in the military style )

 

The book is compact and a quick read and the story is written in such a way that you have to remember that you’re reading a book about making your organization better.  I’ve read it twice and have enjoyed it equally both times.

The Bounce principles are right on the money and I have seen organizations that had they implemented them, could have changed the course of the company.

 

Scott Belsky of Behance, has written a very interesting book that shows you tools and techniques to actually make your ideas a reality.  As stated in the first sentence of the introduction:

IDEAS DON’T HAPPEN because they are great-or by accident.

They happen for a reason, and with more than a little work and elbow-grease applied. As many of us have seen, both personally and professionally, ideas that are not cultivated and grown, die on the vine.  Making Ideas Happen outlines best practices to make sure that your ideas actually turn into reality taken from years of hands-on research and practical experience.

 

Overview

  • You have to have ideas you want to make happen
  • You can develop the capacity to make ideas happen
  • Making ideas happen = Ideas + Organization + Communal forces + Leadership capability
  • Organization enables you to manage and ultimately execute your ideas
  • The forces of community are invaluable and readily available
  • Fruitful innovation requires a unique capacity to lead

The book has plenty of real-world examples of how creative people organize and execute their ideas.

 

The Action Method

Scott also introduces you to their practice, the Action Method, which he developed while working at Goldman Sachs and further refined while pursuing his MBA at Harvard.

The Action Method reminds me a little of Getting Things Done (GDT), from David Allen, but it is slightly different in organization.

The Action Method breaks things down into Projects and Actionable Steps within those projects.  You can set deadlines for Action Steps or have them simply exist and a facility is provided for “backburnerâ€? items that may or may not be pursued at some point in the future.

Having used the Action Method ( the online version ) for over a month, I can testify their system it does indeed work – as long as you commit to your self that you will use it ( as with any such system ).  By constantly documenting, prioritizing, and rearranging both my ideas and the Action Steps required to realize those ideas, I feel that I'm one step closer to accomplishing many of the things that have, so far, just been on my to-do list.

 

Additional Resources

Behance ( Scott’s company ), has created a series of products that help you implement the Action Method in your day-to-day life. You can visit their site here.

The first is a set of paper products which help you record and manage your Action Items.  The second, called Action Method Online, puts the Action Method at your fingertips for every day use.  I’ll be reviewing Action Method Online later, since it is closely related to the book and very valuable in and of itself.

 

The CRM Metabase web service allows you to retrieve Entity and Attribute information. If you’ve ever retrieved Entity information you may have noticed some interesting things about the list of attributes returned.

Some of the attributes you will see are not normally displayed in the list of attributes you see when viewing the Entity from within the CRM user interface.

I call these attributes the ‘Of’ attributes because they have properties that end with ‘Of' and are related to, or based on, other attributes.

If we explore the CRM AttributeMetadata class you will see the following three properties:

AggregateOf
Gets the name of the attribute that aggregates the value of this property.

AttributeOf
Gets the name of that attribute that this attribute extends.

CalculationOf
The SDK description says 'For internal use only, but attributes with this property typically contain currency data.

 

Here are examples of ‘Of’ Attributes:

From the Contact Entity:

Attribute Name Attribute Of
parentcustomeridname parentcustomerid
donotbulkemailname donotbulkemail

 

From the Account Entity:

Attribute Name Calculation Of
Aging60_Base Aging60
Revenue_Base Revenue

 

From the Contact Entity:

Attribute Name Aggregate Of
owningteam ownerid
accountid parentcustomerid

 

So why is this important to me?

Well, that depends on what you are doing with the Metabase.  If you are producing documentation, these attributes may or may not me useful to you.

If you are using the Metabase web services to delete attributes, then these attributes are of no use to you because they can’t be deleted since they are maintained internally by CRM.  If you delete the ‘parent’ attribute, the related attribute is also deleted.  If you attempt to delete the internally generated attribute, you’ll receive an error.

 

Checking for ‘Of’ attributes

Here is how you check for ‘Of’ attributes using code:

AttributeMetadata attribute = entityResponse.EntityMetadata.Attributes[0];

if (
(attribute.AttributeOf == null) &&
(attribute.AggregateOf == null) &&
(attribute.CalculationOf == null)
)
{
    // do something interesting
}

 

If you are thinking about developing a commercial iPhone application, this book is the first thing I would purchase.

It is filled with extremely valuable information about the actually processes required to bring your newest, brilliant, iPhone application idea to life and is written by people who have been publishing iPhone apps for years.

Here’s an overview of the book’s contents:

  • Exploring the App Store
  • Validating your idea with
  • Protecting your Intellectual Property
  • Affiliate programs and in-app purchase.
  • Marketing

 

When I first started working with Windows Azure, this book was one of my first purchases.  Not only does it cover the basics of working with Azure such as:

  • Azure Roles
  • Table and blob storage
  • Queues
  • Moving from the Enterprise to the Cloud
  • Security and authentication
  • SQL Azure Services

but it also gives a very in-depth explanation of the inner-workings of the Windows Azure platform so you could actually understand what was happening physically, when you upload and publish your Azure solution.

There are plenty of nuts and bolts code segments and samples to show you how things are done and Wrox Press makes these samples available for download here.  Additionally, chapters 12 and 13, covering SQL Azure, are actually in an online-only format and can be found at the same site.

The only issues that I had with the book were some late-breaking technology changes that shipped in the final Windows Azure release which were different from the community technology preview (CTP) releases so their examples didn’t quite work the same.  Overall, these issues were quite minor and a little digging into the RTM examples showed me the new and proper way of doing things.

Overall, Cloud Computing with the Windows Azure Platform is a great addition to your programming library should you be leaning toward Windows Azure as a solution.

 

Final Note

Roger’s company, OakLeaf Systems, has a blog that posts a daily summary of Azure-related articles and announcements. I have no idea how long it takes someone to assemble each post, but I would imagine it takes quite a bit of time.  I find these posts invaluable and greatly appreciate each summary.

 

Microsoft released a new white paper today.

Overview:

Microsoft takes a holistic approach to providing a highly secure environment for Microsoft Dynamics CRM Online. After an overview of the inherent risks to three key areas of the service, the remaining sections of this paper describe how Trustworthy Computing, Microsoft’s core commitment to build software and services that better help protect customers and the industry, is reflected in the design and operation of Microsoft Dynamics CRM Online.

 

Sharing Records Programmatically

On June 15, 2010, in Customization, Dynamics CRM, by Mitch Milam

On occasion I’ve had the need to programmatically share a record with a CRM user or team.  I noticed this morning that the CRM user interface and the CRM web service call to Grant Access don’t actually have the same number of options.

Here is how you would share a record manually, through the CRM interface:

image 

Here is how you do share a record via code ( from the CRM SDK ):

// Create the SecurityPrincipal Object
SecurityPrincipal principal = new SecurityPrincipal();
principal.Type = SecurityPrincipalType.User;

// PrincipalId is the Guid of the user to whom access is being granted
principal.PrincipalId = new Guid("7B222F98-F48A-4AED-9D09-77A19CB6EE82");

// Create the PrincipalAccess Object
PrincipalAccess principalAccess = new PrincipalAccess();

// Set the PrincipalAccess Object's Properties
principalAccess.Principal = principal;

// Gives the principal access to read
principalAccess.AccessMask = AccessRights.ReadAccess;

// Create the Target Object for the Request
TargetOwnedAccount target = new TargetOwnedAccount();

// EntityId is the Guid of the account access is being granted to
target.EntityId = new Guid("6A92D3AE-A9C9-4E44-9FA6-F3D5643753C1");

// Create the Request Object
GrantAccessRequest grant = new GrantAccessRequest();

// Set the Request Object's properties
grant.PrincipalAccess = principalAccess;
grant.Target = target;

// Execute the Request
GrantAccessResponse granted = (GrantAccessResponse)service.Execute(grant);

AccessMask Property

The AccessMask property defines how the record should be shared. The following values are available:

AppendAccess

Specifies the right to append the specified object to another object.

AppendToAccess

Specifies the right to append another object to the specified object.

AssignAccess

Specifies the right to assign the specified object to another security principal.

CreateAccess

Specifies the right to create an instance of the object type.

DeleteAccess

Specifies the right to delete the specified object.

ReadAccess

Specifies the right to read the specified type of object.

ShareAccess

Specifies the right to share the specified object.

WriteAccess

Specifies the right to update (write to) the specified object.

For additional information, visit the CRM SDK topic: AccessRights Enumeration (CrmService).

The example above gives Read access to a record.  To specify more than one access right, you use the C# OR assignment operator so that your code looks something like this:

principalAccess.AccessMask |= AccessRights.ReadAccess;
principalAccess.AccessMask |= AccessRights.WriteAccess;

The Append Oddity

I noticed something odd about the Assign right this morning.  If you are programmatically sharing the record you must supply both Append and AppendTo rights in order for CRM to fully give Append rights to the record. Here is the code:

principalAccess.AccessMask |= AccessRights.AppendAccess;
principalAccess.AccessMask |= AccessRights.AppendToAccess;

If you only supply Append and view the sharing assignments through the CRM user interface, you will not see the Append box checked.