[{"content":"To make it less confusing when working with multiple versions of ObjectARX, I recommend removing the ObjectARX SDK folders from your global VC settings, and adding them instead to the project settings for each individual project. Doing so gives you more local control over the project, and makes it less confusing when you need different build configurations to use different versions of ObjectARX in the same project.\nI highly recommend setting up system environment variables to point to the locations of various versions of the ObjectARX SDK, as well as different versions of the MFC and C/C++ runtime libraries. This allows your build settings to specify the locations of include and library files using environment variables, thus making your projects much more portable across platforms and directory structures.\nFor example, I have every version of the ObjectARX SDK since ARX 1.0 installed on my system, and I have an environment variable pointing to the root of every SDK version, as follows:\nVariable Value Description ARX1 E:\\SDK\\ARX1 ARX 1.0 SDK (R13) ARX2 E:\\SDK\\ARX202 ObjectARX 2.02 SDK (R14) ARX2000 E:\\SDK\\ARX2000 ObjectARX 2000 SDK ARX2000i E:\\SDK\\ARX2000i ObjectARX 2000i SDK ARX2002 E:\\SDK\\ARX2002 ObjectARX 2002 SDK ARX2004 E:\\SDK\\ARX2004 ObjectARX 2004 SDK ARX2005 E:\\SDK\\ARX2005 ObjectARX 2005 SDK ARX2006 E:\\SDK\\ARX2006 ObjectARX 2006 SDK ARX2007 E:\\SDK\\ARX2007 ObjectARX 2007 SDK ARX2008#32 E:\\SDK\\ARX2008.32 ObjectARX 2008 (x86) SDK ARX2008#64 E:\\SDK\\ARX2008.64 ObjectARX 2008 (x64) SDK ARX2009 E:\\SDK\\ARX2009 ObjectARX 2009 SDK ARX2010 E:\\SDK\\ARX2010 ObjectARX 2010 SDK ARX2013 E:\\SDK\\ARX2013 ObjectARX 2013 SDK ARX2015 E:\\SDK\\ARX2015 ObjectARX 2015 SDK The same thing should be done with other SDK code, including common tool libraries that are designed and maintained internally. In addition to the ObjectARX SDKs, I also have environment variables pointing to each version of Visual C/C++. Those are named MSVC2, MSVC4, MSVC42, MSVC5, MSVC6, MSVC7, MSVC71, MSVC8, MSVC9, MSVC10, and MSVC11, and each environment variable points to the root of the library (i.e. the VC98 folder for VC6, the VC7 folder for VC7, and so on).\nOnce these environment variables are set up, you can refer to specific folders for specific SDKs in the VC project settings by using the notation $(MSVC6)\\Include (to point the VC6 C/C++ runtime include files) or $(MSVC42)\\MFC\\Lib (for VC4.2 MFC library files). The goal is to completely eliminate hardcoded paths from your project settings, thus making the projects portable. In addition to making the projects portable, this approach makes dependent SDKs portable as well. Moving an SDK to a different location or installing an updated SDK in a new location becomes as simple as changing an environment variable and rebuilding the project.\nAssuming environment variables have been set to point to each version of VC, the following strings specify include and library paths for each version of VC:\nVersion Include Path Library Path VC 4.2 $(MSVC42)\\Include;$(MSVC42)\\MFC\\Include $(MSVC42)\\Lib;$(MSVC42)\\MFC\\Lib VC 6 $(MSVC6)\\Include;$(MSVC6)\\MFC\\Include;$(MSVC6)\\ATL\\Include $(MSVC6)\\Lib;$(MSVC6)\\MFC\\Lib;$(MSVC6)\\ATL\\Lib VC 7 $(MSVC7)\\Include;$(MSVC7)\\ATLMFC\\Include $(MSVC7)\\Lib;$(MSVC7)\\ATLMFC\\Lib VC 7.1 $(MSVC71)\\Include;$(MSVC71)\\ATLMFC\\Include $(MSVC71)\\Lib;$(MSVC71)\\ATLMFC\\Lib VC 8 $(MSVC8)\\Include;$(MSVC8)\\ATLMFC\\Include x86: $(MSVC8)\\Lib;$(MSVC8)\\ATLMFC\\Lib x64: $(MSVC8)\\Lib\\AMD64;$(MSVC8)\\ATLMFC\\Lib\\AMD64 VC 9 $(MSVC9)\\Include;$(MSVC9)\\ATLMFC\\Include x86: $(MSVC9)\\Lib;$(MSVC9)\\ATLMFC\\Lib x64: $(MSVC9)\\Lib\\AMD64;$(MSVC9)\\ATLMFC\\Lib\\AMD64 VC 10 $(MSVC10)\\Include;$(MSVC10)\\ATLMFC\\Include x86: $(MSVC10)\\Lib;$(MSVC10)\\ATLMFC\\Lib x64: $(MSVC10)\\Lib\\AMD64;$(MSVC10)\\ATLMFC\\Lib\\AMD64 VC 11 $(MSVC11)\\Include;$(MSVC11)\\ATLMFC\\Include x86: $(MSVC11\\Lib;$(MSVC11)\\ATLMFC\\Lib x64: $(MSVC11)\\Lib\\AMD64;$(MSVC11)\\ATLMFC\\Lib\\AMD64 ","permalink":"https://www.manusoft.com/develop/objectarx/msvc-environment/","summary":"\u003cp\u003eTo make it less confusing when working with multiple versions of ObjectARX, I recommend removing the ObjectARX SDK folders from your global VC settings, and adding them instead to the project settings for each individual project. Doing so gives you more local control over the project, and makes it less confusing when you need different build configurations to use different versions of ObjectARX in the same project.\u003c/p\u003e","title":"Microsoft Visual C/C++ Environment"},{"content":"","permalink":"https://www.manusoft.com/resources/freebies/misc/","summary":"","title":"Miscellaneous"},{"content":"Summary QuikPik is a suite of user interface enhancements designed to make the AutoCAD interface more useful and productive. QuikPik adds 19 separate features including resizable dialogs, faster mouse input (no more missed clicks!), locking toolbars, enhanced right-click input, taller and wider dropdowns, and many more common user requests. QuikPik supports the following AutoCAD platforms:\nAutoCAD R14 - R2027\nQuikPik is free! Download and try it for yourself!\nFeatures Each QuikPik feature may be individually enabled or disabled at the user\u0026rsquo;s discretion. If you would like a more detailed description of what each feature does, please download QuikPik now and browse the Windows help file included with the download. Here is a complete list of QuikPik features (note that not all features are available in all versions of AutoCAD):\nToolbar locking Command line locking Floating window locking Quick toolbar buttons Quick menus Quick dialog buttons Quick status bar buttons Full path in title bar Double-click translation Enhanced right-click Extended right-click Current file autoselect Extended height combos Wide toolbar dropdowns AutoCAD dialogs resizable File dialogs resizable Remember file list state Remember \u0026lsquo;read-only\u0026rsquo; state Classic title bar User Testimonials \u0026ldquo;In 24 years of continuous AutoCAD use, QuikPik remains the BEST 3rd party add-on ever.\u0026rdquo; \u0026ndash; Barry Thomas\n\u0026ldquo;Excuse the language but - bloody marvelous!\u0026rdquo; \u0026ndash; Mike Vincent\n\u0026ldquo;QuikPik is GREAT!! This is just what AutoCAD needed.\u0026rdquo; \u0026ndash; Terry Hickman\n\u0026ldquo;You are nothing short of a God!!!!\u0026rdquo; \u0026ndash; Brenda Manges\n\u0026ldquo;My colleagues tried to kiss me when I showed them the features\u0026hellip;\u0026rdquo; \u0026ndash; Martin Groen\n\u0026ldquo;On a scale of 1-10 it gets a 20\u0026hellip;.Way to go!!!\u0026rdquo; \u0026ndash; Coe Bryan\n\u0026ldquo;You seem to have an amazing ability to add features that are truly useful.\u0026rdquo; \u0026ndash; Kent Keller\nThis is just a small sample of the feedback we receive about QuikPik!\nSend us your thoughts: feedback@manusoft.com\nDownload Download QuikPik: QuikPik6.msi (4.0 MB)\nQuikPik is free to use for any purpose subject to the terms of the license agreement.\n","permalink":"https://www.manusoft.com/resources/apps/quikpik/","summary":"\u003ch3 id=\"summary\"\u003eSummary\u003c/h3\u003e\n\u003cp\u003eQuikPik is a suite of user interface enhancements designed to make the AutoCAD interface more useful and productive. QuikPik adds \u003ca href=\"#features\"\u003e19 separate features\u003c/a\u003e including resizable dialogs, faster mouse input (no more missed clicks!), locking toolbars, enhanced right-click input, taller and wider dropdowns, and many more common user requests. QuikPik supports the following AutoCAD platforms:\u003c/p\u003e","title":"QuikPik"},{"content":"Summary RoboCache™ is a command line tool for managing the offline files cache feature (http://windows.microsoft.com/en-US/windows7/Working-with-network-files-when-you-are-offline) on Windows Vista®, Windows® 7 and Windows® 8 clients. The utility is designed to give system administrators complete control over offline files cache operations, including the ability to operate on entire directory trees quickly and efficiently by using wildcard filtering to ignore unwanted files and folders.\nRoboCache is free! Download and try it for yourself!\nFeatures The RoboCache command line syntax is modeled after the ROBOCOPY command that is installed as part of the Windows operating system. RoboCache is designed for use on client computers to create, manage, and manually sync offline file relationships either by batch script or manual command line use. Virtually all exposed features and settings of the offline files cache are available via command line with RoboCache, including many that are not exposed in the Windows UI. Typical usage includes pinning and unpinning files in a directory hierarchy while filtering unwanted files and directories from the operation; or checking and logging the status of previously pinned files. Note that RoboCache is not equivalent to the CSCCMD utility available from Microsoft for older versions of Windows, although it does provide equivalent functionality in some cases.\nThere is no separate documentation, however ROBOCACHE /? displays syntax and command options. Following is a list of supported operations:\ninfo - display status info about the target(s) pin - assure offline availability unpin - unpin the target(s) sync - synchronize cached files with remote files rename - rename cached item (requires reboot) delete - delete cached item suspend - suspend the target folders (ignores files) unsuspend - unsuspend the target folders (ignores files) online - transition to online state offline - transition to offline state enable - enable offline files cache (ignores target) disable - disable offline files cache (ignores target) encrypt - encrypts offline files cache (ignores target) decrypt - decrypts offline files cache (ignores target) Download Download RoboCache: RoboCache1.msi (556k)\nRoboCache is free to use for any purpose subject to the terms of the license agreement.\n","permalink":"https://www.manusoft.com/tools/robocache/","summary":"\u003ch3 id=\"summary\"\u003eSummary\u003c/h3\u003e\n\u003cp\u003eRoboCache™ is a command line tool for managing the offline files cache feature (\u003ca href=\"http://windows.microsoft.com/en-US/windows7/Working-with-network-files-when-you-are-offline\"\u003ehttp://windows.microsoft.com/en-US/windows7/Working-with-network-files-when-you-are-offline\u003c/a\u003e) on Windows Vista®, Windows® 7 and Windows® 8 clients. The utility is designed to give system administrators complete control over offline files cache operations, including the ability to operate on entire directory trees quickly and efficiently by using wildcard filtering to ignore unwanted files and folders.\u003c/p\u003e","title":"RoboCache"},{"content":"Some of these commands are present in the AutoCAD command table, but are disabled, and therefore are not recognized as commands. They are included for the sake of completeness.\nCommand Introduced Notes *SCROLL R12 Resets the \"pan\" scroll bars. .ACADSTATUS pre R12 Creates ACAD.SLG in same directory as ACAD.EXE. The file contains an internal status log. [You must precede this command with an extra period to use it at the command line.] .ACLTSTATUS R13 Same as ACADSTATUS, except for AutoCAD LT. [You must precede this command with an extra period to use it at the command line.] .SYSSTATUS R14 Does nothing. -OLDMTEXT R14 Runs the R13 -MTEXT command. ADIDUMP R13 Does nothing. AXIS pre R12 It just tells you it's a discontinued command (remember AXISMODE?) CONTENT R14 Does nothing. Could it be a prelude for the 'Content Explorer'? CONVERTPOLY R14 Convert both ways between old style polylines and the new lightweight polylines. This is a very useful one! DLGCOLOR* R13 Controls dialog colors in R13/DOS, does nothing in other versions.\n*This command is documented in R13, but not in R14. DRGINSERT R14 Does nothing. DUMPMEMALLOC R13 Provides internal memory information. DVBIN R14 Does nothing. Probably intended for importing VBA macro. DVBOUT R14 Does nothing. Probably intended for exporting VBA macro. ENDSV R12 An interesting variant of END, with a warning about being unable to save vector files(?). FILEOPEN R12 A command-line only variant of OPEN. In R13, this command is issued when selecting a file from the MRU file list in the 'File' menu. KABOOM! R13 Does nothing. Looks fun, though! KRISTI R13 Creates cat_acad.h and cat_acad.rc in the ACAD.EXE directory. These files contain resource definitions for all loaded toolbar buttons. They don't look very useful to me, but I'll bet Kristi needed them. MAKEBLK R14 Does nothing. OFFLINE R13 Warns that it is \"not converted to AcDb yet\", then does nothing. OLDMTEXT R14 Runs the R13 MTEXT command. OLDMTPROP R14 Runs the R13 MTPROP command. PAINTER R13 Does nothing in R13, runs _MATCHPROP in R14. PRPLOT pre R12 Tells you that it's a discontinued command (remember \"printer plots\"?) RENDENV R14 Does nothing. SETENV R13 Does nothing. UNLOCK R13 Does nothing. VIEWTOOLBAR R13 Does nothing. XDRGINSERT R14 Does nothing. Additional Information:\nHere's an intriguing command which crashes AutoCAD R13:\nACRX_RESIDENT_COMMAND__DEFINE_MAX_BUFFER_SIZE_AS_64_CHARS_MAX_XX ","permalink":"https://www.manusoft.com/develop/reference/commands/","summary":"\u003cp\u003eSome of these commands are present in the AutoCAD command table, but are disabled, and therefore are not recognized as commands. They are included for the sake of completeness.\u003c/p\u003e\n\u003cdiv\u003e\n\u003ctable border=\"1\" cellpadding=\"2\"\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth align=\"left\" valign=\"top\"\u003eCommand \u003c/th\u003e\u003cth align=\"left\" valign=\"top\"\u003eIntroduced \u003c/th\u003e\u003cth align=\"left\" valign=\"top\"\u003eNotes \u003c/th\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003e*SCROLL\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR12\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eResets the \"pan\" scroll bars.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003e.ACADSTATUS\u003c/td\u003e\n\u003ctd valign=\"top\"\u003epre R12\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eCreates ACAD.SLG in same directory as ACAD.EXE. The file contains an internal status log. [You must precede this command with an extra period to use it at the command line.]\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003e.ACLTSTATUS\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR13\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eSame as ACADSTATUS, except for AutoCAD LT. [You must precede this command with an extra period to use it at the command line.]\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003e.SYSSTATUS\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR14\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eDoes nothing.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003e-OLDMTEXT\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR14\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eRuns the R13 -MTEXT command.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eADIDUMP\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR13\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eDoes nothing.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eAXIS\u003c/td\u003e\n\u003ctd valign=\"top\"\u003epre R12\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIt just tells you it's a discontinued command (remember AXISMODE?)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eCONTENT\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR14\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eDoes nothing. Could it be a prelude for the 'Content Explorer'?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eCONVERTPOLY\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR14\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eConvert both ways between old style polylines and the new lightweight polylines. This is a very useful one!\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eDLGCOLOR*\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR13\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eControls dialog colors in R13/DOS, does nothing in other versions.\u003cbr /\u003e*This command is documented in R13, but not in R14.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eDRGINSERT\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR14\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eDoes nothing.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eDUMPMEMALLOC\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR13\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eProvides internal memory information.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eDVBIN\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR14\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eDoes nothing. Probably intended for importing VBA macro.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eDVBOUT\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR14\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eDoes nothing. Probably intended for exporting VBA macro.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eENDSV\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR12\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eAn interesting variant of END, with a warning about being unable to save vector files(?).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eFILEOPEN\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR12\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eA command-line only variant of OPEN. In R13, this command is issued when selecting a file from the MRU file list in the 'File' menu.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eKABOOM!\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR13\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eDoes nothing. Looks fun, though!\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eKRISTI\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR13\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eCreates cat_acad.h and cat_acad.rc in the ACAD.EXE directory. These files contain resource definitions for all loaded toolbar buttons. They don't look very useful to me, but I'll bet Kristi needed them.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eMAKEBLK\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR14\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eDoes nothing.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eOFFLINE\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR13\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eWarns that it is \"not converted to AcDb yet\", then does nothing.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eOLDMTEXT\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR14\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eRuns the R13 MTEXT command.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eOLDMTPROP\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR14\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eRuns the R13 MTPROP command.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003ePAINTER\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR13\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eDoes nothing in R13, runs _MATCHPROP in R14.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003ePRPLOT\u003c/td\u003e\n\u003ctd valign=\"top\"\u003epre R12\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eTells you that it's a discontinued command (remember \"printer plots\"?)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eRENDENV\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR14\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eDoes nothing.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eSETENV\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR13\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eDoes nothing.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eUNLOCK\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR13\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eDoes nothing.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eVIEWTOOLBAR\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR13\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eDoes nothing.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eXDRGINSERT\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR14\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eDoes nothing.\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003cspan style=\"text-decoration: underline;\"\u003eAdditional Information:\u003c/span\u003e\u003c/p\u003e","title":"Undocumented Commands"},{"content":"","permalink":"https://www.manusoft.com/resources/freebies/arx/","summary":"","title":"ADS / ObjectARX"},{"content":"Summary Periscope provides fast drawing entity feedback in a compact tooltip-like scope window as you move the cursor over the objects (including objects nested in blocks). The displayed information is designed to supplement the visual information seen on the screen by showing \u0026ldquo;invisible\u0026rdquo; properties in an intuitive and compact fashion. Two common uses are to quickly get a grasp on the contents of drawings obtained from third parties and to check drawings for drafting standards conformance. Custom extenders may be created in VBA or .NET to extend or modify the information displayed in the scope window by providing text with HTML formatting. Periscope supports the following platforms:\nAutoCAD R14 - 2027\nBricscad 9 - 24\nZWCAD+ 2014 - 2017\nPeriscope is free! Download and try it for yourself!\nFeatures Periscope displays DXF name, layer, linetype, color, and attached URL of all objects, along with information specific to the object type. Selected Architectural Desktop and Land Development Desktop objects are supported, including wall, window, and door styles, cogo point data, and other similar properties of common elements. The following table shows an abbreviated list of object-specific information:\nLINE length, bearing (angle), delta X,Y,Z (3D lines) POLYLINE length, width, elevation, # segments, open/closed, spline type LWPOLYLINE length, width, elevation, # segments, open/closed ARC area, perimeter, radius CIRCLE area, perimeter, diameter 3DSOLID volume, surface area REGION area, perimeter INSERT block name, scale factor(s), rotation IMAGE image name, file name, scale, rotation TEXT style, height, width factor VIEWPORT scale, perspective, hidden line, and view-locked status DIMENSION style, override and default text status User settings include enabling and disabling the Periscope window from popping up automatically after the cursor pauses for a preset period of time, setting the length of the delay time, and setting whether Periscope loads automatically at startup. Periscope\u0026rsquo;s window can also be activated manually at any time by using the PEEK command. Easy access to user settings is provided by a small Periscope icon in the status bar, the PERISCOPE command, or the (periscope) LISP function.\nHere is a screen capture showing the Periscope popup scope window over an AutoCAD REGION object:\nDownload Download Periscope: Periscope7.msi (9.8 MB)\nPeriscope is free to use for any purpose subject to the terms of the license agreement.\n","permalink":"https://www.manusoft.com/resources/apps/periscope/","summary":"\u003ch3 id=\"summary\"\u003eSummary\u003c/h3\u003e\n\u003cp\u003ePeriscope provides fast drawing entity feedback in a compact tooltip-like scope window as you move the cursor over the objects (including objects nested in blocks). The displayed information is designed to supplement the visual information seen on the screen by showing \u0026ldquo;invisible\u0026rdquo; properties in an intuitive and compact fashion. Two common uses are to quickly get a grasp on the contents of drawings obtained from third parties and to check drawings for drafting standards conformance. Custom extenders may be created in VBA or .NET to extend or modify the information displayed in the scope window by providing text with HTML formatting. Periscope supports the following platforms:\u003c/p\u003e","title":"Periscope"},{"content":" Variable Type Range Introduced Notes _LINFO string - pre R12 Hardware lock serial number; responds to (getvar \"_LINFO\") only. _PKSER string - R9[2] The AutoCAD serial number (read-only).\nNote that in versions of AutoCAD prior to R11(?), the serial number was a string in the executable which could be hacked to read 00-000000. In R11(?) a hook into the ZOOM command was enabled to immediately crash AutoCAD if the serial number string was tampered with.[2] _SERVER boolean 0/1 R11[2] Network license server status (read-only). _VERNUM string - R13 AutoCAD build number. AUXSTAT integer -32768 - 32767 R13 auxiliary input device status[3] AXISMODE boolean 0/1 pre R12 Holdover from old AXIS command; no longer used. AXISUNIT '(x y) - pre R12 Holdover from old AXIS command; no longer used. BS_BITS[2] integer -32768 - 32767 R11 only DBGLISTALL * * R10[2] Unknown function.\n*Note that this was an integer with range -32768 - 32767 from R10 - R11, then it became a boolean (0/1).[2] ENTEXTS integer [0, 1, 2] R12 Controls drawing extents calculation.\n0 : extents are calculated each time they're needed (slower, but uses less memory).\n1 : cache extents of each entity in short (2-byte) values if possible (compromise between speed and memory efficiency).\n2 : cache extents of each entity as long (4-byte) values (fastest extents calculations, but uses more storage memory). ENTMODS integer 0 - ~4Gig R12 Increments every time a database object is modified (read-only). FORCE_PAGING integer 0 - ~4Gig R13 GLOBCHECK integer [0, 1, 2, 3] R13 3 : show DCL dialog size when displaying dialog.\n\u0026gt;0 : disallow local-language commands (very useful for developers!). JWDEBUG[2] ? ? R9 - R10 Probably a \"debug\" flag used by a programmer with initials J.W. (John Walker?) KESDEBUG[2] ? ? R9 only Probably a \"debug\" flag used by a programmer with initials K.E.S. LAZYLOAD boolean 0/1 R13 NODENAME string - R13 AutoCAD node name. NOMUTT boolean 0/1 R14.01 1 (True) : No input prompts are displayed. PHANDLE integer 0 - ~4Gig R12 PRODUCT string - R14 Product name (e.g. \"AutoCAD\") (read-only). PROGRAM string - R14 Executable name (e.g. \"acad\") (read-only). QAFLAGS bitcode 0 - 32767* R11 bit 0 (1) : ^C in menu macro cancels grips (acts like keyboard \u0026lt;Esc\u0026gt;).\nbit 1 (2) : no pause during text screen listings.\nbit 2 (4) : no \"alert\" dialogs (text display instead).\nbit 7 (128) : accepts \"screen picks\" (point lists) via (command) function.\n*Note that this was an integer with range -32768 - 32767 in R11, then it changed to 0 - 32767 in R12.[2] Additional Information:\nUndocumented system variables are sometimes named internally with an asterisk preceding their name. The asterisk may be included when retrieving such system variables via AutoLISP. For example, (getvar \"_PKSER\") and (getvar \"*_PKSER\") both return the serial number.[2] Prior to R12, AUPREC and LUPREC accepted integers in the range 0 - 18. Beginning with R12, these two system variables no longer accept values larger than 8. If you save an R11 drawing with LUPREC or AUPREC values higher than 8, they are honored in R12 and later -- however, once you change them they cannot be changed back (except via UNDO).[2] ","permalink":"https://www.manusoft.com/develop/reference/sysvars/","summary":"\u003cdiv\u003e\n\u003ctable border=\"1\" cellpadding=\"2\"\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth align=\"left\" valign=\"top\"\u003eVariable \u003c/th\u003e\u003cth align=\"left\" valign=\"top\"\u003eType \u003c/th\u003e\u003cth align=\"left\" valign=\"top\"\u003eRange \u003c/th\u003e\u003cth align=\"left\" valign=\"top\"\u003eIntroduced \u003c/th\u003e\u003cth align=\"left\" valign=\"top\"\u003eNotes \u003c/th\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003e_LINFO\u003c/td\u003e\n\u003ctd valign=\"top\"\u003estring\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e-\u003c/td\u003e\n\u003ctd valign=\"top\"\u003epre R12\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eHardware lock serial number; responds to (getvar \"_LINFO\") only.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003e_PKSER\u003c/td\u003e\n\u003ctd valign=\"top\"\u003estring\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e-\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR9\u003cspan style=\"font-size: x-small;\"\u003e\u003csup\u003e[2]\u003c/sup\u003e\u003c/span\u003e\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eThe AutoCAD serial number (read-only).\u003cbr /\u003eNote that in versions of AutoCAD prior to R11(?), the serial number was a string in the executable which could be hacked to read 00-000000. In R11(?) a hook into the ZOOM command was enabled to immediately crash AutoCAD if the serial number string was tampered with.\u003cspan style=\"font-size: x-small;\"\u003e\u003csup\u003e[2]\u003c/sup\u003e\u003c/span\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003e_SERVER\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eboolean\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e0/1\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR11\u003cspan style=\"font-size: x-small;\"\u003e\u003csup\u003e[2]\u003c/sup\u003e\u003c/span\u003e\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eNetwork license server status (read-only).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003e_VERNUM\u003c/td\u003e\n\u003ctd valign=\"top\"\u003estring\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e-\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR13\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eAutoCAD build number.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eAUXSTAT\u003c/td\u003e\n\u003ctd valign=\"top\"\u003einteger\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e-32768 - 32767\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR13\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eauxiliary input device status\u003cspan style=\"font-size: x-small;\"\u003e\u003csup\u003e[3]\u003c/sup\u003e\u003c/span\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eAXISMODE\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eboolean\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e0/1\u003c/td\u003e\n\u003ctd valign=\"top\"\u003epre R12\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eHoldover from old AXIS command; no longer used.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eAXISUNIT\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e'(x y)\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e-\u003c/td\u003e\n\u003ctd valign=\"top\"\u003epre R12\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eHoldover from old AXIS command; no longer used.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eBS_BITS\u003cspan style=\"font-size: x-small;\"\u003e\u003csup\u003e[2]\u003c/sup\u003e\u003c/span\u003e\u003c/td\u003e\n\u003ctd valign=\"top\"\u003einteger\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e-32768 - 32767\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR11 only\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eDBGLISTALL\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e*\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e*\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR10\u003cspan style=\"font-size: x-small;\"\u003e\u003csup\u003e[2]\u003c/sup\u003e\u003c/span\u003e\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eUnknown function.\u003cbr /\u003e*Note that this was an integer with range -32768 - 32767 from R10 - R11, then it became a boolean (0/1).\u003cspan style=\"font-size: x-small;\"\u003e\u003csup\u003e[2]\u003c/sup\u003e\u003c/span\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eENTEXTS\u003c/td\u003e\n\u003ctd valign=\"top\"\u003einteger\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e[0, 1, 2]\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR12\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eControls drawing extents calculation.\u003cbr /\u003e0 : extents are calculated each time they're needed (slower, but uses less memory).\u003cbr /\u003e1 : cache extents of each entity in short (2-byte) values if possible (compromise between speed and memory efficiency).\u003cbr /\u003e2 : cache extents of each entity as long (4-byte) values (fastest extents calculations, but uses more storage memory).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eENTMODS\u003c/td\u003e\n\u003ctd valign=\"top\"\u003einteger\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e0 - ~4Gig\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR12\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIncrements every time a database object is modified (read-only).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eFORCE_PAGING\u003c/td\u003e\n\u003ctd valign=\"top\"\u003einteger\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e0 - ~4Gig\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR13\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eGLOBCHECK\u003c/td\u003e\n\u003ctd valign=\"top\"\u003einteger\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e[0, 1, 2, 3]\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR13\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e3 : show DCL dialog size when displaying dialog.\u003cbr /\u003e\u0026gt;0 : disallow local-language commands (very useful for developers!).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eJWDEBUG\u003cspan style=\"font-size: x-small;\"\u003e\u003csup\u003e[2]\u003c/sup\u003e\u003c/span\u003e\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e?\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e?\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR9 - R10\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eProbably a \"debug\" flag used by a programmer with initials J.W. (John Walker?)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eKESDEBUG\u003cspan style=\"font-size: x-small;\"\u003e\u003csup\u003e[2]\u003c/sup\u003e\u003c/span\u003e\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e?\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e?\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR9 only\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eProbably a \"debug\" flag used by a programmer with initials K.E.S.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eLAZYLOAD\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eboolean\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e0/1\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR13\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eNODENAME\u003c/td\u003e\n\u003ctd valign=\"top\"\u003estring\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e-\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR13\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eAutoCAD node name.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eNOMUTT\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eboolean\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e0/1\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR14.01\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e1 (True) : No input prompts are displayed.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003ePHANDLE\u003c/td\u003e\n\u003ctd valign=\"top\"\u003einteger\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e0 - ~4Gig\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR12\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003ePRODUCT\u003c/td\u003e\n\u003ctd valign=\"top\"\u003estring\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e-\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR14\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eProduct name (e.g. \"AutoCAD\") (read-only).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003ePROGRAM\u003c/td\u003e\n\u003ctd valign=\"top\"\u003estring\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e-\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR14\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eExecutable name (e.g. \"acad\") (read-only).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eQAFLAGS\u003c/td\u003e\n\u003ctd valign=\"top\"\u003ebitcode\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e0 - 32767*\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eR11\u003c/td\u003e\n\u003ctd valign=\"top\"\u003ebit 0 (1) : ^C in menu macro cancels grips (acts like keyboard \u0026lt;Esc\u0026gt;).\u003cbr /\u003ebit 1 (2) : no pause during text screen listings.\u003cbr /\u003ebit 2 (4) : no \"alert\" dialogs (text display instead).\u003cbr /\u003ebit 7 (128) : accepts \"screen picks\" (point lists) via (command) function.\u003cbr /\u003e*Note that this was an integer with range -32768 - 32767 in R11, then it changed to 0 - 32767 in R12.\u003cspan style=\"font-size: x-small;\"\u003e\u003csup\u003e[2]\u003c/sup\u003e\u003c/span\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003cspan style=\"text-decoration: underline;\"\u003eAdditional Information:\u003c/span\u003e\u003c/p\u003e","title":"Undocumented System Variables"},{"content":"[Update: Visual Studio 2010 now includes a built in feature called native multi-targeting that replaces the need for VC Build Hook. Read this blog post to learn how to use VS 2010 to target older versions of Visual Studio.]\nI created the VC Build Hook utility in order to make it possible to use the current Visual Studio IDE for building ObjectARX applications that target any version of AutoCAD. This is desirable because ObjectARX applications must be built by the Visual C/C++ build tools that correspond to the ObjectARX SDK version for the target AutoCAD version. VC Build Hook works by switching the executables path during a Visual Studio build and pointing the paths to the desired version of the Visual C/C++ build tools. In addition, VC Build Hook automatically fixes build tool command options to account for differences between VC versions so that build commands produced by one version of Visual Studio are correctly interpreted by another version of the build tools. Assuming you've already set up your projects as described here (note that you must have a working installation of the necessary version of Visual C/C++ build tools and runtime libraries), then you'll need to install the current version of VC Build Hook:\nDownload: VCBuildHookSetup.msi (290k)\nVersion 4.0.2.5 uploaded 2010-06-05 (supports VC 7.1, VC 8, and VC 9)\nOnce the VC Build Hook utility is installed, it's just a matter of setting the VC Build Hook extended properties for your projects to use the correct build tools. As of version 4.02, VC Build Hook also sets the INCLUDE and LIB system variables to the current settings for the selected version of VC, so there is no need to explicitly specify the correct paths in your project settings.\nWhen VC Build Hook is started, Visual Studio solutions will have two new extended properties: LowPriorityBuild and BuildToolVersion.\nThe LowPriorityBuild property is only available for solutions and can be either 'Yes', 'No', or 'NotSet'. Currently, VC Build Hook makes all builds low priority unless this property is set to 'No'. A low priority build means that other tasks will receive more processor time during a build (at the expense of build time, of course). The BuildToolVersion property is available for solutions or projects, and may be set to 'VC7', 'VC8', 'VC9', or 'Default'. A setting of 'Default' for projects causes the solution property to be inherited. If the project and solution are both set to 'Default', then the build tool paths will not be affected and Visual Studio will use the default build tools.\nWhen using Visual Studio 2005 or later IDE:\nDisable parallel builds! The VC Build Hook utility does not work correctly if two simultaneous builds are using different settings, so you should disable this feature in Visual Studio global options. To do this, go to Tools-\u0026gt;Options, open 'Projects and Solutions', select the 'Build and Run' tab, and change the 'maximum number of parallel project builds' to 1. In my experience, Visual Studio is more stable when parallel builds are disabled, so there is a benefit to disabling this feature that is unrelated to VC Build Hook.\nWhen using the VC 7 build tools:\nDisable the Manifest Tool. This is easy to do, but not obvious or well documented. Right-click on a project and select 'Tool Build Order...', then select 'All Configurations' in the configuration dropdown and dismiss the warning dialog, then uncheck the box beside 'Manifest Tool'. Using the IDE, you have to do this one project at a time.\nIn linker settings, on the 'Manifest File' tab, set 'Generate Manifest' to 'No'. This disables manifest file generation.\nDisable error reporting. In C/C++ settings, on the 'Advanced' tab, set 'Error Reporting' to 'Default'. Do the same in linker settings, on the 'Advanced' tab.\nSet 'Treat wchar_t as Built-in Type' to 'No' in the in the C/C++ project settings Language section.\nDon't use Unicode response files. Change this in C/C++ settings on the 'General' tab by setting 'Use UNICODE Response Files' to 'No'. Do the same in linker settings, also on the 'General' tab. The VC Build Hook utility will automatically convert Unicode response files to ANSI files if they are being sent to a VC 7 build tool, so this step is not strictly required, however the build will be slightly less efficient if the files need to be converted.\nIf your project uses precompiled headers, there is one additional issue to deal with. Visual Studio 2005 removed support for the \"Automatically Generate\" (/YX) precompiled header option. This is not a problem when using the VC 8 or later build tools, but when using the VC 7 build tools, it can make the build process unbearably slow. Luckily it's not difficult to re-enable automatic use of precompiled headers when building with VC 7 build tools. To re-enable this feature in a project that is using the VC 7 build tools, you need to edit the 'Precompiled Header' tab of the C/C++ settings. First, make sure precompiled headers are disabled ('Create/Use Precompiled Header' should be set to 'Not Using Precompiled Headers'), then set the 'Precompiled Header File' to '$(IntDir)\\$(TargetName).pch' for all configurations, then go to the 'Command Line' tab and add '/YXStdAfx.h' to the 'Additional options' field at the bottom. Voila! Precompiled headers should now work just as they did when building with the Visual Studio .NET 2003 IDE.\nIf your project was created by a later version of the ObjectARX wizard that does not create a .def file, you must add the following in one of your source files (I prefer acrxEntryPoint.cpp) in order to ensure that the necessary functions get exported:\n#pragma comment(linker,\"/EXPORT:_acrxEntryPoint\")\n#pragma comment(linker,\"/EXPORT:_acrxGetApiVersion\") I need to stress again that these steps only work without error after you have implemented the practices discussed here.\n","permalink":"https://www.manusoft.com/develop/objectarx/vc-build-hook/","summary":"\u003cp\u003e\u003cem\u003e[Update: Visual Studio 2010 now includes a built in feature called native multi-targeting that replaces the need for VC Build Hook. Read \u003c/em\u003e\u003ca href=\"/2010/10/visual-studio-2010-native-multi-targeting.htm\"\u003e\u003cem\u003ethis blog post\u003c/em\u003e\u003c/a\u003e\u003cem\u003e to learn how to use VS 2010 to target older versions of Visual Studio.]\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eI created the \u003cem\u003eVC Build Hook\u003c/em\u003e utility in order to make it possible to use the current Visual Studio IDE for building ObjectARX applications that target any version of AutoCAD. This is desirable because ObjectARX applications must be built by the Visual C/C++ build tools that correspond to the ObjectARX SDK version for the target AutoCAD version. \u003cem\u003eVC Build Hook\u003c/em\u003e works by switching the executables path during a Visual Studio build and pointing the paths to the desired version of the Visual C/C++ build tools. In addition, \u003cem\u003eVC Build Hook\u003c/em\u003e automatically fixes build tool command options to account for differences between VC versions so that build commands produced by one version of Visual Studio are correctly interpreted by another version of the build tools. Assuming you've already set up your projects \u003ca href=\"/develop/objectarx/vc71-arx-2004/\"\u003eas described here\u003c/a\u003e (note that you \u003cstrong\u003emust\u003c/strong\u003e have a working installation of the necessary version of Visual C/C++ build tools and runtime libraries), then you'll need to install the current version of \u003cem\u003eVC Build Hook\u003c/em\u003e:\u003c/p\u003e","title":"Using VC Build Hook to Target Multiple AutoCAD Versions"},{"content":"","permalink":"https://www.manusoft.com/resources/freebies/lisp/","summary":"","title":"AutoLISP"},{"content":"The registry demand loading feature in AutoCAD, BricsCAD, and ZWCAD is a great method for loading ObjectARX/BRX/ZRX modules automatically at startup, and it's relatively easy to create the demand loading settings from an installation program or MSI file at install time. Unfortunately it only works for ARX/BRX/ZRX files (and also with .NET dlls in AutoCAD 2006 and later). Some years ago, I created a small ARX module called VLXLoad. The purpose of this module was to work as a stub to load an associated .vlx file of the same base name in the same folder. I've since renamed this small utility to LspLoad and expanded it so that it can load any type of LISP file. The idea is to rename the LspLoad.*.* file to the name of the associated .lsp/.vlx/.fas file (i.e. MyApp.18.arx will look for and load MyApp.vlx in the same directory), then create demand load registry settings to load the renamed LspLoad module. Voila, the associated LISP file gets loaded as if it was being demand loaded from the registry.\nThe LspLoad source code demonstrates an important technique that I often see questions about in Autodesk's ObjectARX discussion group: how to get the full path to the ARX file from code within the file. The secret is to use the Windows API function GetModuleFileName(), passing as its first argument the current module instance handle, which is available in an ObjectARX module as _hdllInstance (note that it's _hd, two lower case L's, then followed by an upper case I for Instance).\nI've uploaded here the complete source code along with a solution file for Visual Studio 2019. The solution requires environment variables defined as described here. You'll need to have Daffodil for Visual Studio installed if you're using Visual Studio IDE version VS 2013 or earlier, and you'll additionally need the platform target version of Visual Studio installed to build the various projects targeting different platforms. If you just want the fully built modules, download the latest versions from my Freebies page.\nDownload: LspLoadSource.zip (108k)\nVersion 6.10 uploaded 2026-04-05\nIf you look at the source code, you'll notice that these modules define a lisp callable function named (GetPathOf\u0026lt;basefilename\u0026gt;) that returns the directory from where the LspLoad module loaded. This also demonstrates another technique: defining an ADS (Lisp callable) function by \"calculating\" the function name at runtime.\n","permalink":"https://www.manusoft.com/develop/objectarx/demand-load-vlx/","summary":"\u003cp\u003eThe registry demand loading feature in AutoCAD, BricsCAD, and ZWCAD is a great method for loading ObjectARX/BRX/ZRX modules automatically at startup, and it's relatively easy to create the demand loading settings from an installation program or MSI file at install time. Unfortunately it only works for ARX/BRX/ZRX files (and also with .NET dlls in AutoCAD 2006 and later). Some years ago, I created a small ARX module called VLXLoad. The purpose of this module was to work as a stub to load an associated .vlx file of the same base name in the same folder. I've since renamed this small utility to LspLoad and expanded it so that it can load any type of LISP file. The idea is to rename the LspLoad.*.* file to the name of the associated .lsp/.vlx/.fas file (i.e. MyApp.18.arx will look for and load MyApp.vlx in the same directory), then create demand load registry settings to load the renamed LspLoad module. Voila, the associated LISP file gets loaded as if it was being demand loaded from the registry.\u003c/p\u003e","title":"Demand Loading a LISP File"},{"content":"Summary SuperPurge is designed to give AutoCAD users complete control over the contents of their drawing files. A dialog interface provides graphical access to hidden drawing database objects such as layers, dictionaries, proxy objects, and other symbol table objects. Even referenced objects may be purged safely and cleanly with the \u0026lsquo;Hard\u0026rsquo; purge mode. SuperPurge supports the following AutoCAD platforms, including vertical market solutions based on these platforms (however AutoCAD LT is not supported):\nAutoCAD R13c4 - R2027\nSuperPurge is free! Download and try it for yourself!\nFeatures With SuperPurge, any database object can be purged. In \u0026rsquo;normal\u0026rsquo; mode, only unreferenced objects are available for selection, however the special \u0026lsquo;hard\u0026rsquo; purge mode allows even referenced symbol table objects to be cleanly purged. A dialog interface (click here for a screen shot) sheds light on the hidden objects often wasting space in drawing files, and allows easy and customizable selection for purging. Users can purge by individual selection, wildcards, or by using saved settings. An AutoLISP interface is provided for users who wish to include SuperPurge in their own custom scripts or LISP shortcuts.\nCommon uses for SuperPurge include drawing file cleanup in preparation for archiving, file size reduction for bloated drawings, cleanup of third party drawing files, and using the dialog interface to visually inspect drawing file contents. Not only is SuperPurge much more powerful than the built-in PURGE command, it is also safer. SuperPurge does an exhaustive inter-object reference check before every invocation, thus ensuring that no database corruption results.\nDo you have drawings with layers that won\u0026rsquo;t purge? Proxy objects that won\u0026rsquo;t go away? Download SuperPurge today and put it to the test!\nDownload Download SuperPurge: SuperPurge2.exe (2.4 MB)\nSuperPurge is free to use for any purpose subject to the terms of the license agreement.\n","permalink":"https://www.manusoft.com/resources/apps/superpurge/","summary":"\u003ch3 id=\"summary\"\u003eSummary\u003c/h3\u003e\n\u003cp\u003eSuperPurge is designed to give AutoCAD users complete control over the contents of their drawing files. A dialog interface provides graphical access to hidden drawing database objects such as layers, dictionaries, proxy objects, and other symbol table objects. Even referenced objects may be purged safely and cleanly with the \u0026lsquo;Hard\u0026rsquo; purge mode. SuperPurge supports the following AutoCAD platforms, including vertical market solutions based on these platforms (however AutoCAD LT is not supported):\u003c/p\u003e","title":"SuperPurge"},{"content":" FunctionNotes (_ver) Returns AutoLISP build number (?). (report) Inroduced in R12/DOS; never worked in Windows. (vmon) Discontinued. Once used to enable virtual memory; still there for compatibility, but does nothing. (xstrcase) An international-friendly version of (strcase). Additional Information:\nAn undocumented feature of the (getcfg) and (setcfg) functions in R13 and later is that you can access \"private\" areas of the configuration file (*.cfg) by passing a key string of the form (getcfg \"CfgData/Version/ExecutableDate\u0026amp;Time\"). This retrieves the \"ExecutableDate\u0026amp;Time=\" value in the [Version] section of the configuration file, for example. Miscellaneous Destroying Handles (Pre-R13 Only) In AutoCAD R12 and earlier, it was difficult to programmatically destroy handles because the HANDLES command required the user to type in a randomly selected passphrase (of several) before it continued. This was done to make it extremely difficult to destroy handles accidentally. Unfortunately, this also made it extremely difficult to automate the task. Apparently Autodesk ran into the same problem, because they programmed the HANDLES command to accept a special \"passkey\" which always works regardless of the displayed passphrase. Here's the secret passkey:\nQ?+:$$ \u0026amp;9*^0E#1@2AF5+_R)!/\u0026amp;#\u0026lt;*:\nPostscript Prolog Trick (R13 and later)[1] Since the first release of R13, the PSPROLOG system variable has allowed dynamically assembling a prolog from several sources. The sources may either be sections in ACAD.PSF or be the contents of other files (which must have the extension .PS and must be in a directory in AutoCAD's search path). Section or file names in PSPROLOG are separated by semicolons. File names in PSPROLOG are prefixed with an asterisk. For example, if PSPROLOG contains:\nrotate;mycolors;*standard\nthen the prolog would be assembled from the section called \"rotate\" in ACAD.PSF, then the section called \"mycolors\" in ACAD.PSF, then the contents of the file STANDARD.PS.\nAccessing Current Plot Parameters It's possible to retrieve the current plot parameters programmatically by reading values out of the [Plotter#N/User] section (where N represents the plotter number, as stored in the PLOTTER system variable) of the configuration file. To retrieve the values via AutoLISP, you must use an undocumented feature of (getcfg) shown above. Furthermore, there is a \"Flags=\" line in the [Plotter#N/User] section which contains the following bit-coded information in its value:\nBit (Value)Meaning 0 (1) Swap x and y axes on plot 1 (2) Scale specified 2 (4) Multiple pen 3 (8) Multiple pass on pens desired 4 (16) Remove hidden lines 5 (32) Correct area fill for pen width 6 (64) Plot to file 7 (128) Rotate 90 degrees (combines with below for 270 degrees) 8 (256) Rotate 180 degrees (combines with above for 270 degrees) 9 (512) Unknown 10 (1024) Printer-plotter 11 (2048) Long axis device 12 (4096) Force plot to file Contributors Thanks to the following individuals who have contributed material for this page:\nJon Fleming (jonf@fleming-group.com) Erik W. Olson (Erik.W.Olson@valleylisp.com) Darren J. Young (dyoung@mcwi.com) ","permalink":"https://www.manusoft.com/develop/reference/autolisp/","summary":"\u003cdiv id=\"AutoLISP\"\u003e\n\u003ctable border=\"1\"\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth align=\"left\" valign=\"top\"\u003eFunction\u003c/th\u003e\u003cth align=\"left\" valign=\"top\"\u003eNotes\u003c/th\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003e(_ver)\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eReturns AutoLISP build number (?).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003e(report)\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eInroduced in R12/DOS; never worked in Windows.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003e(vmon)\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eDiscontinued. Once used to enable virtual memory; still there for compatibility, but does nothing.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003e(xstrcase)\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eAn international-friendly version of (strcase).\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003cspan style=\"text-decoration: underline;\"\u003eAdditional Information:\u003c/span\u003e\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eAn undocumented feature of the (getcfg) and (setcfg) functions in R13 and later is that you can access \"private\" areas of the configuration file (*.cfg) by passing a key string of the form (getcfg \"CfgData/Version/ExecutableDate\u0026amp;Time\"). This retrieves the \"ExecutableDate\u0026amp;Time=\" value in the [Version] section of the configuration file, for example.\u003c/li\u003e\n\u003c/ol\u003e\n\u003chr /\u003e\n\u003ca id=\"Miscellaneous\" name=\"Miscellaneous\"\u003e\u003c/a\u003e\u003ch3\u003e\u003ca id=\"Miscellaneous\" name=\"Miscellaneous\"\u003eMiscellaneous\u003c/a\u003e\u003c/h3\u003e\n\u003ca id=\"Destroying_Handles__Pre_R13_Only_\" name=\"Destroying_Handles__Pre_R13_Only_\"\u003e\u003c/a\u003e\u003ch4\u003eDestroying Handles (Pre-R13 Only)\u003c/h4\u003e\n\u003cp align=\"left\"\u003eIn AutoCAD R12 and earlier, it was difficult to programmatically destroy handles because the HANDLES command required the user to type in a randomly selected passphrase (of several) before it continued. This was done to make it extremely difficult to destroy handles accidentally. Unfortunately, this also made it extremely difficult to automate the task. Apparently Autodesk ran into the same problem, because they programmed the HANDLES command to accept a special \"passkey\" which always works regardless of the displayed passphrase. Here's the secret passkey:\u003c/p\u003e","title":"Undocumented AutoLISP Functions"},{"content":"Introduction DrafTools is an old unsupported freeware AutoCAD add-on for AutoCAD R14 and AutoCAD 2000 that facilitates drawing setup by managing custom title blocks and automatically setting system variables based on the drawing scale selected during title block insertion.\nIn addition to simple dialog-box based title block selection and placement, DrafTools allows users to define \u0026lsquo;smart\u0026rsquo; attributes in their title blocks which may be programmed to calculate their default value during insertion.\nScreen Shot Revision History Version Date Description 2.10 1999-11-04 Added support for AutoCAD R14 and AutoCAD 2000, and switched to unsupported freeware distribution. 2.05 1996-02-25 This update adds support for AutoCAD R13c4 (DOS/Windows). 2.00 1995-11-18 This update adds support for AutoCAD R13 (DOS/Windows). 1.00a 1994-04-17 This update adds support for AutoCAD R12/Windows. 1.00 N/A First public release (R12/DOS only). Download Download DrafTools: DT210.zip (222k)\nDrafTools is an unsupported freeware program. See !LICENSE.TXT in the download for additional information and restrictions.\nSupport We do not offer any support for DrafTools, however we plan to add a message forum in the future for peer-to-peer support among DrafTools users. Please watch this space for news!\n","permalink":"https://www.manusoft.com/resources/freebies/draftools/","summary":"\u003ch3 id=\"introduction\"\u003eIntroduction\u003c/h3\u003e\n\u003cp\u003eDrafTools is an old unsupported freeware AutoCAD add-on for AutoCAD R14 and AutoCAD 2000 that facilitates drawing setup by managing custom title blocks and automatically setting system variables based on the drawing scale selected during title block insertion.\u003c/p\u003e\n\u003cp\u003eIn addition to simple dialog-box based title block selection and placement, DrafTools allows users to define \u0026lsquo;smart\u0026rsquo; attributes in their title blocks which may be programmed to calculate their default value during insertion.\u003c/p\u003e","title":"DrafTools"},{"content":"Notes\nOnly R14 functions are presented at this time. Many of these exist in R13 as well, however no effort has yet been made to distinguish R14-only functions.\nIn case you're wondering, all this information was legally obtained using only standard programming tools. The functions (and symbols) listed below are \"exported\" from Acad.exe. An exported C++ function has its return type and argument types embedded in its name, therefore it's relatively easy to get a complete function prototype for such functions. An exported C-Style (ADS) function does not contain any information about its arguments or return types, so those functions are more difficult to prototype. Nevertheless, examination of the function's name often gives away its purpose, and this is often enough to deduce its prototype.\nacdb (database-related) enum Acad::ErrorStatus acdbScanPline(class AcDb2dPolyline *,class AcGePoint3dArray \u0026amp;,class AcGeDoubleArray \u0026amp;)\nenum Acad::ErrorStatus acdbScanPline(class AcDb3dPolyline *,class AcGePoint3dArray \u0026amp;)\nenum Acad::ErrorStatus acdbMakePline(class AcGePoint3dArray const \u0026amp;,class AcGeMatrix3d const \u0026amp;,class AcDb2dPolyline * \u0026amp;)\nenum Acad::ErrorStatus acdbMakePline(class AcGePoint3dArray const \u0026amp;,class AcDb2dPolyline * \u0026amp;)\nenum Acad::ErrorStatus acdbMakePline(class AcGePoint3dArray const \u0026amp;,class AcGeDoubleArray const \u0026amp;,class AcGeMatrix3d const \u0026amp;,class AcDb2dPolyline * \u0026amp;)\nenum Acad::ErrorStatus acdbMakePline(class AcGePoint3dArray const \u0026amp;,class AcGeDoubleArray const \u0026amp;,class AcDb2dPolyline * \u0026amp;)\nenum Acad::ErrorStatus acdbMakePline(class AcGePoint3dArray const \u0026amp;,class AcDb3dPolyline * \u0026amp;)\nenum Acad::ErrorStatus acdbMakeArc(class AcGePoint3d const \u0026amp;,class AcGePoint3d const \u0026amp;,double,class AcGeVector3d const \u0026amp;,class AcGeCircArc3d \u0026amp;)\nenum Acad::ErrorStatus acdbGetTransformedEntities(class AcDbEntity const *,class AcGeMatrix3d const \u0026amp;,class AcDbVoidPtrArray \u0026amp;)\nacdbIsModelerStarted\nacdbAcisGetDeleteBulletins\nacdbAcisSetDeleteBulletins\nacdbAcisSaveEntityToDwgFiler\nacdbAcisRestoreEntityFromDwgFiler\nenum Acad::ErrorStatus acdbVPLayer(class AcDbObjectId,class AcDbObjectIdArray \u0026amp;,int)\nint c4ObjIdIsLessThan(unsigned long,unsigned long)\nint c4ObjIdIsGreaterThan(unsigned long,unsigned long)\nint c4ObjIdLessThanOrEqual(unsigned long,unsigned long)\nint c4ObjIdGreaterThanOrEqual(unsigned long,unsigned long)\nint c4ObjIdIsEqualTo(unsigned long,unsigned long)\nint c4ObjIdNotEqualTo(unsigned long,unsigned long)\nint c5ObjIdIsLessThan(class AcDbStub const *,class AcDbStub const *)\nint c5ObjIdIsGreaterThan(class AcDbStub const *,class AcDbStub const *)\nint c5ObjIdLessThanOrEqual(class AcDbStub const *,class AcDbStub const *)\nint c5ObjIdGreaterThanOrEqual(class AcDbStub const *,class AcDbStub const *)\nint c5ObjIdIsEqualTo(class AcDbStub const *,class AcDbStub const *)\naced (editor-related) acedUnZapDrginsert\nacedDrgpreset\nacedXrefDrgpreset\nint acedAcadInQuiescentState(void)\nint acedPostCommand(char const *)\nenum Acad::ErrorStatus acedGetModuleFileName(char const *,char *,unsigned long)\nint acedEnableOleMessageFilter(int)\nenum Acad::ErrorStatus acedGetHotGrips(class AcDbEntity *,class AcDbIntArray \u0026amp;)\nenum Acad::ErrorStatus acedSetHotGrips(class AcDbEntity *,class AcDbIntArray const \u0026amp;) Windows Related EnableFloatingWindowsHook\nopenRefSearch\nDllGetClassObject\ncloseRefSearch\ngetRefSearchPath\nAcadSetVbaSession\nAcadSecondaryLoop\nLPDISPATCH AcadGetIDispatch(const longbool bAddref)\nAcadPreTranslateMessage\nAcadOnIdle\nvoid AcadPasteToCommandLine(const CString \u0026amp; sToPaste)\nint wcSetFileOpenProc(int ( __stdcall*)(struct tagOFNA *))\nvoid wcRestoreFileOpenProc(void)\nint wcIsUsingWorkCenterFileOpenProc(void)\nacrxClassForIid ADS (C Style) newAcRxServicePrototype\nmonitorAdlDragging\nbadassrt\nGetViewportInfo\nads_verno\nads_getbackdoor\nads_getstringb\nads_regappx\nads_agetenv\nads_recfgport\nads_filefilter\nads_get_filefilter\nadsi_ent2face\nads_xstrsave\nads_xstrcase\nadsi_GlobalMemoryStatus\nadsi_newdict\nadsi_kcabtes\nadsi_kcabteg\nads_agetcfg\nads_asetcfg\nads_update\nads_getTempFilesLocationStr\nads_more\nads_getSSetIter\nacad__msize\nacad__assert\nacad__strdup AcDbHandle Class void AcDbHandle::copyFromOldType(unsigned char const * const)\nvoid AcDbHandle::copyToOldType(unsigned char * const)\nvoid AcDbHandle::getValueBytes(unsigned char *,unsigned char *)\nvoid AcDbHandle::setValueBytes(unsigned char,unsigned char const *)\nclass AcDbHandle \u0026amp; AcDbHandle::operator+= (class AcDbHandle const \u0026amp;)\nclass AcDbHandle AcDbHandle::operator-(class AcDbHandle const \u0026amp;)\nint AcDbHandle::operator\u0026lt;= (class AcDbHandle const \u0026amp;)\nint AcDbHandle::operator\u0026gt;= (class AcDbHandle const \u0026amp;)\nclass AcDbHandle const kNullHandle\nclass AcDbHandle AcDbHandle::slowOperatorPlus(class AcDbHandle const \u0026amp;)\nclass AcDbHandle \u0026amp; AcDbHandle::operator-= (class AcDbHandle const \u0026amp;)\nvoid AcDbHandle::print(void)\nAcDbPolylineBuffer Class enum Acad::ErrorStatus AcDbPolylineBuffer::getPointAt(unsigned int,class AcGePoint2d \u0026amp;)\nenum Acad::ErrorStatus AcDbPolylineBuffer::getBulgeAt(unsigned int,double \u0026amp;)\nvoid AcDbPolylineBuffer::getElevation(double \u0026amp;)\nenum Acad::ErrorStatus AcDbPolylineBuffer::getConstantWidth(double \u0026amp;)\nvoid AcDbPolylineBuffer::getNormal(class AcGeVector3d \u0026amp;)\nenum Acad::ErrorStatus AcDbPolylineBuffer::addVertexWithVariableWidth(unsigned int,class AcGePoint2d const \u0026amp;,double,double,double)\nvoid AcDbPolylineBuffer::getThickness(double \u0026amp;)\nenum Acad::ErrorStatus AcDbPolylineBuffer::setPointAt(unsigned int,class AcGePoint2d const \u0026amp;)\nenum Acad::ErrorStatus AcDbPolylineBuffer::setBulgeAt(unsigned int,double)\nenum Acad::ErrorStatus AcDbPolylineBuffer::resizeArrays(int,unsigned int,unsigned int,unsigned int,int,int)\nAcDbPolylineBuffer::~AcDbPolylineBuffer(void)\nAcDbPolylineBuffer::AcDbPolylineBuffer(unsigned int,unsigned int,unsigned int,int,int)\nvoid AcDbPolylineBuffer::setElevation(double)\nvoid AcDbPolylineBuffer::setThickness(double)\nenum Acad::ErrorStatus AcDbPolylineBuffer::setNormal(class AcGeVector3d const \u0026amp;)\nenum Acad::ErrorStatus AcDbPolylineBuffer::setConstantWidth(double)\nvoid AcDbPolylineBuffer::makeDefaultProperties(void)\nenum Acad::ErrorStatus AcDbPolylineBuffer::getVariableWidth(unsigned int,double \u0026amp;,double \u0026amp;)\nint AcDbPolylineBuffer::hasWidth(void)\nint AcDbPolylineBuffer::hasBulges(void)\nint AcDbPolylineBuffer::hasVariableWidth(void)\nenum Acad::ErrorStatus AcDbPolylineBuffer::setVariableWidth(unsigned int,double,double)\nAcDbPolylineBuffer::AcDbPolylineBuffer(class AcDbPolylineBuffer const \u0026amp;)\nclass AcDbPolylineBuffer const \u0026amp; AcDbPolylineBuffer::operator= (class AcDbPolylineBuffer const \u0026amp;)\nint AcDbPolylineBuffer::hasConstantWidth(void)\nenum Acad::ErrorStatus AcDbPolylineBuffer::removeVertexAt(unsigned int)\nenum Acad::ErrorStatus AcDbPolylineBuffer::minimizeMemoryUsage(void)\nenum Acad::ErrorStatus AcDbPolylineBuffer::maximizeMemoryUsage(void)\nAcRxTextString Class virtual void AcRxTextString::cpyFromAscii(char const *)\nvoid AcRxTextString::killStrData(void)\nvirtual AcRxTextString::~AcRxTextString(void)\nAcRxTextString::AcRxTextString(char const *)\nvirtual int AcRxTextString::isEqualTo(class AcRxObject const *)\nvirtual unsigned int AcRxTextString::len(void)\nAcRxTextString::AcRxTextString(void)\nvirtual char const * AcRxTextString::getAsciiPtr(void)\nvoid AcRxTextString::initStrData(void)\nvirtual enum AcRx::Ordering AcRxTextString::comparedTo(class AcRxObject const *)\nvirtual enum AcRx::Ordering AcRxTextString::cmp(class AcRxTextString const *)\nvirtual class AcRxClass * AcRxTextString::isA(void)\nvirtual class AcRxObject * AcRxTextString::clone(void)\nvirtual void AcRxTextString::copy(class AcRxTextString const *)\nvirtual void AcRxTextString::cat(class AcRxTextString const *)\nAcRxTextString::AcRxTextString(class AcRxTextString const \u0026amp;)\nstatic class AcRxClass * AcRxTextString::gpDesc\nclass AcRxTextString \u0026amp; AcRxTextString::operator= (class AcRxTextString const \u0026amp;)\nvirtual unsigned int AcRxTextString::getChar(unsigned int)\nvirtual unsigned int AcRxTextString::operator[](unsigned int)\nvirtual int AcRxTextString::setChar(unsigned int,unsigned int)\nvirtual AcRxTextString::operator`char const * (void)\nvirtual char * AcRxTextString::cpyToAscii(void)\nvirtual void AcRxTextString::operator= (char const *) AcDbSortentsTable Class static class AcRxClass * AcDbSortentsTable::desc(void)\nvirtual class AcRxClass * AcDbSortentsTable::isA(void)\nAcDbSortentsTable::AcDbSortentsTable(void)\nvirtual AcDbSortentsTable::~AcDbSortentsTable(void)\nint AcDbSortentsTable::sortAs(class AcDbObjectId,class AcDbHandle \u0026amp;)\nenum Acad::ErrorStatus AcDbSortentsTable::remove(class AcDbObjectId)\nenum Acad::ErrorStatus AcDbSortentsTable::moveToBottom(class AcDbObjectIdArray \u0026amp;)\nenum Acad::ErrorStatus AcDbSortentsTable::moveToTop(class AcDbObjectIdArray \u0026amp;)\nenum Acad::ErrorStatus AcDbSortentsTable::moveBelow(class AcDbObjectIdArray \u0026amp;,class AcDbObjectId)\nenum Acad::ErrorStatus AcDbSortentsTable::moveAbove(class AcDbObjectIdArray \u0026amp;,class AcDbObjectId)\nenum Acad::ErrorStatus AcDbSortentsTable::swapOrder(class AcDbObjectId,class AcDbObjectId)\nenum Acad::ErrorStatus AcDbSortentsTable::setBlockId(class AcDbObjectId)\nclass AcDbObjectId AcDbSortentsTable::blockId(void)\nvirtual enum Acad::ErrorStatus AcDbSortentsTable::applyPartialUndo(class AcDbDwgFiler *,class AcRxClass *)\nvirtual enum Acad::ErrorStatus AcDbSortentsTable::dwgInFields(class AcDbDwgFiler *)\nvirtual enum Acad::ErrorStatus AcDbSortentsTable::dwgOutFields(class AcDbDwgFiler *)\nvirtual enum Acad::ErrorStatus AcDbSortentsTable::dxfInFields(class AcDbDxfFiler *)\nvirtual enum Acad::ErrorStatus AcDbSortentsTable::dxfOutFields(class AcDbDxfFiler *)\nstatic void AcDbSortentsTable::rxInit(void)\nstatic class AcRxClass * AcDbSortentsTable::gpDesc AcDbXObject Class AcDbXObject::AcDbXObject(void)\nvirtual enum Acad::ErrorStatus AcDbXObject::audit(class AcDbAuditInfo *)\nenum Acad::ErrorStatus AcDbXObject::dwgIn(class AcDbDwgFiler *)\nvirtual enum Acad::ErrorStatus AcDbXObject::dwgInFields(class AcDbDwgFiler *)\nenum Acad::ErrorStatus AcDbXObject::dwgOut(class AcDbDwgFiler *)\nvirtual enum Acad::ErrorStatus AcDbXObject::dwgOutFields(class AcDbDwgFiler *)\nenum Acad::ErrorStatus AcDbXObject::dxfIn(class AcDbDxfFiler *)\nvirtual enum Acad::ErrorStatus AcDbXObject::dxfInFields(class AcDbDxfFiler *)\nenum Acad::ErrorStatus AcDbXObject::dxfOut(class AcDbDxfFiler *)\nvirtual enum Acad::ErrorStatus AcDbXObject::dxfOutFields(class AcDbDxfFiler *)\nstatic class AcRxClass * AcDbXObject::gpDesc\nstatic class AcRxClass * AcDbXObject::desc(void)\nvirtual class AcRxClass * AcDbXObject::isA(void) DebugUtility Class static class AcDbDatabase * DebugUtility::xDbs(class AcDbDatabase const *)\nstatic char const * DebugUtility::dwgFileName(class AcDbDatabase const *)\nstatic class AcDbObjectId DebugUtility::fontTableId(class AcDbDatabase const *)\nstatic enum Acad::ErrorStatus DebugUtility::startHandleTableIterator(class AcDbDatabase const *)\nstatic int DebugUtility::nextHandle(class AcDbStub * \u0026amp;)\nstatic class AcRxClass * DebugUtility::FontTableRecordDesc(void)\nstatic class AcRxClass * DebugUtility::IdBufferDesc(void)\nstatic int DebugUtility::numIds(class AcDbIdBuffer const *)\nstatic class AcDbObjectId DebugUtility::id(class AcDbIdBuffer const *,int)\nstatic enum Acad::ErrorStatus DebugUtility::getPrevEntityId(class AcDbEntity const *,class AcDbObjectId \u0026amp;,int)\nstatic enum Acad::ErrorStatus DebugUtility::getNextEntityId(class AcDbEntity const *,class AcDbObjectId \u0026amp;,int) AcRxSet Class static class AcRxClass * AcRxSet::desc(void)\nvirtual class AcRxClass * AcRxSet::isA(void)\nstatic class AcRxClass * AcRxSet::gpDesc\nvirtual AcRxSet::~AcRxSet(void) AcRxStack Class static class AcRxClass * AcRxStack::desc(void)\nvirtual class AcRxClass * AcRxStack::isA(void)\nstatic class AcRxClass * AcRxStack::gpDesc AcDbImpDimStyleTableRecord Class class AcCmColor AcDbImpDimStyleTableRecord::dimclrt(void)\nclass AcCmColor AcDbImpDimStyleTableRecord::dimclre(void)\nclass AcCmColor AcDbImpDimStyleTableRecord::dimclrd(void) AcDbImpLayerTableRecord Class class AcCmColor AcDbImpLayerTableRecord::color(void) AcadAppRegistry Class virtual AcadAppRegistry::~AcadAppRegistry(void)\nint AcadAppRegistry::keyCount(void)\nAcadAppRegistry::AcadAppRegistry(void) AcDbRecoverCallback Class AcDbRecoverCallBack::AcDbRecoverCallBack(void)\nvirtual AcDbRecoverCallBack::~AcDbRecoverCallBack(void)\nvirtual enum Acad::ErrorStatus AcDbRecoverCallBack::registerCallBack(class AcDbRecover *)\nvirtual enum Acad::ErrorStatus AcDbRecoverCallBack::removeCallBack(void) AcDbDatabase Class enum AcDb::MeasurementValue AcDbDatabase::measurement(void)\nenum Acad::ErrorStatus AcDbDatabase::setMeasurement(enum AcDb::MeasurementValue) AcRxKernel Class virtual AcRxKernel::~AcRxKernel(void)\nAcRxKernel::AcRxKernel(void) Miscellaneous class AcTransactionManager * acTransactionManagerPtr(void)\nvoid `vector constructor iterator'(void *,unsigned int,int,void ( __thiscall*)(void *))\nclass AcDbHandle AcDbStub::handle(void)\nvoid AcDbAuditInfo::setCoreInfo(struct A_Flags *)\nenum AcRx::AppRetCode ( *AcRxService::dependencyFunctionPtr(void))(enum AcRx::AppMsgCode,void *)\nvoid AcRxService::setDependencyFunctionPtr(enum AcRx::AppRetCode ( *)(enum AcRx::AppMsgCode,void *)) ","permalink":"https://www.manusoft.com/develop/reference/arx2-exports/","summary":"\u003cp\u003e\u003ca id=\"Notes\" name=\"Notes\"\u003e\u003c/a\u003e\u003ch3\u003e\u003ca id=\"Notes\" name=\"Notes\"\u003eNotes\u003c/a\u003e\u003c/h3\u003e\u003c/p\u003e\n\u003cp align=\"left\"\u003eOnly R14 functions are presented at this time. Many of these exist in R13 as well, however no effort has yet been made to distinguish R14-only functions.\u003c/p\u003e\n\u003cp align=\"left\"\u003eIn case you're wondering, all this information was legally obtained using only standard programming tools. The functions (and symbols) listed below are \"exported\" from Acad.exe. An exported C++ function has its return type and argument types embedded in its name, therefore it's relatively easy to get a complete function prototype for such functions. An exported C-Style (ADS) function does not contain any information about its arguments or return types, so those functions are more difficult to prototype. Nevertheless, examination of the function's name often gives away its purpose, and this is often enough to deduce its prototype.\u003c/p\u003e","title":"Undocumented ObjectARX Functions"},{"content":"With the advent of AutoCAD 2004 and Visual Studio .NET (aka Visual Studio 2002), ObjectARX programmers are again faced with the task of moving from an older version of a compiler (VC6) to a newer version (VC7). Rather than maintain two versions of compilers and two versions of projects for supporting both AutoCAD 2000/2002 and the new AutoCAD 2004, it makes sense to use only the newest IDE to support *all* target AutoCAD platforms.\nYou can easily add build configurations in to your project VC7 so that the same project builds ObjectARX modules for both AutoCAD 2000/2002, and AutoCAD 2004, but the trick is to force VC7 to build your AutoCAD 2000/2002 target with the correct headers and libraries. In addition, you have to make sure your source code compiles correctly with both old and new ObjectARX SDK versions. This will likely require some conditional compilation if your code uses parts of the SDK that have been modified in ObjectARX 2004.\nFollowing are some tips for successfully building ObjectARX 2000/2002 projects in VC7.\nDon't put ObjectARX SDK folders into your global settings. Use the procedure outlined here to define search paths in your project properties using environment variables. Disable 'Edit and Continue' in all your AutoCAD 2000/2002 target builds. Go to project properties C/C++-\u0026gt;General and set 'Debug Information Format' to anything except 'Program Database for Edit \u0026amp; Continue' (normally Debug builds should use 'Program Database' and Release builds should use 'Disabled'). Next, go to Linker-\u0026gt;General and set 'Enable Incremental Linking' to 'No'. If you leave this option enabled, the linker pads the output file with uninitialized empty space, which causes the module validity checking in AutoCAD 2002 to choke on the file and fail to load it. Note that if you link to any libraries that were built with 'Program Database for Edit \u0026amp; Continue' enabled, the linker will warn that the /EDITANDCONTINUE switch was ignored. Just ignore the warning, or rebuild the offending library. In your project properties, specify explicit paths for include files and library files to the correct version of ObjectARX and the VC6 version of the C/C++ runtime. Following is an example that shows the settings for include directories (if this project used MFC, it would also list $(MSVC6)\\MFC\\Include). You must do the same thing in settings under Linker-\u0026gt;General for 'Additional Library Directories', except you must specify the library directory (e.g. $(ARX2000)\\Lib and $(MSVC6)\\Lib).\nVC7 includes a new feature that inserts runtime buffer overrun checks into your Release builds by default. This runtime check uses a VC7 runtime library function that is not available in VC6, so you need to disable the feature when linking with VC6 libraries. To disable it, go to project properties and select the desired configurations, then navigate to settings for C/C++-\u0026gt;Code Generation. Change the setting for 'Buffer Security Check' to 'No'*.\nChanging this setting prevents the following linker errors: error LNK2019: unresolved external symbol ___security_cookie referenced in...\nerror LNK2019: unresolved external symbol @__security_check_cookie@4 referenced in...\n* The current Microsoft Platform SDK now includes a separate library that provides implementations for these functions. Just link to bufferoverflowu.lib to resolve them correctly, with no need to turn off this new compiler feature (see KB894573). In VC6, casting a floating point number to a long caused the compiler to generate a call to a hidden library function named _ftol. VC7 generates a call to _ftol2 (obviously the implementation of this function changed, so the name was changed to prevent version clashes). If your source code includes a cast from double to long types, VC7 will generate a call to _ftol2, and the following linker error will result: error LNK2001: unresolved external symbol __ftol2\nResolve this error by placing the following in one of your .cpp files (StdAfx.cpp, for example):\n#if (_MSC_VER \u0026gt;= 1300) \u0026amp;\u0026amp; (_MSC_VER \u0026lt; 1400) \u0026amp;\u0026amp; (WINVER \u0026lt; 0x0500)\n//VC7 or 7.1, building with pre-VC7 runtime libraries\nextern \"C\" long _ftol( double ); //defined by VC6 C libs\nextern \"C\" long _ftol2( double dblSource ) { return _ftol( dblSource ); }\n#endif If you use the /DELAYLOAD linker feature to delay-load implicitly linked DLLs, you will encounter the following linker errors when linking to VC6 libraries: error LNK2001: unresolved external symbol ___delayLoadHelper2@8\nerror LNK2001: unresolved external symbol ___delayLoadHelper2@8\nThese errors are caused by a change in the delay load helper function in VC7, that was in turn the result of a change in the delay load import descriptor that the linker embeds inside the image file. Microsoft renamed the function to prevent the possibility of the new format produced by the VC7 linker being linked with the old helper function (that expects the old format). Unfortunately, AutoCAD's [brain dead] module validity testing chokes on the new delay load import descriptor format.\nThe solution to this problem is twofold: first make the linker happy by linking to the new VC7 delayimp.lib; second, postprocess the linker-created .arx module to hide the delay load import descriptor so AutoCAD can't choke on it.\nThe first part of the solution involves renaming the VC6 delayimp.lib file* so VC7 doesn't find that one, and uses it's own version instead. The file is located in VC98\\Lib. I renamed mine to VC6.delayimp.lib.\n* Arnold Eibel sent me an email with a better solution: instead of renaming the VC6 delayimp.lib, just specify an explicit path to the correct file to use. Arnold's suggestion is to use \"$(VcInstallDir)lib\\delayimp.lib\", thus making the path portable to future versions of VC. The second part of the solution is not as difficult as it sounds. I made a command line utility to remove the delay load import directory from the file. This won't affect the file's operation at all, but it will prevent PE file viewers (such as Dependency Walker) from being aware of the delay loaded dependencies. Simply download the utility (96k) and place it somewhere in your VC7 support path (i.e. VC7\\Bin) or better yet put it in its own folder and add the new folder to the path for executables in VC7 global options. Next, add a post build step to run the conversion utility on the target module. Do this in settings for Build Events-\u0026gt;Post-Build Event, and add this to the 'Command Line' setting:\nHideDelayLoadImports.exe \"$(TargetPath)\" These are the problems I have encountered so far in my conversion process. As I encounter new problems, I will add my solutions to this list of tips. If you have additions or comments, please don't hesitate to contact me via email (but please understand that sometimes I can't reply to every email I receive).\n","permalink":"https://www.manusoft.com/develop/objectarx/vc7-arx-2000/","summary":"\u003cp\u003eWith the advent of AutoCAD 2004 and Visual Studio .NET (aka Visual Studio 2002), ObjectARX programmers are again faced with the task of moving from an older version of a compiler (VC6) to a newer version (VC7). Rather than maintain two versions of compilers and two versions of projects for supporting both AutoCAD 2000/2002 and the new AutoCAD 2004, it makes sense to use only the newest IDE to support *all* target AutoCAD platforms.\u003c/p\u003e","title":"Using VC 7 to Build For AutoCAD 2000/2002"},{"content":"A common complaint among ObjectARX programmers is that Visual C/C++ doesn't display IntelliSense context menus for classes defined in the ObjectARX headers. The trick is to include all the ObjectARX headers files somewhere in your solution. I created a new folder called ARXHeaders with subdirectories for every version of the ObjectARX SDK.\nIn each subdirectory, create a new empty static library project named e.g. 'ARX2007' and add every header file (*.h) from that version of the ObjectARX SDK to the project. It's important to give each project a unique name so that the project names don't collide when more than one is added to a single solution. Since there are no source files, there is no output file for these projects, and building them is a no-op. Nevertheless, adding one of these projects to an existing solution causes VC to \"see\" the ObjectARX classes and code definitions for use in IntelliSense. Another benefit of including the ObjectARX headers in the solution is the ability to use the class browser in VC to browse the ObjectARX SDK. Browsing can reveal some interesting undocumented functions, and it also proves very useful for providing a readable overview of class hierarchies and object definitions.\nIn projects that target multiple versions of AutoCAD (and therefore use multiple versions of the ObjectARX SDK) you can add the ARXHeaders project for each target version of ObjectARX. While adding multiple SDK versions won't tell VC which version of the SDK is used in a given source file or project, it does make each version separately available in the VC class browser for easy browsing.\n","permalink":"https://www.manusoft.com/develop/objectarx/browse-arx/","summary":"\u003cp\u003eA common complaint among ObjectARX programmers is that Visual C/C++ doesn't display IntelliSense context menus for classes defined in the ObjectARX headers. The trick is to include all the ObjectARX headers files somewhere in your solution. I created a new folder called \u003cstrong\u003eARXHeaders\u003c/strong\u003e with subdirectories for every version of the ObjectARX SDK.\u003c/p\u003e","title":"Enabling IntelliSense and ObjectARX Class Browsing"},{"content":"Despite the minor numerical change from Visual C/C++ version 7 to 7.1, Microsoft made some major changes in the compiler and linker in order to become more C++ standard compliant. These changes make it virtually impossible to use 7.1 to build for ObjectARX 2004 and earlier ObjectARX versions. The new compiler chokes on the earlier versions of ATL and MFC libraries because they were not standard compliant, yet these are required when building for ObjectARX because of its reliance upon Autodesk libraries. What's more, the tricks outlined here are not enough to solve this problem.\nThe new features in the VC 7.1 IDE (not to mention the bug fixes) make it more desirable than VC 7. For that reason I wrote VC Build Hook, a small add-in for VC 7.1 that solves the compiler version problem by automatically switching the environment path to the VC 7 build tool directories at build time. This causes the build process to use the VC 7 build tools instead of the incompatible ones that shipped with VC 7.1. Note that you must have a working Visual C/C++ 7 (Visual Studio .NET 2002) installation in order for the path switching to work. If you only have Visual C/C++ 7.1 available, you must purchase the downgrade to Visual C/C++ 7 and install it also, otherwise the required VC 7 build tools won't be available on your system. This feature can be enabled for an entire solution or for individual projects.\nSee this page for information about using the VC Build Hook utility.\n","permalink":"https://www.manusoft.com/develop/objectarx/vc71-arx-2004/","summary":"\u003cp\u003eDespite the minor numerical change from Visual C/C++ version 7 to 7.1, Microsoft made some major changes in the compiler and linker in order to become more C++ standard compliant. These changes make it virtually impossible to use 7.1 to build for ObjectARX 2004 and earlier ObjectARX versions. The new compiler chokes on the earlier versions of ATL and MFC libraries because they were not standard compliant, yet these are required when building for ObjectARX because of its reliance upon Autodesk libraries. What's more, the tricks outlined \u003ca href=\"/develop/objectarx/vc7-arx-2000/\"\u003ehere\u003c/a\u003e are not enough to solve this problem.\u003c/p\u003e","title":"Using VC 7.1 to Build for AutoCAD 2000/2002/2004"},{"content":"Periscope, QuikPik, and SuperPurge have been updated for AutoCAD 2027.\n","permalink":"https://www.manusoft.com/news/2026-04-05-autocad-2027/","summary":"\u003cp\u003e\u003ca href=\"/resources/apps/periscope/\"\u003ePeriscope\u003c/a\u003e, \u003ca href=\"/resources/apps/quikpik/\"\u003eQuikPik\u003c/a\u003e, and \u003ca href=\"/resources/apps/superpurge/\"\u003eSuperPurge\u003c/a\u003e have been updated for AutoCAD 2027.\u003c/p\u003e","title":"Periscope, QuikPik, SuperPurge support AutoCAD 2027"},{"content":"The store and checkout flows are retired. Download current versions from the app pages. Customer accounts and purchase histories are no longer available.\n","permalink":"https://www.manusoft.com/news/2026-01-01-freeware/","summary":"\u003cp\u003eThe store and checkout flows are retired. Download current versions from the \u003ca href=\"/resources/apps/\"\u003eapp\u003c/a\u003e pages. Customer accounts and purchase histories are no longer available.\u003c/p\u003e","title":"All ManuSoft software is now freeware"},{"content":"Periscope 7.0 was released with support for AutoCAD 2026.\n","permalink":"https://www.manusoft.com/news/2025-04-06-periscope-autocad-2026/","summary":"\u003cp\u003e\u003ca href=\"/resources/apps/periscope/\"\u003ePeriscope\u003c/a\u003e 7.0 was released with support for AutoCAD 2026.\u003c/p\u003e","title":"Periscope Supports AutoCAD 2026"},{"content":"QuikPik 6.0 was released with support for AutoCAD 2026.\n","permalink":"https://www.manusoft.com/news/2025-04-06-quikpik-autocad-2026/","summary":"\u003cp\u003e\u003ca href=\"/resources/apps/quikpik/\"\u003eQuikPik\u003c/a\u003e 6.0 was released with support for AutoCAD 2026.\u003c/p\u003e","title":"QuikPik Supports AutoCAD 2026"},{"content":"An update to SuperPurge 2.0.109 was released with support for AutoCAD 2026.\n","permalink":"https://www.manusoft.com/news/2025-04-06-superpurge-autocad-2026/","summary":"\u003cp\u003eAn update to \u003ca href=\"/resources/apps/superpurge/\"\u003eSuperPurge\u003c/a\u003e 2.0.109 was released with support for AutoCAD 2026.\u003c/p\u003e","title":"SuperPurge Supports AutoCAD 2026"},{"content":"My blogging has taken a nosedive in recent years, but I’m happy to report that I am doing great. I’ve been 100% focused on making sure there’s a viable alternative DWG platform for all you lost, lonely, and depressed CAD users out there. I’m going to keep this short and sweet, because as I write this I am still 100% focused on the task: putting finishing touches on BricsCAD V19 to be released “soon”.\nI’ll get straight to the point. Yes, Bricsys has been acquired by Hexagon (https://blog.bricsys.com/hexagon-acquires-bricsys/), but you would hardly know this if you worked inside Bricsys. Inside the company, the same people are doing the same work today that they were doing last month. Literally nothing has changed, at least not yet. Bricsys will change, yes, and nobody can be sure just how it will change, but I assure you that my focus will not change.\nLook, the AutoCAD writing is on the wall. Life in the nursing home has not been kind to AutoCAD, and things are only going to get worse as Autodesk turns up the morphine drip. I’ve said for years that BricsCAD is the best alternative, and today it is more true than ever. To steal a line from Bricsys CEO Erik de Keyser, BricsCAD is not a clone, but a cyclone!\n","permalink":"https://www.manusoft.com/archive/blog/bones_clones_cyclones/","summary":"\u003cp\u003eMy blogging has taken a nosedive in recent years, but I’m happy to report that I am doing great. I’ve been 100% focused on making sure there’s a viable alternative DWG platform for all you lost, lonely, and depressed CAD users out there. I’m going to keep this short and sweet, because as I write this I am still 100% focused on the task: putting finishing touches on BricsCAD V19 to be released “soon”.\u003c/p\u003e","title":"Bones, clones, and cyclones"},{"content":"Are you looking for a way to turn off the annoying InfoCenter that slows down (or sometimes locks up) your AutoCAD? Of course you are! Hop on over to the ManuSoft Freebies page and install AcadInfoCenterOff.msi, the most popular ManuSoft download of all time.\n2017-03-21: Now updated with support for AutoCAD 2018 and AutoCAD LT 2018!\n","permalink":"https://www.manusoft.com/archive/blog/turning-off-infocenter-in-autocad/","summary":"\u003cp\u003eAre you looking for a way to turn off the annoying InfoCenter that slows down (or sometimes locks up) your AutoCAD? Of course you are! Hop on over to the ManuSoft \u003ca href=\"/resources/freebies/misc/\"\u003eFreebies page\u003c/a\u003e and install AcadInfoCenterOff.msi, the most popular ManuSoft download of all time.\u003c/p\u003e","title":"Turning off InfoCenter in AutoCAD"},{"content":"I have updated the automatic lisp loader modules (LspLoad.zip on my freebies page) to support BricsCAD V17 and ZWCAD 2017. Note that the source code for LspLoad is also available.\n","permalink":"https://www.manusoft.com/archive/blog/lspload-updated-bcad17-zwcad2017/","summary":"\u003cp\u003eI have updated the automatic lisp loader modules (LspLoad.zip on my \u003ca href=\"/resources/freebies/arx/\" title=\"ADS / ObjectARX Freebies\"\u003efreebies page\u003c/a\u003e) to support BricsCAD V17 and ZWCAD 2017. Note that the source code for LspLoad is \u003ca href=\"/develop/objectarx/demand-load-vlx/\" title=\"Demand Loading a LISP File\"\u003ealso available\u003c/a\u003e.\u003c/p\u003e","title":"LspLoad updated for BricsCAD 17 and ZWCAD 2017"},{"content":"The ManuSoft web server has been humming along steadily for the last 7 years on an old Compaq server running Windows 2008. You may have noticed that it\u0026#8217;s currently offline. Actually the server is still humming along just fine \u0026#8211; it\u0026#8217;s just that nobody can connect to it.\nI had some connections with the IT guy at a local printing business, and for practically no cost I had been using two static IP addresses over their T1 connection. Unfortunately the IT guy has since moved on, leaving nobody there with the ability to manage my connection. My sweet deal was destined to collapse eventually. That\u0026#8217;s exactly what happened last week when they had some configuration changes made to their network.\nI\u0026#8217;ve now moved this blog to the cloud (Windows Azure), and I will be moving the rest of the services to the cloud over the next week or two. Wish me luck!\n","permalink":"https://www.manusoft.com/archive/blog/service-interruptus/","summary":"\u003cp\u003eThe ManuSoft web server has been humming along steadily for the last 7 years on an old Compaq server running Windows 2008. You may have noticed that it\u0026#8217;s currently offline. Actually the server is still humming along just fine \u0026#8211; it\u0026#8217;s just that nobody can connect to it.\u003c/p\u003e","title":"Service Interruptus"},{"content":"Although my blog has become relatively stagnant, the rest of my life has been changing \u0026#8212; and there are even bigger changes ahead.\nMy children have been growing into adulthood one by one, and my parenting time has been shrinking as a result. To take up the slack, I bought a bike a few years ago and started riding it on the many local bike trails. Initially cycling was a way to get healthy and enjoy the outdoors, but it has turned into much more. Riding a bike is great exercise, but it\u0026#8217;s also a fantastic social activity when you do it with friends, and I have made many new friends in the very large and growing cycling community here in Ohio.\nThe last few years I\u0026#8217;ve also been racing my bike competitively in the many amateur bicycle races held during the spring and summer. I never played organized sports as a kid, so this has given me an avenue to explore an unfamiliar side of myself.\nWhile cycling has changed my life in many ways, even bigger personal changes are on the horizon. I\u0026#8217;ve been divorced (or as I often say, \u0026#8220;married to my bike\u0026#8221;) for many years, but even that will be changing later this year \u0026#8212; unless she changes her mind before we seal the deal.\nIn addition to the many personal changes, I\u0026#8217;m also making some professional changes. I\u0026#8217;ve accepted a contract offer to join the software development team of Belgium based Bricsys, maker of BricsCAD. I will continue my philanthropic work, including work on the OpenDCL project and my participation in online ObjectARX, AutoLISP, and C++ programming forums. I will continue maintaining and supporting ManuSoft software products. I will even continue blogging here and writing for upFront.eZine (http://www.upfrontezine.com/), but maybe my focus will shift a bit.\nI\u0026#8217;m looking forward to all these new challenges, and excited to see where this new road leads. Thank you for travelling with me!\n","permalink":"https://www.manusoft.com/archive/blog/ch-ch-ch-ch-changes/","summary":"\u003cp\u003eAlthough my blog has become relatively stagnant, the rest of my life has been changing \u0026#8212; and there are even bigger changes ahead.\u003c/p\u003e\n\u003cp\u003eMy children have been growing into adulthood one by one, and my parenting time has been shrinking as a result. To take up the slack, I bought a bike a few years ago and started riding it on the many local bike trails. Initially cycling was a way to get healthy and enjoy the outdoors, but it has turned into much more. Riding a bike is great exercise, but it\u0026#8217;s also a fantastic social activity when you do it with friends, and I have made many new friends in the very large and growing cycling community here in Ohio.\u003c/p\u003e","title":"Ch-Ch-Ch-Ch-Changes"},{"content":"I’ve updated QuirkyPolyline and added support for Bricscad 14 – 15 and ZWCAD+ 2014 – 2015. The new QuirkyPolyline download is available on the ObjectARX freebies page.\n","permalink":"https://www.manusoft.com/archive/blog/quirkypolyline-updated-for-bricscad-and-zwcad/","summary":"\u003cp\u003eI’ve updated \u003ca href=\"/2013/01/quirkypolyline-exposing-foolish-programmers.htm\"\u003eQuirkyPolyline\u003c/a\u003e and added support for Bricscad 14 – 15 and ZWCAD+ 2014 – 2015. The new QuirkyPolyline download is available on the \u003ca href=\"/resources/freebies/arx/\"\u003eObjectARX freebies page\u003c/a\u003e.\u003c/p\u003e","title":"QuirkyPolyline updated for Bricscad and ZWCAD+"},{"content":"New Visual Studio C/C++ users sometimes get tripped up by IntelliSense errors, so today I\u0026#8217;ve decided to share the secret, undocumented solution: just turn them off!\nIntelliSense is a nice user interface feature when it works, but it has nothing whatever to do with building and running your C/C++ code. IntelliSense errors do not equal compiler errors, and trying to \u0026#8220;fix\u0026#8221; them is fruitless.\nSimply right-click anywhere on the Visual Studio error list (the click must be inside the list, not outside), then uncheck \u0026#8220;Show IntelliSense Errors\u0026#8221;. Problem solved!\nThere is one small irritating issue with this solution: your setting is not persisted in the registry, so the errors have to be turned off every time you start Visual Studio.\n","permalink":"https://www.manusoft.com/archive/blog/how-to-fix-intellisense-errors/","summary":"\u003cp\u003eNew Visual Studio C/C++ users sometimes get tripped up by IntelliSense errors, so today I\u0026#8217;ve decided to share the secret, undocumented solution: \u003cem\u003ejust turn them off!\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://learn.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/hcw1s69b(v=vs.100)\" target=\"_blank\"\u003eIntelliSense\u003c/a\u003e is a nice user interface feature when it works, but it has nothing whatever to do with building and running your C/C++ code. IntelliSense errors do not equal compiler errors, and trying to \u0026#8220;fix\u0026#8221; them is fruitless.\u003c/p\u003e","title":"How to fix IntelliSense errors in Visual Studio"},{"content":"Recently I had to debug an intermittent access violation exception in one of my AutoCAD plug-ins. I needed to get the exception while the debugger was attached so I could break the process and analyze the state of memory before AutoCAD\u0026#8217;s global exception handler got control. Unfortunately, sometimes it took several hundred runs before the exception occurred.\nTo make matters worse, AutoCAD was throwing exceptions on shutdown that had nothing to do with my code. If I started AutoCAD manually under the Visual Studio debugger, I had to dismiss those shutdown exceptions manually every time. I needed a way to script the task of starting AutoCAD under the debugger hundreds of times in a row until the exception finally occurred.\nAfter some futile attempts to script the Visual Studio debugger, I decided to just write my own custom debugger. With my own custom debugger, I could easily write code to decide at runtime which exceptions to ignore and which were of interest. The exception I was interested in always occurred while accessing a memory location that ended in 0x30, so my custom debugger ignores access violations that don\u0026#8217;t fit the pattern.\nI had also planned to see if I could suspend the main thread, detach my custom debugger, and manually attach the Visual Studio debugger when my target exception was triggered so that I could utilize the more advanced VS debugger UI. In the end I never got around to trying the debugger switch because I discovered the problem by simply displaying some relevant details in a simple message box when the target exception occurred.\nAs you can see, I hardcoded the application path and command line, which includes a script file that simply quit AutoCAD after it started. I then used a batch file to run the custom debugger in a loop, thereby starting and quitting AutoCAD each time through the loop. I made this debugger a console app, but it could just as well be a window app.\nI don\u0026#8217;t claim to know anything about writing debuggers; this is just something I cobbled together after doing a bit of searching on the web. I decided to share the code in case someone else runs into a similar debugging scenario.\nint _tmain(int argc, _TCHAR* argv[]) { STARTUPINFO si; ZeroMemory( \u0026amp;si, sizeof(si) ); si.cb = sizeof(si); PROCESS_INFORMATION pi; ZeroMemory( \u0026amp;pi, sizeof(pi) ); static TCHAR szCmdLine[] = _T(\" /nologo /b C:\\\\Test\\\\quit.scr\"); CreateProcess( _T(\"C:\\\\Program Files\\\\Autodesk\\\\AutoCAD 2014\\\\acad.exe\"), szCmdLine, NULL, NULL, FALSE, DEBUG_ONLY_THIS_PROCESS, NULL, NULL, \u0026amp;si, \u0026amp;pi ); DWORD dwContinueStatus = DBG_CONTINUE; DEBUG_EVENT debug_event = {0}; bool bFirstBreakpoint = false; bool bContinueDebugging = true; while( bContinueDebugging ) { if( !WaitForDebugEvent( \u0026amp;amp;debug_event, INFINITE ) ) return 0; //process event switch( debug_event.dwDebugEventCode ) { case EXIT_PROCESS_DEBUG_EVENT: { bContinueDebugging = false; } break; case EXCEPTION_DEBUG_EVENT: { dwContinueStatus = DBG_EXCEPTION_NOT_HANDLED; EXCEPTION_DEBUG_INFO\u0026amp;amp; exception = debug_event.u.Exception; switch( exception.ExceptionRecord.ExceptionCode ) { case STATUS_BREAKPOINT: { if( !bFirstBreakpoint ) { bFirstBreakpoint = true; break; } dwContinueStatus = DBG_EXCEPTION_HANDLED; DebugActiveProcessStop(pi.dwProcessId); bContinueDebugging = false; MessageBox(NULL, _T(\u0026quot;Debug break!\u0026quot;), _T(\u0026quot;Breakpoint\u0026quot;), MB_OK); } break; case STATUS_ACCESS_VIOLATION: if( exception.dwFirstChance == 1 ) { if( ((DWORD_PTR)exception.ExceptionRecord.ExceptionAddress \u0026amp;amp; 0xFF) == 0x30 ) { DebugActiveProcessStop(pi.dwProcessId); DWORD64 Rip = (DWORD64)-1; HANDLE hThread = OpenThread( THREAD_ALL_ACCESS, FALSE, debug_event.dwThreadId ); CONTEXT Context; Context.ContextFlags = CONTEXT_ALL; if( GetThreadContext(hThread, \u0026amp;amp;Context) ) Rip = Context.Rip; MEMORY_BASIC_INFORMATION mbi = { 0 }; VirtualQueryEx( pi.hProcess, exception.ExceptionRecord.ExceptionAddress, \u0026amp;amp;mbi, 0x36 ); TCHAR szMsg[4096]; _stprintf_s( szMsg, _T(\u0026quot;Access violation (%016p) at address %016p\\r\\nMem State:\\r\\nBaseAddress=%016p\\r\\nAllocationBase=%016p\\r\\nAllocationProtect=%08x\\r\\nRegionSize=%08x\\r\\nState=%08x\\r\\nProtect=%08x\\r\\nType=%08x\u0026quot;), exception.ExceptionRecord.ExceptionCode, exception.ExceptionRecord.ExceptionAddress, mbi.BaseAddress, mbi.AllocationBase, mbi.AllocationProtect, mbi.RegionSize, mbi.State, mbi.Protect, mbi.Type ); MessageBox( NULL, szMsg, _T(\u0026quot;Exception\u0026quot;), MB_OK ); } bContinueDebugging = false; } break; default: break; } } break; } ContinueDebugEvent( debug_event.dwProcessId, debug_event.dwThreadId, dwContinueStatus ); } return 0; } ","permalink":"https://www.manusoft.com/archive/blog/writing-a-custom-debugger-on-windows/","summary":"\u003cp\u003eRecently I had to debug an intermittent access violation exception in one of my AutoCAD plug-ins. I needed to get the exception while the debugger was attached so I could break the process and analyze the state of memory before AutoCAD\u0026#8217;s global exception handler got control. Unfortunately, sometimes it took several hundred runs before the exception occurred.\u003c/p\u003e","title":"Writing a Custom Debugger on Windows"},{"content":"AutoCAD 2015 includes a new feature called Application Manager (http://help.autodesk.com/view/INSTALL_LICENSE/2015/ENU/?guid=GUID-448769B1-CA69-4566-9EAF-D97DBD85AF88). I\u0026#8217;m sure it serves a lofty purpose, but it comes across a lot like the slimy Norton and Adobe updaters that are really just Trojans in disguise. It gets installed by default, with no option to prevent installation. To Autodesk\u0026#8217;s credit, they do provide instructions for preventing installation of Application Manager (http://help.autodesk.com/view/INSTALL_LICENSE/2015/ENU/?guid=GUID-FAB40CCD-0A6C-4E55-A994-0D237CD954A2), and instructions for removing it after the fact (http://help.autodesk.com/view/INSTALL_LICENSE/2015/ENU/?guid=GUID-D2340FA4-3A0C-4B7C-9558-EB50F6402472). Uninstalling requires several additional clicks, as if they really, really want you to think twice before taking such a drastic measure.\nI don\u0026#8217;t want anything starting when I log into Windows except the bare minimum, so I uninstalled Application Manager forthwith. It can be installed and started manually if I decide to use it later.\nIf you decide to use Application Manager, there are some configurable settings. There is even a UI for most of the settings (such as disabling the automatic startup), but there\u0026#8217;s a catch: to use the UI for changing settings, you first have to agree to the Autodesk Privacy Statement (and give Autodesk access to information about your installed software). I\u0026#8217;m sure this is just an oversight, but the paranoid will not find it comforting.\nApplication Manager settings are stored in a plain text file, located by default at:\n%AppData%\\Autodesk\\Autodesk Application Manager.ini If you don\u0026#8217;t want to agree to Autodesk\u0026#8217;s terms, you can still change settings by editing the .ini file in a text editor like Notepad (just enter the file path above in Start -\u0026gt; Run). For example, change the line to AutoRun=false if you want to disable \u0026#8220;Automatically start when you log into the computer\u0026#8221;. Note that this setting is somewhat misleading: Application Manager always starts regardless, but it quickly exits again if AutoRun is set to false. If you already agreed to the privacy policy, but have since changed your mind, you can set PrivacyPolicyLevel=0.\n","permalink":"https://www.manusoft.com/archive/blog/autocad-2015-managing-the-application-manager/","summary":"\u003cp\u003eAutoCAD 2015 includes a new feature called Application Manager (http://help.autodesk.com/view/INSTALL_LICENSE/2015/ENU/?guid=GUID-448769B1-CA69-4566-9EAF-D97DBD85AF88). I\u0026#8217;m sure it serves a lofty purpose, but it comes across a lot like the slimy Norton and Adobe updaters that are really just Trojans in disguise. It gets installed by default, with no option to prevent installation. To Autodesk\u0026#8217;s credit, they do provide instructions for preventing installation of Application Manager (http://help.autodesk.com/view/INSTALL_LICENSE/2015/ENU/?guid=GUID-FAB40CCD-0A6C-4E55-A994-0D237CD954A2), and instructions for removing it after the fact (http://help.autodesk.com/view/INSTALL_LICENSE/2015/ENU/?guid=GUID-D2340FA4-3A0C-4B7C-9558-EB50F6402472). Uninstalling requires several additional clicks, as if they really, really want you to think twice before taking such a drastic measure.\u003c/p\u003e","title":"AutoCAD 2015: Managing the Application Manager"},{"content":"Rumors about the death of AutoLISP have been floating around for many years, but fear not, those rumors are greatly exaggerated. Bricscad and ZWCAD both have excellent support for lisp plugins, so well-written lisp code is truly cross-platform and enjoys a large and growing audience. Unlike other languages, the vast majority of lisp code works unmodified on any hardware architecture, in any version of Windows, and inside any host application that supports it, including AutoCAD versions released more than a decade ago. On top of that, OpenDCL gives lisp developers the power of a modern event-driven user interface that can put their lisp plugins on the same playing field as plugins written in any other language. This is a powerful combination, and given lisp\u0026rsquo;s low entry cost, it is not surprising to see lisp continuing to enjoy strong support in the developer community.\nThere\u0026rsquo;s just one thing missing: an easy way to install a lisp plugin on an end user\u0026rsquo;s computer. It\u0026rsquo;s a common refrain. How do you build a setup program for a lisp plugin? There are any number of free and low-cost installers available, but they are all designed for installing an executable program, not a plugin that must be configured to run inside a completely independent host application.\nAt one time there was a package called AcadInstall that was designed for AutoCAD add-ons, but that tool is long defunct. Autodesk has invented application bundles with the supposed benefit of making it easier to install and manage plugins, but these are not well documented and only work with recent versions of AutoCAD. For ManuSoft plugins, I use Visual Studio\u0026rsquo;s Setup and Deployment projects along with an extensive amount of custom C++ code to perform all the configuration necessary at install time. This works great for my needs, but it is well beyond the ability of most lisp developers.\nAfter several recent online discussions with lisp developers struggling to get a working setup program, I set out to find a solution to this vexing problem. It turns out that after some initial work it\u0026rsquo;s actually not that hard to pull off a very professional looking setup program for a basic lisp plugin. In fact, if you follow these steps, in less than 10 minutes (5 minutes if you have a fast internet connection) you will have a working setup that installs a lisp plugin on any version of AutoCAD, any version of Bricscad, and ZWCAD+ 2014. The best part: everything you need is free (as in beer)!\nSo, let\u0026rsquo;s get to it.\nDownload and install Unicode Inno Setup QuickStart Pack from the Inno Setup Downloads page. Download my LispPluginSetup freebie and extract the files into a new folder somewhere. Download my LspLoad freebie and extract the files into a new subfolder named LspLoad. Double click on MyLispPlugin.iss. It should open in Inno Script Studio. Choose Project -\u0026gt; Compile. At this point you should have a new Output subfolder with MyLispPluginSetup.exe inside. Go ahead, run it. After you\u0026rsquo;ve installed the MyPlugin sample, start the host application of your choice (the setup program configures all of them). If all went well, MyLispPlugin should display a command line message at startup alerting you to the fact that MYCOMMAND1 and MYCOMMAND2 are now available for use. Go ahead, try them. When you\u0026rsquo;re finished playing, it should uninstall cleanly (except for the new addition to TRUSTEDPATHS in AutoCAD 2014) when you choose Start -\u0026gt; MyCompany -\u0026gt; MyLispPlugin -\u0026gt; Uninstall My Lisp Plugin.\nThat was almost too easy, right? Well, not so fast. You\u0026rsquo;ll need to make some changes to adapt the sample for your own plugin. Take a look at the installation script in Inno Script Studio. Click on the Inno Setup Script item in the project tree to see the entire script as a flat file. Right near the top of the script, it should be obvious that you\u0026rsquo;ll need to change the basic plugin information preprocessor constants to adapt the script for your own plugin. Obviously your plugin will have a different base filename, and quite probably more files. It may have more registry keys and other basic setup stuff. In addition, you may not want to support all possible versions and flavors of each host app (in that case you\u0026rsquo;ll need to comment out or remove the associated item in the Files section). You get the idea, I\u0026rsquo;m sure.\nStep 5 is modifying the sample script to adapt it for your own plugin. So easy, even an engineer could do it!\n","permalink":"https://www.manusoft.com/archive/blog/building-a-commercial-grade-lisp-plugin-installer-in-5-easy-steps/","summary":"\u003cp\u003eRumors about the death of AutoLISP have been floating around for many years, but fear not, those rumors are greatly exaggerated. Bricscad and ZWCAD both have excellent support for lisp plugins, so well-written lisp code is truly cross-platform and enjoys a large and growing audience. Unlike other languages, the vast majority of lisp code works unmodified on any hardware architecture, in any version of Windows, and inside any host application that supports it, including AutoCAD versions released more than a decade ago. On top of that, \u003ca href=\"https://www.opendcl.com/\" target=\"_blank\"\u003eOpenDCL\u003c/a\u003e gives lisp developers the power of a modern event-driven user interface that can put their lisp plugins on the same playing field as plugins written in any other language. This is a powerful combination, and given lisp\u0026rsquo;s low entry cost, it is not surprising to see lisp continuing to enjoy strong support in the developer community.\u003c/p\u003e","title":"Building a commercial grade lisp plugin installer in 5 easy steps"},{"content":"One of the cardinal rules of C++ exception handling is \u0026ldquo;don\u0026rsquo;t catch what you can\u0026rsquo;t handle\u0026rdquo;. Of course there are always, er, exceptions to the rule, but the basic principle always holds. The consequences of violating the rule are less severe in the .NET world, but even there it\u0026rsquo;s a good rule of thumb.\nBack in the old days you needed permission from a deity before you could use catch(\u0026hellip;) to catch all exceptions. By the turn of the century, an Executive Order was sufficient. These days I see posts all the time on programming forums that go something like \u0026ldquo;My plugin crashes when I call ThirdParty::Function(). How can I catch all exceptions in ThirdParty.dll?\u0026rdquo; Bzzzt. Foolish programmer alert!\nThe .NET framework allows exceptions to be used for signaling, so inexperienced programmers often think that\u0026rsquo;s how they work in C++ as well. I think this is a case where the less rigorous .NET programming model bleed-over effect has negatively impacted C++ programming.\n","permalink":"https://www.manusoft.com/archive/blog/dont-catch-what-you-cant-handle/","summary":"\u003cp\u003eOne of the cardinal rules of C++ exception handling is \u003cem\u003e\u0026ldquo;don\u0026rsquo;t catch what you can\u0026rsquo;t handle\u0026rdquo;\u003c/em\u003e. Of course there are always, er, exceptions to the rule, but the basic principle always holds. The consequences of violating the rule are less severe in the .NET world, but even there it\u0026rsquo;s a good rule of thumb.\u003c/p\u003e","title":"Don't catch what you can't handle"},{"content":"I have updated the automatic lisp loader modules (LspLoad.zip on my freebies page) to support Bricscad V14 and ZWCAD+ 2014. Note that the source code for Lspload is also available.\n","permalink":"https://www.manusoft.com/archive/blog/lspload-now-supports-bricscad-v14-and-zwcad-2014/","summary":"\u003cp\u003eI have updated the automatic lisp loader modules (LspLoad.zip on my \u003ca href=\"/resources/freebies/arx/\" title=\"ADS / ObjectARX Freebies\"\u003efreebies page\u003c/a\u003e) to support Bricscad V14 and ZWCAD+ 2014. Note that the source code for Lspload is \u003ca href=\"/develop/objectarx/demand-load-vlx/\" title=\"Demand Loading a LISP File\"\u003ealso available\u003c/a\u003e.\u003c/p\u003e","title":"LspLoad now supports Bricscad V14 and ZWCAD+ 2014"},{"content":"The automatic lisp loader modules (LspLoad.zip on my freebies page) have been updated to add support for AutoCAD 2014 and Bricscad 13 64-bit. The modules are now digitally signed so that AutoCAD 2014 loads them quietly.\n","permalink":"https://www.manusoft.com/archive/blog/lspload-updated-for-autocad-2014-and-bricscad-13-64-bit/","summary":"\u003cp\u003eThe \u003ca href=\"/2009/12/automatic-lisp-loading.htm\"\u003eautomatic lisp loader modules\u003c/a\u003e (LspLoad.zip on my \u003ca href=\"/resources/freebies/arx/\"\u003efreebies page\u003c/a\u003e) have been updated to add support for AutoCAD 2014 and Bricscad 13 64-bit. The modules are now digitally signed so that AutoCAD 2014 loads them quietly.\u003c/p\u003e","title":"LspLoad Updated for AutoCAD 2014 and Bricscad 13 64-bit"},{"content":"The AcadInfoCenterOff.msi file on the ManuSoft Freebies page has been updated to support AutoCAD 2014 based products. Note that you must log out of Autodesk 360 if you disable the InfoCenter, else some versions of AutoCAD will crash during startup.\n","permalink":"https://www.manusoft.com/archive/blog/turning-off-infocenter-in-autocad-2014/","summary":"\u003cp\u003eThe AcadInfoCenterOff.msi file on the ManuSoft \u003ca href=\"/resources/freebies/misc/\"\u003eFreebies page\u003c/a\u003e has been updated to support AutoCAD 2014 based products. Note that you must log out of Autodesk 360 if you disable the InfoCenter, else some versions of AutoCAD will crash during startup.\u003c/p\u003e","title":"Turning off InfoCenter in AutoCAD 2014"},{"content":"Creating and calling functions is one of the most fundamental tasks in C++ programming. The function declaration serves as the primary description of a function\u0026rsquo;s interface - or contract - with callers, thereby making it the most important piece of code documentation. A good function declaration should convey as much information as possible. I\u0026rsquo;m sure an entire book could be written on the topic of function interface design, but I\u0026rsquo;ll just touch briefly on a few factors to consider when designing a function\u0026rsquo;s interface.\nError handling Simple one-purpose functions should leave all or most error handling to the caller. This is more efficient because it eliminates error checking overhead on \u0026ldquo;known good\u0026rdquo; input values. A common pattern is a low level function that performs no input validation along with a high level function that does (and then calls the low level function to do the work). Such a design pattern gives the caller maximum flexibility.\nIf the function must return error (or other status) values, it should do so via the return value whenever possible, and it should define an enum or type alias (typedef) so that the return value type name makes it clear that the value is a status. Note that using the return value as a status may necessitate extra arguments passed by reference so the function has a way to return a result to the caller without using the return value.\nSigned vs. unsigned Consider this function:\nint CountWords(char* pszInputString);\nThe int type is a signed value, but a count is always zero or greater. The return value should at least be unsigned int, or better yet size_t:\nsize_t CountWords(char* pszInputString);\nLikewise, arguments that must never be negative should always be declared as an unsigned type.\nBy value or by reference If the caller needs to pass arguments that the function will modify, they must be passed by reference. If the argument will not be modified, then it should be passed by value if it is a trivial type, else by const reference (except in unusual cases). For example:\nbool CountWords(const CountOptions\u0026amp; options, char* pszInputString, size_t\u0026amp; ctWords);\nConst or not Incoming arguments that will not be modified should be declared const. This conveys a clear guarantee that the function will not try to modify the incoming value. Proper const delarations also give the optimizing compiler more ways to optimize the code.\nSince counting words does not require the input string to be modifed, the CountWords() function\u0026rsquo;s string argument should really be const char* const (constant pointer to constant char) instead of char*:\nsize_t CountWords(const char* const pszInputString);\nNow the caller can pass a string literal or any other string (even an MFC CString), and be assured that the CountWords function won\u0026rsquo;t change it.\nSource code annotation language Source code annotation language (SAL) is a fairly recent Microsoft specific development. It consists of predefined macros that help more fully express the constraints and purposes of function arguments without changing the compiled output. SAL helps convey additional information about the function\u0026rsquo;s contract with the caller, and it also helps the compiler detect potential problems at compile time by performing additional static code analysis.\nAs you can see below, source code annotation can get a bit messy. I rarely use source code annotation in my own code for this reason and also because it\u0026rsquo;s not portable to older versions of Visual Studio without extra work. Source code annotation is most appropriate in an API that will be consumed by others, and even then it should be considered carefully in light of its readability and portability trade-offs.\nException specification In C++, the exception specification conveys information about what kinds of exceptions a function may throw, either directly or indirectly via functions it calls. If a function cannot throw an exception, you should include the empty throw() suffix on the function declaration.\nPutting it all together Suppose we create a higher level function that validates the input, then calls a lower level function to count words. We might end up with something like this:\nsize_t CountWords(_In_z_ const char* const pszInputString) throw(); enum Status { eOK, eNull, eError, }; _Check_return_ Status ValidateAndCountWords(_In_z_ const char* const pszInputString, _Out_ size_t\u0026 ctWords) throw(); ","permalink":"https://www.manusoft.com/archive/blog/c-function-declaration-tips/","summary":"\u003cp\u003eCreating and calling functions is one of the most fundamental tasks in C++ programming. The function declaration serves as the primary description of a function\u0026rsquo;s interface - or \u003cem\u003econtract\u003c/em\u003e - with callers, thereby making it the most important piece of code documentation. A good function declaration should convey as much information as possible. I\u0026rsquo;m sure an entire book could be written on the topic of function interface design, but I\u0026rsquo;ll just touch briefly on a few factors to consider when designing a function\u0026rsquo;s interface.\u003c/p\u003e","title":"C++ function declaration tips"},{"content":"Let\u0026rsquo;s say you have an ObjectARX module with an implicit dependency on another DLL. Your installer puts both your ARX module and the dependent DLL into a private application folder. Windows must be able to resolve the implicit DLL dependency at load time, otherwise it will fail to load your ARX module. Alas, Windows will not automatically search for the dependent DLL in your application folder, even though your ARX module is located there. Therefore your ARX module won\u0026rsquo;t load because the dependent DLL cannot be resolved.\nTo address this problem, you may be tempted to add your application folder to the AutoCAD support path so that Windows can find your dependent DLL. This is a Very Bad Idea - please don\u0026rsquo;t ever do it! It imposes a completely unnecessary burden on end users, and it\u0026rsquo;s not scaleable because it could cause the maximum support path length to be exceeded. A better solution is to change the implicit dependency into an explicit dependency by using the linker\u0026rsquo;s delayload feature.\nMaking the change is easy. First, change your ARX project\u0026rsquo;s linker settings to delayload the dependent DLL:\nNext, implement a delayload hook in one of your source files to explicitly load the dependent DLL from the same folder as your ARX module:\n#include \u0026lt;delayimp.h\u0026gt; #pragma comment(lib, \"delayimp\") HMODULE MyExplicitLoadLibrary( LPCSTR pszModuleName ) { if( lstrcmpiA( pszModuleName, \"MyDependent.dll\" ) == 0 ) { CHAR szPath[MAX_PATH] = \"\"; //_hdllInstance is the HMODULE of *this* module DWORD cchPath = GetModuleFileNameA( _hdllInstance, szPath, MAX_PATH ); while( cchPath \u003e 0 ) { switch( szPath[cchPath - 1] ) { case '\\\\': case '/': case ':': break; default: --cchPath; continue; } break; //stop searching; found path separator } lstrcpynA( szPath + cchPath, pszModuleName, MAX_PATH - cchPath ); return LoadLibraryA( szPath ); //call with full path to dependent DLL } return NULL; } FARPROC WINAPI MyDliNotifyHook( unsigned dliNotify, PDelayLoadInfo pdli ) { if( dliNotify == dliNotePreLoadLibrary ) return (FARPROC)MyExplicitLoadLibrary( pdli-\u003eszDll ); return NULL; } extern \"C\" PfnDliHook __pfnDliNotifyHook2 = MyDliNotifyHook; When you use this technique, you do have to ensure that the delayload hook is added before any function in the dependent DLL is called. This is not a problem in most cases, but it could be a consideration if your ARX module initializes global objects whose constructors must call functions in the dependent DLL. This is just one more reason why you should avoid global variables.\n","permalink":"https://www.manusoft.com/archive/blog/using-delayload-to-specify-dependent-dll-path/","summary":"\u003cp\u003eLet\u0026rsquo;s say you have an ObjectARX module with an implicit dependency on another DLL. Your installer puts both your ARX module and the dependent DLL into a private application folder. Windows must be able to resolve the implicit DLL dependency at load time, otherwise it will fail to load your ARX module. Alas, Windows will not automatically search for the dependent DLL in your application folder, even though your ARX module is located there. Therefore your ARX module won\u0026rsquo;t load because the dependent DLL cannot be resolved.\u003c/p\u003e","title":"Using /delayload to specify dependent DLL path"},{"content":"In AutoCAD, the AcDbCurve class (http://docs.autodesk.com/ACDMAC/2012/ENU/ObjectARX%20Reference/AcDbCurve.html) defines a general parametrized curve. On a parametrized curve, points in space are mapped to real numbers (parameters) by an arbitrary function F(p) for values of p from the curve start parameter to the curve end parameter. Defining a curve this way simplifies working with complex 3D curves because one can work in the curve\u0026rsquo;s one dimensional \u0026ldquo;parameter space\u0026rdquo; instead of the more complex three dimensional cartesian space.\nThe choice for how to parametrize a curve entity is up to the implementor. Parameters are designed to be opaque, so consumers of parametrized curves must make no assumptions about how a specific curve implements them. The only thing guaranteed about the parameters of a curve is that all points on the curve map to a unique parameter in a continuous range from the starting parameter to the ending parameter.\nAutoCAD entities such as lines, circles, arcs, polylines, rays, and others are derived from AcDbCurve. These basic curve entities have very simple and straighforward parameter mappings that can be reverse engineered with very little effort, so lazy programmers sometimes make assumptions that are not guaranteed to always be true. Even smart programmers often get tripped up on parametrized curves because they use parameter space when they should be using distance space (that is, distance along the curve). The AcDbCurve interface provides functions to translate from parameter space back and forth to distance space, as well as back and forth to three dimensional cartesian space.\nWise programmers always let the curve itself perform all translations to or from distance space or cartesian space so that their code never relies on the actual value of a parameter. Foolish programmers take shortcuts by making assumptions about parameter values. For example, it happens that in all past versions of AutoCAD, the parameter of the midpoint of a polyline segment is exactly halfway between the segment starting parameter and the segment ending parameter, and the segment starting and ending parameters are always equal to the index number of the corresponding vertex. A foolish programmer (e.g. here (http://adndevblog.typepad.com/autocad/2012/05/what-are-acdbcurvecurve-parameters-objectarxnet.html) and here (http://adndevblog.typepad.com/autocad/2013/01/getting-the-midpoint-of-each-polyline-segment-using-objectarx.html)) may use this knowledge to calculate the midpoint of the segment by guessing it\u0026rsquo;s parameter. The foolish programmer\u0026rsquo;s code will fail when a case arises where that guess is wrong. It is the purpose of QuirkyPolyline to provide such a case.\nQuirkyPolyline defines a QPOLY command that prompts for a selection set of lightweight polylines in AutoCAD, then converts the selected polylines to \u0026ldquo;quirky polylines\u0026rdquo; that expose a completely different parameter scheme. Quirky polylines look and act perfectly normal in all respects. If you save quirky polylines, they will be stripped of their quirkiness. There are no long term effects of making polylines quirky; it\u0026rsquo;s just a temporary change that wears off on its own.\nMaking quirky polylines is useful for testing code that works with parametrized curves. If your code makes assumptions that it shouldn\u0026rsquo;t, quirky polylines will expose the error of your ways. Over the years, I have had arguments with people who insisted that their assumption had been validated by extensive testing. My counterargument is that someone, somewhere (possibly even Autodesk itself) already has or eventually will generate a derived entity where the assumption is not true. In addition to providing a proving ground, QuirkyPolyline is designed to demonstrate to the naysayers that unusual parametrization implementations can exist in the wild.\nThe download contains ARX modules for AutoCAD 2000 through AutoCAD 2013. To use QuirkyPolyline, just load the module that matches your version and architecture of AutoCAD. Create a lightweight polyline with the PLINE command, then use the QPOLY command to convert the normal polyline to a quirky polyline. You can use the LIST command to verify that it did become quirky, but you should notice no other detectable changes.\nQuirkyPolyline.zip [100 kb]\nHere is a useful little lisp function that defines a PP command for displaying the parameter value of a picked point on a selected curve entity. You can use this to explore other curve entities, and to see how the polyline\u0026rsquo;s parametrization changes after it becomes quirky.\n(vl-load-com) (defun C:PP (/ sel pointoncurve param) (if (setq sel (entsel)) (progn (setq pointoncurve (apply \u0026#39;vlax-curve-getclosestpointto sel)) (setq param (vlax-curve-getparamatpoint (car sel) pointoncurve)) (princ (strcat \u0026#34;\\nParam = \u0026#34; (rtos param))) ) ) (princ) ) I hope this helps you avoid the pitfalls of parametric curve code. Remember, don\u0026rsquo;t be a foolish programmer!\n","permalink":"https://www.manusoft.com/archive/blog/quirkypolyline-exposing-foolish-programmers/","summary":"\u003cp\u003eIn AutoCAD, the AcDbCurve class (\u003ca href=\"http://docs.autodesk.com/ACDMAC/2012/ENU/ObjectARX%20Reference/AcDbCurve.html\"\u003ehttp://docs.autodesk.com/ACDMAC/2012/ENU/ObjectARX%20Reference/AcDbCurve.html\u003c/a\u003e) defines a general parametrized curve. On a parametrized curve, points in space are mapped to real numbers (parameters) by an arbitrary function \u003cem\u003eF(p)\u003c/em\u003e for values of \u003cem\u003ep\u003c/em\u003e from the curve start parameter to the curve end parameter. Defining a curve this way simplifies working with complex 3D curves because one can work in the curve\u0026rsquo;s one dimensional \u0026ldquo;parameter space\u0026rdquo; instead of the more complex three dimensional cartesian space.\u003c/p\u003e","title":"QuirkyPolyline: exposing foolish programmers"},{"content":"I\u0026rsquo;ve written before about RoboCache, a command line utility I wrote for managing the offline files cache in Windows Vista, Windows 7, and now Windows 8. After using the utility internally for a few years, I decided that I might as well clean it up and make it available to the rest of you. RoboCache is now available at the ManuSoft web site. There is a shareware version available, and you can purchase the registered version at the ManuSoft store (cost is 25 USD for a single user license).\nIt\u0026rsquo;s nothing fancy, but it works great for my needs. The command syntax is modeled after the ROBOCOPY command, and is designed for handling an entire directory tree recursively, filtering files and folders by wildcard. My typical use case is running it from a batch file to pin remote Visual Studio project files on my laptop before travelling. Visual Studio project folders contain a lot of temporary build files and output files that don\u0026rsquo;t need to be (and therefore shouldn\u0026rsquo;t be) included in the cache. The goal is to pin only the necessary files, ignoring the ones that are not needed or will be recreated when the project is built. Here\u0026rsquo;s a sample call to recursively pin all files in the \u0026lsquo;Build\u0026rsquo; folder (this is all one line in a batch file executed from the laptop):\nROBOCACHE Build /op:pin /s /xd debug* release* x64 Win32 .svn _* obj bin ipch /xf *.log *.tlog *._ls *.ncb *.user *.suo *.aps *.ilk *.pch BuildLog.htm *.err .dmp .pdb !.bat #.bat *.chm *.dia *.aps *.lnk *.Res.dll *.zip *log.txt *report.txt *.winmerge *.sdf *.opensdf\nProgrammers might notice that the /xd (ignore directories) and /xf (ignore files) wildcard lists look very similar to what one might encounter in a Subversion commit script. In fact, when I created the batch file I just copied and pasted from my SVN ignore lists. For me, the benefit of using RoboCache in this way is that only the minimum needed files are cached. After working on the cached files while I\u0026rsquo;m out of the office, my changes automatically sync to the folders on my desktop when I return to the office. I do use Subversion repositories for all my projects, and could just as well commit my remote changes to the repository, then update my desktop from the repository; however by using the offline files cache, the syncing all happens automatically and I never have to think about it.\nRoboCache can do more than just pin and unpin files. It can perform any of ten operations on the target files (or any of four administrative functions on the files cache itself), including some operations that are not exposed through the Windows user interface. Below is a list of all currently supported operations (captured from the help screen, and not showing the available command line options for each operation).\n/OP:cmd :: OPeration to perform (default is /OP:info). :: info : display status info about the target(s) :: pin : assure offline availability :: unpin : unpin the target(s) :: sync : synchronize cached files with remote files :: rename : rename cached item (requires reboot) :: delete : delete cached item :: suspend : suspend the target folders (ignores files) :: unsuspend : unsuspend the target folders (ignores files) :: online : transition to online state :: offline : transition to offline state :: enable : enable offline files cache (ignores target) :: disable : disable offline files cache (ignores target) :: encrypt : encrypts offline files cache (ignores target) :: decrypt : decrypts offline files cache (ignores target) The installer simply adds RoboCache.exe to your system folder; no folders are created and no other changes are made. The shareware version of RoboCache displays a nag notification balloon in the system tray, but is otherwise completely functional. There is no separate documentation, however ROBOCACHE /? displays syntax and command options.\n","permalink":"https://www.manusoft.com/archive/blog/robocache-released/","summary":"\u003cp\u003eI\u0026rsquo;ve \u003ca href=\"/2010/12/windows-offline-files.htm\" title=\"Windows offline files\"\u003ewritten before about RoboCache\u003c/a\u003e, a command line utility I wrote for managing the offline files cache in Windows Vista, Windows 7, and now Windows 8. After using the utility internally for a few years, I decided that I might as well clean it up and make it available to the rest of you. \u003ca href=\"/tools/robocache/\" title=\"RoboCache\" target=\"_blank\"\u003eRoboCache is now available at the ManuSoft web site\u003c/a\u003e. There is a shareware version available, and you can purchase the registered version at the ManuSoft store (cost is 25 USD for a single user license).\u003c/p\u003e","title":"RoboCache for Windows offline files cache management"},{"content":"RoboCache was introduced as a command-line utility for managing the offline files cache on Windows Vista, Windows 7, and Windows 8. It can batch-process directory trees with wildcard filters, and perform operations on cached files (or on the cache itself) that the Windows UI does not expose.\n","permalink":"https://www.manusoft.com/news/2013-01-02-robocache-released/","summary":"\u003cp\u003e\u003ca href=\"/tools/robocache/\"\u003eRoboCache\u003c/a\u003e was introduced as a command-line utility for managing the offline files cache on Windows Vista, Windows 7, and Windows 8. It can batch-process directory trees with wildcard filters, and perform operations on cached files (or on the cache itself) that the Windows UI does not expose.\u003c/p\u003e","title":"RoboCache 1.0 Released"},{"content":"I often encounter cases in ObjectARX programming where numerous boolean flags need to be persisted as part of an AutoCAD database object. For filing and for passing around to other functions, it\u0026rsquo;s most efficient to package those bit flags into a single unsigned integer. Below is an example that demonstrates how to use a union inside a containing class that can be simultaneously used as either a single unsigned integer or as individual booleans.\n// first declare a compact bitflag structure as bool values struct FlagsAsBools { bool flag1 : 1; bool flag2 : 1; bool flag3 : 1; bool flag4 : 1; bool flag5 : 1; bool flag6 : 1; bool flag7 : 1; bool flag8 : 1; bool flag9 : 1; bool flag10 : 1; bool flag11 : 1; bool flag12 : 1; }; // now the containing class with useful constructors and operators class Flags { protected: // and the hidden union that actually contains the flags union _Flags { FlagsAsBools asBools; Adesk::UInt32 asUInt; //space for up to 32 flags } mFlags; public: Flags() { mFlags.asUInt = 0; } Flags(Adesk::UInt32 flags) { mFlags.asUInt = flags; } Flags(const FlagsAsBools\u0026 flags) { mFlags.asBools = flags; } operator Adesk::UInt32 () const { return mFlags.asUInt; } const FlagsAsBools\u0026 asBools() const { return mFlags.asBools; } FlagsAsBools\u0026 asBools() { return mFlags.asBools; } }; // now a class that contains the flags class Settings { AcString msSomeStringSetting; bool mbSomeBoolSetting; Flags mFlags; public: Settings () : mbSomeBoolSetting(false) {} LPCTSTR someStringSetting() const { return msSomeStringSetting; } void setSomeStringSetting(LPCTSTR someStringSetting) { msSomeStringSetting = someStringSetting; } bool someBoolSetting() const { return mbSomeBoolSetting; } void setSomeBoolSetting(bool someBoolSetting) { mbSomeBoolSetting = someBoolSetting; } Flags flags() const { return mFlags; } void setFlags(Flags flags) { mFlags = flags; } }; // now use the flags as an argument to a function in different forms void DoStuffBasedOnFlags( Adesk::UInt32 flags ) { if( Flags(flags).asBools().flag7 ) {// do something when flag7 is set } } void DoOtherStuffBasedOnFlags( const Flags\u0026 flags ) { if( flags.asBools().flag1 ) {// do something when flag1 is set } } void TestIt() { Settings\u0026 MySettings = GetSettings(); Flags flags = MySettings.flags(); if( flags.asBools().flag4 ) {// do something when flag4 is set } DoStuffBasedOnFlags( flags ); DoOtherStuffBasedOnFlags( flags ); flags.asBools().flag2 = true; MySettings.setFlags( flags ); //save the new settings } ","permalink":"https://www.manusoft.com/archive/blog/polymorphic-bit-flags-in-c/","summary":"\u003cp\u003eI often encounter cases in ObjectARX programming where numerous boolean flags need to be persisted as part of an AutoCAD database object. For filing and for passing around to other functions, it\u0026rsquo;s most efficient to package those bit flags into a single unsigned integer. Below is an example that demonstrates how to use a union inside a containing class that can be simultaneously used as either a single unsigned integer or as individual booleans.\u003c/p\u003e","title":"Polymorphic bit flags in C++"},{"content":"A lot of you are guilty of not checking return values from API function calls. I\u0026rsquo;ll bet you have a good excuse, like \u0026ldquo;it\u0026rsquo;s a lot of extra typing for no reason\u0026rdquo;, or \u0026ldquo;that function should never return an error code\u0026rdquo;.\nI check return values religiously, use asserts liberally, and never assume that the implementation details of a function won\u0026rsquo;t change in the future. I think you should do the same.\nIn all my years of programming, I\u0026rsquo;ve never heard someone complain that their project failed because they spent too much extra time typing code to verify return values \u0026ndash; but I have heard of projects failing because sloppy code made it almost impossible to diagnose and fix problems.\nI see a lot of \u0026ldquo;sample code\u0026rdquo; posted on the internet in forums and blogs that omit error checking for brevity or to make the code clearer to read. That\u0026rsquo;s a bad idea, in my opinion. Sample code should be good code, not just clean code.\nI will grant you that there are cases where error checking is not needed. For example, in the following code there is no need to verify the result of the call to acdbGetObjectId() because failure will be immediately evident in the call to acdbOpenObject() when idSelected is still null:\nAcad::ErrorStatus MyFunction() { ads_name anameSelected; ads_point apointSelected; int nResult = acedEntSel( ACRX_T(\"\\nSelect an object: \"), anameSelected, apointSelected ); if( nResult != RTNORM ) return eNotAnEntity; //or whatever AcDbObjectId idSelected; acdbGetObjectId( idSelected, anameSelected ); //ignoring return value! assert( !idSelected.isNull() ); //check it nevertheless in the debug build AcDbEntity* pEnt = NULL; Acad::ErrorStatus es = acdbOpenObject( pEnt, idSelected, AcDb::kForRead ); if( es != Acad::eOk ) return es; // do something with pEnt pEnt-\u003eclose(); //I confess that I don't bother checking the //result of AcDbObject::close() unless it matters return Acad::eOk; } There are legitimate cases where error checking is not needed, but I think especially sample code posted on the internet should encourage good programming habits by checking the result of every function that returns one.\n","permalink":"https://www.manusoft.com/archive/blog/checking-function-return-values/","summary":"\u003cp\u003eA lot of you are guilty of not checking return values from API function calls. I\u0026rsquo;ll bet you have a good excuse, like \u003cem\u003e\u0026ldquo;it\u0026rsquo;s a lot of extra typing for no reason\u0026rdquo;\u003c/em\u003e, or \u003cem\u003e\u0026ldquo;that function should never return an error code\u0026rdquo;\u003c/em\u003e.\u003c/p\u003e","title":"Checking function return values"},{"content":"I have updated the AcadInfoCenterOff.msi file on the ManuSoft Freebies page for AutoCAD 2013. If you\u0026rsquo;re not sure what it does or why you need it, see this previous post on the subject.\n","permalink":"https://www.manusoft.com/archive/blog/turning-off-infocenter-in-autocad-2013/","summary":"\u003cp\u003eI have updated the AcadInfoCenterOff.msi file on the ManuSoft \u003ca href=\"/resources/freebies/misc/\"\u003eFreebies page\u003c/a\u003e for AutoCAD 2013. If you\u0026rsquo;re not sure what it does or why you need it, see this \u003ca title=\"Disable AutoCAD InfoCenter\" href=\"/2010/11/disable-autocad-infocenter.htm\"\u003eprevious post\u003c/a\u003e on the subject.\u003c/p\u003e","title":"Turning off InfoCenter (aka WSCommCntr4.exe) in AutoCAD 2013"},{"content":"If you\u0026rsquo;re developing ARX modules that need to be registered as a COM server, you\u0026rsquo;re faced with some decisions about how to register them. In the old days before anyone cared about user permissions, registration could be safely accomplished at runtime, even via AutoLISP. Unfortunately runtime COM server registration just doesn\u0026rsquo;t work reliably any more under limited user accounts, not to mention registry redirection on 64-bit platforms. There is only one reliable way to register COM servers, and that\u0026rsquo;s doing it at install time under elevated privileges.\nA normal Windows application might accomplish install-time registration by calling RegSvr32 after the files are copied to the destination folder, but this doesn\u0026rsquo;t work with ObjectARX or BRX modules. The reason it doesn\u0026rsquo;t work is because ARX modules cannot be loaded outside the AutoCAD or Bricscad process. RegSvr32 will fail with errors like \u0026ldquo;The module \u0026lt;filename\u0026gt; failed to load\u0026rdquo; or the even less helpful \u0026ldquo;The specified module could not be found.\u0026rdquo; There are some kludgy ways to get RegSvr32 to work anyway, but the simplest and most reliable way to solve this problem is to forget RegSvr32 and just add the needed registry values manually into your installer script. It\u0026rsquo;s not difficult, though it might be time consuming initially if your server implements a lot of COM objects.\nAt a minimum, a COM server must register at least one COM class under HKCR\\CLSID. If the COM server needs to support OLE Automation (e.g. VBA, AutoLISP) it must register a type library in HKCR\\TypeLib. In most cases, this is all that is needed, however you may also need to register a \u0026ldquo;ProgID\u0026rdquo; in HKCR if a script or in-process module needs to be able to connect to the server via human-readable ProgID.\nMost installation script software can import Windows registry script (.reg) files, so it\u0026rsquo;s often helpful (and more maintainable) to create a registry script file manually, then simply import the .reg file into the installation script. If you use Visual Studio deployment projects, this is the only way to batch import registry values into the installation script. I\u0026rsquo;ve provided a minimal template for a registry script that registers a single COM object and ProgID. The template uses special characters as placeholders for the actual values: $$ is the human readable ProgID name, ## is the COM object\u0026rsquo;s CLSID, ** is the filename of your ARX module, and %% is the type library GUID. The type library and object class version numbers should match your actual version numbers as well, and of course [TARGETDIR] is the installation target directory that will be resolved at install time.\nWindows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\\$$.1] @=\"$$ Class\" [HKEY_CLASSES_ROOT\\$$.1\\CLSID] @=\"{##}\" [HKEY_CLASSES_ROOT\\CLSID\\{##}] @=\"$$ Class\" [HKEY_CLASSES_ROOT\\CLSID\\{##}\\InprocServer32] @=\"[TARGETDIR]**.arx\" \"ThreadingModel\"=\"Apartment\" [HKEY_CLASSES_ROOT\\CLSID\\{##}\\ProgID] @=\"$$.1\" [HKEY_CLASSES_ROOT\\CLSID\\{##}\\Programmable] [HKEY_CLASSES_ROOT\\CLSID\\{##}\\TypeLib] @=\"{%%}\" [HKEY_CLASSES_ROOT\\CLSID\\{##}\\VersionIndependentProgID] @=\"$$\" [HKEY_CLASSES_ROOT\\TypeLib\\{%%}] [HKEY_CLASSES_ROOT\\TypeLib\\{%%}\\1.0] @=\"$$ 1.0 Type Library\" [HKEY_CLASSES_ROOT\\TypeLib\\{%%}\\1.0\\0] [HKEY_CLASSES_ROOT\\TypeLib\\{%%}\\1.0\\0\\win32] @=\"[TARGETDIR]**.arx\" [HKEY_CLASSES_ROOT\\TypeLib\\{%%}\\1.0\\FLAGS] @=\"0\" [HKEY_CLASSES_ROOT\\TypeLib\\{%%}\\1.0\\HELPDIR] @=\"[TARGETDIR]\" It\u0026rsquo;s really not that complicated for a single module. The work can be tedious to create all the values for multiple modules in scenarios where you support multiple AutoCAD and/or Bricscad versions or platforms, but these values typically don\u0026rsquo;t change over the life of the project, so it only needs to be done once. Once you have created the registry values manually, disable all other forms of COM server registration such as wizard-generated runtime registration or automatic \u0026ldquo;self-registration\u0026rdquo; at install time. A bonus side effect of the manual registration approach is that a normal uninstall reliably removes all traces of the COM server registration.\n","permalink":"https://www.manusoft.com/archive/blog/registering-an-arxbrx-module-as-a-com-server/","summary":"\u003cp\u003eIf you\u0026rsquo;re developing ARX modules that need to be registered as a COM server, you\u0026rsquo;re faced with some decisions about how to register them. In the old days before anyone cared about user permissions, registration could be safely accomplished at runtime, even via AutoLISP. Unfortunately runtime COM server registration just doesn\u0026rsquo;t work reliably any more under limited user accounts, not to mention registry redirection on 64-bit platforms. There is only one reliable way to register COM servers, and that\u0026rsquo;s doing it at install time under elevated privileges.\u003c/p\u003e","title":"Registering an ARX/BRX module as a COM server"},{"content":"You may not have noticed, but AutoLISP is still alive and kicking. This is evidenced by the growing community of developers and hobbyist programmers using the latest release of OpenDCL, the free graphical user interface library for AutoLISP applications. If you\u0026rsquo;re not familiar with OpenDCL, check out the newly released OpenDCL 6.\n","permalink":"https://www.manusoft.com/archive/blog/opendcl-6/","summary":"\u003cp\u003eYou may not have noticed, but AutoLISP is still alive and kicking. This is evidenced by the growing community of developers and hobbyist programmers using the latest release of \u003ca title=\"OpenDCL\" href=\"https://www.opendcl.com/\" target=\"_blank\"\u003eOpenDCL\u003c/a\u003e, the free graphical user interface library for AutoLISP applications. If you\u0026rsquo;re not familiar with OpenDCL, check out the \u003ca title=\"OpenDCL 6 Released\" href=\"https://www.opendcl.com/wordpress/?p=158\" target=\"_blank\"\u003enewly released OpenDCL 6\u003c/a\u003e.\u003c/p\u003e","title":"OpenDCL 6"},{"content":"Those of you using your Android phone as an internet connection may be paying more than you need to pay. Many phone companies here in the US charge extra to enable tethering capability, either by providing their own OEM tethering app or by enabling the phone to serve as a Wi-fi hotspot.\nWith some experimenting, I found that my Motorola Droid 2 Global from Verizon can be tethered just fine right out of the box, and without paying anything extra.\nRecently I\u0026rsquo;ve been playing nursemaid to my ill mother, so I frequently take my work along with me on overnight shifts. I\u0026rsquo;ve settled on connecting to my main desktop machine via remote desktop, and using my 15\u0026quot; laptop as the client.\nThe remote desktop connection works great. My 3G connection is noticeably slow, but it\u0026rsquo;s very workable. Since I\u0026rsquo;m working on my office computer, there\u0026rsquo;s no need to sync anything, and I can pick up from one place right where I left off in another. In a pinch I can even use my phone as a client (using an inexpensive remote desktop client from Xtralogic).\nTo get my internet connection, I installed Motorola\u0026rsquo;s drivers on my Windows 7 laptop, then enabled the Bluetooth controller on my phone and paired it with the laptop. Now I can connect my laptop to the internet via Control Panel simply by connecting to the phone as an \u0026ldquo;Access Point\u0026rdquo;, as shown below.\n[caption id=\u0026ldquo;attachment_504\u0026rdquo; align=\u0026ldquo;alignnone\u0026rdquo; width=\u0026ldquo;300\u0026rdquo; caption=\u0026ldquo;Connecting to my Droid 2 Global via Bluetooth\u0026rdquo;][/caption]\nI don\u0026rsquo;t know whether this technique works for other phones or other carriers, but it has certainly worked well for me.\n","permalink":"https://www.manusoft.com/archive/blog/a-tale-of-two-tethers/","summary":"\u003cp\u003eThose of you using your Android phone as an internet connection may be paying more than you need to pay. Many phone companies here in the US charge extra to enable tethering capability, either by providing their own OEM tethering app or by enabling the phone to serve as a Wi-fi hotspot.\u003c/p\u003e","title":"A tale of two tethers"},{"content":"The MFC version that ships with Visual Studio 2010 is known to cause major explosions in file size (https://connect.microsoft.com/VisualStudio/feedback/details/504714/statically-linked-mfc-applications-are-massive) when you link statically. To avoid that problem, I use the Visual Studio 2008 build tools for such cases. I recently got quite a surprise when I rebuilt one such MFC application and discovered that the executable had ballooned from 400kb to 2MB in the space of one week despite only very minor changes.\nI assumed that one of my piddly little changes must have unleashed a dependency that sucked in the entire MFC library, which is exactly what happens in VS 2010. To test this hypothesis, I rolled back all my changes to the previous build state and did a complete rebuild. No change; the executable was still 2 MB. Wonderful.\nIt turns out a recent Visual Studio update (delivered automatically via Windows Update in my case) \u0026ldquo;broke\u0026rdquo; the VS 2008 MFC files, so they now suffer the same massive bloating problem that VS 2010\u0026rsquo;s MFC library suffers from. I applied the solution mentioned in this blog post (actually in my case I only needed to hack the afxglobals.cpp file). Now the MFC balloon is deflated again and my file sizes have dropped back to normal.\n[Update 1: Ted has now tracked down more specifics about this problem and posted a cleaner solution.]\n[Update 2: Microsoft has now fixed this problem at the source (http://blogs.msdn.com/b/vcblog/archive/2011/06/17/10175518.aspx) with updated patches (http://www.microsoft.com/technet/security/Bulletin/MS11-025.mspx).]\nIf you link statically to MFC with VS 2008 or VS 2010 in any of your projects, check your executable sizes now.\n","permalink":"https://www.manusoft.com/archive/blog/the-mfc-balloon/","summary":"\u003cp\u003eThe MFC version that ships with Visual Studio 2010 is known to cause major explosions in file size (\u003ca href=\"https://connect.microsoft.com/VisualStudio/feedback/details/504714/statically-linked-mfc-applications-are-massive\"\u003ehttps://connect.microsoft.com/VisualStudio/feedback/details/504714/statically-linked-mfc-applications-are-massive\u003c/a\u003e) when you link statically. To avoid that problem, I use the Visual Studio 2008 build tools for such cases. I recently got quite a surprise when I rebuilt one such MFC application and discovered that the executable had ballooned from 400kb to 2MB in the space of one week despite only very minor changes.\u003c/p\u003e","title":"The MFC Balloon"},{"content":"When I heard that Bricsys had shipped Bricscad for Linux, I was anxious to get to work on supporting the Linux platform. The first order of business was getting familiar with Linux. For that, I chose Ubuntu 10.10 32-bit running on a VMWare Workstation 7.1 (http://www.vmware.com/workstation) virtual machine hosted on my Windows 7 64-bit workstation.\nInstalling Ubuntu was straightforward, and I had no problems. Installing Bricscad went off without a hitch. I downloaded the Debian package of Bricscad v11 Pro and Ubuntu\u0026rsquo;s Software Center installed it much like Windows Installer would install an MSI file on Windows.\n[caption id=\u0026ldquo;attachment_488\u0026rdquo; align=\u0026ldquo;alignnone\u0026rdquo; width=\u0026ldquo;300\u0026rdquo; caption=\u0026ldquo;Bricscad v11 on Ubuntu Application Menu\u0026rdquo;][/caption]\nAfter installation, Bricscad fired right up. Except for a mysterious black splotch in the layer dropdown, it looked and felt very much like Bricscad on Windows.\n[caption id=\u0026ldquo;attachment_490\u0026rdquo; align=\u0026ldquo;alignnone\u0026rdquo; width=\u0026ldquo;300\u0026rdquo; caption=\u0026ldquo;Black Splotch on Bricscad Layer Dropdown\u0026rdquo;][/caption]\nThe next order of business was to build and load a BRX module. I started by installing Code::Blocks, an open source cross platform C/C++ IDE that can be used in both Windows and Linux. The IDE installed fine, but then things got interesting.\nFirst of all, I found that I had to install the build tools (namely the g++ compiler), because they are not included with the IDE. Eventually I had to set an environment variable for my BRX project pointing it to the BRX SDK, which required a Code::Blocks plugin that had to be installed separately. I did get everything working, and built a simple BRX module without error \u0026ndash; but then it refused to load in Bricscad.\nNow, one of the things about Linux that is very different to Windows is the culture of users. Googling for help on something invariably leads to instructions that start out \u0026ldquo;It\u0026rsquo;s extremely easy to do this on Linux\u0026rdquo; and end with 4 pages of command line gibberish, including a list of all the stuff that must first be installed for these instructions to work correctly, and the inevitable warning that the instructions may only work on certain \u0026ldquo;distros\u0026rdquo; and versions of Linux.\nI learned this first hand when I set out to determine why my .brx module was failing to load. I eventually learned that I had to manually add the BRX SDK library path to Bricscad so it could find the needed libraries at runtime. That was the easy part. To make a long (and rather harrowing) story short, I eventually determined that I was missing a single required library (the libgl graphics library). Installing the library in Ubuntu got things working.\n[caption id=\u0026ldquo;attachment_492\u0026rdquo; align=\u0026ldquo;alignnone\u0026rdquo; width=\u0026ldquo;300\u0026rdquo; caption=\u0026ldquo;Loading a test BRX module in Bricscad\u0026rdquo;][/caption]\nNext up: figuring out how to build a Linux BRX module in Windows using the Visual Studio 2010 IDE. That should prove to be very interesting indeed.\n","permalink":"https://www.manusoft.com/archive/blog/brx-on-linux-getting-started/","summary":"\u003cp\u003eWhen I heard that Bricsys had \u003ca href=\"https://bricscad.octave.com/common/news.jsp?item=402\"\u003eshipped Bricscad for Linux\u003c/a\u003e, I was anxious to get to work on supporting the Linux platform. The first order of business was getting familiar with Linux. For that, I chose \u003ca href=\"https://old-releases.ubuntu.com/releases/10.10/\"\u003eUbuntu 10.10\u003c/a\u003e 32-bit running on a VMWare Workstation 7.1 (\u003ca href=\"http://www.vmware.com/workstation\"\u003ehttp://www.vmware.com/workstation\u003c/a\u003e) virtual machine hosted on my Windows 7 64-bit workstation.\u003c/p\u003e","title":"BRX on Linux: Getting Started"},{"content":"If you\u0026rsquo;re an ObjectARX programmer, you may still be using Visual Studio 2008 because you\u0026rsquo;ve been told that you must. It\u0026rsquo;s true that you need Visual Studio 2008 installed to compile native ObjectARX code, but with Daffodil you can do all your work in the Visual Studio 2010 IDE.\nUntil now, the one thing that didn\u0026rsquo;t work in VS 2010 was the ObjectARX Wizard. I\u0026rsquo;m happy to report that the latest wizard seems to works fine in both VS 2008 and VS 2010. Thanks to Alexander Rivilis for revealing the secret URL (http://forums.autodesk.com/autodesk/board/message?board.id=34\u0026message.id=27908#M27908):\nhttp://images.autodesk.com/adsk/files/objectarx_2012_wizards.zip\n","permalink":"https://www.manusoft.com/archive/blog/objectarx-wizard-for-visual-studio-2010/","summary":"\u003cp\u003eIf you\u0026rsquo;re an ObjectARX programmer, you may still be using Visual Studio 2008 because you\u0026rsquo;ve been told that you must. It\u0026rsquo;s true that you need Visual Studio 2008 installed to compile native ObjectARX code, but with \u003ca href=\"https://github.com/manusoft-gh/manusoft-daffodil\"\u003eDaffodil\u003c/a\u003e you can \u003ca href=\"/2010/10/visual-studio-2010-native-multi-targeting.htm\"\u003edo all your work in the Visual Studio 2010 IDE\u003c/a\u003e.\u003c/p\u003e","title":"ObjectARX Wizard for Visual Studio 2010"},{"content":"If you\u0026rsquo;re upgrading to AutoCAD 2012, don\u0026rsquo;t forget to also disable InfoCenter (unless you really need it). Just download and install AcadInfoCenterOff to disable it on any version of AutoCAD or AutoCAD LT. If you already have AcadInfoCenterOff installed, you can just run a repair install to apply it to a newly installed instance of AutoCAD 2012.\n","permalink":"https://www.manusoft.com/archive/blog/autocad-2012-infocenter/","summary":"\u003cp\u003eIf you\u0026rsquo;re upgrading to AutoCAD 2012, don\u0026rsquo;t forget to also \u003ca href=\"/2010/11/disable-autocad-infocenter.htm\"\u003edisable InfoCenter\u003c/a\u003e (unless you really need it). Just download and install \u003ca href=\"/resources/freebies/misc/\"\u003eAcadInfoCenterOff\u003c/a\u003e to disable it on any version of AutoCAD or AutoCAD LT. If you already have AcadInfoCenterOff installed, you can just run a repair install to apply it to a newly installed instance of AutoCAD 2012.\u003c/p\u003e","title":"AutoCAD 2012 InfoCenter"},{"content":"One of the stages in simplifying an AutoCAD software problem is to rule out (or in) third party add-ons as the cause. To do that, you\u0026rsquo;ll need a \u0026ldquo;plain vanilla\u0026rdquo; test bed configuration that consists of only the out-of-the-box components with no add-ons loaded.\nThe best way to test in a plain vanilla AutoCAD configuration is to install it on a virtual machine. I use VMWare Workstation for this purpose (Microsoft\u0026rsquo;s Windows Virtual PC is another popular choice). Virtual machines are completely separate from the host system, so they provide an ideal testbed for isolating software problems. Unfortunately, virtual machines take time and resources to build and manage, so they won\u0026rsquo;t work for everyone.\nFor most common cases, it\u0026rsquo;s sufficient to start AutoCAD with a \u0026ldquo;vanilla\u0026rdquo; profile (ideally using the /p \u0026lt;profile_name\u0026gt; target argument in a shortcut) that loads only the standard AutoCAD menu and no third party add-ons, but this can be a bit tricky. The problem is that some third party add-ons are determined to load, and it\u0026rsquo;s difficult to stop them.\nLisp add-ons can be thwarted by ensuring that your \u0026ldquo;vanilla\u0026rdquo; profile uses a clean path (i.e. a folder structure containing only unmodified out-of-the-box files) for all support files. In addition, you must ensure that only the standard unmodified menu files are loaded. Finally, you can set the DEMANDLOAD system variable to zero to disable all object enablers from loading. Note that AutoCAD must be closed and restarted after any changes to see the effect.\nFinally, here\u0026rsquo;s one last tip: you can enter (arx) at the AutoCAD command prompt to see a list of loaded ARX modules. Some ARX modules may automatically load at startup; those can be disabled by tweaking the registry, but I don\u0026rsquo;t recommend that unless you really know what you\u0026rsquo;re doing.\nIn the end, the goal is to determine whether the problem can be reproduced on a \u0026ldquo;plain vanilla\u0026rdquo; configuration. If the problem goes away, you can start adding things back one at a time to see when the problem resurfaces. If the problem still occurs on a clean configuration, you can focus attention on other possible causes.\n","permalink":"https://www.manusoft.com/archive/blog/simplifying-the-problem-plain-vanilla-configuration/","summary":"\u003cp\u003eOne of the stages in \u003ca href=\"/2011/02/the-art-of-simplifying-the-problem.htm\"\u003esimplifying an AutoCAD software problem\u003c/a\u003e is to rule out (or in) third party add-ons as the cause. To do that, you\u0026rsquo;ll need a \u0026ldquo;plain vanilla\u0026rdquo; test bed configuration that consists of only the out-of-the-box components with no add-ons loaded.\u003c/p\u003e","title":"Simplifying the problem: plain vanilla configuration"},{"content":"When a customer reports a drawing-specific issue, the next stage in simplifying the problem is to eliminate all drawing content that has no bearing on the problem. Unless the drawing object that causes the problem is obvious and can be immediately ascertained, I use the divide-and-conquer method to zero in on the cause.\nTo divide and conquer an AutoCAD drawing, I start by getting a quick feel for what is in the drawing and how it is structured (I use Periscope for this; in fact I originally wrote Periscope for this purpose). The general approach I use is to eliminate roughly one half of the drawing at a time by erasing an arbitrary half, then checking to see whether the problem still exists in the remaining half. Doing this reliably requires some care.\nIf the drawing has layouts, I start by erasing all layouts except model space. I then save the new file with a new filename, close AutoCAD, restart, open the last file, and test to see whether the problem still exists. If the problem went away, I go back to the original file and start over, erasing everything in model space, then repeat the saveas/close/reopen sequence. Once I pin the problem down to a specific layout (or layouts), I start working on individual drawing entities.\nA typical iteration consists of erasing roughly half the drawing entities, then checking whether the problem persists. If the problem goes away, back up and erase the other half, otherwise continue. Entities can be erased either by selection or using QSELECT. If the drawing consists of entities nested inside blocks, I first try erasing the block references; if the problem goes away, I back up and use BEDIT to erase part of the block content.\nWhile going through these iterations, I sprinkle in a periodic purge (using SuperPurge, of course) to remove hidden and invisible objects that become unreferenced as visible entities are erased. I continue this process until I have a drawing file cleaned of everything except the bare minimum needed to reproduce the problem. Often, but not always, that means a drawing file with a single visible entity in it.\nThe key to success is being methodical and saving with incremented filenames so that it\u0026rsquo;s easy to back up a step and start over when the problem disappears. Closing and restarting AutoCAD between each iteration helps ensure that the test is not influenced by erased objects remaining in memory. With experience and a bit of skill in correctly guessing where to look, I\u0026rsquo;ve learned that almost all drawing-specific problems can be narrowed down to the bare minimum in 5 to 10 iterations.\n","permalink":"https://www.manusoft.com/archive/blog/simplifying-the-problem-divide-and-conquer/","summary":"\u003cp\u003eWhen a customer reports a \u003ca href=\"/2011/02/is-it-the-drawing.htm\"\u003edrawing-specific issue\u003c/a\u003e, the next stage in \u003ca href=\"/2011/02/the-art-of-simplifying-the-problem.htm\"\u003esimplifying the problem\u003c/a\u003e is to eliminate all drawing content that has no bearing on the problem. Unless the drawing object that causes the problem is obvious and can be immediately ascertained, I use the \u003ca href=\"http://en.wikipedia.org/wiki/Divide_and_conquer_algorithm\"\u003edivide-and-conquer\u003c/a\u003e method to zero in on the cause.\u003c/p\u003e","title":"Simplifying the problem: divide and conquer"},{"content":"One type of support request that I occasionally receive from CADVault users goes something like \u0026ldquo;when I create a vault, AutoCAD crashes\u0026rdquo;. I\u0026rsquo;ve learned that problems like this are usually drawing-specific, so before going any further in simplifying the problem I ask the customer to check whether the problem occurs in an empty drawing. But there\u0026rsquo;s a trick to this.\nThe problem is that \u0026ldquo;empty drawing\u0026rdquo; is too nebulous. No drawing is completely empty, and in any case, even drawings with no visible geometry can be far from empty. What I really want to test is whether the problem occurs with a drawing that is as nearly empty as possible. To achieve that, I ask the customer to perform the test on \u0026ldquo;a new drawing created from scratch, with no template\u0026rdquo;.\n[caption id=\u0026quot;\u0026quot; align=\u0026ldquo;alignnone\u0026rdquo; width=\u0026ldquo;404\u0026rdquo; caption=\u0026ldquo;New file with no template\u0026rdquo;][/caption]\nThe extra \u0026ldquo;no template\u0026rdquo; instruction is necessary because just creating a new drawing will bring in any flotsam and jetsam saved in the default template drawing, which could affect the results.\n[Side note: it is my experience that many template drawings contain a lot of invisible junk that does nothing but slow things down. If you\u0026rsquo;re curious about your own templates, open them and use my shareware SuperPurge tool to see what all they contain. You may be surprised.]\nIf the steps for reproducing the problem are such that they require some visible geometry, I ask the customer to draw a unit circle at the origin in a new \u0026ldquo;no template\u0026rdquo; drawing.\nIf the problem still occurs in a minimal drawing, then it is not drawing-specific; otherwise the next step is to divide and conquer the drawing to narrow things down further.\n","permalink":"https://www.manusoft.com/archive/blog/is-it-the-drawing/","summary":"\u003cp\u003eOne type of support request that I occasionally receive from \u003ca href=\"https://web.archive.org/web/2010/http://www.cadlock.com/products/CADVault/\"\u003eCADVault\u003c/a\u003e users goes something like \u0026ldquo;when I create a vault, AutoCAD crashes\u0026rdquo;. I\u0026rsquo;ve learned that problems like this are usually drawing-specific, so before going any further in \u003ca href=\"/2011/02/the-art-of-simplifying-the-problem.htm\"\u003esimplifying the problem\u003c/a\u003e I ask the customer to check whether the problem occurs in an empty drawing. But there\u0026rsquo;s a trick to this.\u003c/p\u003e","title":"Simplifying the problem: is it the drawing?"},{"content":"One of the most important skills in resolving technical problems is not problem solving, but problem definition. Stripping a problem down to its essence often makes the solution obvious. I think this is generally true, but especially true in my experience with software tech support and tracking down software bugs.\nThe first stage in problem simplification is to document a set of steps that consistently reproduces the problem. These steps must be detailed enough so that someone else can use them to reproduce the problem, including a description of exactly what the problem is. Often this is the most difficult step, either because the problem doesn\u0026rsquo;t happen consistently, or because the problem description lacks detail.\nThe second stage is to try eliminating unnecessary steps with the goal of determining the bare minimum steps needed to reproduce the problem. If the problem is drawing-specific, this stage includes stripping everything out of the drawing except the bare minimum needed. This is often very time consuming, but almost always a worthwhile investment because it can eliminate a lot of potential dead ends in tracking down the ultimate cause. Often, this stage requires some trial and error.\nThe third stage is determining the exact cause and source of the problem. In my experience, even problems that at first appear very complicated can almost always be boiled down to just a few steps with a minimal amount of data.\nFinally, in stage four the problem has to be solved, of course!\nIn future posts, I\u0026rsquo;ll share some tips and techniques that I use to simplify software problems.\n","permalink":"https://www.manusoft.com/archive/blog/the-art-of-simplifying-the-problem/","summary":"\u003cp\u003eOne of the most important skills in resolving technical problems is not problem solving, but problem definition. Stripping a problem down to its essence often makes the solution obvious. I think this is generally true, but especially true in my experience with software tech support and tracking down software bugs.\u003c/p\u003e","title":"The art of simplifying the problem"},{"content":"Excited news stories this morning about how your computer is vulnerable to attack from a phone plugged into your USB port (http://news.cnet.com/8301-27080_3-20028919-245.html) made me chuckle. This \u0026ldquo;novel hack\u0026rdquo; involves making an Android phone mimic a USB keyboard in order to send keystrokes to the computer. Cool, but why wouldn\u0026rsquo;t a hacker just use a USB keyboard in the first place?\nThis is a good example of the over-hyped threats that often generate headlines. Sure, it\u0026rsquo;s true that allowing potentially compromised USB devices to be plugged into your computer could be harmful, but opening your web browser is much more likely to result in damage. The only thing remotely novel about this \u0026ldquo;attack\u0026rdquo; is the notion that your own phone could be the source. That\u0026rsquo;s interesting, but hardly worthy of the breathless coverage it\u0026rsquo;s getting.\nThe bottom line is that most malicious attacks are the result of you doing something you know you shouldn\u0026rsquo;t do, such as opening an email attachment or blithely running downloaded programs without regard to their trustworthiness. Very few malicious attacks occur without your explicit permission.\nThis post reminds me of the one time my computer was infected with a virus. It arrived on a floppy disk that I received from, of all places, my local health department. I guess smart phones are the new floppy disk.\n","permalink":"https://www.manusoft.com/archive/blog/all-your-base-are-belong-to-us/","summary":"\u003cp\u003eExcited news stories this morning about how your computer is vulnerable to attack from a phone plugged into your USB port (\u003ca href=\"http://news.cnet.com/8301-27080_3-20028919-245.html\"\u003ehttp://news.cnet.com/8301-27080_3-20028919-245.html\u003c/a\u003e) made me chuckle. This \u0026ldquo;novel hack\u0026rdquo; involves making an Android phone mimic a USB keyboard in order to send keystrokes to the computer. Cool, but why wouldn\u0026rsquo;t a hacker just use a USB keyboard in the first place?\u003c/p\u003e","title":"All your base are belong to us"},{"content":"One of the required tools in a programmer\u0026rsquo;s toolbox is a tool for comparing files. File comparison utilities have come a long way since the original Unix diff command, but this genre of utilities is still referred to as diff tools. For Windows, I use an open source diff utility called WinMerge. WinMerge includes a shell extension that makes it easy to use from within Windows Explorer.\nThe thing about diff tools is that they can be re-purposed and used for many tasks that have nothing to do with programming. For example, I use WinMerge to easily and quickly compare AutoCAD EULAs and other legal document revisions. I also use WinMerge to preview all changes before applying an upgrade to software like Wordpress or Joomla on my web server. In both cases, I can quickly see exactly what changed.\nThe power of a diff tool is impressive in its own right, but it\u0026rsquo;s true power borders on amazing when using it as a merge tool to reconcile multiple simultaneous changes to the same files. In programming, reconciling and merging simultaneous revisions allows multiple programmers to work in parallel, thereby reducing management overhead and eliminating the inherent inefficiency of a serial workflow. I think that the principles and even the tools could just as well be applied to any collaborative project such as designing an airplane or building a skyscraper.\nMost modern diff tools provide an easy to use GUI, and they do a lot more than just compare files. Even if you\u0026rsquo;re not a programmer, you should have a diff tool in your toolbox.\n","permalink":"https://www.manusoft.com/archive/blog/whats-the-diff/","summary":"\u003cp\u003eOne of the required tools in a programmer\u0026rsquo;s toolbox is a tool for comparing files. File comparison utilities have come a long way since the original Unix diff command, but this genre of utilities is still referred to as \u003ca href=\"http://en.wikipedia.org/wiki/Diff\"\u003ediff\u003c/a\u003e tools. For Windows, I use an open source diff utility called \u003ca href=\"https://sourceforge.net/projects/winmerge/\"\u003eWinMerge\u003c/a\u003e. WinMerge includes a shell extension that makes it easy to use from within Windows Explorer.\u003c/p\u003e","title":"What's the diff?"},{"content":"At Autodesk University, Autodesk CEO Carl Bass introduced the term \u0026ldquo;Infinite Computing\u0026rdquo; in an attempt to define Autodesk\u0026rsquo;s perspective on \u0026ldquo;the cloud\u0026rdquo; from a unique angle. I think the term is a brilliant and effective use of terminology because it focuses an otherwise nebulous concept and it radiates a sense of real and immediate purpose.\nInfinite computing is not really infinite, of course, and it\u0026rsquo;s certainly not infinitely accessible. However the metaphor is apt, because like the physical universe, as long as the virtual universe keeps expanding it is essentially infinite. [I can\u0026rsquo;t resist having some fun and taking the analogy a little bit further: at some point, Moore\u0026rsquo;s law will encounter relativistic effects, and we\u0026rsquo;ll realize that every transistor warps the virtual space-time continuum in proportion to the square of its clock speed.]\nSo why am I bearish on the prospect of infinite computing?\nLet\u0026rsquo;s say you buy a computer with multiple processors for, say, AutoCAD. Two processors can produce a nice performance boost, because AutoCAD can utilize 100% of one processor while the operating system uses the other. But what happens if you quadruple your capacity to eight processors? Unless you\u0026rsquo;re running independent programs that can use the extra processors, they offer very little benefit and are essentially wasted.\nThe moral of the story is this: an infinite computer is ineffective and inefficient unless it has an infinite number of simultaneous tasks to perform. It costs computing power to manage parallel tasks, so the practical limitations of \u0026ldquo;infinite\u0026rdquo; computing make it obviously unrealistic for all but highly specialized tasks. Even if we give it a more accurate name like \u0026ldquo;massively parallel computing\u0026rdquo;, such a system is hardly \u0026ldquo;sustainable\u0026rdquo; (to use another modern term of art) due to the inherent inefficiencies.\nA compromise is necessary. There are new ways to look at old problems that enable a more parallel approach to finding solutions, and I have no doubt that many engineering problems can be restated in a way that makes them amenable to parallel processing solutions \u0026ndash; but that\u0026rsquo;s hardly a revolutionary concept, and it certainly does not require an infinite computer for its implementation.\nIn the final analysis, \u0026ldquo;the cloud\u0026rdquo; is going to be about individuals connecting to each other and to their data seamlessly and in a location-agnostic way, and the \u0026ldquo;infinite computer\u0026rdquo; will be what they use to do it. Nothing more, nothing less.\n","permalink":"https://www.manusoft.com/archive/blog/infinite-computing-bah-humbug/","summary":"\u003cp\u003eAt Autodesk University, Autodesk CEO Carl Bass \u003ca href=\"https://deelip.com/autodesk-and-infinite-computing/\"\u003eintroduced the term \u0026ldquo;Infinite Computing\u0026rdquo;\u003c/a\u003e in an attempt to define Autodesk\u0026rsquo;s perspective on \u0026ldquo;the cloud\u0026rdquo; from a unique angle. I think the term is a brilliant and effective use of terminology because it focuses an otherwise nebulous concept and it radiates a sense of real and immediate purpose.\u003c/p\u003e","title":"Infinite Computing: Bah, Humbug!"},{"content":"Heap corruption bugs in C++ code can present some difficult debugging challenges. Often the actual corruption goes unnoticed until some apparently random point in the future when the corrupt memory is accessed by unrelated code. In such cases, it\u0026rsquo;s almost impossible to infer the location of the bug using typical debugging tools.\nCommon causes of heap corruption memory errors are modifying objects after they have been destroyed, or double deleting a pointer. In such cases, you often find out about the corruption well after it occurs with unhelpful errors like this:\nFree Heap block NNNNNNNN modified at NNNNNNNN after it was freed Aside from defensive programming techniques, a common strategy for combating these types of bugs is to log and track all memory allocations so that it\u0026rsquo;s possible to backtrack and determine which code last used the memory address or range of memory that got corrupted. Unfortunately, sometimes it isn\u0026rsquo;t possible or practical to add such diagnostic capabilities. For example, ObjectARX add-ons use AutoCAD\u0026rsquo;s heap and memory allocation functions, and unless you happen to have access to the AutoCAD source code, there is no way to change them.\nLuckily there is a debugging tool designed for this precise scenario: the PageHeap heap verifier tool (http://support.microsoft.com/kb/286470). This tool has been built into Windows since Windows 2000, but you have to turn it on in order to use it. I use the Global Flags Utility (gflags.exe from Debugging Tools for Windows) to turn on the PageHeap verifier when needed. The PageHeap utility must be used in conjunction with a debugger such as WinDbg or Visual Studio.\nA typical debugging use case for an ObjectARX add-on is to enable PageHeap monitoring for the entire AutoCAD process:\ngflags /p /enable acad.exe /full For monitoring only a specific ObjectARX module, use syntax like this:\ngflags /p /enable acad.exe /full /dlls myarx.arx Once PageHeap monitoring is enabled, you simply reproduce the heap corruption under a debugger like normal. The PageHeap utility will break execution as soon as the heap corruption occurs. Examining the call stack at that point will show exactly which code is causing the corruption.\nOnce you\u0026rsquo;ve fixed the problem, don\u0026rsquo;t forget to disable the PageHeap utility again:\ngflags /p /disable acad.exe I have not needed to use the PageHeap utility very often, but it has been a godsend when I needed it.\n","permalink":"https://www.manusoft.com/archive/blog/debugging-heap-corruption-with-pageheap/","summary":"\u003cp\u003eHeap corruption bugs in C++ code can present some difficult debugging challenges. Often the actual corruption goes unnoticed until some apparently random point in the future when the corrupt memory is accessed by unrelated code. In such cases, it\u0026rsquo;s almost impossible to infer the location of the bug using typical debugging tools.\u003c/p\u003e","title":"Debugging heap corruption with PageHeap"},{"content":"Do you use the Windows offline files (http://windows.microsoft.com/en-US/windows-vista/Understanding-offline-files) feature? I asked this question of some IT/CAD administrator types at Autodesk University last week, and was surprised to find that most didn\u0026rsquo;t even know what it was. In fact, of the dozen or so people I asked, only one actually used the feature.\nThere are enterprise solutions that perform similar functions (and cost a lot more), so some of you may not have much need for the feature that has been included in the box since Windows 2000, but I\u0026rsquo;ll bet that a lot of you would use it if you knew why you needed it.\nIf you ever need to access remote files from a local network or beyond, you can benefit from the offline files feature. In it\u0026rsquo;s simplest form, the feature allows you to continue accessing offline files when your network connection is slow or unavailable. It does this by caching copies of your files locally, and automatically keeping the remote and local copies synchronized in the background. If your data is on the cloud, offline files are your shelter from the storm.\nFor example, it\u0026rsquo;s common for AutoCAD installations to access configuration files stored on a network server shared by everyone in the organization. If these files are made available offline, the user can continue working on local drawing files without interruption even when the network is completely offline. In fact, if the network is slow or inaccessible for any reason, using offline files will allow the user to continue working as if the network was still perfectly functional.\nThe UI for offline files has been made very simple (right-click on a remote file in Explorer and select \u0026lsquo;Always available offline\u0026rsquo;), but there is more power and potential optimization under the hood of this feature. If you\u0026rsquo;d like to get technical, this TechNet article gives you a taste of the nitty gritty details.\nSo, do you already use offline files? If so, and especially if you also use RoboCopy, I\u0026rsquo;d like to hear from you. I use the offline files feature all the time, and I\u0026rsquo;ve developed a command line utility called RoboCache to manage offline files in Windows Vista and later. I\u0026rsquo;m looking for a few people to test the utility.\n[Update: RoboCache has now been released.]\n","permalink":"https://www.manusoft.com/archive/blog/windows-offline-files/","summary":"Notes on the Windows offline files cache and RoboCache, a command-line tool for managing it.","title":"Windows offline files"},{"content":"Over the years, I and others have provided instructions for turning off the AutoCAD InfoCenter (or Communication Center in older versions). The instructions are different depending on the AutoCAD version. To make things simple, I decided to roll them all up into a single one-size-fits-all MSI file that disables InfoCenter for any and all versions of AutoCAD or AutoCAD LT in one fell swoop.\nThe AcadInfoCenterOff.msi file on the ManuSoft Freebies page contains a custom action that disables InfoCenter during installation. Uninstall restores all previous settings. No actual files are installed, as all changes are made in the registry. Packaging the custom action into an MSI is just a convenient way to ensure that you can uninstall in the future from Windows Control Panel even long after the MSI is lost or forgotten.\nWhy would you want to disable the InfoCenter? Faster startup, for one. Fewer crashes and lockups, for another. This feature of AutoCAD actually starts an invisible background task that runs as a separate process (named either WSCommCntr1.exe or WSCommCntr2.exe), which establishes inter-process communication with the running AutoCAD. This type of inter-process communication channel is notoriously unreliable, and it\u0026rsquo;s not unusual to see the background task orphaned in memory after AutoCAD closes in an unusual way, sometimes consuming a lot of CPU cycles and sometimes preventing an AutoCAD restart until it is forcibly ended.\n","permalink":"https://www.manusoft.com/archive/blog/disable-autocad-infocenter/","summary":"\u003cp\u003eOver the years, I and others have \u003ca href=\"/2009/03/disable-infocenter-in-autocad-2010.htm\"\u003eprovided instructions\u003c/a\u003e for turning off the AutoCAD InfoCenter (or Communication Center in older versions). The \u003ca href=\"/2007/09/autocad-2008-slow-startup-fix.htm\"\u003einstructions are different\u003c/a\u003e depending on the AutoCAD version. To make things simple, I decided to roll them all up into a single one-size-fits-all MSI file that disables InfoCenter for any and all versions of AutoCAD  or AutoCAD LT in one fell swoop.\u003c/p\u003e","title":"Disable AutoCAD InfoCenter"},{"content":"I have more or less completed the task of migrating my internal projects to Visual Studio 2010. Native C++ programmers are pretty low on the totem pole of programming coolness these days, but Microsoft did throw us a few bones. At this point I have to say I\u0026rsquo;m ambivalent overall with VS 2010, but I really like some of the architectural changes and I\u0026rsquo;m excited about the future.\nThe Good\nThe new intellisense database is a huge improvement over the old .ncb file. I\u0026rsquo;ve had a few hiccups, but in general nothing serious. It still locks up the IDE occasionally, but not nearly as often or as long as previous versions. In previous versions I had to delete corrupted .ncb files all the time; those days appear to be gone in VS 2010.\nDespite some shortcomings and the extra work required to make it usable, I love the new (to C++ projects anyway) MSBuild system and the new native multi-targeting feature that came with it. The MSBuild system is completely customizable, flexible, consistent, and standardized (unfortunately all the documentation assumes you\u0026rsquo;re already familiar with it, so it\u0026rsquo;s very daunting at first). MSBuild and native multi-targeting were the main reason I decided to move to VS 2010.\nThe switch away from the single inherited property sheet to the unlimited stack of property sheets is a very nice change, albeit a migration headache. In previous versions, these had to be maintained in a text editor; now they can be managed completely within the IDE using the familiar property page interface. This ranks as my second favorite improvement behind native multi-targeting.\nVS 2010 still gets confused when you use the same source files in multiple projects, but less so than previous versions. In previous versions, source code was always parsed in the context of the first listed project of the solution that uses the file. In VS 2010, it is displayed in the context of the project you opened the file from. IMO it should switch with the active project, but at least you can now close a file and reopen it from the other project to view it in the context of the new project. This affects the display of Intellisense errors and graying of code hidden by preprocessor macros.\nThe Bad\nThere is no way to permanently turn off the display of Intellisense errors in the error list. You have to wait until one is displayed, then right click in the header area to turn them off. I guess in simple projects it might be useful to leave them on, but in all my projects they are numerous and useless.\nThe build system gets confused by multiple projects in a solution with different sets of configurations that don\u0026rsquo;t match the solution configurations one-to-one. Previous versions did too to some extent, but you could always fix these problems in earlier versions by setting build dependencies correctly in the solution file. In VS 2010, I have some projects that simply will not build correctly in some scenarios no matter how they are set. There are several different manifestations of this problem: batch builds that build projects in the wrong order, rebuild all resulting in a project getting cleaned a second time after it has already been rebuilt (hence not being available when a referencing project needs it), and batch builds that don\u0026rsquo;t build referenced projects which are selected to build but which are not selected in the active solution configuration.\nUtility and MakeFile projects cannot have output files set, which means e.g. deployment projects that consume their output will end up empty handed. In addition, they can delete files indiscriminately when cleaning (https://connect.microsoft.com/VisualStudio/feedback/details/575055/rebuild-solution-should-do-all-cleaning-before-any-building). I found a partial workaround to these problems by changing the project type to Application, and giving each project a unique intermediate directory \u0026ndash; but that requires a bit of extra work.\nMigrating complex projects is far from automatic. A lot has changed, and while VS 2010 does a decent job of migrating things from earlier versions, I had to do moderate to massive manual work after the migration to every single one of my migrated projects. For example, the migration resulted in odd and incomplete project configurations named \u0026ldquo;Template\u0026rdquo; being left in the converted project files that had to be manually removed in a text editor. Build rules required some manual work in some cases. I also had to convert all my Utility and MakeFile projects to Application projects, which required some manual rewiring.\nVisual Studio has gotten larger and slower. It takes longer to start than VS 2008, it\u0026rsquo;s slower to start a debuggee, and some common actions like going to a symbol definition occasionally and unpredictably result in interminable minutes-long delays during which the UI is completely unresponsive.\nVisual Studio caches some open files. In some cases, this means that files cannot be deleted until Visual Studio is closed. I\u0026rsquo;ve also seen cases where the file was not held open, but changes were ignored until Visual Studio was closed and restarted. That one resulted in some hair pulling until I figured out that I have to close and restart Visual Studio if I modify certain MSBuild related files (most notably, *.props files).\nThe Ugly\nLockups. I\u0026rsquo;ve had several cases where VS 2010 locked up so tight even task manager couldn\u0026rsquo;t get a word in edgewise, and I ultimately had to hard reset the computer. Previous versions lock up and crash as well, but I can almost always clear the cobwebs by killing the process. In VS 2010, there are several background worker processes involved as well, and things can get a bit uglier when those background processes get in on the action.\nI have never been able to single step a 32-bit debuggee on my 64 bit Windows 7 machine. I was hoping Visual Studio 2010 would fix that, but alas, it\u0026rsquo;s still broken.\nFinally, there is one bug that drives me absolutely nuts. It has dogged Visual Studio since forever, and I\u0026rsquo;m sorry to say that Visual Studio 2010 still has it. The bug is that certain actions cause every merge module and deployment project to be expanded in Solution Explorer. I meticulously build a solution explorer sand castle by setting the state of every node in my complex and sometimes deeply nested projects. Then suddenly and without warning, something as simple as going to a symbol declaration causes Visual Studio to crawl from one end of the solution to the other, exploding every carefully collapsed deployment project node. It is such a helpless feeling, like watching the waves slowly and tauntingly wash away your sand castle, all the while knowing that you have no choice but to wait patiently then rebuild it again when the storm passes. Why, oh why, didn\u0026rsquo;t Microsoft finally fix this?\n","permalink":"https://www.manusoft.com/archive/blog/visual-studio-2010-migration-post-mortem/","summary":"\u003cp\u003eI have more or less completed the task of migrating my internal projects to Visual Studio 2010. Native C++ programmers are pretty low on the totem pole of programming coolness these days, but Microsoft did throw us a few bones. At this point I have to say I\u0026rsquo;m ambivalent overall with VS 2010, but I really like some of the architectural changes and I\u0026rsquo;m excited about the future.\u003c/p\u003e","title":"Visual Studio 2010 Migration Post Mortem"},{"content":"I was hoping that Microsoft would address the need to target earlier versions of Visual Studio within the Visual Studio 2010 IDE, but since they decided to punt (https://connect.microsoft.com/VisualStudio/feedback/details/570466/vs-2010-native-build-cannot-produce-ansi-response-files), I tackled the problem myself. I\u0026rsquo;ve released my solution as an open source project named Daffodil for Visual Studio.\nWith Daffodil installed on your system along with earlier versions of Visual Studio, you can use the new native multi-targeting feature in Visual Studio 2010 to target those earlier versions. This makes it possible to use Visual Studio 2010 for building ObjectARX projects, for example. Daffodil performs essentially the same function that my VC Build Hook utility did in Visual Studio 2008 and 2005.\n","permalink":"https://www.manusoft.com/archive/blog/visual-studio-2010-native-multi-targeting/","summary":"\u003cp\u003eI was hoping that Microsoft would address \u003ca href=\"/2010/01/visual-studio-2010-and-vc-build-hook.htm\"\u003ethe need to target earlier versions of Visual Studio\u003c/a\u003e within the Visual Studio 2010 IDE, but since they decided to punt (\u003ca href=\"https://connect.microsoft.com/VisualStudio/feedback/details/570466/vs-2010-native-build-cannot-produce-ansi-response-files%29\"\u003ehttps://connect.microsoft.com/VisualStudio/feedback/details/570466/vs-2010-native-build-cannot-produce-ansi-response-files)\u003c/a\u003e, I tackled the problem myself. I\u0026rsquo;ve released my solution as an open source project named \u003ca href=\"https://github.com/manusoft-gh/manusoft-daffodil\"\u003eDaffodil for Visual Studio\u003c/a\u003e.\u003c/p\u003e","title":"Visual Studio 2010 Native Multi-Targeting"},{"content":"Those of you with bad eyesight (and the rest of us throwbacks) will appreciate the new \u0026lsquo;Classic title bar\u0026rsquo; feature in QuikPik 4.1. This new feature addresses AutoCAD 2009 and later versions of AutoCAD with the fancy schmancy title bar and menu bar.\nOut-of-the-box (not customizable):\nQuikPik \u0026lsquo;Classic title bar\u0026rsquo; (Windows 7 Aero Theme):\nQuikPik \u0026lsquo;Classic title bar\u0026rsquo; (Windows 7 Classic Theme):\nIf you already own a QuikPik license, you can get the new version by logging in and downloading it again from the link in your order detail. If you don\u0026rsquo;t own QuikPik yet, try it out by installing the shareware version \u0026ndash; and if you like it, buy it!\n","permalink":"https://www.manusoft.com/archive/blog/quikpik-4-1-adds-classic-title-bar-feature/","summary":"\u003cp\u003eThose of you with bad eyesight (and the rest of us throwbacks) will appreciate the \u003ca href=\"/resources/apps/quikpik/\"\u003enew \u0026lsquo;Classic title bar\u0026rsquo; feature\u003c/a\u003e in \u003ca href=\"/resources/apps/quikpik/\"\u003eQuikPik 4.1\u003c/a\u003e. This new feature addresses AutoCAD 2009 and later versions of AutoCAD with the fancy schmancy title bar and menu bar.\u003c/p\u003e","title":"QuikPik 4.1 Adds Classic Title Bar Feature"},{"content":"Yesterday when I attempted to install the AutoCAD 2011 service pack (http://withoutanet.typepad.com/without_a_net/2010/08/update-1-released-for-autocad-and-autocad-lt-2011-.html) (er, I mean \u0026ldquo;update\u0026rdquo;), I encountered the classic UI paradox where you\u0026rsquo;re forced to choose from a set of equally undesirable choices, this time with a bonus.\nI received error 1321. My choices were to retry or cancel. If I chose to retry, I got the same error again. If I chose to cancel, I got a bonus question: it asked whether I really wanted to cancel. I had to lie and choose yes, otherwise I would be trapped in an infinite loop.\nThe error message indicated that the cause was the installer\u0026rsquo;s inability to write to the original installation media. I\u0026rsquo;m not sure why it wanted to write to the original media. The only way to apply the service pack was to uninstall AutoCAD, create a temporary copy of the original media with write permission enabled for the copy, then reinstall AutoCAD from the copy and apply the service pack afterward.\n","permalink":"https://www.manusoft.com/archive/blog/the-cancel-retry-paradox/","summary":"\u003cp\u003eYesterday when I attempted to install the AutoCAD 2011 service pack (\u003ca href=\"http://withoutanet.typepad.com/without_a_net/2010/08/update-1-released-for-autocad-and-autocad-lt-2011-.html\"\u003ehttp://withoutanet.typepad.com/without_a_net/2010/08/update-1-released-for-autocad-and-autocad-lt-2011-.html\u003c/a\u003e) (er, I mean \u0026ldquo;update\u0026rdquo;), I encountered the classic UI paradox where you\u0026rsquo;re forced to choose from a set of equally undesirable choices, this time with a bonus.\u003c/p\u003e\n\u003cp\u003eI received error 1321. My choices were to retry or cancel. If I chose to retry, I got the same error again. If I chose to cancel, I got a bonus question: it asked whether I really wanted to cancel. I had to lie and choose yes, otherwise I would be trapped in an infinite loop.\u003c/p\u003e","title":"The Cancel Retry Paradox"},{"content":"I wrote before about corrupt text causing bogus \u0026ldquo;Missing Language Pack\u0026rdquo; warnings in AutoCAD. That case prompted me to write a file repair utility. However, since the case appeared to be isolated, I never released the utility to the public.\nThe problem has been rearing its ugly head again, so I decided to dust off the original code and release it. The repair utility is now available on the freebies page (look for CleanLanguage.zip) for AutoCAD 2007 and later versions of AutoCAD. I have not tested any recent cases, so I can\u0026rsquo;t be sure it is the same problem. If you try the utility, please report your results by leaving a comment here.\n","permalink":"https://www.manusoft.com/archive/blog/missing-language-pack-dwg-file-repair/","summary":"\u003cp\u003eI \u003ca href=\"/2009/08/autocad-anguage-pack-drawing-file.htm\"\u003ewrote before\u003c/a\u003e about corrupt text causing bogus \u0026ldquo;Missing Language Pack\u0026rdquo; warnings in AutoCAD. That case prompted me to write a file repair utility. However, since the case appeared to be isolated, I never released the utility to the public.\u003c/p\u003e\n\u003cp\u003eThe problem has been \u003ca href=\"https://www.cadnauseam.com/2010/07/22/partial-fix-for-language-pack-problem/\"\u003erearing its ugly head again\u003c/a\u003e, so I decided to dust off the original code and release it. The repair utility is now available on the \u003ca href=\"/resources/freebies/arx/\"\u003efreebies page\u003c/a\u003e (look for CleanLanguage.zip) for AutoCAD 2007 and later versions of AutoCAD. I have not tested any recent cases, so I can\u0026rsquo;t be sure it is the same problem. If you try the utility, please report your results by \u003ca href=\"/about/\"\u003eleaving a comment here\u003c/a\u003e.\u003c/p\u003e","title":"Missing Language Pack DWG File Repair"},{"content":"It\u0026rsquo;s not too often that lawyers give away their work, but Gene Quinn of IPWatchdog.com is doing just that by providing some free sample confidentiality agreements. If you can afford to pay an attorney for simple agreements like this, more power to you; otherwise you may want to grab these free agreements while you can. There is of course a disclaimer, but thankfully it\u0026rsquo;s short and simple just like the agreements.\n","permalink":"https://www.manusoft.com/archive/blog/free-confidentiality-agreements/","summary":"\u003cp\u003eIt\u0026rsquo;s not too often that lawyers give away their work, but Gene Quinn of \u003ca href=\"http://www.ipwatchdog.com/\"\u003eIPWatchdog.com\u003c/a\u003e is doing just that by providing some \u003ca href=\"http://www.ipwatchdog.com/tradesecret/sample-confidentiality-agreements/\"\u003efree sample confidentiality agreements\u003c/a\u003e. If you can afford to pay an attorney for simple agreements like this, more power to you; otherwise you may want to grab these free agreements while you can. There is of course a disclaimer, but thankfully it\u0026rsquo;s short and simple just like the agreements.\u003c/p\u003e","title":"Free Confidentiality Agreements"},{"content":"I had the good fortune of hearing Deelip Menezes deliver the keynote address at the Bricsys 2010 Conference in person. If you missed it, check out the video now at the Bricsys web site. The question and answer session after the speech is an excellent harbinger of the discussions to come if Deelip is correct in his prediction about CAD on the cloud.\n","permalink":"https://www.manusoft.com/archive/blog/deelip-menezes-predicts-cloudy-future/","summary":"\u003cp\u003eI had the \u003ca href=\"/2010/06/bricsys-2010-developer-conference-post-mortem.htm\"\u003egood fortune\u003c/a\u003e of hearing \u003ca href=\"https://deelip.com/\"\u003eDeelip Menezes\u003c/a\u003e deliver the keynote address at the \u003ca href=\"https://bricscad.octave.com/conference/\"\u003eBricsys 2010 Conference\u003c/a\u003e in person. If you missed it, check out the video now at the \u003ca href=\"https://bricscad.octave.com/\"\u003eBricsys web site\u003c/a\u003e. The question and answer session after the speech is an excellent harbinger of the discussions to come if Deelip is correct in his prediction about CAD on the cloud.\u003c/p\u003e","title":"Deelip Menezes Predicts a Cloudy Future"},{"content":"[Update: See Visual Studio 2010 Native Multi-Targeting]\nDevelopers, if you use VC Build Hook and/or need the same capability in Visual Studio 2010, please let Microsoft know by voting for a fix (https://connect.microsoft.com/VisualStudio/feedback/details/570466/vs-2010-native-build-cannot-produce-ansi-response-files). I\u0026rsquo;ve written before (and here) about the problem. I think it is possible to hack a third party solution, but by far the best solution is for Microsoft to add back the ability to produce ANSI response files in service pack 1.\n","permalink":"https://www.manusoft.com/archive/blog/using-vc-7-build-tools-in-visual-studio-2010/","summary":"\u003cp\u003e\u003cem\u003e[Update: See \u003c/em\u003e\u003ca href=\"/2010/10/visual-studio-2010-native-multi-targeting.htm\"\u003e\u003cem\u003eVisual Studio 2010 Native Multi-Targeting\u003c/em\u003e\u003c/a\u003e\u003cem\u003e]\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eDevelopers, if you use \u003ca href=\"/develop/objectarx/vc-build-hook/\"\u003eVC Build Hook\u003c/a\u003e and/or need the same capability in Visual Studio 2010, please let Microsoft know by voting for a fix (\u003ca href=\"https://connect.microsoft.com/VisualStudio/feedback/details/570466/vs-2010-native-build-cannot-produce-ansi-response-files%29\"\u003ehttps://connect.microsoft.com/VisualStudio/feedback/details/570466/vs-2010-native-build-cannot-produce-ansi-response-files)\u003c/a\u003e. I\u0026rsquo;ve \u003ca href=\"/2010/01/visual-studio-2010-and-vc-build-hook.htm\"\u003ewritten before\u003c/a\u003e (and \u003ca href=\"/2010/04/visual-studio-2010-ships.htm\"\u003ehere\u003c/a\u003e) about the problem. I think it is possible to hack a third party solution, but by far the best solution is for Microsoft to add back the ability to produce ANSI response files in service pack 1.\u003c/p\u003e","title":"Using VC 7 build tools in Visual Studio 2010"},{"content":"I use GlowCode (http://www.glowcode.com) for profiling ObjectARX applications. As far as I know, this is the only profiler that works with AutoCAD. What makes GlowCode special is that it can instrument code on the fly, including a monster like AutoCAD. It has a clunky interface that takes some patience to figure out, but it\u0026rsquo;s a lifesaver when you need it.\nRecently a CADLock customer sent us a drawing file that was apparently not very complicated, yet it took over 20 minutes to create a deep vault. To determine the cause, I used GlowCode to profile the vault creation process. I could see almost immediately that most of the time was being spent in AcDbObjectId::operator ==, which was being called from AcDbObjectIdArray::find.\nThis turned out to be a classic case of using the wrong type of container. Searching an AcDbObjectIdArray isn\u0026rsquo;t bad when the array is small, but this drawing contained a special case where the array was very large, and this special case exposed the flaw. I changed the array to a std::set and tested again. The new time was 30 seconds to create the vault \u0026ndash; a slight reduction of approximately 95%.\n[Full Disclosure: Electric Software (http://www.glowcode.com/about.htm) has for many years provided me with a complimentary license of GlowCode in exchange for my testing and feedback.]\n","permalink":"https://www.manusoft.com/archive/blog/glowcode-success-story/","summary":"\u003cp\u003eI use GlowCode (\u003ca href=\"http://www.glowcode.com\"\u003ehttp://www.glowcode.com\u003c/a\u003e) for profiling ObjectARX applications. As far as I know, this is the only profiler that works with AutoCAD. What makes GlowCode special is that it can instrument code on the fly, including a monster like AutoCAD. It has a clunky interface that takes some patience to figure out, but it\u0026rsquo;s a lifesaver when you need it.\u003c/p\u003e","title":"GlowCode Success Story"},{"content":"I am back home after a whirlwind trip to the Bricsys 2010 Conference. I\u0026rsquo;m very happy to be back to Ohio food and my own bed. It was a great experience and well worth the trouble.\nI\u0026rsquo;ve written before (and here) about the problem with food at conferences, and this one was no different. Unfortunately, there are no Burger Kings in Belgium, so the problem was compounded. I was excited when I saw a restaurant touting \u0026ldquo;American Food\u0026rdquo;, unfortunately it was \u0026ldquo;American Food as Europeans Imagine It\u0026rdquo;, which is not American food at all.\nThe hotel was, well, let\u0026rsquo;s just say you got that genuine experience of living in the past. Not quite the stone age past, but clearly before the age of modern locks and clocks \u0026ndash; and well before air conditioning was invented. To make matters worse, housekeeping did not replace the provided shampoo and soap, so I had to make do with no soap on day 2 of the conference. The concert hall where the conference was held was also not air conditioned, which just compounded the problem \u0026ndash; and certainly contributed to the dispersement of attendees from initially a small intimate group on day 1 to most of us sitting in the galleries by ourselves by the end of day 2.\nThe good news is that all the suffering was worthwhile. Bricsys was very accomodating, and it was a pleasure to meet modern day Robin Hood and Bricsys CEO Erik de Keyser and his merry band of men. Deelip Menezes\u0026rsquo; keynote address about the future (cloud) of CAD (cloud) was (cloud) excellent, and the discussion that followed turned into a 12 round bout that Deelip played to a draw. Well done, Deelip, well done. I\u0026rsquo;m sure the fight will continue virtually, so take heed, and stay out of the line of fire.\nI learned that Bricsys has made an impressive investment of time and resources into a foundation upon which to build a \u0026ldquo;DWG CAD\u0026rdquo; business. This is no longer about who can take on Autodesk. Autodesk conceded the AutoCAD (or \u0026ldquo;DWG\u0026rdquo;) market with their push toward subscription (aka \u0026ldquo;maintenance\u0026rdquo;), annual release cycles, and artificially high pricing on their platform technologies. There are literally dozens of companies trying to capture that market: products like ZWCAD (http://www.zwcad.org/) and GstarCAD (http://www.staricad.com/) from China are hot on the heels of Bricscad. This is about who will emerge to control the market that Autodesk abandoned, and to some extent about how Autodesk will respond.\nBricscad is currently the clear leader among DWG CAD companies in terms of technical capabilities, but at least to date, it\u0026rsquo;s mostly AutoCAD application developers that recognize this (because of Bricsys\u0026rsquo; very successful effort to make their BRX API source code compatible with ObjectARX). The question is whether they can convince consumers that Bricscad is the best choice. I think we will be a long way toward answering that question by this time next year, and of course the answer will be critically important to the DWG CAD market. I think it was shrewd of Bricsys to invite thought leaders like Deelip to this conference, but that is only a first step. Still, the very fact that I am writing and Deelip is blogging and tweeting (http://twitter.com/search?q=%23bricsys2010) about Bricscad is an important milestone on the road to respect.\n[Full Disclosure: Bricsys paid for all my travel and conference expenses.]\n","permalink":"https://www.manusoft.com/archive/blog/bricsys-2010-developer-conference-post-mortem/","summary":"\u003cp\u003eI am back home after a whirlwind trip to the \u003ca href=\"https://bricscad.octave.com/conference/\"\u003eBricsys 2010 Conference\u003c/a\u003e. I\u0026rsquo;m very happy to be back to Ohio food and my own bed. It was a great experience and well worth the trouble.\u003c/p\u003e\n\u003cp\u003eI\u0026rsquo;ve \u003ca href=\"/2007/12/au-2007-post-mortem.htm\"\u003ewritten before\u003c/a\u003e (and \u003ca href=\"/archive/anecdotes/au97/\"\u003ehere\u003c/a\u003e) about the problem with food at conferences, and this one was no different. Unfortunately, there are no Burger Kings in Belgium, so the problem was compounded. I was excited when I saw a restaurant touting \u0026ldquo;American Food\u0026rdquo;, unfortunately it was \u0026ldquo;American Food as Europeans Imagine It\u0026rdquo;, which is not American food at all.\u003c/p\u003e","title":"Bricsys 2010 Developer Conference Post Mortem"},{"content":"Bricsys asked me to give a short presentation about OpenDCL to developers at their Bricsys 2010 Conference in Bruges next week. I\u0026rsquo;m looking forward to meet keynote speaker Deelip Menezes and other familiar names in the CAD community, and of course planning to learn more about the ever evolving Bricscad platform.\n[Full Disclosure: Bricsys is paying for all my travel and conference expenses.]\n","permalink":"https://www.manusoft.com/archive/blog/belgium-bound/","summary":"\u003cp\u003e\u003ca href=\"https://bricscad.octave.com/\"\u003eBricsys\u003c/a\u003e asked me to give a short presentation about \u003ca href=\"https://www.opendcl.com/wordpress/?p=137\"\u003eOpenDCL\u003c/a\u003e to developers at their \u003ca href=\"https://bricscad.octave.com/conference/\"\u003eBricsys 2010 Conference\u003c/a\u003e in Bruges next week. I\u0026rsquo;m looking forward to meet keynote speaker \u003ca href=\"https://deelip.com/\"\u003eDeelip Menezes\u003c/a\u003e and other familiar names in the CAD community, and of course planning to learn more about the ever evolving Bricscad platform.\u003c/p\u003e","title":"Belgium Bound"},{"content":"Autodesk has been pushing for years now to get all customers onto an annual subscription program. They\u0026rsquo;ve trotted out the typical reasons: it\u0026rsquo;s cheaper, it\u0026rsquo;s easier, it\u0026rsquo;s simpler, you get more free stuff, etc. Clearly the \u0026ldquo;sell now, deliver later\u0026rdquo; model is better for Autodesk, and it\u0026rsquo;s not surprising that Autodesk has been pushing it hard.\nOne can imagine that tough economic times are taking a toll on Autodesk\u0026rsquo;s customers, and that they are deciding to jump off the subscription bandwagon. Ralph Grabowski suspects that plummeting subscription revenues (http://worldcadaccess.typepad.com/blog/2010/05/autodesk-subscription-numbers-in-its-own-words.html) are causing Autodesk to renew efforts to paint a rosy picture and convince its customers to stay on the wagon.\nIn an interview on Steve Johnson\u0026rsquo;s blog nauseam, Callan Carpenter of Autodesk attempts to portray non-subscription customers as a dying breed.\nWe’re down to very low single digits of customers who upgrade, and of those only half of those upgrade 1 or 2 years back. So we’re talking about approximately 1.5% of our revenue that comes from customers upgrading 1 and 2 versions back. This statement seems to be carefully designed to imply that only 3% of customers are not on subscription. That\u0026rsquo;s not what it says, of course, but that\u0026rsquo;s the impression it attempts to convey. Without knowing the precise definition of \u0026ldquo;customers who upgrade\u0026rdquo; (how could you possibly know that a customer won\u0026rsquo;t upgrade?), and without knowing what percentage of those same revenues come from subscription customers, there is just no way to gain any real information from Callan\u0026rsquo;s statement.\nSince I can throw numbers around just as well as the next guy, I decided to survey a random sampling of Autodesk customers (that also happen to be ManuSoft customers). According to the responses I received, 82% of Autodesk customers fall into the non-subscription category, and about half of those are in the \u0026ldquo;3 or more versions behind\u0026rdquo; category.\nWhat\u0026rsquo;s really interesting is that if I carefully hand pick the time period, then about 3% of ManuSoft revenues for that time period came from non-subscription Autodesk customers. Funny how that works.\n","permalink":"https://www.manusoft.com/archive/blog/the-customer-doesnt-count/","summary":"\u003cp\u003eAutodesk has been pushing for years now to get all customers onto an annual subscription program. They\u0026rsquo;ve trotted out the typical reasons: it\u0026rsquo;s cheaper, it\u0026rsquo;s easier, it\u0026rsquo;s simpler, you get more free stuff, etc. Clearly the \u0026ldquo;sell now, deliver later\u0026rdquo; model is better for Autodesk, and it\u0026rsquo;s not surprising that Autodesk has been pushing it hard.\u003c/p\u003e","title":"The customer doesn't count"},{"content":"After over 10 years of the same infrastructure and the same look and feel, the ManuSoft web site has finally been given an overhaul. The original web site used Perl scripts that I wrote myself to serve up pages by patching together a header, table-of-contents, and main content frame and displaying it either as a 3-frame web page or by using an HTML \u0026lt;table\u0026gt; to format the layout. It wasn\u0026rsquo;t exactly pretty, but it functioned well and served its purpose for a long time.\nSo what prompted the new design? Primarily my desire to make it easier for customers to download updates to previously purchased software. The old web site used a rather simplistic authentication system that resulted in me spending a lot of time looking up order numbers for customers who had lost their order information. There also was no automated way for customers to update their own registration information, so I had to do that as well.\nThe new web site requires only a user name and password, both of which can be retrieved or reset simply by entering the email address for the account. Hopefully this will reduce the need for manual intervention. If you purchased ManuSoft software in the past, please visit the Customer Service page now to activate your account (in the Legacy Account section).\nI used Joomla for the content management system and VirtueMart for the shopping cart, both of them heavily customized. The template I chose doesn\u0026rsquo;t work correctly with IE6, but later versions of IE, FireFox, Opera, and Chrome seem to work pretty well (except that, ironically, my Google Translate widget displays incorrectly in Chrome).\nI think the new site looks a bit nicer and more modern than the old one, although it\u0026rsquo;s still amateur by most standards. As long as it serves its purpose of making both yours and my job easier, I\u0026rsquo;m satisfied.\n","permalink":"https://www.manusoft.com/archive/blog/new-manusoft-web-site/","summary":"\u003cp\u003eAfter \u003ca href=\"http://web.archive.org/web/20000510004912/http://www.manusoft.com/\"\u003eover 10 years\u003c/a\u003e of the same infrastructure and the same look and feel, the ManuSoft web site has finally been given an overhaul. The original web site used Perl scripts that I wrote myself to serve up pages by patching together a header, table-of-contents, and main content frame and displaying it either as a 3-frame web page or by using an HTML \u0026lt;table\u0026gt; to format the layout. It wasn\u0026rsquo;t exactly pretty, but it functioned well and served its purpose for a long time.\u003c/p\u003e","title":"New ManuSoft web site"},{"content":"For AutoCAD 2011, Autodesk made relatively few changes in the EULA. They fixed the grammar error that was introduced in AutoCAD 2010, but they didn\u0026rsquo;t make any changes to the convoluted \u0026ldquo;License Grant\u0026rdquo; wording that was also added in AutoCAD 2010.\nThere are a handful of minor tweaks here and there, but the only substantial change is some newly added text in section 9.1 that is intended to make sure that AutoCAD licenses can\u0026rsquo;t be liquidated during bankruptcy proceedings:\nIn the context of any bankruptcy proceeding, You acknowledge and agree that this Agreement is and shall be treated as an executory contract of the type described by Section 365(c)(1) of Title 11 of the United States Code and may not be assigned without Autodesk's prior written consent, which may be withheld in Autodesk's sole and absolute discretion. Just for fun, I made a chart that shows how the AutoCAD US/Canada EULA has grown since AutoCAD 2000. The EULA grew 150% from 12139 non-space characters in AutoCAD 2000 to 30235 non-space characters in AutoCAD 2011. For what it\u0026rsquo;s worth, the size of acad.exe grew 75% in the same timeframe.\n","permalink":"https://www.manusoft.com/archive/blog/autocad-2011-eula-changes/","summary":"\u003cp\u003eFor AutoCAD 2011, Autodesk made relatively few changes in the EULA. They fixed the \u003ca href=\"/2009/03/whats-new-in-autocad-2010-eula.htm\"\u003egrammar error that was introduced in AutoCAD 2010\u003c/a\u003e, but they didn\u0026rsquo;t make any changes to the convoluted \u0026ldquo;License Grant\u0026rdquo; wording that was also added in AutoCAD 2010.\u003c/p\u003e","title":"AutoCAD 2011 EULA Changes"},{"content":"The Library of Congress announced yesterday that they are archiving every tweet ever published. I think a lot of people consider their tweets (and Facebook messages) as ephemeral writing that disappears into the ether, without thinking about the implications of its survival (mildly NSFW).\n","permalink":"https://www.manusoft.com/archive/blog/all-your-tweets/","summary":"\u003cp\u003eThe Library of Congress announced yesterday that they are \u003ca href=\"http://blogs.loc.gov/loc/2010/04/how-tweet-it-is-library-acquires-entire-twitter-archive/\"\u003earchiving every tweet ever published\u003c/a\u003e. I think a lot of people consider their tweets (and Facebook messages) as ephemeral writing that disappears into the ether, without \u003ca href=\"http://www.lamebook.com\"\u003ethinking about the implications of its survival (mildly NSFW)\u003c/a\u003e.\u003c/p\u003e","title":"All your tweets are belong to us"},{"content":"Visual Studio 2010 shipped today (http://blogs.msdn.com/visualstudio/archive/2010/04/12/visual-studio-2010-is-now-available.aspx) accompanied by .NET Framework 4.0. I blogged before about the switch to using the MSBuild build system, and how that theoretically could be helpful in targeting multiple AutoCAD versions from the same solution. The shipping VS 2010 does not support non-Unicode response files, so out-of-the-box it cannot target VC 7.0 (for AutoCAD 2006 and earlier). When time permits, I\u0026rsquo;m planning to see if I can find a workaround; in the meantime, I\u0026rsquo;ll continue to use VS 2008 for ObjectARX.\n","permalink":"https://www.manusoft.com/archive/blog/visual-studio-2010-ships/","summary":"\u003cp\u003eVisual Studio 2010 shipped today (\u003ca href=\"http://blogs.msdn.com/visualstudio/archive/2010/04/12/visual-studio-2010-is-now-available.aspx\"\u003ehttp://blogs.msdn.com/visualstudio/archive/2010/04/12/visual-studio-2010-is-now-available.aspx\u003c/a\u003e) accompanied by .NET Framework 4.0. I blogged before about the switch to using the MSBuild build system, and how that theoretically could be helpful in targeting multiple AutoCAD versions from the same solution. The shipping VS 2010 does not support non-Unicode response files, so out-of-the-box it cannot target VC 7.0 (for AutoCAD 2006 and earlier). When time permits, I\u0026rsquo;m planning to see if I can find a workaround; in the meantime, I\u0026rsquo;ll continue to use VS 2008 for ObjectARX.\u003c/p\u003e","title":"Visual Studio 2010 Ships"},{"content":"Tyler Ochoa (law professor and two time \u0026ldquo;Jeopardy!\u0026rdquo; champion) writes an interesting post about the 300th anniversary of the first copyright law, called the Statute of Anne. Referring to the motivation behind the original law, Ochoa says \u0026ldquo;Although the Stationers were chiefly concerned with restoring and perpetuating their monopoly, they framed their petition to Parliament in terms of justice for authors.\u0026rdquo; In many respects, not much has changed since 1710.\n","permalink":"https://www.manusoft.com/archive/blog/a-brief-history-of-copyright/","summary":"\u003cp\u003eTyler Ochoa (law professor and two time \u0026ldquo;Jeopardy!\u0026rdquo; champion) writes \u003ca href=\"http://blog.ericgoldman.org/archives/2010/04/ochoa_on_the_le.htm\"\u003ean interesting post about the 300th anniversary of the first copyright law, called the \u003cem\u003eStatute of Anne\u003c/em\u003e\u003c/a\u003e. Referring to the motivation behind the original law, Ochoa says \u0026ldquo;Although the Stationers were chiefly concerned with restoring and perpetuating their monopoly, they framed their petition to Parliament in terms of justice for authors.\u0026rdquo; In many respects, not much has changed since 1710.\u003c/p\u003e","title":"A brief history of copyright"},{"content":"There have been rumblings (http://autodesk.blogs.com/between_the_lines/2009/04/i-need-your-input-on-autocad-for-the-apple-mac-os-x.html) and rumors for a while now about a native Mac OS X port of AutoCAD. The ObjectARX 2011 SDK header files contain clear evidence of a native Mac port in the works. The evidence comes in the form of code comments and changes made to the files so that they work with the GCC compiler and the Mac OS X libraries.\nFor example, acedads.h conditionally declares a global function to return the main window handle as follows:\n#if defined(_WINDEF_) || defined(_ADESK_MAC_) /* AutoCAD graphics window handle */ HWND adsw_acadMainWnd(); #ifndef adsw_hwndAcad #define adsw_hwndAcad adsw_acadMainWnd() #endif And in acedinpt.h there\u0026rsquo;s a telling comment:\n#ifndef _ADESK_MAC_ #ifndef ACAD_PORT #ifdef ACAD_API #define ACAD_PORT _declspec(dllexport) #else #define ACAD_PORT #endif #endif #else // On OS X, we will export all symbols by default and will use GCC // attributes to exclude symbols we don't want to export. // In this case, we do want to export the AcEdInputPoint symbol #define ACAD_PORT #endif // _ADESK_MAC_ It\u0026rsquo;s clear from the type, quantity, and quality of changes that Autodesk has successfully built at least a limited AutoCAD executable for OS X (both 32 and 64 bit). It\u0026rsquo;s also clear that the Mac build still has limitations, and some of these limitations might require significant changes (i.e. changes of the sort that would break binary compatibility for ObjectARX applications), therefore one could reasonably conclude that no full-blown Mac port is imminent.\n","permalink":"https://www.manusoft.com/archive/blog/autocad-for-mac/","summary":"\u003cp\u003eThere have been rumblings (\u003ca href=\"http://autodesk.blogs.com/between_the_lines/2009/04/i-need-your-input-on-autocad-for-the-apple-mac-os-x.html\"\u003ehttp://autodesk.blogs.com/between_the_lines/2009/04/i-need-your-input-on-autocad-for-the-apple-mac-os-x.html\u003c/a\u003e) and \u003ca href=\"http://autocadder.blogspot.com/2010/01/autocad-2011-natively-on-mac.html\"\u003erumors\u003c/a\u003e for a while now about a native Mac OS X port of AutoCAD. The ObjectARX 2011 SDK header files contain clear evidence of a native Mac port in the works. The evidence comes in the form of code comments and changes made to the files so that they work with the GCC compiler and the Mac OS X libraries.\u003c/p\u003e","title":"AutoCAD for Mac"},{"content":"Thanks to Google\u0026rsquo;s decision to eliminate FTP publishing as of May 1, I\u0026rsquo;ve moved my blog to Wordpress. I\u0026rsquo;ve tried to make the transition as seamless as possible by ensuring that the permalink URL for every post remains unchanged. Unfortunately the RSS feed reader URL has changed, so make sure you visit the blog home page and update your feed URL (this will be the last post at the old URL):\n/archive/\n/archive/index.xml (RSS)\n","permalink":"https://www.manusoft.com/archive/blog/follow-me/","summary":"The Outside The Box blog has moved to WordPress. Update your RSS feed URL.","title":"Follow Me"},{"content":"There is a relationship between what we call something (or someone) and how we feel about it. This relationship works both ways. We use names to convey feelings, but a name can also affect how we feel about something.\nThis leads to some interesting, and sometimes funny, names. For example, it leads to gimmicks like the authoritarian \u0026ldquo;Democratic People\u0026rsquo;s Republic of Korea\u0026rdquo;, and bug fixes called \u0026ldquo;updates\u0026rdquo; (or \u0026ldquo;stability improvements\u0026rdquo; as I saw recently).\nUsing a craftily devised name to project an image is not new, but I think the practice is abused to such an extent these days that the value of names has become worthless. Furthermore, all the good names are already taken. Therefore, I propose to abolish all names and henceforth use only GUIDs (or for the less democratically inclined, serial numbers issued by a central numbering authority).\n","permalink":"https://www.manusoft.com/archive/blog/whats-in-name/","summary":"\u003cp\u003eThere is a relationship between what we call something (or someone) and how we feel about it. This relationship works both ways. We use names to convey feelings, but a name can also affect how we feel about something.\u003cbr /\u003e\u003cbr /\u003eThis leads to some interesting, and sometimes funny, names. For example, it leads to gimmicks like the authoritarian \u003ca href=\"http://en.wikipedia.org/wiki/North_Korea\"\u003e\u0026ldquo;Democratic People\u0026rsquo;s Republic of Korea\u0026rdquo;\u003c/a\u003e, and \u003ca href=\"/2008/09/update-vs-service-pack.htm\"\u003ebug fixes called \u0026ldquo;updates\u0026rdquo;\u003c/a\u003e (or \u0026ldquo;stability improvements\u0026rdquo; as I saw recently).\u003cbr /\u003e\u003cbr /\u003eUsing a craftily devised name to project an image is not new, but I think the practice is abused to such an extent these days that the value of names has become worthless. Furthermore, all the good names are already taken. Therefore, I propose to abolish all names and henceforth use only \u003ca href=\"http://en.wikipedia.org/wiki/Globally_Unique_Identifier\"\u003eGUIDs\u003c/a\u003e (or for the less democratically inclined, serial numbers issued by a central numbering authority).\u003c/p\u003e","title":"What's In A Name?"},{"content":"AutoCAD versions since AutoCAD 2008 (and since AutoCAD LT 2009) have included both 32 bit and 64 bit flavors on the same media. If you install on a 64 bit Windows system, you get the 64 bit AutoCAD; otherwise you get the 32 bit AutoCAD. The 64 bit AutoCAD can take advantage of as much memory as you can throw at it, whereas the 32 bit version is limited to 2 GB (3 GB if you cheat). They should be otherwise identical in theory, but in practice there are major differences.\nOne big difference is VBA. Microsoft put VBA out to pasture many years ago when they introduced the .NET framework, so there will never be a 64 bit version of VBA. Autodesk had to resort to a seriously inefficient kludge to get it to work at all in the 64 bit flavor of AutoCAD (VBA has to run in a separate 32 bit process, which makes typical applications two orders of magnitude slower).\nThe other big difference is that any third party ObjectARX applications must be installed for the correct architecture. A 32 bit ObjectARX application will not work in a 64 bit AutoCAD. [Note that .NET (or \u0026ldquo;managed\u0026rdquo;) applications typically work fine in both architectures \u0026ndash; I\u0026rsquo;m referring to native C++ ObjectARX applications only.]\nOn the Autodesk discussion groups, many people ask how they can install the 32 bit version of AutoCAD on their new 64 bit operating system. Why would they want to do that? Almost always because they need to use an application that is only available for 32 bit AutoCAD architectures, or because they discover that their VBA applications become unbearably slow.\nIt is possible, with some hacking of the AutoCAD installation database, to install the 32 bit flavor of AutoCAD on a 64 bit system, but I don\u0026rsquo;t recommend that. There is just no excuse any more to not support the 64 bit architecture. If you find yourself in this situation, put pressure on the developer of the application to get it ported.\nIn fact, if you rely on an application that hasn\u0026rsquo;t been ported to the 64 bit architecture, I\u0026rsquo;d like to hear from you. Add a comment to this post and let me know the name of the application. If you are a vendor or developer that has not yet ported your 32 bit application, please contact me \u0026ndash; I will gladly port it for you. Even large applications can typically be ported in several hours.\nBTW, I am well aware that even Autodesk is guilty of not supporting 64 bit platforms in some of its vertical market AutoCAD versions (and corresponding object enablers). I certainly hope they remedy that situation in the next release cycle.\n","permalink":"https://www.manusoft.com/archive/blog/port-your-objectarx-code-to-64-bit/","summary":"\u003cp\u003eAutoCAD versions since AutoCAD 2008 (and since AutoCAD LT 2009) have included both 32 bit and 64 bit flavors on the same media. If you install on a 64 bit Windows system, you get the 64 bit AutoCAD; otherwise you get the 32 bit AutoCAD. The 64 bit AutoCAD can take advantage of as much memory as you can throw at it, whereas the 32 bit version is limited to 2 GB (3 GB if you cheat). They should be otherwise identical in theory, but in practice there are major differences.\u003cbr /\u003e\u003cbr /\u003eOne big difference is VBA. Microsoft put VBA out to pasture many years ago when they introduced the .NET framework, so there will never be a 64 bit version of VBA. Autodesk had to resort to a seriously inefficient kludge to get it to work at all in the 64 bit flavor of AutoCAD (VBA has to run in a separate 32 bit process, which makes typical applications two orders of magnitude slower).\u003cbr /\u003e\u003cbr /\u003eThe other big difference is that any third party ObjectARX applications must be installed for the correct architecture. A 32 bit ObjectARX application will not work in a 64 bit AutoCAD. [Note that .NET (or \u0026ldquo;managed\u0026rdquo;) applications typically work fine in both architectures \u0026ndash; I\u0026rsquo;m referring to native C++ ObjectARX applications only.]\u003cbr /\u003e\u003cbr /\u003eOn the Autodesk discussion groups, many people ask how they can install the 32 bit version of AutoCAD on their new 64 bit operating system. Why would they want to do that? Almost always because they need to use an application that is only available for 32 bit AutoCAD architectures, or because they discover that their VBA applications become unbearably slow.\u003cbr /\u003e\u003cbr /\u003eIt is possible, with some hacking of the AutoCAD installation database, to install the 32 bit flavor of AutoCAD on a 64 bit system, but I don\u0026rsquo;t recommend that. There is just no excuse any more to not support the 64 bit architecture. If you find yourself in this situation, put pressure on the developer of the application to get it ported.\u003cbr /\u003e\u003cbr /\u003eIn fact, if you rely on an application that hasn\u0026rsquo;t been ported to the 64 bit architecture, I\u0026rsquo;d like to hear from you. Add a comment to this post and let me know the name of the application. If you are a vendor or developer that has not yet ported your 32 bit application, please \u003ca href=\"mailto:owenw@manusoft.com\"\u003econtact me\u003c/a\u003e \u0026ndash; I will gladly port it for you. Even large applications can typically be ported in several hours.\u003cbr /\u003e\u003cbr /\u003eBTW, I am well aware that even Autodesk is guilty of not supporting 64 bit platforms in some of its vertical market AutoCAD versions (and corresponding object enablers). I certainly hope they remedy that situation in the next release cycle.\u003c/p\u003e","title":"Port Your ObjectARX Code to 64 Bit"},{"content":"I saw in the March 8 edition of the TenLinks Daily newsletter (http://www.tenlinks.com/news/tl_daily.htm) that Alan Kalameja passed away (http://www.postandcourier.com/news/2010/mar/06/deaths-summary/) at age 55. Condolences to his family. Alan hired me to write test questions for an AutoCAD certification exam in the early \u0026rsquo;90s (I don\u0026rsquo;t recall which version, but probably either R12 or R13). That was one of my first real contracting jobs. Although it wasn\u0026rsquo;t very glamorous, it made me feel important, and undoubtedly helped focus my fledgling consulting business on AutoCAD. Thanks, Alan, for giving me that opportunity.\n","permalink":"https://www.manusoft.com/archive/blog/rip-alan-kalameja/","summary":"\u003cp\u003eI saw in the March 8 edition of the TenLinks Daily newsletter (\u003ca href=\"http://www.tenlinks.com/news/tl_daily.htm\"\u003ehttp://www.tenlinks.com/news/tl_daily.htm\u003c/a\u003e) that Alan Kalameja passed away (\u003ca href=\"http://www.postandcourier.com/news/2010/mar/06/deaths-summary/\"\u003ehttp://www.postandcourier.com/news/2010/mar/06/deaths-summary/\u003c/a\u003e) at age 55. Condolences to his family. Alan hired me to write test questions for an AutoCAD certification exam in the early \u0026rsquo;90s (I don\u0026rsquo;t recall which version, but probably either R12 or R13). That was one of my first real contracting jobs. Although it wasn\u0026rsquo;t very glamorous, it made me feel important, and undoubtedly helped focus my fledgling consulting business on AutoCAD. Thanks, Alan, for giving me that opportunity.\u003c/p\u003e","title":"RIP Alan Kalameja"},{"content":"This post is inspired by a conversation I had with a nephew, and it hearkens to the same nostalgic emotions engendered by the first music video on MTV.\nI was a young inquisitive child growing up in the 70s in an Amish household. Without access to modern technology, I struggled at age 11 to build an oscillator circuit by using sheet metal cut from an old stovepipe, a 9 volt battery fitted into a piece of 2x6 pine, dynamite wire scavenged from the nearby strip mine, and a speaker and 555 timer IC that I cut out of some electronic equipment dug out of the local garbage dump.\nThe achievement was incredible considering the circumstances, but thinking back, I have very little recollection of the actual consummation of the project. I assume I probably showed it proudly to my friends, who would have been awestruck, but completely ignorant of how it worked or why it was important to me. I simply don\u0026rsquo;t remember what I did with the project after it was complete.\nWhat I do remember fondly is the struggle to achieve; the thrill of the hunt. I struggled to get information. I had obtained a prized 555, but I had to wait for weeks until the next trip to the city so I could stop by Radio Shack to get a pinout of the 555 along with circuit diagrams showing how to use it. Then I had to find components. I had long since built a treasure trove of capacitors and resistors that I had salvaged from discarded electronics, along with a pot full of potentiometers that I could use to adjust the oscillator frequency, but I still had to scavenge for some missing components.\nThe challenges of the quest made the final result more satisfying. It was the search for the holy grail that etched itself into my memory; I barely remember the grail itself.\nOver the holidays during a family gathering, one of my Amish nephews was anxious to pick my brain. He explained that someone had told him that it\u0026rsquo;s possible to convert an electric motor into a generator, and so he set out on a quest to build a generator from an old electric motor and a small gasoline engine. The quest involved several letters mailed back and forth between people he knew that might have information about how to go about the task. He tried and tried, but could not get his generator to work.\nI explained to him how he needed to remove the external circuitry from his motor so that it wouldn\u0026rsquo;t foul up the results; how he can add a rectifier and a regulator to generate direct current output. The excitement over this new discovery was written all over the young man\u0026rsquo;s face as he anticipated more adventure.\nOn the way home, I thought to myself that Google could quickly and easily have provided the answers that my nephew sought. But then it occurred to me that Google would also have deprived him of the struggle and adventure of discovery that motivates him to continue the quest.\nI wonder how many young minds are missing out on the supreme adventure of discovery because we live in a modern culture where all the knowledge in the universe is seemingly already at our fingertips, just a Google search away.\n","permalink":"https://www.manusoft.com/archive/blog/google-killed-radio-star/","summary":"\u003cp\u003eThis post is inspired by a conversation I had with a nephew, and it hearkens to the same nostalgic emotions engendered by \u003ca href=\"http://en.wikipedia.org/wiki/Video_Killed_the_Radio_Star\"\u003ethe first music video on MTV\u003c/a\u003e.\u003cbr /\u003e\u003cbr /\u003eI was a young inquisitive child growing up in the 70s in an Amish household. Without access to modern technology, I struggled at age 11 to build an oscillator circuit by using sheet metal cut from an old stovepipe, a 9 volt battery fitted into a piece of 2x6 pine, dynamite wire scavenged from the nearby strip mine, and a speaker and 555 timer IC that I cut out of some electronic equipment dug out of the local garbage dump.\u003cbr /\u003e\u003cbr /\u003eThe achievement was incredible considering the circumstances, but thinking back, I have very little recollection of the actual consummation of the project. I assume I probably showed it proudly to my friends, who would have been awestruck, but completely ignorant of how it worked or why it was important to me. I simply don\u0026rsquo;t remember what I did with the project after it was complete.\u003cbr /\u003e\u003cbr /\u003eWhat I do remember fondly is the struggle to achieve; the thrill of the hunt. I struggled to get information. I had obtained a prized 555, but I had to wait for weeks until the next trip to the city so I could stop by Radio Shack to get a pinout of the 555 along with circuit diagrams showing how to use it. Then I had to find components. I had long since built a treasure trove of capacitors and resistors that I had salvaged from discarded electronics, along with a pot full of potentiometers that I could use to adjust the oscillator frequency, but I still had to scavenge for some missing components.\u003cbr /\u003e\u003cbr /\u003eThe challenges of the quest made the final result more satisfying. It was the search for the holy grail that etched itself into my memory; I barely remember the grail itself.\u003cbr /\u003e\u003cbr /\u003eOver the holidays during a family gathering, one of my Amish nephews was anxious to pick my brain. He explained that someone had told him that it\u0026rsquo;s possible to convert an electric motor into a generator, and so he set out on a quest to build a generator from an old electric motor and a small gasoline engine. The quest involved several letters mailed back and forth between people he knew that might have information about how to go about the task. He tried and tried, but could not get his generator to work.\u003cbr /\u003e\u003cbr /\u003eI explained to him how he needed to remove the external circuitry from his motor so that it wouldn\u0026rsquo;t foul up the results; how he can add a rectifier and a regulator to generate direct current output. The excitement over this new discovery was written all over the young man\u0026rsquo;s face as he anticipated more adventure.\u003cbr /\u003e\u003cbr /\u003eOn the way home, I thought to myself that Google could quickly and easily have provided the answers that my nephew sought. But then it occurred to me that Google would also have deprived him of the struggle and adventure of discovery that motivates him to continue the quest.\u003cbr /\u003e\u003cbr /\u003eI wonder how many young minds are missing out on the supreme adventure of discovery because we live in a modern culture where all the knowledge in the universe is seemingly already at our fingertips, just a Google search away.\u003c/p\u003e","title":"Google killed the radio star"},{"content":"[Update: See Visual Studio 2010 Native Multi-Targeting]\nMany of you use my VC Build Hook utility to target multiple versions of AutoCAD from a single solution in Visual Studio 2008. Visual Studio 2010 now includes a new feature called native multi-targeting that performs the same function as VC Build Hook. The new feature works great for using build tools back to VC 7.1, but it does not work with VC 7, which is required for targeting AutoCAD versions 2006 and earlier.\nThe problem is that VC 7 chokes on Unicode response files. In earlier versions of Visual Studio you could set a project property to select Unicode or ANSI response files, but that property has been removed in Visual Studio 2010. I have been told by a Microsoft engineer that the problem will be addressed in SP1, presumably by adding that project property back.\nThe moral of the story is that you\u0026rsquo;ll need to wait for SP1 before you\u0026rsquo;ll be able to use the VC 7 build tools from within the Visual Studio 2010 IDE. I am not planning to update VC Build Hook to support Visual Studio 2010.\n","permalink":"https://www.manusoft.com/archive/blog/visual-studio-2010-and-vc-build-hook/","summary":"\u003cp\u003e\u003cem\u003e[Update: See \u003c/em\u003e\u003ca href=\"/2010/10/visual-studio-2010-native-multi-targeting.htm\"\u003e\u003cem\u003eVisual Studio 2010 Native Multi-Targeting\u003c/em\u003e\u003c/a\u003e\u003cem\u003e]\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eMany of you use my \u003ca href=\"/develop/objectarx/vc-build-hook/\"\u003eVC Build Hook utility\u003c/a\u003e to target multiple versions of AutoCAD from a single solution in Visual Studio 2008. Visual Studio 2010 now includes a new feature called \u003ca href=\"https://devblogs.microsoft.com/cppblog/c-native-multi-targeting/\"\u003enative multi-targeting\u003c/a\u003e that performs the same function as VC Build Hook. The new feature works great for using build tools back to VC 7.1, but it does not work with VC 7, which is required for targeting AutoCAD versions 2006 and earlier.\u003c/p\u003e","title":"Visual Studio 2010 and VC Build Hook"},{"content":"There are a myriad of ways to load AutoLISP applications in AutoCAD, including acaddoc.lsp, an .mnl file, the Startup Suite, and manually by various means. For application developers wishing to deploy their applications to others, all of these methods have drawbacks. The ideal solution should be easy to implement in an installation program, require minimal or zero changes to the user\u0026rsquo;s AutoCAD configuration, work the same way across all versions of AutoCAD, and easily undone when the application is uninstalled.\nObjectARX application developers have long used registry demand loading to load their applications automatically, either when AutoCAD starts or when the user enters a command that the application defines. Registry demand loading is relatively easy to set up and meets the other requirements for an ideal solution, except for one problem: it works only with ObjectARX modules (or with .NET modules in AutoCAD 2006 and later).\nMany years ago, I created a solution to this problem by building a small stub ObjectARX module that did nothing but load an associated LISP file. This effectively allows the registry demand loading mechanism to be used for loading a LISP file. If you develop AutoLISP applications that could benefit from registry demand loading, then I have a Christmas present for you: LspLoad.zip contains a complete suite of newly updated stub modules for all versions of AutoCAD from AutoCAD 2000 to AutoCAD 2010, plus modules for Bricscad 9 and 10, which also supports registry demand loading.\nTo use the stub modules, just rename them so that the base filename matches your application\u0026rsquo;s main LISP filename, then install them in the same folder as the LISP file and create the registry demand load entries. The only work you have to do is to get the stub module to load. You can simply drag and drop the appropriate stub module into a running instance of AutoCAD in order to test it.\nCreating the demand loading registry keys is not difficult, but it may require some programming. I write custom actions for my installation programs that enumerate all installed AutoCAD versions and flavors, and set up the demand load keys for every one. However you do it, the final result should look something like this (for AutoCAD 2010 on my system):\nIn this screen shot, I created an application called \u0026ldquo;!LspLoadTest\u0026rdquo; (the \u0026ldquo;!\u0026rdquo; was added just so it displayed at the beginning of the list). I added the minimum required subkeys. The LOADER string value is set to the complete path of the stub module, and LOADCTRLS is set to a value of 2, which means I want the application loaded when AutoCAD starts. LOADCTRLS is a bit coded value; for use with LspLoad, it\u0026rsquo;s only useful values are 2 or 4. A value of 4 means \u0026ldquo;load when my command is invoked\u0026rdquo;; this mode requires a COMMANDS subkey that lists the defined commands.\nThe way it works is very simple. In the example above, you can see that I renamed the module (but left the \u0026ldquo;.18.x64.arx\u0026rdquo; so that I can tell it apart). I then added !LspLoadTest.lsp to the W:\\LspLoad folder. That file contained the following:\n(princ \"\\nThis test file loaded from \") (princ (if GetPathOf!LspLoadTest (GetPathOf!LspLoadTest) \"\u0026lt;unknown\u0026gt;\")) (princ) Now when I start AutoCAD 2010, I see on the command line:\nThis test file loaded from W:\\LspLoad\\ These files are free to use for any purpose. Have a great holiday, everyone!\n","permalink":"https://www.manusoft.com/archive/blog/automatic-lisp-loading/","summary":"\u003cp\u003eThere are a myriad of ways to load AutoLISP applications in AutoCAD, including acaddoc.lsp, an .mnl file, the Startup Suite, and manually by various means. For application developers wishing to deploy their applications to others, all of these methods have drawbacks. The ideal solution should be easy to implement in an installation program, require minimal or zero changes to the user\u0026rsquo;s AutoCAD configuration, work the same way across all versions of AutoCAD, and easily undone when the application is uninstalled.\u003c/p\u003e","title":"Automatic LISP Loading"},{"content":"A lot of you are probably having to cut back on your expenses to make ends meet in this economic downturn. I\u0026rsquo;ve drastically reduced my discretionary spending, postponed the purchase of new office equipment, and investigated less expensive alternatives to a lot of my monthly expense items. I\u0026rsquo;ve also been streamlining and reorganizing my finances, which inevitably involves a lot of contact with banks.\nKean Walmsley\u0026rsquo;s post about his recent bank customer service issue (http://through-the-interface.typepad.com/through_the_interface/2009/11/turing-test-for-live-bank-chat-failed.html) motivated me to post about one of my recent bank experiences.\nFirst of all, I\u0026rsquo;m here to tell you that banks do make mistakes. I\u0026rsquo;m sure that the vast majority of the time when your check book doesn\u0026rsquo;t balance, it was you that made a mistake, and not the bank. But if you are cursed like I am, then banks delight in creating phantom overdrafts and charging you exorbitant overdraft fees, then, when confronted with their error, apologizing and refunding the fees (after the damage is done and all those bounced checks have caused you to incur returned check charges from your creditors). That has happened twice to me in the past two months, with two different banks and two completely unrelated accounts.\nIn both cases, the bank eventually fixed the error, but I\u0026rsquo;m still out the returned check charges and whatever damage that has done to my credit rating.\nOne of the \u0026ldquo;returned\u0026rdquo; payments was a credit card payment. Of course, I did not get notified about this until the day after the payment due date, so it was too late to fix the problem in time to prevent another exorbitant late fee from being charged by the credit card bank.\nObviously the returned check triggered some alarms at the credit card bank, because I started receiving phone calls begging me to make a payment immediately. Irritated, I decided to make the credit card bank wait until the next due date before making the replacement payment. I figured my late fee bought me that extra time, so I might as well use it. My patience paid off: after a few futile attempts at collecting their late payment, the bank offered to refund the late fee if I made an immediate payment. That\u0026rsquo;s what I\u0026rsquo;m talking about!\n","permalink":"https://www.manusoft.com/archive/blog/evil-banks/","summary":"\u003cp\u003eA lot of you are probably having to cut back on your expenses to make ends meet in this economic downturn. I\u0026rsquo;ve drastically reduced my discretionary spending, postponed the purchase of new office equipment, and investigated less expensive alternatives to a lot of my monthly expense items. I\u0026rsquo;ve also been streamlining and reorganizing my finances, which inevitably involves a lot of contact with banks.\u003cbr /\u003e\u003cbr /\u003eKean Walmsley\u0026rsquo;s post about his recent bank customer service issue (\u003ca href=\"http://through-the-interface.typepad.com/through_the_interface/2009/11/turing-test-for-live-bank-chat-failed.html\"\u003ehttp://through-the-interface.typepad.com/through_the_interface/2009/11/turing-test-for-live-bank-chat-failed.html\u003c/a\u003e) motivated me to post about one of my recent bank experiences.\u003cbr /\u003e\u003cbr /\u003eFirst of all, I\u0026rsquo;m here to tell you that banks do make mistakes. I\u0026rsquo;m sure that the vast majority of the time when your check book doesn\u0026rsquo;t balance, it was you that made a mistake, and not the bank. But if you are cursed like I am, then banks delight in creating phantom overdrafts and charging you exorbitant overdraft fees, then, when confronted with their error, apologizing and refunding the fees (\u003cem\u003eafter\u003c/em\u003e the damage is done and all those bounced checks have caused you to incur returned check charges from your creditors). That has happened twice to me in the past two months, with two different banks and two completely unrelated accounts.\u003cbr /\u003e\u003cbr /\u003eIn both cases, the bank eventually fixed the error, but I\u0026rsquo;m still out the returned check charges and whatever damage that has done to my credit rating.\u003cbr /\u003e\u003cbr /\u003eOne of the \u0026ldquo;returned\u0026rdquo; payments was a credit card payment. Of course, I did not get notified about this until the day \u003cem\u003eafter\u003c/em\u003e the payment due date, so it was too late to fix the problem in time to prevent another exorbitant late fee from being charged by the credit card bank.\u003cbr /\u003e\u003cbr /\u003eObviously the returned check triggered some alarms at the credit card bank, because I started receiving phone calls begging me to make a payment immediately. Irritated, I decided to make the credit card bank wait until the next due date before making the replacement payment. I figured my late fee bought me that extra time, so I might as well use it. My patience paid off: after a few futile attempts at collecting their late payment, the bank offered to refund the late fee if I made an immediate payment. \u003cem\u003eThat\u0026rsquo;s what I\u0026rsquo;m talking about!\u003c/em\u003e\u003c/p\u003e","title":"Evil Banks"},{"content":"ArxDbg is the name of a sample project that has been included with the ObjectARX SDK for many years. It\u0026rsquo;s primary purpose is to demonstrate how to use the ObjectARX API, but it is a complete free-standing utility in its own right. ObjectARX programmers often use this utility during development for testing and exercising their application code, but it can be useful to anybody, not just programmers.\nAs you can see, the UI consists of a single context menu. One of my favorite features is the ability to spelunk through a drawing database, looking at every object and its relationships to other objects. The command is ArxDbgSnoopDb, or you can select \u0026lsquo;Database Info\u0026hellip;\u0026rsquo; in the ArxDbg context menu.\nThere is no documentation, but anyone with a basic familiarity with the AutoCAD object model can figure out what most of the commands do. ArxDbg.zip [4.5 MB] includes versions of the utility for AutoCAD 2000 through AutoCAD 2021.\n","permalink":"https://www.manusoft.com/archive/blog/arxdbg-utility/","summary":"\u003cp\u003eArxDbg is the name of a sample project that has been included with the ObjectARX SDK for many years. It\u0026rsquo;s primary purpose is to demonstrate how to use the ObjectARX API, but it is a complete free-standing utility in its own right. ObjectARX programmers often use this utility during development for testing and exercising their application code, but it can be useful to anybody, not just programmers.\u003c/p\u003e","title":"ArxDbg Utility"},{"content":"I\u0026rsquo;ve been chasing a drawing corruption problem on behalf of a customer. The problem manifests itself by causing a \u0026ldquo;Missing Language Pack\u0026rdquo; dialog to display when the drawing is opened (but only in Windows XP with no language packs installed \u0026ndash; my Vista installation apparently has all the language packs installed). Installing the language packs \u0026ldquo;fixes\u0026rdquo; the problem, in that the drawing files open without error.\nHowever, the real problem is that some drawing objects were corrupted in memory, and corrupt data was subsequently written to the .dwg file. My customer thinks the corruption might be linked to a virus that they were infected with (and have since eliminated). I have a copy of the virus for testing, but I have not been able to catch it in the act of corrupting an open drawing file. Therefore, I cannot conclusively link the virus with the corruption.\nSo, I need your help. Have you recently noticed a \u0026ldquo;Missing Language Pack\u0026rdquo; dialog appearing in drawing files that have opened fine in the past? Has your virus scanner recently detected an AutoCAD related virus? If you have, please send me an email describing your situation and AutoCAD versions involved. I would like to determine conclusively whether the virus is causing drawing file corruption, and if so, whether the corruption is always in the same location of the drawing file.\n[Update: Autodesk has released a technical document with information about the virus (http://usa.autodesk.com/getdoc/id=TS13717811). See also Shaan Hurley\u0026rsquo;s blog post (http://autodesk.blogs.com/between_the_lines/2009/08/malicious-code-alert-acadvlx-and-solution.html).]\n","permalink":"https://www.manusoft.com/archive/blog/autocad-anguage-pack-drawing-file/","summary":"\u003cp\u003eI\u0026rsquo;ve been chasing a drawing corruption problem on behalf of a customer. The problem manifests itself by causing a \u0026ldquo;Missing Language Pack\u0026rdquo; dialog to display when the drawing is opened (but only in Windows XP with no language packs installed \u0026ndash; my Vista installation apparently has all the language packs installed). Installing the language packs \u0026ldquo;fixes\u0026rdquo; the problem, in that the drawing files open without error.\u003cbr /\u003e\u003cbr /\u003eHowever, the real problem is that some drawing objects were corrupted in memory, and corrupt data was subsequently written to the .dwg file. My customer thinks the corruption might be linked to a virus that they were infected with (and have since eliminated). I have a copy of the virus for testing, but I have not been able to catch it in the act of corrupting an open drawing file. Therefore, I cannot conclusively link the virus with the corruption.\u003cbr /\u003e\u003cbr /\u003eSo, I need your help. Have you recently noticed a \u0026ldquo;Missing Language Pack\u0026rdquo; dialog appearing in drawing files that have opened fine in the past? Has your virus scanner recently detected an AutoCAD related virus? If you have, please \u003ca href=\"mailto:owenw@manusoft.com?subject=Language%20Pack%20Corruption\"\u003esend me an email\u003c/a\u003e describing your situation and AutoCAD versions involved. I would like to determine conclusively whether the virus is causing drawing file corruption, and if so, whether the corruption is always in the same location of the drawing file.\u003cbr /\u003e\u003cbr /\u003e[Update: Autodesk has released a technical document with information about the virus (http://usa.autodesk.com/getdoc/id=TS13717811). See also Shaan Hurley\u0026rsquo;s blog post (http://autodesk.blogs.com/between_the_lines/2009/08/malicious-code-alert-acadvlx-and-solution.html).]\u003c/p\u003e","title":"AutoCAD Missing Language Pack Drawing File Corruption"},{"content":"I\u0026rsquo;ve proved once again that if you want it done right, you have to do it yourself. The ManuSoft web site is fully functional again after my longtime ISP had a major network meltdown. I waited for two weeks for them to repair it, then finally moved to a different provider. The new provider\u0026rsquo;s promised \u0026ldquo;24/7 tech support\u0026rdquo; turned out to mean \u0026ldquo;24 hours to respond, 7 days to fix\u0026rdquo; every problem, not to mention that I would need to provide step by step instructions to their techs so they could configure the server the way I needed. After two weeks of that, I gave up and configured my own server and now host it myself.\nLet this be a warning to all of you hosting web sites with reputable providers, or storing your data somewhere in the cloud. I paid big bucks every month to my old provider for secure servers, redundant power supplies, managed and air conditioned server rooms, nightly backups, 99% uptime, etc., but they still lost everything. Almost a month later they still haven\u0026rsquo;t restored their customers\u0026rsquo; data. Luckily, I make my own backups.\n","permalink":"https://www.manusoft.com/archive/blog/if-you-want-it-done-right/","summary":"\u003cp\u003eI\u0026rsquo;ve proved once again that if you want it done right, you have to do it yourself. The ManuSoft web site is fully functional again after my longtime ISP had a major network meltdown. I waited for two weeks for them to repair it, then finally moved to a different provider. The new provider\u0026rsquo;s promised \u0026ldquo;24/7 tech support\u0026rdquo; turned out to mean \u0026ldquo;24 hours to respond, 7 days to fix\u0026rdquo; every problem, not to mention that I would need to provide step by step instructions to their techs so they could configure the server the way I needed. After two weeks of that, I gave up and configured my own server and now host it myself.\u003cbr /\u003e\u003cbr /\u003eLet this be a warning to all of you hosting web sites with reputable providers, or storing your data somewhere in the cloud. I paid big bucks every month to my old provider for secure servers, redundant power supplies, managed and air conditioned server rooms, nightly backups, 99% uptime, etc., but they still lost everything. Almost a month later they still haven\u0026rsquo;t restored their customers\u0026rsquo; data. Luckily, I make my own backups.\u003c/p\u003e","title":"If you want it done right..."},{"content":"[Update: See Disable AutoCAD InfoCenter]\nIn case you missed it, Tony Tanzillo has posted instructions (http://discussion.autodesk.com/forums/thread.jspa?threadID=721735\u0026tstart=1) for disabling the InfoCenter in AutoCAD 2010. AutoCAD 2010 starts faster when the InfoCenter is disabled.\nTo make it easy, I\u0026rsquo;ve created an AutoLISP file that defines commands named DisableInfoCenter and EnableInfoCenter:\nDisableInfoCenter.LSP\nAlternatively, you can just paste the following lisp at the AutoCAD command line to disable it and be done with it. Note that you need to restart AutoCAD for the change to take effect.\n(vl-load-com) (vl-registry-write (strcat \"HKEY_CURRENT_USER\\\\\" (vlax-product-key) \"\\\\InfoCenter\") \"InfoCenterOn\" 0) ","permalink":"https://www.manusoft.com/archive/blog/disable-infocenter-in-autocad-2010/","summary":"\u003cp\u003e\u003cem\u003e[Update: See \u003ca href=\"/2010/11/disable-autocad-infocenter.htm\"\u003eDisable AutoCAD InfoCenter\u003c/a\u003e]\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eIn case you missed it, Tony Tanzillo has posted instructions (\u003ca href=\"http://discussion.autodesk.com/forums/thread.jspa?threadID=721735\u0026amp;tstart=1\"\u003ehttp://discussion.autodesk.com/forums/thread.jspa?threadID=721735\u0026tstart=1\u003c/a\u003e) for disabling the InfoCenter in AutoCAD 2010. AutoCAD 2010 starts faster when the InfoCenter is disabled.\u003c/p\u003e\n\u003cp\u003eTo make it easy, I\u0026rsquo;ve created an AutoLISP file that defines commands named DisableInfoCenter and EnableInfoCenter:\u003c/p\u003e","title":"Disable InfoCenter in AutoCAD 2010"},{"content":"In the new ObjectARX 2010 SDK, Autodesk has added some new virtual member functions that are not exported as they should be. For example, the AcGiFaceData class has had two new virtual functions added for setting and getting the face transparency:\nclass AcGiFaceData: public AcRxObject\n{\n//[\u0026hellip; deleted for brevity]\nACDB_PORT virtual AcDbObjectId materials() const;\nACDB_PORT virtual AcGiMapper mappers() const\nvirtual void setTransparency(const AcCmTransparency transparency);\nvirtual AcCmTransparency transparency() const\nprivate:\nAcGiImpFaceData mpAcGiImpFaceData;\n};\nAs you can see, whoever added the new functions neglected to prefix them with the ACDB_PORT macro. ACDB_PORT evaluates to __declspec(export), which tells the compiler to export the function. Since the macro is missing, the new functions are not exported from acdb18.dll.\nSince these are virtual functions, you won\u0026rsquo;t have any problems calling them through a pointer to an AcGiFaceData object that was constructed by AutoCAD. The problem arises when you derive a class from AcGiFaceData. Since the functions are not exported, the linker has no way of resolving their address for creating the virtual function table of your derived class. This results in linker errors:\nacrxEntryPoint.obj : error LNK2001: unresolved external symbol \u0026ldquo;public: virtual void __thiscall AcGiFaceData::setTransparency(class AcCmTransparency const )\u0026rdquo; (?setTransparency@AcGiFaceData@@UAEXPBVAcCmTransparency@@@Z)\nacrxEntryPoint.obj : error LNK2001: unresolved external symbol \u0026ldquo;public: virtual class AcCmTransparency * __thiscall AcGiFaceData::transparency(void)const \u0026quot; (?transparency@AcGiFaceData@@UBEPAVAcCmTransparency@@XZ)Following is an example that results in these errors:\nclass AcGiFaceDataEx: public AcGiFaceData\n{\npublic:\nAcGiFaceDataEx() {}\n~AcGiFaceDataEx() {}\n} Test;\nThe only solution is to provide an implementation of the missing functions. In this case, it could be accomplished by something like this:\nclass AcGiFaceDataEx: public AcGiFaceData\n{\nAcCmTransparency mpTransparency;\npublic:\nAcGiFaceDataEx() : mpTransparency( NULL ) {}\n~AcGiFaceDataEx() { delete mpTransparency; }\nvirtual void setTransparency(const AcCmTransparency transparency)\n{\ndelete mpTransparency;\nmpTransparency = (transparency? new AcCmTransparency( transparency ) : NULL);\n}\nvirtual AcCmTransparency transparency() const { return mpTransparency; }\n} Test;This will fix the linker errors, but there is no guarantee that it will work as intended. AutoCAD might access its internal transparency value directly without calling through the member functions, which means it would never \u0026ldquo;see\u0026rdquo; the transparency set through the replacement member functions. Furthermore, the addition of the new pointer member changes the size of the class, which causes AcGiFaceDataEx arrays to have a different memory footprint than AcGiFaceData arrays. Lastly, what if Autodesk fixes the problem in a future AutoCAD service pack?\nThe ideal solution should not change the size of the class. It should check at runtime whether the function is exported, then use the exported function if it exists. That way, code that is written now will use the exported function if and when it becomes available in a future version of AutoCAD. When the function is not exported, an alternate implementation must be provided. This is not an unusual scenario, and the solution I present for the specific case of AcGiFaceData can be adapted to the more general problem.\nIn the AcGiFaceData case, the missing functions are virtual functions. Knowing this, it is possible to use a trick to get the address of the real function. In the code below, the function getAcGiFaceData_vtable() constructs a temporary AcGiFaceData object, from which it extracts a pointer to the object\u0026rsquo;s virtual function table. The virtual function table is just an array of function pointers, so the address of the desired function can be obtained by indexing into the virtual function table. The question is, how far? By counting virtual functions and data members starting from the top of the class hierarchy: in this case, 6 virtual functions in AcRxObject plus 16 virtual functions in AcGiFaceData = 22.\nNote that obtaining a function pointer this way relies on Visual C++ implementation details, but this is safe to do since all ObjectARX modules must be compiled in Visual C++.\nFollowing is my solution to the missing AcGiFaceData functions:\n#pragma warning(push)\n#pragma warning(disable: 4608)\ntemplate \u0026lt; typename Src, typename Dest \u0026gt;\nDest force_cast( Src src )\n{\nunion _convertor { Dest d; Src s; _convertor() : d(0), s(0) {} } convertor;\nconvertor.s = src;\nreturn convertor.d;\n}\n#pragma warning(pop)\nstatic FARPROC getAcGiFaceData_vtable()\n{\nstatic FARPROC rfVTable = (FARPROC**)\u0026amp;AcGiFaceData();\nreturn (rfVTable? rfVTable : NULL);\n}\nvoid AcGiFaceData::setTransparency( const AcCmTransparency transparency )\n{\ntypedef void (AcGiFaceData::F_setTransparency)( const AcCmTransparency );\nstatic F_setTransparency pfSetTransparency = force_cast\u0026lt; FARPROC, F_setTransparency \u0026gt;(GetProcAddress( GetModuleHandleA( \u0026ldquo;acdb18.dll\u0026rdquo;), \u0026ldquo;?setTransparency@AcGiFaceData@@UEAAXPEBVAcCmTransparency@@@Z\u0026rdquo; ));\nif( !pfSetTransparency )\n{\nstatic FARPROC rfVTable = getAcGiFaceData_vtable();\nif( rfVTable )\npfSetTransparency = force_cast\u0026lt; FARPROC, F_setTransparency \u0026gt;( rfVTable[22] );\n}\nif( pfSetTransparency )\n(this-\u0026gt;pfSetTransparency)( transparency );\n}\nAcCmTransparency AcGiFaceData::transparency() const\n{\ntypedef AcCmTransparency (AcGiFaceData::F_transparency)() const;\nstatic F_transparency pfTransparency = force_cast\u0026lt; FARPROC, F_transparency \u0026gt;(GetProcAddress( GetModuleHandleA( \u0026ldquo;acdb18.dll\u0026rdquo;), \u0026ldquo;?transparency@AcGiFaceData@@UEBAPEAVAcCmTransparency@@XZ\u0026rdquo; ));\nif( !pfTransparency )\n{\nstatic FARPROC rfVTable = getAcGiFaceData_vtable();\nif( rfVTable )\npfTransparency = force_cast\u0026lt; FARPROC, F_transparency \u0026gt;( rfVTable[23] );\n}\nif( pfTransparency )\nreturn (this-\u0026gt;*pfTransparency)();\nreturn NULL;\n}\n","permalink":"https://www.manusoft.com/archive/blog/objectarx-2010-dealing-with-missing/","summary":"\u003cp\u003eIn the new ObjectARX 2010 SDK, Autodesk has added some new virtual member functions that are not exported as they should be. For example, the AcGiFaceData class has had two new virtual functions added for setting and getting the face transparency:\u003cbr /\u003e\u003cbr /\u003e\u003cblockquote\u003e\u003cspan style=\"color:#990000;\"\u003eclass\u003c/span\u003e AcGiFaceData\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e:\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003e public\u003c/span\u003e AcRxObject\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e\u003cbr /\u003e{\u003c/span\u003e\u003c/b\u003e\u003ci\u003e\u003cspan style=\"color:#999999;\"\u003e\u003cbr /\u003e//[\u0026hellip; deleted for brevity]\u003cbr /\u003e\u003c/span\u003e\u003c/i\u003e  ACDB_PORT\u003cspan style=\"color:#990000;\"\u003e virtual\u003c/span\u003e AcDbObjectId\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e\u003cem\u003e\u003c/span\u003e\u003c/b\u003e materials\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e()\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003e const\u003c/span\u003e\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e;\u003c/span\u003e\u003c/b\u003e\u003cbr /\u003e  ACDB_PORT\u003cspan style=\"color:#990000;\"\u003e virtual\u003c/span\u003e AcGiMapper\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e\u003c/em\u003e\u003c/span\u003e\u003c/b\u003e mappers\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e()\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003e const\u003c/span\u003e\u003cbr /\u003e\u003cstrong\u003e\u003cspan style=\"color:#990000;\"\u003e  virtual\u003c/span\u003e\u003cspan style=\"color:#ff6633;\"\u003e void\u003c/span\u003e setTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e(\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003econst\u003c/span\u003e AcCmTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e \u003cem\u003e\u003c/span\u003e\u003c/b\u003etransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e);\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003e\u003cbr /\u003e  virtual\u003c/span\u003e AcCmTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e\u003c/em\u003e\u003c/span\u003e\u003c/b\u003e transparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e()\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003e const\u003c/span\u003e\u003c/strong\u003e\u003cspan style=\"color:#990000;\"\u003e\u003cbr /\u003eprivate\u003c/span\u003e\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e:\u003c/span\u003e\u003c/b\u003e\u003cbr /\u003e  AcGiImpFaceData\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e \u003cem\u003e\u003c/span\u003e\u003c/b\u003empAcGiImpFaceData\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e;\u003cbr /\u003e};\u003c/span\u003e\u003c/b\u003e\u003cbr /\u003e\u003c/blockquote\u003e\u003cbr /\u003e\u003cbr /\u003eAs you can see, whoever added the new functions neglected to prefix them with the ACDB_PORT macro. ACDB_PORT evaluates to __declspec(export), which tells the compiler to export the function. Since the macro is missing, the new functions are not exported from acdb18.dll.\u003cbr /\u003e\u003cbr /\u003eSince these are virtual functions, you won\u0026rsquo;t have any problems calling them through a pointer to an AcGiFaceData object that was constructed by AutoCAD. The problem arises when you derive a class from AcGiFaceData. Since the functions are not exported, the linker has no way of resolving their address for creating the virtual function table of your derived class. This results in linker errors:\u003cbr /\u003e\u003cbr /\u003e\u003cblockquote\u003eacrxEntryPoint.obj : error LNK2001: unresolved external symbol \u0026ldquo;public: virtual void __thiscall AcGiFaceData::setTransparency(class AcCmTransparency const \u003cem\u003e)\u0026rdquo; (?setTransparency@AcGiFaceData@@UAEXPBVAcCmTransparency@@@Z)\u003cbr /\u003eacrxEntryPoint.obj : error LNK2001: unresolved external symbol \u0026ldquo;public: virtual class AcCmTransparency * __thiscall AcGiFaceData::transparency(void)const \u0026quot; (?transparency@AcGiFaceData@@UBEPAVAcCmTransparency@@XZ)\u003c/blockquote\u003eFollowing is an example that results in these errors:\u003cbr /\u003e\u003cbr /\u003e\u003cblockquote\u003e\u003cspan style=\"color:#990000;\"\u003eclass\u003c/span\u003e AcGiFaceDataEx\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e:\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003e public\u003c/span\u003e AcGiFaceData\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e\u003cbr /\u003e{\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003e\u003cbr /\u003epublic\u003c/span\u003e\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e:\u003c/span\u003e\u003c/b\u003e\u003cbr /\u003e AcGiFaceDataEx\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e() {}\u003cbr /\u003e ~\u003c/span\u003e\u003c/b\u003eAcGiFaceDataEx\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e() {}\u003cbr /\u003e}\u003c/span\u003e\u003c/b\u003e Test\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e;\u003c/span\u003e\u003c/b\u003e\u003cbr /\u003e\u003c/blockquote\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cbr /\u003eThe only solution is to provide an implementation of the missing functions. In this case, it could be accomplished by something like this:\u003cbr /\u003e\u003cbr /\u003e\u003cblockquote\u003e\u003cspan style=\"color:#990000;\"\u003eclass\u003c/span\u003e AcGiFaceDataEx\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e:\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003e public\u003c/span\u003e AcGiFaceData\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e\u003cbr /\u003e{\u003c/span\u003e\u003c/b\u003e\u003cbr /\u003e AcCmTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e\u003c/em\u003e\u003c/span\u003e\u003c/b\u003e mpTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e;\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003e\u003cbr /\u003epublic\u003c/span\u003e\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e:\u003c/span\u003e\u003c/b\u003e\u003cbr /\u003e AcGiFaceDataEx\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e() :\u003c/span\u003e\u003c/b\u003e mpTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e(\u003c/span\u003e\u003c/b\u003e NULL\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e ) {}\u003cbr /\u003e ~\u003c/span\u003e\u003c/b\u003eAcGiFaceDataEx\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e() {\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003e delete\u003c/span\u003e mpTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e; }\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003e\u003cbr /\u003e virtual\u003c/span\u003e\u003cspan style=\"color:#ff6633;\"\u003e void\u003c/span\u003e setTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e(\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003econst\u003c/span\u003e AcCmTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e \u003cem\u003e\u003c/span\u003e\u003c/b\u003etransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e)\u003cbr /\u003e {\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003e\u003cbr /\u003e  delete\u003c/span\u003e mpTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e;\u003c/span\u003e\u003c/b\u003e\u003cbr /\u003e  mpTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e = (\u003c/span\u003e\u003c/b\u003etransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e?\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003e new\u003c/span\u003e AcCmTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e( \u003cem\u003e\u003c/span\u003e\u003c/b\u003etransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e ) :\u003c/span\u003e\u003c/b\u003e NULL\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e);\u003cbr /\u003e }\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003e\u003cbr /\u003e virtual\u003c/span\u003e AcCmTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e\u003c/em\u003e\u003c/span\u003e\u003c/b\u003e transparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e()\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003e const\u003c/span\u003e\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e {\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#ff0000;\"\u003e return\u003c/span\u003e mpTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e; }\u003cbr /\u003e}\u003c/span\u003e\u003c/b\u003e Test\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e;\u003c/span\u003e\u003c/b\u003e\u003c/blockquote\u003eThis will fix the linker errors, but there is no guarantee that it will work as intended. AutoCAD might access its internal transparency value directly without calling through the member functions, which means it would never \u0026ldquo;see\u0026rdquo; the transparency set through the replacement member functions. Furthermore, the addition of the new pointer member changes the size of the class, which causes AcGiFaceDataEx arrays to have a different memory footprint than AcGiFaceData arrays. Lastly, what if Autodesk fixes the problem in a future AutoCAD service pack?\u003cbr /\u003e\u003cbr /\u003eThe ideal solution should not change the size of the class. It should check at runtime whether the function is exported, then use the exported function if it exists. That way, code that is written now will use the exported function if and when it becomes available in a future version of AutoCAD. When the function is not exported, an alternate implementation must be provided. This is not an unusual scenario, and the solution I present for the specific case of AcGiFaceData can be adapted to the more general problem.\u003cbr /\u003e\u003cbr /\u003eIn the AcGiFaceData case, the missing functions are virtual functions. Knowing this, it is possible to use a trick to get the address of the real function. In the code below, the function getAcGiFaceData_vtable() constructs a temporary AcGiFaceData object, from which it extracts a pointer to the object\u0026rsquo;s virtual function table. The virtual function table is just an array of function pointers, so the address of the desired function can be obtained by indexing into the virtual function table. The question is, how far? By counting virtual functions and data members starting from the top of the class hierarchy: in this case, 6 virtual functions in AcRxObject plus 16 virtual functions in AcGiFaceData = 22.\u003cbr /\u003e\u003cbr /\u003eNote that obtaining a function pointer this way relies on Visual C++ implementation details, but this is safe to do since all ObjectARX modules must be compiled in Visual C++.\u003cbr /\u003e\u003cbr /\u003eFollowing is my solution to the missing AcGiFaceData functions:\u003cbr /\u003e\u003cbr /\u003e\u003cblockquote\u003e\u003cspan style=\"color:#000099;\"\u003e#pragma warning(push)\u003cbr /\u003e#pragma warning(disable: 4608)\u003cbr /\u003e\u003c/span\u003e\u003cspan style=\"color:#990000;\"\u003etemplate\u003c/span\u003e\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e \u0026lt;\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003e typename\u003c/span\u003e Src\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e,\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003e typename\u003c/span\u003e Dest\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e \u0026gt;\u003c/span\u003e\u003c/b\u003e\u003cbr /\u003eDest force_cast\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e(\u003c/span\u003e\u003c/b\u003e Src src\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e )\u003cbr /\u003e{\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003e\u003cbr /\u003e union\u003c/span\u003e _convertor\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e {\u003c/span\u003e\u003c/b\u003e Dest d\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e;\u003c/span\u003e\u003c/b\u003e Src s\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e;\u003c/span\u003e\u003c/b\u003e _convertor\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e() :\u003c/span\u003e\u003c/b\u003e d\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e(\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#999900;\"\u003e0\u003c/span\u003e\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e),\u003c/span\u003e\u003c/b\u003e s\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e(\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#999900;\"\u003e0\u003c/span\u003e\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e) {} }\u003c/span\u003e\u003c/b\u003e convertor\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e;\u003c/span\u003e\u003c/b\u003e\u003cbr /\u003e convertor\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e.\u003c/span\u003e\u003c/b\u003es\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e =\u003c/span\u003e\u003c/b\u003e src\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e;\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#ff0000;\"\u003e\u003cbr /\u003e return\u003c/span\u003e convertor\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e.\u003c/span\u003e\u003c/b\u003ed\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e;\u003cbr /\u003e}\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#000099;\"\u003e\u003cbr /\u003e#pragma warning(pop)\u003cbr /\u003e\u003c/span\u003e\u003cspan style=\"color:#990000;\"\u003e\u003cbr /\u003estatic\u003c/span\u003e FARPROC\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e\u003c/em\u003e\u003c/span\u003e\u003c/b\u003e getAcGiFaceData_vtable\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e()\u003cbr /\u003e{\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003e\u003cbr /\u003e static\u003c/span\u003e FARPROC\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e\u003c/em\u003e\u003c/span\u003e\u003c/b\u003e rfVTable\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e = \u003cem\u003e(\u003c/span\u003e\u003c/b\u003eFARPROC\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e**)\u0026amp;\u003c/span\u003e\u003c/b\u003eAcGiFaceData\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e();\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#ff0000;\"\u003e\u003cbr /\u003e return\u003c/span\u003e\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e (\u003c/span\u003e\u003c/b\u003erfVTable\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e?\u003c/span\u003e\u003c/b\u003e rfVTable\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e :\u003c/span\u003e\u003c/b\u003e NULL\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e);\u003cbr /\u003e}\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#ff6633;\"\u003e\u003cbr /\u003e\u003cbr /\u003evoid\u003c/span\u003e AcGiFaceData\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e::\u003c/span\u003e\u003c/b\u003esetTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e(\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003e const\u003c/span\u003e AcCmTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e\u003c/em\u003e\u003c/span\u003e\u003c/b\u003e transparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e )\u003cbr /\u003e{\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003e\u003cbr /\u003e typedef\u003c/span\u003e\u003cspan style=\"color:#ff6633;\"\u003e void\u003c/span\u003e\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e (\u003c/span\u003e\u003c/b\u003eAcGiFaceData\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e::\u003cem\u003e\u003c/span\u003e\u003c/b\u003eF_setTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e)(\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003e const\u003c/span\u003e AcCmTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e\u003c/em\u003e );\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003e\u003cbr /\u003e static\u003c/span\u003e F_setTransparency pfSetTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e =\u003c/span\u003e\u003c/b\u003e force_cast\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e\u0026lt;\u003c/span\u003e\u003c/b\u003e FARPROC\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e,\u003c/span\u003e\u003c/b\u003e F_setTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e \u0026gt;(\u003c/span\u003e\u003c/b\u003eGetProcAddress\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e(\u003c/span\u003e\u003c/b\u003e GetModuleHandleA\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e(\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#009900;\"\u003e \u0026ldquo;acdb18.dll\u0026rdquo;\u003c/span\u003e\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e),\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#009900;\"\u003e \u0026ldquo;?setTransparency@AcGiFaceData@@UEAAXPEBVAcCmTransparency@@@Z\u0026rdquo;\u003c/span\u003e\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e ));\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#ff0000;\"\u003e\u003cbr /\u003e if\u003c/span\u003e\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e( !\u003c/span\u003e\u003c/b\u003epfSetTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e )\u003cbr /\u003e {\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003e\u003cbr /\u003e  static\u003c/span\u003e FARPROC\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e\u003cem\u003e\u003c/span\u003e\u003c/b\u003e rfVTable\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e =\u003c/span\u003e\u003c/b\u003e getAcGiFaceData_vtable\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e();\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#ff0000;\"\u003e\u003cbr /\u003e  if\u003c/span\u003e\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e(\u003c/span\u003e\u003c/b\u003e rfVTable\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e )\u003c/span\u003e\u003c/b\u003e\u003cbr /\u003e   pfSetTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e =\u003c/span\u003e\u003c/b\u003e force_cast\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e\u0026lt;\u003c/span\u003e\u003c/b\u003e FARPROC\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e,\u003c/span\u003e\u003c/b\u003e F_setTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e \u0026gt;(\u003c/span\u003e\u003c/b\u003e rfVTable\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e[\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#999900;\"\u003e22\u003c/span\u003e\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e] );\u003cbr /\u003e }\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#ff0000;\"\u003e\u003cbr /\u003e if\u003c/span\u003e\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e(\u003c/span\u003e\u003c/b\u003e pfSetTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e )\u003cbr /\u003e  (\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003ethis\u003c/span\u003e\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e-\u0026gt;\u003c/em\u003e\u003c/span\u003e\u003c/b\u003epfSetTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e)(\u003c/span\u003e\u003c/b\u003e transparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e );\u003cbr /\u003e}\u003c/span\u003e\u003c/b\u003e\u003cbr /\u003e\u003cbr /\u003eAcCmTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e\u003cem\u003e\u003c/span\u003e\u003c/b\u003e AcGiFaceData\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e::\u003c/span\u003e\u003c/b\u003etransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e()\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003e const\u003c/span\u003e\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e\u003cbr /\u003e{\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003e\u003cbr /\u003e typedef\u003c/span\u003e AcCmTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e\u003c/em\u003e (\u003c/span\u003e\u003c/b\u003eAcGiFaceData\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e::\u003cem\u003e\u003c/span\u003e\u003c/b\u003eF_transparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e)()\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003e const\u003c/span\u003e\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e;\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003e\u003cbr /\u003e static\u003c/span\u003e F_transparency pfTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e =\u003c/span\u003e\u003c/b\u003e force_cast\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e\u0026lt;\u003c/span\u003e\u003c/b\u003e FARPROC\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e,\u003c/span\u003e\u003c/b\u003e F_transparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e \u0026gt;(\u003c/span\u003e\u003c/b\u003eGetProcAddress\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e(\u003c/span\u003e\u003c/b\u003e GetModuleHandleA\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e(\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#009900;\"\u003e \u0026ldquo;acdb18.dll\u0026rdquo;\u003c/span\u003e\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e),\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#009900;\"\u003e \u0026ldquo;?transparency@AcGiFaceData@@UEBAPEAVAcCmTransparency@@XZ\u0026rdquo;\u003c/span\u003e\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e ));\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#ff0000;\"\u003e\u003cbr /\u003e if\u003c/span\u003e\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e( !\u003c/span\u003e\u003c/b\u003epfTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e )\u003cbr /\u003e {\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003e\u003cbr /\u003e  static\u003c/span\u003e FARPROC\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e\u003c/em\u003e\u003c/span\u003e\u003c/b\u003e rfVTable\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e =\u003c/span\u003e\u003c/b\u003e getAcGiFaceData_vtable\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e();\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#ff0000;\"\u003e\u003cbr /\u003e  if\u003c/span\u003e\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e(\u003c/span\u003e\u003c/b\u003e rfVTable\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e )\u003c/span\u003e\u003c/b\u003e\u003cbr /\u003e   pfTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e =\u003c/span\u003e\u003c/b\u003e force_cast\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e\u0026lt;\u003c/span\u003e\u003c/b\u003e FARPROC\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e,\u003c/span\u003e\u003c/b\u003e F_transparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e \u0026gt;(\u003c/span\u003e\u003c/b\u003e rfVTable\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e[\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#999900;\"\u003e23\u003c/span\u003e\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e] );\u003cbr /\u003e }\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#ff0000;\"\u003e\u003cbr /\u003e if\u003c/span\u003e\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e(\u003c/span\u003e\u003c/b\u003e pfTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e )\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#ff0000;\"\u003e\u003cbr /\u003e  return\u003c/span\u003e\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e (\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#990000;\"\u003ethis\u003c/span\u003e\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e-\u0026gt;*\u003c/span\u003e\u003c/b\u003epfTransparency\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e)();\u003c/span\u003e\u003c/b\u003e\u003cspan style=\"color:#ff0000;\"\u003e\u003cbr /\u003e return\u003c/span\u003e NULL\u003cb\u003e\u003cspan style=\"color:#663300;\"\u003e;\u003cbr /\u003e}\u003c/span\u003e\u003c/b\u003e\u003cbr /\u003e\u003c/blockquote\u003e\u003c/p\u003e","title":"ObjectARX 2010: Dealing With Missing Exports"},{"content":"Everyone else is discussing all the cool new features in AutoCAD 2010, so I decided to have a look at what\u0026rsquo;s new in the EULA (End User License Agreement). I compared the AutoCAD 2010 EULA for US/Canada to the AutoCAD 2009 EULA. I won\u0026rsquo;t divulge the process I used to automate the comparison, because the odds are pretty good that I violated the EULA somewhere along the way, and I want plausible deniability.\nThe first change I noticed is that the AutoCAD 2010 EULA contains more shouting. The 2009 EULA started out in a fairly mellow mixed case with a few shouts thrown in for effect, but the 2010 EULA dispenses with the lower case and launches right into a multi-paragraph avalanche of screaming block letters. Apparently nobody was listening, so they turned up the volume.\nSubstantively, there are a number of very interesting changes. The following was added to the preamble:\nSOFTWARE OBTAINED FROM THIRD PARTIES THAT HAVE NOT BEEN AUTHORIZED OR ALLOWED BY AUTODESK, DIRECTLY OR INDIRECTLY, TO SUPPLY SOFTWARE IS LIKELY TO HAVE BEEN MADE AVAILABLE IN VIOLATION OF AUTODESK’S RIGHTS. IN SUCH AN EVENT, AUTODESK IS NOT OBLIGATED TO ISSUE AN ACTIVATION CODE OR OTHERWISE PERMIT YOU TO INSTALL OR USE THE SOFTWARE.\nNext time you\u0026rsquo;re eyeing that used copy of AutoCAD 2010 on eBay, be warned that Autodesk is not obligated to permit you to install or use the software. They don\u0026rsquo;t come right out and say that they won\u0026rsquo;t allow it, so maybe they won\u0026rsquo;t mind \u0026ndash; but then what\u0026rsquo;s the point of including this clause? Tim Vernor (http://www.cadcourt.com/Docket/207cv01189.aspx) won\u0026rsquo;t be very happy about this change.\nMoving along, I see that they added a definition for \u0026ldquo;Uninstall\u0026rdquo;, defining it as \u0026ldquo;to destroy or remove\u0026rdquo;. The definition of \u0026ldquo;User Documentation\u0026rdquo; was very slightly changed from \u0026ldquo;\u0026hellip;after You acquire or Install the Software\u0026hellip;\u0026rdquo; to \u0026ldquo;\u0026hellip;when or after You acquire or Install the Software\u0026hellip;\u0026rdquo;. Incidentally, did you know that Autodesk considers an AutoCAD reseller\u0026rsquo;s invoice to be \u0026ldquo;user documentation\u0026rdquo;?\nRounding out changes in definitions is a change in the definition of \u0026ldquo;You\u0026rdquo;. Yes, Autodesk has redefined \u0026ldquo;You\u0026rdquo; whether \u0026ldquo;you\u0026rdquo; like it or not.\nI could go on and on about small wording changes, and while it would be interesting to contemplate why each change was made (and how many scheming lawyers it took to do it), we\u0026rsquo;d risk missing the forest for the trees.\nSection 2.1, \u0026ldquo;License Grant\u0026rdquo;, contains ominous new language. The following has been added:\nYou may Access the application programming interfaces that may be included with or in the Software or otherwise available from Autodesk for use with the Software (“API’s”) to develop programs, modules, components or functionality that (i) are compatible with and are used and/or interfaced with the Software and (ii) contribute significant value-added functionality or enhancements to the Software (“API Modules”) provided You may Install and Access such API Modules solely on Computers where a licensed copy of the Software is also installed and further provided such Installation and Access is solely in connection with Your Installation and Access of the Software and solely for Your internal business needs. You may not redistribute all or any portion of an API Module.\nRead that again. That\u0026rsquo;s right, you may not write any \u0026ldquo;programs, modules, components, or functionality\u0026rdquo; unless they \u0026ldquo;contribute significant value-added functionality or enhancements\u0026rdquo; to AutoCAD. Furthermore, if you do manage to write a program that adds significant functionality, you may not redistribute all or any part of it. What are those guys smoking out there in California?\nFinally at the end of section 2.1, they changed \u0026ldquo;No license is granted under the terms of this Agreement if You did not lawfully acquire the Software\u0026rdquo; to \u0026ldquo;No license is granted under the terms of this Agreement if You did not lawfully acquire the Software from Autodesk or from a third party who has been permitted or authorized by Autodesk either directly or indirectly to supply the Software\u0026rdquo;. Take that Tim Vernor!\nIn another nod to the Vernor case, section 2.3, \u0026ldquo;Upgrades\u0026rdquo;, adds a new requirement to \u0026ldquo;destroy all Autodesk Materials relating to the Previous Version or, upon request by Autodesk, return all such Autodesk Materials relating to the Previous Version to Autodesk or the company from which they were acquired\u0026rdquo;. This is important language that could persuade a court to view an AutoCAD purchase as a license instead of a sale, thereby giving Autodesk the power to control the secondary market.\nInterestingly, section 2.4, \u0026ldquo;Crossgrades\u0026rdquo;, requires that the previous software be uninstalled within 60 days, but has no requirement that it be destroyed. However, new language in section 2.7, \u0026ldquo;Termination\u0026rdquo;, which requires the software to be destroyed \u0026ldquo;upon termination of the license grant or this Agreement\u0026rdquo;, apparently covers both cases.\nA funny change in section 3.2.3, \u0026ldquo;Transfers\u0026rdquo;, appears to close a loophole. The AutoCAD 2009 EULA disallowed transfers to \u0026ldquo;any other person\u0026rdquo;; the AutoCAD 2010 EULA disallows transfers to \u0026ldquo;any other person or legal entity\u0026rdquo;. Considering a license transfer? Make sure it\u0026rsquo;s to an illegal entity!\nSection 4, \u0026ldquo;ALL RIGHTS RESERVED\u0026rdquo;, was rewritten. The rewrite introduced a grammatical error (\u0026ldquo;and You have not other rights\u0026rdquo;), but otherwise I don\u0026rsquo;t see that much changed. It still ends with the now familiar directive that \u0026ldquo;The Software and User Documentation are licensed, not sold.\u0026quot;\nFinally, the infamous \u0026ldquo;audit clause\u0026rdquo; has been revised. Not the way you may have hoped, I\u0026rsquo;m sad to report. Luckily the change was a minor one that doesn\u0026rsquo;t make the clause any more overbearing than it already was.\nIsn\u0026rsquo;t change wonderful?\n","permalink":"https://www.manusoft.com/archive/blog/whats-new-in-autocad-2010-eula/","summary":"\u003cp\u003eEveryone else is discussing all the cool new features in AutoCAD 2010, so I decided to have a look at what\u0026rsquo;s new in the EULA (End User License Agreement). I compared the AutoCAD 2010 EULA for US/Canada to the AutoCAD 2009 EULA. I won\u0026rsquo;t divulge the process I used to automate the comparison, because the odds are pretty good that I violated the EULA somewhere along the way, and I want plausible deniability.\u003cbr /\u003e\u003cbr /\u003eThe first change I noticed is that the AutoCAD 2010 EULA contains more shouting. The 2009 EULA started out in a fairly mellow mixed case with a few shouts thrown in for effect, but the 2010 EULA dispenses with the lower case and launches right into a multi-paragraph avalanche of screaming block letters. Apparently nobody was listening, so they turned up the volume.\u003cbr /\u003e\u003cbr /\u003eSubstantively, there are a number of very interesting changes. The following was added to the preamble:\u003cbr /\u003e\u003cbr /\u003e\u003cblockquote\u003eSOFTWARE OBTAINED FROM THIRD PARTIES THAT HAVE NOT BEEN AUTHORIZED OR ALLOWED BY AUTODESK, DIRECTLY OR INDIRECTLY, TO SUPPLY SOFTWARE IS LIKELY TO HAVE BEEN MADE AVAILABLE IN VIOLATION OF AUTODESK’S RIGHTS. IN SUCH AN EVENT, AUTODESK IS NOT OBLIGATED TO ISSUE AN ACTIVATION CODE OR OTHERWISE PERMIT YOU TO INSTALL OR USE THE SOFTWARE.\u003c/blockquote\u003e\u003cbr /\u003e\u003cbr /\u003eNext time you\u0026rsquo;re eyeing that used copy of AutoCAD 2010 on eBay, be warned that Autodesk is not obligated to permit you to install or use the software. They don\u0026rsquo;t come right out and say that they won\u0026rsquo;t allow it, so maybe they won\u0026rsquo;t mind \u0026ndash; but then what\u0026rsquo;s the point of including this clause? Tim Vernor (\u003ca href=\"https://web.archive.org/web/2010/http://www.cadcourt.com/Docket/207cv01189.aspx\"\u003e\u003ca href=\"http://www.cadcourt.com/Docket/207cv01189.aspx\"\u003ehttp://www.cadcourt.com/Docket/207cv01189.aspx\u003c/a\u003e\u003c/a\u003e) won\u0026rsquo;t be very happy about this change.\u003cbr /\u003e\u003cbr /\u003eMoving along, I see that they added a definition for \u0026ldquo;Uninstall\u0026rdquo;, defining it as \u0026ldquo;to destroy or remove\u0026rdquo;. The definition of \u0026ldquo;User Documentation\u0026rdquo; was very slightly changed from \u0026ldquo;\u0026hellip;after You acquire or Install the Software\u0026hellip;\u0026rdquo; to \u0026ldquo;\u0026hellip;when or after You acquire or Install the Software\u0026hellip;\u0026rdquo;. Incidentally, did you know that Autodesk considers an AutoCAD reseller\u0026rsquo;s invoice to be \u0026ldquo;user documentation\u0026rdquo;?\u003cbr /\u003e\u003cbr /\u003eRounding out changes in definitions is a change in the definition of \u0026ldquo;You\u0026rdquo;. Yes, Autodesk has redefined \u0026ldquo;You\u0026rdquo; whether \u0026ldquo;you\u0026rdquo; like it or not.\u003cbr /\u003e\u003cbr /\u003eI could go on and on about small wording changes, and while it would be interesting to contemplate why each change was made (and how many scheming lawyers it took to do it), we\u0026rsquo;d risk missing the forest for the trees.\u003cbr /\u003e\u003cbr /\u003eSection 2.1, \u0026ldquo;License Grant\u0026rdquo;, contains ominous new language. The following has been added:\u003cbr /\u003e\u003cblockquote\u003eYou may Access the application programming interfaces that may be included with or in the Software or otherwise available from Autodesk for use with the Software (“API’s”) to develop programs, modules, components or functionality that (i) are compatible with and are used and/or interfaced with the Software and (ii) contribute significant value-added functionality or enhancements to the Software (“API Modules”) provided You may Install and Access such API Modules solely on Computers where a licensed copy of the Software is also installed and further provided such Installation and Access is solely in connection with Your Installation and Access of the Software and solely for Your internal business needs. You may not redistribute all or any portion of an API Module.\u003c/blockquote\u003e\u003cbr /\u003e\u003cbr /\u003eRead that again. That\u0026rsquo;s right, you may not write any \u0026ldquo;programs, modules, components, or functionality\u0026rdquo; unless they \u0026ldquo;contribute significant value-added functionality or enhancements\u0026rdquo; to AutoCAD. Furthermore, if you do manage to write a program that adds significant functionality, you may not redistribute all or any part of it. What are those guys smoking out there in California?\u003cbr /\u003e\u003cbr /\u003eFinally at the end of section 2.1, they changed \u0026ldquo;No license is granted under the terms of this Agreement if You did not lawfully acquire the Software\u0026rdquo; to \u0026ldquo;No license is granted under the terms of this Agreement if You did not lawfully acquire the Software from Autodesk or from a third party who has been permitted or authorized by Autodesk either directly or indirectly to supply the Software\u0026rdquo;. Take \u003cem\u003ethat\u003c/em\u003e Tim Vernor!\u003cbr /\u003e\u003cbr /\u003eIn another nod to the Vernor case, section 2.3, \u0026ldquo;Upgrades\u0026rdquo;, adds a new requirement to \u0026ldquo;destroy all Autodesk Materials relating to the Previous Version or, upon request by Autodesk, return all such Autodesk Materials relating to the Previous Version to Autodesk or the company from which they were acquired\u0026rdquo;. This is important language that could persuade a court to view an AutoCAD purchase as a license instead of a sale, thereby giving Autodesk the power to control the secondary market.\u003cbr /\u003e\u003cbr /\u003eInterestingly, section 2.4, \u0026ldquo;Crossgrades\u0026rdquo;, requires that the previous software be uninstalled within 60 days, but has no requirement that it be destroyed. However, new language in section 2.7, \u0026ldquo;Termination\u0026rdquo;, which requires the software to be destroyed \u0026ldquo;upon termination of the license grant or this Agreement\u0026rdquo;, apparently covers both cases.\u003cbr /\u003e\u003cbr /\u003eA funny change in section 3.2.3, \u0026ldquo;Transfers\u0026rdquo;, appears to close a loophole. The AutoCAD 2009 EULA disallowed transfers to \u0026ldquo;any other person\u0026rdquo;; the AutoCAD 2010 EULA disallows transfers to \u0026ldquo;any other person or legal entity\u0026rdquo;. Considering a license transfer? Make sure it\u0026rsquo;s to an illegal entity!\u003cbr /\u003e\u003cbr /\u003eSection 4, \u0026ldquo;ALL RIGHTS RESERVED\u0026rdquo;, was rewritten. The rewrite introduced a grammatical error (\u0026ldquo;and You have not other rights\u0026rdquo;), but otherwise I don\u0026rsquo;t see that much changed. It still ends with the now familiar directive that \u0026ldquo;The Software and User Documentation are licensed, not sold.\u0026quot;\u003cbr /\u003e\u003cbr /\u003eFinally, the infamous \u0026ldquo;audit clause\u0026rdquo; has been revised. Not the way you may have hoped, I\u0026rsquo;m sad to report. Luckily the change was a minor one that doesn\u0026rsquo;t make the clause any more overbearing than it already was.\u003cbr /\u003e\u003cbr /\u003eIsn\u0026rsquo;t change wonderful?\u003c/p\u003e","title":"What's New in the AutoCAD 2010 EULA"},{"content":"I want to consider software licensing practices in general, but with the specific facts and history in the Vernor vs. Autodesk lawsuit as a backdrop.\nIn the Vernor case, Tim Vernor purchased several boxes of AutoCAD software, and never even read, let alone agreed to, the terms of the license agreement inside the box. When Vernor listed the AutoCAD software for sale on Ebay, Autodesk sent Ebay a notice that claimed Vernor\u0026rsquo;s auction violated Autodesk\u0026rsquo;s copyright. In order to benefit from the safe harbor provisions of the Digital Millennium Copyright Act (DMCA), Ebay was obligated to remove the auctions. Vernor responded by filing a lawsuit accusing Autodesk of making false copyright violation claims.\nAdditional facts have since come to light. For one, we\u0026rsquo;ve learned that the AutoCAD software that Vernor purchased had been previously upgraded to a newer version (http://www.cadcourt.com/NewsFeed/tabid/53/EntryID/50/Default.aspx). Vernor did not know this when he purchased the software; and in any case, it\u0026rsquo;s not clear that this fact has any bearing on the outcome of the suit.\nGiven this set of facts, let\u0026rsquo;s analyze the Vernor case not from a purely legal perspective, but from a more abstract \u0026ldquo;moral\u0026rdquo; perspective. After all, society is the ultimate arbitrator of what is wrong and what is right with respect to our laws. We ultimately determine whether laws are fair by whether we follow them willingly (and whether we put pressure on our legislatures to change them).\nSteve Johnson opines that Autodesk is morally right (http://www.blog.cadnauseam.com/2009/02/21/vernor-v-autodesk-why-i-think-autodesk-is-right/) in the Vernor case, because the software Vernor purchased was \u0026ldquo;tainted\u0026rdquo; due to having been upgraded by the original owner. In Steve\u0026rsquo;s view\u0026hellip; [see Steve\u0026rsquo;s comment below where he chides me for ascribing this view to him - O.W.] Presumably, one who holds this view sees Vernor\u0026rsquo;s original purchase as akin to someone purchasing stolen goods. With stolen goods, the law (and hopefully our moral compass) recognizes that the purchaser of the stolen goods has no legal right to them.\nAutodesk offered the original owner a discounted price for a newer version of AutoCAD in exchange for a promise to destroy the older version. The original owner reneged on its promise to destroy the old version, and sold it to an unwitting buyer instead.\nIt follows that both Autodesk and Tim Vernor were treated unfairly by the company that sold the AutoCAD software to Vernor. Despite the company\u0026rsquo;s history of using pirated software, Autodesk gave them the benefit of the doubt when selling them a discounted upgrade. Vernor, by all accounts, had no idea and no way of knowing that the software he purchased had been previously upgraded. This is a recipe for disaster.\nUnfortunately, this sort of disaster is all too common. In many cases, software users simply don\u0026rsquo;t read license agreements. If they do read license agreements, they don\u0026rsquo;t understand them. After all, most of us are not lawyers, and we can\u0026rsquo;t reasonably be expected to hire a lawyer to evaluate the license agreements of every software product we use. How then can we be expected to follow them exactly and without fail?\nConsider that it\u0026rsquo;s entirely possible that the company from which Vernor bought his AutoCAD software had no idea that they had agreed to destroy the upgraded AutoCAD software. At least from a moral perspective, we can have some sympathy for the company if they honestly had no idea they were violating any agreements when they sold the software to Vernor.\nCould Autodesk have required the upgraded AutoCAD software to be returned, or required certification by an independent \u0026ldquo;software recycler\u0026rdquo; that it had been destroyed? Sure they could have. In fact, such requirements did exist in the early days of software license agreements. Had Autodesk done so, the Vernor court would probably have concluded that AutoCAD was licensed, not sold.\nWhy even require the old version to be destroyed when upgrading? If we stop using the old version, why shouldn\u0026rsquo;t we be allowed to sell it at market value? Doesn\u0026rsquo;t recycling old software make just as much sense as recycling old tires? We have been conditioned to believe that discounted upgrades are good for us, but are they really?\nWould we accept a legal regime under which tire manufacturers could force us to destroy our old tires as part of the new tire purchase agreement? Oh, you say, that comparison isn\u0026rsquo;t valid because tires eventually wear out of their own accord, whereas old software continues working forever! First of all, old software doesn\u0026rsquo;t continue working forever. How many people still use VisiCalc? Furthermore, what would this line of reasoning conclude about potential tires of the future that last forever? We\u0026rsquo;d have to start licensing tires instead of purchasing them!\nWhat would happen if software vendors could not legally prevent \u0026ldquo;used\u0026rdquo; software from being resold on the open market, no matter how it was purchased or upgraded? For one, it would increase competition, because new versions of software would be competing not only against software from other vendors, but also against older versions of itself. In a world where software is priced based on what the market will bear, the net effect would be lower prices and higher quality (not to mention less frequent \u0026ldquo;upgrades\u0026rdquo;) for all software.\nI think the Vernor case is just one example illustrating how the current software licensing system has sprung a leak, and is in need of repair. Can it be patched, or does it need to be replaced? Can the bleeding be stopped at the ankle, or should it be stopped it at the neck? This is a classical case of the Petcock Problem.\nSoftware industry advocates like the Business Software Alliance (BSA) proclaim that the solution is educating consumers. Education may be important, but I think that \u0026ldquo;educating consumers\u0026rdquo; should not be left to an industry alliance.\nI have some ideas about how the system can be reformed, but I think we have to start by recognizing that there\u0026rsquo;s a problem.\n","permalink":"https://www.manusoft.com/archive/blog/software-licensing-case-for-reform/","summary":"\u003cp\u003eI want to consider software licensing practices in general, but with the specific facts and history in the \u003ca href=\"https://web.archive.org/web/2010/http://www.cadcourt.com/Docket/207cv01189.aspx\"\u003eVernor vs. Autodesk lawsuit\u003c/a\u003e as a backdrop.\u003cbr /\u003e\u003cbr /\u003eIn the Vernor case, Tim Vernor purchased several boxes of AutoCAD software, and never even read, let alone agreed to, the terms of the license agreement inside the box. When Vernor listed the AutoCAD software for sale on Ebay, Autodesk sent Ebay a notice that claimed Vernor\u0026rsquo;s auction violated Autodesk\u0026rsquo;s copyright. In order to benefit from the safe harbor provisions of the Digital Millennium Copyright Act (\u003ca href=\"http://en.wikipedia.org/wiki/Dmca\"\u003eDMCA\u003c/a\u003e), Ebay was obligated to remove the auctions. Vernor responded by filing a lawsuit accusing Autodesk of making false copyright violation claims.\u003cbr /\u003e\u003cbr /\u003eAdditional facts have since come to light. For one, we\u0026rsquo;ve learned that the AutoCAD software that Vernor purchased had been previously upgraded to a newer version (\u003ca href=\"https://web.archive.org/web/2010/http://www.cadcourt.com/NewsFeed/tabid/53/EntryID/50/Default.aspx\"\u003e\u003ca href=\"http://www.cadcourt.com/NewsFeed/tabid/53/EntryID/50/Default.aspx\"\u003ehttp://www.cadcourt.com/NewsFeed/tabid/53/EntryID/50/Default.aspx\u003c/a\u003e\u003c/a\u003e). Vernor did not know this when he purchased the software; and in any case, it\u0026rsquo;s not clear that this fact has any bearing on the outcome of the suit.\u003cbr /\u003e\u003cbr /\u003eGiven this set of facts, let\u0026rsquo;s analyze the Vernor case not from a purely legal perspective, but from a more abstract \u0026ldquo;moral\u0026rdquo; perspective. After all, society is the ultimate arbitrator of what is wrong and what is right with respect to our laws. We ultimately determine whether laws are fair by whether we follow them willingly (and whether we put pressure on our legislatures to change them).\u003cbr /\u003e\u003cbr /\u003eSteve Johnson opines that Autodesk is morally right (\u003ca href=\"http://www.blog.cadnauseam.com/2009/02/21/vernor-v-autodesk-why-i-think-autodesk-is-right/\"\u003ehttp://www.blog.cadnauseam.com/2009/02/21/vernor-v-autodesk-why-i-think-autodesk-is-right/\u003c/a\u003e) in the Vernor case, because the software Vernor purchased was \u0026ldquo;tainted\u0026rdquo; due to having been upgraded by the original owner. \u003cstrike\u003eIn Steve\u0026rsquo;s view\u0026hellip;\u003c/strike\u003e \u003cem\u003e[see Steve\u0026rsquo;s comment below where he chides me for ascribing this view to him - O.W.]\u003c/em\u003e Presumably, one who holds this view sees Vernor\u0026rsquo;s original purchase as akin to someone purchasing stolen goods. With stolen goods, the law (and hopefully our moral compass) recognizes that the purchaser of the stolen goods has no legal right to them.\u003cbr /\u003e\u003cbr /\u003eAutodesk offered the original owner a discounted price for a newer version of AutoCAD in exchange for a promise to destroy the older version. The original owner reneged on its promise to destroy the old version, and sold it to an unwitting buyer instead.\u003cbr /\u003e\u003cbr /\u003eIt follows that both Autodesk and Tim Vernor were treated unfairly by the company that sold the AutoCAD software to Vernor. Despite the company\u0026rsquo;s history of using pirated software, Autodesk gave them the benefit of the doubt when selling them a discounted upgrade. Vernor, by all accounts, had no idea and no way of knowing that the software he purchased had been previously upgraded. This is a recipe for disaster.\u003cbr /\u003e\u003cbr /\u003eUnfortunately, this sort of disaster is all too common. In many cases, software users simply don\u0026rsquo;t read license agreements. If they do read license agreements, they don\u0026rsquo;t understand them. After all, most of us are not lawyers, and we can\u0026rsquo;t reasonably be expected to hire a lawyer to evaluate the license agreements of every software product we use. How then can we be expected to follow them exactly and without fail?\u003cbr /\u003e\u003cbr /\u003eConsider that it\u0026rsquo;s entirely possible that the company from which Vernor bought his AutoCAD software had no idea that they had agreed to destroy the upgraded AutoCAD software. At least from a moral perspective, we can have some sympathy for the company if they honestly had no idea they were violating any agreements when they sold the software to Vernor.\u003cbr /\u003e\u003cbr /\u003eCould Autodesk have required the upgraded AutoCAD software to be returned, or required certification by an independent \u0026ldquo;software recycler\u0026rdquo; that it had been destroyed? Sure they could have. In fact, such requirements did exist in the early days of software license agreements. Had Autodesk done so, the Vernor court would probably have concluded that AutoCAD was licensed, not sold.\u003cbr /\u003e\u003cbr /\u003eWhy even require the old version to be destroyed when upgrading? If we stop using the old version, why shouldn\u0026rsquo;t we be allowed to sell it at market value? Doesn\u0026rsquo;t recycling old software make just as much sense as recycling old tires? We have been conditioned to believe that discounted upgrades are good for us, but are they really?\u003cbr /\u003e\u003cbr /\u003eWould we accept a legal regime under which tire manufacturers could force us to destroy our old tires as part of the new tire purchase agreement? Oh, you say, that comparison isn\u0026rsquo;t valid because tires eventually wear out of their own accord, whereas old software continues working forever! First of all, old software doesn\u0026rsquo;t continue working forever. How many people still use \u003ca href=\"http://en.wikipedia.org/wiki/VisiCalc\"\u003eVisiCalc\u003c/a\u003e? Furthermore, what would this line of reasoning conclude about potential tires of the future that last forever? We\u0026rsquo;d have to start licensing tires instead of purchasing them!\u003cbr /\u003e\u003cbr /\u003eWhat would happen if software vendors could not legally prevent \u0026ldquo;used\u0026rdquo; software from being resold on the open market, no matter how it was purchased or upgraded? For one, it would increase competition, because new versions of software would be competing not only against software from other vendors, but also against older versions of itself. In a world where software is priced based on what the market will bear, the net effect would be lower prices and higher quality (not to mention less frequent \u0026ldquo;upgrades\u0026rdquo;) for all software.\u003cbr /\u003e\u003cbr /\u003eI think the Vernor case is just one example illustrating how the current software licensing system has sprung a leak, and is in need of repair. Can it be patched, or does it need to be replaced? Can the bleeding be stopped at the ankle, or should it be stopped it at the neck? This is a classical case of the \u003ca href=\"/2009/02/petcock-problem.htm\"\u003ePetcock Problem\u003c/a\u003e.\u003cbr /\u003e\u003cbr /\u003eSoftware industry advocates like the Business Software Alliance (\u003ca href=\"http://www.bsa.org\"\u003eBSA\u003c/a\u003e) proclaim that the solution is educating consumers. Education may be important, but I think that \u0026ldquo;educating consumers\u0026rdquo; should not be left to an industry alliance.\u003cbr /\u003e\u003cbr /\u003eI have some ideas about how the system can be reformed, but I think we have to start by recognizing that there\u0026rsquo;s a problem.\u003c/p\u003e","title":"Software Licensing: A Case For Reform"},{"content":"I\u0026rsquo;m a firm supporter of intellectual property rights. I fully support the rights of software publishers to own and profit from their creative work. I make my living as both a consumer of software and a publisher of software, so my views on software licensing reflect what I consider to be a healthy symbiosis between producers and consumers.\nIntellectual property laws are (or should be) designed to protect this symbiotic relationship for the public good. The patent system is designed not to protect patent owners from pirates, but to promote inventions and improvements on previous inventions that benefit the public. The fact that patent laws do help to protect patent owners from pirates is merely a side effect of the underlying goal of promoting the public interest. We, the public, grant exclusive rights to patent owners for a specific time in exchange for them making public the details of their invention. Innovative inventors can thus build on a body of previously published inventions rather than starting from scratch. This system of \u0026ldquo;open source\u0026rdquo; innovation speeds the evolution of technology, and everybody benefits from it.\nCopyright laws must be viewed in the same light. Copyright laws are designed to promote and enhance the public good by encouraging the production and publication of creative works. In exchange for giving copyright owners certain rights for a certain period of time, the public gets to enjoy and build upon a body of creative work. Some argue that the benefit of copyright protection provides a financial incentive to create the works in the first place, and that without such an incentive the works would never be produced at all. While this is undoubtedly true, consider that there are other ways to provide financial incentives (by providing government grants, for example), so I think it\u0026rsquo;s important to view this aspect of copyright protection as a consequence of the goal to promote the public interest, not as a goal in and of itself.\nCopyright laws have long recognized a need to prevent copyrights from being abused by providing exceptions to the protection they afford to publishers. The Fair Use doctrine is the most common such exception in US copyright law. The First Sale doctrine (or \u0026ldquo;exhaustion rule\u0026rdquo; in some jurisdictions) is another example of a limitation on copyrights. These exceptions and limitations evolved in response to attempts by copyright owners to abuse copyrights in a way that contravened their purpose of promoting the public interest.\nSoftware licenses are a relatively new phenomenon, but they rely on very old law: contract law. It is important to understand that a software license agreement is a contract. The commercial software publisher agrees to give us limited and conditional copy rights and authorizes us to use the software in exchange for a fee. If the license agreement that we agreed to authorizes us to install and use the software on one computer, but we install it on ten computers, then we are violating both contract and copyright law (because we copied the software without permission). If the license agreement that we agreed to forbids us to resell the software to someone else, but we decide not to use the software ourselves and sell it anyway, we are violating only contract law (because we made no unauthorized copies).\nThere are several contract law issues typically encountered with software license agreements.\nFirst, typical commercial software license agreements suffer from their unilateral nature. The contract is drawn up by the publisher with no negotiation or input from the consumer. Some question whether these are valid contracts in the first place, because they lack the \u0026ldquo;meeting of the minds\u0026rdquo; element that some judicial interpretations of contract law require.\nSecond, software license agreements are not usually consummated until after the sale, when the software is finally installed. We purchase the software, essentially committing to our side of the bargain before we even know the terms of the contract to which we must eventually agree in order to use the software. This is inherently unfair, and there are still many unsettled questions about whether or not such a contract can ever be equitable and enforceable.\nIf you\u0026rsquo;ve been following the Vernor vs. Autodesk lawsuit, you\u0026rsquo;ll know that the US federal district court in that case ruled that AutoCAD software was sold, not licensed, and therefore subject to the First Sale Doctrine. The First Sale Doctrine says, in essence, that a publisher cannot contractually restrict the downstream resale or distribution of a copyrighted work beyond the \u0026ldquo;first sale\u0026rdquo;. The court, at least in its initial ruling, rejected Autodesk\u0026rsquo;s argument that AutoCAD was licensed, and therefore exempt from the First Sale doctrine. It should be noted that the Vernor lawsuit is far from over, and this first sale decision could well change before the dust settles.\nThe courts will eventually reach a final decision in the specific case of Vernor vs. Autodesk, but why was this lawsuit even necessary in the first place? It\u0026rsquo;s difficult to envision any outcome in which every injury is rectified. It could even be argued that everybody loses, no matter the outcome. And this is just one case in one jurisdiction.\nIn the end, the final result of the Vernor case may not have much impact on how software is sold. It ultimately comes down to us, the union of consumers, to decide what kind of system we want. Unfortunately, right now we\u0026rsquo;re doing the software limbo while we wait faithfully for the next service pack. I think that we need more than a service pack. A system restore might be in order.\n","permalink":"https://www.manusoft.com/archive/blog/software-licensing-whos-on-first/","summary":"\u003cp\u003eI\u0026rsquo;m a firm supporter of intellectual property rights. I fully support the rights of software publishers to own and profit from their creative work. I make my living as both a consumer of software and a publisher of software, so my views on software licensing reflect what I consider to be a healthy symbiosis between producers and consumers.\u003cbr /\u003e\u003cbr /\u003eIntellectual property laws are (or should be) designed to protect this symbiotic relationship for the public good. The patent system is designed not to protect patent owners from pirates, but to promote inventions and improvements on previous inventions that benefit the public. The fact that patent laws do help to protect patent owners from pirates is merely a side effect of the underlying goal of promoting the public interest. We, the public, grant exclusive rights to patent owners for a specific time in exchange for them making public the details of their invention. Innovative inventors can thus build on a body of previously published inventions rather than starting from scratch. This system of \u0026ldquo;open source\u0026rdquo; innovation speeds the evolution of technology, and everybody benefits from it.\u003cbr /\u003e\u003cbr /\u003eCopyright laws must be viewed in the same light. Copyright laws are designed to promote and enhance the public good by encouraging the production and publication of creative works. In exchange for giving copyright owners certain rights for a certain period of time, the public gets to enjoy and build upon a body of creative work. Some argue that the benefit of copyright protection provides a financial incentive to create the works in the first place, and that without such an incentive the works would never be produced at all. While this is undoubtedly true, consider that there are other ways to provide financial incentives (by providing government grants, for example), so I think it\u0026rsquo;s important to view this aspect of copyright protection as a consequence of the goal to promote the public interest, not as a goal in and of itself.\u003cbr /\u003e\u003cbr /\u003eCopyright laws have long recognized a need to prevent copyrights from being abused by providing exceptions to the protection they afford to publishers. The \u003ca href=\"http://en.wikipedia.org/wiki/Fair_use\"\u003eFair Use doctrine\u003c/a\u003e is the most common such exception in US copyright law. The First Sale doctrine (or \u0026ldquo;exhaustion rule\u0026rdquo; in some jurisdictions) is another example of a limitation on copyrights. These exceptions and limitations evolved in response to attempts by copyright owners to abuse copyrights in a way that contravened their purpose of promoting the public interest.\u003cbr /\u003e\u003cbr /\u003eSoftware licenses are a relatively new phenomenon, but they rely on very old law: \u003ca href=\"http://en.wikipedia.org/wiki/Contract_law\"\u003econtract law\u003c/a\u003e. It is important to understand that a software license agreement is a contract. The commercial software publisher agrees to give us limited and conditional copy rights and authorizes us to use the software in exchange for a fee. If the license agreement that we agreed to authorizes us to install and use the software on one computer, but we install it on ten computers, then we are violating both contract and copyright law (because we copied the software without permission). If the license agreement that we agreed to forbids us to resell the software to someone else, but we decide not to use the software ourselves and sell it anyway, we are violating only contract law (because we made no unauthorized copies).\u003cbr /\u003e\u003cbr /\u003eThere are several contract law issues typically encountered with software license agreements.\u003cbr /\u003e\u003cbr /\u003eFirst, typical commercial software license agreements suffer from their unilateral nature. The contract is drawn up by the publisher with no negotiation or input from the consumer. Some question whether these are valid contracts in the first place, because they lack the \u0026ldquo;meeting of the minds\u0026rdquo; element that some judicial interpretations of contract law require.\u003cbr /\u003e\u003cbr /\u003eSecond, software license agreements are not usually consummated until after the sale, when the software is finally installed. We purchase the software, essentially committing to our side of the bargain before we even know the terms of the contract to which we must eventually agree in order to use the software. This is inherently unfair, and there are still many unsettled questions about whether or not such a contract can ever be equitable and enforceable.\u003cbr /\u003e\u003cbr /\u003eIf you\u0026rsquo;ve been following the \u003ca href=\"https://web.archive.org/web/2010/http://www.cadcourt.com/Docket/207cv01189.aspx\"\u003eVernor vs. Autodesk lawsuit\u003c/a\u003e, you\u0026rsquo;ll know that the US federal district court in that case ruled that AutoCAD software was sold, not licensed, and therefore subject to the \u003ca href=\"http://en.wikipedia.org/wiki/First-sale_doctrine\"\u003eFirst Sale Doctrine\u003c/a\u003e. The First Sale Doctrine says, in essence, that a publisher cannot contractually restrict the downstream resale or distribution of a copyrighted work beyond the \u0026ldquo;first sale\u0026rdquo;. The court, at least in its initial ruling, rejected Autodesk\u0026rsquo;s argument that AutoCAD was licensed, and therefore exempt from the First Sale doctrine. It should be noted that the Vernor lawsuit is far from over, and this first sale decision could well change before the dust settles.\u003cbr /\u003e\u003cbr /\u003eThe courts will eventually reach a final decision in the specific case of Vernor vs. Autodesk, but why was this lawsuit even necessary in the first place? It\u0026rsquo;s difficult to envision any outcome in which every injury is rectified. It could even be argued that everybody loses, no matter the outcome. And this is just one case in one jurisdiction.\u003cbr /\u003e\u003cbr /\u003eIn the end, the final result of the Vernor case may not have much impact on how software is sold. It ultimately comes down to us, the union of consumers, to decide what kind of system we want. Unfortunately, right now we\u0026rsquo;re doing the \u003ca href=\"/2009/02/software-limbo.htm\"\u003esoftware limbo\u003c/a\u003e while we wait faithfully for the next service pack. I think that we need more than a service pack. A system restore might be in order.\u003c/p\u003e","title":"Software Licensing: Who's On First?"},{"content":"Bruce Schneier argues that data is the pollution of the information age, and \u0026ldquo;just as 100 years ago people ignored pollution in our rush to build the Industrial Age, today we\u0026rsquo;re ignoring data in our rush to build the Information Age.\u0026rdquo;\nSoftware is still surfing the wave of technology revolution. In the tug-of-war between producers and consumers, the producers are still pulling the rope and consumers are just hanging on.\nJust as the coal mines, steel mills, and sweat shops of the burgeoning industrial age led to organized labor and labor laws, the consumers of the information age will eventually need to come to grips with the predatory practices of greedy software barons through collective bargaining and regulation.\nYou\u0026rsquo;ve all heard the old software vs. car argument, right? Is buying software like buying a car? Or is it like leasing a car? Or are cars just a bad analogy, because software isn\u0026rsquo;t like cars at all?\nIs software really different, or have we just been conditioned to believe that it\u0026rsquo;s different?\nThe problem is that we\u0026rsquo;re still coming to terms with software, both legally and morally. Software companies have had a clear advantage in this information age frontier, and they have used their advantage to mold the software model to their liking. The software industry has successfully convinced us that software is licensed, not sold, and that because it is licensed, the old rules don\u0026rsquo;t apply.\nIndeed, it seems like software license agreements have been around forever. We\u0026rsquo;ve accepted them, adapted to them, and basically ignored them. In the meantime, software companies have added more restrictions to their license agreements, lobbied legislators to create new laws that protect the restrictions, and quietly begun building case law in support of the software license regime.\nThis is the software limbo. How low can we go? When will the laborers of the information age unite and say \u0026ldquo;enough is enough\u0026rdquo;?\n","permalink":"https://www.manusoft.com/archive/blog/software-limbo/","summary":"\u003cp\u003eBruce Schneier argues that \u003ca href=\"http://www.schneier.com/blog/archives/2009/02/privacy_in_the.html\"\u003edata is the pollution of the information age\u003c/a\u003e, and \u0026ldquo;just as 100 years ago people ignored pollution in our rush to build the Industrial Age, today we\u0026rsquo;re ignoring data in our rush to build the Information Age.\u0026rdquo;\u003c/p\u003e","title":"The Software Limbo"},{"content":"Many years ago, I worked for the small town where I grew up. My title was Street Commissioner. This is a very small town, and I was a part time employee with one helper. Basically, I was the guy what fixed things. We had a very old network of water pipes that supplied water from several wells. The water system leaked in many places. Occasionally, a small leak turned into a big leak, and something had to be done about it.\nYou might think that the first response to a big water leak would be to close the water valves in order to isolate the leak and prevent the loss of valuable water. Not so fast!\nFirst of all, in an interconnected network that had been upgraded and patched by piecework for many decades, it wasn\u0026rsquo;t always possible for small localized segments to be isolated, and turning off the water for a large area would inevitably lead to discord.\nSecond, closing even a single valve caused pressures throughout the system to change. Any pressure change anywhere in the system had the potential to cause new failures at weak points, which would just compound the problem.\nFurthermore, at some point repairs could be counterproductive and completely replacing parts of the network would be the best option. This would require time for the town council to approve the funds, and for contractors to be hired, and for the work to be scheduled and completed \u0026ndash; all while the leaking water is causing collateral damage to the roadway and inconveniencing the affected residents with low water pressure.\nEventually the big leak had to be repaired, and the water had to be turned off somewhere before the repair could be completed. The decision about where and how to accomplish this was not a simple decision, due to the competing factors involved, and the practical realities a small town is faced with.\nI call this problem the Petcock Problem. Imagine petcock valves scattered throughout a network of pipes. I call this the Petcock Problem because petcock valves typically have three positions, analogous to the notion of closing, opening, or redirecting connections on the network in order to isolate a fault.\nThe Petcock Problem would apply in many situations involving complex networks, such as when a tree knocks down a power line or when an internet router dies. Sometimes the best solution is to isolate the fault to the most localized part of the network possible, thereby inconveniencing the least number of people at the expense of putting the larger network at greater risk of a much larger catastrophe. Sometimes the best solution is to shut down the entire network temporarily, thereby inconveniencing everybody that relies on the network, but removing any risk of further degradation while repairs are completed. Most of the time the best solution is somewhere in between these extremes. As the network ages and faults become more commonplace, at some point the best solution is to scrap the entire network and build a new one.\nThis is the Petcock Problem, or \u0026ldquo;How do you stop the bleeding?\u0026rdquo;. The solution involves balancing several variables, some of which are known quantities, some of which are wild guesses, and some of which are potentially very chaotic (in that a small change in value could have an unpredictable impact on the outcome).\n[Disclaimer: I\u0026rsquo;m sure that the study of network topologies has its own terms of art and well researched algorithms for describing and solving these types of problems. I\u0026rsquo;m not claiming to have some new revelation about networks here. This is just my own little custom worldview.]\nIn a future post I will explain how the Petcock Problem applies to something as diverse as the Vernor lawsuit (http://www.cadcourt.com/Docket/207cv01189.aspx).\n","permalink":"https://www.manusoft.com/archive/blog/petcock-problem/","summary":"\u003cp\u003eMany years ago, I worked for the small town where I grew up. My title was Street Commissioner. This is a very small town, and I was a part time employee with one helper. Basically, I was the guy what fixed things. We had a very old network of water pipes that supplied water from several wells. The water system leaked in many places. Occasionally, a small leak turned into a big leak, and something had to be done about it.\u003cbr /\u003e\u003cbr /\u003eYou might think that the first response to a big water leak would be to close the water valves in order to isolate the leak and prevent the loss of valuable water. Not so fast!\u003cbr /\u003e\u003cbr /\u003eFirst of all, in an interconnected network that had been upgraded and patched by piecework for many decades, it wasn\u0026rsquo;t always possible for small localized segments to be isolated, and turning off the water for a large area would inevitably lead to discord.\u003cbr /\u003e\u003cbr /\u003eSecond, closing even a single valve caused pressures throughout the system to change. Any pressure change anywhere in the system had the potential to cause new failures at weak points, which would just compound the problem.\u003cbr /\u003e\u003cbr /\u003eFurthermore, at some point repairs could be counterproductive and completely replacing parts of the network would be the best option. This would require time for the town council to approve the funds, and for contractors to be hired, and for the work to be scheduled and completed \u0026ndash; all while the leaking water is causing collateral damage to the roadway and inconveniencing the affected residents with low water pressure.\u003cbr /\u003e\u003cbr /\u003eEventually the big leak had to be repaired, and the water had to be turned off \u003cem\u003esomewhere\u003c/em\u003e before the repair could be completed. The decision about where and how to accomplish this was not a simple decision, due to the competing factors involved, and the practical realities a small town is faced with.\u003cbr /\u003e\u003cbr /\u003eI call this problem the Petcock Problem. Imagine \u003ca href=\"http://en.wikipedia.org/wiki/Petcock\"\u003epetcock valves\u003c/a\u003e scattered throughout a network of pipes. I call this the Petcock Problem because petcock valves typically have three positions, analogous to the notion of closing, opening, or redirecting connections on the network in order to isolate a fault.\u003cbr /\u003e\u003cbr /\u003eThe Petcock Problem would apply in many situations involving complex networks, such as when a tree knocks down a power line or when an internet router dies. Sometimes the best solution is to isolate the fault to the most localized part of the network possible, thereby inconveniencing the least number of people at the expense of putting the larger network at greater risk of a much larger catastrophe. Sometimes the best solution is to shut down the entire network temporarily, thereby inconveniencing everybody that relies on the network, but removing any risk of further degradation while repairs are completed. Most of the time the best solution is somewhere in between these extremes. As the network ages and faults become more commonplace, at some point the best solution is to scrap the entire network and build a new one.\u003cbr /\u003e\u003cbr /\u003eThis is the Petcock Problem, or \u0026ldquo;How do you stop the bleeding?\u0026rdquo;. The solution involves balancing several variables, some of which are known quantities, some of which are wild guesses, and some of which are potentially very chaotic (in that a small change in value could have an unpredictable impact on the outcome).\u003cbr /\u003e\u003cbr /\u003e[Disclaimer: I\u0026rsquo;m sure that the study of \u003ca href=\"http://en.wikipedia.org/wiki/Network_topology\"\u003enetwork topologies\u003c/a\u003e has its own terms of art and well researched algorithms for describing and solving these types of problems. I\u0026rsquo;m not claiming to have some new revelation about networks here. This is just my own little custom worldview.]\u003cbr /\u003e\u003cbr /\u003eIn a future post I will explain how the Petcock Problem applies to something as diverse as the Vernor lawsuit (\u003ca href=\"https://web.archive.org/web/2010/http://www.cadcourt.com/Docket/207cv01189.aspx\"\u003e\u003ca href=\"http://www.cadcourt.com/Docket/207cv01189.aspx\"\u003ehttp://www.cadcourt.com/Docket/207cv01189.aspx\u003c/a\u003e\u003c/a\u003e).\u003c/p\u003e","title":"The Petcock Problem"},{"content":"From a new features overview of Autodesk Design Review 2010 (http://dwf.blogs.com/beyond_the_paper/2009/02/autodesk-design-review-2010-new-features-overview.html) comes the following snake oil claim:\nDigital Signatures\nTo help secure your data, you can now digitally sign DWFx files.\nAs I\u0026rsquo;ve explained before, digital signatures do not provide data security; they simply authenticate the person that applied the signature. Digital signatures are a welcome feature with many potential uses, but data security is not one of them.\n","permalink":"https://www.manusoft.com/archive/blog/autodesk-design-review-2010-snake-oil/","summary":"\u003cp\u003eFrom a new features overview of Autodesk Design Review 2010 (\u003ca href=\"http://dwf.blogs.com/beyond_the_paper/2009/02/autodesk-design-review-2010-new-features-overview.html\"\u003ehttp://dwf.blogs.com/beyond_the_paper/2009/02/autodesk-design-review-2010-new-features-overview.html\u003c/a\u003e) comes the following snake oil claim:\u003cbr /\u003e\u003cblockquote\u003eDigital Signatures\u003cbr /\u003eTo help secure your data, you can now digitally sign DWFx files.\u003c/blockquote\u003e\u003cbr /\u003e\u003cbr /\u003eAs I\u0026rsquo;ve \u003ca href=\"/2008/12/design-file-locking-and-snake-oil.htm\"\u003eexplained before\u003c/a\u003e, digital signatures do not provide data security; they simply authenticate the person that applied the signature. Digital signatures are a welcome feature with many potential uses, but data security is not one of them.\u003c/p\u003e","title":"Autodesk Design Review 2010 Snake Oil Alert"},{"content":"My participation in the Autodesk discussion groups (http://www.autodesk.com/discussion) has been severely curtailed since the notorious \u0026ldquo;upgrade\u0026rdquo; a few months ago. One of the many problems introduced by the upgrade is the loss of formatting. It\u0026rsquo;s now virtually impossible to post messages that include inline AutoLISP or ObjectARX code without them being reformatted into unreadable garbage. Even attaching the code as a file is difficult (the \u0026ldquo;solution\u0026rdquo; is to rename files with a .txt extension!) As a result, many queries for programming help go unanswered. Autodesk has made an attempt to provide a fix (http://discussion.autodesk.com/forums/ann.jspa?annID=125), but a survey of the posts in any of the programming groups shows that it\u0026rsquo;s not working.\n[Thread has been removed by Autodesk, so link was changed to point to archived thread.]\nThe recently announced layoffs and related cost cutting measures at Autodesk have dimmed my hopes for a resolution. Therefore, I\u0026rsquo;ve decided to offer my services to fix the problem. Autodesk, I\u0026rsquo;m offering to donate my time to fix your discussion group software. Just give me access to a development and testing platform, and the right to modify or rewrite the code.\nReaders, can I get an \u0026ldquo;Amen\u0026rdquo;?\n","permalink":"https://www.manusoft.com/archive/blog/autodesk-discussion-group-facelift/","summary":"\u003cp\u003eMy participation in the Autodesk discussion groups (\u003ca href=\"http://www.autodesk.com/discussion\"\u003ehttp://www.autodesk.com/discussion\u003c/a\u003e) has been severely curtailed since the notorious \u0026ldquo;upgrade\u0026rdquo; a few months ago. One of the \u003ca href=\"https://www.cadnauseam.com/2008/10/21/the-autodesk-discussion-groups-are-awful/\"\u003emany problems\u003c/a\u003e introduced by the upgrade is the loss of formatting. It\u0026rsquo;s now virtually impossible to post messages that include inline AutoLISP or ObjectARX code without them being reformatted into unreadable garbage. Even attaching the code as a file is difficult (the \u0026ldquo;solution\u0026rdquo; is to rename files with a .txt extension!) As a result, many queries for programming help go unanswered. Autodesk has made an attempt to provide a fix (\u003ca href=\"http://discussion.autodesk.com/forums/ann.jspa?annID=125%29\"\u003ehttp://discussion.autodesk.com/forums/ann.jspa?annID=125)\u003c/a\u003e, but a survey of the posts in any of the programming groups shows that \u003ca href=\"/files/Newsgroup%20needs%20complete%20overhaul.htm\"\u003eit\u0026rsquo;s not working\u003c/a\u003e\u003cem\u003e.\u003cbr /\u003e\u003cbr /\u003e\u003c/em\u003e [Thread has been removed by Autodesk, so link was changed to point to archived thread.]\u003cbr /\u003e\u003cbr /\u003eThe \u003ca href=\"http://www.marketwatch.com/story/autodesk-to-miss-earnings-target-cut-750-jobs\"\u003erecently announced layoffs and related cost cutting measures at Autodesk\u003c/a\u003e have dimmed my hopes for a resolution. Therefore, I\u0026rsquo;ve decided to offer my services to fix the problem. Autodesk, I\u0026rsquo;m offering to donate my time to fix your discussion group software. Just give me access to a development and testing platform, and the right to modify or rewrite the code.\u003cbr /\u003e\u003cbr /\u003eReaders, can I get an \u0026ldquo;Amen\u0026rdquo;?\u003c/p\u003e","title":"Autodesk Discussion Group Facelift Offer"},{"content":"James Maeding of Hunsaker \u0026amp; Associates contacted me recently about an irritating problem that his users have with the AECOPEN command in Land Desktop. The AECOPEN command replaces the core AutoCAD OPEN command in AEC verticals. The problem they have is that AECOPEN displays an initial project dialog that requires users to press a [Browse] button to open the file browser dialog. Since they want to browse for a file every time they use the AECOPEN command, James wondered if I could create some code to automatically \u0026ldquo;press\u0026rdquo; the Browse button every time the AECOPEN command is issued.\nI whipped up a little utility for AutoCAD 2007-2009 based products to do what James wanted, and it is now available on my freebies page as AecAutoOpen.zip. When the ARX module is loaded, AECOPEN behaves as if the user had immediately pressed the [Browse] button on the project dialog. If the [Ctrl] key is pressed, AECOPEN reverts to its original behavior.\nWhy not just use the built in OPEN command instead? The AECOPEN command has some important side effects, according to James.\n","permalink":"https://www.manusoft.com/archive/blog/aecopen-utility/","summary":"\u003cp\u003eJames Maeding of Hunsaker \u0026amp; Associates contacted me recently about an irritating problem that his users have with the AECOPEN command in Land Desktop. The AECOPEN command replaces the core AutoCAD OPEN command in AEC verticals. The problem they have is that AECOPEN displays an initial project dialog that requires users to press a [Browse] button to open the file browser dialog. Since they want to browse for a file every time they use the AECOPEN command, James wondered if I could create some code to automatically \u0026ldquo;press\u0026rdquo; the Browse button every time the AECOPEN command is issued.\u003cbr /\u003e\u003cbr /\u003eI whipped up a little utility for AutoCAD 2007-2009 based products to do what James wanted, and it is now available on my \u003ca href=\"/resources/freebies/arx/\"\u003efreebies page\u003c/a\u003e as AecAutoOpen.zip. When the ARX module is loaded, AECOPEN behaves as if the user had immediately pressed the [Browse] button on the project dialog. If the [Ctrl] key is pressed, AECOPEN reverts to its original behavior.\u003cbr /\u003e\u003cbr /\u003eWhy not just use the built in OPEN command instead? The AECOPEN command has some important side effects, according to James.\u003c/p\u003e","title":"AECOPEN Utility"},{"content":"One of my many complaints about about the CUI system introduced in AutoCAD 2006 is that it's not very friendly to third party developers. In my opinion, it's not very friendly to end users either, but I digress...\nOne example of the unfriendly CUI is the case where a third party application installs a partial menu. In the pre-CUI days, adding a partial menu was an easy way to add an application specific menu to AutoCAD without making any changes to the end user's existing menu files. If the application was later uninstalled, the uninstall script could remove its menu and clean up the registry, leaving no trace behind. CUI breaks that scenario.\nWhen a partial menu is loaded into AutoCAD 2006 and later, the CUI system actually writes a reference to the new partial menu into the main .cui file. To make matters worse, there is no clean way to programmatically remove those references because there is no deterministic way to locate all the .cui files used by a specific instance of AutoCAD from an uninstall script running outside of AutoCAD.\nThis would not be the end of the world if AutoCAD simply ignored references to missing files, but it doesn't. When the CUI command starts, it detects the missing files and displays an obnoxious message box that must be dismissed before the command will continue.\nThen to top it off, AutoCAD displays a second message box that also must be dismissed.\nI think it should be obvious even to an untrained UI designer how ridiculous this is.\nIn AutoCAD 2006 and 2007, the solution is to dutifully dismiss both dialogs, then when the CUI dialog finally appears, click [Apply] to rewrite the .cui file without the missing partial menu references. In AutoCAD 2008 and 2009, you have to first expand the 'Partial CUI Files' node in the Customization tab, then right-click on the unresolved partial menu file and select 'Unload CUI File', then click [Apply].\n","permalink":"https://www.manusoft.com/archive/blog/missing-menu-madness/","summary":"\u003cp\u003eOne of my many complaints about about the CUI system introduced in AutoCAD 2006 is that it's not very friendly to third party developers. In my opinion, it's not very friendly to end users either, but I digress...\u003c/p\u003e\u003cbr /\u003e\u003cp\u003eOne example of the unfriendly CUI is the case where a third party application installs a partial menu. In the pre-CUI days, adding a partial menu was an easy way to add an application specific menu to AutoCAD without making any changes to the end user's existing menu files. If the application was later uninstalled, the uninstall script could remove its menu and clean up the registry, leaving no trace behind. CUI breaks that scenario.\u003c/p\u003e","title":"Missing Menu Madness"},{"content":"The increased sharing of electronic CAD data (ala BIM) holds a lot of promise, but it also exposes companies and individuals to additional liability and risk. This additional risk is coming into focus more and more as actual cases of costly legal battles confront engineers and architects.\nThe June 2008 AUGI wishlist results contain \u0026ldquo;Design File Locking\u0026rdquo; as the top wish by a substantial margin, and Shaan Hurley lists it as number 3 in the AU 2008 AutoCAD wish list (http://autodesk.blogs.com/between_the_lines/2008/12/au-2008-wednesday-autocad-wish-list.html). Clearly, interest in file and IP security has been growing steadily.\nAs demand for IP security grows, there are sure to be snake oil security vendors trying to cash in on it. I received a spam email a few days ago from SafeNet, Inc. promising \u0026ldquo;a cost-effective and easy to integrate solution that provides reliable and effective security through the use of digital signatures.\u0026rdquo; Whenever I see such statements with a long string of buzzwords, my snake oil alarm goes on alert. Digital signatures are for authentication and establishing trust \u0026ndash; they cannot and do not provide \u0026ldquo;reliable and effective security\u0026rdquo;, although I suppose they could be used by a system that does.\nIn the last year or two, a number of companies have claimed to market software that \u0026ldquo;secures\u0026rdquo; AutoCAD DWG files. When I see such a claim, it invariably refers to software that creates an anonymous unequally scaled MINSERT entity. These can be created or \u0026ldquo;exploded\u0026rdquo; with a few lines of AutoLISP code. Frequently these companies claim to \u0026ldquo;encrypt\u0026rdquo; the drawing, which may sound sexy, but is an outright lie. If this is a level of \u0026ldquo;security\u0026rdquo; that meets your needs, at least use one of the many free versions posted throughout the internet (DETER.VLX from DotSoft is one I know of).\nThere are solutions, but they always require changes in the workflow process that involve difficult tradeoffs and careful evaluation of what is technically feasible and practical versus the costs of implementing the changes. There is no such thing as installing a single piece of software to instantly solve the problem. If you are looking for ways to protect intellectual property in your drawing files, don\u0026rsquo;t be fooled by snake oil security vendors.\nDisclaimer: One of my hats is the president of CADLock, Inc. (http://www.cadlock.com/), makers of CADVault for AutoCAD.\n","permalink":"https://www.manusoft.com/archive/blog/design-file-locking-and-snake-oil/","summary":"\u003cp\u003eThe increased sharing of electronic CAD data (ala \u003ca href=\"http://en.wikipedia.org/wiki/Building_Information_Modeling\"\u003eBIM\u003c/a\u003e) holds a lot of promise, but it also exposes companies and individuals to additional liability and risk. This additional risk is coming into focus more and more as \u003ca href=\"/2007/01/autocad-drawing-files-possession-is-910.htm\"\u003eactual cases of costly legal battles\u003c/a\u003e confront engineers and architects.\u003cbr /\u003e\u003cbr /\u003eThe June 2008 \u003ca href=\"http://www.augi.com/autocad/results.asp?cycle=ACAD008\"\u003eAUGI wishlist results\u003c/a\u003e contain \u0026ldquo;Design File Locking\u0026rdquo; as the top wish by a substantial margin, and Shaan Hurley lists it as number 3 in the AU 2008 AutoCAD wish list (\u003ca href=\"http://autodesk.blogs.com/between_the_lines/2008/12/au-2008-wednesday-autocad-wish-list.html%29\"\u003ehttp://autodesk.blogs.com/between_the_lines/2008/12/au-2008-wednesday-autocad-wish-list.html)\u003c/a\u003e. Clearly, interest in file and IP security has been growing steadily.\u003cbr /\u003e\u003cbr /\u003eAs demand for IP security grows, there are sure to be snake oil security vendors trying to cash in on it. I received a spam email a few days ago from SafeNet, Inc. promising \u0026ldquo;a cost-effective and easy to integrate solution that provides reliable and effective security through the use of digital signatures.\u0026rdquo; Whenever I see such statements with a long string of buzzwords, my snake oil alarm goes on alert. Digital signatures are for authentication and establishing trust \u0026ndash; they cannot and do not provide \u0026ldquo;reliable and effective security\u0026rdquo;, although I suppose they could be used by a system that does.\u003cbr /\u003e\u003cbr /\u003eIn the last year or two, a number of companies have claimed to market software that \u0026ldquo;secures\u0026rdquo; AutoCAD DWG files. When I see such a claim, it invariably refers to software that creates an anonymous unequally scaled MINSERT entity. These can be created or \u0026ldquo;exploded\u0026rdquo; with a few lines of AutoLISP code. Frequently these companies claim to \u0026ldquo;encrypt\u0026rdquo; the drawing, which may sound sexy, but is an outright lie. If this is a level of \u0026ldquo;security\u0026rdquo; that meets your needs, at least use one of the many free versions posted throughout the internet (\u003ca href=\"http://www.dotsoft.com/freestuff.htm\"\u003eDETER.VLX from DotSoft\u003c/a\u003e is one I know of).\u003cbr /\u003e\u003cbr /\u003eThere are solutions, but they always require changes in the workflow process that involve difficult tradeoffs and careful evaluation of what is technically feasible and practical versus the costs of implementing the changes. There is no such thing as installing a single piece of software to instantly solve the problem. If you are looking for ways to protect intellectual property in your drawing files, don\u0026rsquo;t be fooled by snake oil security vendors.\u003cbr /\u003e\u003cbr /\u003eDisclaimer: One of my hats is the president of CADLock, Inc. (\u003ca href=\"https://web.archive.org/web/2010/http://www.cadlock.com/\"\u003e\u003ca href=\"http://www.cadlock.com/\"\u003ehttp://www.cadlock.com/\u003c/a\u003e\u003c/a\u003e), makers of \u003ca href=\"https://web.archive.org/web/2010/http://www.cadlock.com/products/CADVault/\"\u003eCADVault for AutoCAD\u003c/a\u003e.\u003c/p\u003e","title":"Design File Locking and Snake Oil Security"},{"content":"Did you ever wonder what press release writers do in their spare time? Given Autodesk's recent trademark litigation with SolidWorks (http://www.cadcourt.com/Docket/308cv04397AutodeskvSolidWorks.aspx) and related efforts (http://www.cadcourt.com/Docket/92047002AutodeskvODA.aspx) by Autodesk to trademark \"DWG\", and given the fact that US Patent and Trademark Office (USPTO) trademark examiners are known to use Wikipedia during their research (http://iplitigator.huschblackwell.com/2007/07/articles/trademark/trademark-trial-appeal-board-says-internet-is-here-to-stay/), it doesn't take an evil genius to realize that a little subversive editing here and there might be helpful to the corporate cause. So, I decided to use Wikiscanner (http://wikiscanner.virgil.gr/) to go spelunking through the labyrinth of Wikipedia editing history to see if I could unearth any nuggets.\nIt didn't take long to find some interesting edits. For example, in the edit history for \"SolidWorks\" you can see that someone from an Autodesk IP address (http://wikiscanner.virgil.gr/f.php?ip1=198.102.112.0-255\u0026ip2=12.160.193.224-239\u0026ip3=203.200.42.0-127\u0026ip4=132.188.0.0-255.255) changed \"and has since been copied by others like [[Autodesk Inventor]]\" to \"and is now part of the midrange CAD market along with [[Autodesk Inventor]]\". Eventually this changes to \"and is currently a leader in the 'midrange' CAD market\", and from that to \"It is currently one of the most popular products in the 3D mechanical CAD market\" with a citation to a SolidWorks web page (http://www.solidworks.com/sw/655_ENU_HTML.htm) as evidence of the claim.\nI expected to find plenty of quid pro quo, but I have to say, either SolidWorks' press release writers are a lot sneakier than Autodesk's, or they have a lot less free time. According to this list of edits from SolidWorks IP addresses (http://wikiscanner.virgil.gr/f.php?ip1=12.159.140.0-255\u0026ip2=206.34.34.0-255\u0026ip3=12.145.143.96-111\u0026ip4=193.130.25.240-255\u0026ip5=12.175.3.128-159), there haven't been any edits made to Autodesk entries since about March of 2007. In October of 2006 someone from SolidWorks changed a few things in the entry for \"Autodesk Inventor\", but then things appear to have cooled off considerably.\nSo what about \"DWG\"? The entry for \"AutoCAD DWG\" contains this edit from an Autodesk IP address made in January of 2007, but not much since. Two months later, someone from Autodesk changed \"for that reason they constituted a consortium ([[OpenDWG]]) to develop open tools to access DWG data\" to \"for that reason they constituted a consortium ([[OpenDWG]]) to reverse engineer Autodesk's technology and access DWG data\". Since then, things have been fairly quiet on the \"DWG\" front.\nMy conclusion is that blog posts like this one from Franco Folini at NOVEDGE Blog (http://blog.novedge.com/2007/08/cad-companies-p.html) may have resulted in more strict internal controls being instituted over the editing of Wikipedia content. I have no doubt that it still goes on, but covertly enough to provide plausible deniability.\n","permalink":"https://www.manusoft.com/archive/blog/propagandapedia/","summary":"\u003cp\u003eDid you ever wonder what press release writers do in their spare time? Given Autodesk's recent trademark litigation with SolidWorks (\u003ca href=\"https://web.archive.org/web/2010/http://www.cadcourt.com/Docket/308cv04397AutodeskvSolidWorks.aspx\"\u003ehttp://www.cadcourt.com/Docket/308cv04397AutodeskvSolidWorks.aspx\u003c/a\u003e) and related efforts (\u003ca href=\"https://web.archive.org/web/2010/http://www.cadcourt.com/Docket/92047002AutodeskvODA.aspx\"\u003ehttp://www.cadcourt.com/Docket/92047002AutodeskvODA.aspx\u003c/a\u003e) by \u003ca href=\"http://www.autodesk.com/\"\u003eAutodesk\u003c/a\u003e to trademark \"DWG\", and given the fact that \u003ca href=\"http://www.uspto.gov/\"\u003eUS Patent and Trademark Office\u003c/a\u003e (USPTO) trademark examiners are known to use Wikipedia during their research (http://iplitigator.huschblackwell.com/2007/07/articles/trademark/trademark-trial-appeal-board-says-internet-is-here-to-stay/), it doesn't take an evil genius to realize that a little subversive editing here and there might be helpful to the corporate cause. So, I decided to use Wikiscanner (http://wikiscanner.virgil.gr/) to go spelunking through the labyrinth of Wikipedia editing history to see if I could unearth any nuggets.\u003c/p\u003e","title":"Propagandapedia"},{"content":"Of course I\u0026rsquo;m talking about Autodesk\u0026rsquo;s newly reinvented nomenclature for bug fixes (http://usa.autodesk.com/adsk/servlet/ps/dl/index?siteID=123112\u0026id=2334435\u0026linkID=9240618). Once upon a time they were known as bug fixes, then service packs, and now \u0026ldquo;updates\u0026rdquo;. Is the Autodesk marketing department running amok? The subtle spin is certainly a sign of the times, but I wonder if the change in terminology comes about for another reason as well.\nAutodesk promises \u0026ldquo;features extensions (http://usa.autodesk.com/adsk/servlet/index?siteID=123112\u0026id=612485)\" to subscription customers. They have had difficulty delivering such extensions on a consistent basis. One of the reasons, I suspect, is that developers of extensions encounter the same brick walls that third party developers battle all the time: AutoCAD bugs, of course; but also incomplete APIs and feature limitations. It\u0026rsquo;s possible that updates not only fix bugs, but also fill gaps so that extension developers can get their extensions working.\nThen again, the change in terminology might be part of a new fad. My wife, who is an engineer working in the automotive industry, informs me that they no longer issue drawing revisions in her company. Instead, they now issue \u0026ldquo;updates\u0026rdquo;. I wonder how long it will be before auto mechanics stop repairing cars and start updating them instead.\n","permalink":"https://www.manusoft.com/archive/blog/update-vs-service-pack/","summary":"\u003cp\u003eOf course I\u0026rsquo;m talking about Autodesk\u0026rsquo;s newly reinvented nomenclature for bug fixes (\u003ca href=\"http://usa.autodesk.com/adsk/servlet/ps/dl/index?siteID=123112\u0026amp;id=2334435\u0026amp;linkID=9240618%29\"\u003ehttp://usa.autodesk.com/adsk/servlet/ps/dl/index?siteID=123112\u0026id=2334435\u0026linkID=9240618)\u003c/a\u003e. Once upon a time they were known as bug fixes, then service packs, and now \u0026ldquo;updates\u0026rdquo;. Is the Autodesk marketing department running amok? The subtle spin is certainly a sign of the times, but I wonder if the change in terminology comes about for another reason as well.\u003cbr /\u003eAutodesk promises \u0026ldquo;features extensions (\u003ca href=\"http://usa.autodesk.com/adsk/servlet/index?siteID=123112\u0026amp;id=612485%29%22\"\u003ehttp://usa.autodesk.com/adsk/servlet/index?siteID=123112\u0026id=612485)\"\u003c/a\u003e to subscription customers. They have had difficulty delivering such extensions on a consistent basis. One of the reasons, I suspect, is that developers of extensions encounter the same brick walls that third party developers battle all the time: AutoCAD bugs, of course; but also incomplete APIs and feature limitations. It\u0026rsquo;s possible that updates not only fix bugs, but also fill gaps so that extension developers can get their extensions working.\u003cbr /\u003eThen again, the change in terminology might be part of a new fad. My wife, who is an engineer working in the automotive industry, informs me that they no longer issue drawing revisions in her company. Instead, they now issue \u0026ldquo;updates\u0026rdquo;. I wonder how long it will be before auto mechanics stop repairing cars and start updating them instead.\u003c/p\u003e","title":"Update vs. Service Pack"},{"content":"If you\u0026rsquo;re an AutoLISP programmer, you\u0026rsquo;ve probably heard about OpenDCL. Maybe you\u0026rsquo;ve even checked it out, but it looked complicated and you weren\u0026rsquo;t sure whether it was worth the trouble to learn how to use it. Either way, do yourself a favor and spend 10 minutes to go through the following 10-step quick introduction to OpenDCL.\nDownload and install OpenDCL Studio. Select the latest version in your desired language (ENU in the filename means US English). The download is an .msi file that can be cleanly uninstalled afterward.Start AutoCAD (2004 or later). Use the APPLOAD command to load _MasterDemo.lsp from the OpenDCL Studio samples folder (it will be located in a language subfolder of the main OpenDCL Studio folder). When you close the APPLOAD dialog, the OpenDCL \u0026lsquo;MasterDemo\u0026rsquo; dockable form will appear.Click on the [ListView] button to run the ListView sample. The ListView sample is very simple and will demonstrate some basic principles of OpenDCL. Leave it running as you proceed through the following steps.Locate and open ListView.lsp in the OpenDCL Studio samples folder. ListView.lsp contains all the code for the ListView sample. Look for the c:ListViewDlg_Close_Clicked function defined near the end of that file. That function is called an \u0026ldquo;event handler\u0026rdquo;, and it is the lisp function that is executed when the [Close] button is pressed. The event handler for the [Close] button simply closes the dialog. The c:ListViewDlg_OnInitialize event handler function initializes the controls on the dialog before it is displayed.Locate and open ListView.odcl in the OpenDCL Studio samples folder. Files with an .odcl extension can be opened and edited in OpenDCL Studio. OpenDCL Studio is used to design the user interface elements in an OpenDCL project. In the project tree pane, open the \u0026lsquo;Modal Forms\u0026rsquo; folder, then double click on ListViewDlg. The ListView form will be displayed in design mode.Click on the [Close] button on the ListView form. In the font toolbar at the top of the editor, press the [B] button to make the font bold. Notice that the button\u0026rsquo;s caption becomes bold. In the \u0026lsquo;Properties\u0026rsquo; pane, double click on the \u0026lsquo;Height\u0026rsquo; property value and change it to 20. Press [Enter] to apply the new value. Use your mouse to drag the bottom of the button in design view to resize it dynamically.Leaving OpenDCL Studio open, switch back to AutoCAD. Resize the ListView dialog, and notice how the controls it contains are also resized. Now switch back to OpenDCL Studio, make sure the [Close] button is selected, then click in the right column of the \u0026lsquo;(Wizard)\u0026rsquo; property in the Properties pane (or right click on the button control and select \u0026lsquo;Properties\u0026rsquo; in the control\u0026rsquo;s context menu). In the Control Properties Wizard, the Geometry tab shows that the button\u0026rsquo;s \u0026ldquo;Left Side Alignment\u0026rdquo; has been set to \u0026ldquo;Offset From Center of Dialog\u0026rdquo; and it\u0026rsquo;s \u0026ldquo;Top Side Alignment\u0026rdquo; has been set to \u0026ldquo;Offset From Bottom Edge\u0026rdquo;. Once these properties are set, no additional code is needed for the control to react correctly when the dialog is resized.Exit AutoCAD, then restart. Enter the OPENDCL command. This command demand-loads the OpenDCL Runtime using AutoCAD demand loading mechanism. The OpenDCL Runtime must be loaded before the OpenDCL functions will work. The OpenDCL Studio installation includes OpenDCL Runtime, so it already exists on your computer.If you are developing an application for use by others, you\u0026rsquo;ll need to download and distribute the OpenDCL Runtime along with your application. This is best done by incorporating the OpenDCL Runtime merge module for your language directly into your own application\u0026rsquo;s installation script. Alternatively, you can distribute the standalone OpenDCL Runtime .msi file for your language, or publish the URL where end users can download the latest version.Switch back to OpenDCL Studio and double click on the [Close] button control. Intelligent help displays all the properties, methods, and events of the selected control, including their AutoLISP syntax. Click on a property, method, or event in the left pane to see detailed information for it.Once you complete these ten steps, you are only a few minutes away from creating a fully functional OpenDCL application. Give it a try!\n","permalink":"https://www.manusoft.com/archive/blog/opendcl-quick-intro/","summary":"\u003cp\u003eIf you\u0026rsquo;re an AutoLISP programmer, you\u0026rsquo;ve probably heard about \u003ca href=\"https://www.opendcl.com/\"\u003eOpenDCL\u003c/a\u003e. Maybe you\u0026rsquo;ve even checked it out, but it looked complicated and you weren\u0026rsquo;t sure whether it was worth the trouble to learn how to use it. Either way, do yourself a favor and spend 10 minutes to go through the following 10-step quick introduction to OpenDCL.\u003cbr /\u003e\u003col\u003e\u003cli\u003e\u003ca href=\"https://sourceforge.net/projects/opendcl/files/\"\u003eDownload\u003c/a\u003e and install OpenDCL Studio. Select the latest version in your desired language (ENU in the filename means US English). The download is an .msi file that can be cleanly uninstalled afterward.\u003c/li\u003e\u003cli\u003eStart AutoCAD (2004 or later). Use the APPLOAD command to load _MasterDemo.lsp from the OpenDCL Studio samples folder (it will be located in a language subfolder of the main OpenDCL Studio folder). When you close the APPLOAD dialog, the OpenDCL \u0026lsquo;MasterDemo\u0026rsquo; dockable form will appear.\u003c/li\u003e\u003cli\u003eClick on the [ListView] button to run the ListView sample. The ListView sample is very simple and will demonstrate some basic principles of OpenDCL. Leave it running as you proceed through the following steps.\u003c/li\u003e\u003cli\u003eLocate and open ListView.lsp in the OpenDCL Studio samples folder. ListView.lsp contains all the code for the ListView sample. Look for the c:ListViewDlg_Close_Clicked function defined near the end of that file. That function is called an \u0026ldquo;event handler\u0026rdquo;, and it is the lisp function that is executed when the [Close] button is pressed. The event handler for the [Close] button simply closes the dialog. The c:ListViewDlg_OnInitialize event handler function initializes the controls on the dialog before it is displayed.\u003c/li\u003e\u003cli\u003eLocate and open ListView.odcl in the OpenDCL Studio samples folder. Files with an .odcl extension can be opened and edited in OpenDCL Studio. OpenDCL Studio is used to design the user interface elements in an OpenDCL project. In the project tree pane, open the \u0026lsquo;Modal Forms\u0026rsquo; folder, then double click on ListViewDlg. The ListView form will be displayed in design mode.\u003c/li\u003e\u003cli\u003eClick on the [Close] button on the ListView form. In the font toolbar at the top of the editor, press the [B] button to make the font bold. Notice that the button\u0026rsquo;s caption becomes bold. In the \u0026lsquo;Properties\u0026rsquo; pane, double click on the \u0026lsquo;Height\u0026rsquo; property value and change it to 20. Press [Enter] to apply the new value. Use your mouse to drag the bottom of the button in design view to resize it dynamically.\u003c/li\u003e\u003cli\u003eLeaving OpenDCL Studio open, switch back to AutoCAD. Resize the ListView dialog, and notice how the controls it contains are also resized. Now switch back to OpenDCL Studio, make sure the [Close] button is selected, then click in the right column of the \u0026lsquo;(Wizard)\u0026rsquo; property in the Properties pane (or right click on the button control and select \u0026lsquo;Properties\u0026rsquo; in the control\u0026rsquo;s context menu). In the Control Properties Wizard, the Geometry tab shows that the button\u0026rsquo;s \u0026ldquo;Left Side Alignment\u0026rdquo; has been set to \u0026ldquo;Offset From Center of Dialog\u0026rdquo; and it\u0026rsquo;s \u0026ldquo;Top Side Alignment\u0026rdquo; has been set to \u0026ldquo;Offset From Bottom Edge\u0026rdquo;. Once these properties are set, no additional code is needed for the control to react correctly when the dialog is resized.\u003c/li\u003e\u003cli\u003eExit AutoCAD, then restart. Enter the OPENDCL command. This command demand-loads the OpenDCL Runtime using AutoCAD demand loading mechanism. The OpenDCL Runtime must be loaded before the OpenDCL functions will work. The OpenDCL Studio installation includes OpenDCL Runtime, so it already exists on your computer.\u003c/li\u003e\u003cli\u003eIf you are developing an application for use by others, you\u0026rsquo;ll need to download and distribute the \u003ca href=\"https://sourceforge.net/projects/opendcl/files/\"\u003eOpenDCL Runtime\u003c/a\u003e along with your application. This is best done by incorporating the OpenDCL Runtime merge module for your language directly into your own application\u0026rsquo;s installation script. Alternatively, you can distribute the standalone OpenDCL Runtime .msi file for your language, or publish the URL where end users can download the latest version.\u003c/li\u003e\u003cli\u003eSwitch back to OpenDCL Studio and double click on the [Close] button control. Intelligent help displays all the properties, methods, and events of the selected control, including their AutoLISP syntax. Click on a property, method, or event in the left pane to see detailed information for it.\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eOnce you complete these ten steps, you are only a few minutes away from creating a fully functional OpenDCL application. Give it a try!\u003c/p\u003e","title":"OpenDCL Quick Intro"},{"content":"InfoWorld columnist and legendary consumer advocate Ed Foster died over the weekend. Ed was a tireless crusader for consumer rights in the digital age, and he will certainly be missed. For many years Ed has authored GripeLine (http://weblog.infoworld.com/gripeline/), where he called companies and politicians to task for abusive anti-consumer practices.\nI\u0026rsquo;ve written before about how Ed exposed and publicised shamefully lopsided software license agreements (http://www.gripe2ed.com/scoop/section/Eula), including Autodesk\u0026rsquo;s and Adobe\u0026rsquo;s. Recently, Ed commented about the May, 2008 Vernor decision (http://weblog.infoworld.com/gripeline/archives/2008/05/you_can_book_a.html) (see my CAD/Court web site (http://www.cadcourt.com/) for more information about the Vernor case).\nIt will be no easy task to fill Ed\u0026rsquo;s shoes. We can be certain, though, that his work must go on.\n","permalink":"https://www.manusoft.com/archive/blog/ed-foster-loss-of-legend/","summary":"\u003cp\u003e\u003ca href=\"http://www.infoworld.com/\"\u003eInfoWorld\u003c/a\u003e columnist and legendary consumer advocate Ed Foster \u003ca href=\"http://www.eff.org/deeplinks/2008/07/memoriam-ed-foster-1949-2008\"\u003edied over the weekend\u003c/a\u003e. Ed was a tireless crusader for consumer rights in the digital age, and he will certainly be missed. For many years Ed has authored GripeLine (\u003ca href=\"http://weblog.infoworld.com/gripeline/%29\"\u003ehttp://weblog.infoworld.com/gripeline/)\u003c/a\u003e, where he called companies and politicians to task for abusive anti-consumer practices.\u003cbr /\u003e\u003cbr /\u003eI\u0026rsquo;ve written before about how Ed exposed and publicised shamefully lopsided software license agreements (\u003ca href=\"http://www.gripe2ed.com/scoop/section/Eula%29\"\u003ehttp://www.gripe2ed.com/scoop/section/Eula)\u003c/a\u003e, including \u003ca href=\"http://www.gripe2ed.com/scoop/story/2004/9/26/13427/0228\"\u003eAutodesk\u0026rsquo;s and Adobe\u0026rsquo;s\u003c/a\u003e. Recently, Ed commented about the May, 2008 Vernor decision (\u003ca href=\"http://weblog.infoworld.com/gripeline/archives/2008/05/you_can_book_a.html\"\u003ehttp://weblog.infoworld.com/gripeline/archives/2008/05/you_can_book_a.html\u003c/a\u003e) (see my CAD/Court web site (\u003ca href=\"https://web.archive.org/web/2010/http://www.cadcourt.com/\"\u003e\u003ca href=\"http://www.cadcourt.com/\"\u003ehttp://www.cadcourt.com/\u003c/a\u003e\u003c/a\u003e) for more information about the Vernor case).\u003cbr /\u003e\u003cbr /\u003eIt will be no easy task to fill Ed\u0026rsquo;s shoes. We can be certain, though, that his work must go on.\u003c/p\u003e","title":"Ed Foster: Loss Of A Legend"},{"content":"This is a story about my 11 year old son, Nick, and a father\u0026rsquo;s pride.\nI coached Nick\u0026rsquo;s Little League baseball team this year, and now that the regular season is over I\u0026rsquo;m coaching an 11-12 year old All Star team. Being the youngest on the team, Nick struggles with his self confidence even though he\u0026rsquo;s an excellent baseball player. He\u0026rsquo;s not the tallest player, but he\u0026rsquo;s faster and more athletic than many of his older teammates. Even so, he doesn\u0026rsquo;t want to take any risks or make any mistakes, and his insecurities often prevent him from performing at his best.\nA few weeks ago in the league tournament Nick hit a ball against the fence, just short of going over. That was the closest he came all season to hitting one out, and was perhaps the first time he started to believe that it was possible. A few nights after our team was eliminated from the championship tournament, a kid hit a walk off grand slam with 1 out in the bottom of the 6th, down 9 - 6. Nick and I were there to watch it. I heard that the same kid hit one more out of the park later in the tournament. Those were very likely the only two over-the-fence home runs all year in our local league.\nSometime during tournament time, Nick\u0026rsquo;s baseball bat disappeared from the trunk of my car. I suspect he didn\u0026rsquo;t close the trunk all the way one night, and someone stole it during the night. The following week, in exchange for Nick agreeing to mow the lawn this summer, I bought him a shiny new baseball bat, a new bat bag, and new cleats to replace the old ones with holes in their toes. Nick was itching to play again so he could try out his new toys.\nFast forward to the all star team\u0026rsquo;s second scrimmage earlier this week. In his first at bat, Nick got walked (then stole second, third, and home over the course of the next few pitches). In his second at bat, Nick hit a hard line drive into the gap, and got to second with a stand-up double. It was just a scrimmage, there was no pressure, and Nick was feeling good about himself, perhaps even daring to feel confident in himself.\nHis third time at the plate, Nick crushed the first pitch well over the center field fence amid groans from the opposing team. There was a mixture of surprise and elation among the other players on our team. Some had never seen a player at this level hit a ball over the fence, and I even had to remind them that they were allowed to enter the field to greet Nick as he crossed home plate.\nThe excitement was soon forgotten as the game moved along, until Nick came up to bat again and everyone jokingly told him to hit another home run. And then, with two strikes, two out, and two on, he did it again!\nIt\u0026rsquo;s amazing how much difference a shiny new bat can make.\n","permalink":"https://www.manusoft.com/archive/blog/magic-baseball-bat/","summary":"\u003cp\u003eThis is a story about my 11 year old son, Nick, and a father\u0026rsquo;s pride.\u003cbr /\u003e\u003cbr /\u003eI coached Nick\u0026rsquo;s Little League baseball team this year, and now that the regular season is over I\u0026rsquo;m coaching an 11-12 year old All Star team. Being the youngest on the team, Nick struggles with his self confidence even though he\u0026rsquo;s an excellent baseball player. He\u0026rsquo;s not the tallest player, but he\u0026rsquo;s faster and more athletic than many of his older teammates. Even so, he doesn\u0026rsquo;t want to take any risks or make any mistakes, and his insecurities often prevent him from performing at his best.\u003cbr /\u003e\u003cbr /\u003eA few weeks ago in the league tournament Nick hit a ball against the fence, just short of going over. That was the closest he came all season to hitting one out, and was perhaps the first time he started to believe that it was possible. A few nights after our team was eliminated from the championship tournament, a kid hit a walk off grand slam with 1 out in the bottom of the 6th, down 9 - 6. Nick and I were there to watch it. I heard that the same kid hit one more out of the park later in the tournament. Those were very likely the only two over-the-fence home runs all year in our local league.\u003cbr /\u003e\u003cbr /\u003eSometime during tournament time, Nick\u0026rsquo;s baseball bat disappeared from the trunk of my car. I suspect he didn\u0026rsquo;t close the trunk all the way one night, and someone stole it during the night. The following week, in exchange for Nick agreeing to mow the lawn this summer, I bought him a shiny new baseball bat, a new bat bag, and new cleats to replace the old ones with holes in their toes. Nick was itching to play again so he could try out his new toys.\u003cbr /\u003e\u003cbr /\u003eFast forward to the all star team\u0026rsquo;s second scrimmage earlier this week. In his first at bat, Nick got walked (then stole second, third, and home over the course of the next few pitches). In his second at bat, Nick hit a hard line drive into the gap, and got to second with a stand-up double. It was just a scrimmage, there was no pressure, and Nick was feeling good about himself, perhaps even daring to feel confident in himself.\u003cbr /\u003e\u003cbr /\u003eHis third time at the plate, Nick crushed the first pitch well over the center field fence amid groans from the opposing team. There was a mixture of surprise and elation among the other players on our team. Some had never seen a player at this level hit a ball over the fence, and I even had to remind them that they were allowed to enter the field to greet Nick as he crossed home plate.\u003cbr /\u003e\u003cbr /\u003eThe excitement was soon forgotten as the game moved along, until Nick came up to bat again and everyone jokingly told him to hit another home run. And then, with two strikes, two out, and two on, he did it again!\u003cbr /\u003e\u003cbr /\u003eIt\u0026rsquo;s amazing how much difference a shiny new bat can make.\u003c/p\u003e","title":"The Magic Baseball Bat"},{"content":"From the NewsFeed on my CAD/Court web site:\n\u0026ldquo;The court today issued an order (http://www.cadcourt.com/Docket/tabid/55/Default.aspx?Event=90#Doc31) denying Autodesk\u0026rsquo;s motion to dismiss the charges in the Vernor lawsuit. Normally such a denial is perfunctory and mundane, but in this ruling the court performs a breathtaking analysis of whether the AutoCAD software was a sale or a license, and reaches conclusions that, if not reversed, are certain to change the face of software sales in the USA. Technically, the scope of this order is limited to simply refusing to grant Autodesk\u0026rsquo;s motion to dismiss the lawsuit, but the implications of the judge\u0026rsquo;s analysis are almost stunning in their rejection of Autodesk\u0026rsquo;s legal claims. I\u0026rsquo;m sure you will be hearing much more about this order in the coming weeks, as the entire software industry will certainly take notice of this case.\u0026quot;\n","permalink":"https://www.manusoft.com/archive/blog/vernor-decision-making-splash/","summary":"\u003cp\u003eFrom the \u003ca href=\"https://web.archive.org/web/2010/http://www.cadcourt.com/NewsFeed/tabid/53/EntryID/52/Default.aspx\"\u003eNewsFeed\u003c/a\u003e on my CAD/Court web site:\u003cbr /\u003e\u003cblockquote\u003e\u0026ldquo;The court today issued an order (\u003ca href=\"https://web.archive.org/web/2010/http://www.cadcourt.com/Docket/tabid/55/Default.aspx?Event=90#Doc31\"\u003e\u003ca href=\"http://www.cadcourt.com/Docket/tabid/55/Default.aspx?Event=90#Doc31\"\u003ehttp://www.cadcourt.com/Docket/tabid/55/Default.aspx?Event=90#Doc31\u003c/a\u003e\u003c/a\u003e) denying Autodesk\u0026rsquo;s motion to dismiss the charges in the Vernor lawsuit. Normally such a denial is perfunctory and mundane, but in this ruling the court performs a breathtaking analysis of whether the AutoCAD software was a sale or a license, and reaches conclusions that, if not reversed, are certain to change the face of software sales in the USA. Technically, the scope of this order is limited to simply refusing to grant Autodesk\u0026rsquo;s motion to dismiss the lawsuit, but the implications of the judge\u0026rsquo;s analysis are almost stunning in their rejection of Autodesk\u0026rsquo;s legal claims. I\u0026rsquo;m sure you will be hearing much more about this order in the coming weeks, as the entire software industry will certainly take notice of this case.\u0026quot;\u003cbr /\u003e\u003c/blockquote\u003e\u003c/p\u003e","title":"Vernor Decision Making a Splash"},{"content":"I have presented a class entitled High Octane ObjectARX at Autodesk University the past two years. In 2006 the focus was on project organization, and last year I focused more on techniques for supporting multiple versions of AutoCAD with a single Visual Studio solution, touching briefly on testing and profiling. For 2008 I plan to focus on debugging.\nTo get you in the mood, I decided to blog about a capability of Visual Studio that often goes unnoticed and unused: breaking on an exception. This works just like breaking on a code breakpoint, except the debugger breaks execution *before* the exception handler gets control, thus allowing you to get a clearer picture of what was happening immediately before the exception occurred.\nIn an ObjectARX project, all kinds of exceptions can occur. Sometimes they are perfectly normal exceptions caused by and handled by AutoCAD. Many times, especially during development, your code triggers an exception that causes AutoCAD to crash, and it's not obvious what caused things to go haywire.\nWhen unexpected things happen while running your code under the debugger, the first order of business is to inspect the debug output window to determine what happened. The debug output window (Debug-\u003eWindows-\u003eOutput) displays a message whenever an exception occurs. Sometimes a series of exceptions occur, usually all caused by the same root problem. Breaking when the first exception occurs will likely yield the most useful information about the cause.\nOnce you examine the debug output window to determine the type of exception that occurred, open the Exceptions dialog (Debug-\u003eExceptions) and tell Visual Studio to break when the exception is thrown:\nVisual Studio contains a prepopulated list of common exceptions to choose from, or you can add new ones if you need to break on an exception that is not already listed. Many times, breaking when the exception is thrown allows you to inspect the stack trace to determine which one of your functions is to blame -- and in the vast majority of cases, it will be your code that is at fault!\n","permalink":"https://www.manusoft.com/archive/blog/debugging-objectarx-break-on-exception/","summary":"\u003cp\u003eI have presented a class entitled High Octane ObjectARX at \u003ca href=\"https://www.autodesk.com/autodesk-university/\"\u003eAutodesk University\u003c/a\u003e the past two years. In 2006 the focus was on project organization, and last year I focused more on techniques for supporting multiple versions of AutoCAD with a single Visual Studio solution, touching briefly on testing and profiling. For 2008 I plan to focus on debugging.\u003c/p\u003e","title":"Debugging ObjectARX: Break on Exception"},{"content":"Steve Johnson asks \u0026ldquo;where have all the developers gone?\u0026rdquo;, and Deelip Menezes wonders in a comment whether Autodesk\u0026rsquo;s annual release cycle for AutoCAD is part of the problem. I\u0026rsquo;ve always said that an annual release cycle is untenable. The annual release cycle is motivated by Autodesk\u0026rsquo;s desire to make the subscription program look attractive. Has it worked?\nBased on what I\u0026rsquo;ve read and heard through the grapevine, it has definitely worked. More customers than ever are choosing the subscription model. In many cases, the annual subscription business model actually works well for software like AutoCAD, providing benefits for both Autodesk and their customers. But subscription is not for everyone.\nIn typical greedy big corporate fashion, Autodesk have overplayed their hand. Instead of concentrating on those customers for whom subscription makes sense and leaving the others to choose a different model, the \u0026ldquo;more is always better\u0026rdquo; marketing machine kicked in. Ergo, the annual release cycle carrot and the AutoCAD retirement program stick were invented. [Oh sorry, it\u0026rsquo;s called the Autodesk Loyalty Program (http://saarc.autodesk.com/adsk/servlet/index?siteID=5967151\u0026amp;id=6053617).]\nI am already seeing the beginnings of a movement of discontent among Autodesk customers, and I expect the annual release cycle to collapse under its own weight within another year or two. In the meantime, tremendous damage is being done. Customers, third party developers, authors, and consultants all suffer under the strain of the annual release cycle, but that\u0026rsquo;s only the tip of the iceberg.\nTo pull off annual releases, Autodesk have to be working on multiple versions of AutoCAD in parallel. While AutoCAD 2006 was being beta tested, AutoCAD 2007 and 2008 were already under development, and AutoCAD 2009 was already in the planning stages. When CUI was first introduced to the public, the new ribbon UI was likely already in the planning stages. Is it any wonder that the angry feedback about CUI was ignored?\nWhen you have an annual release cycle with 3 or 4 future releases on parallel tracks, you can\u0026rsquo;t just stop and fix a fundamental design flaw. All you can do is increase your public relations budget. The harm done to third party developers is substantial, but the inability to shift gears and correct fundamental design flaws is the real travesty of the annual release cycle.\n","permalink":"https://www.manusoft.com/archive/blog/hotel-autodesk/","summary":"\u003cp\u003eSteve Johnson asks \u0026ldquo;\u003ca href=\"https://www.cadnauseam.com/2008/04/29/where-have-all-the-developers-gone/\"\u003ewhere have all the developers gone?\u003c/a\u003e\u0026rdquo;, and Deelip Menezes wonders \u003ca href=\"https://www.cadnauseam.com/2008/04/29/where-have-all-the-developers-gone/#comment-270\"\u003ein a comment\u003c/a\u003e whether Autodesk\u0026rsquo;s annual release cycle for AutoCAD is part of the problem. I\u0026rsquo;ve always said that an annual release cycle is untenable. The annual release cycle is motivated by Autodesk\u0026rsquo;s desire to make the subscription program look attractive. Has it worked?\u003cbr /\u003e\u003cbr /\u003eBased on what I\u0026rsquo;ve read and heard through the grapevine, it has definitely worked. More customers than ever are choosing the subscription model. In many cases, the annual subscription business model actually works well for software like AutoCAD, providing benefits for both Autodesk and their customers. But subscription is not for everyone.\u003cbr /\u003e\u003cbr /\u003eIn typical greedy big corporate fashion, Autodesk have overplayed their hand. Instead of concentrating on those customers for whom subscription makes sense and leaving the others to choose a different model, the \u0026ldquo;more is always better\u0026rdquo; marketing machine kicked in. Ergo, the annual release cycle carrot and the AutoCAD retirement program stick were invented. [Oh sorry, it\u0026rsquo;s called the Autodesk Loyalty Program (http://saarc.autodesk.com/adsk/servlet/index?siteID=5967151\u0026amp;id=6053617).]\u003cbr /\u003e\u003cbr /\u003eI am already seeing the beginnings of a movement of discontent among Autodesk customers, and I expect the annual release cycle to collapse under its own weight within another year or two. In the meantime, tremendous damage is being done. Customers, third party developers, authors, and consultants all suffer under the strain of the annual release cycle, but that\u0026rsquo;s only the tip of the iceberg.\u003cbr /\u003e\u003cbr /\u003eTo pull off annual releases, Autodesk have to be working on multiple versions of AutoCAD in parallel. While AutoCAD 2006 was being beta tested, AutoCAD 2007 and 2008 were already under development, and AutoCAD 2009 was already in the planning stages. When CUI was first introduced to the public, the new ribbon UI was likely already in the planning stages. Is it any wonder that the angry feedback about CUI was ignored?\u003cbr /\u003e\u003cbr /\u003eWhen you have an annual release cycle with 3 or 4 future releases on parallel tracks, you can\u0026rsquo;t just stop and fix a fundamental design flaw. All you can do is increase your public relations budget. The harm done to third party developers is substantial, but the inability to shift gears and correct fundamental design flaws is the real travesty of the annual release cycle.\u003c/p\u003e","title":"Hotel Autodesk"},{"content":"QuikPik and Periscope are now available for AutoCAD 2009, and SuperPurge will be available later this week. QuikPik users, note that the quick buttons feature does not work with buttons on the new ribbon UI.\n","permalink":"https://www.manusoft.com/archive/blog/manusoft-software-updated-for-autocad/","summary":"\u003cp\u003eQuikPik and Periscope are now available for AutoCAD 2009, and SuperPurge will be available later this week. QuikPik users, note that the quick buttons feature does not work with buttons on the new ribbon UI.\u003c/p\u003e","title":"ManuSoft Software Updated for AutoCAD 2009"},{"content":"Like that day almost 50 years ago, could today be the day that ObjectARX has died?\nThere have been a flurry of posts (http://discussion.autodesk.com/thread.jspa?threadID=652855) in the ObjectARX discussion group about problems downloading the new ObjectARX 2009 SDK. At first I dismissed the problems as new release hiccups, and expected things to get resolved in short order. Seeing that there were no new complaints this morning, I headed over to https://www.autodesk.com/objectarx to download the new ObjectARX 2009 SDK. Instead of the new ObjectARX 2009 SDK, I received the following:\nMaybe it's a technical problem with the web site, and the download just didn't start, I thought. I checked my email, and found this from Autodesk:\nThank you for your interest in development tools for Autodesk's products. If you are not already an Autodesk developer partner, be sure to visit the Autodesk Developer Network website at http://www.autodesk.com/joinadn to learn more. As a member, you can access timely technical information, training and support to help you stay competitive.\nIf you are looking for self-help resources for your Autodesk software-based development efforts, visit our Support page at http://www.autodesk.com/support or access the ObjectARX newsgroup at news://discussion.autodesk.com/autodesk.autocad.objectarx.\nRegards,\nThe Application Development Team\nPutting two and two together, it looks to me like the ObjectARX SDK is no longer freely available. It's not altogether surprising that Autodesk would try something like this in an (almost certainly misguided) attempt to make it more difficult for organizations like the Open Design Alliance to reverse engineer the API (http://www.opendesign.com/node/127).\nIf this is true, I foresee a major sea change with a ripple effect that will change the face of third party add-on development. It's a risky legal maneuver, first of all. Any time a large corporation like Autodesk picks and chooses who it will do business with, it risks running afoul of the Sherman Antitrust Act. Secondly, the practical effect of limiting access to Autodesk's SDK will be to give Open Design Alliance more influence vis à vis its DRX SDK.\nFor now, there is not too much of an immediate impact. AutoCAD 2009 is binary compatible with AutoCAD 2007 and AutoCAD 2008, so software developed with those SDKs will work in AutoCAD 2009 (of course without utilizing the new features). Therefore, development of AutoCAD 2009 software can continue with only a minor hit. The problem will not be felt until the next release of AutoCAD, which presumably will no longer be binary compatible.\nWhere is all this headed? I'm still holding out hope that it's all a big misunderstanding; otherwise we're headed for some upheaval in the AutoCAD add-on industry.\n[Update: as of early Friday morning the ObjectARX 2009 SDK download is now working!]\n","permalink":"https://www.manusoft.com/archive/blog/day-objectarx-sdk-died/","summary":"\u003cp\u003eLike \u003ca href=\"http://en.wikipedia.org/wiki/The_Day_the_Music_Died\"\u003ethat day almost 50 years ago\u003c/a\u003e, could today be the day that ObjectARX has died?\u003c/p\u003e\u003cbr /\u003e\u003cp\u003eThere have been a flurry of posts (http://discussion.autodesk.com/thread.jspa?threadID=652855) in the ObjectARX discussion group about problems downloading the new ObjectARX 2009 SDK. At first I dismissed the problems as new release hiccups, and expected things to get resolved in short order. Seeing that there were no new complaints this morning, I headed over to \u003ca href=\"https://www.autodesk.com/objectarx\"\u003ehttps://www.autodesk.com/objectarx\u003c/a\u003e to download the new ObjectARX 2009 SDK. Instead of the new ObjectARX 2009 SDK, I received the following:\u003cbr /\u003e\u003ca href=\"/files/SDK_Request.png\"\u003e\u003cimg style=\"CURSOR: hand\" alt=\"\" src=\"/files/SDK_Request.png\" border=\"0\" /\u003e\u003c/a\u003e\u003c/p\u003e","title":"The Day the ObjectARX SDK Died"},{"content":"This Autodsys press release (http://www.tenlinks.com/news/PR/autodsys/022208_accelicad2008_v3.htm) made me chuckle. Their IntelliCAD based AcceliCAD now supports custom entities, announces the press release. \u0026ldquo;Instead of creating custom objects as is necessary in some other CAD packages the application developer can instead use the primitives already built into the program such as LINEs, ARCs, CIRCLEs, and POLYLINEs.\u0026rdquo; Hmmm, that sounds an awful lot like blocks in AutoCAD \u0026ndash; a feature AcceliCAD has surely supported since its inception.\nThe press release continues, \u0026ldquo;That means there is no need to define grip points or editing operations for the entities because those functions are already built into AcceliCAD.\u0026quot;\nObjectARX programmers have been able to create custom objects in AutoCAD for years. One of the most common reasons for creating a custom object is to \u0026ldquo;define grip points or editing operations\u0026rdquo;. Otherwise, blocks work just fine in most cases.\n","permalink":"https://www.manusoft.com/archive/blog/creative-marketing/","summary":"\u003cp\u003eThis Autodsys press release (\u003ca href=\"http://www.tenlinks.com/news/PR/autodsys/022208_accelicad2008_v3.htm\"\u003ehttp://www.tenlinks.com/news/PR/autodsys/022208_accelicad2008_v3.htm\u003c/a\u003e) made me chuckle. Their IntelliCAD based AcceliCAD now supports custom entities, announces the press release. \u0026ldquo;Instead of creating custom objects as is necessary in some other CAD packages the application developer can instead use the primitives already built into the program such as LINEs, ARCs, CIRCLEs, and POLYLINEs.\u0026rdquo; Hmmm, that sounds an awful lot like blocks in AutoCAD \u0026ndash; a feature AcceliCAD has surely supported since its inception.\u003cbr /\u003e\u003cbr /\u003eThe press release continues, \u0026ldquo;That means there is no need to define grip points or editing operations for the entities because those functions are already built into AcceliCAD.\u0026quot;\u003cbr /\u003e\u003cbr /\u003eObjectARX programmers have been able to create custom objects in AutoCAD for years. One of the most common reasons for creating a custom object is to \u0026ldquo;define grip points or editing operations\u0026rdquo;. Otherwise, blocks work just fine in most cases.\u003c/p\u003e","title":"Creative Marketing"},{"content":"One of the defining characteristics that distinguish humans from computers is our ability to act irrationally. Our biological computer system is capable of interjecting an otherwise logical thought process with random perturbations that often result in completely unpredictable outcomes. Looked at in the abstract, this is the essence of how we escape the shackles of destiny and turn an otherwise mundane march of time into a serendipity of human experience.\nIn practical terms, it\u0026rsquo;s our ability to make mistakes that gives us supremacy over mere electronic circuits. If we were simply pre-programmed machines, we would be no better, and perhaps no different, than a computer. By making mistakes, we learn. By taking risks, we discover. By challenging and disregarding what is already known, we learn what is not.\nAnd that, my friends, is why maps are evil (http://www.news.com/Is-GPS-liability-next/2010-1033_3-6226346.html).\n","permalink":"https://www.manusoft.com/archive/blog/maps-are-evil/","summary":"\u003cp\u003eOne of the defining characteristics that distinguish humans from computers is our ability to act irrationally. Our biological computer system is capable of interjecting an otherwise logical thought process with random perturbations that often result in completely unpredictable outcomes. Looked at in the abstract, this is the essence of how we escape the shackles of destiny and turn an otherwise mundane march of time into a serendipity of human experience.\u003cbr /\u003e\u003cbr /\u003eIn practical terms, it\u0026rsquo;s our ability to make mistakes that gives us supremacy over mere electronic circuits. If we were simply pre-programmed machines, we would be no better, and perhaps no different, than a computer. By making mistakes, we learn. By taking risks, we discover. By challenging and disregarding what is already known, we learn what is not.\u003cbr /\u003e\u003cbr /\u003eAnd that, my friends, is why maps are evil (\u003ca href=\"http://www.news.com/Is-GPS-liability-next/2010-1033_3-6226346.html%29\"\u003ehttp://www.news.com/Is-GPS-liability-next/2010-1033_3-6226346.html)\u003c/a\u003e.\u003c/p\u003e","title":"Maps Are Evil"},{"content":"I hit the jackpot at Radio Shack, so I\u0026rsquo;m back early from my last minute Christmas shopping today. That means I have time to tell you about the new Periscope 4.0 just released this week, in case you\u0026rsquo;re looking for a last minute stocking stuffer for that CAD geek friend of yours that already has everything.\nPeriscope shows information about the entity beneath your AutoCAD cursor in a tooltip window (\u0026ldquo;scope window\u0026rdquo;) as you hover over an entity in AutoCAD. Periscope 3 added a COM interface that made it very easy to program a custom \u0026ldquo;extender\u0026rdquo; that added to or modified the displayed entity information. Periscope 4.0 goes even farther \u0026ndash; it uses an excellent open source class by Eugene Pustovoyt to render simple HTML in the scope window. Custom extenders for Periscope 4.0 can now use selected HTML tags to format and beautify their output.\nIf you\u0026rsquo;re upgrading from a previous version of Periscope and you already use a custom extender, note that you will need to make a few minor modifications to your extender code. In addition to referencing the new type library (now version 4.0), you\u0026rsquo;ll need to add a new \u0026ldquo;GSMarker\u0026rdquo; argument to your extender\u0026rsquo;s AddScopeText event handler.\nI\u0026rsquo;ve added a new .NET sample extender to show how easy it is to write a Periscope extender in .NET via COM interop. AutoCAD Map 3D 2008 and Topobase 2008 users, check out the commented code in the .NET sample extender to see how you can display feature data in the scope window!\nHappy Holidays!\n","permalink":"https://www.manusoft.com/archive/blog/periscope-speaks-html/","summary":"\u003cp\u003eI hit the jackpot at Radio Shack, so I\u0026rsquo;m back early from my last minute Christmas shopping today. That means I have time to tell you about the new \u003ca href=\"/resources/apps/periscope/\"\u003ePeriscope 4.0\u003c/a\u003e just released this week, in case you\u0026rsquo;re looking for a last minute stocking stuffer for that CAD geek friend of yours that already has everything.\u003cbr /\u003e\u003cbr /\u003ePeriscope shows information about the entity beneath your AutoCAD cursor in a tooltip window (\u0026ldquo;scope window\u0026rdquo;) as you hover over an entity in AutoCAD. Periscope 3 added a COM interface that made it very easy to program a custom \u0026ldquo;extender\u0026rdquo; that added to or modified the displayed entity information. Periscope 4.0 goes even farther \u0026ndash; it uses an excellent \u003ca href=\"http://www.codeproject.com/KB/miscctrl/pptooltip.aspx\"\u003eopen source class\u003c/a\u003e by Eugene Pustovoyt to render simple HTML in the scope window. Custom extenders for Periscope 4.0 can now use selected HTML tags to format and beautify their output.\u003cbr /\u003e\u003cbr /\u003eIf you\u0026rsquo;re upgrading from a previous version of Periscope and you already use a custom extender, note that you will need to make a few minor modifications to your extender code. In addition to referencing the new type library (now version 4.0), you\u0026rsquo;ll need to add a new \u0026ldquo;GSMarker\u0026rdquo; argument to your extender\u0026rsquo;s AddScopeText event handler.\u003cbr /\u003e\u003cbr /\u003eI\u0026rsquo;ve added a new .NET sample extender to show how easy it is to write a Periscope extender in .NET via COM interop. AutoCAD Map 3D 2008 and Topobase 2008 users, check out the commented code in the .NET sample extender to see how you can display feature data in the scope window!\u003cbr /\u003e\u003cbr /\u003eHappy Holidays!\u003c/p\u003e","title":"Periscope Speaks HTML"},{"content":"I\u0026rsquo;ve created a compendium of two previous series of blog posts on my web site for posterity (and easier reading):\nI\u0026rsquo;ll take web sites for $200, Alex\nDigital Signatures in the CAD Industry\n","permalink":"https://www.manusoft.com/archive/blog/blog-posts-immortalized/","summary":"\u003cp\u003eI\u0026rsquo;ve created a compendium of two previous series of blog posts on my web site for posterity (and easier reading):\u003cbr /\u003e\u003ca href=\"/archive/digest/cmswebsite/\"\u003eI\u0026rsquo;ll take web sites for $200, Alex\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"/archive/digest/digitalsig/\"\u003eDigital Signatures in the CAD Industry\u003c/a\u003e\u003c/p\u003e","title":"Blog Posts Immortalized"},{"content":"We use digital signatures every time we visit a secure web site. Visiting a secure web site involves an authentication process that includes verifying the identity of the server by ensuring that its digital certificate, or \u0026ldquo;server certificate\u0026rdquo;, is signed by a trusted certificate authority. This verification process might involve verifying an entire chain of certificates from the actual server certificate up through one or more intermediate certificate authorities and ending with a trusted root certificate authority. This all takes place quickly and automatically before the web page is displayed in your web browser because the web browser includes built in logic to do this work without any user interaction. More importantly, the web browser warns us when the server certificate is expired or invalid.\nThe biggest obstacle when using digital certificates in a CAD environment today is not creating them, but easily and automatically verifying them at the receiving end. Even in a completely digital distribution system where everybody works from the CAD model, the various software tools we use to view and work with the model do not handle digital signature verification automatically in a standardized way. As long as downstream consumers of CAD data cannot easily and automatically ensure the trustworthiness of digital data, they will continue to rely on handwritten signatures on paper.\nA second obstacle to the use of digital signatures is the difficulty in accepting that digitally signed data is only trustworthy while it remains in digital format, and therefore the digital file is the \u0026ldquo;record\u0026rdquo; document. There is substantial social inertia that must be overcome before a digital document can gain the same amount of trust as a paper document. Engineers and architects must deal with the specter of previously hidden meta data in their CAD models becoming part of their signed document, thereby exposing them to new liabilities that don\u0026rsquo;t exist with paper drawings. Construction supervisors must learn to refer to the CAD model instead of relying on hardcopy blueprints when resolving disputes or establishing responsibility for errors. Here I think it should be noted that the use of a digitally signed model does not preclude the creation of hardcopy blueprints. Those can be created and \u0026ldquo;wet stamped\u0026rdquo; separately at the same time the CAD model is signed digitally; or they can be created in the field for reference without any signature at all.\nAutoCAD has supported digital signatures for several years, but using the built in functionality is limited to only individual DWG files, lacks support for co-signing (more than one person signing), and forces the signed document to remain in the proprietary DWG format or lose its signature. These problems can be worked around by using third party tools, but doing so requires recipients to use the same tools.\nOver the past few years, many government plan review bodies have amended laws and administrative rules to accommodate digital signatures as part of the plan review process. Without standardization, however, organizations still struggle to effect the necessary changes in their workflow. A lack of uniformity in terminology from one set of regulations to another adds to the confusion. If you are involved in amending or creating rules or regulations that enable the use of digital signatures, you should use generic and well defined terms of art in the regulations, but supplement these with practical guidelines that mention specific technologies, software tools, and file formats that will meet the legal requirements and that you are capable of working with.\nIf you are an architect, engineer, or CAD manager working to implement digital signatures into your firm\u0026rsquo;s workflow, there are some concrete steps you can take to make the task easier. Start by segregating your distribution network into \u0026ldquo;digital-only\u0026rdquo; and \u0026ldquo;hardcopy\u0026rdquo; classes of downstream users. Begin the transition with the digital-only part of the network (perhaps only the plan reviewing authority, for example). Next, decide which file format to use for your digital \u0026ldquo;documents\u0026rdquo;. Rather than signing CAD files, many companies start by signing 2D output files such as PDF, DWFx, or XPS. These files are essentially digital versions of the hardcopy documents, so they are more familiar to a wider audience and avoid some of the liability issues of exposing formerly hidden metadata that lives within the CAD model files.\nYou\u0026rsquo;ll need to obtain a digital ID and establish internal policies for storing and accessing the digital ID so that only the owner of the digital ID ever has access to the private key. Windows includes a built in certificate manager that you can use to view and manage your digital IDs. To start the certificate manager, run the certmgr.msc management console by entering its name in the Start -\u0026gt; Run command window. Your digital certificate will be installed in your personal certificates folder along with a link to the private key stored in the Windows secure key repository. Make a backup of the digital ID by exporting it to a password protected PFX file. Once a backup is made, the private key should be marked as not exportable to further secure it.\nIf you want to create digitally signed AutoCAD DWG files, you can use the digital signature feature of AutoCAD to sign a drawing file either while saving it or after it is saved. You should also consider subscribing to a commercial time service (see What time is it?) to ensure that your signatures are accompanied by a reliable time stamp in case your digital ID becomes compromised at some point in the future. Third party tools like CADVault for AutoCAD even make it possible for different people to sign different parts of the CAD model, but such advanced functionality is not needed in most cases.\nIf you use different CAD software that does not support digital signatures natively, or if you choose to sign only the secondary files produced by exporting your CAD model to a different format, then you will need to use either tools specific to that format or third party tools that work with files of any format. Adobe Acrobat (http://www.acrobat.com/) (PDF) and Microsoft\u0026rsquo;s free XPS Viewer (http://www.microsoft.com/whdc/xps/viewxps.mspx) both provide integrated digital signature tools that use the same digital IDs that you would use in AutoCAD, Internet Explorer, or Outlook/Windows Mail, and both applications are easy for recipients to obtain and use.\nAnother popular tool for managing digital IDs and signing files is an open source tool called GnuPG. GnuPG utilizes encryption and key storage standards called OpenPGP (http://www.openpgp.org/about_openpgp/). OpenPGP is not compatible with the X.509 standard used by Windows and many other encryption tools, however it is an attractive alternative when cost or closed source tools are a prohibitive barrier. There are many other digital signature resources available on the internet for those wanting more information, or needing specialized tools.\nUnfortunately, no matter what software tools or file formats you use, today\u0026rsquo;s CAD software and document viewers still do not provide the user experience that web browsers do when it comes to digital signatures. These problems can be overcome by end users, but ultimately they need to be addressed by the makers of the software tools we use. Software for handling digital data will need better user interfaces that allow users to easily specify which digital signatures should be trusted for which purposes, and provide requisite warnings when a document should not be trusted. I am confident that these improvements will come in the future, especially as more companies begin to use digital signatures in their workflow and demand for better digital signature support rises.\nIf you already use digital signatures with your CAD related documents, I would like to hear about it. Please leave a comment about your experiences, whether good or bad!\n","permalink":"https://www.manusoft.com/archive/blog/digital-signatures-practical-guidelines/","summary":"\u003cp\u003eWe use digital signatures every time we visit a secure web site. Visiting a secure web site involves an authentication process that includes verifying the identity of the server by ensuring that its digital certificate, or \u0026ldquo;server certificate\u0026rdquo;, is signed by a trusted certificate authority. This verification process might involve verifying an entire chain of certificates from the actual server certificate up through one or more intermediate certificate authorities and ending with a trusted root certificate authority. This all takes place quickly and automatically before the web page is displayed in your web browser because the web browser includes built in logic to do this work without any user interaction. More importantly, the web browser warns us when the server certificate is expired or invalid.\u003cbr /\u003e\u003cbr /\u003eThe biggest obstacle when using digital certificates in a CAD environment today is not creating them, but easily and automatically verifying them at the receiving end. Even in a completely digital distribution system where everybody works from the CAD model, the various software tools we use to view and work with the model do not handle digital signature verification automatically in a standardized way. As long as downstream consumers of CAD data cannot easily and automatically ensure the trustworthiness of digital data, they will continue to rely on handwritten signatures on paper.\u003cbr /\u003e\u003cbr /\u003eA second obstacle to the use of digital signatures is the difficulty in accepting that digitally signed data is only trustworthy while it remains in digital format, and therefore the digital file is the \u0026ldquo;record\u0026rdquo; document. There is substantial social inertia that must be overcome before a digital document can gain the same amount of trust as a paper document. Engineers and architects must deal with the specter of previously hidden meta data in their CAD models becoming part of their signed document, thereby exposing them to new liabilities that don\u0026rsquo;t exist with paper drawings. Construction supervisors must learn to refer to the CAD model instead of relying on hardcopy blueprints when resolving disputes or establishing responsibility for errors. Here I think it should be noted that the use of a digitally signed model does not preclude the creation of hardcopy blueprints. Those can be created and \u0026ldquo;wet stamped\u0026rdquo; separately at the same time the CAD model is signed digitally; or they can be created in the field for reference without any signature at all.\u003cbr /\u003e\u003cbr /\u003eAutoCAD has supported digital signatures for several years, but using the built in functionality is limited to only individual DWG files, lacks support for co-signing (more than one person signing), and forces the signed document to remain in the proprietary DWG format or lose its signature. These problems can be worked around by using third party tools, but doing so requires recipients to use the same tools.\u003cbr /\u003e\u003cbr /\u003eOver the past few years, many government plan review bodies have amended laws and administrative rules to accommodate digital signatures as part of the plan review process. Without standardization, however, organizations still struggle to effect the necessary changes in their workflow. A lack of uniformity in terminology from one set of regulations to another adds to the confusion. If you are involved in amending or creating rules or regulations that enable the use of digital signatures, you should use generic and well defined terms of art in the regulations, but supplement these with practical guidelines that mention specific technologies, software tools, and file formats that will meet the legal requirements and that you are capable of working with.\u003cbr /\u003e\u003cbr /\u003eIf you are an architect, engineer, or CAD manager working to implement digital signatures into your firm\u0026rsquo;s workflow, there are some concrete steps you can take to make the task easier. Start by segregating your distribution network into \u0026ldquo;digital-only\u0026rdquo; and \u0026ldquo;hardcopy\u0026rdquo; classes of downstream users. Begin the transition with the digital-only part of the network (perhaps only the plan reviewing authority, for example). Next, decide which file format to use for your digital \u0026ldquo;documents\u0026rdquo;. Rather than signing CAD files, many companies start by signing 2D output files such as PDF, DWFx, or XPS. These files are essentially digital versions of the hardcopy documents, so they are more familiar to a wider audience and avoid some of the liability issues of exposing formerly hidden metadata that lives within the CAD model files.\u003cbr /\u003e\u003cbr /\u003eYou\u0026rsquo;ll need to obtain a digital ID and establish internal policies for storing and accessing the digital ID so that only the owner of the digital ID ever has access to the private key. Windows includes a built in certificate manager that you can use to view and manage your digital IDs. To start the certificate manager, run the certmgr.msc management console by entering its name in the Start -\u0026gt; Run command window. Your digital certificate will be installed in your personal certificates folder along with a link to the private key stored in the Windows secure key repository. Make a backup of the digital ID by exporting it to a password protected PFX file. Once a backup is made, the private key should be marked as not exportable to further secure it.\u003cbr /\u003e\u003cbr /\u003eIf you want to create digitally signed AutoCAD DWG files, you can use the digital signature feature of AutoCAD to sign a drawing file either while saving it or after it is saved. You should also consider subscribing to a commercial time service (see \u003ca href=\"/archive/blog/what-time-is-it/\"\u003eWhat time is it?\u003c/a\u003e) to ensure that your signatures are accompanied by a reliable time stamp in case your digital ID becomes compromised at some point in the future. Third party tools like \u003ca href=\"https://web.archive.org/web/2010/http://www.cadlock.com/products/CADVault/\"\u003eCADVault for AutoCAD\u003c/a\u003e even make it possible for different people to sign different parts of the CAD model, but such advanced functionality is not needed in most cases.\u003cbr /\u003e\u003cbr /\u003eIf you use different CAD software that does not support digital signatures natively, or if you choose to sign only the secondary files produced by exporting your CAD model to a different format, then you will need to use either tools specific to that format or third party tools that work with files of any format. Adobe Acrobat (\u003ca href=\"http://www.acrobat.com/\"\u003ehttp://www.acrobat.com/\u003c/a\u003e) (PDF) and Microsoft\u0026rsquo;s free XPS Viewer (\u003ca href=\"http://www.microsoft.com/whdc/xps/viewxps.mspx\"\u003ehttp://www.microsoft.com/whdc/xps/viewxps.mspx\u003c/a\u003e) both provide integrated digital signature tools that use the same digital IDs that you would use in AutoCAD, Internet Explorer, or Outlook/Windows Mail, and both applications are easy for recipients to obtain and use.\u003cbr /\u003e\u003cbr /\u003eAnother popular tool for managing digital IDs and signing files is an open source tool called \u003ca href=\"http://www.gnupg.org/\"\u003eGnuPG\u003c/a\u003e. GnuPG utilizes encryption and key storage standards called OpenPGP (\u003ca href=\"http://www.openpgp.org/about_openpgp/%29\"\u003ehttp://www.openpgp.org/about_openpgp/)\u003c/a\u003e. OpenPGP is not compatible with the X.509 standard used by Windows and many other encryption tools, however it is an attractive alternative when cost or closed source tools are a prohibitive barrier. There are many other digital signature resources available on the internet for those wanting more information, or needing specialized tools.\u003cbr /\u003e\u003cbr /\u003eUnfortunately, no matter what software tools or file formats you use, today\u0026rsquo;s CAD software and document viewers still do not provide the user experience that web browsers do when it comes to digital signatures. These problems can be overcome by end users, but ultimately they need to be addressed by the makers of the software tools we use. Software for handling digital data will need better user interfaces that allow users to easily specify which digital signatures should be trusted for which purposes, and provide requisite warnings when a document should not be trusted. I am confident that these improvements will come in the future, especially as more companies begin to use digital signatures in their workflow and demand for better digital signature support rises.\u003cbr /\u003e\u003cbr /\u003eIf you already use digital signatures with your CAD related documents, I would like to hear about it. Please \u003ca href=\"/about/\"\u003eleave a comment\u003c/a\u003e about your experiences, whether good or bad!\u003c/p\u003e","title":"Digital Signatures: Practical Guidelines"},{"content":"The basic requirements of a digital signature are that it must uniquely identify the signatory, it must be independently verifiable, and it must be invalidated if the signed data has changed. To understand how these objectives are achieved, let\u0026rsquo;s start with the foundation of modern digital signature technology: public key encryption and the public key infrastructure, or PKI.\nIn public key encryption, a \u0026ldquo;key pair\u0026rdquo; consists of two parts: a public key and a private key. In simplistic terms, the public key is mathematically derived from the randomly generated private key using an algorithm known as a \u0026ldquo;one way function\u0026rdquo;. A one way function makes it easy to calculate a public key if the private key is known, but extremely difficult to deduce the private key if the public key is known. The end result is a secret private key and an openly shared public key that are mathematically related in such a way that the public key can be used to decrypt data that was encrypted with the private key, and the private key can be used to decrypt data that was encrypted with the public key.\nThis interesting property of such a key pair gives rise to a number of useful capabilities. In the case of digital signatures, the act of signing data is essentially nothing more complicated than encrypting the data with a private key. If the data can be decrypted successfully with the signer\u0026rsquo;s public key, then only the signer\u0026rsquo;s private key could have been used to do the encrypting. In practice, this process is simplified so that the signer encrypts only a secure hash, or checksum, of the data to be signed. The recipient then calculates the hash from the raw data and compares the result with the \u0026ldquo;signed\u0026rdquo; hash after it is decrypted. If the values match, the digital signature and data are validated.\nFor this process to work properly, there need to be standard ways to package information about the algorithms used, and to provide important information about the keys themselves. This need is fulfilled by digital certificates. A digital certificate is a file or block of memory containing a public key along with ancillary data about the key and its owner. The certificate is itself digitally signed by the entity, usually a mutually trusted third party, that issued the certificate. This enables users to verify that the public key is valid and trustworthy.\nA digital ID is the private key component of a key pair. Normally the private key is not stored together with the public key, but instead is stored in a separate physical location for security, usually requiring a password to access it. A key manager maintains links between the digital certificate and its associated private key. In many cases, it is convenient to use the term \u0026ldquo;digital ID\u0026rdquo; to mean both the public and private keys, even though they are physically separated.\nIt is almost always a good idea to time stamp digital signatures. Time stamping involves sending the digital signature to a time stamp authority, who then creates and returns a digitally signed time stamp that is uniquely and securely associated with the original digital signature. The time stamp can then be verified by third parties in the future by using exactly the same technique used to verify a digital signature.\nI think these important terms deserve a review. A \u0026ldquo;digital certificate\u0026rdquo; is a public key, which is itself digitally signed by a mutually trusted third party. Your digital certificate represents your public digital identity, and it should be made freely available to anyone who wants or needs it. A \u0026ldquo;digital ID\u0026rdquo; is a digital certificate and the private key associated with the digital certificate. It isn\u0026rsquo;t difficult to create your own self-signed digital ID, but a digital ID is only as good as the issuing authority that signs it. When you purchase a digital ID from a third party like VeriSign or Thawte, their reputation makes your digital ID more trustworthy.\n","permalink":"https://www.manusoft.com/archive/blog/digital-signatures-under-hood/","summary":"\u003cp\u003eThe basic requirements of a digital signature are that it must uniquely identify the signatory, it must be independently verifiable, and it must be invalidated if the signed data has changed. To understand how these objectives are achieved, let\u0026rsquo;s start with the foundation of modern digital signature technology: public key encryption and the \u003ca href=\"http://en.wikipedia.org/wiki/Public_key_infrastructure\"\u003epublic key infrastructure\u003c/a\u003e, or PKI.\u003cbr /\u003e\u003cbr /\u003eIn public key encryption, a \u0026ldquo;key pair\u0026rdquo; consists of two parts: a public key and a private key. In simplistic terms, the public key is mathematically derived from the randomly generated private key using an algorithm known as a \u0026ldquo;one way function\u0026rdquo;. A one way function makes it easy to calculate a public key if the private key is known, but extremely difficult to deduce the private key if the public key is known. The end result is a secret private key and an openly shared public key that are mathematically related in such a way that the public key can be used to decrypt data that was encrypted with the private key, and the private key can be used to decrypt data that was encrypted with the public key.\u003cbr /\u003e\u003cbr /\u003eThis interesting property of such a key pair gives rise to a number of useful capabilities. In the case of digital signatures, the act of signing data is essentially nothing more complicated than encrypting the data with a private key. If the data can be decrypted successfully with the signer\u0026rsquo;s public key, then only the signer\u0026rsquo;s private key could have been used to do the encrypting. In practice, this process is simplified so that the signer encrypts only a secure hash, or checksum, of the data to be signed. The recipient then calculates the hash from the raw data and compares the result with the \u0026ldquo;signed\u0026rdquo; hash after it is decrypted. If the values match, the digital signature and data are validated.\u003cbr /\u003e\u003cbr /\u003eFor this process to work properly, there need to be standard ways to package information about the algorithms used, and to provide important information about the keys themselves. This need is fulfilled by digital certificates. A digital certificate is a file or block of memory containing a public key along with ancillary data about the key and its owner. The certificate is itself digitally signed by the entity, usually a mutually trusted third party, that issued the certificate. This enables users to verify that the public key is valid and trustworthy.\u003cbr /\u003e\u003cbr /\u003eA digital ID is the private key component of a key pair. Normally the private key is not stored together with the public key, but instead is stored in a separate physical location for security, usually requiring a password to access it. A key manager maintains links between the digital certificate and its associated private key. In many cases, it is convenient to use the term \u0026ldquo;digital ID\u0026rdquo; to mean both the public and private keys, even though they are physically separated.\u003cbr /\u003e\u003cbr /\u003eIt is almost always a good idea to time stamp digital signatures. Time stamping involves sending the digital signature to a time stamp authority, who then creates and returns a digitally signed time stamp that is uniquely and securely associated with the original digital signature. The time stamp can then be verified by third parties in the future by using exactly the same technique used to verify a digital signature.\u003cbr /\u003e\u003cbr /\u003eI think these important terms deserve a review. A \u0026ldquo;digital certificate\u0026rdquo; is a public key, which is itself digitally signed by a mutually trusted third party. Your digital certificate represents your public digital identity, and it should be made freely available to anyone who wants or needs it. A \u0026ldquo;digital ID\u0026rdquo; is a digital certificate \u003cstrong\u003eand\u003c/strong\u003e the private key associated with the digital certificate. It isn\u0026rsquo;t difficult to create your own self-signed digital ID, but a digital ID is only as good as the issuing authority that signs it. When you purchase a digital ID from a third party like \u003ca href=\"http://www.verisign.com/\"\u003eVeriSign\u003c/a\u003e or \u003ca href=\"http://www.thawte.com/\"\u003eThawte\u003c/a\u003e, their reputation makes your digital ID more trustworthy.\u003c/p\u003e","title":"Digital Signatures: Under the Hood"},{"content":"There is nothing magical about digital signatures. They are simply an electronic mark used to signify a promise and to cement faith in the document or transaction to which that promise is attached. Some day digital signatures will be as commonplace among CAD professionals as the human readable \u0026ldquo;wet stamp\u0026rdquo; is today. However it must also be said that, just as CAD did not make architects more creative, digital signature technology will not make engineers more trustworthy.\nThe technology to use digital signatures has been around for well over 20 years, and a wide variety of software tools exist today that make digital signatures easy to use on almost any platform. So why is the use of digital signatures not more widespread? Primarily because the utopian dream of a paperless world has yet to materialize.\nSo long as hardcopy on paper is regarded as the authentic \u0026ldquo;record\u0026rdquo; version of a document, digital signatures are virtually useless. Even if new buildings are designed completely in CAD, an architect\u0026rsquo;s digital signature simply won\u0026rsquo;t mean anything if downstream consumers of the building design require a paper blueprint. The true benefits of a paperless world simply can\u0026rsquo;t be realized until every link in the chain has joined the digital club. So long as even a single node on the distribution tree requires a human readable method of verifying authenticity, the architect is forced to use a handwritten wet signature on paper blueprints from the very start.\nHandwritten signatures can be scanned into an electronic format, but then they lose their putative value because a digital facsimile is so easily reproduced. Therefore only original and unique handwritten wet signatures are trustworthy in a human readable form. Digital signatures do not translate to paper because they are not human readable. Therefore digital signatures only have value for a document in electronic form. This maxim is fundamental to a proper understanding of the emerging digital signature technology: digital data can only be securely signed by computers; and human readable documents can only be securely signed by humans.\nI see many people in the CAD industry looking for a hybrid solution to this paper vs. digital dilemma by using a \u0026ldquo;digitized signature\u0026rdquo; (i.e. handwritten on paper, then scanned into electronic format) so that printed output contains this digitized signature. This cannot even remotely be considered a digital signature! There is simply no such thing as a secure printed digitized signature. Yes, you can digitally sign a document that has an embedded digitized signature, but once it is printed, that digitized signature is not worth the paper it\u0026rsquo;s printed on. Not only could that signature be stolen from the document and used maliciously, there is no way to tell from the signature alone whether or not it has already been stolen and used maliciously.\nThe only hybrid approach that is practical and legally sound is to use digital and wet signatures in parallel. Using an architect as an example, this would mean creating and disseminating two sets of signed documents: the CAD model of a building (perhaps converted into a common 2D format like PDF, DWFx, or XPS) with the architect\u0026rsquo;s digital signature and paper blueprints with the architect\u0026rsquo;s individually handwritten wet signature.\nA number of companies claim to sell some sort of hybrid solution involving the creation of a secure digitized signature. This is simply capitalism \u0026ndash; selling something useless just because there is a market for it. A digitized signature is only secure if it is never used. I\u0026rsquo;ve heard the rationalization that the digitized signature printed on paper meets a psychological need for people accustomed to seeing one, even if it has no legal value. In my opinion, such pandering borders on deception and serves only to further alienate digital signature technology from those who would benefit from it. This sort of abuse is typified by an emailed PDF file consisting of a scanned document with a handwritten signature. In such cases, checking the sender\u0026rsquo;s email address likely becomes the most reliable way to verify the document\u0026rsquo;s trustworthiness. Spam filters bear witness to the fact that the sender\u0026rsquo;s email address is the most important \u0026ndash; and often only \u0026ndash; criteria we use in determining the level of trust to place in emailed documents. This is an important point to keep in mind.\nThe act of applying a digital signature requires the use of a secure private encryption key, but the digital signature alone does not provide security in any way. Digitally signing a document does not prevent it from being modified or stolen. In that respect it is no different than a handwritten wet signature. However, unlike a wet signature that cannot be easily duplicated, a digital signature does not prevent a signed document from being copied. This does not make digital signatures inferior. On the contrary, making copies is necessary and commonplace in the digital world, so the fact that exact copies of digitally signed documents are still trustworthy is a huge benefit over handwritten signatures.\nThere are other notable differences between a digital signature and a handwritten signature. Digital signatures can be time-stamped, thus providing reliable evidence that a document was signed on or before a certain time. A disadvantage of digital signatures is that they are only as reliable as the digital ID used to create them. To combat this problem, a public clearinghouse of compromised digital IDs must be maintained, and auditing systems must be in place to immediately detect and report suspicious activity. Time stamped digital signatures created before a digital ID is compromised can be easily and certainly distinguished from compromised signatures if properly designed and competently managed infrastructure is in place. This is necessary to ensure that previously existing digital signatures survive a compromising event.\nIn conclusion, adequate technical solutions and time tested safeguards already exist for successfully using digital signatures in a professional environment, but digital consumers still need to learn how to work within the limitations of the technology. Building an acceptable comfort level with a technology that must by its nature completely replace something as significant and culturally ingrained as the handwritten signature will not be easy or quick, but it is inevitable.\n","permalink":"https://www.manusoft.com/archive/blog/digital-signatures-philosophically/","summary":"\u003cp\u003eThere is nothing magical about \u003ca href=\"http://en.wikipedia.org/wiki/Digital_signature\"\u003edigital signatures\u003c/a\u003e. They are simply an electronic mark used to signify a promise and to cement faith in the document or transaction to which that promise is attached. Some day digital signatures will be as commonplace among CAD professionals as the human readable \u0026ldquo;wet stamp\u0026rdquo; is today. However it must also be said that, just as CAD did not make architects more creative, digital signature technology will not make engineers more trustworthy.\u003cbr /\u003e\u003cbr /\u003eThe technology to use digital signatures has been around for well over 20 years, and a wide variety of software tools exist today that make digital signatures easy to use on almost any platform. So why is the use of digital signatures not more widespread? Primarily because the utopian dream of a paperless world has yet to materialize.\u003cbr /\u003e\u003cbr /\u003eSo long as hardcopy on paper is regarded as the authentic \u0026ldquo;record\u0026rdquo; version of a document, digital signatures are virtually useless. Even if new buildings are designed completely in CAD, an architect\u0026rsquo;s digital signature simply won\u0026rsquo;t mean anything if downstream consumers of the building design require a paper blueprint. The true benefits of a paperless world simply can\u0026rsquo;t be realized until \u003cstrong\u003eevery\u003c/strong\u003e link in the chain has joined the digital club. So long as even a single node on the distribution tree requires a human readable method of verifying authenticity, the architect is forced to use a handwritten wet signature on paper blueprints from the very start.\u003cbr /\u003e\u003cbr /\u003eHandwritten signatures can be scanned into an electronic format, but then they lose their putative value because a digital facsimile is so easily reproduced. Therefore only original and unique handwritten wet signatures are trustworthy in a human readable form. Digital signatures do not translate to paper because they are not human readable. Therefore digital signatures only have value for a document in electronic form. This maxim is fundamental to a proper understanding of the emerging digital signature technology: digital data can \u003cstrong\u003eonly\u003c/strong\u003e be securely signed by computers; and human readable documents can \u003cstrong\u003eonly\u003c/strong\u003e be securely signed by humans.\u003cbr /\u003e\u003cbr /\u003eI see many people in the CAD industry looking for a hybrid solution to this paper vs. digital dilemma by using a \u0026ldquo;digitized signature\u0026rdquo; (i.e. handwritten on paper, then scanned into electronic format) so that printed output contains this digitized signature. This cannot even remotely be considered a digital signature! There is simply no such thing as a secure printed digitized signature. Yes, you can digitally sign a document that has an embedded digitized signature, but once it is printed, that digitized signature is not worth the paper it\u0026rsquo;s printed on. Not only could that signature be stolen from the document and used maliciously, there is \u003cstrong\u003eno way to tell\u003c/strong\u003e from the signature alone whether or not it has \u003cstrong\u003ealready\u003c/strong\u003e been stolen and used maliciously.\u003cbr /\u003e\u003cbr /\u003eThe only hybrid approach that is practical and legally sound is to use digital and wet signatures in parallel. Using an architect as an example, this would mean creating and disseminating two sets of signed documents: the CAD model of a building (perhaps converted into a common 2D format like PDF, DWFx, or XPS) with the architect\u0026rsquo;s digital signature \u003cstrong\u003eand\u003c/strong\u003e paper blueprints with the architect\u0026rsquo;s individually handwritten wet signature.\u003cbr /\u003e\u003cbr /\u003eA number of companies claim to sell some sort of hybrid solution involving the creation of a secure digitized signature. This is simply capitalism \u0026ndash; selling something useless just because there is a market for it. A digitized signature is only secure if it is never used. I\u0026rsquo;ve heard the rationalization that the digitized signature printed on paper meets a psychological need for people accustomed to seeing one, even if it has no legal value. In my opinion, such pandering borders on deception and serves only to further alienate digital signature technology from those who would benefit from it. This sort of abuse is typified by an emailed PDF file consisting of a scanned document with a handwritten signature. In such cases, checking the sender\u0026rsquo;s email address likely becomes the most reliable way to verify the document\u0026rsquo;s trustworthiness. Spam filters bear witness to the fact that the sender\u0026rsquo;s email address is the most important \u0026ndash; and often only \u0026ndash; criteria we use in determining the level of trust to place in emailed documents. This is an important point to keep in mind.\u003cbr /\u003e\u003cbr /\u003eThe act of applying a digital signature requires the use of a secure private encryption key, but \u003cstrong\u003ethe digital signature alone does not provide security in any way\u003c/strong\u003e. Digitally signing a document does not prevent it from being modified or stolen. In that respect it is no different than a handwritten wet signature. However, unlike a wet signature that cannot be easily duplicated, a digital signature does not prevent a signed document from being copied. This does not make digital signatures inferior. On the contrary, making copies is necessary and commonplace in the digital world, so the fact that exact copies of digitally signed documents are still trustworthy is a huge benefit over handwritten signatures.\u003cbr /\u003e\u003cbr /\u003eThere are other notable differences between a digital signature and a handwritten signature. Digital signatures can be time-stamped, thus providing reliable evidence that a document was signed on or before a certain time. A disadvantage of digital signatures is that they are only as reliable as the digital ID used to create them. To combat this problem, a public clearinghouse of compromised digital IDs must be maintained, and auditing systems must be in place to immediately detect and report suspicious activity. Time stamped digital signatures created before a digital ID is compromised can be easily and certainly distinguished from compromised signatures if properly designed and competently managed infrastructure is in place. This is necessary to ensure that previously existing digital signatures survive a compromising event.\u003cbr /\u003e\u003cbr /\u003eIn conclusion, adequate technical solutions and time tested safeguards already exist for successfully using digital signatures in a professional environment, but digital consumers still need to learn how to work within the limitations of the technology. Building an acceptable comfort level with a technology that must by its nature completely replace something as significant and culturally ingrained as the handwritten signature will not be easy or quick, but it is inevitable.\u003c/p\u003e","title":"Digital Signatures: Philosophically Speaking"},{"content":"For many, the word \"encryption\" has a mysterious quality that invokes images of math virtuosos in secret bunkers working feverishly during wartime to break the enemy's coded communications. My first exposure to encryption came in 1996 when I began working with Paul Kohut on the first version of CADLock software for locking AutoCAD drawing files. After overcoming my initial struggle to understand the terminology and get a handle on the mathematics behind encryption, I realized that it wasn't nearly as mysterious and complicated as it first appeared.\nI knew it would take a long time for encryption terminology to become standardized and commonly understood by laypersons. From the first days of CADLock, we recognized that the key to success for our software was going to be our ability to educate consumers about our technology, it's possibilities and its limitations, its strengths and its weaknesses, what it could do and what it could not do. I felt that we needed to be realistic and patient while we waited for the market to catch up with our technology at its own pace. In the meantime, we needed to resist any temptation to needlessly bandy about sexy buzzwords like \"encryption\" lest we delay our mission by further muddying the waters in an already crowded ocean of technical jargon.\nThis recognition of the need for patience and perseverance has led me on a personal crusade to prevent encryption terminology from being perverted or hijacked by overeager marketing departments and uninformed experts. I've also tried to nudge the learning process along by adding my two cents whenever the opportunity arises. With this last goal in mind, I have prepared the following three part essay about digital signatures, tailored for the CAD industry. This is not written to academic standards, nor do I claim to be the final authority on the subject. Let me be clear about my agenda: I hope that furthering the common understanding of encryption related technology such as digital signatures will indirectly help sell more CADLock software!\n","permalink":"https://www.manusoft.com/archive/blog/digital-signatures-prelude/","summary":"\u003cp\u003eFor many, the word \"encryption\" has a mysterious quality that invokes images of math virtuosos in secret bunkers working feverishly during wartime to break the enemy's coded communications. My first exposure to encryption came in 1996 when I began working with Paul Kohut on the first version of CADLock software for locking AutoCAD drawing files. After overcoming my initial struggle to understand the terminology and get a handle on the mathematics behind encryption, I realized that it wasn't nearly as mysterious and complicated as it first appeared.\u003c/p\u003e","title":"Digital Signatures: Prelude"},{"content":"Introduction\nThe information on this page was compiled from a series of posts on my blog in December, 2007 about the use of digital signatures in the CAD industry. Note that some information and links that were current as of the original writing may now be out of date.\nNOTICE: The contents of this page are Copyright 2007 ManuSoft, All Rights Reserved. The contents of this page may not be reproduced under any circumstances without permission from the author! Permission to print one hardcopy of this page for individual use is hereby granted.\nDISCLAIMER: ManuSoft is in no way responsible for either the accuracy or completeness of information on this page! Neither ManuSoft, Owen Wengerd, nor any credited or uncredited contributors may be held liable for any damages which may result either directly or indirectly from the use of information on this page! In other words, use at your own risk!\nOwen Wengerd, President ManuSoft Prelude For many, the word \"encryption\" has a mysterious quality that invokes images of math virtuosos in secret bunkers working feverishly during wartime to break the enemy's coded communications. My first exposure to encryption came in 1996 when I began working with Paul Kohut on the first version of CADLock software for locking AutoCAD drawing files. After overcoming my initial struggle to understand the terminology and get a handle on the mathematics behind encryption, I realized that it wasn't nearly as mysterious and complicated as it first appeared.\nI knew it would take a long time for encryption terminology to become standardized and commonly understood by laypersons. From the first days of CADLock, we recognized that the key to success for our software was going to be our ability to educate consumers about our technology, it's possibilities and its limitations, its strengths and its weaknesses, what it could do and what it could not do. I felt that we needed to be realistic and patient while we waited for the market to catch up with our technology at its own pace. In the meantime, we needed to resist any temptation to needlessly bandy about sexy buzzwords like \"encryption\" lest we delay our mission by further muddying the waters in an already crowded ocean of technical jargon.\nThis recognition of the need for patience and perseverance has led me on a personal crusade to prevent encryption terminology from being perverted or hijacked by overeager marketing departments and uninformed experts. I've also tried to nudge the learning process along by adding my two cents whenever the opportunity arises. With this last goal in mind, I have prepared the following three part essay about digital signatures, tailored for the CAD industry. This is not written to academic standards, nor do I claim to be the final authority on the subject. Let me be clear about my agenda: I hope that furthering the common understanding of encryption related technology such as digital signatures will indirectly help sell more CADLock software!\nPhilosophically Speaking There is nothing magical about digital signatures. They are simply an electronic mark used to signify a promise and to cement faith in the document or transaction to which that promise is attached. Some day digital signatures will be as commonplace among CAD professionals as the human readable \"wet stamp\" is today. However it must also be said that, just as CAD did not make architects more creative, digital signature technology will not make engineers more trustworthy.\nThe technology to use digital signatures has been around for well over 20 years, and a wide variety of software tools exist today that make digital signatures easy to use on almost any platform. So why is the use of digital signatures not more widespread? Primarily because the utopian dream of a paperless world has yet to materialize.\nSo long as hardcopy on paper is regarded as the authentic \"record\" version of a document, digital signatures are virtually useless. Even if new buildings are designed completely in CAD, an architect's digital signature simply won't mean anything if downstream consumers of the building design require a paper blueprint. The true benefits of a paperless world simply can't be realized until every link in the chain has joined the digital club. So long as even a single node on the distribution tree requires a human readable method of verifying authenticity, the architect is forced to use a handwritten wet signature on paper blueprints from the very start.\nHandwritten signatures can be scanned into an electronic format, but then they lose their putative value because a digital facsimile is so easily reproduced. Therefore only original and unique handwritten wet signatures are trustworthy in a human readable form. Digital signatures do not translate to paper because they are not human readable. Therefore digital signatures only have value for a document in electronic form. This maxim is fundamental to a proper understanding of the emerging digital signature technology: digital data can only be securely signed by computers; and human readable documents can only be securely signed by humans.\nI see many people in the CAD industry looking for a hybrid solution to this paper vs. digital dilemma by using a \"digitized signature\" (i.e. handwritten on paper, then scanned into electronic format) so that printed output contains this digitized signature. This cannot even remotely be considered a digital signature! There is simply no such thing as a secure printed digitized signature. Yes, you can digitally sign a document that has an embedded digitized signature, but once it is printed, that digitized signature is not worth the paper it's printed on. Not only could that signature be stolen from the document and used maliciously, there is no way to tell from the signature alone whether or not it has already been stolen and used maliciously.\nThe only hybrid approach that is practical and legally sound is to use digital and wet signatures in parallel. Using an architect as an example, this would mean creating and disseminating two sets of signed documents: the CAD model of a building (perhaps converted into a common 2D format like PDF, DWFx, or XPS) with the architect's digital signature and paper blueprints with the architect's individually handwritten wet signature.\nA number of companies claim to sell some sort of hybrid solution involving the creation of a secure digitized signature. This is simply capitalism -- selling something useless just because there is a market for it. A digitized signature is only secure if it is never used. I've heard the rationalization that the digitized signature printed on paper meets a psychological need for people accustomed to seeing one, even if it has no legal value. In my opinion, such pandering borders on deception and serves only to further alienate digital signature technology from those who would benefit from it. This sort of abuse is typified by an emailed PDF file consisting of a scanned document with a handwritten signature. In such cases, checking the sender's email address likely becomes the most reliable way to verify the document's trustworthiness. Spam filters bear witness to the fact that the sender's email address is the most important -- and often only -- criteria we use in determining the level of trust to place in emailed documents. This is an important point to keep in mind.\nThe act of applying a digital signature requires the use of a secure private encryption key, but the digital signature alone does not provide security in any way. Digitally signing a document does not prevent it from being modified or stolen. In that respect it is no different than a handwritten wet signature. However, unlike a wet signature that cannot be easily duplicated, a digital signature does not prevent a signed document from being copied. This does not make digital signatures inferior. On the contrary, making copies is necessary and commonplace in the digital world, so the fact that exact copies of digitally signed documents are still trustworthy is a huge benefit over handwritten signatures.\nThere are other notable differences between a digital signature and a handwritten signature. Digital signatures can be time-stamped, thus providing reliable evidence that a document was signed on or before a certain time. A disadvantage of digital signatures is that they are only as reliable as the digital ID used to create them. To combat this problem, a public clearinghouse of compromised digital IDs must be maintained, and auditing systems must be in place to immediately detect and report suspicious activity. Time stamped digital signatures created before a digital ID is compromised can be easily and certainly distinguished from compromised signatures if properly designed and competently managed infrastructure is in place. This is necessary to ensure that previously existing digital signatures survive a compromising event.\nIn conclusion, adequate technical solutions and time tested safeguards already exist for successfully using digital signatures in a professional environment, but digital consumers still need to learn how to work within the limitations of the technology. Building an acceptable comfort level with a technology that must by its nature completely replace something as significant and culturally ingrained as the handwritten signature will not be easy or quick, but it is inevitable.\nUnder the Hood The basic requirements of a digital signature are that it must uniquely identify the signatory, it must be independently verifiable, and it must be invalidated if the signed data has changed. To understand how these objectives are achieved, let's start with the foundation of modern digital signature technology: public key encryption and the public key infrastructure, or PKI.\nIn public key encryption, a \"key pair\" consists of two parts: a public key and a private key. In simplistic terms, the public key is mathematically derived from the randomly generated private key using an algorithm known as a \"one way function\". A one way function makes it easy to calculate a public key if the private key is known, but extremely difficult to deduce the private key if the public key is known. The end result is a secret private key and an openly shared public key that are mathematically related in such a way that the public key can be used to decrypt data that was encrypted with the private key, and the private key can be used to decrypt data that was encrypted with the public key.\nThis interesting property of such a key pair gives rise to a number of useful capabilities. In the case of digital signatures, the act of signing data is essentially nothing more complicated than encrypting the data with a private key. If the data can be decrypted successfully with the signer's public key, then only the signer's private key could have been used to do the encrypting. In practice, this process is simplified so that the signer encrypts only a secure hash, or checksum, of the data to be signed. The recipient then calculates the hash from the raw data and compares the result with the \"signed\" hash after it is decrypted. If the values match, the digital signature and data are validated.\nFor this process to work properly, there need to be standard ways to package information about the algorithms used, and to provide important information about the keys themselves. This need is fulfilled by digital certificates. A digital certificate is a file or block of memory containing a public key along with ancillary data about the key and its owner. The certificate is itself digitally signed by the entity, usually a mutually trusted third party, that issued the certificate. This enables users to verify that the public key is valid and trustworthy.\nA digital ID is the private key component of a key pair. Normally the private key is not stored together with the public key, but instead is stored in a separate physical location for security, usually requiring a password to access it. A key manager maintains links between the digital certificate and its associated private key. In many cases, it is convenient to use the term \"digital ID\" to mean both the public and private keys, even though they are physically separated.\nIt is almost always a good idea to time stamp digital signatures. Time stamping involves sending the digital signature to a time stamp authority, who then creates and returns a digitally signed time stamp that is uniquely and securely associated with the original digital signature. The time stamp can then be verified by third parties in the future by using exactly the same technique used to verify a digital signature.\nI think these important terms deserve a review. A \"digital certificate\" is a public key, which is itself digitally signed by a mutually trusted third party. Your digital certificate represents your public digital identity, and it should be made freely available to anyone who wants or needs it. A \"digital ID\" is a digital certificate and the private key associated with the digital certificate. It isn't difficult to create your own self-signed digital ID, but a digital ID is only as good as the issuing authority that signs it. When you purchase a digital ID from a third party like VeriSign or Thawte, their reputation makes your digital ID more trustworthy.\nPractical Guidelines We use digital signatures every time we visit a secure web site. Visiting a secure web site involves an authentication process that includes verifying the identity of the server by ensuring that its digital certificate, or \"server certificate\", is signed by a trusted certificate authority. This verification process might involve verifying an entire chain of certificates from the actual server certificate up through one or more intermediate certificate authorities and ending with a trusted root certificate authority. This all takes place quickly and automatically before the web page is displayed in your web browser because the web browser includes built in logic to do this work without any user interaction. More importantly, the web browser warns us when the server certificate is expired or invalid.\nThe biggest obstacle when using digital certificates in a CAD environment today is not creating them, but easily and automatically verifying them at the receiving end. Even in a completely digital distribution system where everybody works from the CAD model, the various software tools we use to view and work with the model do not handle digital signature verification automatically in a standardized way. As long as downstream consumers of CAD data cannot easily and automatically ensure the trustworthiness of digital data, they will continue to rely on handwritten signatures on paper.\nA second obstacle to the use of digital signatures is the difficulty in accepting that digitally signed data is only trustworthy while it remains in digital format, and therefore the digital file is the \"record\" document. There is substantial social inertia that must be overcome before a digital document can gain the same amount of trust as a paper document. Engineers and architects must deal with the specter of previously hidden meta data in their CAD models becoming part of their signed document, thereby exposing them to new liabilities that don't exist with paper drawings. Construction supervisors must learn to refer to the CAD model instead of relying on hardcopy blueprints when resolving disputes or establishing responsibility for errors. Here I think it should be noted that the use of a digitally signed model does not preclude the creation of hardcopy blueprints. Those can be created and \"wet stamped\" separately at the same time the CAD model is signed digitally; or they can be created in the field for reference without any signature at all.\nAutoCAD has supported digital signatures for several years, but using the built in functionality is limited to only individual DWG files, lacks support for co-signing (more than one person signing), and forces the signed document to remain in the proprietary DWG format or lose its signature. These problems can be worked around by using third party tools, but doing so requires recipients to use the same tools.\nOver the past few years, many government plan review bodies have amended laws and administrative rules to accommodate digital signatures as part of the plan review process. Without standardization, however, organizations still struggle to effect the necessary changes in their workflow. A lack of uniformity in terminology from one set of regulations to another adds to the confusion. If you are involved in amending or creating rules or regulations that enable the use of digital signatures, you should use generic and well defined terms of art in the regulations, but supplement these with practical guidelines that mention specific technologies, software tools, and file formats that will meet the legal requirements and that you are capable of working with.\nIf you are an architect, engineer, or CAD manager working to implement digital signatures into your firm's workflow, there are some concrete steps you can take to make the task easier. Start by segregating your distribution network into \"digital-only\" and \"hardcopy\" classes of downstream users. Begin the transition with the digital-only part of the network (perhaps only the plan reviewing authority, for example). Next, decide which file format to use for your digital \"documents\". Rather than signing CAD files, many companies start by signing 2D output files such as PDF, DWFx, or XPS. These files are essentially digital versions of the hardcopy documents, so they are more familiar to a wider audience and avoid some of the liability issues of exposing formerly hidden metadata that lives within the CAD model files.\nYou'll need to obtain a digital ID and establish internal policies for storing and accessing the digital ID so that only the owner of the digital ID ever has access to the private key. Windows includes a built in certificate manager that you can use to view and manage your digital IDs. To start the certificate manager, run the certmgr.msc management console by entering its name in the Start -\u0026gt; Run command window. Your digital certificate will be installed in your personal certificates folder along with a link to the private key stored in the Windows secure key repository. Make a backup of the digital ID by exporting it to a password protected PFX file. Once a backup is made, the private key should be marked as not exportable to further secure it.\nIf you want to create digitally signed AutoCAD DWG files, you can use the digital signature feature of AutoCAD to sign a drawing file either while saving it or after it is saved. You should also consider subscribing to a commercial time service (see What time is it?) to ensure that your signatures are accompanied by a reliable time stamp in case your digital ID becomes compromised at some point in the future. Third party tools like CADVault for AutoCAD even make it possible for different people to sign different parts of the CAD model, but such advanced functionality is not needed in most cases.\nIf you use different CAD software that does not support digital signatures natively, or if you choose to sign only the secondary files produced by exporting your CAD model to a different format, then you will need to use either tools specific to that format or third party tools that work with files of any format. Adobe Acrobat (http://www.acrobat.com/) (PDF) and Microsoft's free XPS Viewer (http://www.microsoft.com/whdc/xps/viewxps.mspx) both provide integrated digital signature tools that use the same digital IDs that you would use in AutoCAD, Internet Explorer, or Outlook/Windows Mail, and both applications are easy for recipients to obtain and use.\nAnother popular tool for managing digital IDs and signing files is an open source tool called GnuPG. GnuPG utilizes encryption and key storage standards called OpenPGP (http://www.openpgp.org/about_openpgp/). OpenPGP is not compatible with the X.509 standard used by Windows and many other encryption tools, however it is an attractive alternative when cost or closed source tools are a prohibitive barrier. There are many other digital signature resources available on the internet for those wanting more information, or needing specialized tools.\nUnfortunately, no matter what software tools or file formats you use, today's CAD software and document viewers still do not provide the user experience that web browsers do when it comes to digital signatures. These problems can be overcome by end users, but ultimately they need to be addressed by the makers of the software tools we use. Software for handling digital data will need better user interfaces that allow users to easily specify which digital signatures should be trusted for which purposes, and provide requisite warnings when a document should not be trusted. I am confident that these improvements will come in the future, especially as more companies begin to use digital signatures in their workflow and demand for better digital signature support rises.\nIf you already use digital signatures with your CAD related documents, I would like to hear about it. Please leave a comment about your experiences, whether good or bad!\nContributors \u0026lt;None\u0026gt;\n","permalink":"https://www.manusoft.com/archive/digest/digitalsig/","summary":"\u003cp\u003e\u003ca id=\"Introduction\" name=\"Introduction\"\u003e\u003c/a\u003e\u003ch3\u003eIntroduction\u003c/h3\u003e\u003c/p\u003e\n\u003cp\u003eThe information on this page was compiled from a series of posts on my \u003ca href=\"/archive/blog/digital-signatures-prelude/\"\u003eblog\u003c/a\u003e in December, 2007 about the use of digital signatures in the CAD industry. Note that some information and links that were current as of the original writing may now be out of date.\u003c/p\u003e","title":"Digital Signatures"},{"content":"The Hot List\nCarl Bass munching on fast food in the food court, and spotted throughout the week yakking with average folks in the halls.Staggered classes reduced the lunchtime crush experienced at AU 2006.More ObjectARX programming classes this year. I\u0026rsquo;m pushing for creating a new \u0026ldquo;Developer\u0026rdquo; track for AU 2008.The Matt Murphy Head (peace be upon him).Meeting a lot of familiar faces and a few new ones!The Cold List\nThe food was worse this year than even AU \u0026lsquo;97 in Los Angeles. At least AU \u0026lsquo;97 had a Burger King nearby for someone on a budget; here in Las Vegas I ended up spending several hundred dollars over the course of the week just for food.Pete Kelsey\u0026rsquo;s band, Dr. Ruth, didn\u0026rsquo;t play. Rumor has it that the AU organizers refused to give them space. Dr. Ruth has become an AU staple, and it just wasn\u0026rsquo;t the same without them.Shaan Hurley\u0026rsquo;s gut-wrenching regimen for clearing 20 year old meat byproducts from various body cavities.I presented the first of two ObjectARX roundtable discussions this year (the second one, hosted by Stephen Preston, also covered .NET). This was an experimental format. I liked it, and I thought it went well. If you were there, I\u0026rsquo;d like to hear your suggestions for making it better next year. I will be following up with some more posts covering topics raised in this and other AU classes.\n","permalink":"https://www.manusoft.com/archive/blog/au-2007-post-mortem/","summary":"\u003cp\u003eThe Hot List\u003cbr /\u003e\u003cul\u003e\u003cli\u003eCarl Bass munching on fast food in the food court, and spotted throughout the week yakking with average folks in the halls.\u003c/li\u003e\u003cli\u003eStaggered classes reduced the lunchtime crush experienced at AU 2006.\u003c/li\u003e\u003cli\u003eMore ObjectARX programming classes this year. I\u0026rsquo;m pushing for creating a new \u0026ldquo;Developer\u0026rdquo; track for AU 2008.\u003c/li\u003e\u003cli\u003eThe \u003ca href=\"http://www.flickr.com/photos/btl/2077673044/\"\u003eMatt Murphy Head\u003c/a\u003e (peace be upon him).\u003c/li\u003e\u003cli\u003eMeeting a lot of familiar faces and a few new ones!\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe Cold List\u003c/p\u003e","title":"AU 2007 Post Mortem"},{"content":"The new Visual Studio 2008 has been released, and to celebrate, I\u0026rsquo;ve updated VC Build Hook. The updated utility allows you to use the new IDE while still building with older versions of the build tools.\nWhy is this necessary? If you build your AutoCAD 2007/2008 ObjectARX application with the Visual C/C++ 9.0 tools, AutoCAD will display a warning message about an incompatible module when you try to load it. You can use VC Build Hook to target all previous AutoCAD versions from a single Visual Studio 2008 solution (if you have the correct version of Visual C/C++ installed alongside Visual Studio 2008).\nIn my testing so far, existing Visual Studio 2005 projects build without problems in Visual Studio 2008 when VC Build Hook is installed and the new \u0026lsquo;BuildToolVersion\u0026rsquo; property is set to the correct version.\n","permalink":"https://www.manusoft.com/archive/blog/vc-build-hook-utility-for-visual-studio/","summary":"\u003cp\u003eThe new\u003ca href=\"https://visualstudio.microsoft.com/\"\u003e Visual Studio 2008\u003c/a\u003e has been released, and to celebrate, I\u0026rsquo;ve updated \u003ca href=\"/develop/objectarx/vc-build-hook/\"\u003eVC Build Hook\u003c/a\u003e. The updated utility allows you to use the new IDE while still building with older versions of the build tools.\u003cbr /\u003e\u003cbr /\u003eWhy is this necessary? If you build your AutoCAD 2007/2008 ObjectARX application with the Visual C/C++ 9.0 tools, AutoCAD will display a warning message about an incompatible module when you try to load it. You can use VC Build Hook to target all previous AutoCAD versions from a single Visual Studio 2008 solution (if you have the correct version of Visual C/C++ installed alongside Visual Studio 2008).\u003cbr /\u003e\u003cbr /\u003eIn my testing so far, existing Visual Studio 2005 projects build without problems in Visual Studio 2008 when VC Build Hook is installed and the new \u0026lsquo;BuildToolVersion\u0026rsquo; property is set to the correct version.\u003c/p\u003e","title":"VC Build Hook utility for Visual Studio 2008"},{"content":"OpenDCL 4.1 adds support for the AutoCAD 2008 64-bit platform, includes many improvements in the OpenDCL Studio editor, and has a completely rewritten grid control.\nNext on the agenda is adding support for localization so that local language translations can be easily created.\n","permalink":"https://www.manusoft.com/archive/blog/opendcl-41-released/","summary":"\u003cp\u003e\u003ca href=\"https://www.opendcl.com/\"\u003eOpenDCL 4.1\u003c/a\u003e adds support for the AutoCAD 2008 64-bit platform, includes many improvements in the OpenDCL Studio editor, and has a completely rewritten grid control.\u003cbr /\u003e\u003cbr /\u003eNext on the agenda is adding support for localization so that local language translations can be easily created.\u003c/p\u003e","title":"OpenDCL 4.1 Released"},{"content":"Security and encryption legend Bruce Schneier posted this essay:\nThe War on the Unexpected\nI think we should all be reminded that representative governments are always at risk of death by democracy: suicide under the watchful eyes of a body politic beholden only to the next election.\n","permalink":"https://www.manusoft.com/archive/blog/war-on-security/","summary":"\u003cp\u003eSecurity and encryption legend Bruce Schneier posted this essay:\u003cbr /\u003e\u003ca href=\"http://www.schneier.com/blog/archives/2007/11/the_war_on_the.html\"\u003eThe War on the Unexpected\u003c/a\u003e\u003cbr /\u003e\u003cbr /\u003eI think we should all be reminded that representative governments are always at risk of death by democracy: suicide under the watchful eyes of a body politic beholden only to the next election.\u003c/p\u003e","title":"The War On Security"},{"content":"I\u0026rsquo;ve just posted at CAD/Court about a new lawsuit filed by Timothy S. Vernor of Seattle accusing Autodesk of using fraudulent means to enforce its license agreement prohibition on reselling legitimately purchased software. This subject comes up often, and I think there is a lot of grass roots support for Mr. Vernor\u0026rsquo;s argument extending well beyond Autodesk customers.\nThe license agreement is not the central tenet of the lawsuit, but questions about its legitimacy do come into play. The legal principle involved is called the First Sale Doctrine, which essentially exempts buyers of copyrighted works from copyright infringement claims when they resell the work. The nebulous legal framework around so-called \u0026ldquo;shrink-wrap\u0026rdquo; software licenses, and the degree to which the First Sale Doctrine applies to software, is still an open question here in the US.\nFor those of you interested in learning more about the First Sale Doctrine, listen to this podcast discussion (http://www.techliberation.com/archives/042738.php) on the Technology Liberation Front web site.\n","permalink":"https://www.manusoft.com/archive/blog/autodesk-resale-prohibition-under/","summary":"\u003cp\u003eI\u0026rsquo;ve just posted at \u003ca href=\"https://web.archive.org/web/2010/http://www.cadcourt.com/NewsFeed/tabid/53/EntryID/47/Default.aspx\"\u003eCAD/Court\u003c/a\u003e about a new lawsuit filed by Timothy S. Vernor of Seattle accusing Autodesk of using fraudulent means to enforce its license agreement prohibition on reselling legitimately purchased software. This subject comes up often, and I think there is a lot of grass roots support for Mr. Vernor\u0026rsquo;s argument extending well beyond Autodesk customers.\u003cbr /\u003e\u003cbr /\u003eThe license agreement is not the central tenet of the lawsuit, but questions about its legitimacy do come into play. The legal principle involved is called the First Sale Doctrine, which essentially exempts buyers of copyrighted works from copyright infringement claims when they resell the work. The nebulous legal framework around so-called \u0026ldquo;shrink-wrap\u0026rdquo; software licenses, and the degree to which the First Sale Doctrine applies to software, is still an open question here in the US.\u003cbr /\u003e\u003cbr /\u003eFor those of you interested in learning more about the First Sale Doctrine, listen to this podcast discussion (\u003ca href=\"http://www.techliberation.com/archives/042738.php\"\u003ehttp://www.techliberation.com/archives/042738.php\u003c/a\u003e) on the Technology Liberation Front web site.\u003c/p\u003e","title":"Autodesk Resale Prohibition Under Attack"},{"content":"[Update: See Disable AutoCAD InfoCenter]\nI\u0026rsquo;ve noticed more frequent posts in the Autodesk discussion groups about slow startup problems since AutoCAD 2008 was released, and I have the same problem on my development system. Part of the problem is .NET loading, due to the new .NET gadgets like the dashboard palette. Another long running startup hassle is the communication center (WSCommCntr1.exe if you check running processes in task manager) that Autodesk products use to call home.\nIn addition to the time the communication center process takes to start up, it can also get \u0026ldquo;stuck\u0026rdquo; (either due to network or connection problems, or because of AutoCAD crashing) and cause interminable startup delays. If AutoCAD is trying to start while the communication center is \u0026ldquo;stuck\u0026rdquo;, it will wait in a completely frozen state for about 2 minutes before it times out and loading continues.\nIn addition, AutoCAD 2008 service pack 1 introduced a new \u0026ldquo;pure virtual function call\u0026rdquo; C runtime error that shows up when the communication center closes after an AutoCAD crash.\nAll these problems can be easily fixed by disabling the AutoCAD InfoCenter, which is the culprit that loads the communication center background process. I disabled it by changing the demand load registry key for the InfoCenter. That key can be found in the registry at:\nHKLM\\Software\\Autodesk\\AutoCAD\\R17.1\\[ACAD-XXXX:XXX]\\Applications\\InfoCenterAcConn Change the LOADCTRLS value to 0 (zero) to disable it from demand loading.\nIf you disable your InfoCenter from demand loading, you can still load it manually by using the NETLOAD command to load AcInfoCenterConn.dll from the AutoCAD 2008 folder.\n","permalink":"https://www.manusoft.com/archive/blog/autocad-2008-slow-startup-fix/","summary":"\u003cp\u003e\u003cem\u003e[Update: See \u003ca href=\"/2010/11/disable-autocad-infocenter.htm\"\u003eDisable AutoCAD InfoCenter\u003c/a\u003e]\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eI\u0026rsquo;ve noticed more frequent posts in the Autodesk discussion groups about slow startup problems since AutoCAD 2008 was released, and I have the same problem on my development system. Part of the problem is .NET loading, due to the new .NET gadgets like the dashboard palette. Another long running startup hassle is the communication center (WSCommCntr1.exe if you check running processes in task manager) that Autodesk products use to call home.\u003c/p\u003e","title":"AutoCAD 2008 Slow Startup Fix"},{"content":"I\u0026rsquo;ve heard the word \u0026ldquo;brutal\u0026rdquo; used more than once during conversations with Autodesk employees about the Autodesk sponsored discussion groups (http://www.autodesk.com/discussion). It\u0026rsquo;s true that raw unfiltered feedback can be brutal, and it can also hurt your ego if you happen to be the target of criticism. The trick is to learn how to interpret the feedback. If you can master that skill, that raw feedback is a fast, unbiased, low noise-to-signal-ratio predictor of the future.\nI\u0026rsquo;ve seen many recognizable Autodesk names come and go since the days of Autodesk\u0026rsquo;s original online discussion group, the CompuServe ACAD forum. Oftentimes, they came espousing the virtues of such a vibrant community, only to wilt away after they got singed a few times in the inevitable flame wars. Some Autodesk names (Art Cooney comes to mind) have been around forever, and still take it all in stride. Personally, I view the discussion groups as one of Autodesk\u0026rsquo;s biggest competitive advantages, even while they go largely untapped.\nThis week saw too issues erupt into what could fairly be termed brutal feedback. The first was caused by the Autodesk University registration site failing under the load of opening day registration. Several threads (\u0026ldquo;Dear Carl Bass\u0026rdquo; (http://discussion.autodesk.com/thread.jspa?threadID=601416) and \u0026ldquo;AU2007 Registration is now open!!!\u0026rdquo; (http://discussion.autodesk.com/thread.jspa?threadID=601214)) called Autodesk to the carpet for blowing it again, after a similar fiasco in 2006.\nThe second event occurred when AutoCAD product manager Eric Stover announced a new \u0026ldquo;bonus\u0026rdquo; tool (http://discussion.autodesk.com/thread.jspa?threadID=601266) called CommandComplete. I pity the poor guy or gal that wrote this tool (on their own time, I\u0026rsquo;m sure), all excited to see how it is received, only to become the victim of a flame war. Okay, not really a flame war in this case because Eric employed his finely tuned flame retardant diplomacy skills to prevent it from getting out of hand \u0026ndash; so let\u0026rsquo;s just call it a \u0026ldquo;venomous reaction\u0026rdquo;.\nThere is a moral to this story. Some companies would kill to have access to this kind of critical, unfiltered, instantaneous feedback from the unwashed masses. I hope Autodesk recognizes the goose that lays the golden egg.\n","permalink":"https://www.manusoft.com/archive/blog/brutal/","summary":"\u003cp\u003eI\u0026rsquo;ve heard the word \u0026ldquo;brutal\u0026rdquo; used more than once during conversations with Autodesk employees about the Autodesk sponsored discussion groups (\u003ca href=\"http://www.autodesk.com/discussion%29\"\u003ehttp://www.autodesk.com/discussion)\u003c/a\u003e. It\u0026rsquo;s true that raw unfiltered feedback can be brutal, and it can also hurt your ego if you happen to be the target of criticism. The trick is to learn how to interpret the feedback. If you can master that skill, that raw feedback is a fast, unbiased, low noise-to-signal-ratio predictor of the future.\u003cbr /\u003e\u003cbr /\u003eI\u0026rsquo;ve seen many recognizable Autodesk names come and go since the days of Autodesk\u0026rsquo;s original online discussion group, the CompuServe ACAD forum. Oftentimes, they came espousing the virtues of such a vibrant community, only to wilt away after they got singed a few times in the inevitable flame wars. Some Autodesk names (Art Cooney comes to mind) have been around forever, and still take it all in stride. Personally, I view the discussion groups as one of Autodesk\u0026rsquo;s biggest competitive advantages, even while they go largely untapped.\u003cbr /\u003e\u003cbr /\u003eThis week saw too issues erupt into what could fairly be termed brutal feedback. The first was caused by the Autodesk University registration site failing under the load of opening day registration. Several threads (\u0026ldquo;Dear Carl Bass\u0026rdquo; (\u003ca href=\"http://discussion.autodesk.com/thread.jspa?threadID=601416\"\u003ehttp://discussion.autodesk.com/thread.jspa?threadID=601416\u003c/a\u003e) and \u0026ldquo;AU2007 Registration is now open!!!\u0026rdquo; (\u003ca href=\"http://discussion.autodesk.com/thread.jspa?threadID=601214\"\u003ehttp://discussion.autodesk.com/thread.jspa?threadID=601214\u003c/a\u003e)) called Autodesk to the carpet for blowing it again, after a similar fiasco in 2006.\u003cbr /\u003e\u003cbr /\u003eThe second event occurred when AutoCAD product manager Eric Stover announced a new \u0026ldquo;bonus\u0026rdquo; tool (\u003ca href=\"http://discussion.autodesk.com/thread.jspa?threadID=601266\"\u003ehttp://discussion.autodesk.com/thread.jspa?threadID=601266\u003c/a\u003e) called CommandComplete. I pity the poor guy or gal that wrote this tool (on their own time, I\u0026rsquo;m sure), all excited to see how it is received, only to become the victim of a flame war. Okay, not really a flame war in this case because Eric employed his finely tuned flame retardant diplomacy skills to prevent it from getting out of hand \u0026ndash; so let\u0026rsquo;s just call it a \u0026ldquo;venomous reaction\u0026rdquo;.\u003cbr /\u003e\u003cbr /\u003eThere is a moral to this story. Some companies would kill to have access to this kind of critical, unfiltered, instantaneous feedback from the unwashed masses. I hope Autodesk recognizes the goose that lays the golden egg.\u003c/p\u003e","title":"Brutal"},{"content":"OpenDCL 4.0 has finally been released. If you\u0026rsquo;re not familiar with OpenDCL, check it out at www.opendcl.com, or on SourceForge at sourceforge.net/projects/opendcl.\nOpenDCL, based on the original commercial ObjectDCL software by Chad Wanless, is a modern replacement for the old DCL dialog control language in AutoCAD. The current OpenDCL Runtime supports AutoCAD 2002 through 2008 (except AutoCAD 2008 x64). It is designed to give AutoCAD end users and AutoLISP application developers a simple yet powerful way to design and use rich user interfaces in their applications.\nThe goal for version 4.0 was to get it stable and fix all the bugs, with minimal new feature development. OpenDCL 4.1 will add support for AutoCAD 2008 x64. After that we will start working on localized language versions, and adding new features.\nOpenDCL is licensed under the GNU General Public License (GNU GPL) open source license, completely free to use, and source code is available on SourceForge.\n","permalink":"https://www.manusoft.com/archive/blog/opendcl-40-debuts/","summary":"\u003cp\u003eOpenDCL 4.0 has finally been released. If you\u0026rsquo;re not familiar with OpenDCL, check it out at \u003ca href=\"https://www.opendcl.com/\"\u003e\u003ca href=\"https://www.opendcl.com\"\u003ewww.opendcl.com\u003c/a\u003e\u003c/a\u003e, or on SourceForge at \u003ca href=\"https://sourceforge.net/projects/opendcl//\"\u003esourceforge.net/projects/opendcl\u003c/a\u003e.\u003cbr /\u003e\u003cbr /\u003eOpenDCL, based on the original commercial ObjectDCL software by Chad Wanless, is a modern replacement for the old DCL dialog control language in AutoCAD. The current OpenDCL Runtime supports AutoCAD 2002 through 2008 (except AutoCAD 2008 x64). It is designed to give AutoCAD end users and AutoLISP application developers a simple yet powerful way to design and use rich user interfaces in their applications.\u003cbr /\u003e\u003cbr /\u003eThe goal for version 4.0 was to get it stable and fix all the bugs, with minimal new feature development. OpenDCL 4.1 will add support for AutoCAD 2008 x64. After that we will start working on localized language versions, and adding new features.\u003cbr /\u003e\u003cbr /\u003eOpenDCL is licensed under the \u003ca href=\"http://www.gnu.org/licenses/licenses.html#GPL\"\u003eGNU General Public License\u003c/a\u003e (GNU GPL) open source license, completely free to use, and source code is available on SourceForge.\u003c/p\u003e","title":"OpenDCL 4.0 Debuts"},{"content":"AutoCAD 2004 introduced the ability to digitally sign drawing files when they are saved, but very few people use this feature. Even fewer use the time stamp feature that goes along with it. Time stamping a digital signature is important when it\u0026rsquo;s not only important to know who signed it, but also when they signed it.\nFor time stamping to be reliable and trustworthy, you need an independent (and trustworthy) third party to provide the time stamp, along with a verifiable receipt so that anyone can verify the authenticity of a claimed time stamp in the event of a future dispute.\nSince the inception of the digital signature feature, AutoCAD has included three default time servers for this purpose. Unfortunately, none of the three are accessible any more. If you need to digitally sign drawing files with a time stamp, you\u0026rsquo;ll have to modify this list of time servers.\nThe list of time servers is maintained in a file named timesrvr.txt in the AutoCAD installation folder. You can edit the file with notepad, and the format is obvious and straightforward when you view the file.\nIf you just want to play around with time stamps, try adding the following to the end of the file (you do not need to restart AutoCAD to see the new servers):\nNIST A [Maryland] (time-a.nist.gov)\nNIST B [Maryland] (time-b.nist.gov)\nAs of this writing, both of these NIST servers are available and working, but you get what you pay for. For officially incorporating time stamped digital signatures into your workflow, I recommend subscribing to a commercial time service with guaranteed uptime and a web based time stamp verification console. I can\u0026rsquo;t recommend one, because I have never used a commercial time service myself, but a good place to start is the list of public time servers maintained by NTP.org at http://support.ntp.org/bin/view/Servers/.\n","permalink":"https://www.manusoft.com/archive/blog/what-time-is-it/","summary":"\u003cp\u003eAutoCAD 2004 introduced the ability to digitally sign drawing files when they are saved, but very few people use this feature. Even fewer use the time stamp feature that goes along with it. Time stamping a digital signature is important when it\u0026rsquo;s not only important to know \u003cem\u003ewho\u003c/em\u003e signed it, but also \u003cem\u003ewhen\u003c/em\u003e they signed it.\u003cbr /\u003e\u003cbr /\u003eFor time stamping to be reliable and trustworthy, you need an independent (and trustworthy) third party to provide the time stamp, along with a verifiable receipt so that anyone can verify the authenticity of a claimed time stamp in the event of a future dispute.\u003cbr /\u003e\u003cbr /\u003eSince the inception of the digital signature feature, AutoCAD has included three default time servers for this purpose. Unfortunately, none of the three are accessible any more. If you need to digitally sign drawing files with a time stamp, you\u0026rsquo;ll have to modify this list of time servers.\u003cbr /\u003e\u003cbr /\u003eThe list of time servers is maintained in a file named timesrvr.txt in the AutoCAD installation folder. You can edit the file with notepad, and the format is obvious and straightforward when you view the file.\u003cbr /\u003e\u003cbr /\u003eIf you just want to play around with time stamps, try adding the following to the end of the file (you do not need to restart AutoCAD to see the new servers):\u003cbr /\u003eNIST A [Maryland] (time-a.nist.gov)\u003cbr /\u003eNIST B [Maryland] (time-b.nist.gov)\u003cbr /\u003e\u003cbr /\u003eAs of this writing, both of these NIST servers are available and working, but you get what you pay for. For officially incorporating time stamped digital signatures into your workflow, I recommend subscribing to a commercial time service with guaranteed uptime and a web based time stamp verification console. I can\u0026rsquo;t recommend one, because I have never used a commercial time service myself, but a good place to start is the list of public time servers maintained by \u003ca href=\"http://www.ntp.org\"\u003eNTP.org\u003c/a\u003e at \u003ca href=\"http://support.ntp.org/bin/view/Servers/\"\u003e\u003ca href=\"http://support.ntp.org/bin/view/Servers/\"\u003ehttp://support.ntp.org/bin/view/Servers/\u003c/a\u003e\u003c/a\u003e.\u003c/p\u003e","title":"What time is it?"},{"content":"I\u0026rsquo;ve received several emails recently from users of my VC Build Hook utility that mention switching the \u0026lsquo;UseVC7Paths\u0026rsquo; setting on and off depending on the build configuration they are working on. If you are doing this, you need to change your project structure!\nBuild configurations in Visual Studio 6 and later are logically attached to the solution, not to an individual project as they were in older Visual Studio versions. What happens is that programmers find it easy to add a new build configuration to an existing ObjectARX wizard created project for targeting a new release of AutoCAD \u0026ndash; unfortunately those configurations end up belonging to the entire solution instead of just one project. Since VC Build Hook cannot be set on a per-configuration basis, they end up having to change the project setting depending on which configuration they are building. That\u0026rsquo;s bad, very bad!\nThe correct way to handle this situation is to create new projects, not new build configurations. Yes, it\u0026rsquo;s a bit more work, and it would be nice if Microsoft added an easy way to clone a project, but them\u0026rsquo;s the breaks. Targeting different AutoCAD releases requires project-level changes, so you must create a new project instead of trying to get by with a new build configuration. You can and should share source code files between the projects, however.\nWhen I create a new multi-target solution that e.g. targets AutoCAD 2000 - AutoCAD 2008, I structure the project files on my hard drive like this:\nSolution (.sln file)\n\\ARXProject (ARX module source files)\n+ARXProject.15 (.vcproj file)\n+ARXProject.16 (.vcproj file)\n+ARXProject.17 (.vcproj file)\n\\DBXProject (DBX module source files)\n+DBXProject.15 (.vcproj file)\n+DBXProject.16 (.vcproj file)\n+DBXProject.17 (.vcproj file)\nWhen starting a new project, I first use the wizard to create a default project structure and source code files for the current AutoCAD release. Once I\u0026rsquo;ve got that set up the way I want (including moving the project file into a subdirectory and modifying the source file paths appropriately, as well as setting the _ACADTARGET preprocessor macro), I clone projects by copying the .vcproj files and editing the copies in a text editor to give them a new GUID, then recreate my solution\u0026rsquo;s project structure from scratch by dragging and dropping the project files back into the solution and editing them as necessary.\nIf you need to target multiple AutoCAD releases from a single project, invest the time to set your solution up this way (and follow the other advice on my ARX tips page!), otherwise you will find yourself constantly fighting the system.\n","permalink":"https://www.manusoft.com/archive/blog/visual-studio-build-configuration-tip/","summary":"\u003cp\u003eI\u0026rsquo;ve received several emails recently from users of my \u003ca href=\"/develop/objectarx/vc-build-hook/\"\u003eVC Build Hook utility\u003c/a\u003e that mention switching the \u0026lsquo;UseVC7Paths\u0026rsquo; setting on and off depending on the build configuration they are working on. If you are doing this, you need to change your project structure!\u003c/p\u003e","title":"Visual Studio Build Configuration Tip"},{"content":"If you use of any of these ManuSoft products, preliminary AutoCAD 2008 support has been available for several weeks at the Download Center for registered users. The QuikPik and Periscope updates are now officially released, and the shareware versions of QuikPik and Periscope are now available as well. SuperPurge will be officially released in the next week or so.\nMy free AcadStatusBarButton library has also been updated for AutoCAD 2008, and is now available for download on the Freebies page. The only change is the addition of a blank status bar pane beneath your floating buttons so that the new annotation scale buttons in AutoCAD 2008 don\u0026rsquo;t get covered up (the blank panes force the annotation scale buttons to the left of your custom buttons). If your button position is fixed (i.e. not floating), the blank pane will not be used.\nAs always, if you encounter any problems, please let me know!\n","permalink":"https://www.manusoft.com/archive/blog/quikpik-periscope-superpurge-updated/","summary":"\u003cp\u003eIf you use of any of these \u003ca href=\"/resources/apps/\"\u003eManuSoft products\u003c/a\u003e, preliminary AutoCAD 2008 support has been available for several weeks at the \u003ca href=\"/about/\"\u003eDownload Center\u003c/a\u003e for registered users. The \u003ca href=\"/resources/apps/quikpik/\"\u003eQuikPik\u003c/a\u003e and \u003ca href=\"/resources/apps/periscope/\"\u003ePeriscope\u003c/a\u003e updates are now officially released, and the shareware versions of QuikPik and Periscope are now available as well. \u003ca href=\"/resources/apps/superpurge/\"\u003eSuperPurge\u003c/a\u003e will be officially released in the next week or so.\u003cbr /\u003e\u003cbr /\u003eMy free AcadStatusBarButton library has also been updated for AutoCAD 2008, and is now available for download on the \u003ca href=\"/resources/freebies/misc/\"\u003eFreebies\u003c/a\u003e page. The only change is the addition of a blank status bar pane beneath your floating buttons so that the new annotation scale buttons in AutoCAD 2008 don\u0026rsquo;t get covered up (the blank panes force the annotation scale buttons to the left of your custom buttons). If your button position is fixed (i.e. not floating), the blank pane will not be used.\u003cbr /\u003e\u003cbr /\u003eAs always, if you encounter any problems, please \u003ca href=\"mailto:owenw@manusoft.com\"\u003elet me know\u003c/a\u003e!\u003c/p\u003e","title":"QuikPik, Periscope, SuperPurge Updated for AutoCAD 2008"},{"content":"Reading the discussion about the reluctance to move to 3D/BIM in the latest issue of upFront.eZine (http://www.upfrontezine.com/2007/upf-515.htm) reminded me of the principle of rational ignorance. The principle of rational ignorance applies when the perceived cost of obtaining knowledge is greater than the perceived benefit. It\u0026rsquo;s a bit of a chicken-and-egg scenario, where individuals rationalize their decision to remain ignorant based on their perception of the (lack of) benefit in the very thing they are ignorant about.\nIt is interesting to think about the 2D to 3D paradigm shift in terms of shifting the balance in the rational ignorance equation. I think there\u0026rsquo;s also another principle at work here: Newton\u0026rsquo;s Third Law. The harder the collective movers and shakers try to push, the harder the end users resist. Maybe if the software companies stopped pushing so hard, the shift would occur naturally with much less resistance.\nBy the way, I noticed a familiar theme in the upFront eZine discussion: those resistant to the paradigm shift lament the lost art of drafting and fail to believe that the new paradigm no longer needs artisans. Obviously there are other factors at work here \u0026ndash; factors over which no amount of logic will prevail.\n","permalink":"https://www.manusoft.com/archive/blog/rational-ignorance/","summary":"\u003cp\u003eReading the discussion about the reluctance to move to 3D/BIM in the latest issue of upFront.eZine (\u003ca href=\"http://www.upfrontezine.com/2007/upf-515.htm\"\u003ehttp://www.upfrontezine.com/2007/upf-515.htm\u003c/a\u003e) reminded me of the principle of \u003ca href=\"http://en.wikipedia.org/wiki/Rational_ignorance\"\u003erational ignorance\u003c/a\u003e. The principle of rational ignorance applies when the perceived cost of obtaining knowledge is greater than the perceived benefit. It\u0026rsquo;s a bit of a chicken-and-egg scenario, where individuals rationalize their decision to remain ignorant based on their perception of the (lack of) benefit in the very thing they are ignorant about.\u003cbr /\u003e\u003cbr /\u003eIt is interesting to think about the 2D to 3D paradigm shift in terms of shifting the balance in the rational ignorance equation. I think there\u0026rsquo;s also another principle at work here: Newton\u0026rsquo;s Third Law. The harder the collective movers and shakers try to push, the harder the end users resist. Maybe if the software companies stopped pushing so hard, the shift would occur naturally with much less resistance.\u003cbr /\u003e\u003cbr /\u003eBy the way, I noticed a familiar theme in the upFront eZine discussion: those resistant to the paradigm shift lament the lost art of drafting and fail to believe that the new paradigm no longer needs artisans. Obviously there are other factors at work here \u0026ndash; factors over which no amount of logic will prevail.\u003c/p\u003e","title":"Rational Ignorance"},{"content":"Deelip Menezes asks what got me started on lamenting the sad state of the CAD industry in my previous post. Good question.\nIt all started with a Fox News story about a French architect\u0026rsquo;s claim to have solved the \u0026ldquo;Pyramid Secret\u0026rdquo;: http://www.foxnews.com/story/0,2933,262981,00.html. The article links to Dassault Systemes\u0026rsquo; web site: http://khufu.3ds.com/introduction/. My snake oil alarm went off when I saw the site. I\u0026rsquo;ll admit I didn\u0026rsquo;t read it, but it looks like a slick marketing ploy. I was irritated that I fell for it. It reminded me of how insideous and incestuous this industry has become, now reaching out to mainstream media in search of new victims.\n","permalink":"https://www.manusoft.com/archive/blog/egyptian-pyramid-scheme/","summary":"\u003cp\u003eDeelip Menezes asks what got me started on lamenting the sad state of the CAD industry in my previous post. Good question.\u003cbr /\u003e\u003cbr /\u003eIt all started with a Fox News story about a French architect\u0026rsquo;s claim to have solved the \u0026ldquo;Pyramid Secret\u0026rdquo;: \u003ca href=\"http://www.foxnews.com/story/0,2933,262981,00.html\"\u003ehttp://www.foxnews.com/story/0,2933,262981,00.html\u003c/a\u003e. The article links to Dassault Systemes\u0026rsquo; web site: \u003ca href=\"http://khufu.3ds.com/introduction/\"\u003ehttp://khufu.3ds.com/introduction/\u003c/a\u003e. My snake oil alarm went off when I saw the site. I\u0026rsquo;ll admit I didn\u0026rsquo;t read it, but it looks like a slick marketing ploy. I was irritated that I fell for it. It reminded me of how insideous and incestuous this industry has become, now reaching out to mainstream media in search of new victims.\u003c/p\u003e","title":"Egyptian Pyramid Scheme"},{"content":"In some ways the CAD software industry is a lot like the fashion industry. The movers and shakers are trying to establish new fads that are just recycled from older fads, while guiding the unwashed masses into adopting new trends that have been carefully molded to ensure perpetuation of the system. Meanwhile the up and comers try desperately to get a share of the action, while an entire industry of hangers-on tries to eke out a living from the scraps left behind by the big players.\nIt\u0026rsquo;s a tired old symphony played on the world stage, with pretty much the same players today as twenty years ago. The same seamstresses making the same old faux fluff, dressing it up a bit, draping it over a new model, and parading it down the same old runways.\nBah! I\u0026rsquo;m going outside, maybe that\u0026rsquo;ll cheer me up.\n","permalink":"https://www.manusoft.com/archive/blog/lamenting/","summary":"\u003cp\u003eIn some ways the CAD software industry is a lot like the fashion industry. The movers and shakers are trying to establish new fads that are just recycled from older fads, while guiding the unwashed masses into adopting new trends that have been carefully molded to ensure perpetuation of the system. Meanwhile the up and comers try desperately to get a share of the action, while an entire industry of hangers-on tries to eke out a living from the scraps left behind by the big players.\u003cbr /\u003e\u003cbr /\u003eIt\u0026rsquo;s a tired old symphony played on the world stage, with pretty much the same players today as twenty years ago. The same seamstresses making the same old faux fluff, dressing it up a bit, draping it over a new model, and parading it down the same old runways.\u003cbr /\u003e\u003cbr /\u003eBah! I\u0026rsquo;m going outside, maybe that\u0026rsquo;ll cheer me up.\u003c/p\u003e","title":"Lamenting"},{"content":"No, Microsoft didn\u0026rsquo;t really try to patent photons, but check out the the ironic twists described in this account of a recent US Supreme Court hearing. Here\u0026rsquo;s a summary (exaggerated a bit for effect):\n1. Microsoft argues that software is not patentable, therefore it is not guilty of patent infringement.\n2. The US Government argues on Microsoft\u0026rsquo;s behalf that software is patentable, but photons are not.\n","permalink":"https://www.manusoft.com/archive/blog/this-just-in-microsoft-patents-photons/","summary":"\u003cp\u003eNo, Microsoft didn\u0026rsquo;t really try to patent photons, but check out the the ironic twists described in \u003ca href=\"http://www.betanews.com/article/Supreme_Court_Debates_Patentability_of_Software/1172097039\"\u003ethis account\u003c/a\u003e of a recent US Supreme Court hearing. Here\u0026rsquo;s a summary (exaggerated a bit for effect):\u003cbr /\u003e1. Microsoft argues that software is not patentable, therefore it is not guilty of patent infringement.\u003cbr /\u003e2. The US Government argues on Microsoft\u0026rsquo;s behalf that software is patentable, but photons are not.\u003c/p\u003e","title":"This Just In: Microsoft Patents Photons"},{"content":"I pointed out in a previous post that while the press release headlines pronounced that Vista will support DWF natively, the fine print says otherwise. What Vista does support natively is Microsoft\u0026rsquo;s new XPS (http://www.microsoft.com/whdc/xps/downloads.mspx) (XML Paper Specification) format. Autodesk has since clarified that they are working on a new DWF format called DWFx that is, essentially, a DWF in XPS format.\nA quick test verified my suspicions that XPS files produced by the Microsoft XPS Document Writer (http://www.microsoft.com/whdc/xps/viewxps.mspx) are much larger than comparable DWF files. The jury is still out on DWFx file sizes, but a recent post on Scott Sheppard\u0026rsquo;s blog (http://dwf.blogs.com:80/beyond_the_paper/2007/02/autocad_2008_dw.html) has buried within it a telling comparison point between DWF and DWFx.\nThe chart uses a neat gambit by comparing both DWF and DWFx file sizes to the completely different DWG format, but the math cognoscenti among you will notice that \u0026ldquo;typically 1/20 the size of the DWG\u0026rdquo; for DWF and \u0026ldquo;typically 1/10 the size of the DWG\u0026rdquo; for DWFx translates into \u0026ldquo;DWFx files are twice as large as DWF\u0026rdquo;. There is no information on file generation times, another metric worth monitoring.\nAutodesk has been pretty generous lately, first giving away Design Review, now perhaps gearing up for an exclusive two-for-the-price-of-one deal on DWFx. I haven\u0026rsquo;t heard too many customers requesting larger file sizes, though.\n","permalink":"https://www.manusoft.com/archive/blog/dwfx-emperors-new-clothes/","summary":"\u003cp\u003eI pointed out in a \u003ca href=\"/2006/12/does-vista-really-open-dwf-files.htm\"\u003eprevious post\u003c/a\u003e that while the press release headlines pronounced that Vista will support DWF natively, the fine print says otherwise. What Vista does support natively is Microsoft\u0026rsquo;s new XPS (\u003ca href=\"http://www.microsoft.com/whdc/xps/downloads.mspx\"\u003ehttp://www.microsoft.com/whdc/xps/downloads.mspx\u003c/a\u003e) (XML Paper Specification) format. Autodesk has since clarified that they are working on a new DWF format called DWFx that is, essentially, a DWF in XPS format.\u003cbr /\u003e\u003cbr /\u003eA \u003ca href=\"/2006/12/does-vista-really-open-dwf-files.htm\"\u003equick test\u003c/a\u003e verified my suspicions that XPS files produced by the Microsoft XPS Document Writer (\u003ca href=\"http://www.microsoft.com/whdc/xps/viewxps.mspx\"\u003ehttp://www.microsoft.com/whdc/xps/viewxps.mspx\u003c/a\u003e) are much larger than comparable DWF files. The jury is still out on DWFx file sizes, but a recent post on Scott Sheppard\u0026rsquo;s blog (\u003ca href=\"http://dwf.blogs.com:80/beyond_the_paper/2007/02/autocad_2008_dw.html\"\u003ehttp://dwf.blogs.com:80/beyond_the_paper/2007/02/autocad_2008_dw.html\u003c/a\u003e) has buried within it a telling comparison point between DWF and DWFx.\u003cbr /\u003e\u003cbr /\u003eThe chart uses a neat gambit by comparing both DWF and DWFx file sizes to the completely different DWG format, but the math cognoscenti among you will notice that \u0026ldquo;typically 1/20 the size of the DWG\u0026rdquo; for DWF and \u0026ldquo;typically 1/10 the size of the DWG\u0026rdquo; for DWFx translates into \u0026ldquo;DWFx files are twice as large as DWF\u0026rdquo;. There is no information on file generation times, another metric worth monitoring.\u003cbr /\u003e\u003cbr /\u003eAutodesk has been pretty generous lately, first giving away Design Review, now perhaps gearing up for an exclusive two-for-the-price-of-one deal on DWFx. I haven\u0026rsquo;t heard too many customers requesting larger file sizes, though.\u003c/p\u003e","title":"DWFx: The Emperor's New Clothes?"},{"content":"AutoLISP programmers may remember a product named ObjectDCL, by 3rd Day Software. ObjectDCL was released as open source in the summer of 2006 by developer Chad Wanless due to his inability to continue supporting the software because of \u0026ldquo;health reasons\u0026rdquo;. At the time, many users of ObjectDCL hoped that someone would update the code to work in AutoCAD 2007. Programmer David Robison did some work to get AutoCAD 2007 supported, but the project has been languishing, almost to the point of extinction.\nAfter being asked by several ObjectDCL users whether I could help, I decided a few weeks ago to contribute to the community by getting the original C++ code updated to support AutoCAD 2007. As I am wont to do, I\u0026rsquo;ve ended up re-architecting much of the code in the process.\nThe results of my work are available now at the new OpenDCL project on SourceForge. The new 4.0 release is still in the alpha testing phase. If you program in AutoLISP and want to create rich user interfaces for your applications, check it out!\n","permalink":"https://www.manusoft.com/archive/blog/introducing-opendcl-for-autocad/","summary":"\u003cp\u003eAutoLISP programmers may remember a product named ObjectDCL, by 3rd Day Software. ObjectDCL was \u003ca href=\"http://www.cadopolis.com/autocad/objectdcl-now-open-source-project-.shtml\"\u003ereleased as open source in the summer of 2006\u003c/a\u003e by developer Chad Wanless due to his inability to continue supporting the software because of \u0026ldquo;health reasons\u0026rdquo;. At the time, many users of ObjectDCL hoped that someone would update the code to work in AutoCAD 2007. Programmer David Robison did some work to get AutoCAD 2007 supported, but the project has been languishing, almost to the point of extinction.\u003cbr /\u003e\u003cbr /\u003eAfter being asked by several ObjectDCL users whether I could help, I decided a few weeks ago to contribute to the community by getting the original C++ code updated to support AutoCAD 2007. As I am wont to do, I\u0026rsquo;ve ended up re-architecting much of the code in the process.\u003cbr /\u003e\u003cbr /\u003eThe results of my work are available now at the new \u003ca href=\"https://sourceforge.net/projects/opendcl/\"\u003eOpenDCL project\u003c/a\u003e on SourceForge. The new 4.0 release is still in the alpha testing phase. If you program in AutoLISP and want to create rich user interfaces for your applications, check it out!\u003c/p\u003e","title":"Introducing OpenDCL for AutoCAD"},{"content":"(continued from Part III)\nCreating custom modules for DotNetNuke is an esoteric process that I don't recommend unless you're prepared to invest quite a bit of time and effort. I slogged through the process because I'm too stubborn to quit, but it's hardly worth the investment in time for a one-off custom module. I don't expect many of my readers to try it anyway, so I won't bother describing the technical aspects in any detail.\nMy primary objective was to create a Docket History module that renders a court case's docket history in an HTML table. Since DotNetNuke modules (generally) render data from a database, a large part of my work was defining the database structures and database interface code. The database work was an opportunity to learn more about SQL syntax, something I had never really delved into very deeply in the past. As the module began taking shape, I found myself having to refactor over and over again, often changing the database structure in the process. Changing the database structure meant recreating the data and rewriting the database interface code.\nOnce I had a working Docket History module, I decided to apply what I had learned to a second custom module for the Grapevine page of the web site. This module would simply display a date-ordered list of links to external web pages, including a column for the \"Source\" of the linked page -- a bit less complicated than my first module. It should come as no surprise that the second one took about a tenth as much time as the first, mainly because I spent much less time refactoring. That doesn't mean I got it right the first time. In fact, I eventually went back and made yet more changes to the first module to reflect the optimizations and design improvements I discovered while working on the second.\nTo recap, the web site today consists of DotNetNuke 4.4.0 \"out-of-the-box\" (I upgraded to 4.4.0 from the original 4.3.7 after 4.4.0 shipped in late December), a free skin from Nina's Free Skins (http://www.ninasfreeskins.com/), the two custom modules I created, and a bug fix to correct a PDF file download issue as described in a DotNetNuke forum thread. Total time spent was around 200 hours over four weeks. Finally, a complete web site -- or was it? In Part V, find out what the last missing ingredient was.\n","permalink":"https://www.manusoft.com/archive/blog/ill-take-web-sites-for-200-alex-part-iv/","summary":"\u003cp\u003e(continued from \u003ca href=\"/2007/01/ill-take-web-sites-for-200-alex-part-iii.htm\"\u003ePart III\u003c/a\u003e)\u003c/p\u003e\u003cp\u003eCreating custom modules for \u003ca href=\"https://www.dnnsoftware.com/\"\u003eDotNetNuke\u003c/a\u003e is an esoteric process that I don't recommend unless you're prepared to invest quite a bit of time and effort. I slogged through the process because I'm too stubborn to quit, but it's hardly worth the investment in time for a one-off custom module. I don't expect many of my readers to try it anyway, so I won't bother describing the technical aspects in any detail.\u003c/p\u003e","title":"I'll take web sites for $200, Alex: Part IV"},{"content":"Introduction\nThe information on this page was compiled from a series of posts on my blog in January, 2007 entitled \"I'll take web sites for $200, Alex\". The posts document what I learned during the creation of my first content managed web site. Note that some information and links that were current as of the original writing may now be out of date.\nNOTICE: The contents of this page are Copyright 2006 - 2007 ManuSoft, All Rights Reserved. The contents of this page may not be reproduced under any circumstances without permission from the author! Permission to print one hardcopy of this page for individual use is hereby granted.\nDISCLAIMER: ManuSoft is in no way responsible for either the accuracy or completeness of information on this page! Neither ManuSoft, Owen Wengerd, nor any credited or uncredited contributors may be held liable for any damages which may result either directly or indirectly from the use of information on this page! In other words, use at your own risk!\nOwen Wengerd, President ManuSoft Part I I'm one of those throwbacks that learned HTML by typing it in Notepad. I've since moved up to using the Visual Studio editor; it does syntax coloring, error highlighting, and has a \"design\" mode for previewing the page, yet it's a very utilitarian editor that I feel comfortable with. I do use FrontPage (http://www.microsoft.com/frontpage/) when I need to manage connections between multiple HTML pages, but mostly in raw HTML mode. When I use WYSIWYG design mode in FrontPage, I inevitably end up cleaning out a lot of unnecessary junk that it includes in the generated HTML. I think it's fair to say that my obsession with clean HTML results in utilitarian, functional, and standards conformant presentations -- but with a decided lack of graphic appeal.\nThe ManuSoft and CADLock web sites are examples of this utilitarian approach. The ManuSoft site uses no fancy graphics and relies very little on client side scripting, and it supports a hierarchical navigation system using only standard hyperlinks. I like that minimalist approach, but the price for clean HTML being served to clients is a lot of work on the server to maintain the site. As a result, I don't update the site very often because it's just too difficult.\nThis blog was the first step toward realizing a goal of making it easier to add new content. After all, the raison d'être of blogs is to minimize the latency between the writer's stream of consciousness and words on the web by making it irresistibly easy to add new content. This is precisely why blogs have become so popular.\nUnfortunately, I soon found limitations with my blog. Tabular lists of data still require manual HTML input, it is difficult to customize the content area outside the individual posts on the blog page, and most aspects of the hosted blog software are outside my control. I wanted more.\nThe Autodesk vs. Open Design Alliance lawsuit gave me an excuse to take the next step: implement the \"blog\" concept across an entire web site with software that I control. So, I decided to swallow my pride and learn how to create an entire web site that would be so easy to update that I would actually update it frequently -- even if it meant messy HTML code. Stay tuned for Part II, choosing a hosting service and deciding which software to use.\nPart II The kind of web site I wanted to create is usually built on top of a Content Management System (CMS) that becomes the administrative user interface as well as the framework for web pages that get served to web site visitors. The first thing I learned is that there are *thousands* of CMS products floating about the internet, from simple \"guest book\" type scripts to full blown corporate extranet management systems designed for use by tens of thousands of employees and customers. I've also been looking for an excuse to learn ASP.NET, so I decided to narrow my search to CMS software that was based on ASP.NET. Finally, the software had to be free or very inexpensive.\nBased on these criteria, I narrowed the choices down to Community Server, DotNetNuke, Rainbow Portal (http://www.rainbowportal.net/), and newcomer FlexCMS (http://www.flexcms.co.uk/). Community Server is free for personal use, but for my planned use it would have cost several hundred dollars -- probably out of my range, but I still downloaded and tested it for comparison purposes. DotNetNuke is open source based on a permissive BSD-style license (free to use or modify for any purpose), plus it has a large and relatively mature user base. Rainbow Portal is released under the LPGL license, with discussions currently underway about changing the license. Both DotNetNuke and Rainbow Portal are based on a Microsoft sponsored sample ASP application called IBuySpy (http://samples.gotdotnet.com/quickstart/aspplus/doc/ibuyspy.aspx). Rainbow Portal seemed more polished, but I ran into some limitations with both pretty quickly. FlexCMS, while seemingly more logically designed and built from the ground up on the latest version of ASP.NET, was clearly lacking a lot of features that the other two free packages included. In the end I chose DotNetNuke because it had a more permissive license and a larger user base to draw support from (I found the documentation for all these packages fairly useless, so peer support was a must).\nNext step was finding an inexpensive web host that would enable me to install, run, and administer an ASP.NET/SQL Server application. If you've ever looked for a web host, you'll know that it's sometimes difficult to find one that provides the remote management capabilities and server software that you need (in my case ASP.NET and SQL Server running on IIS (http://www.microsoft.com/iis), which are less common than PHP/MySQL solutions running on Linux). I'm aware of several quality hosting companies. Pair networks usually gets good reviews, but they don't do Windows. I've used GoDaddy (http://affiliate.godaddy.com/redirect/6384D5883DA8C2CEA1430BA0B35AFB9B937B2FB602FAB7C07687102649811256) before for registering domain names without any problems, so I headed there to check out their prices and policies for hosting plans. When I saw that they offered a Windows based economy plan with plenty of storage space and bandwidth for $3.19 per month, I decided to just register my new domain name and sign up for GoDaddy's shared hosting plan (http://affiliate.godaddy.com/redirect/6384D5883DA8C2CEA1430BA0B35AFB9B937B2FB602FAB7C07687102649811256) on the spot, and be done with it.\nTotal cost for DotNetNuke CMS software, 2 years of web hosting, and a new domain name registered for two years: $88. Not bad. In Part III I'll show you how DotNetNuke works.\nPart III DotNetNuke (aka DNN) is not simple to set up. It needs at least the free SQL Server Express Edition (http://www.microsoft.com/sql/editions/express/default.mspx) on the host system (full SQL Server requires some changes to the default configuration) and either IIS or another ASP .NET 2.0 compatible web server to run on. If you have Visual Studio 2005 fully installed, you have all you need to run DNN.\nThere are a number of manual steps involved, and the steps are different depending on the environment, and whether or not you have the version with full source code included. The quickest route to an operational DNN installation is to download the latest 'Install' files from https://www.dnnsoftware.com/ and unzip them to a new folder. Next, make sure the ASPNET account has modify, read, execute, and write access to that folder (new folders will not have this permission by default -- it must be added). Next, create a new virtual directory in IIS and map the new virtual directory to the new DNN folder. Once this is done, open a browser and browse to the new virtual directory. This will initiate the DNN installation sequence, where it creates and populates its database with default settings. Once the installation sequence completes, DNN is ready to use, and looks like this:\nThe structure of DotNetNuke is designed so that a single DNN installation consists of a host (the person controlling the physical computer on which the web site lives) and any number of portals (that may be administered by others). The distinction is important when changing settings because host settings can place limits on portal settings, and portal settings can override host default settings. In my case, I am both host and administrator of the single portal.\nA DNN portal is a single web site. A web site consists of web pages (also called \"tabs\" in DNN lingo), each containing controls that may be added to predefined \"panes\" on the page. Before you can add new controls to a page, the controls must be defined. You can define controls by importing \"modules\". These can be third party modules, or one of the 15 or so standard modules that come with DNN.\nTo actually modify the web site, you simply log in to the web site as an administrator. As soon as you are logged in as an administrator, the web pages change to reveal administrative controls that you can use to modify the layout or module settings of the current page, like this:\nNotice the control panel at the top of the page, as well as the new hyperlinks on the controls themselves. These can be used to change individual module settings, or to move modules around the page (or even to a different page) very quickly and easily. There is also a new \"Admin\" menu page that an administrator can use to manage all other aspects of the web site such as the skins, user accounts, security roles, and other site settings. In theory, all this editing can be done on a live web site; in practice, most changes should be made first on a local mirror of the site, then uploaded to the server once they have been fully tested.\nThe beauty of a CMS system is that the software makes it possible to build a complete multi-page web site in minutes. Changing skins is quick and can change the look and feel of an entire web site instantly. Unfortunately, there's always a catch. The price of quick-and-easy is that you have to live with the quirks, bugs, and inconsistencies that come with the software. I spent a lot of time trying to fix some little things that I wasn't happy with. In some cases I was able to fix them myself, but in the end I just had to learn to live with numerous small irritants.\nComing up in Part IV, completing my first custom module.\nPart IV Creating custom modules for DotNetNuke is an esoteric process that I don't recommend unless you're prepared to invest quite a bit of time and effort. I slogged through the process because I'm too stubborn to quit, but it's hardly worth the investment in time for a one-off custom module. I don't expect many of my readers to try it anyway, so I won't bother describing the technical aspects in any detail.\nMy primary objective was to create a Docket History module that renders a court case's docket history in an HTML table. Since DotNetNuke modules (generally) render data from a database, a large part of my work was defining the database structures and database interface code. The database work was an opportunity to learn more about SQL syntax, something I had never really delved into very deeply in the past. As the module began taking shape, I found myself having to refactor over and over again, often changing the database structure in the process. Changing the database structure meant recreating the data and rewriting the database interface code.\nOnce I had a working Docket History module, I decided to apply what I had learned to a second custom module for the Grapevine page of the web site. This module would simply display a date-ordered list of links to external web pages, including a column for the \"Source\" of the linked page -- a bit less complicated than my first module. It should come as no surprise that the second one took about a tenth as much time as the first, mainly because I spent much less time refactoring. That doesn't mean I got it right the first time. In fact, I eventually went back and made yet more changes to the first module to reflect the optimizations and design improvements I discovered while working on the second.\nTo recap, the web site today consists of DotNetNuke 4.4.0 \"out-of-the-box\" (I upgraded to 4.4.0 from the original 4.3.7 after 4.4.0 shipped in late December), a free skin from Nina's Free Skins (http://www.ninasfreeskins.com/), the two custom modules I created, and a bug fix to correct a PDF file download issue as described in a DotNetNuke forum thread. Total time spent was around 200 hours over four weeks. Finally, a complete web site -- or was it? In Part V, find out what the last missing ingredient was.\nPart V The final and perhaps most important piece of the web site puzzle was an automated backup process. With a CMS system, making a backup is not as simple as copying files, because the essence of the web site is stored in database tables. The problem is complicated by the fact that GoDaddy (http://affiliate.godaddy.com/redirect/6384D5883DA8C2CEA1430BA0B35AFB9B937B2FB602FAB7C07687102649811256) and many other web hosting companies provide only a rudimentary web-based front end to the web site's database with no capability of making complete backups of the data.\nIn my case, the solution was Evotiva BackupScript (http://www.evotiva.com/Modules/BackupScript/tabid/57/Default.aspx), a server-side script application designed especially for this situation. I had to shell out about $40 for a BackupScript \"PRO edition\" license, but the utility worked as advertised and paid for itself the first time I unwittingly screwed up the database and had to restore from a backup. I've had no problems with the database that weren't my own fault, but the web is replete with stories of DotNetNuke web sites being lost due to problems with the host server that required the database to be recreated from scratch, so having a current backup lets me sleep a lot easier.\nOnce all the pieces were in place and working, I started adjusting directory permissions with the goal to restrict access to the maximum extent possible in order to reduce the risk of a hacker gaining access to the web site. This turned out to be an exercise of trial and error, using the fairly time-consuming process of making a virtual directory that corresponds to an existing folder, changing its permissions, testing to see if anything broke, etc. I don't want to make it any easier for hackers, so I won't break down all the virtual directories that I ended up with, but suffice it to say I have over 20 virtual directories with settings more restrictive than they would be if I had just left everything at the default settings.\nI'm very happy with the end result. It has been a lot of work, but I've learned a lot, and I can now attach future web site projects with a lot more knowledge and experience going in!\nContributors \u0026lt;None\u0026gt;\n","permalink":"https://www.manusoft.com/archive/digest/cmswebsite/","summary":"\u003cp\u003e\u003ca id=\"Introduction\" name=\"Introduction\"\u003e\u003c/a\u003e\u003ch3\u003eIntroduction\u003c/h3\u003e\u003c/p\u003e\n\u003cp\u003eThe information on this page was compiled from a series of posts on my \u003ca href=\"/archive/blog/\" target=\"_blank\"\u003eblog\u003c/a\u003e in January, 2007 entitled \"I'll take web sites for $200, Alex\". The posts document what I learned during the creation of my first content managed web site. Note that some information and links that were current as of the original writing may now be out of date.\u003c/p\u003e","title":"CMS Web Site"},{"content":"The title sums up the puzzling conclusion in a recent 6th Circuit Court of Appeals ruling (CA6 Grusenmeyer Decision.pdf) in a decision about a copyright infringement claim filed by Cleveland architect Jeffrey Grusenmeyer.\nGrusenmeyer had contracted to provide a \u0026ldquo;master plan\u0026rdquo; for Magnificat High School. The master plan was provided to Magnificat in hardcopy format, Magnificat paid the architect $15,000 as agreed in the contract, and the project was apparently concluded. Some time later, a Magnificat facility manager requested DWG files for \u0026ldquo;personal use\u0026rdquo;. Grusenmeyer asserted at the time that he retained all rights to the DWG files but agreed to provide them on the condition they only be used internally and not be further distributed.\nFast forward to the eventual \u0026ldquo;request for proposal\u0026rdquo; for an anticipated new building at the school. Upon request, Magnificat provided the Grusenmeyer files to the defendants (a competing architectural firm), who then used portions of the files in their winning proposal. The defendants were aware that Grusenmeyer claimed copyrights to the files, but they used the files anyway. The appeals court notes that \u0026ldquo;[a]ccording to the individual DSC architects, such reliance on drawings of existing conditions is routine in the industry.\u0026quot;\nIn affirming the district court\u0026rsquo;s summary judgement in favor of the defendants, the appeals court noted that the contract between Grusenmeyer and his client (Magificat High School) provided that Grusenmeyer would \u0026ldquo;provide a master plan for the implementation of the capital improvements program, including plans, renderings, and perspectives suitable for use in presentation and future reference during master plan implementation.\u0026rdquo; They concluded that this \u0026ldquo;plain language\u0026rdquo; gave Magnificat permission to send the AutoCAD DWG files to Grusenmeyer\u0026rsquo;s competitor.\nThe district court had previously ruled that Grusenmeyer\u0026rsquo;s drawings were not sufficiently original to warrant copyright protection, but the appeals court did not address the copyrightability issue at all, dismissing the infringement claim out of hand with their opinion that Grusenmeyer had already given Magnificat carte blanche copyrights to the files vis a vis the quoted clause in their contract \u0026ndash; even though the files were never provided as part of the contract!\nI think the court erred in determining that the DWG files were subject to the terms of the master plan contract (its incorrect interpretation of the contract notwithstanding), but what I find really surprising in the ruling is the appellate court\u0026rsquo;s complete disregard of the plaintiff\u0026rsquo;s claimed and federally registered copyrights.\nThe moral of the story\nIf you are providing electronic files, don\u0026rsquo;t rely on copyright law alone to protect your intellectual property. This case reinforces the 3 C\u0026rsquo;s for protecting AutoCAD DWG files: copyright, contract, and CADLock.\nUpdate\nWilliam Patry (Senior Copyright Counsel, Google Inc.) writes about this case at The Patry Copyright Blog: Make Sure the Contract is Signed.\n","permalink":"https://www.manusoft.com/archive/blog/autocad-drawing-files-possession-is-910/","summary":"\u003cp\u003eThe title sums up the puzzling conclusion in a recent 6th Circuit Court of Appeals ruling (\u003ca href=\"/files/CA6%20Grusenmeyer%20Decision.pdf\"\u003eCA6 Grusenmeyer Decision.pdf\u003c/a\u003e) in a decision about a copyright infringement claim filed by Cleveland architect Jeffrey Grusenmeyer.\u003cbr /\u003e\u003cbr /\u003eGrusenmeyer had contracted to provide a \u0026ldquo;master plan\u0026rdquo; for Magnificat High School. The master plan was provided to Magnificat in hardcopy format, Magnificat paid the architect $15,000 as agreed in the contract, and the project was apparently concluded. Some time later, a Magnificat facility manager requested DWG files for \u0026ldquo;personal use\u0026rdquo;. Grusenmeyer asserted at the time that he retained all rights to the DWG files but agreed to provide them on the condition they only be used internally and not be further distributed.\u003cbr /\u003e\u003cbr /\u003eFast forward to the eventual \u0026ldquo;request for proposal\u0026rdquo; for an anticipated new building at the school. Upon request, Magnificat provided the Grusenmeyer files to the defendants (a competing architectural firm), who then used portions of the files in their winning proposal. The defendants were aware that Grusenmeyer claimed copyrights to the files, but they used the files anyway. The appeals court notes that \u0026ldquo;[a]ccording to the individual DSC architects, such reliance on drawings of existing conditions is routine in the industry.\u0026quot;\u003cbr /\u003e\u003cbr /\u003eIn affirming the district court\u0026rsquo;s summary judgement in favor of the defendants, the appeals court noted that the contract between Grusenmeyer and his client (Magificat High School) provided that Grusenmeyer would \u0026ldquo;provide a master plan for the implementation of the capital improvements program, including plans, renderings, and perspectives \u003cem\u003esuitable for use in presentation and future reference during master plan implementation\u003c/em\u003e.\u0026rdquo; They concluded that this \u0026ldquo;plain language\u0026rdquo; gave Magnificat permission to send the AutoCAD DWG files to Grusenmeyer\u0026rsquo;s competitor.\u003cbr /\u003e\u003cbr /\u003eThe district court had previously ruled that Grusenmeyer\u0026rsquo;s drawings were not sufficiently original to warrant copyright protection, but the appeals court did not address the copyrightability issue at all, dismissing the infringement claim out of hand with their opinion that Grusenmeyer had already given Magnificat carte blanche copyrights to the files vis a vis the quoted clause in their contract \u0026ndash; even though the files were never provided as part of the contract!\u003cbr /\u003e\u003cbr /\u003eI think the court erred in determining that the DWG files were subject to the terms of the master plan contract (its incorrect interpretation of the contract notwithstanding), but what I find really surprising in the ruling is the appellate court\u0026rsquo;s complete disregard of the plaintiff\u0026rsquo;s claimed and federally registered copyrights.\u003cbr /\u003e\u003cbr /\u003e\u003cstrong\u003eThe moral of the story\u003c/strong\u003e\u003cbr /\u003eIf you are providing electronic files, don\u0026rsquo;t rely on copyright law alone to protect your intellectual property. This case reinforces the 3 C\u0026rsquo;s for protecting AutoCAD DWG files: copyright, contract, and \u003ca href=\"https://web.archive.org/web/2010/http://www.cadlock.com/\"\u003eCADLock\u003c/a\u003e.\u003cbr /\u003e\u003cbr /\u003e\u003cstrong\u003eUpdate\u003c/strong\u003e\u003cbr /\u003eWilliam Patry (Senior Copyright Counsel, Google Inc.) writes about this case at \u003ca href=\"http://williampatry.blogspot.com/2007/01/make-sure-contract-is-signed.html#links\"\u003eThe Patry Copyright Blog: Make Sure the Contract is Signed\u003c/a\u003e.\u003c/p\u003e","title":"AutoCAD drawing files: possession is 9/10 of the law?"},{"content":"(continued from Part II)\nDotNetNuke (aka DNN) is not simple to set up. It needs at least the free SQL Server Express Edition (http://www.microsoft.com/sql/editions/express/default.mspx) on the host system (full SQL Server requires some changes to the default configuration) and either IIS or another ASP .NET 2.0 compatible web server to run on. If you have Visual Studio 2005 fully installed, you have all you need to run DNN.\nThere are a number of manual steps involved, and the steps are different depending on the environment, and whether or not you have the version with full source code included. The quickest route to an operational DNN installation is to download the latest 'Install' files from https://www.dnnsoftware.com/ and unzip them to a new folder. Next, make sure the ASPNET account has modify, read, execute, and write access to that folder (new folders will not have this permission by default -- it must be added). Next, create a new virtual directory in IIS and map the new virtual directory to the new DNN folder. Once this is done, open a browser and browse to the new virtual directory. This will initiate the DNN installation sequence, where it creates and populates its database with default settings. Once the installation sequence completes, DNN is ready to use, and looks like this:\nThe structure of DotNetNuke is designed so that a single DNN installation consists of a host (the person controlling the physical computer on which the web site lives) and any number of portals (that may be administered by others). The distinction is important when changing settings because host settings can place limits on portal settings, and portal settings can override host default settings. In my case, I am both host and administrator of the single portal.\nA DNN portal is a single web site. A web site consists of web pages (also called \"tabs\" in DNN lingo), each containing controls that may be added to predefined \"panes\" on the page. Before you can add new controls to a page, the controls must be defined. You can define controls by importing \"modules\". These can be third party modules, or one of the 15 or so standard modules that come with DNN.\nTo actually modify the web site, you simply log in to the web site as an administrator. As soon as you are logged in as an administrator, the web pages change to reveal administrative controls that you can use to modify the layout or module settings of the current page, like this:\nNotice the control panel at the top of the page, as well as the new hyperlinks on the controls themselves. These can be used to change individual module settings, or to move modules around the page (or even to a different page) very quickly and easily. There is also a new \"Admin\" menu page that an administrator can use to manage all other aspects of the web site such as the skins, user accounts, security roles, and other site settings. In theory, all this editing can be done on a live web site; in practice, most changes should be made first on a local mirror of the site, then uploaded to the server once they have been fully tested.\nThe beauty of a CMS system is that the software makes it possible to build a complete multi-page web site in minutes. Changing skins is quick and can change the look and feel of an entire web site instantly. Unfortunately, there's always a catch. The price of quick-and-easy is that you have to live with the quirks, bugs, and inconsistencies that come with the software. I spent a lot of time trying to fix some little things that I wasn't happy with. In some cases I was able to fix them myself, but in the end I just had to learn to live with numerous small irritants.\nComing up in Part IV, completing my first custom module.\n","permalink":"https://www.manusoft.com/archive/blog/ill-take-web-sites-for-200-alex-part-iii/","summary":"\u003cp\u003e(continued from \u003ca href=\"/2007/01/ill-take-web-sites-for-200-alex-part-ii.htm\"\u003ePart II\u003c/a\u003e)\u003c/p\u003e\u003cp\u003eDotNetNuke (aka DNN) is not simple to set up. It needs at least the free SQL Server Express Edition (http://www.microsoft.com/sql/editions/express/default.mspx) on the host system (full SQL Server requires some changes to the default configuration) and either IIS or another ASP .NET 2.0 compatible web server to run on. If you have Visual Studio 2005 fully installed, you have all you need to run DNN.\u003c/p\u003e","title":"I'll take web sites for $200, Alex: Part III"},{"content":"With the advent of Visual Studio 2005 and automatically generated manifest files, the topic of when and how to use manifest files comes up occasionally. Since a default ObjectARX wizard generated project in Visual Studio 2005 generates an embedded manifest by default, most people don\u0026rsquo;t even think about it. Of course that was the whole idea \u0026ndash; the manifest would ensure that the correct dependent DLLs get loaded, and voila, no need to think about it. One of my programming axioms applies in this case: TANSTAAFL.\nThe problem is that ObjectARX applications are not in charge. AutoCAD is in charge, and it will decide which VC runtime and MFC runtime DLLs to load. If your ObjectARX application loads a different VC or MFC runtime than the ones AutoCAD is using, you\u0026rsquo;ll encounter big problems. I\u0026rsquo;ve always advised disabling the manifest completely (see my ObjectARX Tips page) to avoid such a possibility. Unfortunately, there\u0026rsquo;s a catch.\nThe problem is that linking to the ATL80.DLL file isn\u0026rsquo;t possible by just disabling the manifest and doing nothing more. ATL is now a side-by-side (SxS) assembly, and it no longer lives on the Windows support path, so a standard un-manifested DLL won\u0026rsquo;t be able to find it. The preferred solution is to link statically to ATL (see Configuration -\u0026gt; General -\u0026gt; \u0026lsquo;Use of ATL\u0026rsquo; in VS 2005 project properties) and avoid the problem altogether. If you only have one module that uses ATL, this is always the best solution.\nThe less desirable solution is to add a manually-created manifest that specifies the desired ATL SxS assembly, but ignores the VC and MFC runtime DLLs. You\u0026rsquo;ll still need to decide whether to make ATL shared or private, and in either case you must distribute ATL with your application to ensure that it is available when your application is deployed. You can cheat, and let VS generate your manifest file (instruct it to not embed the file), then just edit the resulting .manifest file to remove references to the VC and MFC assemblies. For example, here\u0026rsquo;s one that I generated (you\u0026rsquo;ll need to generate your own to ensure that the manifest matches the version you are redistributing):\n\u0026lt;?xml version=\u0026ldquo;1.0\u0026rdquo; encoding=\u0026ldquo;UTF-8\u0026rdquo; standalone=\u0026ldquo;yes\u0026rdquo;?\u0026gt;\n\u0026lt;assembly xmlns=\u0026ldquo;urn:schemas-microsoft-com:asm.v1\u0026rdquo; manifestversion=\u0026ldquo;1.0\u0026rdquo;\u0026gt;\n\u0026lt;dependency\u0026gt;\n\u0026lt;dependentassembly\u0026gt;\n\u0026lt;assemblyidentity type=\u0026ldquo;win32\u0026rdquo; name=\u0026ldquo;Microsoft.VC80.ATL\u0026rdquo; version=\u0026ldquo;8.0.50727.762\u0026rdquo; processorarchitecture=\u0026ldquo;x86\u0026rdquo; publickeytoken=\u0026ldquo;1fc8b3b9a1e18e3b\u0026rdquo;\u0026gt;\n\u0026lt;/assemblyidentity\u0026gt;\n\u0026lt;/dependentassembly\u0026gt;\n\u0026lt;/dependency\u0026gt;\n\u0026lt;/assembly\u0026gt;\nIn my work, I\u0026rsquo;ve had very little need for manifests. The VC optimizer is able to strip the unused portions of statically linked ATL out of your code, leaving a much smaller footprint than the entire assembly would require. This eliminates the need to redistribute ATL with your application, thus reducing the overall potential for deployment issues. Nevertheless, there are exceptions to every rule, and your mileage may vary.\n","permalink":"https://www.manusoft.com/archive/blog/my-manusoft-manifest-manifesto/","summary":"\u003cp\u003eWith the advent of Visual Studio 2005 and automatically generated manifest files, the topic of when and how to use manifest files comes up occasionally. Since a default ObjectARX wizard generated project in Visual Studio 2005 generates an embedded manifest by default, most people don\u0026rsquo;t even think about it. Of course that was the whole idea \u0026ndash; the manifest would ensure that the correct dependent DLLs get loaded, and voila, no \u003cem\u003eneed\u003c/em\u003e to think about it. One of my programming axioms applies in this case: \u003ca href=\"http://en.wikipedia.org/wiki/TANSTAAFL\"\u003eTANSTAAFL\u003c/a\u003e.\u003cbr /\u003e\u003cbr /\u003eThe problem is that ObjectARX applications are not in charge. AutoCAD is in charge, and it will decide which VC runtime and MFC runtime DLLs to load. If your ObjectARX application loads a different VC or MFC runtime than the ones AutoCAD is using, you\u0026rsquo;ll encounter big problems. I\u0026rsquo;ve always advised disabling the manifest completely (see my \u003ca href=\"/develop/objectarx/vc-build-hook/\"\u003eObjectARX Tips\u003c/a\u003e page) to avoid such a possibility. Unfortunately, there\u0026rsquo;s a catch.\u003cbr /\u003e\u003cbr /\u003eThe problem is that linking to the ATL80.DLL file isn\u0026rsquo;t possible by just disabling the manifest and doing nothing more. ATL is now a side-by-side (SxS) assembly, and it no longer lives on the Windows support path, so a standard un-manifested DLL won\u0026rsquo;t be able to find it. The preferred solution is to link statically to ATL (see Configuration -\u0026gt; General -\u0026gt; \u0026lsquo;Use of ATL\u0026rsquo; in VS 2005 project properties) and avoid the problem altogether. If you only have one module that uses ATL, this is always the best solution.\u003cbr /\u003e\u003cbr /\u003eThe less desirable solution is to add a \u003cstrong\u003e\u003cem\u003emanually-created\u003c/em\u003e\u003c/strong\u003e manifest that specifies the desired ATL SxS assembly, but ignores the VC and MFC runtime DLLs. You\u0026rsquo;ll still need to decide whether to make ATL \u003ca href=\"https://learn.microsoft.com/en-us/cpp/build/concepts-of-isolated-applications-and-side-by-side-assemblies\"\u003eshared or private\u003c/a\u003e, and in either case you \u003cstrong\u003e\u003cem\u003emust\u003c/em\u003e\u003c/strong\u003e \u003ca href=\"https://www.microsoft.com/en-us/download/details.aspx?id=55984\"\u003edistribute ATL with your application\u003c/a\u003e to ensure that it is available when your application is deployed. You can cheat, and let VS generate your manifest file (instruct it to \u003cstrong\u003e\u003cem\u003enot\u003c/em\u003e\u003c/strong\u003e embed the file), then just edit the resulting .manifest file to remove references to the VC and MFC assemblies. For example, here\u0026rsquo;s one that I generated (you\u0026rsquo;ll need to generate your own to ensure that the manifest matches the version you are redistributing):\u003cbr /\u003e\u003cblockquote\u003e\u003cbr /\u003e\u0026lt;?xml version=\u0026ldquo;1.0\u0026rdquo; encoding=\u0026ldquo;UTF-8\u0026rdquo; standalone=\u0026ldquo;yes\u0026rdquo;?\u0026gt;\u003cbr /\u003e \u0026lt;assembly xmlns=\u0026ldquo;urn:schemas-microsoft-com:asm.v1\u0026rdquo; manifestversion=\u0026ldquo;1.0\u0026rdquo;\u0026gt;\u003cbr /\u003e  \u0026lt;dependency\u0026gt;\u003cbr /\u003e   \u0026lt;dependentassembly\u0026gt;\u003cbr /\u003e    \u0026lt;assemblyidentity type=\u0026ldquo;win32\u0026rdquo; name=\u0026ldquo;Microsoft.VC80.ATL\u0026rdquo; version=\u0026ldquo;8.0.50727.762\u0026rdquo; processorarchitecture=\u0026ldquo;x86\u0026rdquo; publickeytoken=\u0026ldquo;1fc8b3b9a1e18e3b\u0026rdquo;\u0026gt;\u003cbr /\u003e\u0026lt;/assemblyidentity\u0026gt;\u003cbr /\u003e  \u0026lt;/dependentassembly\u0026gt;\u003cbr /\u003e \u0026lt;/dependency\u0026gt;\u003cbr /\u003e\u0026lt;/assembly\u0026gt;\u003cbr /\u003e\u003c/blockquote\u003e\u003cbr /\u003eIn my work, I\u0026rsquo;ve had very little need for manifests. The VC optimizer is able to strip the unused portions of statically linked ATL out of your code, leaving a much smaller footprint than the entire assembly would require. This eliminates the need to redistribute ATL with your application, thus reducing the overall potential for deployment issues. Nevertheless, there are exceptions to every rule, and your mileage may vary.\u003c/p\u003e","title":"My ManuSoft manifest manifesto"},{"content":"(continued from Part I)\nThe kind of web site I wanted to create is usually built on top of a Content Management System (CMS) that becomes the administrative user interface as well as the framework for web pages that get served to web site visitors. The first thing I learned is that there are thousands of CMS products floating about the internet, from simple \u0026ldquo;guest book\u0026rdquo; type scripts to full blown corporate extranet management systems designed for use by tens of thousands of employees and customers. I\u0026rsquo;ve also been looking for an excuse to learn ASP.NET, so I decided to narrow my search to CMS software that was based on ASP.NET. Finally, the software had to be free or very inexpensive.\nBased on these criteria, I narrowed the choices down to Community Server [now Telligent Community], DotNetNuke, Rainbow Portal (http://www.rainbowportal.net/), and newcomer FlexCMS (http://www.flexcms.co.uk/). Community Server is free for personal use, but for my planned use it would have cost several hundred dollars \u0026ndash; probably out of my range, but I still downloaded and tested it for comparison purposes. DotNetNuke is open source based on a permissive BSD-style license (free to use or modify for any purpose), plus it has a large and relatively mature user base. Rainbow Portal is released under the LPGL license, with discussions currently underway about changing the license. Both DotNetNuke and Rainbow Portal are based on a Microsoft sponsored sample ASP application called IBuySpy (http://samples.gotdotnet.com/quickstart/aspplus/doc/ibuyspy.aspx). Rainbow Portal seemed more polished, but I ran into some limitations with both pretty quickly. FlexCMS, while seemingly more logically designed and built from the ground up on the latest version of ASP.NET, was clearly lacking a lot of features that the other two free packages included. In the end I chose DotNetNuke because it had a more permissive license and a larger user base to draw support from (I found the documentation for all these packages fairly useless, so peer support was a must).\nNext step was finding an inexpensive web host that would enable me to install, run, and administer an ASP.NET/SQL Server application. If you\u0026rsquo;ve ever looked for a web host, you\u0026rsquo;ll know that it\u0026rsquo;s sometimes difficult to find one that provides the remote management capabilities and server software that you need (in my case ASP.NET and SQL Server running on IIS (http://www.microsoft.com/iis), which are less common than PHP/MySQL solutions running on Linux). I\u0026rsquo;m aware of several quality hosting companies. Pair networks usually gets good reviews, but they don\u0026rsquo;t do Windows. I\u0026rsquo;ve used GoDaddy (http://affiliate.godaddy.com/redirect/6384D5883DA8C2CEA1430BA0B35AFB9B937B2FB602FAB7C07687102649811256) before for registering domain names without any problems, so I headed there to check out their prices and policies for hosting plans. When I saw that they offered a Windows based economy plan with plenty of storage space and bandwidth for $3.19 per month, I decided to just register my new domain name and sign up for GoDaddy\u0026rsquo;s shared hosting plan (http://affiliate.godaddy.com/redirect/6384D5883DA8C2CEA1430BA0B35AFB9B937B2FB602FAB7C07687102649811256) on the spot, and be done with it.\nTotal cost for DotNetNuke CMS software, 2 years of web hosting, and a new domain name registered for two years: $88. Not bad. In Part III I\u0026rsquo;ll show you how DotNetNuke works.\n","permalink":"https://www.manusoft.com/archive/blog/ill-take-web-sites-for-200-alex-part-ii/","summary":"\u003cp\u003e(continued from \u003ca href=\"/2007/01/ill-take-web-sites-for-200-alex-part-i.htm\"\u003ePart I\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eThe kind of web site I wanted to create is usually built on top of a \u003ca href=\"http://en.wikipedia.org/wiki/Comparison_of_content_management_systems\"\u003eContent Management System\u003c/a\u003e (CMS) that becomes the administrative user interface as well as the framework for web pages that get served to web site visitors. The first thing I learned is that there are \u003cem\u003ethousands\u003c/em\u003e of CMS products floating about the internet, from simple \u0026ldquo;guest book\u0026rdquo; type scripts to full blown corporate extranet management systems designed for use by tens of thousands of employees and customers. I\u0026rsquo;ve also been looking for an excuse to learn ASP.NET, so I decided to narrow my search to CMS software that was based on \u003ca href=\"https://dotnet.microsoft.com/en-us/apps/aspnet\"\u003eASP.NET\u003c/a\u003e. Finally, the software had to be free or very inexpensive.\u003c/p\u003e","title":"I'll take web sites for $200, Alex: Part II"},{"content":"I\u0026rsquo;m sure that by now all of you have heard about the latest \u0026ldquo;chain letter\u0026rdquo; circulating about the blogosphere. It sounds suspiciously like bloggers patting each other on the back. To wit, I\u0026rsquo;ve been \u0026ldquo;tagged\u0026rdquo; by Evan Yares (http://www.evanyares.com/display/ShowJournal?moduleId=399489\u0026categoryId=31338). On principle, and just because I like to be contrary, I refuse to pass this one on, but I\u0026rsquo;ll go part of the way since there is some redeeming social value to the premise. The five:\nI was a difficult child. I ran away from home routinely before I started Kindergarten. I still have memories of the summer just before my third birthday of almost daily forays with my dog \u0026ldquo;Shep\u0026rdquo; into the woods adjacent to my parents\u0026rsquo; property. Sometimes, after a dispute with my parents, I would take off deep into the woods plotting revenge. One day, after some altercation or other, I narrowly escaped my whip-wielding mother by diving under a barbed wire fence and racing into the woods before she could catch up. My mother spent hours searching for me, and finally spotted me hiding under some brambles. After rounding me up and taking me back home, mom tied me with a rope to a post outside our workshop until my father came home from work. When my father came home, he didn\u0026rsquo;t have the heart to punish me further.I was raised Amish. When I was 12, I installed a battery operated radio tuner in my basement workshop, and wired the output through a hidden network of wires (that included our hot water heating pipes as one side of the circuit) into a recessed wall outlet beside my bed so that I could listen to the radio discreetly from my bed through a small earpiece. Later I did something similar when my parents bought my first horse and buggy, by hiding the guts of a portable stereo under the seat.Amish children are expected to quit school after the 8th grade and begin working (traditionally on the family farm, although farming is becoming less common these days). I chose to continue my education by going on to high school while working evenings and summers to support myself. For this, I was ridiculed and called names in school, and my parents caught a lot of flack from their church elders for my actions (which they had very little control over). I chose not to go on to college after graduating in the top 5 of my class in high school.My first full time job was as a brick mason, following in my father\u0026rsquo;s footsteps. I did masonary and other construction work the last two summers of high school, and full time for a year or so after I graduated. One day a family friend called to ask if I would be interested in a \u0026ldquo;computer job\u0026rdquo; programming a CNC punch press. The company had unceremoniously fired the previous programmer and had nobody with the skills to replace him. My interview went something like \u0026ldquo;Do you know anything about computers?\u0026rdquo; \u0026ldquo;Yes.\u0026rdquo; \u0026ldquo;Can you start tomorrow?\u0026rdquo; It was at that company where I discovered AutoCAD, and the rest, as they say, is history.A few years ago, I played poker on a show broadcast across the United States on Fox SportsNet. The show was sponsored by UltimateBet.net (http://www.ultimatebet.net), an online poker site. The winner received 10 thousand dollars and a chance to play again for 200 thousand dollars. I got there by beating several thousand other players in a series of online tournaments. I placed third out of the six finalists at the table, so I walked away with nothing more than an all expense paid (and lavish) weekend in Los Angeles, not to mention the satisfaction of knowing my kids got to watch me on national TV.Go Buckeyes!\n","permalink":"https://www.manusoft.com/archive/blog/three-things-you-may-not-know-about-me/","summary":"\u003cp\u003eI\u0026rsquo;m sure that by now all of you have heard about the latest \u0026ldquo;chain letter\u0026rdquo; circulating about the blogosphere. It sounds suspiciously like bloggers patting each other on the back. To wit, I\u0026rsquo;ve been \u0026ldquo;tagged\u0026rdquo; by Evan Yares (\u003ca href=\"http://www.evanyares.com/display/ShowJournal?moduleId=399489\u0026amp;categoryId=31338%29\"\u003ehttp://www.evanyares.com/display/ShowJournal?moduleId=399489\u0026categoryId=31338)\u003c/a\u003e. On principle, and just because I like to be contrary, I refuse to pass this one on, but I\u0026rsquo;ll go part of the way since there is some redeeming social value to the premise. The five:\u003cbr /\u003e\u003col\u003e\u003cli\u003eI was a difficult child. I ran away from home routinely before I started Kindergarten. I still have memories of the summer just before my third birthday of almost daily forays with my dog \u0026ldquo;Shep\u0026rdquo; into the woods adjacent to my parents\u0026rsquo; property. Sometimes, after a dispute with my parents, I would take off deep into the woods plotting revenge. One day, after some altercation or other, I narrowly escaped my whip-wielding mother by diving under a barbed wire fence and racing into the woods before she could catch up. My mother spent hours searching for me, and finally spotted me hiding under some brambles. After rounding me up and taking me back home, mom tied me with a rope to a post outside our workshop until my father came home from work. When my father came home, he didn\u0026rsquo;t have the heart to punish me further.\u003c/li\u003e\u003cli\u003eI was raised \u003ca href=\"http://en.wikipedia.org/wiki/Amish\"\u003eAmish\u003c/a\u003e. When I was 12, I installed a battery operated radio tuner in my basement workshop, and wired the output through a hidden network of wires (that included our hot water heating pipes as one side of the circuit) into a recessed wall outlet beside my bed so that I could listen to the radio discreetly from my bed through a small earpiece. Later I did something similar when my parents bought my first horse and buggy, by hiding the guts of a portable stereo under the seat.\u003c/li\u003e\u003cli\u003eAmish children are expected to quit school after the 8th grade and begin working (traditionally on the family farm, although farming is becoming less common these days). I chose to continue my education by going on to high school while working evenings and summers to support myself. For this, I was ridiculed and called names in school, and my parents caught a lot of flack from their church elders for my actions (which they had very little control over). I chose not to go on to college after graduating in the top 5 of my class in high school.\u003c/li\u003e\u003cli\u003eMy first full time job was as a brick mason, following in my father\u0026rsquo;s footsteps. I did masonary and other construction work the last two summers of high school, and full time for a year or so after I graduated. One day a family friend called to ask if I would be interested in a \u0026ldquo;computer job\u0026rdquo; programming a CNC punch press. The company had unceremoniously fired the previous programmer and had nobody with the skills to replace him. My interview went something like \u0026ldquo;Do you know anything about computers?\u0026rdquo; \u0026ldquo;Yes.\u0026rdquo; \u0026ldquo;Can you start tomorrow?\u0026rdquo; It was at that company where I discovered AutoCAD, and the rest, as they say, is history.\u003c/li\u003e\u003cli\u003eA few years ago, I played poker on a show broadcast across the United States on Fox SportsNet. The show was sponsored by UltimateBet.net (\u003ca href=\"http://www.ultimatebet.net\"\u003ehttp://www.ultimatebet.net\u003c/a\u003e), an online poker site. The winner received 10 thousand dollars and a chance to play again for 200 thousand dollars. I got there by beating several thousand other players in a series of online tournaments. I placed third out of the six finalists at the table, so I walked away with nothing more than an all expense paid (and lavish) weekend in Los Angeles, not to mention the satisfaction of knowing my kids got to watch me on national TV.\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eGo Buckeyes!\u003c/p\u003e","title":"Five things you may not know about me"},{"content":"I\u0026rsquo;m one of those throwbacks that learned HTML by typing it in Notepad. I\u0026rsquo;ve since moved up to using the Visual Studio editor; it does syntax coloring, error highlighting, and has a \u0026ldquo;design\u0026rdquo; mode for previewing the page, yet it\u0026rsquo;s a very utilitarian editor that I feel comfortable with. I do use FrontPage when I need to manage connections between multiple HTML pages, but mostly in raw HTML mode. When I use WYSIWYG design mode in FrontPage, I inevitably end up cleaning out a lot of unnecessary junk that it includes in the generated HTML. I think it\u0026rsquo;s fair to say that my obsession with clean HTML results in utilitarian, functional, and standards conformant presentations \u0026ndash; but with a decided lack of graphic appeal.\nThe ManuSoft and CADLock web sites are examples of this utilitarian approach. The ManuSoft site uses no fancy graphics and relies very little on client side scripting, and it supports a hierarchical navigation system using only standard hyperlinks. I like that minimalist approach, but the price for clean HTML being served to clients is a lot of work on the server to maintain the site. As a result, I don\u0026rsquo;t update the site very often because it\u0026rsquo;s just too difficult.\nThis blog was the first step toward realizing a goal of making it easier to add new content. After all, the raison d\u0026rsquo;être of blogs is to minimize the latency between the writer\u0026rsquo;s stream of consciousness and words on the web by making it irresistibly easy to add new content. This is precisely why blogs have become so popular.\nUnfortunately, I soon found limitations with my blog. Tabular lists of data still require manual HTML input, it is difficult to customize the content area outside the individual posts on the blog page, and most aspects of the hosted blog software are outside my control. I wanted more.\nThe Autodesk vs. Open Design Alliance lawsuit gave me an excuse to take the next step: implement the \u0026ldquo;blog\u0026rdquo; concept across an entire web site with software that I control. So, I decided to swallow my pride and learn how to create an entire web site that would be so easy to update that I would actually update it frequently \u0026ndash; even if it meant messy HTML code. Stay tuned for Part II, choosing a hosting service and deciding which software to use.\n","permalink":"https://www.manusoft.com/archive/blog/ill-take-web-sites-for-200-alex-part-i/","summary":"\u003cp\u003eI\u0026rsquo;m one of those throwbacks that learned HTML by typing it in Notepad. I\u0026rsquo;ve since moved up to using the \u003ca href=\"https://visualstudio.microsoft.com/\"\u003eVisual Studio\u003c/a\u003e editor; it does syntax coloring, error highlighting, and has a \u0026ldquo;design\u0026rdquo; mode for previewing the page, yet it\u0026rsquo;s a very utilitarian editor that I feel comfortable with. I do use \u003ca href=\"http://en.wikipedia.org/wiki/Microsoft_FrontPage\"\u003eFrontPage\u003c/a\u003e when I need to manage connections between multiple HTML pages, but mostly in raw HTML mode. When I use \u003ca href=\"http://en.wikipedia.org/wiki/WYSIWYG\"\u003eWYSIWYG\u003c/a\u003e design mode in FrontPage, I inevitably end up cleaning out a lot of unnecessary junk that it includes in the generated HTML. I think it\u0026rsquo;s fair to say that my obsession with clean HTML results in utilitarian, functional, and standards conformant presentations \u0026ndash; but with a decided lack of graphic appeal.\u003cbr /\u003e\u003cbr /\u003eThe \u003ca href=\"http://www.manusoft.com/\"\u003eManuSoft\u003c/a\u003e and \u003ca href=\"https://web.archive.org/web/2010/http://www.cadlock.com/\"\u003eCADLock\u003c/a\u003e web sites are examples of this utilitarian approach. The ManuSoft site uses no fancy graphics and relies very little on client side scripting, and it supports a hierarchical navigation system using only standard hyperlinks. I like that minimalist approach, but the price for clean HTML being served to clients is a lot of work on the server to maintain the site. As a result, I don\u0026rsquo;t update the site very often because it\u0026rsquo;s just too difficult.\u003cbr /\u003e\u003cbr /\u003eThis blog was the first step toward realizing a goal of making it easier to add new content. After all, the raison d\u0026rsquo;être of blogs is to minimize the latency between the writer\u0026rsquo;s stream of consciousness and words on the web by making it irresistibly easy to add new content. This is precisely why blogs have become so popular.\u003cbr /\u003e\u003cbr /\u003eUnfortunately, I soon found limitations with my blog. Tabular lists of data still require manual HTML input, it is difficult to customize the content area outside the individual posts on the blog page, and most aspects of the hosted blog software are outside my control. I wanted more.\u003cbr /\u003e\u003cbr /\u003eThe \u003ca href=\"https://web.archive.org/web/2010/http://www.cadcourt.com/\"\u003eAutodesk vs. Open Design Alliance lawsuit\u003c/a\u003e gave me an excuse to take the next step: implement the \u0026ldquo;blog\u0026rdquo; concept across an entire web site with software that I control. So, I decided to swallow my pride and learn how to create an entire web site that would be so easy to update that I would actually update it frequently \u0026ndash; even if it meant messy HTML code. Stay tuned for Part II, choosing a hosting service and deciding which software to use.\u003c/p\u003e","title":"I'll take web sites for $200, Alex: Part I"},{"content":"Did you know that Autodesk is offering a promotional upgrade price to AutoCAD LT users until January 19th? Check out http://www.adskhost.net/43404/solution.php. According to that web page, you can upgrade an AutoCAD LT 2004/2005/2006 license to any one of several AutoCAD 2007 based software offerings from AutoCAD 2007 to Inventor Series \u0026ndash; for $1995. If you have an LT license, now might be a good time to upgrade it.\n","permalink":"https://www.manusoft.com/archive/blog/autocad-lt-upgrade-windfall/","summary":"\u003cp\u003eDid you know that Autodesk is offering a promotional upgrade price to AutoCAD LT users until January 19th? Check out \u003ca href=\"http://www.adskhost.net/43404/solution.php\"\u003ehttp://www.adskhost.net/43404/solution.php\u003c/a\u003e. According to that web page, you can upgrade an AutoCAD LT 2004/2005/2006 license to any one of several AutoCAD 2007 based software offerings from AutoCAD 2007 to Inventor Series \u0026ndash; for $1995. If you have an LT license, now might be a good time to upgrade it.\u003c/p\u003e","title":"AutoCAD LT Upgrade Windfall"},{"content":"While the rest of you were busy enjoying the holiday break, I\u0026rsquo;ve had my nose to the grindstone. I had been looking for an opportunity to learn more about ASP.NET and web site content management, and the Autodesk vs. ODA web site that I started recently was a perfect opportunity. After 3 weeks of sometimes frustrating adventures, the new site is now live (although still not quite finished).\nTotal cost of the site, including hosting for 2 years? About $200 and a lot of lost sleep. Over the next week or so I will be documenting some of the things I learned along the way.\n","permalink":"https://www.manusoft.com/archive/blog/coming-up-for-air/","summary":"\u003cp\u003eWhile the rest of you were busy enjoying the holiday break, I\u0026rsquo;ve had my nose to the grindstone. I had been looking for an opportunity to learn more about ASP.NET and web site content management, and the \u003ca href=\"https://web.archive.org/web/2010/http://www.cadcourt.com/\"\u003eAutodesk vs. ODA\u003c/a\u003e web site that I started recently was a perfect opportunity. After 3 weeks of sometimes frustrating adventures, the new site is now live (although still not quite finished).\u003cbr /\u003e\u003cbr /\u003eTotal cost of the site, including hosting for 2 years? About $200 and a lot of lost sleep. Over the next week or so I will be documenting some of the things I learned along the way.\u003c/p\u003e","title":"Coming up for air"},{"content":"\u0026lsquo;Twas the week before Christmas, and all through the city\nHighways congested, tempers were tested; the sight wasn\u0026rsquo;t pretty\nThe stores opened early, and stayed open late\nRegisters rang, loudspeakers sang; as I tempted fate\nI proceeded with caution, threading the aisles\nSqueaking wheels, dubious deals; all the new styles\nI grabbed toys for the boys, and a gift for my niece\nLoaded my cart, doing my part; to help the Chinese\nI rushed to the checkout, avoiding a wreck\nTeeming masses, slow as molasses; all writing a check\nAfter walking a mile, got it all in my car\nLoaded for bear, gasping for air; I didn\u0026rsquo;t get far\nAfter dodging and weaving, with skill and deft\nAlmost out, stuck en route; they\u0026rsquo;re all turning left!\nHappy Holidays Everyone!\n","permalink":"https://www.manusoft.com/archive/blog/ode-to-holiday-shopping-2006/","summary":"\u003cp\u003e\u003cem\u003e\u0026lsquo;Twas the week before Christmas, and all through the city\u003c/em\u003e\u003cbr /\u003e\u003cem\u003eHighways congested, tempers were tested; the sight wasn\u0026rsquo;t pretty\u003c/em\u003e\u003cbr /\u003e\u003cem\u003e\u003c/em\u003e\u003cbr /\u003e\u003cem\u003eThe stores opened early, and stayed open late\u003c/em\u003e\u003cbr /\u003e\u003cem\u003eRegisters rang, loudspeakers sang; as I tempted fate\u003c/em\u003e\u003cbr /\u003e\u003cem\u003e\u003c/em\u003e\u003cbr /\u003e\u003cem\u003eI proceeded with caution, threading the aisles\u003c/em\u003e\u003cbr /\u003e\u003cem\u003eSqueaking wheels, dubious deals; all the new styles\u003c/em\u003e\u003cbr /\u003e\u003cem\u003e\u003c/em\u003e\u003cbr /\u003e\u003cem\u003eI grabbed toys for the boys, and a gift for my niece\u003c/em\u003e\u003cbr /\u003e\u003cem\u003eLoaded my cart, doing my part; to help the Chinese\u003c/em\u003e\u003cbr /\u003e\u003cem\u003e\u003c/em\u003e\u003cbr /\u003e\u003cem\u003eI rushed to the checkout, avoiding a wreck\u003c/em\u003e\u003cbr /\u003e\u003cem\u003eTeeming masses, slow as molasses; all writing a check\u003c/em\u003e\u003cbr /\u003e\u003cem\u003e\u003c/em\u003e\u003cbr /\u003e\u003cem\u003eAfter walking a mile, got it all in my car\u003c/em\u003e\u003cbr /\u003e\u003cem\u003eLoaded for bear, gasping for air; I didn\u0026rsquo;t get far\u003c/em\u003e\u003cbr /\u003e\u003cem\u003e\u003c/em\u003e\u003cbr /\u003e\u003cem\u003eAfter dodging and weaving, with skill and deft\u003c/em\u003e\u003cbr /\u003e\u003cem\u003eAlmost out, stuck en route; they\u0026rsquo;re all turning left!\u003c/em\u003e\u003cbr /\u003e\u003cbr /\u003eHappy Holidays Everyone!\u003c/p\u003e","title":"Ode to Holiday Shopping, 2006"},{"content":"I\u0026rsquo;ve installed Visual Studio 2005 SP1 and have been busy testing all my projects to make sure they didn\u0026rsquo;t break. Microsoft did fix at least one of the bugs I reported (the resource editor choked on resource strings that contained an embedded NULL character), but the IDE still crashes fairly consistently if I initiate a large solution build while the Intellisense database is being rebuilt. SP1 also managed to break my VCBuildHook utility, so I\u0026rsquo;ve uploaded an updated version (2.0.3.0) for use with SP1.\n","permalink":"https://www.manusoft.com/archive/blog/vcbuildhook-updated-for-vs-2005-sp1/","summary":"\u003cp\u003eI\u0026rsquo;ve installed \u003ca href=\"/2006/12/visual-studio-2005-service-pack-1-is.htm\"\u003eVisual Studio 2005 SP1\u003c/a\u003e and have been busy testing all my projects to make sure they didn\u0026rsquo;t break. \u003ca href=\"http://www.microsoft.com\"\u003eMicrosoft\u003c/a\u003e did fix at least one of the bugs I reported (the resource editor choked on resource strings that contained an embedded NULL character), but the IDE still crashes fairly consistently if I initiate a large solution build while the Intellisense database is being rebuilt. SP1 also managed to break my \u003ca href=\"/develop/objectarx/vc-build-hook/\"\u003eVCBuildHook utility\u003c/a\u003e, so I\u0026rsquo;ve uploaded an updated version (2.0.3.0) for use with SP1.\u003c/p\u003e","title":"VCBuildHook updated for VS 2005 SP1"},{"content":"Finally, the long awaited service pack 1 for Visual Studio 2005 is released! The service pack has been in the pipeline since soon after Visual Studio 2005 shipped last November, with release dates slipping month after month. The latest official release date was announced as \u0026ldquo;early 2007\u0026rdquo;. Perhaps this was an intentional attempt to alleviate some of the waiting pains with a suprise release (or maybe just the Microsoft rumor mill on autopilot).\nBe prepared for a long install. The download page warns that it could take an hour or more to verify digital signatures before the service pack installation even begins.\n","permalink":"https://www.manusoft.com/archive/blog/visual-studio-2005-service-pack-1-is/","summary":"\u003cp\u003eFinally, the long awaited \u003ca href=\"https://visualstudio.microsoft.com/support/vs2005sp1\"\u003eservice pack 1 for Visual Studio 2005\u003c/a\u003e is released! The service pack has been in the pipeline since soon after Visual Studio 2005 shipped last November, with release dates slipping month after month. The latest official release date was announced as \u0026ldquo;early 2007\u0026rdquo;. Perhaps this was an intentional attempt to alleviate some of the waiting pains with a suprise release (or maybe just the Microsoft rumor mill on autopilot).\u003cbr /\u003e\u003cbr /\u003eBe prepared for a long install. The download page warns that it could take an hour or more to verify digital signatures before the service pack installation even begins.\u003c/p\u003e","title":"Visual Studio 2005 Service Pack 1 is here!"},{"content":"The recently filed lawsuit has been a hot topic lately, and I\u0026rsquo;ve been following it along with everyone else. As a little side project, I decided to create a parallel blog dedicated to the ongoing battle between Autodesk and ODA. The new blog is at http://www.cadcourt.com.\nThe site is still a work in progress, but I hope you\u0026rsquo;ll check it out, and offer suggestions for improvements. Click on the Lawsuit Tracker link to view all the court documents in the case, and subscribe to the site\u0026rsquo;s feed to stay informed of new developments.\n","permalink":"https://www.manusoft.com/archive/blog/autodesk-vs-oda/","summary":"\u003cp\u003eThe recently filed lawsuit has been a hot topic lately, and I\u0026rsquo;ve been following it along with everyone else. As a little side project, I decided to create a parallel blog dedicated to the ongoing battle between Autodesk and ODA. The new blog is at \u003ca href=\"https://web.archive.org/web/2010/http://www.cadcourt.com/\"\u003e\u003ca href=\"http://www.cadcourt.com\"\u003ehttp://www.cadcourt.com\u003c/a\u003e\u003c/a\u003e.\u003cbr /\u003e\u003cbr /\u003eThe site is still a work in progress, but I hope you\u0026rsquo;ll check it out, and offer suggestions for improvements. Click on the Lawsuit Tracker link to view all the court documents in the case, and subscribe to the site\u0026rsquo;s feed to stay informed of new developments.\u003c/p\u003e","title":"Autodesk vs. ODA"},{"content":"No matter the communication protocol used to transmit it, most information gets packaged into a file format for consumption. File formats are like virtual checkpoints along the information superhighway, and we would do well to pay attention to who is manning the gates.\nWe\u0026rsquo;ve heard a lot of noise lately about the need for \u0026ldquo;open\u0026rdquo; file formats, but documenting a file format is not the same thing as relinquishing control of the format. The key consideration is who decides when and how the file format changes. This is a dirty little secret about file formats that you are not supposed to know. By controlling when and how a file format changes, an organization can maintain a mindshare monopoly over consumers of its file format \u0026ndash; even when the format is \u0026ldquo;open\u0026rdquo;.\nIt may be that the relative anarchy of the internet has given us a false sense of security. We happily use \u0026ldquo;open\u0026rdquo; formats like PDF, DWF, DXF, HTM, and others with relatively little concern about who controls them, but all of those formats (HTM perhaps to a lesser degree) are controlled by corporations whose allegiance is first and foremost to their shareholders. For example, PDF is \u0026ldquo;open\u0026rdquo;, but did you know that third party developers need a digital ID signed by Adobe in order to create forms-enabled PDF files that can be opened in the free Acrobat Reader?\nIn April of 2006, Autodesk filed a trademark application for the word \u0026ldquo;DWG\u0026rdquo; when used to refer to DWG files. This may seem benign on the surface, but if successful it will give Autodesk more legal leverage in \u0026ldquo;defending\u0026rdquo; the file format. A few weeks ago, Autodesk filed a trademark infringement lawsuit (http://www.cadcourt.com/Docket/206cv01637AutodeskvODA.aspx) against the Open Design Alliance claiming that the ODA infringed their \u0026ldquo;AUTODESK\u0026rdquo; trademark by embedding the mark inside DWG files created with its DWGdirect libraries.\nMuch has been written by the pundits about the pros and cons of the ODA lawsuit, and the Electronic Frontier Foundation predictably suggests that Autodesk is using trademark claims to stymie interoperability, but the bottom line is that the contention centers around a file format \u0026ndash; a file format that Autodesk considers valuable enough to wage war over.\n","permalink":"https://www.manusoft.com/archive/blog/secret-world-of-file-formats/","summary":"\u003cp\u003eNo matter the communication protocol used to transmit it, most information gets packaged into a file format for consumption. File formats are like virtual checkpoints along the information superhighway, and we would do well to pay attention to who is manning the gates.\u003cbr /\u003e\u003cbr /\u003eWe\u0026rsquo;ve heard a lot of noise lately about the need for \u0026ldquo;open\u0026rdquo; file formats, but documenting a file format is not the same thing as relinquishing control of the format. The key consideration is who decides when and how the file format changes. This is a dirty little secret about file formats that you are not supposed to know. By controlling when and how a file format changes, an organization can maintain a mindshare monopoly over consumers of its file format \u0026ndash; even when the format is \u0026ldquo;open\u0026rdquo;.\u003cbr /\u003e\u003cbr /\u003eIt may be that the relative anarchy of the internet has given us a false sense of security. We happily use \u0026ldquo;open\u0026rdquo; formats like PDF, DWF, DXF, HTM, and others with relatively little concern about who controls them, but all of those formats (HTM perhaps to a lesser degree) are controlled by corporations whose allegiance is first and foremost to their shareholders. For example, PDF is \u0026ldquo;open\u0026rdquo;, but did you know that third party developers need a digital ID signed by \u003ca href=\"http://www.adobe.com/\"\u003eAdobe\u003c/a\u003e in order to create forms-enabled PDF files that can be opened in the free Acrobat Reader?\u003cbr /\u003e\u003cbr /\u003eIn April of 2006, Autodesk filed a \u003ca href=\"http://tarr.uspto.gov/servlet/tarr?regser=serial\u0026amp;entry=78852798\"\u003etrademark application for the word \u0026ldquo;DWG\u0026rdquo;\u003c/a\u003e when used to refer to DWG files. This may seem benign on the surface, but if successful it will give Autodesk more legal leverage in \u0026ldquo;defending\u0026rdquo; the file format. A few weeks ago, \u003ca href=\"http://www.autodesk.com/\"\u003eAutodesk\u003c/a\u003e filed a trademark infringement lawsuit (\u003ca href=\"https://web.archive.org/web/2010/http://www.cadcourt.com/Docket/206cv01637AutodeskvODA.aspx\"\u003e\u003ca href=\"http://www.cadcourt.com/Docket/206cv01637AutodeskvODA.aspx\"\u003ehttp://www.cadcourt.com/Docket/206cv01637AutodeskvODA.aspx\u003c/a\u003e\u003c/a\u003e) against the \u003ca href=\"http://www.opendesign.com/\"\u003eOpen Design Alliance\u003c/a\u003e claiming that the ODA infringed their \u0026ldquo;AUTODESK\u0026rdquo; trademark by embedding the mark inside DWG files created with its DWGdirect libraries.\u003cbr /\u003e\u003cbr /\u003eMuch has been written by the pundits about the pros and cons of the ODA lawsuit, and the \u003ca href=\"http://www.eff.org/\"\u003eElectronic Frontier Foundation\u003c/a\u003e predictably suggests that Autodesk is \u003ca href=\"http://www.eff.org/deeplinks/archives/005038.php\"\u003eusing trademark claims to stymie interoperability\u003c/a\u003e, but the bottom line is that the contention centers around a file format \u0026ndash; a file format that Autodesk considers valuable enough to wage war over.\u003c/p\u003e","title":"The secret world of file formats"},{"content":"If you\u0026rsquo;ve been programming with ObjectARX for a while, you already know that each version of the ObjectARX SDK only works with a specific version of Visual Studio. Mazhar Basa touches on the subject in his article Components of ObjectARX Applications (http://www.dailyautocad.com/objectarx/components-of-objectarx-applications/). My VCBuildHook utility makes it possible to build for multiple target AutoCAD versions from a single Visual Studio 2005 solution, but this utility still needs the older versions of Visual Studio to be installed on the same system in order to perform its magic.\nThe problem is, legitimate licenses of older versions of Visual Studio are hard to come by. Back in the Visual Studio .NET 2003 days, you could purchase a new license of VS 2003, then get a free license downgrade from Microsoft that allowed you to install Visual Studio 2002 side by side on the same system. That combination allowed you to target AutoCAD versions as far back as AutoCAD 2004. Unfortunately, Microsoft stopped offering the VS 2002 downgrade license when Visual Studio 2005 began shipping in November of 2006.\nThe end result is that new ObjectARX programmers are faced with a dilemma if they need to target anything older than AutoCAD 2007. One of the attendees at my \u0026ldquo;High-Octane ObjectARX\u0026rdquo; class at AU 2006 reminded me that MSDN (Microsoft Developer Network) members can download older versions of Visual Studio from the MSDN subscriber download center.\nI have verified that Visual Studio .NET 2002 (VS 2002) is available for download to MSDN Professional subscribers, but I could not find Visual Studio 6.0, which is required to target AutoCAD 2000 - 2002. Visual Studio 4.2 (required for AutoCAD R14) is available though, so maybe I\u0026rsquo;m just not looking in the right place.\nIf you are a professional software developer, whether commercial or in-house, you should consider subscribing to MSDN for various reasons. If you\u0026rsquo;re an ObjectARX programmer and need to target older versions of AutoCAD, MSDN may be the only way to obtain the older Visual Studio build tools and libraries that you\u0026rsquo;ll need.\n","permalink":"https://www.manusoft.com/archive/blog/visual-studio-version-hunt/","summary":"\u003cp\u003eIf you\u0026rsquo;ve been programming with ObjectARX for a while, you already know that each version of the \u003ca href=\"https://www.autodesk.com/objectarx\"\u003eObjectARX SDK\u003c/a\u003e only works with a specific version of \u003ca href=\"https://visualstudio.microsoft.com/\"\u003eVisual Studio\u003c/a\u003e. Mazhar Basa touches on the subject in his article Components of ObjectARX Applications (\u003ca href=\"http://www.dailyautocad.com/objectarx/components-of-objectarx-applications/%29\"\u003ehttp://www.dailyautocad.com/objectarx/components-of-objectarx-applications/)\u003c/a\u003e. My \u003ca href=\"/develop/objectarx/vc-build-hook/\"\u003eVCBuildHook utility\u003c/a\u003e makes it possible to build for multiple target AutoCAD versions from a single Visual Studio 2005 solution, but this utility still needs the older versions of Visual Studio to be installed on the same system in order to perform its magic.\u003cbr /\u003e\u003cbr /\u003eThe problem is, legitimate licenses of older versions of Visual Studio are hard to come by. Back in the Visual Studio .NET 2003 days, you could purchase a new license of VS 2003, then get a free license downgrade from Microsoft that allowed you to install Visual Studio 2002 side by side on the same system. That combination allowed you to target AutoCAD versions as far back as AutoCAD 2004. Unfortunately, Microsoft stopped offering the VS 2002 downgrade license when Visual Studio 2005 began shipping in November of 2006.\u003cbr /\u003e\u003cbr /\u003eThe end result is that new ObjectARX programmers are faced with a dilemma if they need to target anything older than AutoCAD 2007. One of the attendees at my \u0026ldquo;High-Octane ObjectARX\u0026rdquo; class at \u003ca href=\"https://www.autodesk.com/autodesk-university/\"\u003eAU 2006\u003c/a\u003e reminded me that \u003ca href=\"https://learn.microsoft.com/en-us/\"\u003eMSDN\u003c/a\u003e (Microsoft Developer Network) members can download older versions of Visual Studio from the MSDN subscriber download center.\u003cbr /\u003e\u003cbr /\u003eI have verified that Visual Studio .NET 2002 (VS 2002) is available for download to MSDN Professional subscribers, but I could not find Visual Studio 6.0, which is required to target AutoCAD 2000 - 2002. Visual Studio 4.2 (required for AutoCAD R14) is available though, so maybe I\u0026rsquo;m just not looking in the right place.\u003cbr /\u003e\u003cbr /\u003eIf you are a professional software developer, whether commercial or in-house, you should consider subscribing to \u003ca href=\"https://learn.microsoft.com/en-us/\"\u003eMSDN\u003c/a\u003e for various reasons. If you\u0026rsquo;re an ObjectARX programmer and need to target older versions of AutoCAD, MSDN may be the only way to obtain the older Visual Studio build tools and libraries that you\u0026rsquo;ll need.\u003c/p\u003e","title":"Visual Studio Version Hunt"},{"content":"Not according to the press release (http://pressreleases.autodesk.com/index.php?s=118\u0026item=161). Vista (and .NET 3.0) includes a built-in XPS Viewer (http://www.microsoft.com/whdc/xps/default.mspx) (also available for Windows XP SP2 and Windows Server 2003), which will view any XPS format (http://www.microsoft.com/whdc/xps/downloads.mspx) file. Apparently Autodesk plans to add support for output to XPS format in the future, and this output will be called DWFx \u0026ndash; a new file format. It\u0026rsquo;s not clear what the difference will be between DWFx and the output produced using the Microsoft XPS Document Writer (http://www.microsoft.com/whdc/xps/viewxps.mspx) that is already available.\nI installed the Microsoft XPS Document Writer and XPS Viewer on my Windows XP SP2 machine. Next, I started AutoCAD 2007 and opened \u0026ldquo;3D House.dwg\u0026rdquo; from the Sample folder. I then plotted this file to DWF, PDF, and XPS, with the following results:\nPlotterPlot TimeFile SizeDWF6 ePlot.pc37 seconds139 kbDWG To PDF.pc35 seconds165 kb\nMicrosoft XPS Document Writer34 seconds829 kb\nI\u0026rsquo;m not suggesting that these files all contain the same content, I\u0026rsquo;m merely suggesting that DWFx/XPS may have some undesirable tradeoffs in practice.\nThis whole issue about \u0026ldquo;native Vista support for DWF\u0026rdquo; may be nothing but smoke and mirrors. There is no guarantee that publishing CAD data in the XPS format will be efficient. So what will happen if users can choose between a compact DWF, a slightly less compact but ubiquitous PDF, or a very space-hungry DWFx? Time will tell, but I think this issue of DWF in Vista is getting way to much spin and not enough critical analysis.\n","permalink":"https://www.manusoft.com/archive/blog/does-vista-really-open-dwf-files/","summary":"\u003cp\u003eNot according to the press release (\u003ca href=\"http://pressreleases.autodesk.com/index.php?s=118\u0026amp;item=161%29\"\u003ehttp://pressreleases.autodesk.com/index.php?s=118\u0026item=161)\u003c/a\u003e. Vista (and .NET 3.0) includes a built-in XPS Viewer (\u003ca href=\"http://www.microsoft.com/whdc/xps/default.mspx\"\u003ehttp://www.microsoft.com/whdc/xps/default.mspx\u003c/a\u003e) (also available for Windows XP SP2 and Windows Server 2003), which will view any XPS format (\u003ca href=\"http://www.microsoft.com/whdc/xps/downloads.mspx\"\u003ehttp://www.microsoft.com/whdc/xps/downloads.mspx\u003c/a\u003e) file. Apparently Autodesk plans to add support for output to XPS format in the future, and this output will be called DWFx \u0026ndash; a new file format. It\u0026rsquo;s not clear what the difference will be between DWFx and the output produced using the Microsoft XPS Document Writer (\u003ca href=\"http://www.microsoft.com/whdc/xps/viewxps.mspx\"\u003ehttp://www.microsoft.com/whdc/xps/viewxps.mspx\u003c/a\u003e) that is already available.\u003cbr /\u003e\u003cbr /\u003eI installed the Microsoft XPS Document Writer and XPS Viewer on my Windows XP SP2 machine. Next, I started AutoCAD 2007 and opened \u0026ldquo;3D House.dwg\u0026rdquo; from the Sample folder. I then plotted this file to DWF, PDF, and XPS, with the following results:\u003cbr /\u003e\u003cbr /\u003e\u003ctable cellpadding=\"2\" border=\"1\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003cth\u003ePlotter\u003c/th\u003e\u003cth\u003ePlot Time\u003c/th\u003e\u003cth\u003eFile Size\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eDWF6 ePlot.pc3\u003c/td\u003e\u003ctd\u003e7 seconds\u003c/td\u003e\u003ctd\u003e139 kb\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eDWG To PDF.pc3\u003c/td\u003e\u003ctd\u003e5 seconds\u003c/td\u003e\u003ctd\u003e165 kb\u003c/td\u003e\u003c/tr\u003e\u003cbr /\u003e\u003ctr\u003e\u003ctd\u003eMicrosoft XPS Document Writer\u003c/td\u003e\u003ctd\u003e34 seconds\u003c/td\u003e\u003ctd\u003e829 kb\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cbr /\u003eI\u0026rsquo;m not suggesting that these files all contain the same content, I\u0026rsquo;m merely suggesting that DWFx/XPS may have some undesirable tradeoffs in practice.\u003cbr /\u003e\u003cbr /\u003eThis whole issue about \u0026ldquo;native Vista support for DWF\u0026rdquo; may be nothing but smoke and mirrors. There is no guarantee that publishing CAD data in the XPS format will be efficient. So what will happen if users can choose between a compact DWF, a slightly less compact but ubiquitous PDF, or a very space-hungry DWFx? Time will tell, but I think this issue of DWF in Vista is getting way to much spin and not enough critical analysis.\u003c/p\u003e","title":"Does Vista really open DWF files?"},{"content":"Some years ago I wrote a small ObjectARX module named VLXLoad that loads a .vlx file of the same name and in the same directory as the .arx module. I never claimed credit for the utility, but now that I\u0026rsquo;ve released the source code, I guess I\u0026rsquo;ll have to own up to it.\nIf you\u0026rsquo;re interested in seeing an example of \u0026ldquo;dynamically\u0026rdquo; defining an ADS (lisp callable) function when an ObjectARX module loads, take a look at the VLXLoad source code. The code also demonstrates how to call the GetModuleFileName() WinAPI function to get the path of the executing module, and how to declare and use the undocumented ads_queueexpr() function.\nThere is no documentation (and probably no comments), so be warned. The download contains ready to build projects for Visual Studio 2002 (targeting AutoCAD 2004-2006) and Visual Studio 2005 (targeting AutoCAD 2007). These projects were both created with the corresponding ObjectARX wizard, and are included in the course materials for my \u0026ldquo;High-Octane ObjectARX\u0026rdquo; class at AU 2006 as an example of a simple (yet very useful) ObjectARX application.\nIf you just want to use VLXLoad, I\u0026rsquo;ve also made the original pre-built binaries available on my Freebies page. The idea is to rename the correct .arx file so it matches the name of your .vlx, then set up registry demand loading so that the .arx loads when AutoCAD starts. The .arx then loads the associated .vlx file, and voila, demand loading for .vlx files. Instructions for setting up demand loading have been posted on the \u0026rsquo;net in the past (and it is well documented in the ObjectARX SDK), so I won\u0026rsquo;t describe that here.\n","permalink":"https://www.manusoft.com/archive/blog/demand-loading-vlx-file/","summary":"\u003cp\u003eSome years ago I wrote a small ObjectARX module named VLXLoad that loads a .vlx file of the same name and in the same directory as the .arx module. I never claimed credit for the utility, but now that I\u0026rsquo;ve \u003ca href=\"/develop/objectarx/demand-load-vlx/\"\u003ereleased the source code\u003c/a\u003e, I guess I\u0026rsquo;ll have to own up to it.\u003c/p\u003e","title":"Demand Loading a VLX File"},{"content":"It may seem strange to some of you, but I consider myself an artist. Visual Studio is my canvas, and the keyboard is my paintbrush. This is why I wouldn\u0026rsquo;t survive in a stuffy corporate environment with committees, red tape, and politics. I\u0026rsquo;m a visionary, not a software engineer. I don\u0026rsquo;t like to plan every little detail; I\u0026rsquo;d rather start with a grand vision and just let the code go wherever my vision leads it.\nI confess this can be both a strength and a weakness. For example, I\u0026rsquo;ll spend two weeks refactoring perfectly working code because I don\u0026rsquo;t think it\u0026rsquo;s elegant enough. On the other hand, aesthetic beauty of structure and architecture is every bit as important in software as it is in other fields. It\u0026rsquo;s just that the benefits are intangible and more difficult to quantify.\nPerfectly working code, you say? I admit, that\u0026rsquo;s a bit of a rarity these days. It\u0026rsquo;s a rarity precisely because not many programmers consider programming as an art form. Real artists are never satisfied with their work; they never stop working toward absolute perfection of both form and function.\nThis leads me to my real point. I have a favorite saying, \u0026ldquo;Have you made your mistake today?\u0026rdquo; Ironically, perfection can only be achieved by making mistakes. If you\u0026rsquo;re not making mistakes, you\u0026rsquo;re not learning. If you\u0026rsquo;re not learning, you\u0026rsquo;re not taking any risks. If you\u0026rsquo;re not taking any risks, you\u0026rsquo;re achieving mediocrity at best. Learn to make mistakes gracefully. Enjoy your capacity to learn and evolve toward perfection, no matter what kind of art you create.\n","permalink":"https://www.manusoft.com/archive/blog/have-you-made-your-mistake-today/","summary":"\u003cp\u003eIt may seem strange to some of you, but I consider myself an artist. Visual Studio is my canvas, and the keyboard is my paintbrush. This is why I wouldn\u0026rsquo;t survive in a stuffy corporate environment with committees, red tape, and politics. I\u0026rsquo;m a visionary, not a software engineer. I don\u0026rsquo;t like to plan every little detail; I\u0026rsquo;d rather start with a grand vision and just let the code go wherever my vision leads it.\u003cbr /\u003e\u003cbr /\u003eI confess this can be both a strength and a weakness. For example, I\u0026rsquo;ll spend two weeks refactoring perfectly working code because I don\u0026rsquo;t think it\u0026rsquo;s elegant enough. On the other hand, aesthetic beauty of structure and architecture is every bit as important in software as it is in other fields. It\u0026rsquo;s just that the benefits are intangible and more difficult to quantify.\u003cbr /\u003e\u003cbr /\u003ePerfectly working code, you say? I admit, that\u0026rsquo;s a bit of a rarity these days. It\u0026rsquo;s a rarity precisely because not many programmers consider programming as an art form. Real artists are never satisfied with their work; they never stop working toward absolute perfection of both form \u003cem\u003eand\u003c/em\u003e function.\u003cbr /\u003e\u003cbr /\u003eThis leads me to my real point. I have a favorite saying, \u0026ldquo;Have you made your mistake today?\u0026rdquo; Ironically, perfection can only be achieved by making mistakes. If you\u0026rsquo;re not making mistakes, you\u0026rsquo;re not learning. If you\u0026rsquo;re not learning, you\u0026rsquo;re not taking any risks. If you\u0026rsquo;re not taking any risks, you\u0026rsquo;re achieving mediocrity at best. Learn to make mistakes gracefully. Enjoy your capacity to learn and evolve toward perfection, no matter what kind of art you create.\u003c/p\u003e","title":"Have you made your mistake today?"},{"content":"This year I taught an ObjectARX class at AU. As usual, there wasn\u0026rsquo;t nearly enough time to cover all the things I wanted to cover. I\u0026rsquo;m still contemplating what I want to do differently next year in order to be able to spend more time on the subject without boring everybody to death.\nBy the way, fellow programmers, do you agree that we need a Programming campus at AU 2007? I hate being lumped into a generic category like General Design. I suggest a new campus just for programmers, with our own industry reception (I\u0026rsquo;m thinking pizza, beer, and a Pink Floyd tribute band \u0026ndash; and Lynn Allen (http://lynn.blogs.com/) of course).\nIf any of you went to the Programming Gurus Go Head To Head panel discussion on Thursday afternoon and were wondering why I wasn\u0026rsquo;t present\u0026hellip; well, er, next time, could you please call me on my mobile phone a few minutes before the class to jog my aging memory? Sheesh. I always enjoy the quasi-chaotic gurus panel, and I can\u0026rsquo;t believe it completely slipped my mind.\nSpeaking of chaos, I like chaos \u0026ndash; but more on that subject later. I like unscripted discussions where the topics are limited only by the imaginations of the participants. I usually sit in on a few classes at AU, but with a few rare exceptions, the only time I learn something new at AU is outside the structured classrooms.\nThis year I did learn something new in a class, though. I sat in on Josh Johnson\u0026rsquo;s Demystifying Installers class, and I learned how to create a new registry key that AutoCAD\u0026rsquo;s secondary install uses to trigger a third party secondary installer (this would occur when a new user logs in for the first time). Thanks, Josh! I did not know that! [An interesting sidenote: Josh taught the class with his father in the audience. How cool is that? Er, not cool at all, especially in Vegas! Seriously, I thought it was cool, and it was a pleasure to meet both of the Johnsons. Good thing I brought\u0026hellip; never mind.]\n","permalink":"https://www.manusoft.com/archive/blog/teaching-and-learning-at-au/","summary":"\u003cp\u003eThis year I taught an ObjectARX class at \u003ca href=\"https://www.autodesk.com/autodesk-university/\"\u003eAU\u003c/a\u003e. As usual, there wasn\u0026rsquo;t nearly enough time to cover all the things I wanted to cover. I\u0026rsquo;m still contemplating what I want to do differently next year in order to be able to spend more time on the subject without boring everybody to death.\u003c/p\u003e","title":"Teaching and learning at AU"},{"content":"If you were at AU this year, you may have seen some of my take5 and AUGI friends wearing blue T-shirts with this tag line on the back. This year my CADLock compatriots (Dietmar Rudolph of Germany and Steve Johnson (http://www.cadnauseam.com/Steve.htm) of Australia) were both at AU, so we decided to have a little fun with this protection theme. We brought some \u0026ldquo;protection\u0026rdquo; to go along with the shirts (no, those little matchbooks did not contain matches).\nNow that you\u0026rsquo;re back home, I hope you\u0026rsquo;ll take a few minutes to learn how to protect your AutoCAD drawings. You can download CADVault for AutoCAD from the CADLock web site and run it in fully functional evaluation mode to see for yourself how CADVault can securely lock your AutoCAD drawing content.\nHelp fight IP theft: practice safe CAD!\n","permalink":"https://www.manusoft.com/archive/blog/do-you-use-protection/","summary":"\u003cp\u003eIf you were at \u003ca href=\"https://www.autodesk.com/autodesk-university/\"\u003eAU\u003c/a\u003e this year, you may have seen some of my take5 and \u003ca href=\"http://www.augi.com/\"\u003eAUGI\u003c/a\u003e friends wearing blue T-shirts with this tag line on the back. This year my \u003ca href=\"https://web.archive.org/web/2010/http://www.cadlock.com/\"\u003eCADLock\u003c/a\u003e compatriots (\u003ca href=\"http://www.crlf.de/\"\u003eDietmar Rudolph\u003c/a\u003e of Germany and Steve Johnson (\u003ca href=\"http://www.cadnauseam.com/Steve.htm\"\u003ehttp://www.cadnauseam.com/Steve.htm\u003c/a\u003e) of Australia) were both at \u003ca href=\"https://www.autodesk.com/autodesk-university/\"\u003eAU\u003c/a\u003e, so we decided to have a little fun with this protection theme. We brought some \u0026ldquo;protection\u0026rdquo; to go along with the shirts (no, those little matchbooks did not contain matches).\u003cbr /\u003e\u003cbr /\u003eNow that you\u0026rsquo;re back home, I hope you\u0026rsquo;ll take a few minutes to learn how to protect your AutoCAD drawings. You can download \u003ca href=\"https://web.archive.org/web/2010/http://www.cadlock.com/products/CADVault/\"\u003eCADVault for AutoCAD\u003c/a\u003e from the CADLock web site and run it in fully functional evaluation mode to see for yourself how CADVault can securely lock your AutoCAD drawing content.\u003cbr /\u003e\u003cbr /\u003eHelp fight IP theft: practice safe CAD!\u003c/p\u003e","title":"Do you use protection?"},{"content":"The French expression tuit de suite pretty much sums up how I feel after every Autodesk University, and this year is no exception. So much gets crammed into one week, with barely any time to decompress or collect my thoughts, let alone catch up with all the latest gossip or relax with old friends.\nI had a tradition back in the early days to describe the people I met at AU. That tradition fell by the wayside as the heady days of youthful exuberance gave way to the practical realities of putting food on the table and making sure the bills got paid. Nowadays, the list would be far too large anyway.\nJust like the old days, however, I come back from AU energized and replenished, not with more knowledge per se, but with information, ideas, and revitalized motivation. This year I\u0026rsquo;ve resolved to jump on the blogger bandwagon and share some of my thoughts for posterity.\nWelcome aboard. I hope you enjoy the ride!\n","permalink":"https://www.manusoft.com/archive/blog/toot-sweet/","summary":"\u003cp\u003eThe French expression tuit de suite pretty much sums up how I feel after every \u003ca href=\"https://www.autodesk.com/autodesk-university/\"\u003eAutodesk University\u003c/a\u003e, and this year is no exception. So much gets crammed into one week, with barely any time to decompress or collect my thoughts, let alone catch up with all the latest gossip or relax with old friends.\u003c/p\u003e","title":"Toot Sweet"},{"content":"Introduction\nThis year I'm breaking tradition to acknowledge the changes at this annual event. The venerable \"Autodesk University\" is now just one facet of the more inclusive \"Autodesk Design World\", or ADW for short. As usual, I'm compelled to record my adventures for posterity. Enjoy!\nOwen Wengerd, President ManuSoft My Diary September 24, 1998\nby Owen Wengerd All Rights Reserved\nIf you've been paying attention, you may notice that this ditty is dated exactly one week after the end of ADW '98 in Philadelphia (aka Philly). Not only am I still recovering from the mental strain of that whirlwind week, but by now I've forgotten everything important that I was going to write about! We'll just have to settle for the less important, but more interesting, stuff that makes these excursions so memorable.\nI decided to make the trip from Ohio to Philly by car in order to save the airfare money for more important things like the slot machines in Atlantic City. I started out a little before noon on Thursday, intending to get there by 7 PM, in time to find a hotel and get some sleep before Friday morning's ADN conference. The weather was perfect, and things went great for the first 150 miles of the journey.\nTo understand the gravity of what happened next, it helps if you're married. You see, my wife decided at the last minute that she could bring the kids in her minivan and join me in Philly for a few days, then return home again on Sunday before she drove me completely nuts. That meant she would follow me from Ohio to Philly, at high speeds, through unknown territory. The fateful moment came just before we got into Pittsburg.\nI calmly crossed two lanes of light traffic to take an unexpected exit. I watched in my rearview mirror as my wife, after making it to the exit lane while looking nervously over her shoulder, inexplicably chose to continue on into Pittsburg. To make a long story short, I had plenty of time to wander aimlessly around Philly on Thursday night, waiting on the rest of my family to show up.\nMy ADW started on Friday morning, when I checked in for the ADN (Developers') Conference. I knew I was going to get a workout this year when I immediately got lost trying to find the ADN conference rooms, after successfully navigating my way to the registration area. I crossed one city street and snuck through some kind of bankers' convention (I wonder who came up with that bright idea) before I finally made it from the registration area to the ADN conference.\nYou may recall my distaste for vegetables from last year's AU in Los Angeles (aka \"the garden city\"). Well, I'm here to tell you that the people in Philly know how to serve a cow! Friday was highlighted by the excellent lunch on Autodesk, then topped off with an evening party at Dave \u0026amp; Buster's with excellent food and spirits (and $20 worth of game room play). I didn't even need to visit the nearby Burger King, which I had scoped out beforehand just in case.\nDespite Saturday being an \"off\" day with nothing on my schedule, I somehow spent all day working on getting the AUGI playpen set up. Sunday morning I gave my family the two-bit tour of the convention center complex, then sent them packing. I spent most of Sunday with the AUGI crew trying to get the network working in the AUGI playpen in time for Sunday evening's grand opening. I remember the show floor opening to the public at 6 PM, but here's where things start getting a little foggy.\nFrom Sunday night on, ADW was a whirlwind of people, parties, and networking opportunities. Sunday night was the grand opening cocktail party in the spacious grand ballroom area directly adjacent to the convention center. I still have no idea what I did on Monday, but Monday night was the big shindig at the Franklin Institute, a museum named (I presume) after Philadelphia historical figure Benjamin Franklin.\nNow, Monday night is memorable for several reasons. First of all, the party at the Franklin Institute was without a doubt the best I've ever attended! Imagine, for a moment, walking through the stark marble museum halls filled with gadgetry from early electric motors to ancient magnetic wonders, to exhibits on early flight, a railroad history room, and people gazing at historical artifacts from the past as they wander through a maze of staid imagery. Now add a jazz band, a dance floor, hors d'ouvre and beer bars at every corner on every floor, and a thousand computer geeks looking to unwind! Can you say \"party at the museo\"!?\nHere's the kicker though: parked outside the museum directly across from the main entrance was none other than a Microstation/J bus (http://dn1.bentley.com/tour/)! Apparently the Bentley brothers decided to make their presence known in this city, not far from their Exton headquarters. Several people also reported seeing a Microstation \"work crew\" working around a utility manhole, complete with Microstation work vehicle and Microstation garb. I wish I'd had a camera! [BTW, if you were there and you got pictures, I want a scan!]\nTuesday was my big day. I had one presentation myself, and was scheduled to assist in two labs. I always enjoy assisting with labs because it's an excellent opportunity to learn how students react to differing teaching styles from a behind-the-scenes vantage point. By most accounts, the quality of the classes this year has improved over the past few years, and my limited exposure in the labs bore that out. The course I taught was beset with technical problems. First, my computer locked up and I had to fall back on my vast technical support experience to fix that problem (I hit the reset button). Then 80 minutes into the 90-minute course, just as I sat down to demonstrate some of my techniques inside AutoCAD, the monitor lost power. Determined to finish, and feeling no need to put my technical support knowledge to further tests in front of a roomful of adoring fans, I finished the class where I feel most comfortable: down on the floor among the students with no hardware to foul things up.\nTuesday afternoon were the AUGI Industry Group meetings, where attendees from various industries gather to channel their collective wishes and gripes to Autodesk representatives (and meet other like-minded individuals). The programming IG meeting was good, but apparently the Autodesk representatives decided that the abuse they received in the past two years' meetings was enough to last through 1998, because they chose to remain hidden in the audience.\nThe big event Tuesday night was the AUGI annual meeting and the followup beer bust. I was seated directly behind Carol Bartz at the meeting. After Carol was presented with the AUGI top-10 wish list requests, Autodesk Chief Technical Officer Carl Bass (who is responsible for AutoCAD development) gave the keynote address and entertained questions from the audience. Here's a notable quote from Carol Bartz: defiantly, from her seat directly in front of me, \"the price of AutoCAD will not change\" in response to market pressure from lower-cost competitors.\nAfter the AUGI annual meeting came the annual AUGI beer bust (can you imagine how much more exciting the meeting would be if it came after the beer bust?) They even had selections of vegetable-free pizza this year! Once everyone had pigged out on beer and pizza, the \"must be present to win\" giveaways began in earnest. AUGI president Don Spencer (http://www.tangra.com/donspencer) did the honors, standing on a chair and trying to call out winners over the din. Once Don's voice started to give out, I took over. Have you ever had the urge to stand on a chair in the center of a large crowd of professional businesspeople and scream at the top of your lungs? I haven't either, but it was still fun!\nWednesday was the final day of festivities, er, I mean studies. I had one lab to assist with, then I hightailed it out of Philadelphia right around lunchtime. What a week! This was my third year at ADW/AU, and I still can't get over how much takes place in such a short time. As I write this, I continue to think of dozens of anecdotes which I'd like to share, but then I think to myself that I need to leave some reason for readers to experience the event in person next year in New Orleans. I hope to see you there!\nWho was Who As has been my tradition, following are short descriptions of people I met at the show (in alphabetical order, and my apologies to the many folks I missed). I generally only list people who haven't yet been introduced in prior years.\nBartz, Carol\n(Autodesk) This year I finally had a chance to speak to Autodesk CEO Carol Bartz in person at the AUGI beer bust. I could tell she takes no crap, and I imagine she has no problem keeping control at Autodesk. She put forth a party animal image, directing CTO Carl Bass when the AUGI meeting was over, \"let's go get some beer.\" In private, she has no trouble launching into a profanity-laced tirade. I'll go out on a limb here and theorize that high levels of testosterone are a prerequisite for top management positions in the corporate world, and I'll further theorize that Carol meets that qualification. Batko, Dale\n(CAD User (http://www.caduser.com.au)) Dale is very energetic, and seemed like a good listener in the few minutes I spoke with him. He is the US correspondent for CAD User, and his name surfaces periodically in AutoCAD publications. Batton, Elaine\n(Autodesk) The new manager of online support and services operations at Autodesk is a no-nonsense outsider from down under. She is still easing her way into the sometimes acrimonious internet scene at Autodesk, but I expect her presence to be felt more and more as she takes over where Cara Denko left off. Discher, Brenda\n(Autodesk) The Senior Product Manager of the Mechanical Market Group, Brenda is height-impaired. Physical stature notwithstanding, Brenda has a high energy and hyperactive nature. She seems very focused, and zeroes in on the issues quickly and with no nonsense. She's also a quick study, and a good listener. Garrigues, David\n(The CADapult, http://www.geocities.com/~cadapult) David is a newsgroup regular who spotted me at the Sunday evening party. Very enthusiastic and excitable, he was thrilled at the prospect of being in the presence of all the AutoCAD personalities at the show. I predict that David will one day be teaching AU courses instead of taking them. Gimenez, Ralph\n(Perceptual Engineering (http://www.perceptual-eng.com/)) Ralph is the creator of Sage-CLOS (Object-based front end for AutoLISP), and someone I've known and respected for a long time. He pops up in the Autodesk newsgroups periodically, and this year he manned the Perceptual booth at the show. Ralph is hyperactive, full of energy, and his mind is always racing (sometimes too fast for his own good), and he's always personable. McCormick, Lowell\n(Compuserve user) Lowell posts frequently on ACAD, and he appears to be a hardened AutoCAD user with lots of experience in the trenches. He was in my Tuesday class, and introduced himself at the end of the class. I enjoyed a conversation about his past AutoCAD work as we talked after the class, but had to cut it short in order to get started on my afternoon lab assistant assignment. I'm sure I'll see him again next fall as ADW moves to his home town of New Orleans. Osborne, Todd\n(BarnStormer Software) I met Todd at the ADN conference. I knew right away that he was not your average programmer; it turns out he's a former Microsoft programmer who made his millions then moved on when it wasn't fun any more. We talked all afternoon about computer security, Bill Gates, programming AutoCAD, and programming Windows (http://www.barnstormer-software.com/vwcl/). Connections like this is the reason why I go to these events! Posma, Robert\n(AKAUG (http://www.akaug.org/)) Robert is a good guy, knowledgeable in AutoCAD, who is active in the Alaska AutoCAD User's Group and pops up on Compuserve occasionally. He is a fixture at ADW each year, and I had the pleasure of working with him in one of the labs that I helped out with. Sage, Mark\n(Summit Software) Mark recently defected from Autodesk and moved to Summit, which is responsible for Microsoft's Visual Basic for Applications sales and support as an independent Microsoft contractor. I've met Mark before, so this is hardly a first impression, but this year he played a different role as the Microsoft representative. I identify with Mark because I've never seen him in a suit (and I think he would feel just as uncomfortable in a suit as I would). Szilvasy, Albert\n(Autodesk) I suspect that Albert's youngish looks and small frame mask his age and maturity. Albert is of Hungarian heritage, a member of the ADN technical support team, and a regular poster in the public Autodesk newsgroups. I always enjoy being in the presence of great programmers, and Albert ranks up there with the best of them. We had several great discussions between (and during) presentations. Townsend, Jim\n(Autodesk) Like all the Autodesk technical personnel, Jim worked like a dog in the days preceding the show. His tireless work on the troublesome AUGI playpen network setup was invaluable. Jim posts on the network support newsgroup periodically (no, he's not related to Bill Townsend). Williams, Ed\n(newsgroupie) Ed is a portly fellow, well-spoken and well-mannered, and all-around nice guy, who posts frequently on the Autodesk newsgroups. A fellow programmer, Ed's itinerary at ADW was similar to mine. ","permalink":"https://www.manusoft.com/archive/anecdotes/adw98/","summary":"\u003cp\u003e\u003ca id=\"Introduction\" name=\"Introduction\"\u003e\u003c/a\u003e\u003ch3\u003eIntroduction\u003c/h3\u003e\u003c/p\u003e\n\u003cp\u003eThis year I'm breaking tradition to acknowledge the changes at this annual event. The venerable \"Autodesk University\" is now just one facet of the more inclusive \"Autodesk Design World\", or \u003ca href=\"https://www.autodesk.com/autodesk-university/\" target=\"_top\"\u003eADW\u003c/a\u003e for short. As usual, I'm compelled to record my adventures for posterity. Enjoy!\u003c/p\u003e","title":"ADW '98"},{"content":"Introduction\nA last-minute substitution garnered me a place at AU '97 this year. I hadn't planned on making the trip, but I'm glad I did, now that it's behind me. Enjoy my ramblings.\nOwen Wengerd, President ManuSoft My Diary October 12, 1997\nby Owen Wengerd All Rights Reserved\nNow that I’ve recovered from AU ’97 in Los Angeles, I’d like to record my experience for posterity. If it seems like I’m just trying to make you jealous because you didn’t go, that’s purely accidental. Oh, and I’m not responsible for injuries resulting from you trying to convince the boss to pay your way for AU ’98 in Philadelphia!\nI arrived at LAX (that would be Los Angeles International Airport for the travel-impaired) on Wednesday afternoon, and the fun began in earnest when I paid tribute to the God of Patience during my quest for a rental car whose cigarette lighter worked. No, I really did quit smoking; it’s just that my mobile phone is the old-fashioned kind that requires an external power supply.\nOnce the rental car situation was resolved, I headed for my cheap hotel. You understand that when I say cheap, I’m not talking \"by the hour\", but rather \"no reservations required\". I was a little concerned when I learned that the only escape was through 5 hallways, 3 stairs, and an elevator. I imagine that most of my room charge went for fire insurance. At least the air conditioning system wasn’t working, so the risk was reduced slightly. Luckily, the heat drove me out onto the combination roof/patio, from which I spotted another hotel advertising $35 per night, and promising quality rooms. I moved there the next morning.\nAll day Thursday was spent discovering Los Angeles. I roller-bladed on Santa Monica beach in the morning, got a parking ticket at Venice Beach, and visited south-central LA (it sounds so pleasant now). By late afternoon I was cruising down Sunset Boulevard about as fast as the tar seeps out of the La Brea Tar Pit. I actually parked my car in a nice little city park and walked along Sunset for a while. I headed back when I noticed that there were no females within sight, and all the men came in pairs.\nI think that by Thursday night, I had covered all of the LA area, from Santa Monica to Hollywood, and from LAX to Inglewood. I found the Convention Center with little difficulty, and was surprised to find that it was only a 5-minute drive from my hotel on Olympic. That evening I cranked up the air-conditioner in my room and prepared for the next morning. Life was good.\nThe Developer’s Conference was good. I didn’t learn much, but everyone knows that you only go to those things to rectify past injustices by embarrassing the Autodesk big-wigs during and after their speeches. Since the real show didn’t begin until Saturday afternoon, it was relatively easy to spot and harass Autodesk managers. The high point was meeting Markus Kraus, one of my heroes on the Autodesk Developer Support team. The low point was discovering that the highly-touted complimentary lunch consisted of absolutely nothing edible (call me silly, but I feel I’m higher in the food chain than a rabbit).\nSaturday was spent hopping in and out of an all-day ObjectARX training session at the Omni hotel. My constant complaining about the complimentary all-vegetarian foods netted me a special order New York strip steak on Autodesk. The developer marketing folks scored some bonus points with that one. The poor folks pigging out on the low-fat buffet muttered under their breaths a bit; I was totally shameless.\nSaturday night was the first of many parties. I felt a bit uncomfortable; I always do when I can’t pronounce the names of the food and drinks. The Saturday night gig for developers was pretty benign; at least nobody had to be carried out. I left early to find some real food at a real restaurant (well, I settled for a sports bar; there was no Burger King in sight).\nSunday was the big day. After all the speeches by Autodesk VIPs, the show floor opened to a herd of attendees bent on walking out with the greatest number of freebies. I indulged a bit as well, but mostly I schmoozed with important people I found hanging around the exhibits. Since I received an exhibitor badge by volunteering to help set up the AUGI playpen, I thought it best to actually look official for a while by sitting at the AUGI booth.\nI presented my Autosurf modeling class right after lunch, to a crowd of Mechanical Desktop users who were mostly interested in playing with the Mechanical Desktop 2.0 pre-release I had installed on the lab systems two days earlier. The class went good, with only a minor mishap: the lights went on and off uncontrollably until someone reminded the gremlins in the next room that the lights in both rooms used the same switch.\nOnce the real work of Sunday was done, I turned my full attention to networking. In my case, that meant schmoozing with important people and basking in my apparent fame. I also became sort of an evangelist touting the benefits of the raw feedback provided by the online service community, and how Autodesk needed to cultivate and utilize it. I got a lot of airtime, but I suspect I did nothing more than confirm that I’m a crackpot.\nI guess I didn’t get to see the LA smog in all its glory, as the weather was actually pretty nice during my stay. I understand that Monday and Tuesday were the two days of the year when you can see the hills around Los Angeles. This was explained to me as the reason why so many Chambers of Commerce were out snapping photographs for next year’s attractive brochures.\nMonday and Tuesday evening were filled with competing parties -- a bar-hopper’s paradise. I smoked cigars and enjoyed the spirits. Honest, I was just taste testing the various liquors. Wednesday morning I spent an hour trying to rid myself of the awful cigar-breath, and even then I could hardly talk through my hoarse throat. My inability to communicate wasn’t all that bad, really; I don’t think the handful of people who made it out of bed were in a mood to listen anyway.\nI left the convention center Wednesday around noon, after all the exhibits had been removed and the last free donuts had disappeared. I got a four hour tour of Beverly Hills from one of the natives before I headed for LAX to catch my 11 PM flight back home. I have to say, I was enthralled by LA when I arrived. I was even more thrilled to see it disappear behind the clouds when I left.\nWho was Who As has been my tradition, following are short descriptions of people I met at the show (in alphabetical order, and my apologies to the many folks I missed). I generally only list people who haven't yet been introduced in prior years.\nBrewer, Allison\n(Autodesk) The only distinguishing feature I can remember about this product support tech is the curly black hair. Brill, Carolyn\n(Autodesk) I had a great conversation with Carolyn at one of the parties. It turns out we have kids almost exactly the same ages, so we had plenty to talk about. Denko, Cara\n(Autodesk) Cara is even nicer in person than her online presence, which is saying a lot. I enjoyed our discussion on improving Autodesk’s online support services while we chain-smoked outside the convention building. For the record, she promised to conquer her nicotine habit for good over the next 6 weeks. Dickason, Mike\n(Autodesk) Mike is an overgrown kid with a dash of sour humor. His excited dash to the rides at Universal Studios paid off: we got on all the rides with no wait while everyone else ate and drank. I count Mike as a personal friend. Freiberg, Jessica\n(Autodesk) I managed to catch a glimpse of Jessica this year. Under the makeup I found an intelligent and lively personality -- a rare find indeed. Gallelo, Dominic\n(Autodesk) I barely said \"Hi\" to the VP of the MCAD and Data Management market group, but he scores points for being very accessible on the show floor. Gesner, Rusty\n(Compuserve/internet) Rusty has the distinction of having placed higher than me in the Top Gun preliminary test (as did 19 other people). With his glasses, he has no trouble passing as a computer nerd. Harrington, David\n(Compuserve/AUGI) David deserves mention again this year because he won the Cadence magazine Top Gun competition. He’s the fastest draw in the west, some say. Helland, Mike\n(Autodesk) Mike is a relative newbie in product support, but he coined my favorite quote of AU ’97: \"Have you made your mistake today.\" This followed a discussion about the need to make mistakes and take risks in order to grow. Jones, Cathleen\n(Autodesk) Whenever I saw Cathleen, she was manning the product support booth. She strikes me as all business, with a future as a librarian if product support wears her out. Kraus, Markus\n(Autodesk) Markus is very reserved. When I introduced myself, he shook my hand but didn’t say a word. I suspect he is self-conscious about his English. His ARX training class was excellent, though. One thing is certain: Markus loves his work. Labay, Jerry\n(Autodesk) As the VIP subscription marketing manager, Jerry was interested in hearing my opinions about the program. I could tell that he hadn’t lived through some of the past marketing missteps, so I tried valiantly to steer him back on track with VIP. Meloy, Jimm\n(Autodesk) I was introduced to Jimm so that he could hear my internet sermon (I guess someone had it in for him). Jimm is either a visionary or a crackpot -- or maybe both. In any case, there was a definite synergy. Sampath, Laks\n(Autodesk) I had a long conversation with Laks about Autodesk’s ADN program. Laks seemed genuinely interested in hearing why I thought that some mistakes were made with the price structure of ADN. Sanders, John\n(Autodesk) I didn’t realize how much of an ally I had in John Sanders, until I learned that he completely agreed with my assertion that the online community is a gold mine, and insisted that he works tirelessly trying to get top management to take a more active role in it. Slingsby, Terry\n(Autodesk) Terry probably gets very little recognition, but he’s the workhorse behind getting all the computer hardware and software installed and functional at Autodesk-sponsored events. I’d guess that he gets a lot of overtime at AU each year. Sullivan, Godfrey\n(Autodesk) Godfrey was recently placed in charge of the new \"Personal Products\" marketing group at Autodesk. He was a popular guy on the show floor. I never did get a chance to talk one-on-one, as there was always a mob around him. Godfrey struck me as sharp, with just a touch of slick. Townsend, Bill\n(Compuserve/internet) Bill looks too clean-cut for LA, but his personable nature masks a sarcastic humor that results in people either loving him or hating him. Vega, Juan\n(Compuserve) This Vibrant Graphics employee is a favorite target on Compuserve, but I left him alone because he carried a duffel bag full of free cigars (and he’s bigger than me). Juan and I have a lot in common, and we got along very well. Whaley, Frank\n(Autodesk) Frank must have been a big teddy bear in a past life. One can’t help but like his simple honesty. Frank reminds me of an aging football player with not a mean bone remaining in his hulking body. Williams, Arnie\n(Cadence) Arnie strikes me as a loveable fellow. His greying hair (what’s left of it) and rotund appearance make him a likely candidate for Santa Claus duties at Christmas time. ","permalink":"https://www.manusoft.com/archive/anecdotes/au97/","summary":"\u003cp\u003e\u003ca id=\"Introduction\" name=\"Introduction\"\u003e\u003c/a\u003e\u003ch3\u003eIntroduction\u003c/h3\u003e\u003c/p\u003e\n\u003cp\u003eA last-minute substitution garnered me a place at \u003ca href=\"https://www.autodesk.com/autodesk-university/\" target=\"_top\"\u003eAU '97\u003c/a\u003e this year. I hadn't planned on making the trip, but I'm glad I did, now that it's behind me. Enjoy my ramblings.\u003c/p\u003e\n\u003ctable border=\"0\"\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth align=\"left\"\u003e\u003ca href=\"mailto:owenw@manusoft.com\"\u003eOwen Wengerd\u003c/a\u003e, President \u003c/th\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003cth align=\"left\"\u003e\u003ca href=\"/about/\"\u003eManuSoft\u003c/a\u003e \u003c/th\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ca id=\"My_Diary\" name=\"My_Diary\"\u003e\u003c/a\u003e\u003ch3\u003eMy Diary\u003c/h3\u003e\n\u003cp\u003eOctober 12, 1997\u003cbr /\u003eby \u003ca href=\"mailto:owenw@manusoft.com\"\u003eOwen Wengerd\u003c/a\u003e \u003cbr /\u003e\u003cstrong\u003eAll Rights Reserved\u003c/strong\u003e\u003c/p\u003e","title":"AU '97"},{"content":"Introduction\nThis year, I decided that Chicago was close enough to home to make the trip to AU. To defray expenses, I offered to teach a course on \"Sheet Metal Flat Development with AutoCAD\" (MCH021).\nOwen Wengerd, President ManuSoft My Diary September 23, 1996\nby Owen Wengerd All Rights Reserved\nNow that I'm back home after a week in Chicago at Autodesk University, I'd like to briefly share my experiences for those of you who didn't make the trip.\nWhen I arrived in Chicago on Saturday (9/14), I checked into my cut-rate hotel and drove around Chicago long enough to become familiar with my surroundings. I scoped out the Navy Pier where I would be spending most of my time, then parked my truck, unpacked my equipment, and set out on foot to discover what secrets Chicago held in its guts. I basically accomplished nothing on Saturday except for getting a blister on my toe.\nOn Sunday, I slept in. I was rudely awakened when the maid banged on my door around 9 AM. However, I quickly got dressed, showered in the standing-room-only shower stall, and headed for Navy Pier. Since I had become at least slightly familiar with the streets on Saturday, I felt confident in taking a few chances on the way to Navy Pier. Once I discovered that I had missed my guess and ended up some 6 miles north of Navy Pier, things went smoothly. In fact I pulled into the East garage at Navy Pier and pulled my truck into a parking space directly in front of the door which led to the stairs that lead directly to the AU registration area. Things were going good.\nSunday's agenda included getting registered, preparing my computer and room for my class Monday forenoon, and attending Lynn Allen's \"Tips for Speakers\" class on Sunday afternoon. The only hitch was that my room was the one room which did not have a computer in it yet. Well, besides the Speaker Ready room, which didn't get one until Wednesday.\nLynn's class was good. I borrowed a computer from another room so I could make some changes to my presentation to reflect some of her suggestions. I listened to the first half of the keynote address where I watched an uncomfortable, fully suited, dave espinoza-aguilar address the crowd, and Carol Bartz introduce the CEO of Softdesk as \"the president and CEO of Autodesk\".\nAt 6 PM the exhibit floor opened and everyone, including me, made a mad dash for the free food and drink on the show floor. I think some people even looked at the exhibits. I still didn't have a computer in my room.\nStacie Dong of Miller-Freeman promised that there would be a machine in my room before 6 AM Monday. So there I was at 5:30 AM Monday morning, waiting for someone to unlock the doors. By 6:30, the doors were unlocked, and I got right to work getting all my stuff loaded, making my own AutoCAD configuration, and preparing my example drawings for use. Sure enough, I discovered a bug in one of the lisp routines that was included on the CDROM every AU attendee received.\nOnce the 8:00 speaker kicked me out of the room at 7:30, I headed for the Speaker Ready room to grab some doughnuts and orange juice. The ready room was devoid of munchies, so I peeked into the Show Management room and found that it was well-stocked. I then decided to go through my presentation one last time before I had to face my 70 students at 10 AM.\nThe class went great. I improvised a bit, and winged it a lot. One student contended that my AutoLISP routines used symbol names containing illegal characters. When I pointed out that even the built-in multiplication function contained an asterisk, he shook his head in disgust. Luckily, he stormed out minutes later.\nI felt like I had the world by the tail. I had students telling me what a great class it was, and eagerly staying after the class to ask questions and discuss related topics. One late-comer turned out to be someone I knew from the ACAD forum on Compuserve, and as it turned out he picked up the $8.00 tab for my Versucci Cheeseburger lunch.\nHeading into Monday afternoon began an entire week of coasting. Monday evening was NAAUG's \"Birds of a Feather\" session, where I ran into a handful of people I knew from Compuserve. I ended up at a table with fellow programmers, including Andrew Bichard.\nTuesday included the annual NAAUG meeting, where I met a few more Compuserve people, including NAAUG BOD members and SIG chairs. I helped hand out the new NAAUG T-Shirts; by the comments, I'm convinced that the T-Shirt was the only reason most of the NAAUG members showed up.\nTuesday evening was the Speakers' Reception at the Palmer Hilton's Crystal Room. A great time was had by all. I met Tom Stoeckel, and ended up giving him a ride back to his hotel. By Tuesday evening, the trade show was over and many of the Autodesk people were on their way back home. The technical seminar component of AU continued in earnest.\nI think it was Tuesday evening when I discovered the underbelly of Chicago. Yes, there is a whole city of loading docks, maintenance facilities, and the city impound lot under the streets of downtown Chicago. I was fascinated by it all, until I realized that I could not find my way out. The Chicago maps I had made no mention of \"Lower\" Wacker and \"Upper\" Wacker, much less how to get from one to the other. It was a memorable experience.\nI had signed up to assist in some of the lab classes in order to help pay for some of my expenses, so I had the opportunity to wander around the classes and observe a variety of speakers and their students' reactions. This was an illuminating experience, to say the least. Let's just say that not all speakers are created equal, and some of them really helped my self-esteem.\nI'll end this ditty on a high note at the NAAUG beer bust on Thursday afternoon. Between Donnia Tabor-Hansen, Don Spencer, dave aguilar, and Greg Robinson, the crowd was well-fed, entertained, and after a few drinks didn't even mind the less than perfectly level floor. I won a CADalyst T-shirt by naming Art Liddle as the person behind \"Hot-Tip Harry\".\nWho was Who What follows will be a quick description of my impressions of well-known people I met at the show. If you hang around the ACAD forum on Compuserve and/or read the AutoCAD trade rags, you'll recognize most of these people (in alphabetical order, and my apologies if I missed anybody).\naguilar, dave\noutgoing NAAUG president Short and stocky, belongs in a t-shirt and jeans. I didn't talk with dave more than to say hello. Allen, Lynn\nAutodesk/Cadence columnist Lynn had black hair this year. I understand that she changes her hair color periodically; in fact they raffled off her blond wig at the NAAUG beer bust. She told me she had been considering green this year in honor of a famous Chicago resident. Lynn stuck out as being very friendly. Banaszak, Dennis\nCompuserver/Civil TM on ACAD I saw Dennis briefly when he was at the show with Papa Joe on Sunday night. In fact Joe pointed him out to me, and I ended up playing cat and mouse trying to track him down. I can't think of anything unusual about him, other than the fact that he pretty much resembled what I had imagined from knowing him online. Bartley, Nate\nCompuserver/Autodesk product support I soon determined that Nate was a few bricks short of a full load when he insisted that he loved product support. He was dead serious, too. The silly grin and nervous damage must be the result of too many support calls. A super-nice chap. Bauer, Mike\nCompuserver/GIS TM/President of American Digital Cartography I assisted in one of Mike's lab classes on GIS/AutoCAD Map. I didn't do more than say hello, but Mike was either a bit nervous or just naturally talks fast, because he whipped through the presentation with such urgency that I had a hard time keeping everyone in sync. Behrens, Morey\nCompuserver I met Morey at the Birds-of-a-Feather session. He thought I was mad at him, since I hadn't \"talked\" to him after he and I apparently had different viewpoints regarding an issue on the ACAD forum. I assured him that I had no recollection of the incident he was referring to, and that I thought very highly of him. Morey was very easy to talk to, and I appreciated the fact that he had been seeking me out to clear up any misunderstanding. Bichard, Andrew\nCompuserver/Architect/UK Journalist Andrew spotted me from his wheelchair, across the room at the Birds-of-a-Feather session. While talking to Morey Behrens, I noticed Andrew making his way over. I ended up sitting next to him at the programming SIG table. His British accent was not as pronounced as some I've heard, but his congeniality was easily recognized. Black, Craig\nATC Manager/Compuserver Craig was pretty busy in the lab sessions. I attended several of his classes, and I was very impressed with his presentation skills, and his knowledge of AutoCAD. Besides being a charming personality, Craig ranks as my favorite instructor (out of the handful that I listened to). Cohn, Dave\nJournalist/Developer/Compuserver I met Dave at the Speakers' Reception. Since he had recently reviewed a software product I've been working on, we had a good discussion about it. Dave was very outspoken, and I would say his \"live\" personality matched his online persona very closely. Cooney, Art\nAutodesk/Compuserver Art could be a twin brother to a truck-driver friend of mine. I had the opportunity to try to pick Art out of a group of 5 Autodesk employees who were present for the Programming SIG meeting, and I picked Jim Quanci. Of all the Autodeskers on Compuserve, Art's physical presence was the most different from what I had envisioned. Luckily, his personality is just as friendly and even-tempered in person as it is online. Art appreciates the users' point-of-view and it really showed at the SIG meetings. Dass, Al\nSocial Deviant at Large/Compuserver I walked into the \"Gurus\" session halfway through the course, and Al was stealing the show when I walked in. It really was a show. I think they should charge admission next year, and maybe even sell popcorn. Not only was Al entertaining, but he really knew his stuff. Phil Kreiker was not to be outdone, though... Dudek, Tony I never did have a chance to talk to Tony, but he was one of the gurus at the \"Gurus\" session. He added the wisecracks. Tony also got his picture on the AU CDROM. Elliot, Bill\nAutodesk I only had a chance to say hello to Bill. I remembered him from some work I had done on the R13 certification exam, but I really don't know him that well. Eriksen, Leif\nATC Manager/Compuserver I said hello to Leif, and we crossed paths in the Speaker Ready room several times. It was my first encounter, although I recognized his name from articles he's authored in the CAD rags. Evinger, Mark\nCompuserver Mark is an imposing figure, both in height and breadth. Since he's from Chicago, I tried to recruit him to show a Compuserve group out for pizza, but our schedules didn't suit. Mark stood out mostly because of his size, but he's also quite possibly the youngest of the Compuservers I met. Freiberg, Jessica\nAutodesk Program Manager Jessica is most notable for her ability to remain anonymous. I tried fruitlessly to find her. Rumor had it that she was only around on Monday and Tuesday. I never did meet Jessica. Garcia, Emmanuel\nCompuserver Emmanuel is a very intelligent individual, with a very well-rounded approach to things. He brought the entire family with him, and I encouraged him to teach a course at next year's AU to help defray the expenses. We had a good philosophical discussion about everything from mathematics to religion. Gibb, John\nCompuserver John was also on the \"Gurus\" panel. I don't remember John's online personality, but he does lurk on the ACAD forum. He introduced himself at the beer bust. Harrington, David\nNAAUG/Compuserver David was pretty active in the NAAUG events. I didn't have a chance to talk to him more than to say hello. He seemed to be the \"do-er\" type rather than the \"talk-er\" type. Kalameja, Alan\nAutoCAD Certification Exam I met Alan briefly. He was one of my contacts for the work I did on the R13 certification exam, and he remembered my name when I introduced myself. Our introduction was a quick hello in the Speaker Ready room, and that was the last time I saw him. Kramer, Bill\nCadence columnist Bill is very recognizable, not only because of his computer-nerd looks, but his height. He towers over most people physically as well as in AutoLISP expertise. I would have liked to attend his all-day AutoLISP class on Sunday, but as it was I just got in at the end in time to say hello. Kreiker, Phil\nCadence columnist Phil ventured outside the rabbit hole long enough to keep things lively at the \"Gurus\" session. For those who have never met him in person, rest assured that his writing style is indistinguishable from the rest of him. A unique character, the sandals were a sure giveaway to his identity. Liddle, Art\nCADalyst What little I saw of Art gave me the impression that he was all business. He left early, so I never did get a chance to show him a demo of our new product. Lurins, Sandra\nCADalyst I never could catch Sandy to introduce myself, since she was always involved in a conversation with somebody. She has an imposing presence both physically and socially. MacRae, Joe\nCompuserve Sysop What can I say? This old phart is everything he says he is. I met Joe on Sunday evening, and we chatted for a while. I could tell that he was in agony since he had no cigarette and no coffee. Joe is socially challenged, and I frankly have a hard time envisioning him in front of a computer. McFarlane, Scott\nNAAUG Programming SIG chairman Scott seemed very uncomfortable in front of a large group of would-be programmers at the SIG meeting, but he asked a lot of good questions of the Autodesk contingent, and he obviously knows his stuff when it comes to the AutoCAD APIs. McSween, Mike\nBentley Systems Mike looked like he could have made a wrong turn on the way to the truck-stop bar, but he is as intriguing an individual in person as he is online. I thoroughly enjoyed his company, and his non-descript appearance certainly belied the colorful personality underneath the western hat. Quanci, Jim\nAutodesk Developer Marketing Jim reminds me of Mike Kinsley of CNN's Crossfire, both in appearance and presentation. Heck, they even sound alike. He was very friendly when I met him at the Programming SIG meeting, and I felt like there was a good sense of humor just beneath the surface. Robinson, Greg\nWriter Greg has a deep voice, and a quick smile. One can't help but be enthralled when he speaks. Unfortunately I didn't have a chance to take any of his classes, but he did a bang-up job with the microphone at the NAAUG beer bust. Sheerin, Peter\nCadence In addition to being very talkative, Peter also listens well. He was very sociable, and he comes across as very much a computer weenie like the rest of us. He tried valiantly to coax a borrowed Win95 laptop to log onto my ISP so I could download a file. Sheridan Lara\nCADalyst Lara does a lot of work behind-the-scenes at CADalyst. Her huge, friendly smile dwarfs the rest of her. Well, actually, a lot of things dwarf the rest of her, but her aggressively friendly personality more than makes up for any lack of physical stature. Smarte, Gene\nCADalyst I only saw Gene once on Sunday evening, and I only had a brief conversation. His editorials in CADalyst seem to reflect his personality pretty accurately, I thought. Spencer, Don\nNAAUG board member Don was everywhere NAAUG was, and he definitely played an active role in the NAAUG events. I didn't have a chance to talk with Don very much, since he was always either behind a microphone or running around like a chicken with its head cut off. Stoeckel, Tom\nDeveloper I met Tom at the Speakers' Reception, and we really got along well. I gave him a ride back to his hotel after the reception, then we went out for pizza on Wednesday evening. He's a great guy, who I'm glad to have had an opportunity to meet in person. Tabor-Hansen, Donnia\nnew NAAUG President Donnia is a natural for having a microphone and addressing a crowd of NAAUG members. Her southern drawl and humor come through very well. I'll bet she's a blast to work with. Tinney, Jim\nWorkcenter Developer Support Jim and I met by accident in the Speaker ready room on Tuesday, and we got into a discussion about file security and integrity. Jim has a keen insight into the subject, and I came away being very impressed with his abilities. I detected an unmistakable difference (for the better) in his attitude as compared to my perception of the core AutoCAD group's attitude. He seemed to really enjoy interacting with his students. Walsh, George\nCadence George is a smallish individual with big hair and an earring. I happened to be next to him while we were both waiting on someone, and we had a good conversation. I must say that neither George nor any of the other Cadence people were the least bit aloof, and all of them were very approachable. George was certainly no exception. Weyer, Donna\nCompuserver Donna was as friendly and outgoing in person as she is online. I had hoped that she would join us for pizza on Wednesday, but she had a rough day and decided to head for the hotel instead. Yares, Evan\nCADalyst contributor Evan has an imposing presence. Or, said another way, he's tall and has a beer belly. He was at the CADalyst booth on Sunday evening when I first met him, and he immediately remarked that I was a \"well-respected\" Compuserve forumite as I was introducing myself to Art Liddle. I saw Evan several times throughout the week, but unfortunately I never did get a chance to really talk to him one-on-one. ","permalink":"https://www.manusoft.com/archive/anecdotes/au96/","summary":"\u003cp\u003e\u003ca id=\"Introduction\" name=\"Introduction\"\u003e\u003c/a\u003e\u003ch3\u003eIntroduction\u003c/h3\u003e\u003c/p\u003e\n\u003cp\u003eThis year, I decided that Chicago was close enough to home to make the trip to \u003ca href=\"https://www.autodesk.com/autodesk-university/\" target=\"_top\"\u003eAU\u003c/a\u003e. To defray expenses, I offered to teach a course on \"Sheet Metal Flat Development with AutoCAD\" (MCH021).\u003c/p\u003e\n\u003ctable border=\"0\"\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth align=\"left\"\u003e\u003ca href=\"mailto:owenw@manusoft.com\"\u003eOwen Wengerd\u003c/a\u003e, President \u003c/th\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003cth align=\"left\"\u003e\u003ca href=\"/about/\"\u003eManuSoft\u003c/a\u003e \u003c/th\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ca id=\"My_Diary\" name=\"My_Diary\"\u003e\u003c/a\u003e\u003ch3\u003eMy Diary\u003c/h3\u003e\n\u003cp\u003eSeptember 23, 1996\u003cbr /\u003eby \u003ca href=\"mailto:owenw@manusoft.com\"\u003eOwen Wengerd\u003c/a\u003e \u003cbr /\u003e\u003cstrong\u003eAll Rights Reserved\u003c/strong\u003e\u003c/p\u003e","title":"AU '96"},{"content":"\nDo you use AutoCAD in a sheet metal manufacturing environment? Do you perform bend allowance calculations for traditional sheet metal flat development? Take a look at Owen\u0026rsquo;s Autodesk University course on the subject (in MS Word \u0026lsquo;95 format): FlatDev.zip (104k). The course provides a system of generic formulas and instructions. You\u0026rsquo;ll also want to download the two associated AutoLISP functions: an AutoCAD based interactive bend allowance calculator (BCAL.LSP) and a developed blank size calculator (BDEV.LSP), both available on the Freebies page.\n","permalink":"https://www.manusoft.com/archive/articles/sheet-metal-bend-allowance/","summary":"\u003cp\u003e\u003ca id=\"Sheet_Metal_Bend_Allowance\" name=\"Sheet_Metal_Bend_Allowance\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eDo you use AutoCAD in a sheet metal manufacturing environment? Do you perform bend allowance calculations for traditional sheet metal flat development? Take a look at Owen\u0026rsquo;s Autodesk University course on the subject (in MS Word \u0026lsquo;95 format): \u003ca href=\"/dl/FlatDev.zip\"\u003eFlatDev.zip\u003c/a\u003e (104k). The course provides a system of generic formulas and instructions. You\u0026rsquo;ll also want to download the two associated AutoLISP functions: an AutoCAD based interactive bend allowance calculator (\u003ca href=\"/dl/bcal.lsp\"\u003eBCAL.LSP\u003c/a\u003e) and a developed blank size calculator (\u003ca href=\"/dl/bdev.lsp\"\u003eBDEV.LSP\u003c/a\u003e), both available on the \u003ca href=\"/resources/freebies/\"\u003eFreebies\u003c/a\u003e page.\u003c/p\u003e","title":"Sheet Metal Bend Allowance"},{"content":"Preamble The following terms and conditions govern all use of the manusoft.com web site and all content, services and products available at or through the web site, including, but not limited to, the blog Outside The Box (“Blog”), (taken together, the \u0026ldquo;Web Site\u0026rdquo;). The Web Site is owned and operated by ManuSoft and Owen Wengerd (\u0026ldquo;ManuSoft\u0026rdquo;). The Web Site is offered subject to your acceptance without modification of all of the terms and conditions contained herein and all other operating rules, policies and procedures that may be published from time to time on this Web Site by ManuSoft (collectively, the “Agreement”).\nPlease read this Agreement carefully before accessing or using the Web Site. By accessing or using any part of the Web Site, you agree to become bound by the terms and conditions of this agreement. If you do not agree to all the terms and conditions of this agreement, then you may not access the Web Site or use any services. If these terms and conditions are considered an offer by ManuSoft, acceptance is expressly limited to these terms.\nPrivacy Policy ManuSoft will not share personally identifiable information about you with any third party, unless we ask and obtain your explicit permission to do so, or are required by law to do so. Personal or confidential information that you share with us will be used only for the purposes that we tell you it will be used for. We take every reasonable precaution to ensure that your personal information is secure and inaccessible to malicious or unauthorized individuals.\nWe may occasionally contact you for the purpose of gathering additional information needed to assist with a problem you have, or to request additional information related to a transaction that you initiated, however we will never send unsolicited email for marketing or other purposes unless you have explicitly requested that we do so. If you receive \u0026ldquo;spam\u0026rdquo; email purportedly coming from us, please be aware that mass emailers frequently forge the email sender address in order to hide their identity, and the email may in fact originate elsewhere.\nIf you have questions about our privacy policy, or have a privacy related issue that you wish to address with us, please contact us by email at privacy@manusoft.com so we can help resolve any problems you may have.\nRefund Policy If you are not completely satisfied with software purchased from this Web Site for any reason, you may request a full refund within 30 days of purchase by emailing sales@manusoft.com with information sufficient for ManuSoft to locate your purchase records and verify that you are the person that made the original purchase. All refunds will be processed within 14 days of receipt of your request in the same form as the original payment.\nWeb Site Content ManuSoft takes reasonable precautions to ensure that all material available on the Web Site is non-harmful, however you are responsible for taking precautions as necessary to protect yourself and your computer systems from viruses, worms, Trojan horses, and other harmful or destructive content. The Web Site may contain content that contains technical inaccuracies, typographical mistakes, and other errors. The Web Site may contain material, the downloading, copying, or use of which is subject to additional terms and conditions, stated or unstated. ManuSoft disclaims any responsibility for any harm resulting from the use by visitors of the Web Site or any content thereon.\nLinked Content ManuSoft has not reviewed, and cannot review, all of the material, including computer software, made available through the web sites and web pages to which the Web Site links, and that link to the Web Site. ManuSoft has no control over third party web sites and web pages, and is not responsible for their contents or their use. By linking to a non-ManuSoft web site or web page, ManuSoft does not represent or imply that it endorses such web site or web page. You are responsible for taking precautions as necessary to protect yourself and your computer systems from viruses, worms, Trojan horses, and other harmful or destructive content from third party web sites. ManuSoft disclaims any responsibility for any harm resulting from your use of non-ManuSoft web sites and web pages.\nCopyright Infringement As ManuSoft asks others to respect its intellectual property rights, it respects the intellectual property rights of others. If you believe that material located on or linked to by the Web Site violates your copyright, you are encouraged to notify ManuSoft at legal@manusoft.com by supplying details and relevant information regarding your reason for believing that the material is infringing. ManuSoft will respond to any such notice (\u0026ldquo;Infringement Notice\u0026rdquo;), including as required or appropriate by removing the infringing material or removing all links to the infringing material. Any Infringement Notice may be forwarded to third parties or made public at the sole discretion of ManuSoft. You may be liable for damages, including costs and legal fees, if you make material misrepresentations regarding your copyrights.\nIntellectual Property This Agreement does not transfer from ManuSoft to you any ManuSoft or third party intellectual property, and all right, title and interest in and to such property will remain (as between the parties) solely with ManuSoft. All ManuSoft trademarks, service marks, graphics and logos used in connection with the Web Site are trademarks or registered trademarks of ManuSoft or ManuSoft’s licensors. Other trademarks, service marks, graphics and logos used in connection with the Web Site may be the trademarks of other third parties. Your use of the Web Site grants you no right or license to reproduce or otherwise use any ManuSoft or third-party trademarks, service marks, graphics, or logos.\nChanges ManuSoft reserves the right, at its sole discretion, to modify or replace any part of this Agreement. It is your responsibility to check this Agreement periodically for changes. Your continued use of or access to the Web Site following the posting of any changes to this Agreement constitutes acceptance of those changes. ManuSoft may also, in the future, offer new services and/or features through the Web Site (including, the release of new tools and resources). Such new features and/or services shall be subject to the terms and conditions of this Agreement.\nTermination ManuSoft may terminate your access to all or any part of the Web Site at any time, with or without cause, with or without notice, effective immediately. If you wish to terminate this Agreement, you may simply discontinue using the Web Site. All provisions of this Agreement which by their nature should survive termination shall survive termination, including, without limitation, ownership provisions, warranty disclaimers, indemnity and limitations of liability.\nDisclaimer of Warranties The Web Site is provided “as is”. ManuSoft and its suppliers and licensors hereby disclaim all warranties of any kind, express or implied, including, without limitation, the warranties of merchantability, fitness for a particular purpose and non-infringement. Neither ManuSoft nor its suppliers and licensors, makes any warranty that the Web Site will be error free or that access thereto will be continuous or uninterrupted. You understand that you download from, or otherwise obtain content or services through, the Web Site at your own discretion and risk.\nLimitation of Liability In no event will ManuSoft, or its suppliers or licensors, be liable with respect to any subject matter of this agreement under any contract, negligence, strict liability or other legal or equitable theory for: (i) any special, incidental or consequential damages; (ii) the cost of procurement or substitute products or services; (iii) for interruption of use or loss or corruption of data; or (iv) for any amounts that exceed the fees paid by you to ManuSoft under this agreement during the twelve (12) month period prior to the cause of action. ManuSoft shall have no liability for any failure or delay due to matters beyond their reasonable control. The foregoing shall not apply to the extent prohibited by applicable law.\nGeneral Representation and Warranty You represent and warrant that (i) your use of the Web Site will be in strict accordance with this Agreement and with all applicable laws and regulations (including without limitation any local laws or regulations in your country, state, city, or other governmental area, regarding online conduct and acceptable content, and including all applicable laws regarding the transmission of technical data exported from the United States or the country in which you reside) and (ii) your use of the Web Site will not infringe or misappropriate the intellectual property rights of any third party.\nIndemnification You agree to indemnify and hold harmless ManuSoft, its contractors, and its licensors, and their respective directors, officers, employees and agents from and against any and all claims and expenses, including attorneys’ fees, arising out of your use of the Web Site, including but not limited to your violation of this Agreement.\nMiscellaneous This Agreement constitutes the entire agreement between ManuSoft and you concerning the subject matter hereof, and they may only be modified by a written amendment signed by an authorized executive of ManuSoft, or by the posting by ManuSoft of a revised version. Except to the extent applicable law, if any, provides otherwise, this Agreement, any access to or use of the Web Site will be governed by the laws of the state of Florida, U.S.A., excluding its conflict of law provisions, and the proper venue for any disputes arising out of or relating to any of the same will be the state and federal courts located in Florida. Except for claims for injunctive or equitable relief or claims regarding intellectual property rights (which may be brought in any competent court without the posting of a bond), any dispute arising under this Agreement shall be finally settled in accordance with the Comprehensive Arbitration Rules of the Judicial Arbitration and Mediation Service, Inc. (“JAMS”) by three arbitrators appointed in accordance with such Rules. The arbitration shall take place in Pasco County, Florida, in the English language and the arbitral decision may be enforced in any court. The prevailing party in any action or proceeding to enforce this Agreement shall be entitled to costs and attorneys’ fees. If any part of this Agreement is held invalid or unenforceable, that part will be construed to reflect the parties’ original intent, and the remaining portions will remain in full force and effect. A waiver by either party of any term or condition of this Agreement or any breach thereof, in any one instance, will not waive such term or condition or any subsequent breach thereof. You may assign your rights under this Agreement to any party that consents to, and agrees to be bound by, its terms and conditions; ManuSoft may assign its rights under this Agreement without condition. This Agreement will be binding upon and will inure to the benefit of the parties, their successors and permitted assigns.\n","permalink":"https://www.manusoft.com/about/tos/","summary":"\u003ch3 id=\"preamble\"\u003ePreamble\u003c/h3\u003e\n\u003cp\u003eThe following terms and conditions govern all use of the \u003ca href=\"http://manusoft.com/\"\u003emanusoft.com\u003c/a\u003e web site and all content, services and products available at or through the web site, including, but not limited to, the blog \u003ca href=\"/archive/\"\u003eOutside The Box\u003c/a\u003e (“Blog”), (taken together, the \u0026ldquo;Web Site\u0026rdquo;). The Web Site is owned and operated by ManuSoft and Owen Wengerd (\u0026ldquo;ManuSoft\u0026rdquo;). The Web Site is offered subject to your acceptance without modification of all of the terms and conditions contained herein and all other operating rules, policies and procedures that may be published from time to time on this Web Site by ManuSoft (collectively, the “Agreement”).\u003c/p\u003e","title":"Terms of Service"}]