Showing posts with label open source. Show all posts
Showing posts with label open source. Show all posts

What I learned from the engineers on the Blockly open source project

It's Computer Science Education Week and I am really glad to see how much it has grown over the years. I expect this year, more people will become aware of the benefits of computer science and how learning to program provides you with powerful tools to create and innovate than in any year prior. If you haven't tried the Hour of Code I highly encourage you to check it out. The ability to program transformed what I was able to do in my classroom and has opened up many opportunities in all areas of my life.

In my last post, I shared my brother's story about how a Computer Science MOOC opened up a new world of exciting projects and ideas for him so now I'd like to reflect on one of the projects I've been working on for the last few months. I already know a bit of computer science, I've learned how from books and tutorials over the years. Nevertheless, no matter how much I learned, it never seemed like I was getting any closer to developing the kind of software professional engineers create. I had access to all of the same resources the professional have but I just could not figure out how to cross this chasm and write more complex programs.



I became much more painfully aware of this issue at Google where I am surrounded by experts in computer science. I realized there was something that was missing, and our team's technical manager told me I needed code reviews, the feedback and guidance one receives when someone more experienced looks at your code. He suggested I join an open source project.

It just so happens that I sit next to +Neil Fraser (blog/tutorials) and +Ellen Spertus (Mills College Faculty Page) who work on +Blockly (Google Code page, demos) and before that App Inventor. Over the next few months, through their kind, helpful, and specific feedback; I was able to build on what they had developed. It is one thing to read about a topic but actually using version control, following style guides, and following the DRY principle taught me lessons that books and tutorials alone never could.

Their willingness to help me improve as a programmer motivated me to learn quickly so I didn't squander their time and mentoring on simple syntax/logical errors (always run the linter!). After improving the readability of my code, I was able to implement additional features and it was so satisfying every time they replied with an LGTM. Not one of my code reviews was accepted the first or second time which tells you:  I still have a lot to learn, Neil and Ellen maintain a high standard of code quality, and that they were both very patient. Code reviews are an incredible way to grow as a developer and as long as you follow Ellen's advice to, "check your ego at the door", you will learn a lot.

I've pointed out the benefits of feedback and refinement for students over the years but I was unprepared for how much and how quickly my programming skills would improve. I am all the more convinced that anyone who is interested in learning how to do something really well cannot learn in isolation. A mentoring/feedback loop is essential to continue growing.

Software developers are always learning new technologies, languages, APIs, quirks, idoms, and styles all the time. Even after all that, things never work like they should, and debugging takes just as much, if not much much more of your time as writing the original code. To be a software engineer is to be very cognizant of how one learns best, where to find answers to abstract questions, and troubleshooting mysterious issues. I am humbled to have worked with both of them, and in general I am inspired by how willing engineers at Google are at helping one another (provided you have done everything you can to figure it out for yourself).

Based on my experience, I would highly recommend joining an Open Source project:
  1. You will learn more than you ever could just from reading books or taking classes. It's a great way to put into practice what you are learning.
  2. There is a great deal of satisfaction in supporting a community/project that has a laudable goal.

I've been told that not all open source projects are created equal so if you are looking to join one, here are a couple of tips:
  1. Find one you care about. You may end up spending a lot of time on the project so pick one you find worth supporting with your time and effort. There are no shortage of projects out there so whether you pick one because of it's purpose, the programming language it's written in, or whatever else, make sure you have some good reason so you are willing to stick with it.
  2. Are you going to learn from it? Look at the code repository, can you tell what the code does, is it readable? Do they follow a style guide? I was working with two experts in computer science at Google so your results may vary. If you are not going to get valuable feedback then you will not learn as much as you could.
  3. Test the waters. Submit a small patch and see what their feedback is. While personality types differ and some can be more snarky than others, a code review should not be a disheartening experience, feel free to join a more appreciative project if you feel like you're being treated poorly.
  4. Supporting a project does not have to involve writing code, Blockly and other projects are always looking for translators, documentation, etc and you can commit as much time as you have to offer.
I love that no matter how much I learn, there is more to discover and improve one's skills/knowledge. I hope you will take this perspective into the new year and model it for your students.

What programming language should I use/learn?

I get asked often, "Which programming language should I start with?" or "I teach _______ which language would be the best for my classroom?" My goal is not to promote one language but show you the benefits of each of the more popular choices out there and let you make your own decision. There really is no one "best" language, just the best language for what you are interested in doing.

As always I promote technology that:

  1. Enhances or encourages learning. Programming is one great way to implement Computational Thinking into your class.
  2. The software is free and open source.

Disclaimer: These are intended to be a summary. They are presented in no particular order.

Python

Free? FOSS (Free as in zero cost and open source)
Requires an installation? Yes but there are web based options like sage math notebook. Python comes preinstalled on Mac and Linux.
Strengths: 
  • The syntax is very high level so you and your students can take your ideas and very quickly turn them into code. 
  • Python is interpreted so as soon as you press enter or run the code you can see the results. 
  • It has a large number of modules and support for graphics (e.g. VPython), physics, math, language parsing and more.
  • Great for prototyping, web, data mining/processing, and almost anything!
Recommended Tutorials:
    Codingbat


Javascript

Free? FOSS
Requires an installation? No
Strengths:
  • Coupled with HTML5 and CSS allows you to add a lot of power and interactivity to your web pages and applications.
  • Gives you to access web APIs (directory of available APIs) and use other services.
FYI: Javascript fails silently (meaning if there is a bug, it just won't work the way you intended, there won't be an error message) so use lots of debugging techniques and logs to debug. This is far easier than it may sound and is useful to learn regardless of what language you are using.
Recommended Tutorial:


Processing

Free? FOSS
Requires an installation? Yes
Strengths:
  • Designed to be very easy to make something visual, beautiful and/or interactive.
  • With both Processing and Arduino, it provides an introduction to C++ that is less intimidating.
Recommended Tutorials:
    Examples in the Processing software (Select File and then Examples)


Arduino

Free? 
  • Hardware: No but Open Source (Sparkfun, Adafruit, and Radio Shack are trusted suppliers)
  • Software:  FOSS
Requires an installation? Yes
Strengths:
  • Works with off the shelf parts (e.g. motors, LEDs) to cheaply and easily build projects that sense, move, light up, etc.
  • Many "shields" are available to easily add functionality like Bluetooth, Wifi, audio, etc.
  • Hardware is relatively inexpensive (~$20-30)
  • Interfaces easily with Processing to add interactivity and data visualization.
Recommended Tutorials:
    Examples in the Arduino software (Select File and then Examples)
    Sparkfun Education

Subscribe and follow Phil for more on education and technology.

Physics Gizmo is Open Source

I've put the source to Physics Gizmo on GitHub. If you are interested in helping me develop a tool for students to collect and analyze scientific data in an affordable way I encourage you to join the project.



Physics Gizmo on GitHub
Discussion Group Forum

Physics Gizmo on Google Play

More information on Physics Gizmo can be found at the original Physics Gizmo post on BrokenAirplane.


Subscribe and Connect to see how educators are innovating.

Sage Removes Barriers for Technology in Math Classrooms

If you are not yet using programming with your math and science students, you might have a couple of excuses why.

1) I don't have the time to learn (give me 30 minutes)
2) My school won't let me install the software.

Technology in schools is difficult especially if you are working with older hardware or infrastructure. Many schools will only install new software at the beginning of the year, but if you are going to start programming you'll want to get started now.

Sage makes programming more convenient than ever while adding in some powerful math packages. You might see your graphing calculator's packaging saying it can carry you through college, Sage will take you from elementary math to your PhD and beyond. Created by William Stein with the intention of being a powerful free and open source alternative to technology like Mathematica.

You might wonder how Sage changes anything. Well Sage contains multiple programming languages so you are not constrained to one, but more importantly the Sage Notebook provides the ability to program in the cloud. While there are other options out there, Sage makes it really easy and puts it all together in a dead simple interface.


Let's explore the Sage Notebook (the cloud based version).

There are so many options for logging in, you can create a Sage Notebook account, use your Google/Yahoo/OpenID credentials or you can browse the worksheets without logging in.

Much like Geogebra, you can browse the public worksheets of other people in the community of users.


Click New Worksheet. Once in the worksheet, you can click on the drop down menu that says Sage and see how many options you have for languages. This covers the many programming languages one would need. If you are just starting out, you may want to use Sage, Python, or R (statistics).

If you read this blog, you know I love Python for its simple syntax and ease of use. With Sage you don't have to give that up, the syntax is essentially the same.

To see what really makes Sage a great fit for math try entering a fraction and hitting Shift+Enter. In Sage, fractions are treated like an actual object. You can multiply it, add two fractions, and all of the other manipulations you would do on paper.


A feature very popular in Wolfram|Alpha is the equation solver. Try this out in Sage:


It couldn't be easier to graph:




Once you have a worksheet you can share it with people so they can interact with it or publish it for viewing. In fact most of the examples in this post can be seen here. Just click on the buttons in the upper right of the workbook.
This is just meant to whet your appetite, there are so many different ways this can be used, especially when you consider all of the different functionality and the ability to work online and save/share your work. The documentation is very helpful and there are numerous tutorials created by the community to help you learn. Take a look at Sage's tour for more examples of what is possible.

You will not be disappointed as this is no toy but a powerful full mathematical suite. Student will love this for the same reason they love Geogebra. It takes abstract concepts and manipulation of symbols, variables, and functions and treats them like objects in a game. Now you can play with the math as opposed just focusing on calculating.

Being able to quickly see the effects of an equation or its graph means students can draw conclusions faster rather than being unnecessarily distracted by the arithmetic or plotting of points.  I hope you will take me up on this invitation to use this free tool. The hard work that the Sage community has put into making this available to all should not be in vain.

If you are already using Sage (and I know many of you are) be sure to share in the comments or on Google+ how you are using it.

Stay connected and check out the other tutorials on BrokenAirplane by following the links on the top and the most popular posts on the sidebar.

I'm Not Texting I'm Programming!

Update: This app is available now as Physics Gizmo on Google Play.

No less than a century ago, it was possible to learn everything we knew about science. The only requirements were an ability to read, an extensive library, and perhaps the equipment to carry out your own experiments. Now we have entered a new era of science where literacy is more widespread and between the Internet and Libraries we have every resource imaginable at our fingertips.

Two big problems remain, science has diversified and grown so much that it is difficult for scientists to know everything about their own field let alone another. The other issue is how science equipment remains financially out of reach of amateurs and explorers. The major scientific research is driven by that which will have a financial return and so science for its own sake is limited. This is even more evident in schools who are cutting science to save the rest of their budgets and focus on less expensive (and more tested) subjects This must change if a steady stream of innovation is to continue.

The hacker spirit is a deeply embedded part of science. Now out of necessity and pure enjoyment, many are directing their attention away from software development but to hardware. In the August issue of Wired, the BioHacker movement features those who wish to reduce the cost of doing Genetic analysis.

Do you know where these DIY Biologists expect to see the most impact? Schools! For students to do science instead of just reading about it. Arduinos, Makerbots, Robotics, and more are forever changing the opportunities students have to create.

At my school we spent a lot of time in labs and projects. What was lacking was quality data. Unfortunately the tools and sensors available to students are expensive and limited. So I did what I always do, I sat down and wrote some code :)

I love my Android phone and each day I hear about the insane number of new activations everyday. The smart phone is getting smarter and cheaper just as technology always does. Just as we saw an explosion of Desktops and later Laptops in the 1990-2000s, we are seeing an even speedier rate of adoption of smart phones. While looking at my phone one day, I realized how many sensors/tools it has built in seamlessly to its interface (Internet, Accelerometer (motion sensor), Gyroscope, Light, Sound) which if purchased separately would be thousands of dollars and would not play well with each other.

So I wrote a program which logs motion and then uploads it to your Google Docs account. You can see some screenshots below of the results.

Jumping up and down

Dropping my phone (onto a pillow)

To do this, I used sl4a (Scripting Language for Android). With this you can code in Python, Ruby, Javascript (and more) and do almost anything with your Android phone. It has a built in editor so you can quickly type code into the phone (hence this post's name) or you can code it in your favorite editor and then transfer it to the SD card on your phone.

Why did I use sl4a instead of making a nice pretty app using Android's SDK? This application uses the Google Doc APIs (basically commands to communicate between an app and and a program like Twitter or Facebook) and Python. If you look at the code it could be done by any of our students with a free weekend. It may look a little complicated at first but there are just a lot of function calls to save code. Just like most other Python code, it reads like a story (login, get the parameters, sense, upload).

I believe sl4a could take students who may or may not have used App Inventor or Scratch to the next level and open up a world of possibilities to them. sl4a has been used to send collect data on a phone being launched into space and many other exciting projects involving Twitter, Robots, Arduino and more!


I wanted to use sl4a so everyone who knows Python could see the code and hopefully improve on it. I don't have the time right now, but I would love to see other sensors added, the ability to review and display the data/graph on the phone, interface with Arduino, and store data on the phone if it logs data longer than 1 minute, and perhaps even add a pretty GUI. I'm hoping that by open sourcing this, others will want to jump on board and help out. Cellbots have set the bar really high and have their own incredible data logging app and if they integrated Google Docs uploading I would say their app is perfection.

My hope is as more educators/students realize their ability to create, scientific tools will become available to all. People like Steve Dickie, the Arduino team, Geogebra, and many others are working really hard to ensure that the cost to do STEM is reduced dramatically.

You could walk into your class on Monday and ask your students how many of them have an Android phone, you may be surprised that there are enough for one per group. Think of all of the experiments you could do with nothing else but your phone. I can't wait for this year's Magic Mountain Physics Day and see how many students could get data from a roller coaster and directly upload it to their Google Docs (and check it while still at the park from the GDocs Android app).

Look how easy it is to make a little popup on your screen!
import android
droid=android.Android()
droid.makeToast("Hello Android")


If you want to give this a shot, go to the sl4a website and download the apk (the installer). Your other options are to click this link, or scan the barcode on the right with your Android phone. Follow the User Guide to get Python (or the other languages) installed on your phone.

Now, you are ready to start coding on/for your phone. There are some great tutorials on the sl4a website, I also recommend the book Pro Android Python with SL4A. In my code below I list a few other resources that were helpful to the doScience project.

If your code is relatively small you can share it via barcode but this app falls just above that threshold. So you can copy and paste it from below (just please respect the Creative Commons licence) into your Python Editor or download the doScience file directly. Save it to your SD card in the sl4a/scripts folder. This code must be run on a phone or a computer connected to a phone running an sl4a server (much simpler than it sounds).

Note: It will ask you to login to your Google account. As you can see from the code below, no one is able to access that information since it is kept hidden from even the developer by the dialogGetPassword method in line 41.

I hope this app inspires you to do something great. If you know how to program, build, create will you please lend your talents to this projects or the many others out there. If you don't know how to create, then learn as it is the most incredible thing to be a Maker and you will inspire others. Before you know it, the revolution will be underway (oh wait it already is, come join us)!

Subscribe and Connect to BrokenAirplane and stay up to date with the best resources for your classroom.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
'''This code is licenced under a Creative Commons
Attribution-NonCommercial-ShareAlike 3.0 Unported Licence.
Created by Phil Wagner 2011 www.brokenairplane.com. This code allows data logging and uploading to Google Spreadsheets.
It exists so students can to do Science when 
the cost of Science Equipment is too expensive. Additional features can be added
but this paragraph should always remain in the code.'''

#Future features - Additional Sensors, Review, Display Data/Graph on Phone
#interface with Arduino/ADK

#Helpful Resources:
#http://code.google.com/p/android-scripting/ (sl4a)
#http://code.google.com/ (Google APIs and resources)
#http://www.adaptcode.com/using-google-spreadsheets-as-a-database-in-the-cloud/
#http://gdata-python-client.googlecode.com/svn/trunk/pydocs/gdata.spreadsheet.text_db.html

import android
import time
import gdata.spreadsheet.service
import gdata.spreadsheet.text_db
import string

droid = android.Android()

dt=100 #Time between sensing

def countdown():
    #3 Second Countdown and Vibrate
    droid.vibrate(100)
    time.sleep(1)
    droid.vibrate(100)
    time.sleep(1)
    droid.vibrate(100)#3 second countdown
    time.sleep(1)
    droid.vibrate(300)
    return

def login(myEmail='example@gmail.com', password=''):    #Get Email and Password and login
    while password == '':
        email = droid.dialogGetInput("Email", "Enter the email account where the Data will be uploaded to:",myEmail).result
        password=droid.dialogGetPassword("Password", "Enter the account password where the Data will be uploaded to:").result
        try:
            client = gdata.spreadsheet.text_db.DatabaseClient()
            client.SetCredentials(username=email, password=password)
        except gdata.spreadsheet.text_db.BadCredentials:
            droid.dialogCreateAlert("Username or password incorrect.")
            droid.dialogSetPositiveButtonText("OK")
            droid.dialogShow()
            redo = droid.dialogGetResponse()
            password =''
            continue
        else:
            return client

def spreadSheetSetup(client, defaultTitle = 'Science Data'):
    versionNumber = client.GetDatabases(name=defaultTitle)
    if len(versionNumber) > 0:
        droid.dialogCreateAlert('Science Data %d' % len(versionNumber))
        droid.dialogSetPositiveButtonText("OK") #Yes option box
        droid.dialogShow()
        understood = droid.dialogGetResponse()
        spreadsheetTitle = defaultTitle+' '+str(len(versionNumber))
    else:
        spreadsheetTitle = defaultTitle
    return client.CreateDatabase(spreadsheetTitle)

def time2Sense(defaultTime=5000):
    maxTime =0
    #Enter time for sensing
    while maxTime == 0: ##How long to sense?
        try:
            maxTime=int(droid.dialogGetInput("Time", "How long to collect data (in milliseconds):",str(defaultTime)).result)
        except TypeError:
            droid.dialogCreateAlert("Please enter a numeric time")
            droid.dialogSetPositiveButtonText("OK")
            droid.dialogShow()
            droid.dialogGetResponse()
            continue
        if maxTime > 30000: #30 seconds max for optimal upload
            droid.dialogCreateAlert("Warning this could take a long time to upload.")
            droid.dialogSetPositiveButtonText("I accept the risks")
            droid.dialogSetNegativeButtonText('New time')
            droid.dialogShow()
            check = droid.dialogGetResponse().result
            if check['which'] == 'positive':
                return maxTime
            else:
                maxTime = 0
                continue
        return maxTime

def doScience():
    droid.dialogCreateAlert('Are you ready', 'Click yes to begin sensing, or no to cancel')
    droid.dialogSetPositiveButtonText("Let's do science!") #Yes option box
    droid.dialogSetNegativeButtonText("Nah let's cancel") #No option box
    droid.dialogShow()
    return droid.dialogGetResponse().result

def senseAccel(endTime,dt=100):    #Sense and store accel data
    timeSensed=0
    tempScience = []
    droid.startSensingTimed(2,dt) #dt = time between sensings
    while timeSensed <= endTime:
        tempScience.append(droid.sensorsReadAccelerometer().result) #add new accel data to list
        time.sleep(dt/1000.0)
        timeSensed+=dt
    #Stop Sensing
    droid.makeToast("Done")
    droid.vibrate(300)
    droid.stopSensing()
    return tempScience

def main():
    db =spreadSheetSetup(login())
    endTime = time2Sense()
    ready = doScience()
    if ready['which'] == 'positive':
        countdown()
        science = senseAccel(endTime,dt)
        table=db.CreateTable('Accelerometer',['t','x','y','z']) #Beware spreadsheet column names cannot be uppercase if you are going to add to them later http://code.google.com/p/gdata-python-client/issues/detail?id=363
        droid.dialogCreateHorizontalProgress('Progress','Uploading to Docs',len(science)*3 )
        droid.dialogShow()
        progress = 0
        time = 0
        for data in science:
            table.AddRecord({'t':str(time),'x':str(data[0]),'y':str(data[1]),'z':str(data[2])}) #AddRecord requires strings as arguements str()
            progress+=3
            time+=dt
            droid.dialogSetCurrentProgress(progress)
        droid.dialogCreateAlert('Done', 'Go check your data on Docs')
        droid.dialogSetPositiveButtonText("OK") #Yes option box
        droid.dialogShow()
        droid.dialogGetResponse()

if __name__ == "__main__":
        main()

Blender 3D Modeling Resources for Education

Subscribe to BrokenAirplane!

When I show Blender to educators, they immediately say show me how you do that so I can use that in my classroom!

When they see Blender's interface for the first time they want to run away. It is overwhelming but once you spend an afternoon with it you discover that it isn't confusing, its powerful and packed with features.


For those of you who have never heard of or used Blender, it is 3D rendering software allowing you to create models for video games, CAD printing, and now a movie! It was the technology behind the OVRP Virtual Bike and did I mention it is Free and Open Source?

I agree it has a learning curve but for many, this is an opportunity to learn a software that is highly applicable to their future career without costing them the thousands for a proprietary software like Maya.

Blender is the perfect software to prove what Patrick and I say about learning technology because you as the teacher have little if any experience with it.

We cannot wait until we are masters or pros to use a technology with the students. There are too many and it would take too long. You should not let that stop you from using it. Show it to your students and they will learn more than you ever thought possible. While the following are not all of the resources out there, these are the ones my students and I have used with success. That is the great thing about the Blender community, there are so many choices out there.

Video Tutorials:
HamsterHill - These are the tutorials that my students started using to learn Blender and they are great, his accent occasionally trips you up but they are easy to follow nonetheless.
IraKrakow -  For more advanced topics these were very helpful.
BlenderUnderground - Very well made and high quality. If you are looking to become a master of Blender, these would be a great first step towards professional level knowledge.
Tutorials for Blender 3D - If you are creating a video game or movie with Blender, these tutorials are for you. logic blocks, textures, and the Blender Game Engine are all covered well in here.
Blender Cookie - Excellent suggestion from Black Stormy covering a wide variety of concepts from start to finish as well as those concepts beyond modeling (particles/physics/lighting/etc)

Text Based Tutorials:
Blender 3D: Noob to Pro - An incredibly well done community generated wiki that will take you through all of the essentials. Patrick and I were at a conference together and spent much of our time working through the exercises in this book. It prepared us to make the Virtual Bike tour and Patrick's class' 3D movies. Go step by step or reference it (and yes I know it's spelled n00b, I'm just copying the website).

Keyboard Shortcuts - This is ESSENTIAL! There are so many commands and features possible and you will waste a lot of time trying to find them in the menus. After using Blender for a while you will remember them as well as the other Windows/Mac keyboard shortcuts you should be using.

I'll continue to add to this list as I come across them as I do with my Android, Free Software, Humanities, Math Science, Geogebra, and Programming Resources lists.

Subscribe to BrokenAirplane!

Ways Your Students Can Use Audacity

In the Audacity Tutorial you discovered the ease of Audacity to record, edit, and export your audio. But, Audacity is as powerful as it is simple to use.

Music:
I have seen many garage, Indie, and professional bands mix their work with Audacity. This is why Audacity work are called project files. In Audacity, click the drop down menu Project. From there you have the option to import other tracks from a previous recording or MIDI file. Another way to get multiple tracks in a project is to click Record like you would normally, then push stop. Pushing Record again will start another track recording.

You can also highlight a certain part of the track or all of it and click on the drop down menu Effect, there is an endless amount of things you can do to distort, modify, and change the sound.

Podcasting/Webcasting:
A podcast or webcast is simply recording of a show, lecture, general audio that is not live. It is a recording saved for later. This is incredibly useful for later recall but can also be a valuable way for your students to record their learning.

Once you have your recording, click on the Project drop down menu and click Edit ID3 tags. This is the information that shows up on your computer music player (e.g. "Title: Quadratic Equations").

Physics:
When studying sound waves it can be really helpful to see such an abstract concept visually. With Audacity you can record yourself singing (if you are so brave) or find all of the different pitches within a song you imported. To do this, click on Analyze and Plot Spectrum.

You could also record two different tracks with two different pitches and zoom in to see the waves created. If you would like to create a specific frequency, click on the drop down menu Generate and click on Tone. The students really enjoyed it when we discuss the Mosquito Ringtones, it really drives home the point about how our ear works and threshold of hearing. They freak out when they are unable to hear what their peers are able to.

For analyzing sound live, I highly recommend the Visual Analyzer software. It is so much fun to watch the students challenge each other to make the different frequencies and they love to see their music change the wave. For a typically invisible concept like sound and air pressure, I am grateful to both Audacity and Visual Analyzer for making their software free to all.

I would also like to recommend a blog post by a fellow #EdChat Tweeter David Wees. He had a lot of great ideas that I would recommend you take a look at.

Audacity is All You Need to Record, Edit, and create Audio

Audacity is one of those applications that make people amazed at the generosity and power of Open Source. Everytime I show this app, they cannot believe that this is available for free. Audacity allows you to record, edit, export sound all in one easy interface. You can download it from the Audacity website. It will work on pretty much every Operating System you can imagine.

Once you have it downloaded, do a test run to make sure all of your sound settings are correct. To do this click on the big red button in the upper left. 

Talk into your microphone and you should see sound waves appear on the screen below it. If you don't see this: 1) Make sure you are talking loud enough, 2) Check your sound settings (Windows: Click on Start, Control Panel, Sound and Audio Devices, the Audio tab at the top, and finally under sound recording click Volume and make sure it is turned up)

You may already have a microphone built into your computer which is perfect for podcasting and basic recording. If you are really in a pinch, take your earbuds (like those for your iPod), plug them into the microphone slot and you have a makeshift microphone. Speakers and Microphones are pretty much the same thing just in reverse.


To playback push the Green Play button. The red line will show you where you are in the recording.

Once you are done with your test, you can delete the test by clicking on the X on the track you just recorded. 




Editing Your Track:
Let's say you are recording your speech or music and you make a mistake. Just keep going because you will edit it out later with ease. If you can edit a document you can edit audio in Audacity. After your recording is finished, use the sliders at the bottom of the screen to move it to the approximate time. The click and drag your cursor to highlight the area you would like to remove (if you are unsure if you are in the correct spot, click play and Audacity will only play the highlighted area). To remove the selection, click Backspace or Delete and your selection will be deleted and shift everything up. Couldn't be easier right?

You can do the same thing to copy and paste a selection, to repeat a sound over and over. A lot more settings can be found in the aptly named Edit menu at the upper left just as if you were editing a document.
You may find it useful from time to time to get a very specific part of your recording. Click on the magnifying glass under the menu bar. 

Move the mouse over the area to magnify, left click to zoom in and right click to zoom out. Click on the selection tool right above the magnifying glass to return to the ability to highlight and edit.

Saving and Exporting your Files:
Audacity is easy for recording and editing, but it is just as easy to create files for sharing your music or sound with the world.

Save Project for later:If you are not finished with your work just yet, you should save it as a project so you can come back to it later. Click File and Save Project. It will prompt you to save and then create an Audacity Project File (.AUP) and a Data folder. Do not separate the Project File and the Data folder or you will not be able to reopen your files.

Export WAV: A standard file that can be played on any computer. It tends to be a larger file than if you made an MP3. Click File then Export as WAV, you will be prompted to save and then Audacity will create your file.

Export MP3: One of the most widely recognized and playable sound file types in the world, you will most likely want to export your file as an MP3 as it is playable on mobile devices and is smaller than a WAV file. To export your sound as an MP3 you will need an additional free plugin. To download it, click on the following link, LAME MP3 Encoder. Once installed, you can click on File and then Export as MP3 in Audacity. 

NOTE: Audacity is using a large amount of memory to create your file. If you notice that Audacity is running slow or crashing often, close other programs and make sure you are not sharing to a networked drive. At our school, our students had a networked "My Documents" folder that it would default to saving to. This would slow down the entire network and crash Audacity. This is not a problem for those of you who are saving to your hard disk.

I hope you will find many uses for this powerful software. If you have any questions, send me an email or leave a comment. In the follow up post, I will review some of the ways you can use this software for music, podcasting, Physics, and more! Stay tuned.


Learning Online - Become an Expert in Anything for Free

A couple of years ago, I was working on the creation of an online/hybrid High School. Here are a few of the resources that we found. I will update this post as more emerge.

Make your own games

Create your own online classroom
Moodle - One of the easiest and versatile ways to create an online classroom.
Project Foundry - Create Student guided, educator directed Project Based Learning
Teach Mate - Find someone to learn or teach. 

Lectures/Classes
Khan Academy - Quality tutorials created by Salman Khan on a variety of topics. Popular with teachers all over the world!
TED Talks - Hear inspirational and informative talks from people around the world on a variety of fascinating topics. 

What Powers The Classroom - My Software Recomendations

This is definitely the question I am asked most often. So here is my list. In order to make it into my classroom there are three criteria:

  1. It must enhance or encourage learning. As much as I love to "geek out" on technology, I feel that technology for technology's sake cannot be the sole criteria.
  2. It must be free (as in $0 in cost) and preferably Open Source (code is released to the public). Firstly, because classrooms cannot afford expensive software and secondly, because of my personal philosophy as a programmer that all software is made better when the world has the ability to look at the code and improve it.
  3. The only software that is not Free and/or Open Source is that which meets criteria #1 and for which there is no FOSS (free and open source) alternative. Although, I only encourage their use if your district can afford to purchase it. No technology is so essential that it should adversely affect the school's ability to be fiscally responsible.
I want to thank all of the bloggers, programmers, and IT managers I have worked with over the years to find these softwares. My current IT colleagues Dave and Daren work so hard to find great software and I thank them for it.

Without any further ado, here is the list with a link and a short description. If there is a cost associated with the program it will be indicated with a dollar sign ($). Disclaimer: I may mention that a software is a Free and Open Source Alternative to a certain software (e.g. Adobe, Microsoft). This is only mentioned because of how well known those products are so you can understand what they are capable of and should not be taken as a negative endorsement.
  • 7-ZIP - A file compression utility capable of working with many different file types like .zip and .rar, and .tar (A free and open source alternative to WinZip)
  • Audacity - A powerful multi-track audio editor. Create MP3s, Podcasts, music, and more.
  • Adobe Premier - ($) Simply the best video editing software out there in my humble opinion.
  • Alice - Learn the Java Programming Language through the creation of stories. Loved by all ages. Created by Randy Pausch of The Last Lecture fame
  • Blender - 3D modeling, animating. Great for making video games and creating 3D objects.
  • CamStudio - Screen Capture/Video Tutorials
  • Celtx - Script Writing Software for Film, Audio, Comics, and more
  • DownThemAll - Mozilla Firefox Browser Extension that allows you to download everything on a website with a couple of clicks. Extremely useful when you have a ton of links on a page.
  • Dropbox - Hands down, one of the best services on the Internet. Create a folder on your computers and phone that sync up with each other and the Cloud. Always have your files and information available!
  • Filezilla - File Transfer Program (FTP) use this if you have a large number of files to transfer from one computer to another. Free and Open Source. 
  • F.lux - If you or your students stare at a computer all day, this can be bad for your eyes and your sleep cycle. This software adjusts to your timezone and light to slightly modify the color of your screen (you will not notice the difference unless you are a Graphic Artist, and can disable it while you are doing artistic projects) so you are less affected by it. 
  • GanttProject - Free project scheduling and management. Great for you and the students to track progress on a long term collaborative project.
  • Geogebra - Mathematical software that will allow you and your students to "play" and interact with math like never before. (A Free and Open Source software similar to Mathematica)
  • GIMP - Photo Editing Software (a Free and Open Source Alternative to Adobe Photoshop)
  • Google Apps - Email, Video/Voice Chat, Document Collaboration, Calendar, Website, and more! Check out Google's tutorials on Apps.
  • Google Earth - Take a tour around the world, geography, topography, geocaching etc.
  • Google Sketchup - Create buildings, objects, theatrical sets, mathematical objects and anything else you can think of.
  • Google Translate - Freely convert from one language to another. I use it most often to convert a website from one language to another and to translate everything I send home into Spanish so all of my parents can understand it. Note: It is not perfect so you and your parents should be aware of this when you use it.
  • GraphCalc - Give your students the power of the expensive graphing calculators and be able to display a graph on the projector. Capable of 2D and 3D graphing.  
  • Greenshot - Quickly take pictures of your screen and annotate it (like I do for this blog). So many features (best of all is the "obfuscate" tool to hide your private information) that put this at the top of its class.
  • InfranView - Photo Viewer (Free to schools, educators, and individuals). There are so many photo viewers out there, this is just the one I prefer. Google's Picasa is also great.
  • Inkscape - Vector Image Manipulation (a FOSS alternative to Adobe Illustrator). This is the software that Patrick Yurick and the Graphic Novel Project use!
  • Kompozer - WYSIWIG (What you see is what you get) HTML editor. Make websites! (A free and Open Source Alternative to Adobe Dreamweaver)
  • Math-o-mir - Math notebook to quickly create and format math equations, graphs, and more. Blog link here.
  • Office Tabs - Many of us still use Microsoft Office and when you have multiple documents or sheets open it can fill up your task bar rather quickly. Office Tabs takes your multiple open files and creates tabs like your Internet Browser. This compacts it, making it far easier to naviagate and keep your sanity.
  • Open Office - Word Processing, Create Presentations, Spreadsheets, Math Equation Editor, Drawing (a Free and Open Source Alternative to Microsoft Office).
  • Python - A programming language that is far simpler to learn than Java or C++ while being just as powerful. Check out the Programming Tutorials.
    • VPython - The extension to Python that allows for great graphing or animation in 2 or 3 dimensions. This is the software I trust for my Slope Art Project.
  • Skype - Phone, Video Chat (Free if you are calling another person using Skype, slowly becoming more Open Source)
  • Tracker - STEM Video Analysis tool. Use this with your science, math, engineering class to collect data about experiments, robots, projects. Imagine being able to have a video of a catapult and create data and graphs with relative ease. Find the difference between ideal and experimental with this powerful tool.
  • Video LAN (VLC) - Video player capable of playing practically any video you can think of.
  • Visual Analyzer - A great way to have your students work with sound waves and learn about frequency and amplitude.
  • WinFF - Convert audio and video to various different formats. See my WinFF tutorial.
  • WinSplit Revolution - Easily move windows to split screen, different windows, corners, etc. Great for those who multitask and use multiple windows in the classroom.

This list will grow and be edited constantly so if you have any suggestions, questions, leave it in the comments!