Saturday, July 6, 2013
Where have I been for the last year?
I'm hoping to keep this relatively short, I don't think I'll succeed.A year ago, my parents and I got in the car. Our destination, London Stansted airport, the reason, I was going digging in the Czech Republic. How do I remember, it was the same weekend as the UK grand prix. Now with the grand prix occurring at Silverstone again, it brings back those memories of what I've done, where I've been, who I've met and the distance covered.Czech Republic, Bulgaria, Spain, Portugal, Morocco. I've met people from every single inhabited continent, from an exhaustive range of countries. I've seen incredible sights, experienced highs and lows, spoken up to eight different languages (Only three proficiently), and the highlight of it all, has been Granada, may it carry on for another millennium as it is. To me, it is perfect. So on today, the day I started this adventure I'm on, it seems ironically apt that once again I am travelling.Sadly, this year ahead might just be a bit more dull. Final year, a dissertation and graduation. Let's try to live it up whilst we can now right? - Full Post
Scalability: Links, News And Resources (4)
Scaling with MongoDB
Big Data @ Foursquare: Slides from our recent talk
Fun with MongoDB replica sets
Scaling Rails
Voldemort is a distributed key-value storage system
USING HAPROXY FOR MYSQL FAILOVER AND REDUNDANCY
Amazon’s Dynamo
Sharding & IDs at Instagram
HAProxy
The Reliable, High Performance TCP/HTTP Load Balancer
Ken Little on Scaling Tumblr
Ken Little talks about scaling Tumblr to keep up with their blogging users: scaling the data model, sharding, their PHP frontend and the Scala backend, and much more.
The 4 Building Blocks Of Architecting Systems For Scale
nsisodiya / Demo-Scalable-App
This is small demo of Scalable JavaScript Application
Scaling to Millions of Simultaneous Connections: Rick Reed
Drill
Drill is a distributed system for interactive analysis of large-scale datasets, inspired by Google’s Dremel.
NuoDB
An Easy Way to Build Scalable Network Programs
Memcached
Redis Virtual Memory: the story and the code
Improving Web Site Performance and Scalability While Saving Money
Scalable JavaScript Design Patterns
Cinchcast Architecture – Producing 1,500 Hours Of Audio Every Day
The Netflix Simian Army
C Is For Compute – Google Compute Engine (GCE)
My Links
Keep tuned!
Angel “Java” Lopez
- Full Post
TDD Kata (5): Tree Search
Some months ago, I read this message in a TDD list:
Implementation of game tree search using TDD
I read:
I am trying to use TDD to implement game tree searching but I am running into some issues.Using C#, MS Test and Rhino Mocks. My requirement is to traverse a tree to a specified depth and find the maximum value of the nodes at this depth. If a path ends before the specified depth then the value of the last node in the path should be considered. Sample usage looks like this: var depth = 5; var tree = new GameTree(); var treeSearch = new TreeSearch();var maxValue = treeSearch.FindMaxValue(tree, depth);
The first tests to implement:
* A search to depth zero should return the value of the root node * A search to depth one with no children should return the value of the root node * A search to depth one with one child should return the value of the child * A search to depth one with two children should return the highest value of the two children * A search to depth one of a tree with depth two should return the maximum value at depth one
All right, but:
Up to this point the tests are simple enough and mocking of the tree is simple. The last test starts driving towards a depth first tree traversal.Now I start on depth 2 tests which should drive the rest of the tree traversal algorithm: * A search to depth two should return the maximum value at depth two I decided to mock a complete binary tree with depth 2
The problem is the use of mocks: it complicates the solution. So, I started to solve the problem, without mocks, simply using a tree implementation to use as a base for other tests:
The solution is simple:
You can see the history of development at:
All tests are green:
Lesson learnt: some times (many times is easier to implement something concrete than build a mock. The tree I implemented could be refined, could be the base for an interface extraction, or could be implemented in other ways. But it served as a base for our search algorithm, using TDD.
Keep tuned!
Angel “Java” Lopez
- Full Post
I'm Not Calling You A Liar
I've gone on record as saying that I have wonderful friends, truly wonderful friends. I love my friends - my close friends - as much as I love my family. I generally go to them for all kinds of advice and also when I simply want to have a good time with someone I like.There is, however one thing about my friends that I hate. When friends tell me (in regards to relationships) that I am "a great guy... - Full Post
Running and Reading
The last week or so has been one of the more frustrating and interesting of my life. On the positive side, I ran 6 miles the other day and felt great afterwards; no cramps, no serious burn (if you run, legitimately run, there's going to be burn) and my chest felt great, no breathing issues. I think I am really starting to get a more healthy cardiovascular system developed; it only took 2 and a half years or so but it happened finally. The kind of annoying news is that I have not slept (as of this posting) in 40 hours. At about 6am this morning I decided that I had officially reached the point where I needed to wither be up or go to bed all day; I opted to get up. I ran about the most pleasant four miles of my life; it was humid and cool, the campus was vacant (as it should be at 6am on a Sunday) and I had plenty of time to run and be alone with my thoughts. Another bit of good information is that I finally got some thesis stuff done; I met with the research librarian here on campus who gave me a couple of great databases and research programs that I know are going to be really helpful. I have not yet received a stipend check (first one is June 1st I think) but I have not to do anything I would have to pay for... - Full Post
The GRE is Laaaame
The Sentence Equivalence questions on the GRE are asinine. They aren't asking you to relate two words together or chose the two words that most closely are synonymous; they are asking you to choose from (what essentially is) 3 pairs of synonyms and decide which pair fits best and best is arbitrary because it depends on what meaning they want the sentence to have; all 3 word pairings make complete sense but if it is not the one ETS likes the most, thinks is the shiniest and prettiest, then it is not right. I hate this country's obsession with standardized tests. That is all. - Full Post
ACA and Plotting Image Borders
My firm is currently using ACA 2010 for most of our production work that is not being done in Revit. Our template file has the IMAGEFRAME variable set to 2, so that the frames are visible but they do not print. (We have all of the "frame" variables set to 2, which can be done all at once by using the FRAME command.)
I have found, however, after starting a new drawing, that the frames around images will plot, particularly those nested within an externally referenced file. I double check the file, and IMAGEFRAME is set to 2, yet the border shows on my plot. I have no explanation for this, but I do have a workaround - if I set the value to 0 (do not show or plot the borders) and then back to 2, the setting "takes" and the borders remain visible but do not plot. - Full Post
I have found, however, after starting a new drawing, that the frames around images will plot, particularly those nested within an externally referenced file. I double check the file, and IMAGEFRAME is set to 2, yet the border shows on my plot. I have no explanation for this, but I do have a workaround - if I set the value to 0 (do not show or plot the borders) and then back to 2, the setting "takes" and the borders remain visible but do not plot. - Full Post
ACA Ceiling Grids: The Cell Component
Like all ACA grid objects, a Ceiling Grid has a Cell component, which marks the center of each cell in the grid. You may not be aware of this component, since, in the out-of-box Display settings, this component is turned off. It is also mapped to a non-plotting layer (G-Anno-Nplt for US imperial content), so turning the component on will not affect the final plotted output.
The Cell component displays as a circle at the center of each cell in the grid. You can use the CENter OSNAP to place ceiling objects at the center of a ceiling panel.
Next post in the series: - Full Post
Revit: "Blank" Dimension
I will leave the debate over whether or not you should ever do this to others, but thanks to , I now know how to create a dimension with absolutely no dimension value or other text showing. You may be aware that while you can override the dimension value with text, by double-clicking on the dimension text to open the Dimension Text dialog,
Revit will not allow you to enter a string that consists only of one or more Space characters here. But if you right click, a context menu will appear, and you can choose the Insert Unicode control character flyout, and then the Unit Separator (Segment separator) character.
The net result is a dimension string without any text.
I was able to do this in Revit Architecture 2012. - Full Post
ACA Ceiling Grids: Creating a Mask Block
First post in the series:
Previous post in the series:
As seen in the previous article, Mask Blocks provide a great way to hide unwanted parts of a Ceiling Grid when an item to be placed in the ceiling is larger than one grid cell. The out-of-the-box content contains several light fixtures as part of a Mask Block, but you may need to create your own, to match your office standard graphics.
Mask Blocks have two parts, one required and one optional. The required part is one or more closed 2D polylines, splines, ellipses, or circles, to define the area to be masked. The closed polylines have to be the "newer," optimized LWPolyline type. A single object will define the area to be masked. If more than one object, or "ring" is selected, they must lie completely within or outside of each other; the rings cannot cross or touch each other. The first object will be define a mask area; you will be prompted to indicate whether subsequent rings are "void areas", or holes in the mask area, or an additional mask area.
The second, optional part is additional graphics. If you use the out-of-the-box display settings, the ring(s) selected in for the first part get placed on a non-plot layer; the additional graphics provide the plotable graphics of the Mask Block. The out-of-the-box luminaires that would span two square tiles (2'-0" or 450 mm square) are Mask Blocks with a Multi-View Block for the additional graphics. For the out-of-the-box General and Reflected Display Representations of Mask Blocks, the additional graphics end up on Layer 0, with ByBlock attributes. As these are nested within the Mask Block object, they end up inheriting the properties of the layer on which the Mask Block is placed.
The first step in creating a Mask Block is to draw the closed 2D polyline(s), spline(s), ellipse(s), and/or circle(s) that will define the mask. As previously noted, these items will define a component that is on a non-plotting layer if you are using the out-of-the-box Display Representations.
The mask created will stop short of masking any AEC object linework that is directly under the defining linework, so to mask a 2'-0" square Ceiling Grid for a 4'-0" x 2'-0" object, you can draw the defining closed polyline rectangle with opposite sides of 4'-0" and 2'-0". When aligned with a Ceiling Grid, the crossing grid will be masked, but the perimeter grids will still display.
The next step is to create the additional graphics. For this example, I created a Multi-View Block with the plan graphics for a 4'-0" x 2'-0" supply diffuser. Place an instance of the additional graphics in the proper location, relative to the mask definition object(s).
If you want the additional graphics to pick up the layer, color, linetype, lineweight and plotstyle of the parent Mask Block, then the object(s) for the additional graphics should be on Layer 0, with color, linetype, lineweight and plotstyle set to ByBlock. If your additional graphics include an AutoCAD block or an ACA Multi-View Block, then the objects in the block definition or view block definition should also be on Layer 0 with ByBlock attributes. To set the attributes of an ACA object (such as a Multi-View Block), select the object, right click and choose Edit Object Display from the context menu, and choose the General Properties tab, since these properties are not exposed for ACA objects on the Design tab of the Properties palette.
Finally, open the Style Manager (on the Manage ribbon tab, on the Style & Display panel, choose the Style Manager tool), expand the Multi-Purpose Objects node and select the Mask Block Definitions node. In the right pane, right click on an empty area and choose New from the context menu. Give the new Mask Block Definition a name and, optionally, a description. Right click on the new name and choose Set From... - Full Post
Previous post in the series:
As seen in the previous article, Mask Blocks provide a great way to hide unwanted parts of a Ceiling Grid when an item to be placed in the ceiling is larger than one grid cell. The out-of-the-box content contains several light fixtures as part of a Mask Block, but you may need to create your own, to match your office standard graphics.
Mask Blocks have two parts, one required and one optional. The required part is one or more closed 2D polylines, splines, ellipses, or circles, to define the area to be masked. The closed polylines have to be the "newer," optimized LWPolyline type. A single object will define the area to be masked. If more than one object, or "ring" is selected, they must lie completely within or outside of each other; the rings cannot cross or touch each other. The first object will be define a mask area; you will be prompted to indicate whether subsequent rings are "void areas", or holes in the mask area, or an additional mask area.
The second, optional part is additional graphics. If you use the out-of-the-box display settings, the ring(s) selected in for the first part get placed on a non-plot layer; the additional graphics provide the plotable graphics of the Mask Block. The out-of-the-box luminaires that would span two square tiles (2'-0" or 450 mm square) are Mask Blocks with a Multi-View Block for the additional graphics. For the out-of-the-box General and Reflected Display Representations of Mask Blocks, the additional graphics end up on Layer 0, with ByBlock attributes. As these are nested within the Mask Block object, they end up inheriting the properties of the layer on which the Mask Block is placed.
The first step in creating a Mask Block is to draw the closed 2D polyline(s), spline(s), ellipse(s), and/or circle(s) that will define the mask. As previously noted, these items will define a component that is on a non-plotting layer if you are using the out-of-the-box Display Representations.
The mask created will stop short of masking any AEC object linework that is directly under the defining linework, so to mask a 2'-0" square Ceiling Grid for a 4'-0" x 2'-0" object, you can draw the defining closed polyline rectangle with opposite sides of 4'-0" and 2'-0". When aligned with a Ceiling Grid, the crossing grid will be masked, but the perimeter grids will still display.
The next step is to create the additional graphics. For this example, I created a Multi-View Block with the plan graphics for a 4'-0" x 2'-0" supply diffuser. Place an instance of the additional graphics in the proper location, relative to the mask definition object(s).
If you want the additional graphics to pick up the layer, color, linetype, lineweight and plotstyle of the parent Mask Block, then the object(s) for the additional graphics should be on Layer 0, with color, linetype, lineweight and plotstyle set to ByBlock. If your additional graphics include an AutoCAD block or an ACA Multi-View Block, then the objects in the block definition or view block definition should also be on Layer 0 with ByBlock attributes. To set the attributes of an ACA object (such as a Multi-View Block), select the object, right click and choose Edit Object Display from the context menu, and choose the General Properties tab, since these properties are not exposed for ACA objects on the Design tab of the Properties palette.
Finally, open the Style Manager (on the Manage ribbon tab, on the Style & Display panel, choose the Style Manager tool), expand the Multi-Purpose Objects node and select the Mask Block Definitions node. In the right pane, right click on an empty area and choose New from the context menu. Give the new Mask Block Definition a name and, optionally, a description. Right click on the new name and choose Set From... - Full Post
Synchronizing Annotative Content in ACA
In addition to allowing one item of annotation to appear at the proper size for multiple drawing scales, annotative content also offers the ability to have the position of the item to vary between scales. This is often quite handy, as the change in size may require a rearrangement of the annotation to have it read properly at each scale.
There may be times, however, when you want to reset all of the scales to match the position of one of the scales. Set the scale with the desired position current, and then use the ANNORESET command to do that. You can type that command, or use the context menus.
This also works with ACA annotative objects, such as Schedule Tags.
- Full Post
There may be times, however, when you want to reset all of the scales to match the position of one of the scales. Set the scale with the desired position current, and then use the ANNORESET command to do that. You can type that command, or use the context menus.
This also works with ACA annotative objects, such as Schedule Tags.
- Full Post
ACA 2014: Property Set Defintion Auto-attach
AutoCAD® Architecture 2014 has a new feature that allows you to enable the automatic attachment of Property Set Definitions [PSDs] to objects. This setting is on a by-drawing basis, so you can have this turned on in some drawings and off in others.
To turn on this feature, open the Options dialog and go to the AEC Object Settings tab. In the lower left corner, in the AEC Property Set Definitions area, clik the Automatically Attach toggle so that it has a checkmark. (Note also the drawing icon next to this item, indicating that this setting is saved in the drawing, and not in your Windows registry, so any change affects only this drawing.)
You can also use the AECPSDAUTOATTACH command at the Command Line to control this setting. ON or 1 enables the auto-attach feature; OFF or 0 disables it.
When Auto-attach is enabled, any existing PSDs in that file will be automatically attached to all objects or styles/definitions to which a specific PSD applies and to which the PSD had not been previously attached. When a new object is created, any applicable object-based PSD will be automatically attached; when a new style or definition is created or imported, any applicable style-based PSD will be attached.
Here are some observations and comments based on working with this feature:
While working outside of the ACA Drawing Management environment (Project Browser and Project Navigator), if you have a file ["File A"] with objects/styles that do not have certain PSDs that apply to those objects/styles attached, and you externally reference File A into a second file ["File B"] which has those PSDs in it and which also has Auto-attach enabled, the style-based PSDs in File B will be attached to the applicable styles/definitions in File A and the save time and date for File A will be updated. If style-based PSDs of the same name exist in File A (but were not previously attached to one or more styles/definitions), then the version in File A will be attached, even if it differs from the version in File B. If a style-based PSD of the same name does not exist in File A, then the style-based PSD will be copied from File B to File A. If there are no style-based PSDs in File B, or if there are style-based PSDs in File A with the same names and those are already attached to the styles/definitions in File A, then no action will be taken on File A.
In the same scenario as Item 1 above, if there are style-based PSDs to be attached to objects in File A and if File A is from a previous file format, you will get a warning dialog and be given the choice to either proceed, saving File A in the current file format (2013, for ACA 2014) or to not save File A, discarding the "changes from this session" - in other words, not attaching the style-based PSDs in File A.
In the same scenario as Item 1 above, the object-based PSDs in File B will be attached to the objects in File A, but only as property data overrides in File B. If those PSDs are later attached in File A, any values added there that are different from those in File B will not show in File B due to the property data override.
In the same scenario as Item 1 above, if File A is open at the time it is being externally referenced into File B, the file lock on File B will prevent any style-based PSDs from being added to File A when Auto-attach is enabled. Once this fails, neither subsequent saving, closing or re-opening of File B nor moving the external reference instance within File B will trigger adding the style-based PSDs to File A. XATTACHing another instance of File A within File B will trigger another attempt to push the style-based PSDs to the File A.
In the ACA Drawing Management environment (Project Browser and Project Navigator), the Auto-attach feature works the same way as noted above when working outside of it. I had expected that object-based PSDs being auto-attached to an object in an externally referenced Construct in a View file would have been attached at the Construct level, either directly on an object in the Construct, or as a property data override in the Construct to an object in a nested external reference (Element) within the Construct. That is how PSDs are treated when tagging an item through an externally referenced Construct in a View file.
Overall, I think I will be recommending that this feature remains turned off in most situations. Where it makes sense to activate it, it should be turned back off once its work has been done. It might work to turn it on in the "base" or model files (equivalent to Constructs) but it should be off in "sheet" files (or, in the Drawing Management environment, in Views and Sheets ), so that unwanted property data overrides are not introduced. I would rather have the project teams have to manually attach missing property sets in the proper place, the model file, than to have it appear to be attached in one sheet file, but have the data only exist in that one sheet file, as an override, than on the actual object, which could be externally referenced by other files. - Full Post
To turn on this feature, open the Options dialog and go to the AEC Object Settings tab. In the lower left corner, in the AEC Property Set Definitions area, clik the Automatically Attach toggle so that it has a checkmark. (Note also the drawing icon next to this item, indicating that this setting is saved in the drawing, and not in your Windows registry, so any change affects only this drawing.)
You can also use the AECPSDAUTOATTACH command at the Command Line to control this setting. ON or 1 enables the auto-attach feature; OFF or 0 disables it.
When Auto-attach is enabled, any existing PSDs in that file will be automatically attached to all objects or styles/definitions to which a specific PSD applies and to which the PSD had not been previously attached. When a new object is created, any applicable object-based PSD will be automatically attached; when a new style or definition is created or imported, any applicable style-based PSD will be attached.
Here are some observations and comments based on working with this feature:
While working outside of the ACA Drawing Management environment (Project Browser and Project Navigator), if you have a file ["File A"] with objects/styles that do not have certain PSDs that apply to those objects/styles attached, and you externally reference File A into a second file ["File B"] which has those PSDs in it and which also has Auto-attach enabled, the style-based PSDs in File B will be attached to the applicable styles/definitions in File A and the save time and date for File A will be updated. If style-based PSDs of the same name exist in File A (but were not previously attached to one or more styles/definitions), then the version in File A will be attached, even if it differs from the version in File B. If a style-based PSD of the same name does not exist in File A, then the style-based PSD will be copied from File B to File A. If there are no style-based PSDs in File B, or if there are style-based PSDs in File A with the same names and those are already attached to the styles/definitions in File A, then no action will be taken on File A.
In the same scenario as Item 1 above, if there are style-based PSDs to be attached to objects in File A and if File A is from a previous file format, you will get a warning dialog and be given the choice to either proceed, saving File A in the current file format (2013, for ACA 2014) or to not save File A, discarding the "changes from this session" - in other words, not attaching the style-based PSDs in File A.
In the same scenario as Item 1 above, the object-based PSDs in File B will be attached to the objects in File A, but only as property data overrides in File B. If those PSDs are later attached in File A, any values added there that are different from those in File B will not show in File B due to the property data override.
In the same scenario as Item 1 above, if File A is open at the time it is being externally referenced into File B, the file lock on File B will prevent any style-based PSDs from being added to File A when Auto-attach is enabled. Once this fails, neither subsequent saving, closing or re-opening of File B nor moving the external reference instance within File B will trigger adding the style-based PSDs to File A. XATTACHing another instance of File A within File B will trigger another attempt to push the style-based PSDs to the File A.
In the ACA Drawing Management environment (Project Browser and Project Navigator), the Auto-attach feature works the same way as noted above when working outside of it. I had expected that object-based PSDs being auto-attached to an object in an externally referenced Construct in a View file would have been attached at the Construct level, either directly on an object in the Construct, or as a property data override in the Construct to an object in a nested external reference (Element) within the Construct. That is how PSDs are treated when tagging an item through an externally referenced Construct in a View file.
Overall, I think I will be recommending that this feature remains turned off in most situations. Where it makes sense to activate it, it should be turned back off once its work has been done. It might work to turn it on in the "base" or model files (equivalent to Constructs) but it should be off in "sheet" files (or, in the Drawing Management environment, in Views and Sheets ), so that unwanted property data overrides are not introduced. I would rather have the project teams have to manually attach missing property sets in the proper place, the model file, than to have it appear to be attached in one sheet file, but have the data only exist in that one sheet file, as an override, than on the actual object, which could be externally referenced by other files. - Full Post
ACA 2014: Additional New Features/Improvements
In addition to the features discussed in the previous four posts, there are several additional additions/improvements to look for in AutoCAD® Architecture 2014.3D Orbit Performance
The full regeneration that takes place after ending the use of the 3DORBIT command in previous releases of ACA (and AMEP) has been eliminated, allowing you to continue to work on your model without interruption. This does not appear to apply to the 2D Wireframe visual style, during which surface hatching is turned off and after which I still get a regeneration while restoring the surface hatching.Project Information File Backup
If you are using the Drawing Management of ACA/AMEP, you may have run into a situation where your project information file (.APJ) had become corrupted or accidentally deleted. While not a frequent occurrence, rebuilding this critical file can take a significant amount of time from what is likely an already tight project schedule. In the 2014 release, ACA and AMEP will create a backup APJ file which can be used to replace a corrupt or deleted APJ file. A new backup is created each time a project is opened and the APJ file is different from the current backup file. The backup file is stored in the same folder and with the same name, but with an extension of .AP$. All you need to do to restore the backup is to move the corrupt file to a different folder and then change the extension from .AP$ to .APJ.Combined Deployment
After setting up deployments for both 32-bit and 64-bit platforms, these can be combined into a single, platform-neutral, deployment by using the CombineDeploy.exe tool. This tool can be found in [AdminImageRootFolder]\Tools.Adding Extension to a Deployment
Additional software can be included in a deployment, provided that it is an installable component, such as an MSI or a setup.exe. You can include this additional software in the section so labeled on the main Product Selection page.Autodesk Uninstall Tool
A set of Autodesk products can now be uninstalled with one action, by using the Autodesk Uninstall Tool, rather than uninstalling each product, one at a time, through the Windows Control Panel, Programs, Programs and Features.Annotation Scaling and Unit Scaling
ACA and AMEP have featured real-world units and a means for varying the display of annotation for different scales since their initial releases. The introduction of annotation scaling in AutoCAD resulted in certain low-level conflicts between the two systems when the drawing units were changed. These conflicts have been eliminated.IFC
Both Column-Grid and Enhanced-Custom-Grid can now be exported to IfcGrid. - Full Post
The full regeneration that takes place after ending the use of the 3DORBIT command in previous releases of ACA (and AMEP) has been eliminated, allowing you to continue to work on your model without interruption. This does not appear to apply to the 2D Wireframe visual style, during which surface hatching is turned off and after which I still get a regeneration while restoring the surface hatching.Project Information File Backup
If you are using the Drawing Management of ACA/AMEP, you may have run into a situation where your project information file (.APJ) had become corrupted or accidentally deleted. While not a frequent occurrence, rebuilding this critical file can take a significant amount of time from what is likely an already tight project schedule. In the 2014 release, ACA and AMEP will create a backup APJ file which can be used to replace a corrupt or deleted APJ file. A new backup is created each time a project is opened and the APJ file is different from the current backup file. The backup file is stored in the same folder and with the same name, but with an extension of .AP$. All you need to do to restore the backup is to move the corrupt file to a different folder and then change the extension from .AP$ to .APJ.Combined Deployment
After setting up deployments for both 32-bit and 64-bit platforms, these can be combined into a single, platform-neutral, deployment by using the CombineDeploy.exe tool. This tool can be found in [AdminImageRootFolder]\Tools.Adding Extension to a Deployment
Additional software can be included in a deployment, provided that it is an installable component, such as an MSI or a setup.exe. You can include this additional software in the section so labeled on the main Product Selection page.Autodesk Uninstall Tool
A set of Autodesk products can now be uninstalled with one action, by using the Autodesk Uninstall Tool, rather than uninstalling each product, one at a time, through the Windows Control Panel, Programs, Programs and Features.Annotation Scaling and Unit Scaling
ACA and AMEP have featured real-world units and a means for varying the display of annotation for different scales since their initial releases. The introduction of annotation scaling in AutoCAD resulted in certain low-level conflicts between the two systems when the drawing units were changed. These conflicts have been eliminated.IFC
Both Column-Grid and Enhanced-Custom-Grid can now be exported to IfcGrid. - Full Post
Release of CEDET 1.0!
After many years of development, numerous 1.0preX versions, version 1.0 of CEDET package was released.
This version differs from previous version - 1.0pre7, and contains many changes in Semantic, EDE, and other subsystems. Full list of changes you can find in .
Source code you from project's page and compile it .
And after release 1.0, development team continue to work on further integration of package into GNU Emacs, development of new parsers and other stuff, that will allow to improve work with different languages and build tools. - Full Post
This version differs from previous version - 1.0pre7, and contains many changes in Semantic, EDE, and other subsystems. Full list of changes you can find in .
Source code you from project's page and compile it .
And after release 1.0, development team continue to work on further integration of package into GNU Emacs, development of new parsers and other stuff, that will allow to improve work with different languages and build tools. - Full Post
Readings digest. January 2011
Maybe you noticed that there was no books review for December — I had too much to do, so I hadn't finished reading of any book. But Christmas and New Year brought me more free time, and I finished reading of several books.
DSLs in ActionSometime ago I decided, that I need to read something about domain specific languages (DSL) to find new ideas, compare with my own implementation (I developed several DSLs, that I use in my projects), and maybe improve my solutions. I selected , written by Debasish Ghosh, who is well-known developer in Scala community, although he is also using other languages, for example, Haskell, Groovy, Clojure. When I was trying to select which book to read, I also thought about book, written by Martin Fowler, but Manning offered good discount on books, so I bought their book ;-)This book is written using very simple and clear language, but it provides very interesting information. Author uses in examples different languages — Ruby, Groovy, Scala, Clojure (in this book the only languages that are working on JVM are used, so some things are applicable only to this platform). This allows to demonstrate different approaches to design and development of DSLs (you can also read on why this book is polyglotic).First part of book is dedicated to DSLs basics — author begins with description what is DSL, what parts it consists from, which types of DSLs are exist, how they are executed, benefits and drawbacks of using DSLs in your projects. Separate section describes how to model specific domains, and how this affect DSLs structure.Second chapter demonstrates simple DSL, built in Java, and analysis of its drawbacks is performed. In the next section, the similar DSL is created with Groovy, and its benefits are described, comparing with first implementation. In the rest of this chapter the DSLs implementation patterns are reviewed.The third chapter is dedicated to description of how to integrated DSLs into your project. It describes java scripting engine, Spring-based integration, and some other. For each of approaches, benefits and drawbacks are analyzed, including how it could affect DSL's implementation, and related questions.The second part (chapters 4-8) concentrates on DSLs implementation using different programming languages. 4th chapter describes common patterns in implementation of internal DSLs — meta-programming, typed abstractions, run-time code generation, etc. And next 2 chapters (5 and 6) demonstrate this with DSLs implementation in Ruby, Groovy, Clojure, and Scala.Seventh chapter continues DSLs implementation theme with description of how to implement external DSLs. The different types of parsers of reviewed, that could be used to parse DSL's code, and small example of ANTLR's usage is provided. There is also small section on Xtext — Eclipse's framework, that simplifies development of external DSLs.In 8th chapter, the use of parsers combinators is demonstrated with application to development of external DSLs. Chapter begins with small introduction to parsers combinators, and continues with demonstration of how Scala's parsers library could be used to create external DSL.The last part of the book provides some thoughts on modern tendencies in DSLs development, support tools, etc.Besides main material, the book has several appendixes that contain short descriptions of programming languages, that were used in book, so you can get familiar with them, if you hadn't used them yet. Separately, I want to mention "philosophical" appendix A, that dedicated to discussion of role of abstractions in domain modeling, how purity and lack of side effects affect development, and some related problems. Besides this, you can also look on appendix B, that discusses role of meta-programming in DSL's development.Conclusion: if you're using and/or developing DSLs, or you're interested in this topic, then you need to read this book — it contains a lot of practical information, that could be useful in DSLs development.Camel in ActionFor one of my "pet" projects I was need to create data processing system that will get and process data from different sources, so, after some googling, I found , that was looked pretty interesting and mature project, so I bought at Manning the books, written by Claus Ibsen and Jonathan Anstey.The book begins (chapter 1) with introduction into Apache Camel — which tasks are solved with it, which components it consists from, etc. The second chapter provides more detailed description of routes, and how you can create them using code in Java or Spring.The second part of book describes basic Camel's techniques — how to convert data, handle errors, test code, use additional components (such as JMS, databases, etc.).And third parts provides description of how to work with transactions inside Camel's workflow, how to process data concurrently. There are also chapters on deployment of projects, that are using Camel, and how to monitor Camel in production environment.Separate chapter (11th) describes development process for projects that are using Camel, including development of new adapters and components. Besides this, there is description of DSL, written in Scala (although, from my point of view, the project looks more interesting), and also shown how to use Camel with other languages.Conclusion: if you interested in Apache Camel's usage, then you can acquire this book — it contain pretty good introduction to this system, and could be used as reference to some of the base components.P.S. The new project was also created to integrate Clojure with Apache Camel. Project is called , and if you interested in it, then you can join to discussions in specially created .Test-driven development: By ExampleSeveral days ago I made a presentation (for our internal developers seminar) on test driven development (TDD) and unit testing, and during preparation, I decided to read something from peoples, who were founders of this movement. The Extreme Programming series I read many years ago, right after release of corresponding books, so I decided to read the book by Kent Beck.Book isn't big (about 200 pages), but I think, that it still too big for this topic — author took small problem (exchange conversion), and describes test-driven implementation of solution in great details. This example is used in the first part of the book to demonstrate basics of TDD and unit testing.In the second part, TDD is illustrated by implementing of xUnit-like testing framework for Python language, with detailed description of all necessary steps.The third part of the book is dedicated to description of base approaches and patterns in test-driven development, how to design code for testability, how to design tests, etc.Conclusion: this is pretty good introduction to TDD, but I could recommend it only for people who never used TDD in their work — it's too elementary from my point of view. Although, there are some good advices on code organization, workflow, etc. But if you know something about unit testing, then you can find other sources of information. - Full Post
DSLs in ActionSometime ago I decided, that I need to read something about domain specific languages (DSL) to find new ideas, compare with my own implementation (I developed several DSLs, that I use in my projects), and maybe improve my solutions. I selected , written by Debasish Ghosh, who is well-known developer in Scala community, although he is also using other languages, for example, Haskell, Groovy, Clojure. When I was trying to select which book to read, I also thought about book, written by Martin Fowler, but Manning offered good discount on books, so I bought their book ;-)This book is written using very simple and clear language, but it provides very interesting information. Author uses in examples different languages — Ruby, Groovy, Scala, Clojure (in this book the only languages that are working on JVM are used, so some things are applicable only to this platform). This allows to demonstrate different approaches to design and development of DSLs (you can also read on why this book is polyglotic).First part of book is dedicated to DSLs basics — author begins with description what is DSL, what parts it consists from, which types of DSLs are exist, how they are executed, benefits and drawbacks of using DSLs in your projects. Separate section describes how to model specific domains, and how this affect DSLs structure.Second chapter demonstrates simple DSL, built in Java, and analysis of its drawbacks is performed. In the next section, the similar DSL is created with Groovy, and its benefits are described, comparing with first implementation. In the rest of this chapter the DSLs implementation patterns are reviewed.The third chapter is dedicated to description of how to integrated DSLs into your project. It describes java scripting engine, Spring-based integration, and some other. For each of approaches, benefits and drawbacks are analyzed, including how it could affect DSL's implementation, and related questions.The second part (chapters 4-8) concentrates on DSLs implementation using different programming languages. 4th chapter describes common patterns in implementation of internal DSLs — meta-programming, typed abstractions, run-time code generation, etc. And next 2 chapters (5 and 6) demonstrate this with DSLs implementation in Ruby, Groovy, Clojure, and Scala.Seventh chapter continues DSLs implementation theme with description of how to implement external DSLs. The different types of parsers of reviewed, that could be used to parse DSL's code, and small example of ANTLR's usage is provided. There is also small section on Xtext — Eclipse's framework, that simplifies development of external DSLs.In 8th chapter, the use of parsers combinators is demonstrated with application to development of external DSLs. Chapter begins with small introduction to parsers combinators, and continues with demonstration of how Scala's parsers library could be used to create external DSL.The last part of the book provides some thoughts on modern tendencies in DSLs development, support tools, etc.Besides main material, the book has several appendixes that contain short descriptions of programming languages, that were used in book, so you can get familiar with them, if you hadn't used them yet. Separately, I want to mention "philosophical" appendix A, that dedicated to discussion of role of abstractions in domain modeling, how purity and lack of side effects affect development, and some related problems. Besides this, you can also look on appendix B, that discusses role of meta-programming in DSL's development.Conclusion: if you're using and/or developing DSLs, or you're interested in this topic, then you need to read this book — it contains a lot of practical information, that could be useful in DSLs development.Camel in ActionFor one of my "pet" projects I was need to create data processing system that will get and process data from different sources, so, after some googling, I found , that was looked pretty interesting and mature project, so I bought at Manning the books, written by Claus Ibsen and Jonathan Anstey.The book begins (chapter 1) with introduction into Apache Camel — which tasks are solved with it, which components it consists from, etc. The second chapter provides more detailed description of routes, and how you can create them using code in Java or Spring.The second part of book describes basic Camel's techniques — how to convert data, handle errors, test code, use additional components (such as JMS, databases, etc.).And third parts provides description of how to work with transactions inside Camel's workflow, how to process data concurrently. There are also chapters on deployment of projects, that are using Camel, and how to monitor Camel in production environment.Separate chapter (11th) describes development process for projects that are using Camel, including development of new adapters and components. Besides this, there is description of DSL, written in Scala (although, from my point of view, the project looks more interesting), and also shown how to use Camel with other languages.Conclusion: if you interested in Apache Camel's usage, then you can acquire this book — it contain pretty good introduction to this system, and could be used as reference to some of the base components.P.S. The new project was also created to integrate Clojure with Apache Camel. Project is called , and if you interested in it, then you can join to discussions in specially created .Test-driven development: By ExampleSeveral days ago I made a presentation (for our internal developers seminar) on test driven development (TDD) and unit testing, and during preparation, I decided to read something from peoples, who were founders of this movement. The Extreme Programming series I read many years ago, right after release of corresponding books, so I decided to read the book by Kent Beck.Book isn't big (about 200 pages), but I think, that it still too big for this topic — author took small problem (exchange conversion), and describes test-driven implementation of solution in great details. This example is used in the first part of the book to demonstrate basics of TDD and unit testing.In the second part, TDD is illustrated by implementing of xUnit-like testing framework for Python language, with detailed description of all necessary steps.The third part of the book is dedicated to description of base approaches and patterns in test-driven development, how to design code for testability, how to design tests, etc.Conclusion: this is pretty good introduction to TDD, but I could recommend it only for people who never used TDD in their work — it's too elementary from my point of view. Although, there are some good advices on code organization, workflow, etc. But if you know something about unit testing, then you can find other sources of information. - Full Post
Small books review
I hadn't blogged for a long time, and also wanted to blog about books, read during last 2 months, but currently I have no time - several releases straight at work, plus there are several personal projects, so I decided, that I'll write only about very interesting books. You can find reviews of my read books .Shortly about read booksDuring my vacation in March, I finished , that was in my reading queue for a long time. This book gives understanding how CLOS was designed, how concrete solutions was selected, etc.
In April I read 2 books from Manning (they asked for review): и . First wasn't very interesting for me - I'm working in this branch for a long time, plus I already used tika in my projects, but I think, that book will interesting for peoples who will need to extract meta-data & text from files in different formats. And second book was very interesting - I bought it when it was released as MEAP, but I hadn't time to start read it. This book describes ManifoldCF - extensible framework for work with different content repositories, from which you can fetch information for indexing, or similar processing. This framework is very interesting for me, and I hope, that I'll use it in one of my projects. - Full Post
In April I read 2 books from Manning (they asked for review): и . First wasn't very interesting for me - I'm working in this branch for a long time, plus I already used tika in my projects, but I think, that book will interesting for peoples who will need to extract meta-data & text from files in different formats. And second book was very interesting - I bought it when it was released as MEAP, but I hadn't time to start read it. This book describes ManifoldCF - extensible framework for work with different content repositories, from which you can fetch information for indexing, or similar processing. This framework is very interesting for me, and I hope, that I'll use it in one of my projects. - Full Post
ECB & fresh Emacs/CEDET...
I already twitted about this, and also wrote to ECB & CEDET mailing lists, but I also want to reach Planet Emacs readers :-)
I made small changes in the ECB code that allow to use it together with fresh Emacs & CEDET versions. Modified code is available in . I tried this version together with CEDET from trunk, and also with CEDET from Emacs 24.1, and it worked for me.
If you're using ECB, please try this modified version, and leave feedback (either here, or by sending e-mail to me or to ECB mailing list). If you'll find bugs, feel free to file a bug using github's issue tracker. - Full Post
I made small changes in the ECB code that allow to use it together with fresh Emacs & CEDET versions. Modified code is available in . I tried this version together with CEDET from trunk, and also with CEDET from Emacs 24.1, and it worked for me.
If you're using ECB, please try this modified version, and leave feedback (either here, or by sending e-mail to me or to ECB mailing list). If you'll find bugs, feel free to file a bug using github's issue tracker. - Full Post
Experience with new mouse
I had some problems with my right hand at the start of this year, so I decided to remove a part of load from it. I started to use left-handed mouse and used it for several months (it's not always possible to work completely without mouse, especially in Windows).
Week ago I got a new mouse as present - (for left hand), and used it for a week at home, while used old mouse at work. And I can say, that new mouse is much more comfortable for me - hand is comfortably placed on it, there is separate middle button (instead of less comfortable wheel click, although it also works). There are also additional buttons, that could be programmed to do something useful. Mouse works fine on all tested OSes (Mac, Linux).
It was so comfortable, so I ordered the same mouse for work and already replaced my old mouse with it. - Full Post
Week ago I got a new mouse as present - (for left hand), and used it for a week at home, while used old mouse at work. And I can say, that new mouse is much more comfortable for me - hand is comfortably placed on it, there is separate middle button (instead of less comfortable wheel click, although it also works). There are also additional buttons, that could be programmed to do something useful. Mouse works fine on all tested OSes (Mac, Linux).
It was so comfortable, so I ordered the same mouse for work and already replaced my old mouse with it. - Full Post
Subscribe to:
Posts (Atom)