Differences in the way people approach problems.

I have been looking for a good way to describe the two extremes in how people try and solve problems. I find that in one extreme a person will take everything they know about the problem and then craft a comprehensive solution to that problem based on that initial state. On the other extreme, a person will take an incomplete solution, test that solution on the problem, and then make changes as they see fit.
I think that this article that talks about the differences between deterministic and probabilistic models describes the two extremes that I had imagined. A deterministic model for a problem is one that assumes everything will happen as you expect and therefore a comprehensive solution to a problem can be crafted at the beginning. A probabilistic model is one that assumes that there is a certain amount of uncertainty in what will happen and therefore the model needs to allow for that variation.
What I liked about the article was it’s connection to these models and the differences in the way people see the world: “People ascribe meaning to anything from star patterns, tea leaves and moon phases to ease in finding a parking spot and not being in a certain place when a coconut falls. This is a way of turning a probabilistic world into a more deterministic and more meaningful world. Some people are happy with a probabilistic world, where things really do have a high degree of randomness. But often we are less happy when the randomness goes against us.”

Article: Deterministic and Probabilistic models and thinking

Scripting an Object Into Life with OpenScad

button_enclosure_revision

Are you looking for a free and OpenSource CAD program? Are you hesitant to take the time to go through hours of on-line tutorials to learn a program that might not use that often? Do you think programming is rad? OpenScad might be your tool. Let me talk about what I have been using it for and what makes it interesting.

As part of a summer project with the Creative Technologies Association at BSU, I have have been modeling 3D objects with OpenScad. The main object has been a button enclosure for a big red button that we bought from Boise’s scientific surplus store called the Reuseum. I had been introduced to OpenScad through friends at OpenLab Idaho (Wow, lots of… Openness), and chose to use it because, of all the modeling software out there, I knew that I wouldn’t have to deal with any licensing or accounts or free trials. Blender would have been another option, but I didn’t choose for reasons I’ll explain. It was a quick download and I was off.

The gist of OpenScad is that instead of using a slew of tools and design modes to come to a finished product, you have what is called a textual description language. Your shape will be defined by lines of code and will exist as those lines of code until you export the object as a different file type. While OpenScad works on the same principles of other design software, like defining geometry by combining shapes in an intersection or difference, defining these operations are written as a statement much in the same way that you would in any programming language.

cube([20,20,20]);
cylinder(30,r1 = 7, r2=7);

two-shapes

For example, this is the code to create two primitive shapes, a cylinder, and cube. These shapes happen to be overlapping so I can demonstrate some of the operations that are useful for defining objects.

difference(){
cube([20,20,20]);
cylinder(30,r1 = 7, r2=7);
}

two-shapes-difference
Here is the difference operator, which as you might see is good for subtracting
material.

intersection(){
cube([20,20,20]);
cylinder(30,r1 = 7, r2=7);
}

two-shapes-intersection

Here we have the product of the intersection operator, which is only the material that is part of both of the primitives. This is just like the intersection of a Venn diagram.

Other than operations like these, OpenScad does not have a whole more to it. What you have is primitive objects(like the ones in the examples), transformations(for moving objects around in space), operations, and then mathematical functions. Instead of having the function that you are looking buried somewhere in a submenu of a submenu like you would with Blender, with OpenScad, you may be figuring how to execute that function as a combination of mathematical functions and operations onto a set of primitive objects.

As I’m writing this, I can see how this can be sort of intimidating. I think that most people don’t want to be handed an electromagnetic theory book when they ask how to get their cell phone connected. Creating an object using only very primitive tools seems like it’s more trouble than it is worth, but depending on what you are doing, it can end up being much more simple than using a fully featured design program. I have preferred this software so far because once I have an object in mind, being familiar with the basic tools is all I need to start devising a strategy that will result in a simple but functional part.

There are some obvious limitations to a design tool that requires you to do a good deal of the heavy lifting. I have yet to see anyone come up with a good solution for a simple loft function, where you take two 2D surfaces and fill the 3D space in between them. You will also not find any of the simulation and rendering capabilities that you find with more full featured software.

I think that OpenScad is ultimately good for very straight-forward projects and is great for people who enjoy programming (I guess it’s why they call it CAD for programmers). It may be that I like it just because I think that it is an interesting thought exercise, but what I have ended up with are functional parts, so I can’t say that it is a trivial thought exercise. I guess I’ll just keep doing what I’m doing!

Community First

In many of the recent discussions concerning starting/expanding/changing a Makerspace, there has been a common theme that has made me very excited. The idea being shared is that what really keeps a space going, what brings more people in, and what keeps people coming back, is the community. This makes me excited because for a long time this was not apparent. For a long time, the idea was that you could fill a place with technology and that people would immediately start hacking away. I think that many people assumed that once they came up with the right policies and made sure that a few people knew what they were doing, that people would start bringing in their projects and start hanging out.

The dream for me was that I could come in at any point in the day and be inspired to do something great, whether it was because I had access to a machine that I would never have dreamed of owning, or that I could find someone working on a project that was way more advanced and exciting than anything than I could have come up with on my own. I think that this dream is still what drives many of us involved in this movement to continue working on the amazing spaces that we have imagined.

What people are thinking of when they imagine an environment like this, is one that has a very healthy social dimension. Users in this environment are comfortable with the other people there. They are familiar with the tools and the safety procedures. They know where to find things and who to ask if they need help. This is the kind of environment that everyone would agree is where someone could sit down and hash out a really great project.

What is sometimes hard to see, is all of the barriers that a person might face going from their first time visiting, to becoming a part of the community of makers. The barrier that I first experienced was social anxiety. For a lot of people, joining a new group can be difficult and those first interactions can be the most difficult. It took me several months of attending weekly hack-nights to feel even remotely comfortable. When I did feel comfortable, I was better positioned to engage with other users by learning together and collaborating on projects. While I was faced with the barrier of social anxiety, there are many other barriers that people face. Many people might have trouble relating to the existing group because their race/gender/sexuality is not represented.

In my experience in both of the maker groups that I have been a part of, I have seen some really great ways to address these barriers. Sometimes it can be as simple as a quick introduction, where a visitor is introduced to regular users and then given a rundown of what equipment is available and what is required before use. The key is getting a user comfortable with both people and equipment. If someone doesn’t feel comfortable, then they can easily choose somewhere else they would rather hang out.

A quick introduction is nice, but the thing that has been the most successful in my eyes has been the 3D printing workshops that myself and other staff give at the MakerLab at Albertsons Library. Over the course of an hour, a new user is introduced to an active part of the space. In telling them about how to use the printers, and more importantly how the printers are being used by other makers, I can get someone comfortable with the idea of coming in and getting an idea out of their head. Also with this amount of time I can  identify and address any barriers that this person might face.

Looking past introductions, I think where the bulk of improvement can be made is in the ongoing events like training workshops and regular meetings. While some people are perfectly content with sitting down and hacking their way through a project, I find that most people need to have something more tangible to get them acquainted with the people and projects before they can feel like their ideas belong. What these ongoing events do is create an entry point into the current flow of activities. Whether someone has been hanging out for over a year or whether they are brand new, It really takes a regular event to get them reconnected and ready to get making things.

The reality of most Makerspaces is that you can have it full of technology, but if there is no community then nothing will happen. If I wanted you to gain anything from this post it would be that although having great technology is important, it is more important to create social constructs that develop your social dimension. Having a solid introduction is obviously a great start, but investing the time to develop workshops and events will create that environment that we all had in mind when we first thought of a Makerspace.

 

Stretching AppInventor

One of the most common themes that I find in interesting projects is  the creators ability to find an effective solution for a problem when they have been given very limited resources. While I am in school I am excited to find problems that requires a little more ingenuity than would be expected by the assignment requirements. In this case I was eager to push the animation capabilities of AppInventor, and create something that might normally be outside of the scope that someone might expect from a development environment geared towards beginners and kids.
After only being tasked to create an app that used trigonometry in some way, my partner and I were intrigued by the idea of creating a visual representation of angles on the unit circle, complete with component vectors SIN and COS. This would required some creative use of the methods available for use with the sprite objects that are the basis of animations in AppInventor. The key restriction is that sprites are limited to be re-sized, rotated or translated. I had initially assumed that there wasn’t any sort of line drawing tool (which later I find that Appinventor actually has, much to my dismay) and therefore I would be manipulating images using these methods to sort of simulate line drawing. To show you how I did this, I wrote up some of the important functions in Pseudocode as to not bother you with the hassle of not knowing the specifics of AppInventor blocks.


// Display X-Coordinate

if ((quadrant(angle) == 3) || (quadrant(angle) == 4))

redLine.setX((cos(angle)*100)+100)
redLine.setY(100)
redLine.setHeight(-(sin(angle)*100))

else

redLine.setX((cos(angle)*100)+100)
redLine.setY(100-(sin(angle)*100))
redLine.setHeight(sin(angle)*100)

//Display Y-Coordinate

if ((quadrant(angle) == 2) || (quadrant(angle) == 3))

blackLine.setX((cos(angle) * 100) + 100)
blackLine.setWidth(-(cos(angle)*100))
else

blackLine.setX(100)
blackLine.setWidth(cos(angle)*100)

//Display Hypotenuse

xDirection = (cos(angle)+1) * 100
yDirection = Canvas.Height - ((sin(angle) + 1) * 100)

Two Worlds Collide

 

open lab idaho at albertsons library There was a lot going  on in the Boise maker community tonight. The wonderful creative minds of Open Lab Idaho met in the dynamic and growing space of the MakerLab at Albertsons Library. In traditional “Hack Night” fashion, the group gathered around the table worked on projects and shared insight into their creative process with anyone who cared to inquire. Randy made progress with his software defined radio and was able to broadcast an audio file. Micheal was experimenting with Arduino Gemma, an Arduino that is designed to be sewn into fabric. John was working with his ever growing collection of microcontroller based projects. More exciting were the interactions that regulars of the MakerLab had with members of OLI, almost everyone was involved in solving a mystery surrounding a monitor that would not cooperate with a pi. Overall it was a fantastic night, and OLI looks forward to future meetings at the MakerLab.

giphy

Breakout some Buttons!

After a couple of projects that failed more or less because of soldering mistakes, I figured I would try making something for the sake of learning better soldering techniques. This time I would try to make cleaner joints by heating up the joint and then applying solder. In addition to that, I would try smaller gauge wire and make sure to tin the tip. I think that the overall project looks neat, but I could still use a lot of improvement before I tackle a larger project.

What I created is a push button breakout board made with mostly leftover parts from the PiGrrl project. It consisted of the AdaFruit protoboard, four large push buttons, and a six pin male header. The inspiration of the project is many times that I have breadboarded push buttons to tear them off again. With the inclusion of the male header, I should have no problem popping this board on and off an Arduino or breadboard. I know there are probably a million shields out there that can do this, but like I said, this was mostly for soldering experience.