Products        Applications      Features      Support       Company     
  

 

 

   

Bill's Corner ...

 

 
 [ Read about Bill]

by Bill Young, Seaside Small Craft, Willis Wharf VA


Bill also maintains our ShopBot Labs site where you can putter with projects in various stages of development.

See Bill featured in ShopBot's ad in the current issue of Make Magazine, available now at Barnes & Noble, other fine bookstores and news stands and online at www.makezine.com.

 

If you're using your ShopBot for a unique application and would like to be featured in a future ShopBot ad, send your story to ShopBot.

 

If you were in San Mateo, CA in May we hope you made it to the ShopBot Jamboree, and Make Magazine's Maker Faire, a fascinating celebration of 21st century creativity and ingenuity.  The ShopBot Jamboree ran May 17-18 and the Maker Faire ran May 19-20.

 

 

Making stuff ... - Feb 2007

Those that know me will tell you that I can't help much with creating fancy 3d files or things like lithophanes to cut on your ShopBot, but I have made a heck of a lot of "stuff"...things that have a somewhat practical use like boats and furniture and clocks and such. It seems like a lot of beginning ShopBotters have trouble getting started on these kinds of projects and although I don't claim to know all the tricks, here are some things that I've observed that may help you get started.

Software

  • Find software that will do MOST of what you want to do and stick with it until you're absolutely sure that it has a fatal flaw that can't be overcome. If you already know how to use CorelDraw for instance (or AutoCAD for DOS or TurboCAD4 or whatever you're comfortable with) there's probably a workaround for the things that it can't directly do. If you're just starting out and don't have a favorite yet, start with something simple until you find out what you REALLY need...Part Wizard is a good choice.

  • There's nothing that kills productivity more than switching between 3 or 4 pieces of software...avoid it at all costs. The exception is specialty software that only does one thing but that's the one thing that you need to do...boat design software for instance. If you need it it's worth the trouble to learn it, even if it only does one step.

  • If you find software that works for you, think VERY seriously before you decide to upgrade to the latest and greatest version. Most software companies upgrade by piling on new features...just make sure they've added things that you need without removing features that you use and are comfortable with.

  • Don't get too wrapped up making "pretty" drawing and presentations in the beginning...leave the photo-realistic renderings 'til you're more sure of things. They can eat up a tremendous amount of time for something that could change twenty more times. And shy away from 3d modeling software until you can come up with a reason that you need it...it's slow to learn and slow to use.

  • If you're using a CAD program, remember that the grid can be a powerful helper...use it if it's available to help you line things up. And learn about and use Snap modes to connect things together accurately. If you're drawing lines freehand with a mouse it may LOOK like the ends join, but if you're not using some kind of Snap I'll bet they aren't and will cause problems down the line. If you zoom WAY in I'll bet you'll be surprised.

  • Sometimes less is more. If your design has curves for instance, try to use the fewest number of control points possible. Take it from an old boatbuilder who's reputation hinged on always having "fair" curves...adding extra points to a curve to try to force it into a shape that it doesn't want to take will only make it un-fair.

Designing

  • Try not to show anyone your first draft as a "virtual" design on the computer. There's something about seeing something on a computer screen that makes people get wrapped up in the details and technique instead of the big picture. Wait until you can show them a real prototype...you'll get much better feedback. If you have to show someone a preliminary design for feedback it's better to show them a pencil sketch on a napkin than a CAD drawing...they won't get hung up in the presentation details with a rough sketch like they do with something on the computer.

  • A pad of graph paper and a pencil works great for preliminary work. You don't always need to use a computer, especially in the early stages of a design, and it's easy to end up making changes because of software limitations and not design decisions

  • Get familiar with the ShopBot language and some of it's features...quite often it's much quicker to create a file in the ShopBot Editor or NotePad with a handful of commands than it is to draw it and create a toolpath.

  • Start simple. Don't over-design things in the beginning but instead start with the simplest possible version and add features if they're needed, not just because you can. Don't feel like you have to cover every square inch with features.

  • Don't forget the purpose of the things you're making. You might design the coolest looking chair shaped like a flying 3d oyster and it may well be a piece of Art, but if it's not comfortable to sit on it's a bad chair.

  • To quote Salvador Dali: "Those who do not want to imitate anything, produce nothing." Keep your eyes open for neat ideas and details, especially on the web. You can learn a lot about the design process by looking at someone else's work and trying to figure out why they made the design decisions that they did. You always want to make your designs original but everyone can use inspiration.

  • Don't be afraid to start a design over if it isn't working and don't get too stuck on the importance of any one feature...sometimes it's just not meant to be. But don't be too quick to discard things either...it might be better than you think.

  • Always keep the cutting process in the back of your mind while you're designing. It's awfully easy to add a feature to your design that will make it awfully hard to cut. Any feature that makes you flip the piece over or stand it on edge to cut will end up being a pain at cutting time...just make sure there's enough value-added in that feature.

  • If your design has lots of different elements, think about splitting it up so each one is a separate file. That makes it easier to re-arrange and re-design, and you'll be surprised how often you'll be able to use one of the elements in something completely different.

  • Just because the desk you measured was EXACTLY 24.865" tall doesn't mean that it won't work if it's 24" tall or 25". The reason your mom's Chocolate Chip cookie recipe says to use a cup of flour is not because it needs exactly that much flour...it's just because that's the closest convenient amount. Same way with making stuff…most of the time you can change a measurement to suit your material or design and it'll work out just fine.

  • Unless you're cutting out valves for artificial hearts, don't feel like you need micro precision either. Many times you'll be cutting a material who's dimensions vary widely from sheet to sheet and which change with temperature and humidity fluctuations, using cutters that might not be exactly the size they're supposed to be. Don't design to micro tolerance unless you have the right material, cutter, and a WELL tuned up tool. You might even want to put a little "slop" in your design to make things easier to assemble.

  • Be aware of your material sizes when you design and try to work within them so that you minimize the waste. Leaving less waste not only means more money in your pocket but also is "greener"...better for the environment.

  • Don't forget that you can't put a square peg in a round hole. If your design has a tab that fits in a slot for instance, make sure that you think about how you're going to deal with the radius that your cutter will leave on the corner of all inside cuts. It doesn't really matter how you deal with it... make the slot longer, roundover the edge of the tab, make the slot "dogbone" shape, square up the corners  by hand, or any other way that you like...just make sure that you deal with it

Prototyping

  • Be willing to mess up on the first one of anything. Don't feel like a design has to be perfect before you can put the bit to the material to cut a prototype. Your first idea might not be exactly what you imagine the final design being like, but sometimes cutting it is the only way to tell what you need to do to make it better.

  • Stock up on cheap materials and use them for prototyping. Also try not to throw away scrap...you'll probably find a use for it.

  • Sometimes it helps to make just a piece of a project to see how it works in "real life". Often you can't tell what something will really be like until you've held it in your hands and spun it around a couple of times. If it's too big or elaborate to make it full sized, make a model of it using as many of the same techniques as you can.

Hopefully some of this will be helpful to you but I'm sure that not all will be...everyone works in different ways. The key is to just keep trying things and be willing to make mistakes and learn from each one. The neat thing is that there may be only one right way to make a sign for someone's business but there's a gazillion ways to make a chair or a desk...there's plenty of room for creativity.


Exploring ShopBot Part Files 2 ... - October 2006

In the last Bill’s corner we learned how to manually create part files by typing in commands, and to automate the process using the Part File Assembler. Now I know you all agree with me that this could be pretty powerful stuff, but what can we really do with it that we can’t do just as easily by just creating the file in Part Wizard?

So let’s say you already had a part file that you created in Part Wizard that you use all the time...maybe a 12”x12” FOR SALE sign for a real estate company. One week they call you and say they need 6 of them…what do you do! You’ve got a handful of options. You could always open up Part Wizard, open the saved design (you did save it, didn't you?), then copy it 6 times, move the copies around so that they fit on your material, and create a new part file. Seems like a lot of extra work, especially since the design part has already been done. And what if the next order was for 11 or some other number...you would sure be doing a lot of extra work every time you re-created the files. There has to be an easier way.

Well, you could throw a piece of plywood onto the table, sit down at the computer, and type FP, forsale.sbp to cut the first sign. When that one was done you could move 12” down the sheet...either with the keypad or with an MX, 12,0 command...and then run the file again. But how would you tell the ShopBot software to do that? You could re-zero the tool where you wanted to cut the new file and then run it again normally, but there are some problems with doing it that way. The first one is that you’ll lose your personal reference point on the tool and won’t know the tool’s location just by looking at it...it might be in the middle of the table but the tool might think it’s at 0,0. Your ShopBot still knows where the "real" 0,0 is because it's saved with your Table Base Coordinates, but it might not be obvious to you if you wanted to send it to some other place on the table.

The other problem is one called “accumulated error” and happens when a number is rounded off a bunch of times. Just about all calculations in life are rounded a little bit...sometimes up and sometimes down...which generally doesn’t make much difference. But if more are rounded up than down (or vice versa), after a while the error can mount up. So constantly re-zeroing really isn't the best thing to do.

Offset Mode and Master Files

A better way would be to move down to the new starting point with the MX, 12,0 command and then run the sign file in 2d OFFSET mode by typing FP, selecting the file again, and then selecting 2d offset in the fillin sheet. 2d OFFSET mode acts like a temporary re-zeroing, so that the file cuts as if the current tool location is 0,0 without actually changing it to 0,0. You can also select 3d offset, which works the exact same way but also offsets in the Z-axis. After the first sign had cut you could type MX, 24,0 and repeat the process. It would work great but you would be pretty much tied to the computer for the time that the signs were cutting. What we need to do is to automate the process so that it will run un-attended and you can do something else while it’s cutting.

The way that works the best is to create a “Master File”, either manually or using the Part File Assembler, that does all the moving and file calling for you. A Master File uses a combination of Jog (or Move) commands to position the tool at the new start point, and matching FP commands with the Offset parameter (the 6th one), set to "2" for 2D offset (or "1" for 3D offset). The commands to cut our first hypothetical For Sale sign 12" from our 0,0 position would look like...

J2, 12, 0
FP, forsale.sbp,,,,,2


..and here’s a sample of a Master file that you could use to cut all 6 signs...

J2, 0, 0
FP, forsale.sbp,,,,,2
J2, 12, 0                  ' the Y offset isn't needed here ... it just makes it more consistent
FP, forsale.sbp,,,,,2
J2, 24, 0
FP, forsale.sbp,,,,,2
J2, 36, 0
FP, forsale.sbp,,,,,2
J2, 48, 0
FP, forsale.sbp,,,,,2
J2, 60, 0
FP, forsale.sbp,,,,,2


If you saved this new file and ran it in preview it would look something like this..

Offset mode also comes in REALLY handy for cutting files out of odd-shaped pieces of scrap material, because you can move to a clear spot and cut the file there without knowing beforehand where that location is. Offset Mode cutting works best…for me at least…if you create your files with the 0,0 location at the lower-lefthand corner of the part because you ALWAYS know where the corner of a blank is but you have to FIND it’s center. With some thought you can place the 0,0 point of your drawing in the center of the part or just about anywhere else.

One other option is to use the "S_nest.sbp" file that's included your Sbparts folder. It uses a series of questions to create an "array"..a pattern of rows and columns...of locations that a part file will be cut. It's VERY handy if you want to fill a sheet full of copies of a file, but may be a little bit of overkill if you just need to cut a couple of copies of something. It also only works if you can use a "regular" cutting pattern...one that has even rows and columns.

As you can see Offset Mode and Master Files have a lot of uses, and you can stop reading here if you want and will have a very handy new tool in your ShopBot toolbox. You can easily expand the power of these Master files by using more of the ShopBot commands, so take a break for a little while, play with running some files in Offset mode and maybe create a Master file or two. Then when you’re feeling refreshed and recharged come back and we’ll introduce “variables” and the INPUT statement that will let us customize our Master Files without having to do as much re-writing.

What’s a variable? The answer varies…

Welcome back. Let’s get back in the swing of things by backing up a couple of articles. Remember our example part file from the first "Exploring Part Files" article...


' Our sample file could be used to drill a series of half inch deep holes
' Zero the Z-axis at the top of the material
'
' Written by Bill May 4, 2006

MZ, 0.5            ' lift to a safe Z height
J2, 1, 1           ' Jog to X = 1 and Y = 1
MZ, -0.5           ' plunge the Z-axis to –0.5 to drill hole
MZ, 0.5            ' lift bit to safe height

JX, 2              ' Jog to the next hole
MZ, -0.5
MZ, 0.5

JX, 3              ' and the next
MZ, -0.5
MZ, 0.5

JX, 4              ' the last hole
MZ, -0.5
MZ, 0.5 

J2, 1, 1           ' Jog back to X = 1 and Y = 1


This file is pretty short, and it would be easy to make changes to it. If we wanted to change the depth of the hole to -0.25” instead of -0.5” we would just have to change the 3rd command to MZ, -0.25. And the 6th. And the 9th. And the 12th. But what if we were drilling 100 holes? If we were using the ShopBot editor we could use the find and replace feature to replace every instance of -0.5 with -0.25, but every time we wanted to drill a different depth hole we would have to change all of them. And what would happen if we had a command in our file like..

M3, 3.75, -0.5, -0.5

Unfortunately the Replace function in the editor would change any occurrence of "-0.5", both the one you wanted...the Z-axis one...and the Y-axis value that you don't want to change. That’s where variables come in handy.

A variable is just something that represents something else. And you know what; you use them all the time without knowing it. Let’s say you need to figure out the sales tax on something you want to buy. Your total TAX equals the product COST times the sales tax RATE, so if you wrote it as a math formula it would be TAX = COST * RATE. Well, TAX, COST, and RATE are variables because they are symbols that represents a number or value that can change or vary. The TAX on a $15 router bit in Virginia where the RATE is 4.5% will be different than the tax on a $20,000 car in a state with a 6% tax rate.

But how would we use a variable in our example? First we need to tell the ShopBot software that something is a variable, and we do that by picking a unique name for the variable and starting it with the & sign. That means that we could name our variable &x if we wanted to and everything would work, but later on that really wouldn’t tell us very much about what that variable does and what kind of value it holds. It's a much better idea to pick a name that's meaningful to you, maybe something like &holedepth. Now every time we want to drill a hole we can replace the line MZ, -0.5 with the line MZ, &holedepth. But wait a minute, how does the ShopBot know what &holedepth represents? It doesn’t on it’s own, we have to tell it. We do this with a line in our part file that says &holedepth = -0.5 in a step that programmers call “initializing” the variable.

There's one thing you need to be aware of when working with variables in a ShopBot file. ShopBot variables are "persistent", meaning that they hold their value until they're either given a new value later on or the ShopBot software is shut down which wipes the slate clean. This can be a very useful feature because you can create a file full of just variables and then load it in any part file with the FP command and you'll have access to those values. That's how the ShopBot zeroing files work...in the beginning they load a file named "my_variables.sbc" that's in your "C:\sbparts\custom" folder. It contains all the settings that are specific to your tool that you entered using the "Setup" Virtual Tool, and these values are then available to any part file that's run until the tool is shut off. This persistence property of variables can be handy but can also be a problem, especially if you use a variable in a file without giving it a value...without "initializing" it. If you've used a variable with the same name in an earlier file then it's value will carry over...which might be good or might not. Just be aware of it.

Back to work. Let’s re-write our example using a variable for the depth, and while we’re at it let’s change the safe z height to a variable as well. Our file would look like;


' Our sample file could be used to drill a series of holes
' Zero the Z-axis at the top of the material
'
' Written by Bill May 4, 2006

&zup = 0.5         ' safe z height

&holedepth = -0.50 ' set cutting depth

MZ, &zup           ' lift to a safe Z height
J2, 1, 1           ' Jog to X = 1 and Y = 1
MZ, &holedepth     ' plunge the Z-axis to –0.5 to drill hole
MZ, &zup           ' lift bit to safe height

JX, 2              ' Jog to the next hole
MZ, &holedepth
MZ, &zup

JX, 3              ' and the next
MZ, &holedepth
MZ, &zup

JX, 4              ' the last hole
MZ, &holedepth
MZ, &zup

J2, 1, 1           ' Jog back to X = 1 and Y = 1


You can see how much easier this would be to change the cutting depth if it drill 100 holes instead of 4...you would only need to change the value of the variable &holedepth. But wouldn't it be neat if you could somehow tell your file what the value of that variable is without having to change the file and the re-save it? You can by using the INPUT command.

Asking the person running the ShopBot a question…

The INPUT statement is the ShopBot software's way of asking you a question and then saving your answer in a variable. Up until now the commands we use have been pretty simple but the INPUT statement has a format that it has to be in to work correctly..what computer programmers call it's Syntax. You start with the word INPUT (called a keyword in programming-ese) which is followed by the phrase that you want the person running the file to see, surrounded by quotes (") on each end. Then after the last quote you put the name of the variable that whatever the user types will be stored in. Here's an example of an INPUT statement that would let the ShopBot user type in a new value for the hole depth, &holedepth


INPUT "How deep do you want to drill the holes?" &holedepth


You can just replace the "initialized" value for &holedepth with this new INPUT line and when a ShopBotter runs that file he would be presented with a box like this...


Whatever the ShopBotter typed into the box would be stored in the variable &holedepth. And every time you ran the file you could drill different depth holes, without having to change the file itself...just type in a different number. That might not be all that handy, but let's say that you needed to drill your holes exactly halfway through your material and the material varied in thickness the way most plywood does. We can modify our example file so that it now asks for the material thickness as a input and then uses the value of that variable to calculate the correct &holedepth value. It might look something like this...


INPUT " How thick is your material?" &thickness  ' set cutting depth
&holedepth = 0 - (&thickness / 2 )               ' find half of thickness and subtract from 0 to get cut below surface


Each time we run this hole-drilling we could accurately measure our material and then type in that measurement and all our holes would be the correct depth.

There's one more use for the INPUT command...it can be used to read values from a text file. We'll talk about this in an upcoming article on reading and writing text files from within a part file, but in the next article we'll take what we’ve learned about using variables and the INPUT command (along with some new commands) to make decisions…the IF-THEN statement and looping.


Exploring ShopBot Part Files - May 2006

Many ShopBotters are happy creating their part files in a program like Part Wizard and never really looking at the part file that’s created, and there’s nothing wrong with that at all. Part Wizard and similar programs use something called a Post Processor or “Post” for short to create the commands to move your ShopBot around, and you can run those files without ever exploring the mystery of what’s really going on in them.

A growing number of ShopBotters, though, are interested in learning to use the ShopBot language to create their own files, or to be able to modify the files that are generated by other programs. If you’re one of them, or are just curious, here’s a start at using (and understanding) the ShopBot language.

The ShopBot language 

The first thing to remember is that a ShopBot part file is just a text file, and can be read just like a shopping list or a letter. The ShopBot language is a variation of the BASIC computer language and is “conversational”, meaning the commands are descriptive of what they do. Let’s compare it to G-code, another common CNC control language

Let’s say we want to move from the 1,1,0 position to the 2,2,1 in absolute mode, then move back to our home position. In G-code it would look like this..

     G90                 … set to absolute mode
     G00 X1 Y1 Z0        … move to 1,1,0 at rapid speed
     G01 X2 Y2 Z1        … move to 2,2,1 at cut speed
     G28                 … go to HOME position

Here’s the same thing in ShopBot language…

     SA                ' set to absolute mode
     J3, 1, 1, 0       ' jog to 1,1,0
     M3, 2, 2, 1       ' move to 2,2,1
     MH                ' go to HOME position 

It’s quite a bit easier to understand what ShopBot commands do, don’t you think?

So how do I read and write a ShopBot file? 

If you’re using the ShopBot Windows software and checked the “Associate Files” checkbox when you installed the software, then you can click on any part file…any file with the .sbp  file extension…and it will open in the ShopBot Editor. You can also open a part file with your favorite Text editor… Notepad is installed by Windows by default…by right-clicking the file, selecting the “Open With” option, and picking the program that you prefer. You can even open a part file in Microsoft Word, but be AWFULLY careful if you want to save a part file in Word to make sure you save using the simplest TEXT option, without any formatting.

So let’s write our own part file and see just how simple it can be. Start the ShopBot software and type [FN] to create a blank part file in the ShopBot Editor. Once it’s open type the following lines …

MZ, 0.5 
J2, 1, 1
MZ, -0.5 
MZ, 0.5 
MX, 2
MZ, -0.5 
MZ, 0.5 
MX, 3 
MZ, -0.5
MZ, 0.5 
MX, 4
MZ, -0.5 
MZ, 1 
J2, 1, 1

The ShopBot software doesn’t care if you leave blank lines in your file (and many cases it is easier to follow the flow of a part file if you leave some “White space” between sections of a file), but for this first example just type it the way it is above. When you’re done save it with a descriptive name like “samplefile.sbp”. If you used the ShopBot editor then it should look like this when you’re done.

 

On Naming your part files  

There are very few rules for naming ShopBot files…most of the restrictions are imposed by Windows. {If you plan on running your file in the DOS version of the ShopBot software then you’ll need to use the DOS naming restriction…the name can only have 8 characters in the name followed by a 3 character extension (which is .sbp in our case) and can only use the characters a-z, 0-9, and underscore.}

In Windows the file name can be up to 256 characters long and the only special character restrictions are that the file can’t contain the

 ;   \   ⁄   :   *   ?   "   <   >  ¦

characters. The only restrictions that we have to worry about that are ShopBot-specific are that you can’t use any of the math operators or special characters that ShopBot uses (like the “&” that’s used in front of a variable name), or any of the Programming commands or key words like PAUSE or INPUT


This was not a very complicated file but it may not be obvious what it does just by looking at the commands. You can test your new saved file by changing to Preview mode [SP] and then typing [FP] and selecting your new file. If you rotate the Preview a little you’ll see that it moves along parallel to the X-axis and periodically moves up and down.

If your preview doesn’t look like this or you get an error message when you try to run it, open your file back up in the Editor and make sure that you typed it EXACTLY the way it’s listed above.

The preview tells you how the file moves but it still doesn’t tell you everything...comments will help to do that.

First steps in ShopBot programming…Commenting.

Before we get much further, we’re about to use the “P” word...”programming”. But don’t let the word scare you...a program is just a set of commands or instructions that tell a computer or machine what to do. Every ShopBot part file is a program of sorts, even a simple one like the one we just created. That simple “program” could be used to drill a series of ½” deep hole, but that may not be obvious by just looking at it. What we need is a way to tell someone that’s reading the file what it does, without putting instructions in the files that your ShopBot will try to execute but doesn’t understand. You’ll do that by adding comments.

A comment is just a message from the person that wrote the part file to the person that will be using it, and starts with the single quote or apostrophe character ‘ . You can put comments on a line by themselves anywhere within a file, or add them to the end of a command to explain what that particular line does. Using our example above, let’s add some comments (shown in green here to make them easier to pick out; they’ll be black in your file) and see if it makes things clearer:


' Our sample file could be used to drill a series of half inch deep holes
' Zero the Z-axis at the top of the material
'
' Written by Bill May 4, 2006

MZ, 0.5           ' lift to a safe Z height
J2, 1, 1          ' Jog to X = 1 and Y = 1
MZ, -0.5          ' plunge the Z-axis to –0.5 to drill hole
MZ, 0.5           ' lift bit to safe height
JX, 2             ' Jog to the next hole
MZ, -0.5           
MZ, 0.5            
JX, 3             ' and the next
MZ, -0.5           
MZ, 0.5            
JX, 4             ' the last hole
MZ, -0.5           
MZ, 0.5            
J2, 1, 1          ' Jog back to X = 1 and Y = 1


Now comments really aren’t necessary in a simple file like this, but you can see how they could make a complicated file quite a bit clearer and easier to understand or remember. So do yourself (and anyone else that needs to use your files) a favor by adding comments to all your part files. It’s a great way to include information like what size bit the file was created for, what thickness material this file uses, where the Z-axis must be zeroed, or even how to contact you if there are any questions. You can add your comments manually with an Editor or use the Header Writer Virtual Tool [TH] to automate the process.

Now there’s one time that a comment is used in a special way by the ShopBot software, and that’s if it is immediately followed by a PAUSE command, as long as there isn’t a number after the PAUSE command. In this case the comment is shown on the screen in a message box. The program stops executing and waits for a response from the user. So a file with the following lines…

' Comment test…click OK to continue
PAUSE


.. will present the user with this message box when the Part File runs …

If the OK button is clicked or the ENTER key is hit the file will continue…if Cancel is clicked or the ESC key is hit the file will stop executing.

Making things easier... the ShopBot Part File Assembler.

Having to type the commands in with the keyboard can be kind of a pain, so we’ve come up with the ShopBot Part File Assembler to make the job easier. Before we tell you what it is, lets start  with what the ShopBot Part File Assembler ISN’T. It's NOT a replacement for the Editor or a way to create elaborate cutting files. It’s also not a replacement for Part Wizard and doesn’t know anything about toolpaths or importing drawings. What it DOES do is to give you a way to “Assemble” a Part file by combining some of the basic ShopBot commands. It’s especially handy for things like “master files” that can be used to call an existing part file in many locations around your material or alternate between files for multiple cutting heads if you have them...Z and A axis files for instance. It also does some color coding of commands to make it easier to pick them out.

There’s not really that much that needs to be explained about how to use the Assembler. In the left column are buttons for each of the commands that are available. You start out by selecting a name for your new “assembled” part file and a form opens with an assortment of “basic” commands that let your part file do things like make moves, call other part files, and add comments to make things as clear as possible. If you’re feeling adventuresome, click the “Advanced” item in the “Mode” menu and you’ll get some of the more advanced programming commands that are available in the ShopBot language. We’ve included the commands that are most common and we think most useful, but if there’s one that we haven’t included that you need  just click the “???” button and you’ll get a blank line to type in whatever command you want.

You start creating building your file by clicking the button for the command that you want and that command will appear in the main panel on the right. You’ll also get a popup window that will let you fill in the values that are specific to that command…the file name if it’s an FP Command, the coordinates to move to if it’s a Move or Jog command, that sort of thing. These values are called “parameters” and you can leave out any of them that you don’t want to change and they’ll stay at their current value...only the ones that you enter a value for will change. You can also add an “inline” comment to many of the commands by clicking the “Add a comment” checkbox...it will put your comment at the end of that line. Just build your file by clicking on commands and filling in the correct values.

If you’re very smart (or very lucky) you’ll have put your file together correctly the first time, but just in case you aren’t that lucky you can move your mouse pointer over any command that you’ve created and, toward it’s right end, the cursor will turn into a hand and you’ll be able to left-click and drag that command to a new position in the file. You can also right-click and either Edit it to change some of the values that you set, Copy the command so that you can paste it into a blank “???” command, or Delete the command altogether. If you get it hopelessly messed up with absolutely no chance of recovery, don’t worry…just select the “Reset” option and you’ll be presented with a clean slate.

After you’ve played around with it for a while you’ll realize pretty quickly that this part file business is really not rocket science, and that a part file is just an assembly of ShopBot commands. When you're all done and your file is just the way you want it, select SAVE in the FILE menu and your part file will be created. You'll be asked if you want to add a header and footer …sections of information at the beginning and end of your file to help the person that’s running the file to understand what’s going on in it... and if you answer “yes” the ShopBot Header Writer will open to help you create your new file's header. That’s all there is to it...your done!

Here’s our same example file, created with the Assembler

{missing material}

definitely a “work in progress” so make sure that you open the files that it creates in an Editor to see if it’s really doing what you expect.

2) There is not much more file checking at this point that there is in the ShopBot Editor, so if you're not careful you can EASILY create files that don’t make sense and won't run on your ShopBot. You can tell it to do things like “M2, bob, henry” and it will be happy to let you do it. Consider yourself warned!

3) If your file calls other part files you are WAY better off if you create a folder to hold all your files, instead of having them scattered all over your hard drive. If they're all in one folder...including your new assembled file...then the Assembler can write relative paths (like “FP, Beak.sbp”) and you can move the whole bunch around to your heart's content and the paths will still work. If however they're in different folders then it has to write the full path for any files called with the FP command (something like “FP, C:\Documents and Settings\Sam\Desktop\Current Work\PartFiles\Duck\oldVersion\Beak.sbp.) If you move those files around after you’ve saved then it won’t have a clue where to find them.

Enough for now...I don’t want to overload you right at the start! Over the next couple of articles I’ll talk about some of the other programming commands and how you might use them in your parts files...things like making it easy to modify values by using variables and INPUT statements. 

[Click here to download Bill's Part File Assembler]  

 


The Extruder…how to squeeze molding and other odd shapes out of your ShopBot! - March 2006

If you're like me you've come across situations where you've had something that you wanted to cut...maybe something like a piece of molding or a boat rudder...that had the same cross-section along its length. This happened to me recently when a contractor brought me a piece of door corner trim from an old house that he was working on and needed 6 copies made of it.

Robert had rejected a couple of options before he came to see me. He had thought about ordering custom shaper blades but that would have been expensive and taken a couple of weeks. He could have hand-ground his own blades but that would have involved ordering blade blanks, waiting for them, and then spending a half day (at least) of some pretty tedious work trying to get them the correct shape while keeping them balanced. For the small number of copies that he needed, CNC cutting seemed like his best solution.

When he brought the original to the shop we worked through a couple of options for duplicating them. Probing the whole piece would have been simple but really would have been overkill...we would have ended up spending a whole lot of time getting points for a shape that really doesn't change much. What we really needed to do was to create the Profile...a cross section of the shape...and then extrude it along a straight line. It seemed like a handy utility to have so after a little programming work the Extruder was born.

To use the Extruder you first need to create a 2d Part Wizard toolpath file of the profile and then the Extruder "flips" the profile on edge and extrudes that profile along the specified length. There are a couple of different ways to create your original profile drawing, but the quickest way for this job was to just stand the piece on edge on a piece of paper and trace the edge with a pencil. A quick scan of that tracing on a flatbed scanner created a bitmap file that we then manually traced in TurboCAD with curves and straight lines. Once the tracing was as close to the original as we needed it to be we discarded the bitmap from the CAD drawing and saved the file as a dxf file so that we could import it into Part Wizard.

This certainly isn’t the only way to do it, though…there are lots of ways to generate your original profile. Some shapes are easier to draw directly in CAD, like airfoil shapes that are specified by formulas for their cross-sections. You could also use a probe with one of the 3d dxf options to do a pass or 2 across the pattern and then import that into a CAD program. It doesn't matter what method you use as long as you end up with a good profile that you can get into Part Wizard.

Once you've gotten your Profile drawing into Part Wizard it's time to create a "Profile" toolpath. Although you'll be using a ball-nose bit to cut the file, you'll create the profile toolpath in Part Wizard with an end mill of the same diameter...if you're going to be cutting the extrusion with a 1/2" ballnose bit then create the toolpath file with a 1/2" end mill. This may seem funny at first but imagine that the end mill is really a ballnose bit laying on it's side…the end mill really represents the "ball" at the end of the ballnose bit that will eventually be doing the actual cutting after the "flip".

I'm not going to go though all the steps for creating your profile toolpath...it's not all that different than any other toolpath generation...but there are a couple of things that you need to keep in mind

*) You want to make sure that you create the toolpath so that it cuts in ONLY ONE PASS. The easiest way to do this is to set the cutting depth so that it’s smaller than the stepdown setting for the bit you select. Since the Z-axis settings are ignored in the Extruder a very small cut depth like 0.001 or so should be fine.

*) Think about the direction that your extrusion is going to be done before you create your toolpath. If you're going to be extruding your profile parallel to the X axis then you’ll need to arrange the profile so that it will be "flipped" around the Y-axis, and the same is true when you’re extruding in the Y Axis. Clicking the “?” buttons will help you figure out which one you want.

*) Once you’ve created your toolpath the final step is to save it using either the plain "inch" or "mm" post processors, NOT with any of the “arc” ones.

Creating your toolpath is really the hardest part...after that it's simple. Start the Extruder and select the axis that you're going to extrude along. Then select the start and end points of the extrusion...this determines the length of the extrusion. The SafeZ setting is how high you want the bit to be above the highest point of the "flipped" profile which is calculated when the flip is done.

The “maximum segment length” setting ONLY breaks up long straight sections to increase resolution. It doesn’t decrease the resolution if your segments are closer together than that…if the segments in your profile are too close together you’ll need to redo your profile with a larger tolerance.

When you're done just click the button and you'll be asked to select the file that you want to extrude. The virtual "flip" will be done and the extruded file will be saved with the original file name with "_extruded.sbp" added to it.

 


The finished trim pieces

Note: We didn’t need to use this feature on the trim pieces but you’re also given a choice of tapering the extrusion in height, width…perpendicular to the extrusion direction, or both. All tapering is done toward the axis that the extrusion is parallel to, so if the profile is "centered" on that Axis, with half of it above and half below, then the extrusion will taper toward the middle. If the whole profile is above the axis in an X-axis parallel extrusion then it will taper "down", etc. Play with it a little in preview mode and it will be pretty obvious what’s happening.

As I said in the beginning the Extruder can be used for a lot of other uses besides molding. Shaping rudders and wings is a natural use for it and it would be great for one-off curvy furniture and architectural pieces.

 

Installing the Extruder

The Extruder comes packaged in a zip file and there’s really no installation involved…the ShopBot control software has already installed everything it needs to run. Just unzip it to a convenient place like your desktop and when you’ve created the 2d profile that you want to extrude just click the Extruder icon. It’s as simple as that. As a bonus the download includes the “Flipper”, a program that takes the same kind of 2d Part Wizard file and just does the “flip” that converts X or Y axis values to Z-axis values, without doing the final extrusion step. Finally there’s also a folder with sample toolpath files for you to play with, just to help you get the hang of things. The Extruder and Flipper are constantly being updated with new features and fixes so to make sure that you have the most recent  version we have the most recent Extruder available in [ShopBot Labs]

I hope the Extruder and Flipper are helpful to you. The next Bill’s Corner project will be another program that I think you’ll find…well…interesting.


Hacking the ShopBot (3 Hacks) - November 2004

People wonder what it is exactly that I do for ShopBot, and it’s actually kind of hard to explain. Officially I work part-time doing “special projects”, but it really boils down to about 50% “real work” and 50% play (some would say 5% real work and 95% play!). One of the things I enjoy most of all is building all kinds of machines and mechanisms that are powered by stepper motors and controlled by the ShopBot software, and I figured that y’all might be interested in seeing some of these toys and prototypes.

First, let me make one thing clear right up front. None of these projects are original to me...they were inspired by things I’ve seen or read about. I just thought they were neat and, usually after a lot of head-scratching and false starts, got them to do MOSTLY what I wanted them to do. The reason they worked as well as they do is because they rely on exactly what a ShopBot and the ShopBot software does well... move "something" around very precisely and let you interact with that "something" in a lot of ways. It’s just a matter of figuring out WHAT you want to move, and HOW you need to interact with it. Here’s a sampling of some of the projects that I’ve been playing with. If you get interested in playing around with this sort of thing or just want to see what some REALLY creative people do with robots, check out the ArtBots show in New York.





A ShopBot "Drawing Board"

 

 



So on to the neat stuff. The first mechanism was inspired by a chain-driven graffiti machine named Hektor. If you read about Hektor one of the first things you’ll notice is that creating Hektor was a pretty complicated procedure that involved creating circuit boards and a lot of programming to basically just make 2 stepper motor go back and forth and turn an output switch on and off. Hey, wait a minute, the ShopBot software does that already!

I sent the link to Hektor to Ted at ShopBot and he dug through the ShopBot parts bin and came up with some old stepper motors, aluminum plates from belt-drive gearboxes, some hardware and beaded chain from the old cable drive days, and some small solenoids to build into a prototype. The geometry for creating the toolpath was a little funky because of the way that the position of the pen is defined by the length of the 2 chains instead of the standard x/y coordinate system, but a little bit of high school math made it pretty easy to create a “shopbot-to-chain drive” convertor. A couple of different versions were built, including a 4’x8’ version and a smaller one that writes on 12”x18” paper.

The reason I like the “ShopBot drawing board” so much is that, because there’s always a little bit of vibration in the chains, it’s drawings look much more like they’re “hand drawn” than anything that’s done on a printer or plotter. It’s great for doing signs and illustrations and generally just playing around with designs.

[See a video of the drawing board in action.]



A ShopBot "Egg Plotter"


The next thing that caught my eye was a small “indexer” type machine that was used in Bruce Shapiro’s “Bits to Bytes to Bots” classes. Bruce has some VERY neat things on his The art of motion control web site, but the thing that caught my attention was his “egg plotter” that lets you draw or write on an egg or other round-ish object. Like the chain drive drawing machine it uses just 2 stepper motors and a solenoid that’s triggered by one of the output switches, but in the egg plotter the movements are rotational rather than linear. One stepper motor rotates the egg and is driven by the Y-axis channel while the second motor moves the pen from side to side and is driven by the X-axis channel. It’s very similar to the way that you can “wrap” a ShopBot file around a cylinder when you’re using an indexer. The unit values for the 2 axis’ depend on the circumference of the egg, so each egg has to be measured pretty accurately for the file to work out correctly. A solenoid at the top of the pen holder (the PVC tube sticking up in the picture above) lifts the pen and is triggered by one of the output switches.


Now I know you’re asking “What good is it to be ale to write on an egg? What can you do with it?”. To be honest with you I wasn’t sure what the answer to this question was myself (other than it was just fun to play with!), until the Physics teacher at our local high school contacted me about doing some trophies for his annual “egg challenge” project. The egg plotter turned out to be just the thing, and here's a picture of the trophies that I came up with. They’re drawn on real eggs with the “insides” blown out, and painted with gold, silver, and bronze spray paint. [See a video of the egg plotter in action.]

 

5-axis motion


One of the potentially neatest features of the new ShopBot software is that you can now move 5 axis’ at the same time. It seemed like a fun thing to play with so I decided to put together a 5-axis movement system for the Benchtop in the shop. I wasn’t confident enough in my programming to actually make it cut anything, and 5-axis software is AWFULLY expensive, so the next best thing was to move a camera around...one of those USB eyeball cameras turned out to be the perfect size for the job.

All the parts for the mechanism were cut on the benchtop except for a couple of aluminum couplings that had to be machined (just the excuse I needed to buy a little metal-working lathe!) to connect the 2 extra motors to the plywood parts. Three ball-bearing material handling rollers act as bearings for the A axis, but the rest of the parts are simple hardware-store bolts and bushings. A piece of PVC pipe fits nicely into the router mount on the benchtop, so even though it’s z-axis travel is limited a bit, it’s easy to remove the router and pop this unit in.

Software to control it has been the biggest problem. So far I’ve only been able to program it’s motion by drawing the camera path in 3d in CAD and creating a toolpath, drawing lines along that path that point to the object that I want it to look at, and then using the properties of these lines to manually add the 4th and 5th axis coordinates to the 3d file. Very time consuming and doesn’t give the smoothest motion. 

Videos:

[The 5-axis mechanism in action]

[View through the camera]

Sorry about the quality of the video...those cameras have manual focus so I couldn't keep it in focus all the time.


Table Base Coordinates - October 2004

One of the things that ShopBotters seem to have the most trouble understanding and utilizing is the concept of "table base coordinates" and limit checking in the ShopBot software. They've been in the ShopBot software all along, but I'll bet that there aren't a handful of ShopBotters that use them or even know what they do.

To understand the concept of table base coordinates you first need to think of your ShopBot as having a real, physical 0,0 point, one that you never change. If you were looking down at your ShopBot from above, for most people that 0,0 point will be the lower left-hand corner...the corner that most people already think of as the 0,0 point. The reason that remembering this physical 0,0 point is so important is that if the ShopBot software always remembers where that "table base" 0,0 point is, then it will always know where things like stop bolts are on the table and how far an axis can move off of the table top before it will hit them, EVEN IF YOU RE_ZERO YOUR WORKING X AXIS AND Y AXIS.


I don't get it...give me an example.

To illustrate Table base coordinates, start the ShopBot software and make sure that you are in Preview mode. For this example you also need to make sure that your table limits settings are still set to the defaults by opening the fillin sheet with the VL command. The default values leave a 2" perimeter all the way around your table top and have "limit checking" turned off. The screen shot shown here gives the default values for a 48"x96" tool...if you have something different (like a benchtop) just adjust the values accordingly. With these default settings you're telling the ShopBot software that it can safely move 2" off of the table top in all directions without hitting the stop bolts, so your safe working area goes from -2" to 98" in the X-axis and -2" to 50" in the Y-axis. That's what the yellow perimeter around the "virtual" table top is in the ShopBot previewer...it's this "safety zone" that the tool can safely move around in without banging into anything.

With your ShopBot zeroed at the usual 0,0 corner of the table top...the "home" position...let's give the software an MX,97.9 command. It will move the whole length of the table plus a little less than 2 inches and then stop...still safely within the yellow safe area as shown in the image at left.
 
Now let's move your ShopBot to the 5,5 position with an M2,5,5 (edited 10/21/04) command, so that the bit is 5" over and up from the usual 0,0 corner, and then re-zero the X and Y axis' at that point with a Z2 command. You'll get a this message box telling you that the Preview will now be "out of sync" with the "real" tool, but just click OK...it will be back in sync the next time you start the Previewer. You'll notice when you change your 0,0 point that the WHOLE grid in the previewer has been shifted in the X and Y axis so that it is out of sync with the table as shown below.
 


So what happens if you now give it the same MX,97.9 command? It will still make a move that's 97.9" long, but this time it will run out of the yellow "safe zone" (as shown at left) before the move is completed, because it started 5" away from the "real" 0,0 point. If you were in Move mode instead of Preview the tool would have run into the stop bolts at the end of the table, or worse if those bolts hadn't been installed! And the worse part is that the Software never warned you!


 

A practical use...File Limit checking

 Now let's try the same moves but this time with a new software setting. First move your ShopBot back to its CURRENT 0,0 position with an M2,0,0 move...which was actually the 5,5 position in the REAL world before you re-zeroed in the last step. Now let's repeat our original MX,97.9 move, but before we do let's turn on File Limit checking using the VL command. Nothing exciting will happen except that a red line will appear around the yellow "safety zone"...that red line lets you know that limit checking is turned on. With Limit Checking now turned on, type MX,97.9 like you did before. This time the software is smarter...you'll get an error message telling you that this move will put you "out of limits" and ask you if you want to turn off limit checking. The software is smart enough to know that even though you've told it that 0,0 is in a new location, the table and stop bolts are still in the same old place.


So now you're thinking "This is pretty cool...I can see how this could be pretty handy." With limit checking turned on the ShopBot software will let you know if your file will make your ShopBot crash into the end stops BEFORE it runs. The tricky part is that the software needs to be able to keep track of where the limits are even after you've rezeroed...that's were the "table base coordinates" come in. Once you've set your table base Zero point then each time you re-zero any of your Axis', the difference is saved as sort of a "stored offset". That way your ShopBot always knows the difference between it current zero position and the "real" zero position.
 


Setting up your Table base Coordinates and File Limit Checking

So you're probably asking "How do I work with these table base coordinates". Here are the steps for setting them up... 1) In Move mode move to your REAL 0,0,0 position (in most cases the home corner of your table top) and zero your X,Y, and Z axis AND your table base coordinates by typing UZ. Do a good job of setting this...the accuracy of your setup depends on it. 2) Next you'll need to figure out how far you can safely move off of the table top before you hit a stop bolt or some other obstruction. Go into Keypad mode and SLOWLY and CAREFULLY move in the -X direction until you AlMOST hit the stop bolt and write down that number. Now do the same thing in the +X direction, the + and - Y directions, and the + Z direction. If you have proximity switches installed the tool will stop when it hits the prox switches. Just write down a value that's a little bit beyond the prox switches...if the prox switch stop the tool at -1.00, write down -1.05 or something like that. 3) Now type VL to open the limit switch setting fillin sheet and type in the values from your list. Let's say the values for YOUR tool are..

    X-axis minumum -1.38
    X-axis maximum = 97.92
    Y-axis minumum = -2.07
    Y-axis maximum = 49.88
    Z-axis maximum = 5.72

If you were to use the values above, your new VL fillin sheet should look like the one shown here. Don't worry about the A and B axes unless you use them...if so just do them the same way. Also don't worry too much about being accurate with the "low" setting for the Z axis...just pick a value that will let you cut as deep as you think you'll ever need to.

One quick note...if you have an indexer or some other rotary axis connected to your ShopBot, limit checking doesn't really make sense for that axis since it can turn FOREVER without hitting anything, but is especially important to have turned on so that you don't whack into the turning chuck!! In that case just put a REALLY small number for the low value for that axis...maybe -10,000...and a REALLY big number for the high value. That way you can still have limit checking do its job for the other axis.

Here are a few tips. To see how far your "working" coordinates are from your table base coordinates, type UV and the offsets are listed for each axis. And just to make things easier there's a shortcut to zeroing your working coordinates and your table base coordinates...the UZ command does the same thing as typing Z3 and then ZT...it zeros everything in one shot!

Keeping up with things

So now you've setup your table base coordinates by carefully zeroing all your axes and put in YOUR table values so that limit checking will work correctly. You won't need to go through these steps again UNLESS...

  • You lose position with your ShopBot because of a power failure or other calamity (mostly user error in my case!). If this happens just go back to your 0,0,0 point and type UZ to reset your zero position and your table base coordinates

OR

  • You replace your table top and don't get it EXACTLY in the same place, or you make any other changes that change the REAL 0,0,0 position of your ShopBot like moving the Z-axis or using a different kind of router with a different sized body. If any of this happens, don't worry...just go through the same steps above that you did the first time you set things up and you'll be back in business.

I know all this sounds pretty complicated (and the description was pretty long-winded!), but I promise if you take the time to set things up correctly that you'll find it VERY handy, especially with the new, fast-moving PRTAlphas.


ShopBot File Runner Program - July 2004

Many of us run a lot of different part files and like working (playing some times!) with all the options and possibilities in the ShopBot software. Others, though, may only run a couple of different files or might have someone else run the tool who may not be quite as proficient with the ShopBot software as they are...this set of programs is for you. It lets you create a custom "ShopBot File Runner" with a series of buttons that will run ShopBot files and define options for the way they'll run like..

  • If the file runs in Cut or Preview mode.

  • How the file will close when it's done.

  • How many decisions the person operating your ShopBot will be able to make when running the file.

If you'll look in "C:\Program Files\ShopBot\Developer Tools\Runner" you'll see 2 programs, a folder named "media" that contains button icons, an ini file and a .bak file. The "ShopBot File Runner" program is the one that the ShopBot operator will use to run the ShopBot files, and the "File Runner Customizer" program is the one that you can use to create your own customized runner.

 

We really should start with the Customizer program first, but since it will all make more sense if you can see what you'll be creating, we'll try out the runner with the default ini file first. Click "ShopBot File Runner" and a small form will open up with one button and a little bit of text next to it. Clicking that button starts the ShopBot software, draws the ShopBot logo file, and then closes the ShopBot software when it's done. You get the idea...the "ShopBot File Runner" just automates the process of running ShopBot files. Now you may want to do something with your ShopBot other than run the logo in Preview mode, so next we'll learn how you can create your own custom File Runner.

If you'll click on the "File Runner Customizer" icon, a form will appear with a handful of options that will define the buttons for your runner and how they will work. At the top is a box to fill in a description for the first button. Try to come up with a "short but sweet" description that will be easy to read and understand because this is what will identify that button to the person running the ShopBot... so "Button 1" is a bad choice. If the file will be run in Cut mode "_cut" is added to the end of the description, and if it's to be run in preview "_Prev" is added.

Next you'll pick the file that the button will run...it's pretty standard Windows stuff and shouldn't need any explanation... and the icon that will appear on the button face. You can go with the defaults (the old move/cut and preview icons from the DOS software) or select a different picture. There are a handful of choices in the "Media" folder, but you can use any 32 pixel x 32 pixel bitmap or icon. You can also create your own in Paint or any other graphics program that you prefer. I try to use the prefix "p_" in my picture names for files that will be run in Preview mode and "c_" for files that will be run in cut mode, but you don't have to do that if you don't want. Just don't overwrite the "c_sb.bmp" and "p_sb.bmp" files...they are the ones that are used as defaults.

 

Now we get down to the meat of the program...deciding how the file will run. You'll be able to select how the file will open, how it will close, what the user will see on the screen, and sometimes if the file will be cut in Offset mode. The Run Method, Close Method, and Display Method options are pretty clear, just read the descriptions next to the radio buttons. The only odd ones are the last Run and Display options. The last Run Method option just puts the file that you select into the fillin sheet when you use the FP command next time...you probably won't need to use that very much with the runner. And the last Display Method option removes most of the choices in the ShopBot software so that the operator can't open the keypad or change any settings.

The Offset option is only available when either the 3rd or 4th Run Method is selected, so that the software starts without the fillin sheet appearing. The final choice at the bottom of the screen asks if you want to create a "warning" box that will appear first if the file is going to run in CUT mode. We HIGHLY recommend that you keep this option checked...it makes the process of running a file that much safer. When all these choices are made you can either click "I'm done" to finish up or "Add another button" to...well...add another button. Make sure that you use a unique description for each button. You can add a bunch of buttons but you'll run out of space after 8 or so. If you need more than that, let me know and I'll look into a different layout options.

When you're all done and have clicked the "I'm done" button, a new "runner.ini" file will be created that will be used to setup the "ShopBot File Runner" program the next time it's run. Just make sure that you keep all the parts in the same folder, though you can create a shortcut to the File Runner program on your desktop (or wherever you want) to make it easier to find and run.

I hope these programs will help make your ShopBotting easier, and drop me an email if you think of any other programs that you'd like to see. I don't make any guarantees but if it sounds interesting to me...