ConceptShare API - Ready to Roll.

{ April 10th, 2008 }

I guess there isn’t much sense in leading into this article with elaborate lead up to a big announcement, as my title has thrown off the covers. We are excited to announce that our full API is being released to all those who have been patiently waiting on it.

ConceptShare API link 

http://api.conceptshare.com/API/API_V2.asmx

The release of the ConceptShare API signals a new era in our company history. We want to enable our clients large and small to leverage our platform to further improve their projects. The API will allow users to customize the ConceptShare experience for their organizations, teams and clients. 

Implementation

An early API implementations include automated workspace generation from a web form. Our client wanted to create an automated way to get their customers to submit projects via the website. We worked with them using the API to build this functionality. The system allowed customers to setup new project spaces from a public web form on the corporate website. Customers submit a project brief via web-form and upload associated project files. The system automatically creates a new workspace for the customer project. Information from the project brief is presented as the first concept and associated files are saved into the workspace. The system will then bring the proper people into the project space and notify them. 

This system reduced: time spent getting projects setup, missed opportunities and communication problems throughout the project. This resulted in increased project capacity, happier customers, reduced time between design iterations, and over all better project flow.      

Support 

We are here to work with you and support your development and integration projects. We will be providing support for the API via our webforums as well as direct support at our (support at conceptshare dot com) email address. 

I look forward to hearing about the ways that people would like to work with this. A big thanks to our faithful users who have supported ConceptShare since our inception. We appreciate all the people we have talked to about this, we have listened to what you wanted and put it in the very comprehensive API. Thank you for the support that you continue to give to us as we grow.

If you have a question call us. If you have a suggestion tell us. If you want to talk about how this can help your organization call me. 

Show us what you can do!

Cheers 

Scott 

 

If you enjoyed this post, make sure you subscribe to our web feed!

Posted in ConceptShare, Development, Innovation, Tools ~ 7 Comments
Written by Scott

SQL Server Aggregates and Paging

{ January 17th, 2008 }

There are two features that I have always yearned for in SQL Server: quick and easy paging, and string concatenation to be used as an aggregate function. For the life of me I could never figure out why these features never made it into SQL Server versions. I’ve been using SQL Server since version 7 and with each new version I was hoping it would be available in the subsequent release.

To this date there still is not function to aggregate a string when using a group by clause and no “easy” way to page. There are workarounds available but none that are as straight forward as MySQL’s LIMIT clause. As for string concatenation with SQL Server 2005, we can create custom aggregates so we can finally roll our own. I created a quick class (StringConcat.cs) you can embed in a DLL and load it into SQL Server’s CLR. To use the aggregate in SQL Server, you’ll need to load it and assign it first. Here is a good article quickly explaining how to create and deploy aggregates.

If you enjoyed this post, make sure you subscribe to our web feed!

Posted in Development ~ No Comments
Written by Matt Richer

When it comes to some of our package features in ConceptShare we found it much easier to use a flag enumeration to test if a particular package had a given feature enabled such as SSL, custom branding, etc.

Flag enumerations behave very similar to a standard enumeration just that it allows usage of bitwise operations to “test” if a particular value is selected. Flag enumerations basically work off of the powers of 2. Below is a sample enumeration (C#.NET):


[System.Flags()]
public enum PFlags
{
    None = 0,
    SSL = 1,
    CustomBranding = 2,
    PaidAccount = 4,
    All = SSL | CustomBranding | PaidAccount
}

So you have the enumeration, let’s write a few little wrapper classes to make it easy to “Set” flags, and also “Check” flags.


public Boolean IsFlagSet(PFlags flags, PFlags flagItem)
{
    return ((flags & flagItem) == flagItem);
}
public PFlags SetFlagOn(PFlags flags, PFlags flagItem)
{
    return (flags | flagItem);
}
public PFlags SetFlagOff(PFlags flags, PFlags flagItem)
{
    if ((flags & flagItem) == flagItem)
        flags ^= flagItem;
    return flags;
}

That is all there is too it. You don’t have to use the helper functions and you can write the code inline but I find this easier as I sometimes forget which bit-wise operator I should be using. I won’t go into the theory of how flag enumerations work as there are many comprehensive articles available online. Below are some samples on how to use the functions.


// Enumeration with SSL & Custom Branding Set;
PFlags f = PFlags.SSL | PFlags.CustomBranding;
// Checks if SSL is enabled (returns true);
Boolean result = IsFlagSet(f, PFlags.SSL);
// Sets Custom Branding Off
f = SetFlagOff(f, PFlags.CustomBranding);

If you enjoyed this post, make sure you subscribe to our web feed!

Posted in Development ~ No Comments
Written by Matt Richer

Flash Tips: The File Reference Class

{ December 23rd, 2007 }

Today is the second in a series of Flash tips, Thursaday I covered how to copy an array. Today’s tip is about the File Reference class.

When I was building the prototype for ConceptShare, I came across this class and was very excited to try it out as we needed a solution for uploading concepts directly from within the workspace. I went to google and began to search for examples of the code in action (my preferred method for discovering new techniques). I found two, both using basically the same code. I created my examples and started testing. Basic uploads worked like a charm, but when trying to integrate it into ConceptShare I was having no luck.

Hours of frustration later I figured out that when you call the upload function to send a file to the server, no cookies are transmitted along with the file. This was a problem because ConceptShare uses cookies for authenticating and identifying the user. In my case simply appending the required information as a querystring of the url and modifying the code to check the querystring instead of cookies for the necessary variables solved this problem.

Two things worth mentioning are:

AS 2.0 doesn’t allow for variables to be sent along with the file upload, but has since been added to AS 3.0.

FileReference.type property returns ‘.jpg’ on a Mac where as ‘jpg’ is returned on windows machines. This is because macs return a four-character file type.

If you enjoyed this post, make sure you subscribe to our web feed!

Posted in Development ~ No Comments
Written by Chris D'Aoust

Flash Tips: How to Copy an Array

{ December 20th, 2007 }

I’ve been using Adobe Flash for many years to develop engaging user experiences, for both the web and desktop. During this time I’ve had my share of problems. Flash has always had a weak help file, specifically the ability to search the help file. This has made it much harder to find solutions to problems, unless you know the specific terminology to search for beforehand. Today’s post is the first in a series of Flash tips, quick guides to help you develop in Flash.

How to Copy an Array

When adding the ability to drag and drop cells within ConceptShare version 2, I decided the best method to store cell placement was to use multidimensional array. This worked perfectly at first, but mysterious problems started appearing when toggling full screen, or changing between layouts. When first encountering this error I didn’t think for a moment the issue was copying the array, and spent days on end looking for an answer. The problem did turn out to be copying the array for future use. Normally you would do something like this:

array1 = [a,b,c];
array2=array1;

You would assume that array2 is now a copy of array1 and can be edited independently. Well, that was not the case. array2 is a reference of array1. So any changes made to array2 are also made on array1. In order to get around this you must use the slice function:

array2 =array1.slice();

This only works for single dimension arrays, multi-dimension arrays require a slice to be called on each array contained within. So that’s how to copy an array in Flash.

Next time on Flash tips, the file reference class.

If you enjoyed this post, make sure you subscribe to our web feed!

Posted in Development ~ 2 Comments
Written by Chris D'Aoust

IIS Virtual Folders and Network Storage

{ December 20th, 2007 }

We recently upgraded our infrastructure to include two load-balanced web servers to run the ConceptShare application; and another server for file storage of concepts, user images, and account images. After experimenting with various combinations of permissions and configuration options, I looked back and saw that it wasn’t a straightforward process. Here is a summary of what is required, so that you can get started quickly.

First, you should know a little about how the .NET framework runs on IIS. In our case, we are running IIS6, which means it is running under the “Network Service” identity by default. This runs in its own environment with its own desktop and user settings. Mapped drives are held at the user level, so direct mapping of virtual drives to mapped drives is out.

For simplicity’s sake, we decided to use a new account to give some separation and prevent any excess permissions being granted. You could technically use a “shotgun” approach: set the Administrator password on all servers to the same and use it to configure your IIS. But that is a huge potential security issue and we take security very seriously. Here is a basically run down on what you need to do:

    1. Create a limited permissions account with the same username and password across all servers. Suppose we call this account “IIS_ASP_NETWORK”.
    2. To be useable as a process in IIS the account requires setting a few security permissions. But it’s much easier just to add your newly created account to the IIS_WPG security group, which will give it all the appropriate rights.
    3. On the storage server give full permissions to the folders you are going to expose as virtual folders in IIS. We do both writing and reading, if you are just serving content you can go with just read.
    4. On each web server create a new application pool and set the process identity to your newly created account. This will make .NET run under that account, unless impersonation is used.
    5. Set the website to use the new application pool that you just configured.
    6. Create your virtual directory using the full UNC path to the folder in question (i.e. \\SERVERNAME\SHARENAME). Be sure to provide the same credentials that you use for the new account.

That should have you up and running with a virtual directory hosted on a network resource. We never tried to run the entire site as a network resource, only the images, so I can’t comment on the stability of running an entire site off a network resource. If you need to do some debugging you can throw up an ASPX page with Trace=”True” in the page tag and it will let you know which process it is running under. Also, ProcessMonitor from SysInternals will help you diagnose any permission issues.

If you enjoyed this post, make sure you subscribe to our web feed!

Posted in Development, Technology ~ 1 Comment
Written by Matt Richer