<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Project Workshops on CS446/CS646/ECE452 S26</title><link>https://lanortha.github.io/CS446-S26/docs/lectures/workshops/</link><description>Recent content in Project Workshops on CS446/CS646/ECE452 S26</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://lanortha.github.io/CS446-S26/docs/lectures/workshops/index.xml" rel="self" type="application/rss+xml"/><item><title>Stakeholder Interviews</title><link>https://lanortha.github.io/CS446-S26/docs/lectures/workshops/interview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lanortha.github.io/CS446-S26/docs/lectures/workshops/interview/</guid><description>&lt;h1 id="workshop-stakeholder-interviews"&gt;
 Workshop: Stakeholder Interviews
 &lt;a class="anchor" href="#workshop-stakeholder-interviews"&gt;#&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;At this point, you may have some rough ideas about what kind of mobile app you want to build.
Well, there are many different features you can try to support, and many non-functional requirements that you can target, but how do you know which ones are actually &lt;em&gt;useful&lt;/em&gt;?
Meeting with your stakeholders is the best way to find out.&lt;/p&gt;
&lt;p&gt;In this workshop, we will talk about tips for interviewing stakeholder to discover their needs and constraints.
We will also run practice interviews with each other.
The goal is to leave the workshop with (1) a few concrete requirements items of your app, and (2) an actionable procedure for turning your project idea into concrete requirements items.&lt;/p&gt;</description></item><item><title>Android Toolchain</title><link>https://lanortha.github.io/CS446-S26/docs/lectures/workshops/android-toolchain/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lanortha.github.io/CS446-S26/docs/lectures/workshops/android-toolchain/</guid><description>&lt;h1 id="workshop-android-toolchain"&gt;
 Workshop: Android Toolchain
 &lt;a class="anchor" href="#workshop-android-toolchain"&gt;#&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;In this workshop we will introduce the toolchain for building Android: the IDE, Android Studio; the programming language, Kotlin; and the build system, Gradle.
We will walk through the steps of setting up a hello-world Android project, meanwhile introducing these tools and providing pointers for further learning.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/pengyunie/cs446-1261-demos/tree/main/HelloWorld"&gt;Demo code for this topic&lt;/a&gt; is available on GitHub.&lt;/p&gt;
&lt;h2 id="android-studio"&gt;
 Android Studio
 &lt;a class="anchor" href="#android-studio"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id="install-android-studio"&gt;
 Install Android Studio
 &lt;a class="anchor" href="#install-android-studio"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Android Studio is the recommended IDE for building Android apps. It comes with a built-in SDK manager and emulator to help you setup a development environment. It is supported on Windows, Max, Linux, and ChromeOS. The editor experience is based on JetBrains (e.g., IntelliJ IDEA, PyCharm).&lt;/p&gt;</description></item><item><title>Jetpack Compose</title><link>https://lanortha.github.io/CS446-S26/docs/lectures/workshops/jetpack-compose/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lanortha.github.io/CS446-S26/docs/lectures/workshops/jetpack-compose/</guid><description>&lt;h1 id="workshop-jetpack-compose"&gt;
 Workshop: Jetpack Compose
 &lt;a class="anchor" href="#workshop-jetpack-compose"&gt;#&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;In this workshop, we will introduce the Jetpack Compose framework used for building Android apps.
The demo we will be following is &lt;a href="https://github.com/pengyunie/cs446-1261-demos/tree/main/NotesDemo"&gt;a minimal online Notes app&lt;/a&gt;.
You can clone this code, follow the &lt;a href="#setup-firebase"&gt;steps to setup Firebase&lt;/a&gt;, then you should be able to run the app yourself as well.&lt;/p&gt;
&lt;p&gt;This document will explain several key concepts and steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;How to create UI with Jetpack Compose, following the MVVM architecture;&lt;/li&gt;
&lt;li&gt;How to connect with Firebase, which provides various of backend services including authentication and database.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="jetpack-compose"&gt;
 Jetpack Compose
 &lt;a class="anchor" href="#jetpack-compose"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id="ui-composable"&gt;
 UI (Composable)
 &lt;a class="anchor" href="#ui-composable"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;In Jetpack Compose, each UI element is called a &lt;em&gt;composable&lt;/em&gt;, and creating UI is essentially a top-down process of writing composables that contains smaller composables.&lt;/p&gt;</description></item><item><title>Testing</title><link>https://lanortha.github.io/CS446-S26/docs/lectures/workshops/testing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lanortha.github.io/CS446-S26/docs/lectures/workshops/testing/</guid><description>&lt;h1 id="workshop-testing"&gt;
 Workshop: Testing
 &lt;a class="anchor" href="#workshop-testing"&gt;#&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;In this workshop, we will introduce the fundamentals of software testing, and then demonstrate how to write and run tests in Android (unit tests and UI tests).&lt;/p&gt;
&lt;h2 id="testing-basics"&gt;
 Testing Basics
 &lt;a class="anchor" href="#testing-basics"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Testing or Quality Assurance (QA) is the software development phase where we test software against its requirements and validate whether it meets stakeholders&amp;rsquo; expectations.
Testing help you identify and fix bugs early, before they are exposed to users and cause more serious issues.
You should start adding tests as soon as you start coding; some argue that tests should be written before the code is written, as executable specifications of the software requirements (&lt;a href="https://en.wikipedia.org/wiki/Test-driven_development"&gt;Test-Driven Development&lt;/a&gt;).&lt;/p&gt;</description></item><item><title>Continuous Integration</title><link>https://lanortha.github.io/CS446-S26/docs/lectures/workshops/continuous-integration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lanortha.github.io/CS446-S26/docs/lectures/workshops/continuous-integration/</guid><description>&lt;h1 id="workshop-continuous-integration"&gt;
 Workshop: Continuous Integration
 &lt;a class="anchor" href="#workshop-continuous-integration"&gt;#&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;In this document, we will introduce continuous integration (CI) and walk through setting up a simple CI pipeline for an Android project using GitHub Actions.&lt;/p&gt;
&lt;h2 id="introduction"&gt;
 Introduction
 &lt;a class="anchor" href="#introduction"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Continuous integration means integrating code changes into a shared main branch frequently (often many times per day) and verifying each integration with an automated build and tests.
Everyone on the team pushes to the same main branch regularly, so changes are visible and conflicts are surfaced early.
The goal is to avoid the pain of a long, chaotic integration phase at the end of a release; instead, each integration is small and easier to debug.&lt;/p&gt;</description></item><item><title>Release Engineering</title><link>https://lanortha.github.io/CS446-S26/docs/lectures/workshops/release-engineering/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lanortha.github.io/CS446-S26/docs/lectures/workshops/release-engineering/</guid><description>&lt;h1 id="workshop-release-engineering"&gt;
 Workshop: Release Engineering
 &lt;a class="anchor" href="#workshop-release-engineering"&gt;#&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;In this document, we will introduce release engineering and walk through deployment strategies that reduce risk during release, plus pointers for publishing an Android app on Google Play.&lt;/p&gt;
&lt;h2 id="introduction"&gt;
 Introduction
 &lt;a class="anchor" href="#introduction"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Release engineering is the practice of getting built software to users reliably.
CI (covered in the &lt;a href="./continuous-integration"&gt;Continuous Integration&lt;/a&gt; workshop) keeps the Integrate and Build stages healthy; release engineering focuses on the Deploy stage: how to ship a new version without excessive downtime or risk.&lt;/p&gt;</description></item></channel></rss>