Profile cover photo
Profile photo
Christopher Schmitz
Christopher's posts

Post has attachment
We're back!

We just open sourced the current Collaboration Tree (cTree) site demo code (still in development) on GitHub. If you're a developer or designer, come check out this exciting new Polymer web component based project and help out by working on a ticket if you have time. If you don't have experience with Polymer, web components, or web development, don't worry - it's a great way to learn what's shaping up to be the the future of web and mobile development.

We'll also start posting to our blog and social media sites again soon. For current and prospective members we've removed the commitment requirement, which we hope will encourage more casual members to join and participate as they have time. If you haven't joined yet, now's a great time to get in as things start ramping up, and if you're already a member be sure to check back in with our member community.

Finally, we're going to start building an advisory board. If you or someone you know is an experienced profession interested in helping to guide and shape the organization at the highest levels please let us know. Individual meetings can be arranged for prospective advisers to discuss the vision for the organization and showcase the current status its projects.

Post has attachment
He's my president...

And I expect him to act like it. I realize this election was extremely contentious, but the country has chosen our next president and we should expect the best from him, like we would any other president, rather than the worst. Positioning yourself against the future president before he's even been sworn in only serves to negate any future criticism you might have.

I'm sure I will disagree with some of the decisions of the next president, as I have with all presidents since I was aware enough of politics to do so. I'm even preparing myself, for the first time in my life, for the possibility that I may need to protest. If I do, it will be peaceful, done to encourage specific change, and not on the doorsteps of people who agree with me. In that spirit, I refuse to take part in, or even encourage, protests complaining about the outcome of a fair election I participated in; one which cannot and should not be altered by the voices of protesters.

In summary, see my post on unity from before the election:

A call for unity...

I don't usually post on social media, but in our current political climate I feel the need to speak out. No, not about getting out to vote, although it's important to stress that it's not just your right but your responsibility. What worries me is the fracturing of our society into distinct demographics, distrustful of those with different opinions.

Over the course of years of research into different social systems, as well as more than a decade of professional work on technical systems, I've come to believe that when things go wrong it's usually because of a flaw in the system. I don't pretend to know everything that's caused the venomous climate between dissenting opinions that now seems to be the norm in our society, but it's clear to me that individuals and business interests have been encouraging it for their own benefit. When we're made to believe that the stakes are high against a clear enemy we're more likely to tune in, whether that's tuning into shows, attending events, or even directly donating time or money.

Despite the overwhelming influence of systems we tend to blame individuals, who may simply be victims of a system which encourages manipulation of them for money or power. And before you feel too sorry for those poor victims, realize that it's likely you're one of them too (as am I), at least to some extent. It's so enticing to embrace a message telling you you're right and others are wrong that it takes tremendous self awareness to challenge the half truths, and sometimes flat out lies, told about both sides. The danger is that the more you buy into messages like these the less you're willing to even listen to messages which challenge them.

Now, this may sound like some hippie message about how everyone should just get along, but there's a practical problem with the way things have become. Studies on problem solving have shown that groups which work well together consistently out perform even groups which defer to a superior leader. Failing to work well together at best makes us weaker, and at worst can be flat out dangerous for those seen as a threat to the majority.

If you believe you and your group is always or even usually right, the odds are you're wrong. It's impossible for one person or one group to always find the best solution or achieve the best result, so working with others is the only way to succeed. Recognizing that, the challenge is for us to learn how to work together again, which isn't as easy as it sounds.

The most difficult part of learning to work together is learning to listen. That doesn't mean waiting for your turn to talk, it means truly listening to the concerns and criticisms of people with different opinions. It requires that you respect the person talking to you and understand that they truly believe what they're telling you. When your opinion differs, you need to realize that you might not be right and it's more likely the truth lies somewhere between your two opinions. Having a discussion isn't about deciding who's right, it's an investigation into the beliefs of both parties in an attempt to find the truth.

In my personal life I try to assume that most people are trying to do their best, working to improve their lives without harming others. Of course people can falter and act selfishly, but usually they don't even realize they're harming others, and the number of true sociopaths is extremely low. I find that often when people harm others it's because they don't see them as part of their group, which again underscores why we need to break down the barriers between groups.

All that said, I'm a realist and I understand that no matter how open you are to a discussion, the other person may not be. That doesn't mean that you should throw your hands up and call that person unreasonable. To be clear, giving up an opportunity for discussion with someone who hasn't completely shut down makes you unreasonable. It may be that the only thing you get out of a discussion is a better understanding of how the other person feels, but that in itself is extremely valuable and will help you better carry on future discussions. In addition, you may stand out as someone willing to listen, which may make the other person more likely to listen as well at some point.

Barring anything unexpected the election will be over in a few days, and regardless of the outcome the most important thing we need to work on is bridging the many divides in our society, not just politically but between different groups. Whatever group you belong to, realize that we're all part of this nation, this species, and this world. Treat your fellow humans with respect and understanding as you seek to find the truth between the opinions. Stand up for unity and expect your representatives, regardless of party, to work to find compromises rather than holding fast to their own unyielding opinions. Representatives who refuse to compromise or encourage separation make us weaker and have no place representing us, regardless of party.

I think the NFC tag wall on the South side of the office hours tent (South West corner of Zone D) is the best use I've seen of Spaces (the session spaces I've joined weren't that useful).

#io16request Why wasn't Google IO pushed back until Fall if most new things won't be available until then anyway? At least then developers could get hands on with new tech instead of just being told it's coming. If you want to do a press conference do it on your own time, leave developer events to things we can get our hands on now.

It appears Google Cardboard is part of the welcome package, which is a bit surprising given the rumors of a standalone VR headset and/or a more sturdy version of Google Cardboard. There have been pretty consistent leaks about an impressive upgrade to VR by Google, so why would they give out the last gen version to attendees? I'm wondering if the big improvement is just adding the Tango Phone to turn it into an AR device, since the sessions keep talking about Tango and AR. What's everyone else's take on it? Anyone who's gotten the Google Cardboard check to see if there's anything special about the NFC chip (assuming they included one)?

Hey Google, how about you stream the filmed sessions and various locations around the convention in 360/3D so people with Cardboard can virtually attend?

Post has attachment
I had this article saved and thought I'd share. Ozobots are a fun way to try out coding for the first time, but for anyone who doesn't want to shell out for one has a lot of great introductory code examples you can do online.

Post has attachment
Ozobot sale!

You can get $10 off an Ozobot while they're still on backorder (promo code Ozobot10), bringing the price down to $40 for the Ozobot Starter Pack. Keep in mind that you won't be able to code it (other than a 14 day trial) if you don't pay another $10 on So if you plan to get just one Ozobot it's the same price as the Ozobot 2 Bit. If you plan to get more than one I recommend a couple starter packs, because you only need to pay once, making it only $100 in total for 2 starter packs after discount, compared to $105 for a Ozobot 2 Bit Dual Pack after discount.

Ozobot Programs: Function Library
While writing Ozoblockly programs I found myself repeatedly writing the same code, so I decided to create common functions which I can reuse like a code library. You’ll find these in all my programs, including the color search game I made ( I usually keep these functions collapsed and on the left, disabled if my current program isn’t using them, which keeps them from using up code units.

I suggest loading in a function library project before starting a new program. If you find useful functions after you’ve already started a project, you can add them to your existing project by following these steps:
1) Save all the functions to a separate project
2) Convert your current saved project and library project files to text files (in Windows just add “.txt” to the end)
3) Open the project files in a raw text editor (notepad in Windows)
4) Copy contents of the library project and paste them to the end of your saved project and save
5) Convert your projects back to ozocode files (ex. remove the “.txt” extension)
6) Open your saved project file in the blockly editor & move the library functions wherever makes sense. You may want to collapse everything when doing this, because some functions could be hiding behind others. It’s also important to check the variable names, especially if the loaded functions use global variables.

Here are quick descriptions of the library functions in my projects:
color selected
This function will wait for the user to select a color by holding the Ozobot over that color for 3 seconds. The LED color will flash the specified color while the Ozobot is over the matching color, until the color has been selected. This is safe to use as if conditions because there’s a quick check at the start to see if the current surface color matches.

color selected stoplight
This is like the “color selected” function, except instead of flashing the selected color, it flashes red, yellow, green. I like to use this to indicate starting a game, which helps to ensure that all Ozobots start at approximately the same time. If the timing is off you can just lift up the Ozobots and try again.

color selected internal
I use “internal” to indicate that you shouldn’t directly call a function. This function holds the shared logic for the “color selected” and “color selected stoplight” functions.

set light color
This sets the light color of the Ozobot using a surface color value. This is used by “color selected internal”, but I’ve also used directly in the color search game.

set speed
This sets a “speed” global variable to the specified value, while also updating the Ozobot speed to the same value. I used this in another program where changing the speed was common, which took code which cost 9 code units, and made it only 6 code units to call (3 for the function call and 3 to set the parameter value). You more than make up the difference after 4 calls to this method, not to mention having cleaner code.

flash value
This function can be useful in debugging. Since Ozobot has no way to report internal values back out to you, it can be difficult to know what’s going on inside it. When you pass a value to this, the function will flash red once for a negative value, green for the value / 10, and blue for the remainder of value / 10. For example, if you saw red, green, green, blue, blue, blue it would mean -23.

flash color
This is used by “flash value”, although it can be a helpful function by itself. This will flash the specified color the given number of times. The Ozobot LED will be off after this is done, unless flash was 0.

test colors
Technically I consider this a program, since it’s intended to be run by itself, but it’s in the library section and is too small to warrant its own post. This function will update the Ozobot light color to match the surface light color. This is useful for testing new markers to ensure that they register the correct color. I also added a sanity check to set and keep the light color orange if an unexpected surface value was returned. I haven’t experienced this before, but I have gotten a program crash when an Ozobot got stuck in a corner, so just in case that was the cause I included this.

wait for reset
This function waits for the user to move their Ozobot after a color had previously been selected. It's especially useful in conjunction with the color switch code below it.

color switch
This actually isn’t a named function, but a “repeat forever” block below "wait for reset". It’s intended as an example of allowing the user to select different code to run by moving the Ozobot over a different color. This has been useful in debugging, so I didn’t need to keep reloading the Ozobot to switch behavior. The different cases are a good place for “wait for reset” (once it’s fixed”.
Wait while more posts are being loaded