Jump to content
SEANT

Beta Testing

Recommended Posts

BlackBox

Hey guys, sorry it's taken me so long to get back to this. It's been a grueling 60-70 hour past four weeks!

 

Too much to respond directly to each, so to hit a few bullet points from what I've read....

 

Firstly, thank you CADTutor for your willingness to facilitate. You've always been a gracious host, and fostered a pleasant, and helpful community, and for that I thank you.

 

To the comment on C3D offerings getting so few results, that is due to both the number of C3D users here (few compared to other forums), and even smaller number who develop for C3D here. The lack of response does not necessarily indicate the quality or effort that went into your offering, just that we need to attract more 'consumers' of such content.

 

Autodesk Exchange is a world unto itself. A free app shall always sell better than a paid app. That said, offering at least one free app is a simple way of demonstrating the quality of your work from which others may then justify the purchase of your paid work. It's good to offer both, and up until now AE has been straight forward; you submit your work, they review and then publish. Each version release you're encouraged to submit an update.

 

What's been missing until recently is the publisher's ability to quickly change price, modify content (they used to butcher the description formatting, URLs, etc; I still have some that I need to correct), which has changed. Now they're even introducing the ability to dole out concessions, etc. which is great.

 

What happens if Autodesk decides to add a similar new feature that you've been offering same already (formally through AE, if not informally online)? This is a loaded topic, which I am not fully able to discuss at this time due to current beta NDA. If you're participating in beta, then you already know my thoughts on this.

 

Now, I'm not privy to Sean's PM, but if like to think I have a good idea based on his comments thus far. I too would like to participate where I can, be it posting my 'please try this' new apps or app updates, or perhaps writing some content for those who might be interested in a first time offering, and don't know how to get started with .NET API, etc (Lee's already got LISP cornered! Haha)... Point is, I think there's potential here, and it will lend to the free market of ideas.

 

 

 

Now, if you'll excuse me gents, the captivating Mrs. BlackBox looks like she could use some company sunbathing on our patio. *tips hat*

 

Cheers

Share this post


Link to post
Share on other sites
SEANT

Hey BB, I hoped you would become a participant. The Autodesk Exchange is still fairly young, all battles stories from the trenches will be useful information for those of us ready to join the fray.

Share this post


Link to post
Share on other sites
BlackBox
Hey BB, I hoped you would become a participant. The Autodesk Exchange is still fairly young, all battles stories from the trenches will be useful information for those of us ready to join the fray.

 

That is kind of you to say, Sean.

 

Autodesk Exchange has been good to me, but is not without its troubles too. I'll certainly offer what I can by way of my personal experiences with publishing apps, as well as some observations made during beta once released from my NDA.

 

There's also a small contingent of useful resources, tools, and memberships that others may find interesting or otherwise of value, like ArxDbg, MgdDbg, Visual Studio versions/configuration, etc who's umbrella extends into other forums here too (particularly .NET; which is currently combined with VBA forum, and may become more confusing?).

 

Cheers

Share this post


Link to post
Share on other sites
Tyke

Thanks Sean and BB, I can't offer a lot here but it's good to see that the two best members here have decided to join in. Your thoughts meet mine precisely. Keep up the good work.

 

Ben

Share this post


Link to post
Share on other sites
BlackBox
Thanks Sean and BB, I can't offer a lot here but it's good to see that the two best members here have decided to join in. Your thoughts meet mine precisely. Keep up the good work.

 

Ben

 

Methinks it would be in poor taste for me to accept the immense compliment you have paid me (Sean is entirely deserving, of course!), so instead allow me to simply say that I would not be where I am today, without the patience, and wisdom of those kind enough to have helped me along the way.

 

[Edit] - "There are two ways of spreading light, to be the candle or the mirror that reflects it."- Edith Wharton

 

Thank you, my friend. :notworthy:

 

Cheers

Edited by BlackBox

Share this post


Link to post
Share on other sites
BIGAL

Seant just had a quick look and in the housing project there was around 90+ individual menu options doing all sorts of things, of note not general Autocad stuff.

 

The one thing that I see missing from discussions here is the theme what actual industry are you aiming at ? Do you have a list of where its at module wise and a wish list this being important for outside ideas ?

Share this post


Link to post
Share on other sites
SEANT
. . . . I can't offer a lot here . . . .

I definitely don't believe that. :)

As a young, and brand new forum, your contribution is exactly what's needed.

 

Seant just had a quick look and in the housing project there was around 90+ individual menu options doing all sorts of things, of note not general Autocad stuff.

 

The one thing that I see missing from discussions here is the theme what actual industry are you aiming at ? Do you have a list of where its at module wise and a wish list this being important for outside ideas ?

 

I'd like to see that new forum hosting all sorts of threads related to the developmental process. From idea inception, to long term licensing issues.

 

Threads could be created by users with ideas on what they'd like to see - Programmers querying users if they see value in there latest automation idea.

 

The other, more language specific forums are great places to discuss the finer details of the routine. This new forum would be more macroscopic - its quite possible that lines of code never find their way into a thread.

Share this post


Link to post
Share on other sites
BIGAL

Just threw together some ideas I have not included specific programs that are unique to a specific cad user

CIV3D
Simpler point style display method using a dialouge - BIGAL -completed
Lable individualCIV3D points as text -BIGAL - height completed
Rotation of individual CIV3D points - BIGAL - Completed
Simpler surface display method using toolbars - BIGAL - completed

Wish list CIV3D
Simpler point style editing - BIGAL - small start

General Civil design Autocad
Add 2 levels modify text - BIGAL - completed
Carpark layouts line work - BIGAL - completed
Channel flow pipe and open drain flow calculator - BIGAL -completed
Chevron lines for islands -BIGAL - completed
Convert Civilcad to better Autocad dwg style - BIGAL -complete
Cross fall lable % & 1in - BIGAL - completed
Driveway create for intersecting with kerbing - BIGAL - completed
Draw Pipe ends - BIGAL - completed 
Pram crossing for intersecting with kerbing - BIGAL - completed
Simple pit - BIGAL -completed
Text to xyz convert text to 3d point - BIGAL - completed
Vehicle check looks for intersection/scraping - BIGAL -complete 

Wish list civil design
Cross sections from excel
Long sections from excel

General Autocad 
Copy layout to another layout
Goto as implied go to a specific layout by number - BIGAL - completed
Plot layouts numerous methods - BIGAL - completed
Move title blocks to 0,0 model & layouts - BIGAL -completed
Point number bubble alpha & numeric - BIGAL - completed

Share this post


Link to post
Share on other sites
SEANT

BigAl, looks like you have a nice suite of tools there. Given those, what do you think would be the best way to interact with a potential customer base? I suppose a post, in the Civil 3D forum, listing those tools, and stating your desire to develop them further. Perhaps that post in Civil 3D & LDD would contain a link to yet another posting in the Application Beta Testing forum.

 

What part would that forum play? Obviously, nothing is written in stone. Not even written in damp clay. Maybe for a beta phase a suite is subdivided to better test every individual command.? Perhaps try to determine all the Acad versions supported. (I would be looking into that I don't have many versions of AutoCAD still loaded). Certainly it makes sense to address any issues listed by the testers. Maybe the post would poll customers for what they were willing to pay.

 

I suspect that last issue will be a tricky part. I’d love to see the Application Beta Testing forum be the central area for customer/developer and developer/developer discussions on that topic.

 

My general sense is that users (employee) will have a tough time getting the employers to put up significant cash. Could a price be set that the employee would pay themselves, to make their workday easier? Maybe some other method of generating cash for the developer? Could make for an interesting discussion.

Share this post


Link to post
Share on other sites
BIGAL

Re software development we did a beta version for a particular task it was 10 minutes versus ours 10 seconds. The stumble point was they wanted more, happy to do and then the crunch we want to work all versions we have including pirate copies as an Autocad dealer at time no way! So it stale mated. Anywayot a couple of years later cold calling potential clients the matter of this program came up and the new company had bought out the old company, they proudly boasted about an old program that saved them so much time, my answer yeah I know I wrote it and we were never paid. The lesson from this is even beta software lock it up in some way and time bomb it.

 

Another issue never trust anyone I found one of the staff here had a copy of a program, I never gave it to him one of my direct staff had forwarded something that was not meant to leave our unit, talk about 6 degrees of freedom.

Share this post


Link to post
Share on other sites
SEANT

Damn, that's sound pretty ugly. It was a good pickup on your end to equate their use of pirated software to a customer that would not honor their contracts. It would suck to have found that out after several more months of program development.

Share this post


Link to post
Share on other sites
CADTutor

Just moved this thread to the Application Beta Testing forum since it contains relevant information.

Share this post


Link to post
Share on other sites
SEANT

Thanks, David. Here is where this thread belongs. :)

Share this post


Link to post
Share on other sites
Jeff H

I wish this would pickup more traction and would be very useful.

 

 

The only thing I could think off adding would be to testing add-in loader, remover etc..... type tool that loaded first then copied or deleted whatever files needed. User had UI to select to update, remove, etc...

Share this post


Link to post
Share on other sites
SEANT
I wish this would pickup more traction and would be very useful.

 

 

The only thing I could think off adding would be to testing add-in loader, remover etc..... type tool that loaded first then copied or deleted whatever files needed. User had UI to select to update, remove, etc...

That’s interesting. A ‘Version Coordination’ program for long term beta development. Am I reading that correctly?

 

That deserves some though. Substituting Dlls without the need for uninstall/reinstall would make the process easier on the tester. If the process could smoothed out and simplified, the general angst associated with using non-polished software would be diminished.

Share this post


Link to post
Share on other sites
Jeff H

Here is something that I use at office and needs some additional functionality added but is not what was explained above but somewhat in same neighborhood.

 

Quick summary is this goes plug-in folder and reads .loadconfig which tells it what directories to go and look for a .loaddata file. The .loadata file tells it what files to copy to its folder or overwrite if newer, then netload which dll's.

 

So gives you chance to update files before netloaded and could be refactored to go online on exit to get updates, and delete from plug-in and update folder if user decides to remove.

 

 

The .loadconfig file tells the loader where the .loaddata

 

 

loaddata file

<?xml version="1.0" encoding="utf-8" ?>
<AddInLoaderData CopySubDirectories ="false" ExtensionFilter =".dll|.cuix|.mnr">
 <LoadFiles>
    <LoadFile>HpadCad.App.dll</LoadFile>
 <LoadFile>HpadCad.SSM.dll</LoadFile>
 </LoadFiles>
</AddInLoaderData>

 

The xml file above basically tells it not to copy subdirectories, what extension a file must have to copy, and which files to netload.

 

 

   public class Loader
   {
       static readonly string loadDataFileName = "HpadCadAddInLoaderData.loadData";
       static readonly string loadConfigFileName = "HpadCadAddinLoader.loadconfig";
       private Dictionary<FileSystemInfo, SystemException> exceps = new Dictionary<FileSystemInfo, SystemException>();
       private readonly Editor _ed;

       private readonly DirectoryInfo _netLoaderDirectoryPath;

       internal DirectoryInfo NetLoaderDirectoryPath
       {
           get
           {
               return _netLoaderDirectoryPath;
           }
       }
       public Loader()
       {
          
           _netLoaderDirectoryPath = new DirectoryInfo(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
       }

       public void Load()
       {

           try
           {

               Copy();

           }
           finally
           {
               foreach (var systemException in exceps)
               {
                   //Ed.WriteMessage("\n{0} had {1]", systemException.Key.FullName, systemException.Value.Message);
               }
           }

       }

       private void Copy()
       {
           
           FileInfo loadconfigFile = GetFilePathFromAddinLoaderDirectory(loadConfigFileName);
           if (!loadconfigFile.Exists)
           {
               return;
           }

           var xconfigDoc = XElement.Load(loadconfigFile.FullName);
           var updateDirectoryAttribute = xconfigDoc.Attribute("UpdateDirectory");
           if (updateDirectoryAttribute == null)
           {
               return;
           }
           var updateDirectory = ExpandDirectoryPath(updateDirectoryAttribute.Value);
           if (!updateDirectory.Exists)
           {
               return;
               
           }

           
           FileInfo updateDataFile = CombineFileNameAndDirectoryPath(loadDataFileName, updateDirectory);
           if (!updateDataFile.Exists)
           {
               return;
           }

           var xDataDoc = XElement.Load(updateDataFile.FullName);

           var copySubsAttribute = xDataDoc.Attribute("CopySubDirectories");
           bool copySubs = false;
           if (copySubsAttribute != null)
           {
               copySubs = Convert.ToBoolean(copySubsAttribute.Value);
           }

           var extensionFiltersAttribute = xDataDoc.Attribute("ExtensionFilter");
           var extensionFilters = new HashSet<string>();
           if (extensionFiltersAttribute != null)
           {
               var filter = extensionFiltersAttribute.Value;
               if (!String.IsNullOrWhiteSpace(filter))
               {
                   extensionFilters = new HashSet<string>(filter.Split('|'), StringComparer.OrdinalIgnoreCase);
               }
           }

           exceps = CopyFiles(updateDirectory, NetLoaderDirectoryPath, extensionFilters, copySubs);
           foreach (var loadFile in xDataDoc.Descendants("LoadFile"))
           {
               var assemblyFI = GetFilePathFromAddinLoaderDirectory(loadFile.Value);
               Assembly.LoadFrom(assemblyFI.FullName);
           }
       }

       private Dictionary<FileSystemInfo, SystemException> CopyFiles(DirectoryInfo sourceDirectory, DirectoryInfo destinationDirectory, ICollection<string> extensionFilters, bool copySubDirectories)
       {
           var exceptions = new Dictionary<FileSystemInfo, SystemException>();

           return CopyFiles(sourceDirectory, destinationDirectory, extensionFilters, copySubDirectories, exceptions);
       }
       private Dictionary<FileSystemInfo, SystemException> CopyFiles(DirectoryInfo sourceDirectory, DirectoryInfo destinationDirectory, ICollection<string> extensionFilters, bool copySubDirectories, Dictionary<FileSystemInfo, SystemException> exceptions)
       {
           
           if (!destinationDirectory.Exists)
           {
               try
               {
                   destinationDirectory.Create();
               }
               catch (IOException ex)
               {
                   exceptions.Add(destinationDirectory, ex);
               }
               catch (SecurityException se)
               {
                   exceptions.Add(destinationDirectory, se);
               }
           }
           foreach (var fi in sourceDirectory.GetFilteredFiles(extensionFilters))
           {

               FileInfo newFile = new FileInfo(Path.Combine(destinationDirectory.FullName, fi.Name));


               if (!newFile.Exists)
               {
                   try
                   {
                       fi.CopyTo(newFile.FullName);
                   }
                   catch (IOException ex)
                   {
                       exceptions.Add(newFile, ex);
                   }
                   catch (SecurityException se)
                   {
                       exceptions.Add(newFile, se);
                   }
               }
               else if (fi.LastWriteTimeUtc > newFile.LastWriteTimeUtc)
               {
                   try
                   {
                       fi.CopyTo(newFile.FullName, true);
                   }
                   catch (IOException ex)
                   {
                       exceptions.Add(newFile, ex);
                   }
                   catch (SecurityException se)
                   {
                       exceptions.Add(newFile, se);
                   }
               }


           }

           if (copySubDirectories)
           {
               foreach (var subDi in sourceDirectory.EnumerateDirectories())
               {
                   var tempDI = new DirectoryInfo(Path.Combine(destinationDirectory.FullName, subDi.Name));
                   CopyFiles(subDi, tempDI, extensionFilters, true, exceptions);
               }
           }
           return exceptions;
       }
       private DirectoryInfo ExpandDirectoryPath(string unExpandedPath)
       {
           return new DirectoryInfo(Environment.ExpandEnvironmentVariables(unExpandedPath));
       }

       private FileInfo GetFilePathFromAddinLoaderDirectory(string fileName)
       {
           return new FileInfo(Path.Combine(NetLoaderDirectoryPath.FullName, fileName));
       }

       private FileInfo CombineFileNameAndDirectoryPath(string fileName, string directoryName)
       {
           return new FileInfo(Path.Combine(directoryName, fileName));
       }

       private FileInfo CombineFileNameAndDirectoryPath(string fileName, DirectoryInfo directoryInfo)
       {
           return CombineFileNameAndDirectoryPath(fileName, directoryInfo.FullName);
       }


   }

 

Oh yeah will need this one

   public static class DirectoryInfoExtensions
   {
       internal static IEnumerable<FileInfo> GetFilteredFiles(this DirectoryInfo sourceDirectory,
           ICollection<string> extensions)
       {
           if (extensions.Count == 0)
           {
               return sourceDirectory.EnumerateFiles();
           }
           return sourceDirectory.EnumerateFiles().Where(fi => extensions.Contains(fi.Extension));
       }
   }

 

What this allows me to do is to add a build to the solution that output folder is on the network and next time user starts autocad they will get latest build unless they have another instance running then will get it when that start next with no other instances locking files

Share this post


Link to post
Share on other sites
SEANT

Thanks Jeff. I'll be sure to look into everything you posted above. A nice, natural progression, though not something I had previously considered.

Share this post


Link to post
Share on other sites
BlackBox

Neat idea, Jeff - As usual. :thumbsup:

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×