Tuesday, December 29, 2015

Recommended Books for Microsoft Dynamics CRM 2015

These are recommended for Dynamics CRM 2015 with direct links!

Microsoft Dynamics CRM 2015 Unleashed

Without question, this book has jump start our application migration initiatives and we are well on our way to realizing the fullest benefits very quickly. I was doubtful at first that one book would be able to cover everything in the application, but this book managed to address everything we needed.









Microsoft Dynamics CRM 2015 Application Design

MS Dynamics CRM 2015 Application Design, it's an excellent book.
Written with a simple language and provider with a lot of samples and illustrations well distributed through the whole book,
this book is suitable for beginners and intermediates CRM developers.
I highly recommend this book to anyone who wants to learn about Microsoft Dynamics CRM 2015 or simply improve his CRM skills.








Microsoft does great job with the white papers defiantly place to go for information
https://blogs.msdn.microsoft.com/crminthefield/2015/01/05/microsoft-dynamics-crm-2015-white-papers-technical-documentation/

Download the SDK now! Once you learn your way around it, that would be the first place you will look for solutions.
https://www.microsoft.com/en-us/download/details.aspx?id=44567

Microsoft training kit, a great start for anyone who is new to Dynamics CRM 2015
https://www.microsoft.com/en-us/dynamics/crm-customer-center/training-adoption-kit-for-microsoft-dynamics-crm.aspx

Training Videos!
http://blogs.msdn.com/b/emeadcrmsupport/archive/2014/12/11/dynamics-crm-2015-new-training-videos.aspx


Enjoy the books! Hope it helps!

Saturday, March 7, 2015

6 Exciting Updates in Dynamics CRM 2015

There are a number of new features in the Microsoft Dynamics CRM 2015 update that will make it even easier to manage customer interactions. The goal of the 2015 update is to improve the product selling features so that there will be a natural increase in sales. One of the most exciting updates is the access to Microsoft Social Listening. This allows an organization to monitor their brand reputation and react to trends while tracking conversations in real time.

Here are some of the other updates of note in Dynamics CRM 2015 to consider as well.

#1. A New Way To See Accounts

In this new release, it has become easier to navigate to specific blocks of information and then get more details about those information blocks. Grouped by products, viewing accounts, or in hierarchical charts, it becomes possible to see how any account is performing in terms of overall revenue. Users will also be able to see who is working a specific account to communicate with them and easily share it with others for assistance or feedback.

The details of each account are also easier to access. The latest activity on the account and specific information, such as that account's credit limit, are put into an easily accessible and digestible format.

#2. Cortana Has Gotten Involved

Microsoft has now incorporated Cortana into the Dynamics CRM for 2015. It is now possible to speak specific commands into CRM if users have a Windows 8.1 phone. Many of the tasks are common and basic, but also time consuming when done repetitively. You'll be able to open an item, create new items, search for an item, and create a phone call activity. Tasks are a lot easier to manage with the Cortana voice commands and appointments can even be set through Cortana.

Microsoft has created a complete list of commands that can be used from a Windows 8.1 phone and further updates to this feature are expected in the near future.

#3. Products Are Easier To Manage

It has become a lot easier to add products to CRM with the 2015 update. Instead of encouraging customers to purchase single items, it has become easier to bundle related products together so that natural upsells can take place with every customer interaction.

Tailored pricing lists can also be created for individual territories. CRM can also create “territories” from specific customer segments that may be targeted for certain sales campaigns, allowing for individualized pricing and product groupings. This allows for better relationships to be formed because customers feel like they're getting a custom message instead of a well-rehearsed sales pitch.

Salespeople will also be able to use the hierarchical charts to view the actual products being sold. CRM will also provide suggestions for cross-selling to increase revenues.

#4. Create Custom Training For Your People

Many businesses have a highly customized Dynamics CRM. In the 2015 update, Microsoft has allowed the default Help content to be replaced with customized content that is designed for a specific system. Specific URLs can be redirected to virtually anything so that users can have their specific questions answered. This even includes a MS Word document, a PDF file, or even a page on an intranet.

#5. Better Synchronization

If a business uses CRM for Outlook as their central hub of information, then with this update they'll be able to synchronize more types of information. There are three specific points of emphasis with the update.

1.      Attachments from appointments.
2.      Tasks that have been assigned.
3.      Additional tasks and contacts fields.

Administrators are able to control the synchronization by being able to configure the field synchronization direction. Users can see the fields that have been synchronization. The end result is a better data sharing process.

The new configuration wizard makes it a lot easier to set up Outlook and configure CRM for it. All a business has to do is copy and paste information. There is also better security with the update, including multifactor authentication.

#6. Quick Create Is Much Better

Dynamics CRM 2015 now allows a sales opportunity to be added to the system at the same time as a new contact through the Create command. This updates a much needed process where a contact had to be created first and then the sales opportunity could be added to CRM.


With the update to Dynamics CRM 2015, it has become a lot easier to manage large amounts of data and use it to create better sales opportunities. Are you using CRM? What have you been able to accomplish with the 2015 update? 

Thursday, October 9, 2014

Dynamics CRM 2011 recommended books

After I wrote the Dynamics CRM 2013 recommended books I realized people are still using the 2011 version, So I've decided to write also short list for Dynamics CRM 2011 book.
Most of these books I've actually read and dealt with.

Again in my point of you there is nothing like the SDK
http://msdn.microsoft.com/en-us/library/hh547453(v=crm.5).aspx

And now for the books:
Working with Microsoft Dynamics CRM 2011 (Developer Reference) 

Configure, adapt, and extend Microsoft Dynamics CRM 2011—guided by two of the leading implementation specialists in the field. Whether you’re an IT professional, a developer, or a power user, you’ll get pragmatic, hands-on insights for customizing CRM in your organization—with or without programming.



Microsoft Dynamics CRM 2011 Unleashed
One thing I have learned about CRM since I began using it is it has a million different features with a million different uses. It is a great program but only if you know how to use it. Microsoft Dynamics CRM 2011 Unleashed explains every detail of Dyanmics CRM 2011 in a way that is easy to understand. I keep this book at my desk in case there is a feature I would like to know more about or if I want to know if Dynamics CRM is capable of something. Great book for reference.

Microsoft Dynamics CRM 2011 Administration Bible
Once you purchase this book and it arrives you'll know why the title of this review says that this is the CRM 2011 book to own. This is not your 'average' CRM book. First, the book contains more than 700 pages of CRM vital information. It takes the reader from "Laying a Solid Foundation" through "Extending and Integrating". What's in between those two, nothing but pure CRM goodness; architecting the application, installing, managing data, Sales, Marketing & Service, working with Entities, Processes and more

Microsoft Dynamics CRM 2011 Application Design 
I thoroughly enjoyed reading the book. This is the only book in the market that talks about and teaches how to design solution using Microsoft Dynamics CRM 2011's various customization and extension features. This makes the book helpful to both readers who are new to CRM as well as experienced. There are total 8 chapters in the book in which readers will learn the basics of CRM 2011 and will also learn how to implement and create applications like Project Training Enrolment System, Employee Recruitment Management System, Hotel Management System etc. using CRM 2011. The readers will also get to learn how to create Silverlight applications, ASP.NET pages which integrates with CRM 2011.
A must read book for any serious CRM developer.


Good luck!

Tuesday, October 7, 2014

Dynamics CRM 2013 recommended books

These are recommended for Dynamics CRM 2013 with direct links!
Still catching up with Dynamics CRM 2013 after I left it in v. 2011.

Microsoft Dynamics CRM 2013 Unleashed

Without question, this book has jumpstarted our application migration initiatives and we are well on our way to realizing the fullest benefits very quickly. I was doubtful at first that one book would be able to cover everything in the application, but this book managed to address everything we needed.




CRM 2013 QuickStart: Jumpstart Your Dynamics CRM 2013 Learning Curve


Has someone who have a lot of experience in 2011 this book was a great catch up!
But if you don't know Dynamics CRM prior to 2013 you better go to look at the classic Microsoft Dynamics CRM 2013 Unleashed




Microsoft Dynamics CRM 2013 Marketing Automation


Very detailed review on the bookhttp://crmbusiness.wordpress.com/2014/06/27/crm-2013-book-review-microsoft-dynamics-crm-2013-marketing-automation/





http://crmbook.powerobjects.com/The CRM Book is a comprehensive online resource for Microsoft Dynamics CRM written collaboratively by the team at PowerObjects. It’s intended to help users gain an understanding of how to work with Dynamics CRM, use that information to make good choices, and know where to go for more information if needed

http://blogs.msdn.com/b/crminthefield/archive/2013/12/26/microsoft-dynamics-crm-2013-white-papers-amp-technical-documentation.aspxGet the stuff directly from Microsoft ! these papers are technical and not for everybody (defiantly not for dummies :))

http://msdn.microsoft.com/en-us/library/gg309408.aspxAlmost forgot the SDK, the most important set of knowledge you can have on the Dynamics CRM 2013 for developers, but I would say not only!
Enjoy the books! Hope it helps!

Dynamics CRM UX tips

I think this post is one of the best I read about Dynamics CRM UX.
Worth reading, your costumers would appreciate it
http://niiranen.eu/crm/2014/09/10-tips-designing-great-user-experience-dynamics-crm/

Jukka Niiranen 10 points:

1. Understand #UX
2. Start from the navigation
3. Save clicks with view design
4. Make your forms more responsive
5. Automate the business process (flow)
6. Show the user what’s going on
7. Don’t forget your clients
8. Sweat the little things
9. Clean up after you’re done
10. Know where to go for more tips!

It's really recommended to read his post to understand the points !

About point 10:
Follow him! you'll have plenty more tips..
http://niiranen.eu/crm/

Monday, October 6, 2014

Dynamics crm 2013 tips video

Found nice video of 15 tips under 15 minutes for dynamics crm 2013, I think he has nice point there that can ease the work.

Tips 2-3, links from desktop to reports, are simple but great, can be very useful for costumers.


Worth Checking!
 

Friday, October 3, 2014

From KnockoutJS to Dynamics CRM came Sparkle XRM - Amazing product of the open source!

After using a lot Knockout.js lately and loving it, I started to wonder how could it be integrated into Dynamics CRM, are other developers using it and what do they do with it.
This is how I got to this amazing product, at least it looks like it, I personally haven't been developing on the Dynamics for quite while now.

http://www.sparklexrm.com/s/default.html

Take a look you might love it!

Tuesday, September 2, 2014

Tuesday, July 22, 2014

Dynamic CRM - making order in user security roles settings

Up until now I didn't see any good article / blog that made order for the user security role settings, but today I came a cross this one.
Just thought it was worth sharing.
http://blogs.technet.com/b/lystavlen/archive/2014/07/21/mapping-the-basic-user-to-security-role-settings-suggestions.aspx

Hope it helps.

Friday, May 9, 2014

Introduction to Microsoft Dynamics CRM 2013 Videos

I thought it would be good idea to look what's new and changed in the CRM since I've stopped working with it last year.

Before starting there are some good introduction videos here, just to get started and see some of the things as they are.
http://channel9.msdn.com/Series/Introduction-to-Microsoft-Dynamics-CRM-2013

After that I went to Microsoft Dynamics CRM Developer center page
http://msdn.microsoft.com/en-us/dynamics/crm/dn467921.aspx

Still no Dynamics CRM developer can avoid the SDK, this was my bible for the Dynamics CRM development.
http://msdn.microsoft.com/en-us/library/hh547453.aspx

Hope it helps,
Yair.

Thursday, May 8, 2014

And this is why I miss blogging

Read today a blog about why to write a blog and couldn't agree more, at least about most of it.

So I'm just sharing, this is why I used to blog
http://leontribe.blogspot.com/2014/04/the-10-reasons-why-i-blog.html
+ one more my own reason
11) I felt I have something to add to the Dynamics CRM Community.

Maybe I should start a new blog?


Microsoft Dynamics CRM 2013 Looks cool!

I'm still out, even tough I'm trying to follow what's up with the dynamics world.
So I know it is an old news but Dynamics CRM 2013 looks cool, lots of new features, I would love to explore. I almost feel like I"m missing it :)

Just a teaser for Microsoft Dynamics CRM 2013 vision
http://www.microsoft.com/en-us/dynamics/crm-vision.aspx

Monday, May 13, 2013

Sorry but I've moved on ...

Hi,
I'm sorry for not answering any more comments, I'm no longer supporting this blog.
I've worked 3 years with Microsoft Dynamics CRM, It was a fun ride but now I moved on to a different area, maybe I'll come back to it in the future.. :)

Thank you for all the comments.

Saturday, January 19, 2013

Dynamics CRM 2011 Open dialog from Javascript

There are many nice things you could do withe dialogs, but making the user to go and choose a dialog from the ribbon isn't really good UI and it doesn't make lot of sense.

Example of when I used the code.
Let say you want to help the user go throw the process of closing case, wouldn't be goo idea to replace the resolve case ribbon button with new ribbon that will open a dialog?

In this example I'm using CrmRestKit, It is required for the code to work, Please make sure you add it to the form.

Javascript:


var DIALOG_NAME = "Test Dialog";

CrmRestKit.ByQuery('Workflow', ['WorkflowId'], "Category/Value eq 1 and StateCode/Value eq 1 and Type/Value eq 1 and Name eq '" + DIALOG_NAME + "'", false)
            .fail(function (t) {
            alert(t)
        })
            .done(function (data, status, xhr) {
            // Assert
            //equals(data.d.results.length, 2, 'Expected two');          
            if (data.d.results.length < 1) {
                alert("Missing dialog named: '"+DIALOG_NAME+"'");
                return;
            }
            var dialogId = data.d.results[0].WorkflowId;
            var objectId = Xrm.Page.data.entity.getId().replace("{", "%7b").replace("}", "%7d");
            var url = Xrm.Page.context.prependOrgName("/cs/dialog/rundialog.aspx?DialogId=%7b" + dialogId + "%7d&EntityName="+ Xrm.Page.data.entity.getEntityName() +"&ObjectId=" + objectId);
            var returnValue = showModalDialog(url);
        });

Sunday, January 6, 2013

Dynamics CRM 2011 - Javascript - Getting selected records from subgrid

Getting the selected values from subgrid in form is not supported, which makes it little bit more tricky.
Lets say you need to get selected records from subgrid after the user got out of the subgrid, like after onchange event of some form attribute. In this case the focus moves out of the subgrid and all you'll get would be an empty list.

The trick to get the selected records is: Get the focus back on the subgrid before trying to get the values.
Anyway it is not supported as well.

My Sample code:

var subgridName = "testSubGrid"

function GetSelectedRecords() {
    var stringOfSelectedIds = "No records were selected";
    if (Xrm.Page.getControl(subgridName) != null) {
        document.getElementById(subgridName).getElementsByTagName('a')[0].focus();
    }
    //document.getElementById(subgridName).control.get_selectedIds()
    if (document.getElementById(subgridName) != null && document.getElementById(subgridName).control != null) {
        selectedRecods = document.getElementById(subgridName).control.get_selectedIds();
        if (selectedRecods != null && selectedRecods.length > 0) {
            stringOfSelectedIds = "Selceted records: " + selectedRecods.join();
        }
        alert(stringOfSelectedIds);
    }
}

GetSelectedRecords()

Sunday, December 16, 2012

Dynamics CRM 2011 - Preventing close alert

Dynamics CRM 2011 - Preventing close alert


In Dynamics CRM 4.0 it was easy to disable close alert by using this one line of code before you close the window:
crmForm.detachCloseAlert();

In Dynamics CRM 2011, this method is depracated. The way i workaround it, is setting all dirty fields submit mode to never.
function IsAttributeDirty(attribute, index) {    return attribute.getIsDirty();}
function SetAllDirtyFieldsToNeverSubmit(){ var attributes = Xrm.Page.data.entity.attributes.get(IsAttributeDirty); for (var i in attributes) { attributes[i].setSubmitMode("never"); }}//ends function RemoveAllDirtyFields(){
Close window with out fields change message:
SetAllDirtyFieldsToNeverSubmit();
Xrm.Page.ui.close();

Sunday, December 9, 2012

Microsoft Dynamics CRM 2011 - Something about plugins SharedVariables

Microsoft Dynamics CRM 2011 - Something about plugins SharedVariables

My SharedVariables problem 
I had 2 plugins:
1) Pre Validation (code: 10)
2) Post Operation (code: 40)
After adding new value to SharedVariables in PreValidation, I've failed getting it in the PostOperation.

Solution:
I've found this article which explains the subject very well and helped me with my issue:
http://thomasthankachan.com/2011/08/12/pass-data-between-plug-ins-using-sharedvariables/

Summary:
PreValidation and PostOperation are running under different pipelines, and you should get SharedVariables from the parent context in PostOperation plugin and not it's own context.

MyCode:


bool isUpdate = true;
if(context.SharedVariables.Contains("SkipPlugin") && ((bool) context.SharedVariables["SkipPlugin"]))
{
  isUpdate = false;
} else if(context.ParentContext != null && context.ParentContext.SharedVariables.Contains("SkipPlugin") && ((bool) context.ParentContext.SharedVariables["SkipPlugin"])) {
  isUpdate = false;
}

Saturday, October 20, 2012

Dynamics CRM 2011 Form Script Analyzer

Dynamics CRM 2011 Form Script Analyzer

Few weeks ago i needed to get all the Javascript that is running in one of our customers Dynamics CRM 2011 Organization, I needed to get out all the Web Resource that are used, where are they used, what are the function that are running and on what are they running on (Onload, OnChange, OnSave, Ribbon buttons).
It was sisyphean work but after going over each Web Resource and their dependencies, I got the list out. This is what made me think, maybe I should build such a tool that takes it all out to an CSV file.

Yesterday, while surfing the web I've found the tool that does excetly that.

In TechEd New Zealand 2012 Gayan Perera presented a talk named:
Advanced Bag of Tips & Tricks for Microsoft Dynamics CRM 2011 Developers

I've enjoyed the presentation very much.
It was about:
T4 Code generation
MSCRM JS
Script#
How to convert managed solution to unmanaged solution
ILMerge
and Form Script Analyzer.

Back to the tool:
The Form Script Analyzer is Console Application tool that exports the Web resources and where their functions are called.

You can download it here : Download
For detailed description go to the TechEd Video and skip to 39 minutes (My recommention is to see the whole thing)

I haven't tried the tool yet, but it seems promising.

Friday, October 12, 2012

Dynamics CRM Interactive network visualization

A Jquery library to create interactive network visualization
http://flowingdata.com/2012/08/02/how-to-make-an-interactive-network-visualization/

If you have ideas of what to do with it in Dynamics CRM 2011, Please comment,  I'll see what i can do about it and I promise to post it in this blog.

Tuesday, October 9, 2012

The Evolution of a Programmer

A funny joke I've heard long ago and loved..

The Evolution of a Programmer

High School/Jr.High

  10 PRINT "HELLO WORLD"
  20 END

First year in College

  program Hello(input, output)
    begin
      writeln('Hello World')
    end.

Senior year in College

  (defun hello
    (print
      (cons 'Hello (list 'World))))

New professional

  #include <stdio.h>
  void main(void)
  {
    char *message[] = {"Hello ", "World"};
    int i;
 
    for(i = 0; i < 2; ++i)
      printf("%s", message[i]);
    printf("\n");
  }

Seasoned professional

  #include <iostream.h>
  #include <string.h>
 
  class string
  {
  private:
    int size;
    char *ptr;
 
  string() : size(0), ptr(new char[1]) { ptr[0] = 0; }
 
    string(const string &s) : size(s.size)
    {
      ptr = new char[size + 1];
      strcpy(ptr, s.ptr);
    }
 
    ~string()
    {
      delete [] ptr;
    }
 
    friend ostream &operator <<(ostream &, const string &);
    string &operator=(const char *);
  };
 
  ostream &operator<<(ostream &stream, const string &s)
  {
    return(stream << s.ptr);
  }
 
  string &string::operator=(const char *chrs)
  {
    if (this != &chrs)
    {
      delete [] ptr;
     size = strlen(chrs);
      ptr = new char[size + 1];
      strcpy(ptr, chrs);
    }
    return(*this);
  }
 
  int main()
  {
    string str;
 
    str = "Hello World";
    cout << str << endl;
 
    return(0);
  }

Master Programmer

  [
  uuid(2573F8F4-CFEE-101A-9A9F-00AA00342820)
  ]
  library LHello
  {
      // bring in the master library
      importlib("actimp.tlb");
      importlib("actexp.tlb");
 
      // bring in my interfaces
      #include "pshlo.idl"
 
      [
      uuid(2573F8F5-CFEE-101A-9A9F-00AA00342820)
      ]
      cotype THello
   {
   interface IHello;
   interface IPersistFile;
   };
  };
 
  [
  exe,
  uuid(2573F890-CFEE-101A-9A9F-00AA00342820)
  ]
  module CHelloLib
  {
 
      // some code related header files
      importheader(<windows.h>);
      importheader(<ole2.h>);
      importheader(<except.hxx>);
      importheader("pshlo.h");
      importheader("shlo.hxx");
      importheader("mycls.hxx");
 
      // needed typelibs
      importlib("actimp.tlb");
      importlib("actexp.tlb");
      importlib("thlo.tlb");
 
      [
      uuid(2573F891-CFEE-101A-9A9F-00AA00342820),
      aggregatable
      ]
      coclass CHello
   {
   cotype THello;
   };
  };
 
 
  #include "ipfix.hxx"
 
  extern HANDLE hEvent;
 
  class CHello : public CHelloBase
  {
  public:
      IPFIX(CLSID_CHello);
 
      CHello(IUnknown *pUnk);
      ~CHello();
 
      HRESULT  __stdcall PrintSz(LPWSTR pwszString);
 
  private:
      static int cObjRef;
  };
 
 
  #include <windows.h>
  #include <ole2.h>
  #include <stdio.h>
  #include <stdlib.h>
  #include "thlo.h"
  #include "pshlo.h"
  #include "shlo.hxx"
  #include "mycls.hxx"
 
  int CHello::cObjRef = 0;
 
  CHello::CHello(IUnknown *pUnk) : CHelloBase(pUnk)
  {
      cObjRef++;
      return;
  }
 
  HRESULT  __stdcall  CHello::PrintSz(LPWSTR pwszString)
  {
      printf("%ws
", pwszString);
      return(ResultFromScode(S_OK));
  }
 
 
  CHello::~CHello(void)
  {
 
  // when the object count goes to zero, stop the server
  cObjRef--;
  if( cObjRef == 0 )
      PulseEvent(hEvent);
 
  return;
  }
 
  #include <windows.h>
  #include <ole2.h>
  #include "pshlo.h"
  #include "shlo.hxx"
  #include "mycls.hxx"
 
  HANDLE hEvent;
 
   int _cdecl main(
  int argc,
  char * argv[]
  ) {
  ULONG ulRef;
  DWORD dwRegistration;
  CHelloCF *pCF = new CHelloCF();
 
  hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
 
  // Initialize the OLE libraries
  CoInitializeEx(NULL, COINIT_MULTITHREADED);
 
  CoRegisterClassObject(CLSID_CHello, pCF, CLSCTX_LOCAL_SERVER,
      REGCLS_MULTIPLEUSE, &dwRegistration);
 
  // wait on an event to stop
  WaitForSingleObject(hEvent, INFINITE);
 
  // revoke and release the class object
  CoRevokeClassObject(dwRegistration);
  ulRef = pCF->Release();
 
  // Tell OLE we are going away.
  CoUninitialize();
 
  return(0); }
 
  extern CLSID CLSID_CHello;
  extern UUID LIBID_CHelloLib;
 
  CLSID CLSID_CHello = { /* 2573F891-CFEE-101A-9A9F-00AA00342820 */
      0x2573F891,
      0xCFEE,
      0x101A,
      { 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 }
  };
 
  UUID LIBID_CHelloLib = { /* 2573F890-CFEE-101A-9A9F-00AA00342820 */
      0x2573F890,
      0xCFEE,
      0x101A,
      { 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 }
  };
 
  #include <windows.h>
  #include <ole2.h>
  #include <stdlib.h>
  #include <string.h>
  #include <stdio.h>
  #include "pshlo.h"
  #include "shlo.hxx"
  #include "clsid.h"
 
  int _cdecl main(
  int argc,
  char * argv[]
  ) {
  HRESULT  hRslt;
  IHello        *pHello;
  ULONG  ulCnt;
  IMoniker * pmk;
  WCHAR  wcsT[_MAX_PATH];
  WCHAR  wcsPath[2 * _MAX_PATH];
 
  // get object path
  wcsPath[0] = '\0';
  wcsT[0] = '\0';
  if( argc > 1) {
      mbstowcs(wcsPath, argv[1], strlen(argv[1]) + 1);
      wcsupr(wcsPath);
      }
  else {
      fprintf(stderr, "Object path must be specified\n");
      return(1);
      }
 
  // get print string
  if(argc > 2)
      mbstowcs(wcsT, argv[2], strlen(argv[2]) + 1);
  else
      wcscpy(wcsT, L"Hello World");
 
  printf("Linking to object %ws\n", wcsPath);
  printf("Text String %ws\n", wcsT);
 
  // Initialize the OLE libraries
  hRslt = CoInitializeEx(NULL, COINIT_MULTITHREADED);
 
  if(SUCCEEDED(hRslt)) {
 
 
      hRslt = CreateFileMoniker(wcsPath, &pmk);
      if(SUCCEEDED(hRslt))
   hRslt = BindMoniker(pmk, 0, IID_IHello, (void **)&pHello);
 
      if(SUCCEEDED(hRslt)) {
 
   // print a string out
   pHello->PrintSz(wcsT);
 
   Sleep(2000);
   ulCnt = pHello->Release();
   }
      else
   printf("Failure to connect, status: %lx", hRslt);
 
      // Tell OLE we are going away.
      CoUninitialize();
      }
 
  return(0);
  }

Apprentice Hacker

  #!/usr/local/bin/perl
  $msg="Hello, world.\n";
  if ($#ARGV >= 0) {
    while(defined($arg=shift(@ARGV))) {
      $outfilename = $arg;
      open(FILE, ">" . $outfilename) || die "Can't write $arg: $!\n";
      print (FILE $msg);
      close(FILE) || die "Can't close $arg: $!\n";
    }
  } else {
    print ($msg);
  }
  1;

Experienced Hacker

  #include <stdio.h>
  #define S "Hello, World\n"
  main(){exit(printf(S) == strlen(S) ? 0 : 1);}

Seasoned Hacker

  % cc -o a.out ~/src/misc/hw/hw.c
  % a.out

Guru Hacker

  % echo "Hello, world."

New Manager

  10 PRINT "HELLO WORLD"
  20 END

Middle Manager

  mail -s "Hello, world." bob@b12
  Bob, could you please write me a program that prints "Hello, world."?
  I need it by tomorrow.
  ^D

Senior Manager

  % zmail jim
  I need a "Hello, world." program by this afternoon.

Chief Executive

  % letter
  letter: Command not found.
  % mail
  To: ^X ^F ^C
  % help mail
  help: Command not found.
  % damn!
  !: Event unrecognized
  % logout


*Taken from:
http://www.ariel.com.au/jokes/The_Evolution_of_a_Programmer.html