Category Archives: Uncategorized

Gemini Feature boost – Canvas

What is that Canvas thingy? (screenshot of the prompt entry box with a new button.If you have been using ChatGPT, you may have already seen this feature there, but Gemini has added a “canvas” to it’s potential workflow.  The canvas is a separate “frame” or space on the page that gets updated as you work on whatever is in it with Gemini, without it scrolling up and away as you progress.  I’ve mostly used it for things like code, but you can totally use it for working on a draft of a regular written object, like an essay, speech, screenplay, etc.

To activate it, you will want to open https://gemini.google.com/app.  

Once there tell it what you want to work on – I’ll think of something on the simple side.  Here is my prompt:

I would like to write a small app that lets me know that everything will be alright. I want it to suggest a nice quote and also ask me if I want to hear some soothing music. Can you help me write that?

Then, I want to use the new canvas feature.  This requires that you click the button in the chat/prompt window that says “canvas”  Now my screen looks like this:

a screenshot of gemini running a "canvas". It shows the chat area in thr left and a new coding window or frame on the right.

It even has a preview mode!

screenshot of the preview mode on the code it wrote.

I’m going to ask it to change how the music is selected. At this stage it is asking me to link it to the music from my own drive. I want it to find it on the internet for me.

Can you change it so that you find the music on the internet for me? Tell me what you selected and ask if I want to hear it?

It created some code that uses an API to retrieve the music, and because I don’t feel like fussing with that I have it rewrite the code one more time to play music without the need of a API.   It tells me I really should use the API, but gives me what I wanted anyway.  lol  This is the result:

shows a screenshot of the updated canvas window and chat with gemini.

preview:  (the preview is fully functional)

preview of the code as a functional app.

It doesn’t sound like Calming ocean waves” but it is fun music.  Eventually I got sick of the synthy fun and asked it to find more appropriate music.  Here is the code.  You can copy it into a text/notepad app and save it as a html file if you want to play it in the browser on your computer

https://drive.google.com/file/d/1HtllluclKKzucMunkwVQ6kpSAaxLBtYr/view?usp=sharing

There is another feature “audio overview”.  If you’ve used NotebookLM, I’m sure you’ve already seen it.  They are bringing it to regular Gemini, but I don’t personally see it yet, so I believe it isn’t fully rolled out yet.

 

Have fun!

 

<!DOCTYPE html>
<html lang=”en”>
<head>
<meta charset=”UTF-8″>
<meta name=”viewport” content=”width=device-width, initial-scale=1.0″>
<title>Everything Will Be Alright</title>
<link href=”https://fonts.googleapis.com/css2?family=Inter:wght@400;600&display=swap” rel=”stylesheet”>
<style>
body {
margin: 0;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100vh;
background-color: #f0f0f0;
font-family: ‘Inter’, sans-serif;
overflow: hidden; /* Prevent scrollbars during animation */
}
#canvas {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
}
.container {
background-color: rgba(255, 255, 255, 0.8); /* Semi-transparent white */
padding: 30px;
border-radius: 12px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
text-align: center;
max-width: 80%;
backdrop-filter: blur(10px);
border: 1px solid rgba(255,255,255,0.3);

}
h1 {
color: #333;
margin-bottom: 20px;
font-size: 2em;
}
p {
color: #555;
font-size: 1.1em;
line-height: 1.6;
margin-bottom: 25px;
}
button {
padding: 12px 25px;
border: none;
border-radius: 6px;
background-color: #4CAF50; /* Green */
color: white;
font-size: 1.1em;
cursor: pointer;
transition: background-color 0.3s ease;
margin-top: 10px;
font-family: ‘Inter’, sans-serif;
}
button:hover {
background-color: #367c39; /* Darker green */
}
#music-container {
display: flex;
align-items: center;
justify-content: center;
margin-top: 20px;
flex-direction: column; /* Stack items vertically */
}

#play-music {
padding: 12px 25px;
border: none;
border-radius: 6px;
background-color: #007BFF; /* Blue */
color: white;
font-size: 1.1em;
cursor: pointer;
transition: background-color 0.3s ease;
margin-top: 10px;
font-family: ‘Inter’, sans-serif;
}

#play-music:hover {
background-color: #0056b3; /* Darker blue */
}

#music-controls {
display: none; /* Initially hide the controls */
flex-direction: column;
align-items: center;
margin-top: 10px;
background-color: rgba(255,255,255,0.7);
padding: 10px;
border-radius: 8px;
border: 1px solid rgba(255,255,255,0.3);
backdrop-filter: blur(5px);
}

#music-controls button {
margin: 5px;
padding: 8px 16px;
border: none;
border-radius: 6px;
background-color: #4CAF50; /* Green */
color: white;
font-size: 0.9em;
cursor: pointer;
transition: background-color 0.3s ease;
font-family: ‘Inter’, sans-serif;
}

#music-controls button:hover {
background-color: #367c39; /* Darker green */
}

#volume-control {
width: 100px;
margin: 10px 0;
}

#music-info {
margin-bottom: 10px;
font-size: 0.9em;
color: #555;
}

</style>
</head>
<body>
<canvas id=”canvas”></canvas>
<div class=”container”>
<h1>Everything Will Be Alright</h1>
<p id=”quote”>Loading a reassuring quote…</p>
<div id=”music-container”>
<p id=”music-info”>Finding soothing music…</p>
<button id=”play-music” style=”display:none;”>Play Soothing Music</button>
</div>
<div id=”music-controls”>
<button id=”pause-music”>Pause</button>
<button id=”resume-music”>Resume</button>
<label for=”volume-control”>Volume:</label>
<input type=”range” id=”volume-control” min=”0″ max=”1″ step=”0.01″>
</div>
</div>
<script>
const canvas = document.getElementById(‘canvas’);
const ctx = canvas.getContext(‘2d’);
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;

let stars = [];
const numStars = 200;

function initializeStars() {
stars = [];
for (let i = 0; i < numStars; i++) {
stars.push({
x: Math.random() * canvas.width,
y: Math.random() * canvas.height,
radius: Math.random() * 2,
color: `rgba(255, 255, 255, ${Math.random() * 0.5 + 0.5})`, // Varying opacity
speedX: (Math.random() – 0.5) * 0.2, // Subtle movement
speedY: (Math.random() – 0.5) * 0.2
});
}
}

function drawStars() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
stars.forEach(star => {
ctx.beginPath();
ctx.arc(star.x, star.y, star.radius, 0, Math.PI * 2);
ctx.fillStyle = star.color;
ctx.fill();
ctx.closePath();

// Update star position for subtle animation
star.x += star.speedX;
star.y += star.speedY;

// Wrap around edges
if (star.x > canvas.width) star.x = 0;
if (star.x < 0) star.x = canvas.width;
if (star.y > canvas.height) star.y = 0;
if (star.y < 0) star.y = canvas.height;
});
}

function animateStars() {
drawStars();
requestAnimationFrame(animateStars);
}

initializeStars();
animateStars();

window.addEventListener(‘resize’, () => {
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
initializeStars(); // Re-initialize stars on resize for proper distribution
});

const quoteElement = document.getElementById(‘quote’);
const quotes = [
“This too shall pass.”,
“Every cloud has a silver lining.”,
“You are stronger than you think.”,
“The best is yet to come.”,
“Breathe. You’re going to be okay. Breathe and remember that you’ve been in this place before. You’ve been this uncomfortable and anxious and scared, and you’ve survived. Breathe and know that you can survive this too. These feelings can’t break you. They’re painful and exhausting, but they can’t break you. You’re going to be okay.”
];

function displayQuote() {
const randomQuote = quotes[Math.floor(Math.random() * quotes.length)];
quoteElement.textContent = randomQuote;
}

displayQuote();
setInterval(displayQuote, 10000); // Change quote every 10 seconds

const playMusicButton = document.getElementById(‘play-music’);
const audio = new Audio();
const musicControls = document.getElementById(‘music-controls’);
const pauseMusicButton = document.getElementById(‘pause-music’);
const resumeMusicButton = document.getElementById(‘resume-music’);
const volumeControl = document.getElementById(‘volume-control’);
const musicInfo = document.getElementById(‘music-info’);

let isPlaying = false;
let selectedTrack = null; // Store the selected track URL

// Simulate an online search for music without an API
function searchForSoothingMusic() {
const tracks = [
{ title: “Relaxing Piano Music”, url: “https://www.bensound.com/royalty-free-music/track/rainy-day-lo-fi-jazz” },
{ title: “Gentle Rain Sounds”, url: “https://www.soundjay.com/buttons/sounds/rain-01a.mp3” },
{ title: “Calming Ocean Waves”, url: “https://www.soundjay.com/buttons/sounds/ocean-wave-01.mp3” },
{ title: “Soft Ambient Music”, url: “https://www.bensound.com/bensound-music/bensound-acousticbreeze.mp3” },
{ title: “Peaceful Flute Music”, url: “https://www.soundjay.com/buttons/sounds/flute-c-note.mp3” },
];

setTimeout(() => {
selectedTrack = tracks[Math.floor(Math.random() * tracks.length)];
musicInfo.textContent = `Found: “${selectedTrack.title}”. Would you like to hear it?`;
playMusicButton.textContent = “Play Music”;
playMusicButton.style.display = ‘inline-block’;
}, 2000);
}

searchForSoothingMusic();

playMusicButton.addEventListener(‘click’, () => {
if (selectedTrack) {
audio.src = selectedTrack.url;
musicControls.style.display = ‘flex’;

if (isPlaying) {
audio.pause();
isPlaying = false;
playMusicButton.textContent = “Resume Music”;
} else {
audio.play().then(() => {
isPlaying = true;
playMusicButton.textContent = “Pause Music”;
}).catch(error => {
console.error(“Playback failed:”, error);
alert(“Failed to play music. There may be an issue with the selected audio source.”);
isPlaying = false;
playMusicButton.textContent = “Play Music”;
});
}
} else {
alert(“No music track selected.”);
}
});

pauseMusicButton.addEventListener(‘click’, () => {
if (isPlaying) {
audio.pause();
isPlaying = false;
playMusicButton.textContent = “Resume Music”;
}
});

resumeMusicButton.addEventListener(‘click’, () => {
if (!isPlaying) {
audio.play().then(() => {
isPlaying = true;
playMusicButton.textContent = “Pause Music”;
}).catch(error => {
console.error(“Playback failed:”, error);
alert(“Failed to resume music.”);
isPlaying = false;
playMusicButton.textContent = “Play Music”;
});
}
});

volumeControl.addEventListener(‘input’, () => {
audio.volume = volumeControl.value;
});

audio.addEventListener(‘ended’, () => {
isPlaying = false;
playMusicButton.textContent = “Play Music”;
});

</script>
</body>
</html>

 

 

Brightspace: Advanced Assessments

Previously Titled: New Feature in Brightspace: Graders and Grade Release Permissions

 

Step by Step Advance Assessments

Create an assignment in Brightspace

Go to the Evaluations & Feedback side panel and expand it to see the options.

visual of side panels associated with assignements

expanded evaluation & feedback vidual

These options, depending on what you pick, reveal additional options.

Click on Select Evaluators (you can choose from the people enrolled in your course with a grading permissions role.)

picture of the select evaluators area of brightspace

Choose how evaluations will process with multiple evaluators.  You can choose between:

  • All evaluators work on the same evaluation together. Publishers release this evaluation to learners.
  • Evaluators work on their own evaluations separately. Publishers aggregate results into one final evaluation and release it to learners.

screenshot of the stated evaluation options

IF you have multiple evaluators: Allocate Evaluators to Learners (select which graders will grade which students)

 

the pull down menu lets you choose from

  • Allocate all evaluators to every learner
  • Randomly allocate 1 evaluator to every learner evenly

screenshot of the allocation methods

You can manually finese these generic selections by using the Evaluator Allocations options area and checking or unchecking students for a given evaluator.

If you have new students come in to the course, Brightspace will follow the automatic allocation method you picked for the new learner enrollments.

Choose publishers:

screenshot of the select publishers area

 

Important: It’s best to configure these settings when creating your assignment. If that’s not possible, make any necessary adjustments before receiving submissions. Once a student has been graded, these settings become locked and cannot be changed. Additionally, if submissions exist but no students have been graded, removing all evaluators will permanently disable advanced assessment features. This means grading will revert to the standard assignment process as it existed before these features were introduced to Brightspace.

 

 

notebooklm icon to indicate chat featureChat with my Advanced Assessments NotebookLM about this subject if you have any questions. You must use your SBU gmail to use this feature. (I am learning how to do this and may need to add each person who wants to use this chat. Feel free to reach out with a request if that turns out to be the case.)

 

Deep Dive by NotebookLM: Listen to the Audio here.

 

ANOTHER cool tool from Google

image of the whole Whisk desktop

labs.google/fx/tools/whisk

Drop a sample Subject, Scene and/or Style image and the AI creates a more detailed text description of each element and then recombines them.  This takes away some of the hassle of creating prompts for a new AI image.

 

Oh – and here is your audio “deep dive” from NotebookLM.

 

 

 

Are you using Federal money in your work at SBU?

close of image of a hand signing a form

 

You may have personally signed to assure that these standards are being met. The text in federal grants typically references compliance with federal accessibility laws, such as the **Rehabilitation Act of 1973 (Sections 504 and 508)** and the **Americans with Disabilities Act (ADA)**. When an individual or institution applies for or accepts federal grant money, they agree to meet certain accessibility standards. While the exact wording may vary across different grants and agencies, the agreement usually includes language to the following effect:

### Example General Language in Federal Grant Agreements:

1. **Compliance with Federal Laws:**
“The recipient agrees to comply with all applicable federal laws, including the Rehabilitation Act of 1973, as amended (29 U.S.C. §§ 794 and 794d), which prohibit discrimination on the basis of disability in programs and activities receiving federal financial assistance and require the provision of accessible electronic and information technology.”

2. **Affirmation of Accessibility Efforts:**
“The recipient certifies that all programs, services, activities, and facilities funded under this grant will be accessible to and usable by individuals with disabilities in accordance with applicable laws, regulations, and guidelines.”

3. **Continuous Accessibility Improvement:**
“The recipient affirms its ongoing commitment to advancing accessibility in its programs and services and to the development and implementation of strategies to achieve compliance with accessibility standards, including but not limited to WCAG 2.1 AA, Section 508, and ADA Title II and Title III.”

4. **Reporting and Accountability:**
“The recipient agrees to monitor compliance with accessibility requirements and to submit periodic reports as requested by the funding agency to demonstrate ongoing efforts and progress toward full accessibility.”

### Key Takeaways:
– **Federal Compliance:** The university must demonstrate compliance with Section 504 (general nondiscrimination) and Section 508 (electronic accessibility for federal funds recipients).
– **Commitment to Accessibility:** Grant recipients affirm that they are actively working toward full accessibility in all operations impacted by federal funding.
– **Accountability:** Granting agencies may require documentation or assurances demonstrating these efforts.

 

And of course, even if you yourself have not signed such an agreement, the university itself takes federal money to operate. At least for now.

Musings from the Bath

picture of a whale from the article about whales mentioned towards the bottom of the post.

There is a bit of fiction within the Star Trek universe, that really made an impact of me.  It is tied into the prime directive:

The Prime Directive in Star Trek, also known as General Order 1, is a fundamental principle of the United Federation of Planets. It prohibits Starfleet personnel from interfering with the natural development of alien civilizations. Specifically, it forbids: Interference with Pre-Warp Civilizations: Starfleet cannot reveal its presence or provide advanced technology to civilizations that have not yet developed faster-than-light (warp) travel. This is to prevent cultural contamination and ensure that societies evolve naturally. Interference in Internal Affairs: Starfleet is not allowed to intervene in the internal political, social, or economic matters of any society, even if the civilization is warp-capable.

This is a directive that is often dismissed in the heat of an episode (particularly by Captain Kirk)… but in one movie, Star Trek II: The Wrath of Khan, it shows up as a crew of a science vessel is having a damn hard time finding a planet that has absolutely zero life on it.  This concept, when we live in world view where people wonder if life exists anywhere else at all in the universe, was extremely captivating  to me.

So I sat in the bath this morning, and watched as tiny and fleeting whirling vortexes formed when i lower my arms quickly into the water.  I wondered if there was microscopic life in the water that has been doing it’s thing in this newly created body of water – maybe organizing, reproducing, eating – that had just been swirled into a chaotic storm. I wondered, if this microscopic stuff, might have thought something like “what the?” as everything was displaced around it.  Which made me think of language.

I asked Alexa (yes I have an device in my bathroom – one with a nice speaker of course): What is the most primitive life form that we know has a memory.  I asked this, because I thought that proving one has memory, proves some organization of thought – at least to me.  I’ll accept arguments of course.

So the answer is slime mold; which to be honest is a much more primitive life form than I was expecting the answer to be. Turns out that these single-celled organisms can remember their way through mazes, and anticipate changes in temperature and light if they happen in a pattern. They do not have brains or even a nervous system.  Other tiny primitive organisms that show memory include bacterias, ciliates and other more complicated, yet distinctly un “animal” like, plants and fungi.

So, AIs are using what is called a Large Language Model to appear intelligent.  These break down vast amounts of training data to analyze what tiny bit of language is the most likely bit to come next.  For example, if I write:

Hello, how are

Just as your phones some predictive text so you don’t have to text as many letter  – you can see the most likely word could be

you?

If you are told that the person speaking is a 35 year old person who works at the zoo taking care of parrots and they are speaking to there coworker as they change shifts (changing the query) you might still guess

you?

or you might think

the parrots?

Of course, GPT 4o is a blabber mouth by default so when I ask it to finish the sentence

Hello, how are

It says

you doing today? I hope you’re having a great day! 😊

When I give it the query that I mentioned about, with the speaker being a parrot caregiver at the zoo, it responds:

you? I hope your shift went smoothly—any updates or things I should know about the parrots today?

Demonstrating its politeness and verbosity.

Anyway, back to my bath, I am scrubbing up, thinking about whether I think, therefore, I am – only because I have a runaway LLM running inside of my head. Blah blah blahing at me – and I have a chemical system that remembers things.  I remember myself blabbing.  I remember conclusions I have come to.  I remember patterns.  I remember grudges and fondnesses. (sometimes I can’t quite remember why I like or dislike someone  – but I know I do.  Similarly, I might not remember what happens in a book, but I can tell you if I really liked it. This will come in handy for retirement rereads.)

I remember me.

“If You Think You Can Hold a Grudge, Consider the Crow”  New York Times Article. 

[side note – did you know you can read the NYTimes as a person with an .edu email address?]

Do Animals who use sounds to communicate use a small or midsized language model?  To be sure, a chemical one.  As we as humans may be using a chemical LLM?

Did you hear about the whales yet?

I’m going somewhere with all of this.

I promise.  But I won’t be finishing these thoughts in today’s blog.

Maybe my LLM can interact with your LLM and we can make some new ideas together?

Oh – and to tie things up a bit.  If I had never drained my bath, would something eventually have crawled out of it, wondered about the planet and started a new civilization?  We will never know, because similar to what Captain Kirk may have done, I pulled out the drain when I was finished.

Oh – and definitely check out the NotebookLM podcast generated based on this post.

 

“It’s like AI is making us look in the mirror” 

 

More reason to think about how we use the internet

I was asking GPT about a trip to the Grand Canyon as a part of a demonstration today, and I didn’t read what it actually responded at the time.  I was just closing open tabs in my browser,  and I read a bit of it before closing the tab and after the usual travel tips like use flexible travel dates, consider alternative airports, take budget airlines… the last one really got my attention:

“Clear your cookies: Some airlines and flight comparison websites use cookies to track your browsing history and raise prices if they see that you’re interested in a particular route. Clearing your cookies can help you avoid this price hike.”

I knew that my interest in a particular destination was noted – as my browser will become crowded with ads about the place I was investigating, but it never occured to me that the would start offering me higher costs just because it knows I want to go there.

That is like knowing that a car that is approaching your gas station is runing on no gas, and raising the cost just before you coast into the station.

decorative image of a plane on a runway with dollar signs on the ground.

Quick GIT instructions (but I recommend using GIT Desktop – cause I like GUIs)

title image – mostly decorative

Mini Lecture: Using Git and GitHub in the Terminal for Windows, Linux, and macOS

1. Initial Setup

  • Install Git: Ensure Git is installed.
    • Windows: Download from git-scm.com and follow the installer.
    • Linux: Run sudo apt install git (Debian/Ubuntu) or sudo dnf install git (Fedora).
    • macOS: Use brew install git if Homebrew is installed or download directly from git-scm.com.
  • Configure Git: Set your global username and email:
    git config --global user.name "Your Name"
    git config --global user.email "your.email@example.com"
  • Set Up Authentication with SSH:
    • Generate an SSH Key:
      ssh-keygen -t rsa -b 4096 -C "your.email@example.com"

      Follow the prompts and press Enter to accept the default file location.

    • Add the SSH Key to the SSH Agent:
      eval $(ssh-agent -s)
      ssh-add ~/.ssh/id_rsa
    • Add Your SSH Key to GitHub:
      1. Copy the public key to your clipboard:
        cat ~/.ssh/id_rsa.pub | pbcopy  # Use 'xclip' or manual copy on Linux
      2. Go to GitHub SSH settings and add a new SSH key.
    • Test the Connection:
      ssh -T git@github.com

2. Cloning a Repository

To work on an existing project, clone the repository:

# Replace with your repository URL
git clone https://github.com/username/repository.git

Or, if using SSH:

git clone git@github.com:username/repository.git

Navigate into the project directory:

cd repository

3. Basic Git Workflow

  • Check the status of your repository:
    git status
  • Stage changes (add files to the staging area):
    git add .  # Stages all modified files
    git add filename.ext  # Stages a specific file
  • Commit changes with a message:
    git commit -m "Your commit message"
  • Push changes to GitHub:
    git push origin main  # Replace 'main' with the appropriate branch name

4. Creating a New Repository

  • Initialize a new repository:
    git init
  • Connect to a remote GitHub repository:
    git remote add origin https://github.com/username/new-repository.git

    Or, if using SSH:

    git remote add origin git@github.com:username/new-repository.git
  • Add and commit your initial project files:
    git add .
    git commit -m "Initial commit"
  • Push to GitHub:
    git branch -M main  # Ensure the branch is named 'main'
    git push -u origin main

5. Branching and Merging

  • Create a new branch:
    git checkout -b new-branch
  • Switch between branches:
    git checkout main
  • Merge a branch into your current branch:
    git merge new-branch

6. Handling Merge Conflicts

If you encounter merge conflicts:

  • Git will mark conflicts in your files. Open the files in a text editor and manually resolve the conflicts.
  • Once resolved, stage the changes:
    git add resolved-file.ext
  • Commit the merge:
    git commit -m "Resolved merge conflict"

7. Pulling Updates

To keep your local repository up-to-date with the remote:

git pull origin main  # Replace 'main' with your branch name

8. Additional Useful Commands

  • View commit history:
    git log
  • Undo the last commit (without losing changes):
    git reset --soft HEAD~1
  • Remove files from the staging area:
    git reset filename.ext

Summary

This mini lecture has outlined essential commands for using Git and GitHub across Windows, Linux, and macOS. Remember to commit often, write meaningful commit messages, and stay consistent with Git best practices.

 

concluding slide image – mostly decorative that restates text