Bill MacKenty
Home Computing Teaching Bushcraft Games Writing About
A well educated mind will always have more questions than answers.
Another substantiative treatment of AI in education
Today and in the future, a growing array of Artificial Intelligence (AI) models and capabilities will be incorporated into the products that specifically serve educational settings. The U.S. Department of Education is committed to encouraging innovative advances in educational technology improve teaching and learning across the nation’s education systems and to supporting developers as they create products and services using AI for the educational market (source).
Please click this link to see the report "Designing for Education with Artificial Intelligence: An Essential Guide for Developers" (pdf here)
Exciting changes in IB computer science
A new IB computer science curriculum is being released! Read more about it here....
The Overview is here: https://www.ibo.org/university-admission/latest-curriculum-updates/computer-science-updates/
The subject brief is here: https://www.ibo.org/globalassets/new-structure/university-admission/pdfs/dp_comp_sci_subjectbrief_en.pdf (local copy here: dp_comp_sci_subjectbrief_en.pdf)
Sabbatical update 2
More people should do this...
Deep Dive into AI and Machine Learning
My fascination with AI and machine learning has only grown during this period. I've been thoroughly engaged in understanding complex concepts such as Manhattan distance, greedy algorithms, and the minimax strategy. My sabbatical has also been an opportunity to learn about knowledge graphs, uncertainty in data, optimization techniques, and neural networks. These areas are fundamental to understanding how AI and machine learning systems learn and make decisions. This knowledge will be invaluable in my teaching and ongoing professional development. It's been refreshing to delve into these areas, and I'm always eager to discuss and exchange ideas with anyone interested.
I'm starting to design an ASW-exclusive Local Large Language Model (LLM) designed specifically for our students' needs. This initiative aims to harness the power of AI in education, offering a revolutionary approach to learning support. The idea is to develop a local LLM that is fine-tuned and optimized to understand and cater to the unique educational requirements of our students at ASW. This model will not be a generic AI tool, but a specialized, school-specific system that comprehends the nuances of our curriculum and the common challenges faced by our students. It will be a local system (not internet connected) and meet all the current legal guidelines being proposed in the EU for using AI in education. The diagram has been helpful to guide my thinking about what an educational LLM should consider:
Work with the IB and Travel to The Hague
Part of my sabbatical has been dedicated to contributing to the International Baccalaureate (IB) organization. Recently, I returned from a productive visit to The Hague, where I collaborated on several initiatives related to the new IB computer science curriculum. This opportunity has allowed me to apply my expertise in an international context and contribute to shaping global education standards. I learn so much about the IB in these visits, and they always enrich my understanding of computer science.
Personal Time with My Chocolate Labrador
On a personal note, my chocolate labrador (Obi-Wan MackObi) , who is now 5 months and a healthy 23 kilograms, has been a constant and joyful companion. Taking care of him has brought much-needed balance and happiness to my days. He is just starting his teenage years now, and that's ...pretty...cool...most...of...the...time... He likes to eat things.
Innovative Educational Endeavors
One of my key projects has been the development of virtual mini-courses for students. These courses are designed to empower students by offering them the flexibility to choose what and when they learn within the course structure. This initiative aims to enhance the learning experience and adapt to the evolving educational landscape. Students will be able to choose how they want to proceed in the course, and multiple pathways will help facilitate interest in different areas of computing. I'm currently offering 4 languages (PHP, Python, Javascript and Rust) and 4 pathways (business, biology/science, computer science and software engineering). At some point I may ask to split these into different courses, but I am quite excited to design, develop and trial these pathways.
"Date Night with Your Mac" Presentation
Looking ahead, I am preparing for the "Date Night with Your Mac" presentation in January. This event will focus on the practical, nuanced and discerning use of Large Language Models (LLMs) in education. Additionally, I plan to explore some practical legal aspects related to technology use in the classroom. One of the main points I will be making is the way we can use LLM's to reduce the amount of time we spend doing administrative tasks.
As I continue on this sabbatical journey, I am grateful for the time to grow, learn, and contribute to the field of education and AI. I look forward to bringing back a wealth of knowledge and experiences to share with my colleagues and students. I miss you all very much.
Sabbatical update 1
I'm currently on sabbatical and have been deeply immersed in professional development and research. I intend to post these updates about once a month, sharing interesting learnings.
Connections and collaborations
The ACM is the Association of Computing Machinery. It’s the world's largest educational and scientific computing society.
I’ve been reading, parsing and communicating with members of SIGCSE - the ACM’s special interest group for computer science education. This learning has been deeply satisfying. I look forward to summarizing and presenting “best practices of K-12 computing education”. Needless to say, ChatGPT, AI, and large language models have captured the attention of this community.
Core learning tools
Moving on to the classroom tools, I've been focusing on making Git and Visual Studio Code (VSCode) more accessible for our students. VScode is a code editor and Git is the industry standard version control system that helps keep track of changes in code amongst many people. With the new materials I’ve developed, I'm confident our students will be committing and pushing code like they were born to do it - and be better prepared to work with modern tools in University and the real-world. I should also mention Git is a superb platform to use as a portfolio of student work and learning.
Modernizing PHP
In my continued quest for modernization, I've dived into the world of PHP Object-Oriented Programming (OOP), MVC (model-view-controller) architecture, and strictly typed PHP. This will enable our students to be more industry-ready and familiar with modern development practices ( all of which are transferable between languages). PHP has been in the top 10 of all programming languages for more than a decade, and is still used by about 78% of all websites in the world. I first learned PHP 20 years ago, so this is a welcome and refreshing upskill. Next up: javascript, rust, and python.
Working with the IB
As for my collaboration with the International Baccalaureate (IB), I'm still deeply involved in fine-tuning the new computer science curriculum. While I can't spill all the beans just yet, I'm eagerly awaiting the day I can share these substantial updates with you.
Obi-Wan MacKobi
A personal update. We’ve added a new member to our household: Obi-Wan, a 9-week-old chocolate Labrador. He’s both a delight and a handful, keeping me active when I’m not buried in research or code. He’s snoring at my feet as I write this; a little bundle of love.
The future
The next big chunk of learning for me is machine learning, artificial intelligence, and building a large language model that can run locally at my school (does not need an internet connection to work). The discussions I’ve seen at every level of the IB, ACM, and in the popular press has reinforced in me the need to capture and use this technology effectively for our benefit. Lot’s more to say about this.
The future of high school computing
Large language models like ChatGPT mandate we change the way we approach high school computing.
This article will discuss the importance of differentiation between software engineering and computer science in secondary (high school) educational settings and the impact of large language models on the former. Without correct understanding of computing, we can't fully appreciate how LLM's change it.
In the 2020 Computing Curricula recommendation, the Association for Computing Machinery (ACM) states that within the domain of computing, there are five primary disciplines. The reason it is important to understand this is because while there are some shared characteristics between these disciplines, they are different enough to be taught as distinct disciplines.
- Computer Engineering (CE)
- Computer Science (CS)
- Information Systems (IS)
- Information Technology (IT)
- Software Engineering (SE)
To acquire a deeper comprehension and appreciation of these disciplines' distinctions and interconnections, please refer to the following documents:
For some more serious approachesThere is a lot of noise and hype around AI in education - I tried to find respected institutional research to help frame LLM's within education. to AI in education research, please refer to the articles below:
- Artificial Intelligence and the Future of Teaching and Learning
- Artificial intelligence and the Futures of Learning
- The Position of Artificial Intelligence in the Future of Education: An Overview
High schools (and even some universities) often blur the lines between software engineering and computer science, using these terms interchangeably and without recognizing their essential distinctions When your students are applying to university please - I'm begging you - insist they read the actual courses they will be taking. . This conflation creates an ambiguous academic journey for students entering the computing field. While there is some overlap between the disciplines, clearly defined tracks are important in guiding students along the right trajectory.
In numerous educational institutions, students are exposed to programming (akin to software engineering), robotics (related to computer engineering), and occasionally resource management and abstract data structures (pertaining to computer science). Often, the overarching terms used for this education are "computer science", "technology" or "computers".
To make the distinction clearer and prepare students for the evolving world of computing, it is essential to design two distinct tracks within high school computing:
Track 1: Software Engineering
The significance of this track stems from the transformative impact large language models (LLMs) like ChatGPT have on problem-solving through programming. Students should be taught the fundamental coding concepts such as variables, control structures, and data structures. However, they must also learn to harness the power of LLMs in solving problems. By integrating LLMs, students can explore innovative ways to create solutions. Essentially, software engineering should focus on basic programming, computational thinking, and the astute utilization of LLMs. I include tools like co-pilot, tabnine, and YouCompleteMe, which use LLM-like technology to vastly improve programming output.
Track 2: Computer Science
The second track should concentrate on the foundational aspects of computer science. This encompasses theoretical data structures, advanced mathematics, and computing theories. The core areas of study within Computer Science include artificial intelligence, computer systems and networks, security, database systems, human-computer interaction, vision and graphics, numerical analysis, programming languages, software engineering, bioinformatics, and the theory of computing.
Conclusion
With the advent of LLMs, it is imperative for the education system to adapt and prepare students for the dynamic computing landscape. While LLMs present extensive possibilities for problem-solving, it is also crucial to nurture the next generation of computer scientists who will forge cutting-edge tools. Equipping students with the right skills and knowledge will be an important differentiator for students entering college and universities.
This article was supported with the use of chatGPT. I used the prompt "please provide your opinion on this article" and then I pasted in the article.Project management tools
What a mess. Pricing models are all wrong. Trello seems to have the most common sense...
The best advice I've heard about project management tools is they should help you manage your projects, and stay out of the way for everything else. I'm sure there is some witty corollary here...That is, the extent to which a project management system is useful is directly linked to how well it does that one job it should do.
I investigated several project management tools, first opting for locally hosted, open-source projects (my preferred solutions for most problems). I got open project
working, but the UI felt sludgy / kludgy. I then joined monday.com and love the UI / ease-of-use but their pricing model doesn't accommodate 1 single user. There is a minimum for three person teams - which is expensive.
I settled on Trello. Which has everything I want and a pricing model I like.
My project management plan for my sabbatical is on Trello.
Customers will only buy your product if they believe that the value they’re receiving is greater than the price they’re paying; otherwise, why would they pay?
Sabbatical planning
A rare and welcome opportunity to deeply recharge, learn and reflect...
Next year (school year 2023 - 2024) I will taking a sabbatical (proposal here).
14 years at my current school (American School of Warsaw), 22 years in education = time for some reflection and a recharge. Many of the technical skills I use and teach every day I first learned more than 20 years ago. Technical languages, software development practices, and development tooling has changed quite a bit in the last 20 years! With the rise of large language models and their ilk, it looks like the next 20 years will be even more interesting. I don't think the practice of teaching has changed as rapidly as technology but it also has benefited from years of researchI wonder how much has changed about imparting knoweldge, skills, and lessons in the last 20 years....
Other than technical upskill / refresh I am also looking for some time for deep reflection. I am a fan of a book by Daniel Kahneman, Thinking Fast & Slow. Taking the time to consider and thoughtfully and deliberately act is wise. I still feel quite full of motivation, ambition and drive. But at 53 years old, I'd like to move deliberately and maximize meaningful impact.
By three methods we may learn wisdom: First, by reflection, which is noblest; Second, by imitation, which is easiest; and third by experience, which is the bitterest.
Entity-Component-System 〈ECS〉
Different than oop? Read on...
I've learned about the Entity-Component-System (ECS)
Obligatory chatGPT / wikipedia definition: ECS is a pattern for game development that provides a way to organize and structure game logic. It is a way of designing games that separates the data (components) and behavior (systems) of entities.
In an ECS, entities are objects in the game, such as characters or enemies. Components are data structures that define the properties and attributes of an entity, such as its position, health, or sprite. Systems are responsible for updating and manipulating the components of entities.
The separation of data and behavior in an ECS allows for more flexible and modular game development, as it is easier to add or change components and systems without affecting the rest of the code. It also allows for better performance and scalability, as systems can be optimized for processing specific types of components.
Overall, the ECS pattern provides a clean and efficient way to structure game logic, making it a popular choice for game development, especially for large and complex games.
Entity Component System (ECS) is a software architectural pattern mostly used in video game development for the representation of game world objects. An ECS comprises entities composed from components of data, with systems which operate on entities' components.
ECS follows the principle of composition over inheritance, meaning that every entity is defined not by a type hierarchy, but by the components that are associated with it. Systems act globally over all entities which have the required components.
Entity: An entity represents a general-purpose object. In a game engine context, for example, every coarse game object is represented as an entity. Usually, it only consists of a unique id. Implementations typically use a plain integer for this.
Component: A component labels an entity as possessing a particular aspect, and holds the data needed to model that aspect. For example, every game object that can take damage might have a Health component associated with its entity. Implementations typically use structs, classes, or associative arrays.
System: A system is a process which acts on all entities with the desired components. For example, a physics system may query for entities having mass, velocity and position components, and iterate over the results doing physics calculations on the sets of components for each entity.
The behavior of an entity can be changed at runtime by systems that add, remove or modify components. This eliminates the ambiguity problems of deep and wide inheritance hierarchies often found in Object Oriented Programming techniques that are difficult to understand, maintain, and extend. Common ECS approaches are highly compatible with, and are often combined with, data-oriented design techniques. Data for all instances of a component are commonly stored together in physical memory, enabling efficient memory access for systems which operate over many entities.
Need a procedurally generated country?
Every once in a while one of my students hits the ball out of the park...
Not much sure how much better you could do than this:
https://github.com/bmackenty/s...
Current thinking about chatGPT
How should a high school computing teacher use chatGPT?
- Ensure students understand the technical boundaries
- Teach students to ask precise questions (with follow-up questions if necessary)
- Teach students to evaluate answers
- As teachers we should encourage students to ask all questions via a text interface (so we can capture questions) and fine-tune the model to reply. The goal is to have a "reasonably good" assistant that can support students as they work through content required by the syllabus. The input for questions should be textual / copy-paste / and spoken word.
Writing a report card comment generator
Saving time whilst providing accurate information about a students progress isn't easy, but certainly worth it...
I wrote a report card generator. The GitHub repo is here. It's version 0.1 but I used it and it saved me some time. There are many things to add and edit, but perfection is the enemy of good (I'm not sure I got that quote right).
I'm hoping to eventually offer it as a web service for students and parents to use so we can co-create a story about student learning.
Building an LMS (or virtual learning experience) - part 3 of 3
Setting up high quality digital resources takes a long time, but once we've set it up, it provides value for a long time.
My first moodle course is almost complete, introduction to programming languages. This has been a long process, but in the daily editing and revision I am pleased with the overall outcome. I'm sure more activities and resources will be added as students provide feedback, but now this course is "ready enough" for learning. I set up a badge for students to earn when they are done, and I have three assessments students must complete to demonstrate they understand this material at the right level.
I continually read how important building community is for online courses. I want this course to be as self-directed as possible, but I get how automated assessment misses subtle and nuanced points about the topic. Building this course has helped me focus on what I want the learning experience to be like; I suspect I will use this course in conjunction with my day-to-day teaching - but I want it structured so virtual students can derive maximum value from it.
The good news is the first course is the most difficult (time intensive). But once created, I can re-use elements in other courses. And of course, once I create a digital asset, I can reuse (embed) it in other courses and other digital spaces.
Building an LMS (or virtual learning experience) - part 2 of 3
On the importance of H5P...
H5P is a plugin for existing publishing systems that enables the system to create interactive content like Interactive Videos, Presentations, Games, Quizzes and more. The problem with formal and structured learning on the internet is that it remains mostly read-only (or watch-only, or listen-only). H5P helps to solve this by enabling interactive assessment for almost any content. Please click here for many interactive examples.
This is a huge deal, but it wasn't until moodle and other LMS's incorporated H5P that teachers could track assessment for digital learning. This means the kind of learning students can experience and the kind of assessment data a teacher can have are exceptional. No longer do we just "watch a youtube and discuss" but we can add assessment and track that assessment for different topics.
H5P helps us help students evaluate their understanding of a topic.
Building an LMS (or virtual learning experience) - part 1 of 3
It's not about the technology, it's about the learning...
This is an entreatment I have oft repeated; focus on the verbs around learning rather than the nouns of technology. As I rebuild a virtual learning experience I am asking myself "How can I make this best for my students"
I'm building out some moodle courses - my hope is my students will be use this resource to independently learn about different topics within high school computing. I curate material for them and ask them to learn it. But the key differentiator here is assessment. Anyone can watch a video, but to what extent do they understand it? By using forums, H5P assessment, and built-in moodle quizzes I can evaluate student understanding (and students can evaluate their understandings). I'm still looking for a way to embed jupyter notebooks and auto-graders for code.
...but whatever plugins and features I include all need to direct learning toward encouraging student interaction and collaboration, providing support and resources, and organizing content and activities.
The key points here are:
- Have clear learning goals: It's important to have a clear understanding of the learning goals and objectives for the virtual learning experience, and to design the experience around those goals. This might involve creating a lesson plan or course outline that outlines the topics and activities for each unit or module.
- Use a variety of teaching methods: Virtual learning requires a different approach than in-person teaching, so it's important to use a variety of teaching methods to keep students engaged. This might involve using video lectures, interactive activities, and small group discussions.
I have to think "to what extent will this course be an independent learning experience"?
Giving students as much of a choice as possible is important, freeing me to focus on helping my students to solve problems - where there is the biggest bang for the buck for my students.
Displaying courses in grid format on moodle homepage
After much searching I was lucky to get a helpful reply from a friendly moodler. Read on...
On the front page of moodle when using the boost theme, there is a linear list of courses. If you want a grid of courses, you can use the suggestion from here, a plugin named filter codes. I tested this on moodle version 4.1 and it works perfectly.
Procedural fantasy weapon generator
If you ever needed to procedurally generate a fantasy weapon with a history, backstory and special abilities, here's your code!
Here is the file on github, enjoy. I had quite bit of fun making this. Here's some sample output:
Long ago, during the age of Destruction, Gnomish smiths forged Yosyur Wargebas's exquisite crossbow. The wood on this weapon is constructed in a spiral-shaped combination of dark wood and exotic wood, it is clear careful and extraordinary craftmanship went into the creation. This weapon is a masterpiece of craftsmanship, and is a veritable work of art. You have +2 on any rolls to pick up romantic partners while holding this weapon. This weapon is sentient. Moving your hand near it, you can feel a vague sense of neutral uncertainty. For 30 years, this weapon was used as a table ornament in the modest home of Prince Fumbledick, who was unaware of its importance.
Long ago, during the age of Light, Dwarven smiths forged Vosgrolin Bloodshield's flaming scimitar. Elegantly crafted in a spiral-shaped combination of semi-precious gems and rare metals, it is clear careful and extraordinary craftmanship went into the creation. This weapon is aflame, and does 4d6 fire damage. This weapon is sentient. Moving your hand near it, you can feel a vague sense of neutral pessimisticness. This weapon was once stolen by a goblin. When the litch who owned the weapon found the goblin, he punished the goblin severely, which is why goblin soup is now a popular dish amongst evil wizards and litches.
Long ago, during the age of Doom, Dwarven smiths forged Erirnoick Orehead's exquisite whip. Elegantly crafted in a helix-shaped combination of rare stone and semi-precious gems, it is clear careful and extraordinary craftmanship went into the creation. This weapon is a masterpiece of craftsmanship, and is a veritable work of art. You have +2 on any rolls to pick up romantic partners while holding this weapon. This weapon is sentient. Moving your hand near it, you can feel a vague sense of unaligned uncertainty. This weapon was once wielded by a young Kawian apprentice, who later became a fearsome warrior.
chatGPT part 3: how do I know you know?
Out-of-school coding assignments are no longer as important as being able to understand the code. The return of oral exams?
As a computing teacher I use standard written assessments with my students. Questions include different assessment objectives such as "state", "describe" and "explain". I also use small code problems where students must solve a problem and write an answer in pseudocode. There is an internal assessment that students write; worth 25% of their final grade students must solve a problem for a real client. This is mostly independent, and a place where students could use outside tutors to solve a problem.
For any work outside of class, I will add oral component to the assessment.
According to chatGPT,
Some key steps for structuring an oral exam for computer science include:
- Determine the goals and objectives of the exam: The first step in structuring an oral exam for computer science is to clearly define the goals and objectives of the exam. This will help to ensure that the exam is focused and that it effectively evaluates the student's knowledge and understanding of the material.
- Identify the key topics and concepts to be covered: Once you have determined the goals of the exam, you can identify the key topics and concepts that will be covered. This could include specific programming languages, algorithms, data structures, or key theories or ideas in computer science.
- Create a structured format for the exam: To ensure that the exam is well-organized and focused, it's important to create a structured format for the exam. This could involve dividing the exam into different sections, each focused on a specific topic or concept, or using a specific format (e.g. Q&A, presentation, problem-solving) to evaluate the student's knowledge.
- Develop a list of questions: The next step is to develop a list of questions that will be used during the exam. These should be focused on the key topics and concepts covered in the exam, and should be designed to evaluate the student's knowledge and understanding of the material.
- Plan for student evaluation and feedback: Finally, it's important to plan for student evaluation and feedback. This could involve using a grading rubric to evaluate the student's performance, providing written or verbal feedback to the student, or allowing the student to ask questions or provide feedback on their own performance.
Overall, the best way to structure an oral exam for computer science is to carefully plan and organize the exam, focusing on the goals and objectives of the exam and the key topics and concepts that will be covered. By following these steps, you can create an effective oral exam that effectively evaluates the student's knowledge and understanding of the material.
chatGPT part 2: how we change our teaching and student learning
A high school student asks, "what will I do for work with chatGPT around?"
My seniors students have discovered chatGPT. They (like me) were stunned when they saw it. One student asked me why they should study software engineering when there is a tool like this.
I agree, this tool changes things, but while it can provide snippets of code, I don't think it can write whole systems with various input, processing and output. Much like visual studio code copiliot, I see systems like chatGPT offering support for experienced programmers.
The key thing is evaluation. How will we know the answers we get from chatGPT (and copilot) are correct? I spoke with our school director, always intellectually curious, who suggested teachers ask students to evaluate a reply given by chatGPT. I think this is where we need to be in relation to chatGPT: a smart assistant who needs to be watched carefully.
That being said, it looks like intelligent agents are going to become better (much better) at being assistants. This seems to be a plausible near-term future.
Our job is to teach our students well enough so they can evaluate / analyze the output to determine if the solution is correct / best fit for the problem they are trying to solve.
chatGPT: teaching computing
What is the answer when asking an AI to please describe the most effective techniques and methods of teaching high school computer science?
ChatGPT answers:
There is no one-size-fits-all answer to this question, as the most effective teaching methods will depend on the specific goals and objectives of your course, the abilities and needs of your students, and the resources and materials available to you. However, there are some general principles and best practices that can help you create an effective and engaging learning environment for your students.
First, it's important to create a clear and organized syllabus that outlines the goals and objectives of your course, as well as the specific topics and concepts that your students will be learning. This will help your students understand what they can expect from the course and how they can prepare for success.
Next, it's important to use a variety of teaching methods to engage and motivate your students. This can include interactive lectures, discussions, hands-on activities, and group work. Using a variety of teaching methods can help keep your students engaged and interested in the material, and can also help students with different learning styles to succeed.
It's also important to incorporate real-world examples and applications into your teaching, to help students understand how the concepts and skills they are learning can be applied in the real world. This can help make the material more relevant and meaningful to your students, and can also help to motivate and inspire them.
Finally, it's important to provide regular feedback and support to your students, to help them understand where they are succeeding and where they may need to improve. This can include providing individualized feedback on assignments and exams, as well as offering extra help and support outside of class. Providing this kind of support can help your students feel confident and supported in their learning, which can in turn help them to succeed in your course.
Overall, the most effective techniques and methods for teaching high school computer science will depend on your specific goals and objectives, as well as the abilities and needs of your students. By using a variety of teaching methods, incorporating real-world examples and applications, and providing regular feedback and support, you can create an effective and engaging learning environment for your students.
Bill comments:
Yea, about that.
Robotics
Truly a wonderful learning opportunity...
This weekend, we are immersed in a Lego robotics competition. Students and coaches have come from other international schools to compete in a robotics challenge. The nature of the challenge is to program a robot to perform different manipulative tasks of various difficulties (within 2 minutes and 30 seconds). For example student robots need to push the red section of the windmill.
This will then trigger a different piece to fall, which must be collected for different points. The cool thing about this project is how many different times student-groups can attempt these challenges. It's ultimate design in my opinion, where a student will try / fail / try / fail many different times. This constant cycle of iteration is really at the heart of learning, construction and design - and is just such good stuff.
Procedural generation as a teaching approach
In computing, procedural generation is a method of creating data algorithmically as opposed to manually, typically through a combination of human-generated assets and algorithms coupled with computer-generated randomness and processing power (ref).
The amazing thing about procedural generation is that infinite unique possibilities can be created with little work from humans (ref). I've been interested in procedural for a few years, and would encourage you to take a peek at the following resources to learn about procedural generation:
- This is an excellent introductory article
- Dwarf Fortress (an incredibly complex game that is largely procedurally generated)
- No Man's Sky (this a wiki article describing how procedural generation works)
What is cool about procedural generation is how easy it is to start with procedural generation. In the example code below, we can get the following output:
- Discovered in the small village of Tr'lor
- Hatched in the ocean of Greenest
- Born in the small village of Mirkwood
# procedural generator to write a brief history
import random
origin_1 = ["Born", "Hatched", "Invoked", "Discovered"]
origin_2 = ["in the land of", "in the wilds of", "in the forest of", "in the ocean of", "in the small village of", "in the modest hamlet of"]
origin_3 = ["Tr'lor", "Kor'mer", "Kobiyashi", "Greenest", "Mordora", "Gondor'e", "Rivendell", "Mirkwood"]
story_part_1 = random.choice (origin_1) + " " + random.choice(origin_2) + " " + random.choice(origin_3)
print(story_part_1)
I have some students working at high levels of complexity and other students working with more basic levels, as seen above. But for all of them, this is a fun approach to deconstructing a complex system, identifying the patterns within the system, and introducing the correct randomness to the system to make it unique.
Procedural generation gets us close to modeling and simulation where a student must understand a system in order to create a model of it. In my opinion, modeling and simulation is close to the the very best learning we can get.
Procedural generation goes into the stratosphere when students apply machine learning to highly complex systems.
The design cycle works
Considered and deliberate approach to design leads to high quality solutions. The obverse is also true.
My 9th and 10 grade (ages 15 and 16) students are working the design cycle as they solve a problem through programming. The problems are all unique, and fit the student's skill / capacity window. An example of some the projects are below:
How to find the perfect guitar? | A web-based application to help people find a guitar based on certain criteria |
Which sport should you play? | A web-based application help people decide what sport they might enjoy |
Dungeons & Dragons character builder helper | A web-based application to help people build a D&D character |
The students have begun to really think and understand their problem. As they dig into the problems, I note they are changing their success criteria and more carefully adding features based on research into solutions. This process - of inquiry into a problem and understanding the problem deeply - reinforces the power of design.
In education, we talk about transfer learning, where students can transfer learning to novel scenario or situation. A key question I like to ask is:
What do I want my students to know / be able to do in 5 years, 10 years
This kind of approach to solving problems is extraordinarily powerful, and a good thing™ to have in schools. Students who do not attend to this process generally do not have high quality solutions.
How do we measure students computational thinking?
This PDF answers the question.
Good stuff.
Building a computer science wiki
I've been very busy online lately, just not here 😊 Please do take a look at my computer science wiki. I'm building it for my high school, middle school, and IB students. Once it is filled-out enough, I will probably ask the internet for some help to add to it. Please enjoy, and check out the list of recent changes.
Linux server with lots of students - assigning individual read / write for students in /var/www
I use (and love) linode for my web hosting, email, database, and other linux needs. I'll be using linode for my web applications class next year (about 15 students). I had a problem thinking how would I enable students to write to a web directory (var/www) without giving them all SUDO access (and allowing them to write into another students directory).
This took me some time to find a solution, and it is beautifully simple (of course). Click here to see the thread.
If you make /var/www writeable by its group and add the user to the group, that user will not have to use sudo.
Try this:
sudo adduser www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rwX /var/www
The user should then be able to edit /var/www/ files without hassle. The first line adds the user to the www-data group, the second line clears up any files with messed up ownership, and the third makes it so that all users who are members of the www-data group can read and write all files in /var/www. If you are logged in as you need to log out and log back in for the group membership to take effect.
I confirm this works.
Six rules for asking questions in computer science
The more complex code is, the longer it takes to understand and debug. If it is poorly written code, a multiplier is added to the time required to read it. I have worked with my students to build a "must do before asking questions" list in computer science.
1. Google your question
2. Re-read your code (or function). It can be helpful to read this backwards
3. Use debugging tools
4. Ask the person next to you
5. Read error messages!
6. If you have to ask a teacher for help, make sure you ask a very specific question about a very specific topic
Great questions get great answers. Bad questions get, well, not-great answers.
Increasing complexity == increasing time to read
I need some advice about a common question: "can you look at my code really quickly"?
I am starting to work on increasingly sophisticated programs with my students. My students ask me to help them diagnose a problem, suggest alternatives, or figure out what is broken in their code.
My problem is reading their code takes time, thinking about what they are doing takes time, and suggesting a good alternative takes time. This isn't something I can do in 30 seconds.
How do you manage student requests for support and assistance when their code is very complex and requires more than 5 or 10 minutes to read?
Yea! I learned something that I actually used!
I'm refershing my javascript skillset by going through a code academy course. Laborious, but helpful. Today, while supporting a co-worker on a powerschool customization, we were looking at a problem. I realized a variable was declared within a function but wasn't scoped to be used outside of the function (globally). Once fixed, we were running strong.
I just studied variable scope in my refresher course, and I'm grateful I did! As always, the wonderful stack exchange has a well-written piece about variable scope within javascript.
I suppose it is mildly depressing that I am excited about learning something that I can actually use. That must mean I normally learn things that are useless.
Sublime - is just so…good…
Well. I haven't been this enamored with a piece of software in a long time. Sublime - a text editor - has won my heart. The last time I got this happy about text editing was back in the day with UltraEdit. Someone put some love into this software.
Social Media and PLN’s: a lot of a little
#cdl_mooced I'm currently learning via a fascinating MOOC Coaching Digital Literacy.
The unit I am working through is about social media and PLN's (personal learning networks). For the record, I love personal learning networks, and have benefited tremendously from my involvement in them. I've been a social media user for a while, but I don't really think they work for me as a PLN.
What I see in social media (twitter, facebook) is a lot of a little.
After reducing the "signal to noise" problem*, I see people post links to tools, without any deep thinking or consideration of context. It's pretty easy to post an infographic, link to a blog, embed a youtube video, but it's much harder to meaningfully change student learning with that same link.
Social media makes it very easy to share, but does that equate with better? I'm unsure. Where I have seen social media shine is when a very specific content area is linked to another very specific content area. For example, when a third grade teacher "follows" another third grade teacher. Or when a 10th grade English teacher "follows" another 10th grade English teacher. Posting a link, a website, or some great web 2.0 tool might help, but I don't think it meets the definition of being connected. My bias is rooted in my growing conviction that focused, mindful attention is the best way to learn and remember.
This weekend, I'm on my way to Istanbul, Turkey where I will meet with other IT Directors from the Central and Eastern European School Association. We all work in similar schools, with similar issues, challenges, and successes. This is my primary PLN, and one which I derive great value from. This face to face contact, this focused, uninterrupted time where we are learning with each other is like solid gold for me. And it is this that is missing from social media. Social media makes connecting quick, easy, and ephemeral. And that's the problem I have with it. I'm curious to hear your thoughts about this. *
Bill's social media signal to noise maxim: the ratio of cat pictures to actionable useful content determines the value of social media as a learning tool.
Expression Engine 2.8 is out!
Expression Engine 2.8 is out. Really cool feature set that will save time and make it easier to develop great web-apps for schools.
My latest use of Expression Engine is for a professional development request system. Works like a charm!
Hacking in High School: yes, but….
A substantive article by Pete Herzog about hacking in High Schools.
I hope you read this reply, Mr. Herzog. You are so right about this. I think the key point is what schools do with hackers (geeks) when we find them.
Many times we have "caught" students doing stupid stuff like installing key-loggers, running port scans, writing bash scripts and changing /etc/hosts in amusing ways. When we catch them, we discipline them but then we invite them to learn. And this is my key point. We need to teach kids to be responsible and ethical digital citizens, but also teach them how to hack. And as you say, be "motivated, resourceful, and creative" learners.
I liken this to "geek fishing". Schools generally don't do a great job of fostering an environment of open exploration, discovery, hacking, and making. We have a curriculum to think about, after all. But when we discover a hacker / geek in our school, we have a duty to encourage them and grow them.
As I reflect more on this blog post, I think what should change in schools is our attitude towards hacking; to invite it, encourage it, and recognize the value this type of challenge / curiosity-based learning brings to learning. We also need to help kids make good decisions.
Membership in Computer Science Teacher Association
As I was learning about computer science curricula in the K-12 sphere, I discovered the Computer Science Teacher Association. I've joined, and I am learning a great deal about the value of their membership. I'm currently reviewing their suggested K-12 Computer Science standards, and learning more about computational thinking. I'm looking forward to learning more about how this organization can help me understand how best to plan, implment and assess computer science curricula in the K-12 world.
Just finished Code Academy Intro to PHP
I just finished the CodeAcademy PHP introduction. Not bad, I have to say. I've been dabbling in PHP for many years, and I learned some new things, which is cool. I finished in about two days (total time, probably 6 hours).
I found the learning environment to be good. A few user interface quibbles, but overall, the teaching and assessment was spot-on. I liked the feedback when an answer was incorrect. I found the scope and sequence to be good. I think a more robust summative assessment would of been nice. I also think some different types of assessment would of been neat (look at this code, where is the error).
Amazing, the last time I formally learned about PHP, I used a book, and manually typed in the code. This was much different.
Geeks on the difference between training and learning
Great video and talk about the difference between training and learning.
https://www.usenix.org/conference/lisa12/education-vs-training
My idea of a good social experience for teachers
This is a proposal I sent to our school social committee. I'm not sure what they will think about it!
I would like to have the first annual ASW Dungeons and Dragons game. The purpose of this game is to have fun and learn about a foundation of geek identity and culture, Dungeons and Dragons (version 4e). I imagine each game will take about 2 hours, with 5 to 6 players. I have already created the characters and settings, so gameplay should be fast. There is a a small bit of reading prior to each game, and ideally each player would watch one of the lord of the rings movies prior to playing.
The game would be classic D&D, "the hero's hack and slash to save the world kind-of-story". Players would choose a classic class such as fighters, barbarians, rogues, clerics, magic-users, wizards, archers, etc.. Players will have a chance to play the following races: human, elven, dwarven, goliath, and perhaps a dragon-born. They will in turn fight the classic monsters, including orcs, dire-wolves, skeletons, spiders, and perhaps even a beholder. I was thinking about the following dates:
Thursday, March 21 2013, from 1600 to 1800 in the board room
Thursday, March 28 2013, from 1600 to 1800 in the board room
Light snacks and drinks would be served (as is traditional for D&D games). I will handle all logistics, registration, total cost for one game would be less than 50 PLN for snacks.
Anyway, I know this is pretty far over on the "weird" scale, but it does strike me as a potentially fun and social experience for our community. I would especially welcome people who have never played Dungeons and Dragons before. My request is for you to think about this proposal and get back to me with your reaction. If enough of you think this should be a "go" I would ask that you talk it up with your various divisions.
How do you evaluate technology coaches?
How should we formally evaluate technology integrators? You know, the folks in the classrooms, meeting with teachers, holding workshops, coordinating trainings, hand holding, pushing, shoving, cajoling, and generally doing everything they can to move technology forward. Saints, the lot of them.
We have a special opportunity this year to create a formal evaluation for these folks. As technology director, I'll be formally co-evaluating the technology coaches with the building principals. These evaluations will be "official-in-the-personnel-file" evaluations. So what should be on them?
Some of them are pretty easy:
communication skills
organization and planning
contribution to the work environment
But what about the meat and potatoes? How do we point to a technology coach and say "yup, that is effective technology coaching". Do I look at teachers that have worked with the technology coach? Do I look at the students who are in the classes? Artifact research? I see many technology coaches using project-based integration. Maybe we should just look at projects and base evaluation on their projects - that seems a bit thin to me, though. The purpose of evaluating a technology coach is to evaluate if this person is improving student learning in our school through the effective use of technology.
I'm wondering:
Are the coaches available for teachers?
Are the presentation of training differentiated?
Are the coaches working to change building culture?
Do we see teachers using technology effectively and progressing with coaches?
Are coaches using differentiated instructions for their teachers?
Are coaches partnering?
Ultimately, I think the smart thing to do is let the coaches build their own evaluation instrument. Of course, we will include goal statements and all that other normal stuff, but I think they all know best.
What are your thoughts? What do you use to evaluate technology coaches?
The 10 moms doctrine
If you ask 10 different moms what they would do in a given scenario, you will get 10 different answers. Especially related to computer use, filtering, and behavioral standards. Last year our school had a strong parent technology partnership program (I intend to build on it this year). One of our activities was to present a scenario and ask parents what they would do (this was led by the indomitable Nick Kwan). One of the questions was "what would you do if you walked into your child's workspace and they quickly minimized a window?". The answers ranged from "nothing" to "take the computer away for a week".
Our school has a one to one laptop program. The school owns the laptops and the students take the computers home with them. We use open dns for filtering. The students have admin access to their laptops (which is a topic for another blog post - I love it).
We got several (well-placed) criticisms last year which stated students were coming home with laptops, and parents had no way to control this device. I considered this complaint fair, because there really are a wide range of parental attitudes and beliefs to technology use. I tend to be fairly liberal and open about tech use, but many parents are not - they are conservative and very careful about technology use. Is it fair to send kids home with no way for parents to control their device? Of course we talk about social contracts, and talking with your child, and trust - but some parents have strong beliefs that a computer should be locked down (the 10 moms doctrine).
The obvious choice is to install filtering software and teach parents how to use it (or teach them to use open dns). It's an option. If parents want to activate filtering, we tell them how to do it. If they don't want to activate filtering, then they don't. We are clear that there is to be no filtering during school time, only at home (from 3:00pm to 7:00am). We also talk about parenting advice and tips and offer parents a venue to discuss technology issues and share solutions to problems with each other. We talk about the technical weakness of filtering, that filtering alone can't solve many problems, and that at the end of the day, there has to be some kind of involvement with parents and their child's technology.
tl;dr: people have different values, ed tech should do what they can to respect and support those values.
More on learning HTML 5
I have encountered a wonderful resource for learning HTML 5, Dive into HTML 5 by Mark Pilgrim. Not sure which adjectives to use, so I’ll just use the always-helpful-but-not-really-because-it-is-overused, “awesome”.
Everything about this online book is great - I even (finally) got educated about unicode and character sets. His links for further reading are great. I’ve spent about 4 hours just reading and digesting - I’ll certainly come back to this as I learn more and start implementing an HTML 5 site.
Becoming familiar with HTML 5
With some vacation time left, I'm spending a few hours getting up to snuff on HTML 5. For a rank newbie, I find the w3 schools to be a good primer. I've never been much a javascript programmer, but it looks like that sexy canvas element uses it. I doubt I'll take the time to learn javascript, but it looks like I am going to need to sink my teeth into it.
I follow many people, including Rick Ellis, who said something like 'think of every website as an application'. I like this idea - the idea of static, "brochure-ware" is a dead end. Especially for schools, I believe the web is (and should be) a full suite of applications to serve the community. It seems like HTML 5 very much understands this idea.
I love the built in form authentication elements in HTML 5, the local storage, and the whole "the web is the application" idea. I hope major browsers don't screw up the implementation.
I'm sure I'll build a "test school" webpage with HTML 5 and my favorite CMS, Expression Engine to learn HTML 5.
The four noble truths. Explained, part one.
Orginal thought here
The four noble truths of technology and learning.
1. Engage, stop, turn off, reflect.
2. Program
3. Participate
4. Sift
I believe it is important to stop, reflect, turn off, and consider when we we are using technology in the classroom. This happens naturally when teachers are using technology to reinforce an idea or concept. The classic pattern is "let's learn about XYZ, a discussion, activity, and then a closing discussion". When teachers are using technology to teach, they must remember to stop using technology, and allow their students to reflect and think about what they just did. Take a look at that mashup - is it any good? Does it demonstrate learning, or just that you know how to use the tool? Does it meet our ideas for learning? This is the classic idea of kids who get caught up in the tool, and not the learning. Not rocket science, but very important for learning with technology.
I think we can extend this idea further. When we are asking our kids to use technology and media, we need to ask them to stop and think. We didn't need to do this before the rise of 1:1 programs or ubiquitous computers. Why?
1. Divided Attention. This idea of multitasking really is bull. The more I understand about divided attention, the more I believe that we need to ask kids to focus and input on one thing at a time - sometimes. Part of being a digital learner is sifting (see my discussion on noble truth number 4) and learning to process and filter multiple streams of incoming data. Sometimes, kids should be free to "open the hose" and get drenched in the information flow that is the internet. But sometimes, they should stop, discuss, and think deeply - you know, Zen.
2. That so much of the internet is about commercial posturing, marketing, eyeballs and selling. Kids need now, more than ever, to separate the "froth from the foam". To carefully evaluate the information, the idea, the "sense of truth" they have. Kids need an adult to guide them in this maze of stilted information.
3. We have so many students who see the first three google results as gospel. This is lazy. Again, stopping and reflecting, digging a bit deeper, look for a different facet on this gem. Using different databases, different repositories. Even wikipedia (which I love). Students could benefit so greatly from simply reading the discussion page and seeing the disagreements people have about the article. I often find more truth in the argument about a wikipedia page than the actual page!
4. And finally, the way our brains work. A cognitive scientist I am not. But I know when we step away from the screen, and give ourselves time to digest, we tend to remember better.
There is balance here. There is this unending stream of intense information, media, images, links, connections, and fun. It is not ok to turn it off, but better to teach our kids how to engage and then disengage. And then engage.
Parents: your kids will probably see these movies soon. Beware.
Looks like the fine gents at the lonely island have released another chart-topper for the Christian charts! This one is entitled “I just had sex” (vid here). The Lonely Island is a comedy troupe who, among other things, creates these funny videos. The videos often have inappropriate language, racy themes, and pretty much everything disdainful and horrible to well-adjusted parents of young children. The same comedy troupe made a very popular video (over 30 million combined views) entitled “I’m on a boat” (vid here). Again, inappropriate for young kids, and certainly questionable for teenagers.
This video has been viewed 30 million times, and there is a pretty good chance your kid has seen it, will see it, or will soon hear about it, and then watch it.
So what should you do?
I suggest you talk to your kid about their internet use, create clear expectations of behavior, and be aware these videos are around. As always, we prefer a proactive approach to computer issues rather than reactive.
Growing Up Digital, Wired for Distraction
My first reaction? Anger.
My second reaction? Yea, about that….
I’m reminded about the call for balanced parenting and computer use. Oh wait, that’s me.
How we name our servers, and Apollo
Seems like people have pretty strong opinions how they should name their servers. I understand in an enterprise organization you would want a corporate naming convention for your servers. Especially if you have billions of them. I'm sure google doesn't sit around and think how they should name their servers. The probably call them something like borg_7121_location_8 and borg_7121_location_9.
But in small organization, there is something to be said for having fun names. This is actually one of the many small pleasures in the life of an IT guy in a school. Naming servers. People still call our fileserver Zeus, and we refer in-house to different servers around the school by their Greek names. I think it adds a sense of fun and playfulness to an IT department. Moreover, when a server has an issue, we ascribe the issues to a Greek Deity.
Here at the American School of Warsaw, we are using Greek Gods as our server names. Today, we are setting up a virtual print server, and decided to name it Apollo. Seems to make sense for a print server (even if it is virtualized).
I’m finished at Hunter
As of 4:00pm today, I've finished my tenure at Hunter College Campus Schools (the high school and the elementary school).
I worked there for four years as an instructional designer, helping to integrate technology into the curriculum. If you'd like to see a normal day for me, take a peek here.
I loved this job. The kids are amazing. Like, genuinely amazing. I will never forget the conversation I had with a 7th grade student (13 years old) about advanced cross-side scripting and brute force attacks. This was no script kiddie, but a well developed hacker. I met several others like him, who were profoundly gifted. One of my favorites is a student who zapped from one idea to the next - he wants to compile code on anything he can find, I think. He was dealing with very high level code concepts in 10th grade (16 years old) - so much so, he had to take classes at Hunter College because we couldn't feed him anymore. The students were the intellectual cream of the crop in New York City. It was such an honor to work with them, and support the fine teachers who guide them everyday.
I ended up working more on the technical side of things than the integration side of things (a common occurrence, I think), but I saw the implementation of interactive whiteboards in every room, robust wireless network implementation, laptops for the teachers, transition to a fully OS X platform for the elementary school, and so many other things...
I loved the faculty there. I really did. I recount the daily struggles and triumphs at our school. We had a chemistry teacher who is the nicest person, and he was delighted to learn how to incorporate pictures into his powerpoint presentations - he did wonderfully, and the students are able to see copper in different states because of his hard work. We have teachers who still don't even turn on their computers, and others who can't get enough.
I worked with an active administration team, who was supportive, and engaged in the success of the students.
It was a little frustrating working within the CUNY bureaucracy, but I learned quite a bit from my time at Hunter. I am left with a specific sadness as I leave; these kids and teachers deserve the very best (really) - it is my genuine hope they get everything they need.
YES!!!!!!!
Yes!
I did it! I passed the New York State Certification tests for School Building Leader and School District Leader (SBL and SDL, respectively). PDF here.
Soon, I’ll be a certified New York State Principal and Superintendent. I am very happy; this was a ton of work (2 years) and many more years preparing. My goal is to be a director of technology (which I’ll be realizing soon at the American School of Warsaw in Poland). But I suspect I’ll soon be a principal.
I’m enjoying a glass of Jameson Whiskey in celebration.
Expression Engine and Drupal
I recently had a wonderful meeting with a fellow ed tech geek here in NYC. He was helping me with some issues relating to blackbaud. The conversation was wonderful, he was insanely helpful, and we discussed all sorts of interesting things. He is a Drupal guy. I'm an Expression engine guy. After his enthusiastic recommendation, I started to review Drupal (it's been a while since I've used it). I did a fairly standard google search and was pleasantly surprised to find a thoughtful, well-considered discussion about the relative merits and shortcomings of both systems - very few flame-fests.
I personally find EE's templating much more intuitive and powerful. I also like the way I have very fine control over my individual pages than Drupal. Contrary to some comments, I find EE's support amazing (you are paying for it, after all). I've had to avail myself of their help many times! I'm going to stick with EE. This may be due to the fact that I know EE really well.
I like EE more - with one big reservation. I think I would more participative in the EE community if it wasn't a for-profit company. I know Ellis lab through emails and over 4 years of community interactions. I love what they've done with Code Igniter (open-source). But at the end of the day, if I am investing my free-time into a community, I'd like it to be about something more than helping (a really nice) group of people make money. Is EE a best-of-class product? Yes. Are Ellis labs intentions top-notch? I think so. But the one thing Drupal has over EE is it is open source in the truest form of the idea. I have recently begun digging back into Hspace - a text-based space simulator. As my three faithful readers know, I'm a text-based game aficionado - this is an open source project I would love to commit my (increasingly limited) free time to.
I know (not personally) several people who made careers of supporting the Ellis lab ecosystem. I plan on using EE / CI to be the system that drives my school web-based communication company. I will continue to encourage people to use expression engine, and I will encourage people to take a long look at EE as an excellent choice for web publishing.
I hope this post has added something to the discussion about EE and Drupal. I look forward to your comments.
I’m off facebook
I’ve deleted my facebook account. It wasn’t one single event, but several which came together.
1. The intention of facebook went from “connecting” to “profit”. Not sure when this happened, but icky.
2. I hate like - I dont want facebook to know everything (see #1)
3. Funny thing - facebook controls your privacy from everyone except facebook. They are selling gorgeous demographic-based advertising. (see #1 and #2)
4. Facebook says they own my data. So if I write a wall post - it’s theirs. icky.
5. How hard it is to keep my student / personal information walled off. There’ some things I don’t want to know about my kids.
I also already have a pretty well-established web presence, I’m building a bigger web-presence, and I never had trouble with people getting in touch with me.
I’ll miss remembering people’s birthdays, I suppose.
What I learned today
I’m filing this one under teaching diary category.
Today I asked one of my student-geeks to explain to me what a mutex is. 45 minutes later, he left my office, I have a headache, and I understand what a mutex does. He’s 15 years old.
I love my job.
edit later in the evening, this student sent me the following email:
Wow I just realized I did an awful job of explaining mutexes, but instead actually gave u the model i prefer, which is essentially designed to avoid them. whoops. Anyway, the mutex itself is the lock (or rather what a lock is called in unix systems—MUTualExclusion (lock)). Basically think of it as an atomic pthread * (way to impl. specific, sorry) where when you need a resource associated with a lock, you do some system call (or something) to make the mutex point to the current thread (which is *acquiring* the lock) as long as it is null. If it is not null, it has been acquired by a different thread, and you need to not use whatevers associated with that lock until it is released by whatever other thread is using it—which would set it to null. some common actions would be to implement a ‘spin’ lock, which basically is
while(lock!=thisthread);
or canceling the action. Note that resources associated with a lock are entirely programmer defined, meaning that you can do whatever you want with them, and you wont be stopped even if you dont have a lock, but the idea is to acquire the lock before using the resource (this is obvi way simple in object oriented code, where accessors can just acquire a lock thats an ivar of the object before actually changing the ivar). Many things which are ‘thread safe’ actually just use mutexes internally on all state variables. Second note - the impl. i described is prbly not at all the way unix does it, and syscalls are probably not involved—gcc has builtin atomic operations which just show that this doesn’t need to involve semaphores, although it sometimes does (beyond this is farther than I have plunged into OS kernel level stuff), but basically the main things to know are that with a mutex you acquire and release it. Oh, and mutexes make poor performance code, being that you’re literally just intentionally wasting cycles waiting for something while you spin.
I think thats it
(I _really_ love my job)
Why I love my job
One of my students came in and asked me this :
So I realize this question sounds stupid (and yes I am using a dual core), but I have tried two different libraries (Grand Central Dispatch and OpenMP), and when using clock() to time the code with and without the lines that make it parallel, the speed is the same. (for the record they were both using their own form of parallel for). They report being run on different threads, but perhaps they are running on the same core? Is there any way to check? (Both libraries are for C, I’m uncomfortable at lower layers.) This is super weird. Any ideas?
I told him this smells like a problem with the tool he is using to measure clock speeds, and perhaps an issue with the scheduler. He posted this question here and sure enough, clock() isn’t the best way to measure code execution speed.
This kid is 14 years old.
I love this stuff.
Experiential Learning and Technology
I’m sitting here at work on Monday, February 15th. It’s a federal holiday, yet here I sit, cleaning up my desk, writing, and tending to some projects I haven’t had time for.
Why am I here, and not with my wife and 9 month old?
A robot.
In the room behind me, there is a group of students (who are here during their February break) working feverishly on a robot. They are partaking in the FIRST competition - and this reminds me why I love teaching and technology. They bought a drill press (with a laser guide) to make the structure of the robot. They are excited, motivated, and absolutely focused on building this robot. It is a truly delightful thing, to see kids lit up about technology. With very little experience, they have built wireless controllers, steering, and even coded a simple autonomous control. They have done a simply wonderful job of building this robot. They are fairly sure they won’t win this competition, but they are aiming for rookie team of the year.
I often talk about games in education because I see how motivated the kids are. It is amazing to see the energy a student will put into learning when it is something they really care about - and this is exactly why I love experiential learning - and the strange looking robot behind me.
Frontline’s digital nation documentary
http://www.pbs.org/wgbh/pages/frontline/digitalnation/
I sent this email to my faculty - in the high school and elementary school:
Last night PBS aired a remarkable documentary about digital life in 2010. I found the documentary truly, truly, exceptional. I would really appreciate if you could take the time to watch this - perhaps this evening or this weekend.
http://www.pbs.org/wgbh/pages/frontline/digitalnation/
Last week I sent you a link to a study that stated the average child spends 10.4 hours a day using some type of media. I think we could all benefit from a discussion about how technology is changing the way our children learn, think, and see the world.
I hope to lead a more thoughtful discussion about computers, media, and learning this year. Until then, I would really appreciate if you could watch this documentary.
Here is a reply I received from a teacher:
I did watch the Frontline documentary, “Digital Nation,” last evening, and I must say that it was, as is customary of Frontline, very incisive and comprehensive. Many parts of the program, particularly those addressing the effects of technology on young people, were very unnerving. The situation in Korea should be seen as cautionary to the western world, particularly to us here in America with our almost idolatrous love for all things technological. That poor Korean mother has already “lost” her son to computer games, as far as I’m concerned because the son as lost his soul to the machines. I felt both sad and angry when I saw that part.
For my part, as an educator and specifically as a language educator, I have very mixed feelings about the use of technology in the classroom. On one hand, it has made it possible to access, literally, the world with the click of a mouse. But I am equally concerned about the “losses”: the loss of true attentiveness; the loss of the printed word; the loss of community and relationships and the increase of anonymity and the impersonal. “Digital Nation” posed many, hard questions about this but offered no easy answers. That’s where we come in. But it is very important that those questions get asked.
Teaching advanced applications
This is a pleasant surprise!
I’m offering an after-school, non-credit bearing class in advanced applications today. We will start with wiki’s, move onto serious web design, and then finish off with video editing. I expect the class to take about 2 weeks.
I sent out an email to all 10, 11 and 12 grade students - and I am pleasantly surprised to have 15 replies - all of them girls!
I encourage young women to get involved in STEM - and I think this class is a great way to “bridge” girls into computer science and engineering. In my wiki class, I’ll be focusing on templating, which uses variables. I’l keep you posted on how it is going. In the mean time, I plan on using this lesson plan for today’s class.
Lesson Plan: Using wikipedia
This PDF is my lesson outline for teaching students how to read a wiki - it is quite utilitarian in nature - we don’t talk about evaluating information, or triangulating sources. Instead, this lesson is about the nuts and bolts of using Wikipedia. It presumes the teacher has a moderate amount of knowledge in using Wikipedia.
I’m encouraging teachers to use our school wiki for written assignments instead of written papers. This lesson is part of my effort.
repost: Do Teachers REALLY Come From The Bottom Third Of Colleges…...
I don’t normally repost, but there is a nice piece from Larry Ferlazzo taking on “those who can’t, teach” thinking. . It’s nice to see how he picked apart this dubious claim, and his research trail. He asks for help, saying:
“...I’d love for a math person to examine the numbers on page 91 of the report on the Condition of Education 2002 to tell me what it really says in plain English…”
Here is the Condition of Education 2002 report (PDF) and here is the graph on page 91 and 92
I shared this blog post with my colleagues, all who said “what the hell does SAT and ACT scores have to do with good teaching?” Indeed, that.
The blur
I saw one of my students facebook post “my father joined facebook today - and the answer is no” on their wall.
Hilarious, and a perfect example of how things have changed with regards to privacy, private-space, and the idea of public space. I call this the blur. The standard definitions and understandings of privacy aren’t the same as they were in 1990. In schools, we normally encounter the blur when a student writes something inappropriate at home about something in school. But as we craft AUP’s, and think about how kids use technology, we need to remember things aren’t the same as they once were.
As I think about how kids communicate, and the transparent, interconnected, and ever-linked nature of their connections, I realize how the blur touches everything. Things stick around, media is easy to share, hard to forget, and also strangely impermanent.
I will write more on this later.
Best way to learn programming for a 16 year old? Build a game….
I work at a school for gifted kids. One of my great joys is having long, highly detailed technical talks with the kids. When I first started working at this school, I was shocked when I engaged in a 45 minute debate about cross-side scripting with a 7th grader (13 years old). I mean, this kid REALLY understood his stuff.
Yesterday I had another such conversation. One of our students is just eons ahead of his peers as a programmer and geek. He generally likes to frolic with low-level code, device drivers, and small servers. He has a well-reasoned philosophy that light-weight, locally compiled code connected to the cloud is better than scripting languages and monolithic programs. Really neat stuff. We don’t see eye-to-eye about everything, but from a geek point of view, he is a delight. He is, in every sense, an implementor.
So, part of discussion yesterday was around “what to do” with a program. Like, what direction to take. After a few seconds thought, I told him to write a game! As I reflect, almost all of my programming knowledge and experience came from designing games, hacking games, and rolling my own game. Even now, I occasionally hack at a multiplayer text-based game and continue to learn. Time and complexity be damned! I’m sure he will write something really fun, and I can’t wait to play with it.
This is the magic I see in computer games - observe the time, enthusiasm, and energy they spend with computers. It really is intriguing.
Now. A Practical Note (tm) - Making / modding a game takes a long long time in my opinion, not for in-class work. However, as long as there are good guidelines for outcomes (so the kid doesn’t spend 10 hours making a flaming sword with an accurate heat ratio) hacking at a game is a delightful way to learn.
Um, I’m now the faculty advisor for the karaoke club…
Yet another reason why working in education is incredibly rewarding. Now we need to hold a few bake sales so we can buy a karaoke machines.
I wonder if President Obama’s stimulus plan would include some disco balls, a couple of microphones, and a nice fat karaoke machine.
What would you teach a group of 11 year old kids about text based games - part 3
We started our exploration of MUD’s today (specifically, we played legend mud). We talked about the similarities and differences between interactive fiction and MUDS. We used Atlantis client to connect.
After a brief character generation process, we settled into the game - the syntax and milieu was familiar to the kids, save the “real time” aspect of muds. We noted the status (HP, MP and MV) and looked at SCORE, STAT, and other MUD commands. We put our party in a group and started with small MOB’s like rats, toads and snakes.
The excitement was palpable as the combat started - experience points started flowing into our group and each combat was followed by a period of rest as we waitied for our hit points to regenerate. It wasn’t long before we ended up in a swamp, and encountered something (I forget the name) but it ended in a total party wipe. Humbled, we restarted and continued our adventures. Again, I was struck with their enthusiasm and excitement. These kids were (not literally) glued to the screen, laughing, jumping out of their seats and carefully coordinating their attacks. A snippet:
Student 1: ok. Everyone type attack toad, but DONT PUSH ENTER!
Student 2: ok
Student 3: where is the d key? oh yea. ok!
Student 4: ready!
Student 1: ok! now!
(The poor toad never had a chance)
The time went quickly and with 5 minutes left, we debriefed. Again, we discussed the differences between MUDs and interactive fiction. We talked about making a text based game, and they were full of questions; how long does it take? Can I make a mud? I want to make a mud like our school! Is it difficult? They seem especially interested in making their own game…I warned them that making a game takes a long time.
I told them we still need to explore the MUSH family of games (there is a world war II mush I might take them to in a few weeks) and then we will decide what kind of game we will make. I reminded them about the differences between single player and multiplayer, and I told them I knew more about mushing and interactive fiction than mudding, but if they really wanted to make a mud, I’d learn with them.
Next week, we will continue to play this mud, and I’ll start looking for a decent mush.
Digital image library solution?
Our art department wants to scan about 1500 35mm slides. We’ll be scanning at fairly high resolution, so each file will be around 5MB. We are looking for a digital image library - web-based - which will let us upload and categorize our pictures. We would like something like Flickr or Picassa.
We’d like casual user management (single login for the whole school, and a teacher login to edit / change upload slides). Availability is important, as is optimization. We would like to be able to download original file size (like Xanga) or a derivative thereof.
We’re a school, so inexpensive == good. As this collection of 35mm slides represents the heart of our art department, we are interested in data integrity, and long-term storage.
Please contact me here with any suggestions.
Thank you!
The Tethered Self
From New Scientist Tech (warning: weird redirect thingy) comes this fantastic article (pdf here) about the tethered self. This op-ed piece talks about some of the social aspects of things like myspace and facebook. A quote:
Our new intimacies with our machines create a world where it makes sense to speak of a new state of the self. When someone says “I am on my cell”, online”, “on instant messaging” or “on the web”, these phrases suggest a new placement of the subject, a subject wired into social existence through technology, a ethered self. I think of tethering as the way we connect to always-on communication devices and to the people and things we reach through them.
busy day teaching
Today is a professional development day at hchs. There are no students, and the faculty is busy in department meetings and taking technology professional development.
I started the day teaching naviance and then moved to blackboard. Later this afternoon, we are tackling smartboards.
It’s hard to describe how cool it is to watch seasoned teachers look at this stuff and say “Man, that is cool…how do you use this stuff?”
For me, part of getting games into the classroom is being part of the team. Getting professional development done, helping faculty with other technology projects and supoporting facult in their use of technology is a great way to help build an affective relationship with technology.
It’s a good, busy, great day.
Open Source in education
I’m an open source advocate. I think there is a place for open source in education, and I regularly look for open-source solutions to common server tasks at my school.
I’m an Ubuntu user at home (as a long time OS X guy, I’m loving ubuntu!).
Yesterday, I asked my supervisor about changing our webserver from a windows/IIS environment, to a Linux/apache setup.
She was shaking her head no before I was done with my sentence….the reason?
Support.
And you know what? I totally understand.
I’m very comfortable using and administrating Linux, but in an organization like a school, there has to be layers of support. After all, if I’m sick, or leave, I don’t want to leave the school in a lurch. Still, though, I admit to being a little dissapointed.
My long-term career goal is to be a district technology coordinator. I will make sure to hire people who are conversant in multiple operating systems, and multiple network configurations.
After all, as someone Way Smarter Than Me ©, said, “It’s not what you know now that counts, it’s what you are capable of learning as systems change”. I think that’s a good philosophy.
Update: Looks like we will be putting Open Office on all the computers in our labs! Yahoo!
The real problem with American public education?
As many of my faithful readers know (all four of you), I am very interested in the role of games in education. And while I don’t consider games to be the panacea for all our ills in education, I do think they can really push us in the right direction.
After reading and digesting The World is Flat, my wife and I started talking about education. She is European and came from a very different educational background. As we were talking about what’s wrong with American education, and American competitiveness, we tossed around some ideas, and came up with the following questions:
* Maybe our students just aren’t working hard enough?
* Maybe parents don’t make education a high-enough priority?
* Perhaps we aren’t doing the right kind of work in school (like focusing on basic skills instead of innovative thinking)?
* Maybe we are doing pretty good, and the media is tainting our perceptions with yellow-journalism.
I’m not saying our kids aren’t capable of working hard enough, but as I think about American shrinking dominance in the world (which I think is happening) I look back on our educational system, and wonder how we can do it better.
When I was living in China, I noted the kids weren’t more or less smarter than any other kid - they just worked much much harder than students I was used to working with.
I write this as a question, looking for a response and any comments.
A stampede ...
Every Friday, we have some time during lunch recess in the computer lab. Students are allowed to come up and play games, surf the net, or listen to music.
Today, we had a fifth grade in the lab doing some math problems (here), and as such, had limited seating available.
The result?
During lunch I witnessed an EXQUISITE planning process amongst 9 boys. Teams were created, different boys planned how they would take multiple routes to the computer lab to get their first, and roles were assigned in the game. They ate their hotdogs & chips at light speed, and, without waiting for lunch to end travelled over the sound barrier to the lab.
They, of course, failed to plan on the following contingencies:
1) Other people on the stairs
2) Our “don’t leave the lunch room until lunch is over” rule.
3) Each other (as they stumbled up the stairs)
4) The number of available computers (only 11 were being used, we had 18 free)
In the end, I asked them all to come to the office, and we discussed proper behavior . I’m happy to report we had no injuries, just some excited boys. There was an animated discussion and debate about what actually constituted “lunch over” and “running on the stairs” (“Mr. MacKenty, I wasn’t running, I was just moving quickly!”).
And as I was walking up the stairs, laughing out loud at the ludcridity of the situation, I was again reminded why I love working with kids.
1st graders and South Park
Hello!
So today I heard some 1st graders (7 years old) imitating some characters on South Park (and here).
So the thing of it is, I enjoy watching South Park. I think the show is satire, and regularly skewers issues that need it. It’s a nice way to end a day (it’s usually on in the late evening).
It is, however, grossly innapropriate for younger children. Without the ability to correctly discern fun from fact, kids may believe the behavior, language, and ideas of the characters are representative of normal and acceptable behavior (when in fact nothing could be farther from the truth, that\‘s one reason the show is funny).
I don’t advocate a strict “No South Park” policy; instead, I think a sensible approach to the show is in order. Parents should talk with their kids about South Park. Help them know and understand the difference, and discern fact from fiction. Discuss some of the ideas and provocative actions the show (regularly) hilights.
What do you think?