Thursday, November 5, 2015

Beetleblocks, finally a reason to get a 3D printer

Somehow I came across Beetleblocks, which is a "graphical blocks-based programming environment for 3D design and fabrication. Use code to control a beetle that can place 3D shapes and extrude its path as a tube. Then make a 3D print!"

It makes building 3D designs fun and "not so hard"

I really liked Jacklyn + Patrick's idea for creating your own modular jigsaw puzzle like pieces.  This picture is my first attempt. Plus some other attempts. 

Sunday, October 25, 2015

Get The Facts => Analyze the Facts => Act!

I had a sign on my door at work:

  • Get the Facts
  • Analyze the Facts
  • Act!

To which some observant person put on a sticky not the sign and changed it to:
  • Get the Facts
  • Analyze the Facts Ignore the facts
  • Act!
So I have decided to record a couple of by-products I have observed:
  • Get the Facts
  • Analyze the Facts Select only those facts that agree with what you want to hear
  • Act!
  • Get the Facts Select only those facts that will support what you want to hear
  • Analyze the Facts
  • Act!
  • Get the Facts
  • Analyze the Facts
  • Act!
  • Get the Facts Get some facts that are easily accessible
  • Analyze the Facts
  • Act!

  • Get the Facts
  • Analyze the Facts
  • Act! Do what you were going to do anyway

Sunday, February 15, 2015

Day 14-15 - 30 Day Learning Challenge

Sometimes the best thing to learn is that 
I am doing something stupid.

So I spend the Thursday and Friday in a elasticsearch class.  I find elasticsearch very useful and Lucene very cool.  But really what I found most useful was the three really stupid things I had been doing with elasticsearch.

I have one colleague I have worked with who is very bright and often makes a comment along the lines of "we all think we are the smartest person in the room."   And at times I feel this is his goal, to be the smartest person in the room (one he often succeeds at when discussing certain technical topics).

But my goal has always been to be the dumbest person in the room.  Why?  Because then I can learn from so many people and they can compensate for my weaknesses (which are many).

One of the cultural issues I feel hold people back from learning is being afraid to look bad or to make mistakes.  The question I have is how can we install in our students/co-workers/etc a sense that its okay not to know?  In fact its good to admit ignorance, then you can get past that and try and learn something.


Saturday, January 31, 2015

Day 13 - 30 Day Learning Challenge - Debugging/Simulations Play

Not much to show today.  I spent a good deal of time working on some dice simulations/modeling. My goal was to think about how students might write a dice simulation in various languages and how one could facilitate understanding/learning about the underlying principles involved in dice simulation along with the concepts and ideas that can be explored in this process.

I looked at dice simulations in Scratch, TurtleArt and Python.  I also explored ways I could create dice simulations in Etoys.  As I mentioned in an earlier post I find "step by step" execution useful for not only teaching, but also for myself when the code doesn't do what I think it should.

I also played with various ways to write the simulation.  Partly to think about how kids might do this. Side note - I found it really hard to overcome my pre-existing knowledge as I instantly went to more "advanced" ways of implementing simulations, rather than ways a novice might start out. I also tried various approaches to think about how to create some "good examples" that students can learn from.

These examples ideally would also show the evolution of my thought and try and convey that we don't start out with a thing of beauty but how refactoring and rethinking the problem can help improve your results (although admittedly I have on occasion wound up making things worse by over complicating ;)


Post Script - Another way to think about simulations check this Scratch Studio - "Just like real life!" a more "real world" way kids think about simulations/modeling.

Thursday, January 29, 2015

Day 12 (or so) - 30 Day Learning Challenge

How to Visualize Program Execution/Step Debugging

So this post was trigger by looking at TurtleJS by Walter Bender.  In playing with TurtleJS (which by the way has a rather nice interface design to support both mouse, touch, large screen and iphone size screens) I made a comment that
... would also be nice to have a "Step" button/icon.  Where kids could step through the scripts.  I often do this when kids don't understand a bug in there code.  Allowing them to step through one tile at a time (and ideally having them narrate what they think should be happening) often helps them debug without me really doing anything other than getting them to slow down and observe what each tile actually does.

So I started to think about different ways this could be implemented in TurtleJS and I prototyped some in Etoys.   Below is the current visualization:

What is hard to see in this image is that the block is highlighted in both scripts.  Here not only is the executing block "highlighted" (actually the block color is lightened to indicate executing), but also the blocks (as the execution is within each repeat) and the block which is waiting for "return" from .

So in effect this implementation is not only showing the "executing" block, but also the "call stack".  I wonder whether showing both the executing block and the "call stack" is a bit much visual/cognitive overload.

The following is my first attempt at prototyping a different visualization:
What I was trying to do here is make it more visually apparent which block is executing and what "script/block" called .   One thing I felt was missing was showing that we were in the loops so I tried the following:

I think I would have preffered to make the "repeat lines" dashes here and not really cray about the "calling arrow" from as I think it is a big.  The whole thing is also a bit too busy as the eye should be drawn to the action and the "main character" (suggested reading -

The Illusion of Life: Disney Animation: Ollie Johnston, Frank Thomas

great book on design).

So here is my last prototype for the day:

The point is to "gray out" the uniteresting parts to help the user's eye focus on the main action (watch some Disney animation and look at the "lighting").  I wound up "greying out" the "non executing" blocks and using a slighlty less grey mask for the blocks.  I would probably also do a light grey for the .

Last few notes:
1) I think it would be nice if the executing block's grew larger as they executed.  But the particular block library Walter is using apparently messes up layout when you do this.
2) The actions on stepping happen to fast. Ideally when stepping and there is a concrete execution of a block (ie: forward or turn vs. an arithemetic function) it might be good if the concrete action was slowed down so that the forward 100 did took a 1 sec instead of "instantly" (something similar to the way the scratch Glide tile works). Of course if you implemented a glide, that might need to glide slower and could mess up certain debugging cases that rely on timing.  Even if you didn't implement a glide block, someone could conceivably implement their own glide action.

The main problems I am trying to solve are:
1) Getting the students to slow down their thinking
2) Getting the students to pay attention to what they actually told the computer to do vs what they intended to/think they told the computer to do.
3) Providing a more concrete representation of code execution
4) Getting the kids to think about what's going on inside the computer (more on this when I describe how the online Python tutor tries to solve the step debugging problem).


Saturday, January 17, 2015

Day ~11 - 30 Day Learning Challenge

Too busy with work, which takes a large cognitive load, so at the end of the day I need diffusion/space out time.  Focused thinking after a day of focused thinking is hard.

I did find time while waiting at the bank to re-watch some AngularJS videos and try and apply some of the knowledge.  Below is my updated answer to #5:

5) Applying knowledge of research findings or learning techniques to help me overcome my challenges.
  1. Spaced Learning - Well I finally started trying this by re-watching the AngularJS videos and thinking about why they do certain things and what problems they are trying to solve, etc.
  2. Pomodoro Technique - Well total failure in applying this.  But this week I will do it.
  3. Don't just glance at it and think you know - I am recongizing this problem and admitting it to myself.  Part of the reason I am re-watching the AngularJS videos is to not only for spaced learning, but also to try and get a deeper understanding.
  4. Use different problem solving techniques - Well the lessons did go through various ways to produce the same HTML and behaviors, so I could see the advantages of directives and controllers.  Yet, it would be better to compare to completely different ways to solve similar problems.
  5. Powers of 10 thinking - I just do this naturally, but again too much time in the clouds trying to generalize and not enough going down deep.

Tuesday, January 13, 2015

Day 10 - 30 Day Learning Challenge

As part of my Learning How to Learn course I have an assignment due by the 15th.  It is to writ a "Reflective Essay about a Learning Challenge"  Below is a draft:

1) Current learning career and trajectory. 
I am a Director of Customer Support and Operations at a Telecommunications company and also work on "learning software" for OLPC.   I have taken on a 30 Day learning challenge and part of that is to learn about AngularJS for a project at work and also to experiment with implementing something similar to Dan Ingals Lively Web demonstrations using connectors.  I have always been fascinated with how people learn and how you can create learning experiences that facilitate learning.
2) The learning aim that is of importance to me. 
I enjoy programming and do not have much opportunity to do it.  I manage some folks who write code and occasionally write some myself, so I want to be able to ask good questions and challenge my team and myself to think more deeply about the problems they are solving and how they are solving them using AngularJS.  Also as part of my volunteer work with schools I want to explore how to create better learning software and experiences.
3) Biggest mental challenges in achieving your learning aim.  
Managing my time, given a full time job, four home schooled kids and volunteer work.  The biggest mental challenge is having the discipline to spend at least an hour a day working on learning.  The other challenge getting a deep into understanding AngularJS model of writing code.  I am a quick study and can get going quickly, but need to be more persistent in understanding at a deeper level why things work. 
4) Outline existing research or learning techniques that are relevant to your challenges.
  1.         Carpenter, S. K., Cepeda, N. J., Rohrer, D., Kang, S. H. K., & Pashler, H. (2012). Using spacing to enhance diverse forms of learning: Review of recent research and implications for instruction. Educational Psychology Review, 24(3), 369-378. This paper tells us that it is very important to space your learning out over several days.
  2.         Procrastination--the Pomodoro technique.  This technique involves setting a timer for 25 minutes and focusing only on the topic at hand without being distracted.
  3.         Merely glancing at a problem's solution and thinking you know how to do it —as per the “10 Rules of Learning” page.  Being a quick study I often fool myself.
  4.        Alternate different problem-solving techniques during your practice - as per the "10 Rules of Learning” page. This I think will help me learn deeper. "You don't understand anything until you learn it more than one way" - Marvin Minsky
  5.        The following is a tip from Dr. Robert Bilder on how to learn effectively: Uses the "Powers of 10" way of thinking about a problem.  Where you "zoom out and then zoom back in" when thinking about a problem.  Below is the video that inspired the idea.

5) Applying knowledge of research findings or learning techniques to help me overcome my challenges.
  1. Spaced Learning - 
  2. Pomodoro Technique - 
  3. Don't just glance at it and think you know - 
  4. Use different problem solving techniques - 
  5. Powers of 10 thinking - 

Regarding AngularJS (remember I was learning Angular ;)  I did a code review today.  One way to learn is to study great literature.  I don't know that what this person wrote was great, but it is good.