<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://cace.acm.org/feed.xml" rel="self" type="application/atom+xml" /><link href="https://cace.acm.org/" rel="alternate" type="text/html" /><updated>2026-08-13T17:08:18+00:00</updated><id>https://cace.acm.org/feed.xml</id><title type="html">Canada ACM SIGCSE Chapter</title><subtitle>Professional Chapter of ACM SIGCSE serving computing education in Canada.</subtitle><entry><title type="html">Chapter Exec + CACE-27 Steering Exec Meeting</title><link href="https://cace.acm.org/blog/2026/07/28/next-cace-exec-meeting/" rel="alternate" type="text/html" title="Chapter Exec + CACE-27 Steering Exec Meeting" /><published>2026-07-28T17:00:00+00:00</published><updated>2026-08-13T17:07:49+00:00</updated><id>https://cace.acm.org/blog/2026/07/28/next-cace-exec-meeting</id><content type="html" xml:base="https://cace.acm.org/blog/2026/07/28/next-cace-exec-meeting/"><![CDATA[<p>Our next executive committee meeting for the Canada ACM SIGCSE Chapter and concurrently for the CACE conference steering committee is happening Thursday, August 27 at 3:30-4:30 pm EDT. You can check out the <a href="https://docs.google.com/document/d/12U3koY-Sp-IwbvXeBu9ohb8RxeKO_m-q_mO0NJ44D80/edit?tab=t.0">draft meeting agenda</a> now.</p>

<p>Chapter members (or those interested in potential Chapter membership in future) are welcome and encouraged! We do caution that if we are wildly successful bringing in visitors, we may need to limit speaking opportunities.</p>

<p>We’ll post minutes in the <a href="https://drive.google.com/drive/u/0/folders/1eFaor3RhuEqfG6-CbqlDpJhnox9_-by1">same folder as the agenda</a> after the meeting is over.</p>

<h2>Meeting Time</h2>

<p>
  <strong id="exec-meeting-primary">2026-08-27T15:30:00-04:00</strong><br />
  <span id="exec-meeting-summary">2026-08-27T15:30:00-04:00</span>
</p>

<script>
(function() {
  var id = "exec-meeting";
  var startIso = "2026-08-27T15:30:00-04:00";
  var durationMinutes = Number(60);
  var primaryZone = "America/Toronto";
  var primaryFormat = "%weekday%, %month% %day%, %start%&ndash;%end% %abbr%";

  var primaryEl = document.getElementById(id + "-primary");
  var summaryEl = document.getElementById(id + "-summary");

  if (!id || !startIso || !primaryEl || !summaryEl || !Number.isFinite(durationMinutes)) {
    return;
  }

  var zones = [
    { tz: "America/Vancouver", fallbackAbbr: "PT" },
    { tz: "America/Edmonton", fallbackAbbr: "MT" },
    { tz: "America/Winnipeg", fallbackAbbr: "CT" },
    { tz: "America/Toronto", fallbackAbbr: "ET" },
    { tz: "America/Halifax", fallbackAbbr: "AT" },
    { tz: "America/St_Johns", fallbackAbbr: "NT" }
  ];

  var start = new Date(startIso);
  if (Number.isNaN(start.getTime())) {
    summaryEl.textContent = "Unable to parse event time.";
    listEl.innerHTML = "<li>Unable to parse timezone details.</li>";
    return;
  }

  var end = new Date(start.getTime() + durationMinutes * 60 * 1000);

  function getAbbr(date, zone) {
    var parts = new Intl.DateTimeFormat("en-CA", {
      timeZone: zone.tz,
      hour: "numeric",
      minute: "2-digit",
      hour12: true,
      timeZoneName: "short"
    }).formatToParts(date);

    for (var i = 0; i < parts.length; i += 1) {
      if (parts[i].type === "timeZoneName") {
        var value = parts[i].value;
        if (value && value.indexOf("GMT") !== 0 && value.indexOf("UTC") !== 0) {
          return value;
        }
      }
    }

    return zone.fallbackAbbr;
  }

  function formatTime(date, timeZone) {
    var value = new Intl.DateTimeFormat("en-CA", {
      timeZone: timeZone,
      hour: "numeric",
      minute: "2-digit",
      hour12: true
    }).format(date);

    return value.replace(" a.m.", " am").replace(" p.m.", " pm");
  }

  function getDateParts(date, timeZone) {
    var parts = new Intl.DateTimeFormat("en-CA", {
      timeZone: timeZone,
      weekday: "long",
      month: "long",
      day: "numeric"
    }).formatToParts(date);

    var result = { weekday: "", month: "", day: "" };

    for (var i = 0; i < parts.length; i += 1) {
      if (parts[i].type === "weekday") {
        result.weekday = parts[i].value;
      } else if (parts[i].type === "month") {
        result.month = parts[i].value;
      } else if (parts[i].type === "day") {
        result.day = parts[i].value;
      }
    }

    return result;
  }

  function buildPrimaryLine() {
    var primaryZoneConfig = { tz: primaryZone, fallbackAbbr: "ET" };
    var abbr = getAbbr(start, primaryZoneConfig);
    var startText = formatTime(start, primaryZone);
    var endText = formatTime(end, primaryZone);
    var dateParts = getDateParts(start, primaryZone);

    return primaryFormat
      .replace(/%weekday%/g, dateParts.weekday)
      .replace(/%month%/g, dateParts.month)
      .replace(/%day%/g, dateParts.day)
      .replace(/%start%/g, startText)
      .replace(/%end%/g, endText)
      .replace(/%abbr%/g, abbr);
  }

  var summaryParts = [];

  for (var i = 0; i < zones.length; i += 1) {
    var zone = zones[i];
    var abbr = getAbbr(start, zone);
    var startText = formatTime(start, zone.tz);
    var endText = formatTime(end, zone.tz);

    summaryParts.push(startText + " " + abbr);
  }

  primaryEl.innerHTML = buildPrimaryLine();
  summaryEl.innerHTML = summaryParts.join(" | ");
})();
</script>]]></content><author><name></name></author><category term="meetings" /><summary type="html"><![CDATA[The Chapter's next executive committee meeting (combined with CACE-27 Steering meeting) is coming Thu 2026/08/27 3:30-4:30 pm EDT. Visitors welcome!]]></summary></entry><entry><title type="html">First Quarterly Zoom Get-Together: 2026/08/13 2-3:30 EDT</title><link href="https://cace.acm.org/blog/2026/07/28/quarterly-zoom-get-together/" rel="alternate" type="text/html" title="First Quarterly Zoom Get-Together: 2026/08/13 2-3:30 EDT" /><published>2026-07-28T06:00:00+00:00</published><updated>2026-08-13T17:07:49+00:00</updated><id>https://cace.acm.org/blog/2026/07/28/quarterly-zoom-get-together</id><content type="html" xml:base="https://cace.acm.org/blog/2026/07/28/quarterly-zoom-get-together/"><![CDATA[<p>Our CARE Chairs (Community and Remote Experience), Kemi Ola and Jacqueline Smith, are launching our first CARE Package event to help build community across Canada.</p>

<h2>Event at a Glance</h2>

<p>
  <strong id="care-zoom-primary">2026-08-13T14:00:00-04:00</strong><br />
  <span id="care-zoom-summary">2026-08-13T14:00:00-04:00</span>
</p>

<script>
(function() {
  var id = "care-zoom";
  var startIso = "2026-08-13T14:00:00-04:00";
  var durationMinutes = Number(90);
  var primaryZone = "America/Toronto";
  var primaryFormat = "%weekday%, %month% %day%, %start%&ndash;%end% %abbr%";

  var primaryEl = document.getElementById(id + "-primary");
  var summaryEl = document.getElementById(id + "-summary");

  if (!id || !startIso || !primaryEl || !summaryEl || !Number.isFinite(durationMinutes)) {
    return;
  }

  var zones = [
    { tz: "America/Vancouver", fallbackAbbr: "PT" },
    { tz: "America/Edmonton", fallbackAbbr: "MT" },
    { tz: "America/Winnipeg", fallbackAbbr: "CT" },
    { tz: "America/Toronto", fallbackAbbr: "ET" },
    { tz: "America/Halifax", fallbackAbbr: "AT" },
    { tz: "America/St_Johns", fallbackAbbr: "NT" }
  ];

  var start = new Date(startIso);
  if (Number.isNaN(start.getTime())) {
    summaryEl.textContent = "Unable to parse event time.";
    listEl.innerHTML = "<li>Unable to parse timezone details.</li>";
    return;
  }

  var end = new Date(start.getTime() + durationMinutes * 60 * 1000);

  function getAbbr(date, zone) {
    var parts = new Intl.DateTimeFormat("en-CA", {
      timeZone: zone.tz,
      hour: "numeric",
      minute: "2-digit",
      hour12: true,
      timeZoneName: "short"
    }).formatToParts(date);

    for (var i = 0; i < parts.length; i += 1) {
      if (parts[i].type === "timeZoneName") {
        var value = parts[i].value;
        if (value && value.indexOf("GMT") !== 0 && value.indexOf("UTC") !== 0) {
          return value;
        }
      }
    }

    return zone.fallbackAbbr;
  }

  function formatTime(date, timeZone) {
    var value = new Intl.DateTimeFormat("en-CA", {
      timeZone: timeZone,
      hour: "numeric",
      minute: "2-digit",
      hour12: true
    }).format(date);

    return value.replace(" a.m.", " am").replace(" p.m.", " pm");
  }

  function getDateParts(date, timeZone) {
    var parts = new Intl.DateTimeFormat("en-CA", {
      timeZone: timeZone,
      weekday: "long",
      month: "long",
      day: "numeric"
    }).formatToParts(date);

    var result = { weekday: "", month: "", day: "" };

    for (var i = 0; i < parts.length; i += 1) {
      if (parts[i].type === "weekday") {
        result.weekday = parts[i].value;
      } else if (parts[i].type === "month") {
        result.month = parts[i].value;
      } else if (parts[i].type === "day") {
        result.day = parts[i].value;
      }
    }

    return result;
  }

  function buildPrimaryLine() {
    var primaryZoneConfig = { tz: primaryZone, fallbackAbbr: "ET" };
    var abbr = getAbbr(start, primaryZoneConfig);
    var startText = formatTime(start, primaryZone);
    var endText = formatTime(end, primaryZone);
    var dateParts = getDateParts(start, primaryZone);

    return primaryFormat
      .replace(/%weekday%/g, dateParts.weekday)
      .replace(/%month%/g, dateParts.month)
      .replace(/%day%/g, dateParts.day)
      .replace(/%start%/g, startText)
      .replace(/%end%/g, endText)
      .replace(/%abbr%/g, abbr);
  }

  var summaryParts = [];

  for (var i = 0; i < zones.length; i += 1) {
    var zone = zones[i];
    var abbr = getAbbr(start, zone);
    var startText = formatTime(start, zone.tz);
    var endText = formatTime(end, zone.tz);

    summaryParts.push(startText + " " + abbr);
  }

  primaryEl.innerHTML = buildPrimaryLine();
  summaryEl.innerHTML = summaryParts.join(" | ");
})();
</script>

<p>Zoom URL: <a href="https://ubc.zoom.us/j/64504062584?pwd=v0eIDu8hVWlSU8WYhmuMWac8CcfL0O.1">https://ubc.zoom.us/j/64504062584?pwd=v0eIDu8hVWlSU8WYhmuMWac8CcfL0O.1</a><br />
Meeting ID: 645 0406 2584<br />
Passcode: 660247</p>

<p><img src="/assets/images/posts/2026-07-27-quarterly-zoom-get-together/flyer_fixed.png" alt="Quarterly Zoom Get-Together flyer" /></p>

<h2 id="what-to-expect">What To Expect</h2>

<p>This is a relaxed, low-pressure check-in with colleagues from across the country. Bring your cat jokes, favorite emojis, fall teaching goals, and any hopes or anxieties about the new school year. We’ll share updates, swap ideas, and make space for whatever is on your mind.</p>

<h2 id="other-ways-to-join-in">Other Ways to Join In!</h2>

<p>The CACE organization is now officially recognized as the Canada ACM SIGCSE Chapter. If you have not joined yet, <a href="/membership">join here</a>.</p>

<p>Meanwhile, the CACE-27 conference is sponsored by CS-CAN rather than ACM, SIGCSE, or the Chapter…
but we’re still very excited about the conference!
We encourage you to submit and attend. The CFP for the conference is now open: <a href="https://cscan-infocan.ca/cace-2027/">https://cscan-infocan.ca/cace-2027/</a></p>]]></content><author><name></name></author><category term="care-package" /><category term="news" /><summary type="html"><![CDATA[Join our first quarterly CACE Zoom get-together on Thursday, August 13, 2:00-3:30 pm EDT.]]></summary></entry><entry><title type="html">Annual Election Meeting at CACE-27</title><link href="https://cace.acm.org/blog/2026/07/20/cace-27-annual-election-meeting/" rel="alternate" type="text/html" title="Annual Election Meeting at CACE-27" /><published>2026-07-20T19:00:00+00:00</published><updated>2026-08-13T17:07:49+00:00</updated><id>https://cace.acm.org/blog/2026/07/20/cace-27-annual-election-meeting</id><content type="html" xml:base="https://cace.acm.org/blog/2026/07/20/cace-27-annual-election-meeting/"><![CDATA[<p>Our current slate of officers serving for one year was selected by the founding group of the Chapter. We’re looking forward to moving to membership-driven elections!</p>

<p>Every year, the Chapter holds elections for officers.
Our first election meeting will be during the 
CS-CAN | INFO-CAN 1st Annual Conference of the Canadian Assocation for Computing Education conference, <a href="https://cscan-infocan.ca/cace-2027/">CACE-27</a>, May 13–14 2027 at the University of Toronto, Mississauga.
We encourage members to submit to the conference, review, and attend!
However, all members will be welcome at the Chapter meeting held at the conference
in-person (regardless of registration), and we will have online attendance available.
We are also exploring online advance voting.</p>

<p>We will announce more details over the coming months, including 
the exact date/time,
how to attend and vote online if desired,
the positions available for elections and their terms,
how to run for office,
and the slate of candidates.
To avoid changing the entire team at one time in future,
we anticipate multi-year terms for officers,
with initial terms staggered in length.</p>]]></content><author><name></name></author><category term="meetings" /><category term="election" /><category term="news" /><summary type="html"><![CDATA[The Chapter's annual election meeting will be both online and in-person at the CACE-27 conference.]]></summary></entry><entry><title type="html">Welcome to the Canada ACM SIGCSE Chapter Site</title><link href="https://cace.acm.org/blog/2026/07/20/welcome-to-the-chapter-site/" rel="alternate" type="text/html" title="Welcome to the Canada ACM SIGCSE Chapter Site" /><published>2026-07-20T00:00:00+00:00</published><updated>2026-08-13T17:07:49+00:00</updated><id>https://cace.acm.org/blog/2026/07/20/welcome-to-the-chapter-site</id><content type="html" xml:base="https://cace.acm.org/blog/2026/07/20/welcome-to-the-chapter-site/"><![CDATA[<p>Welcome to the new website for the Canada ACM SIGCSE Chapter.</p>

<p>This site is the home for chapter updates, announcements, and resources for people involved in computing education in Canada.</p>

<p>Over time, we will post:</p>
<ul>
  <li>Meeting and event announcements</li>
  <li>Chapter opportunities</li>
  <li>Highlights from members and partner communities</li>
</ul>

<p>If you have content ideas, please contact one of the chapter officers on the About page.</p>]]></content><author><name></name></author><category term="news" /><summary type="html"><![CDATA[We are launching our chapter website to share updates, events, and opportunities for computing educators across Canada.]]></summary></entry></feed>