Thursday, September 25, 2014

Display issues with The Geometer's Sketchpad

There are 21 Sketchpad sketches contained within mathclips.ca.  You can find them by clicking the search icon at the top of the page, choosing "GSP Files" from the Search within drop down list, and clicking Display All.



These sketches were created in version 4 of The Geometer's Sketchpad™, which was the version licensed by the Ontario Ministry of Education at the time.  In the process of updating them to version 5, particularly to allow use with the Sketchpad Explorer iPad app, we noticed some discrepancies in how the sketches displayed on different machines.  Interestingly, most sketches worked just fine on my Windows machine, running at 96 pixels per inch (ppi), and on my iPad, running at 72 ppi, which is also the resolution for Macs generally.

The biggest discrepancy was between two Windows machines.  On one, the sketch looked like:

and on mine it displayed the right, honest way:


After a bit of frantic emailing to our always helpful Sketchpad gurus, we discovered that there is a system setting which was different.  Navigating to the Display settings in the Control Panel, we could tell that the first machine had set the size of all items to more than Smaller  (on a Windows 7 machine this is called 125% or 120 ppi).



You can also see the difference if you go to the System tab of Advanced Preferences in Sketchpad, which are found in the Edit menu after the Shift key is held down.


The Screen Resolution of 37.795 px/cm is equivalent to 96 ppi and should remain at that value on Windows machines, even if Reset All Preferences is clicked.  If the value is something different, it can be edited on this screen and once Sketchpad is restarted, the sketch will look like what everyone else sees.

We have been using Sketchpad for a long time and had not run into this before.  It makes us worry about distributing sketches that might look awful at ppi settings that we have no control over.

Zooming Integers:Place Value

I had the opportunity to tweak one of the Dynamic Number project's sketches yesterday. Zooming Integers provides an interesting display using an exploding or zooming number line.  In Ontario, we use spaces rather than commas to separate digit groups (see http://physics.nist.gov/cuu/Units/checklist.html).  Our Grade 6 curriculum includes millions and the sketch only goes up to 100 000.  I was able to copy the 100 000 page, change two parameters (with a little digging) and get a page that starts with a number line from 0 to 1 000 000.  Ontario benefits from having a provincial license for The Geometer's Sketchpad so that students can access this material.

You can access the tweaked sketch from here.


Wednesday, January 8, 2014

Using a StyleSheet in Actionscript 2 to display an iTunes img Correctly

There are times when a simple request turns into a flight down the rabbit hole. mathies and mathclips share an XML file with information about learning tools available to Ontario students.  A link to Sketchpad Explorer on the App store needed to be added.  On the mathies webpage, this was easily done with html like:
       

Sketchpad Explorer is available from the 
<a href="http://itunes.apple.com/ca/app/sketchpad-explorer/id452811793?mt=8&amp;uo=4" target="itunes_store">
<img src="http://www.oame.on.ca/mathiesbeta/images/badge_appstore-sm.png" height="15px" width="61px" />
</a>
getting a result like:
where the image was unnecessarily copied from one created with http://linkmaker.itunes.apple.com to the local server.

In Flash, there were two issues:
  1. A phantom underline preceded the image as the result of a <u> tag surrounding the <a>...<img /> tags
  2. The topic list, a feature only of the mathclips tool tab,  appeared next to the image and not below it, despite <br /> tags.  This is due to Flash floating images.
The wrapping issue was solved using an idea from Panax and StyleSheets and the underline issue was solved by creating a blueNoUnderline class.

The StyleSheet is created in code as follows:
var myStyleSheet:TextField.StyleSheet = new TextField.StyleSheet();
myStyleSheet.setStyle("a", {color:'#0000FF', textDecoration:'underline'});
myStyleSheet.setStyle(".blueNoUnderline", {color:'#0000FF', textDecoration:'none'});
myStyleSheet.setStyle(".imageSpacer30", {fontSize:30});
The htmlText is massaged to wrap the <img /> tag inside a <p> tag (red text below).  The dummy paragraph suggested by Panax is added (green text below).  The blueNoUnderline class is added to the <a> tag to avoid a bit of underlined space (blue text below).
       
Sketchpad Explorer is available from the 
<a href='http://itunes.apple.com/ca/app/sketchpad-explorer/id452811793?mt=8&uo=4' target='itunes_store' class='blueNoUnderline'>
<p>
<img src='http://www.oame.on.ca/mathiesbeta/images/badge_appstore-sm.png' width='61px' height='15px' />
</p>
</a>
<p class='imageSpacer30'></p>
<br />
<p><font size=\"10\">(Geometry, Measurement, Simulations)</font></p>
The necessity to precede the "blueNoUnderline" name with period in the setStyle was a late discovery as I did not see it any of the examples I looked at.  For a while, I was convinced that StyleSheets read from .css files were the only ones that worked.

Wednesday, November 13, 2013

Sublime Text Plugin to Sort Tabs

I am a huge fan of the Sublime Text Editor.  Today, Greg Clarke and I created our first plugin.  It will add items to the Tab Context menu that will sort the open files, by file name.  Sublime is a really fun environment in which to program in Python.  You can download the plugin, copy it to your Sublime Text Installed Packages Folder, rename it as TabOrdering.sublime-package and it will be available to you once you restart Sublime.  To create your own plugin see NetTuts' instructions.

Thursday, May 9, 2013

More Circle Drawing

This seems like a long time into 2013 for the year's first post.  The occasion is the receipt of an email from Dan Meyer (possibly in error) alerting me to a fun circle drawing applet a student in England put together.  This is a nice followup to my previous posts (first, second) about Alexander Overwijk, a teacher at my alma mater, Glebe Collegiate whose motto is "in alta tende", which I have always loved.  The three of us were at OAME 2013 last week which was marvelous.  The applet would be a interesting tool to judge a freehand circle drawing contest.

Incidently, Vi Hart just posted a circle drawing video.  One of the featured speakers at OAME 2014 will be George W. Hart, who was introduced as Vi's father - only in the internet age!





Tuesday, June 19, 2012

Using IronSpread and Regular Expressions in Excel

I get a lot of traffic on this blog related to Regular Expressions in Excel, much of it from http://stackoverflow.com/questions/4556910/how-do-i-get-regex-support-in-excel-via-a-function-or-custom-function.  There are comments there that indicate that it does not work with Office 2010.

I stumbled upon www.ironspread.com, which allows you to use Python to "program" Excel 2007 and 2010 sheets.  Python has excellent support for Regular Expressions.  It looks like there are other libraries for Python that can be used with Excel and OpenOffice; PyUNO for one.

I quickly cooked up the following example using a regular expression for valid email addresses found at http://www.regular-expressions.info/email.html.

The Excel sheet looks like:


The Python program looks like:

 # see http://www.regular-expressions.info/email.html for discussion about  
 # regular expressions to check email addresses  
 import re  
 emailRE = r"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)\b"  
 for i in range(1, 100):  
   currCellValue = Cell(i,1).value  
   if currCellValue == 0:  
     break  
   try:  
     m = re.match(emailRE, currCellValue).group(0)  
     if m == currCellValue:  
       # matches full address  
       Cell(i,2).value = ""  
       Cell(i,3).value = ""  
     else:  
       # matches part of address  
       Cell(i,2).value = "Suggestion"  
       Cell(i,3).value = m  
   except:  
     # no match  
     Cell(i,2).value = "Invalid"  
     Cell(i,3).value = ""  

and once finished, columns B and C are filled in


I am a novice programmer in this environment, so I hope there are no glaring newbie mistakes and that the example is illustrative.

IronSpread installs a Python editor, IDLE, and a command shell which can be used to test your work.  I still love Sublime Text 2 as an editor, so give a command like:
execfile("c:/Users/Ross/Documents/EmailAddresses.py")
in the shell to run the program saved by Sublime.  Any print statements will output to the shell.  I have linked to the Excel Sheet and Python program above if you want to try them out.

Monday, May 14, 2012

Spectacular Sears Successes

I don't usually feature my family here (with rare exceptions), but will now.  Jonathan was one of two actors in Salt-Water Moon at the Sears Provincial Showcase and came away with an award of excellence for acting together with Sam.  The play, by the late David French, is a lovely story and the two actors, together with their stage manager, director, costume and set designers rendered it beautifully.

Here is a piece from the radio where you can get a sense of their Newfoundland accents and stage chemistry.


And here they are with their award.