October 19, 2019 Meeting

We will meet in the board room at 25N, in Geneva, at 5:45pm on October 19, 2018.

Never been there? Here is a Map

Meeting Agenda:

Meeting Announcements & Notes, Uncategorized

March 23, 2018 Meeting

Coding Tonight!

Tonight’s meeting will focus on continuing the development of the WeatherWear Web Service and the Swift app to consume the Web Service.

Notes on Swift String Interpolation Issue with Optional variables:

String Interpolation in Swift: the term “string interpolation” refers to creating a character string that pulls values out of one or more variables and combines those values with other characters to form a string. The entire expression is enclosed in double quotes and each variable within the string is preceded by a backslash and enclosed in parentheses. Example “Hello \(name)”  will print “Hello Gandalf” if Gandalf is the value in the variable name.

Optional Variables in Swift: Swift is strongly typed and insists that if there is a possibility that a variable (or constant) may not have a value at some point when the program is running, then it must be declared as optional. The variable may then  either contain a value of the declared type or may be nil.  The purpose is to avoid the null reference errors that can occur in other languages when someone tries to use a variable without a value. Declare a variable as optional by putting a question mark at the end of the type such as our WeatherForecast:

var forecast: WeatherForecast?

When using the values in an optional variable, the variable needs to be “unwrapped”, like removing it from a box. Consider a cardboard box labelled “Weather Forecast”; you can open it up to find a forecast object or you can find nothing, so you can’t treat it as if there is always a value there.  There are several ways to unwrap and to check what is in the box, but for this problem we will force unwrapping explicitly.

The Problem with String Interpolation with Optionals:

When we tried to display the temperature in either Fahrenheit or Celsius by drilling down through the many nested levels of objects in our WeatherForecast we were getting this warning and the text on screen was gibberish:

Swift String Interpolation Warning

The fix is to explicitly unwrap the values at each object level by putting an exclamation point in place of the question mark in multiple places, i.e., after each object name within the long nested object:

Swift String Interpolation Fix


March 16, 2018 Meeting

Continue working on project teams for:

  • Weather Wear Web Service in C#
  • Swift client to consume the Web service and display results

Data Model Classes so far:

  • Both of our projects already have Class definitions that we created to represent the results of the Web Service call to Weather Underground’s Web API for the forecast
  • To allow the automatic decoding of the response to map to our defined Classes, the Property names in these class definitions must match the exact names of the names in the JSON object coming from the Web API Response, including Case sensitivity
  • If a Property name conflicts with that of a reserved word in the language we are using (C# or Swift) the name must be “escaped” using a special character. An example is “in”, used for inches in the API Response
      • In C# precede the name with “@”, so use “@in”
      • In Swift enclose the name in back-ticks, ‵in‵


  • WeatherWear C#:
    • In the C# solution “WeatherWear”, the Class Library project “WWClassLib” has a Models folder to hold our Class definition(s) for the Web API data models.  These data model classes correspond exactly to the JSON object(s) returned in the API Response
    • Forecast.cs is the C Sharp file that defines the classes for the Forecast API response in a fairly complex nested class structure with multiple layers of classes within classes
    • The top-level class is named “RootObject” in our model
  • Weather Swift:
    • In the Swift solution “Weather”,  we also created a Models folder to hold our Class definitions for the Web API data models corresponding to the JSON
    • WeatherForecast.swift is the Swift file that defines the model classes, using the exact same nesting structure as in the Web API’s Response and in the WeatherWear C# solution
    • The top-level class is named “WeatherForecast” in our model

Should we use Object Inheritance to model the custom API Response?

  • The Web Service team is working on the engine to process the Response from the Weather Underground Forecast API and determine what to wear. This will then be used in our custom Web API to enhance the results from the original Response by adding one or more properties that contain the wardrobe advice
  • The Swift team will need to add a Web Service call to the custom API so the wardrobe advice can be displayed along with selected information from the forecast
  • Both teams already have the “base” Model classes defined, are able to map the “base” API response to the Model, and are displaying selected fields on the console or on the app’s screen
  • Should we agree on a new Model definition that “inherits” the original but adds the custom fields needed for Weather Wear? Both Swift and C# would use the same property names. Inheritance allows us to extend an existing Class, creating a new Class that contains all the same Properties of the base Class but adding new ones.
Meeting Announcements & Notes, Uncategorized

March 9, 2018 Meeting

Jellyvision Field Trip Debriefing

Last Friday, on a day off from school,  9 of our members enjoyed an amazing day at Jellyvision, getting an inside look at what it is like to work at this tech company in a very wide variety of different roles, technical, business, and creative. Many of the brilliant and talented people at Jellyvision gave their time to make this a very special event for all of us.  Kate from Jellyvision will be attending our meeting this Friday and we will have an open discussion about the experience and insights gained. How were you inspired?  What did you learn?

Continue Developing Web Service and Client

We will work in our Web Service and Swift teams to continue developing the Weather Wear Service and the Swift client app to send a request to the service and display results.

Some notes on what we have so far in our Swift Client:

Consuming a Web Service in Swift

Meeting Announcements & Notes, Uncategorized

February 23, 2018 Meeting

We will meet at our usual time and place: 5:45 PM at 25N Coworking

Finalize Plans for our Jellyvision Field trip!

Continue working on our multi-component Weather Wear software :

  • Review overall solution architecture: 

    • Lucid Chart diagram by Robin


  • C#/Swift Tutorial: Learn/review some object-oriented concepts

    • Classes and Objects: Properties (values) and Methods (behaviors defined in functions/procedures)
    • How are they defined and used in C#? In Swift?
    • Objects as Models for Data:
  • Web Service Team:

    • Merge Web API code with the GitHub Repo
    • Continue work on algorithm and implementation of the WeatherWear Web Service and the console app to test it
  • Swift Team:

    • MVC: Model/View/Controller design pattern
      • Model represents the data model defined in a class; we will create a model class for the Weather Forecast, and later for the WeatherWear API Response
      • View is the Presentation Layer, i.e, the screen the user sees
      • Controller: Code that handles the user input, talks to the model, handles interactions between Model and View. In Swift, we will define a Class for the controller; there will be a ViewController Class defined for each View
    • Review/Learn how to connect UI elements to code. Elements in the UI designed on the storyboard need to be connected to code in the appropriate controller:
      • @IBOutlet: in a code module, an Interface Builder Outlet is a variable that holds a reference to an element on the storyboard. Example:  our screen has a label to display a city name and we need our code to be able to access it. We add this to our view controller:

 @IBOutlet weak var cityLabel: UITextField!

      •  @IBAction: in a code module, an Interface Builder Action is a function that is connected to a user interaction with a UI element. Example: update the city label when the user clicks a button. We add a connection between the function named GetWeather and the button; then define the action inside the function

        @IBAction func GetWeather(_ sender: Any) { cityLabel.text = “Geneva”    }

    • Start setting up the code to send the Web API Request for WeatherWear
      • We will initially set up code to access the existing Weather Underground Forecast API

February 9, 2018 Meeting

This week we will continue working in our smaller teams developing the Web Service and the iOS app.

Web Service Team:

Last week the team completed the tutorial Create a Web API with ASP.Net Core MVC and Visual Studio for Mac or the equivalent version for Windows Create a Web API with ASP.Net Core MVC and Visual Studio for Windows

The team successfully completed the parts of the tutorial that got a Web Service running locally and allowed users to exercise GET requests

This week, we can use that foundation to add a new controller to the project to handle the GET request for our custom Weather Wear service that will return a JSON Response. The team can talk through design approaches and algorithms to decide what exactly the service should do and what additional components are needed. For example:

  • Should there be a Class library that will handle :
    • Sending a Request to the Wunderground API to get the weather?
    • Parsing the JSON results? How much of this is this needed here? Should the client of our API do some of this?
    • Logic to determine what our custom Response should add to the Response of the Weather Service
    • Define a Class that is a Model for our custom objects?
  • For the Controller for our Web API:
    • What parameters (if any?) should our GET Request(s) take?
    • Do we want more than one form of GET Request? Request by Zip Code? Request by City/State? Any others?? Decide on one for the initial iteration.
    • What Route name would we use? Attribute Routing in Web API
  • Take a look at Robin’s prototype code that includes a Web Service, a Class Library, and a Console App as Client

iOS Swift Team:

Last week, the team successfully completed the Hello World tutorial in the first chapter of the  book Coding iPhone Apps for Kids The link is to the book on Amazon where you can download the first Chapter as part of the free Sample. Following the tutorial, we were able to run the Hello World app on our iPhones/iPads attached via USB to the Macs running XCode. However, we did run into one problem with “provisioning” where an Apple ID used to sign the code was not getting successfully recognized as provisioned. Apple requires all Apps to be signed with a valid id in order to run on any attached device. It may just have been a slow lag time in having the credentials go through. We will take another look at it if still an issue. This is a forum that explains a bit about dealing with the issue: Forum discussion on iOS signing and provisioning issue

This week the team can work on developing the User Interface for the App using the Storyboard in XCode to add “views” to the screen. In XCode a View is an object on the screen (a more generic description would be a widget) . Some are controllers with which the user can interact (buttons, switches, text input boxes, etc.) and some are display only, such as labels. Design the view for the app, determining what is appropriate for input and display.

  • What will the Web Service need for us to send the Request? Will it be Zip Code, City/State?  Check with the Web Service team to find out their specifications for the Request. Provide the appropriate user experience for inputting the required information. Think about restricting the input to valid values. If a Zip Code is required, what can we do to make sure the user only enters digits and that it is in proper format? If we need a State is there a way to only allow selection of a valid state abbreviation?
  • When you get the results back from the Web Service API Request, how should it be displayed? What information do you want to display?
  • Do you want more than 1 screen? One for Request and one for Response? Or some other design
  • Add the appropriate views (widgets) for entering the Request and displaying the Response
  • We will take an initial look at how to hook up code to our UI:
    • Look at the ViewController.Swift class that is created automatically by the project
    • Add code in the ViewController that connects our “views” on the StoryBoard to the code; we will do this by control-dragging from the view to the code
      • @IBOutlet: Each outlet becomes a property in our ViewController class that is connected to a View (widget) on our screen. This allows us to use code to get or set the value as appropriate
      • @IBAction: This becomes a method of our ViewController class that is connected to an Action such as a Button is pressed, the screen is swiped, a gesture is made, text is entered, etc. We set up the connection here, and then write code in the method to say what should happen when the action occurs

Tutorial: This Apple Tutorial explains in detail how to connect UI Elements to Code


February 2, 2018 Meeting

Onward with our multi-component Project!

Last week we decided on an overall purpose for our project. We will create a Web service and several different Clients to consume the service. Today, we will break into our teams to work on development of these components.

  • Review discuss overall project plan: role of Web Service and what each client component will do
  • Goals: set up your development environment; decide on pairs to work together on the coding; use a tutorial to develop a sample to familiarize yourselves with the use of the IDE (Integrated Development Environment) and learn a bit about the language

Web Service Team:

  • Get started developing the Web Service in C# using Visual Studio 2017 Community Edition
  • Visual Studio Community Edition 2017  free versions for Windows or MacOS
  • This is a nice tutorial for getting started with a sample Web Service and has versions for Mac and for Windows: Create a Web API Windows version  Create a Web API MacOS version
  • We will only be using the GET Request for our project, so you can focus on that when going through the above tutorial
  • Look at the sample POC (Proof of Concept) code from Robin’s GitHub for a Web Service calling the existing Weather Service and for the console app that calls the new Web Service. See the Web Services channel in Slack
  • Decide on what the REQUEST from the Client needs to look like and what your Web Service RESPONSE will look like. What is the JSON object structure?

Swift IOS Team:

  • Get started developing an app in XCODE using the Swift programming language that will consume the Web Service, i.e. send it a REQUEST and process the RESPONSE
  • XCode: Install XCode version 9 from the App Store; it may also require you to update your operating system. This can be a very slow process as we saw last week, so if your machine isn’t set up yet, we will just share the Macs that are ready and get the others started with the installation.
  • Get Sample Chapters of Book: Coding iPhone Apps for Kids: This is a very nice book for learning Swift. Try the free sample chapters! You can get the free sample from Amazon (Chapter 1 and part of Chapter 2) and you can get Chapter 3 for free from the Book’s Web Site at NoStarch Press:
  • Create a simple Hello World project to get familiar with the IDE; we can use the example in Chapter 1 of the book for this
  • Run your sample code on your phone!: Attach your iPhone or iPad to your development Mac using the USB cable while running your project in XCode. Chapter 1 of the book explains how to do this. One additional thing that may crop up that is not in the book is that you may get a message like this when you try to run the app “Codesign wants to access key ‘access’ in your keychain”. If this appears, you need to enter your Mac login id (not your Apple id).
  • For more practice and help using the XCode IDE and Swift, Apple has a good Swift Tutorial from Apple Developer Site
  • Design your UI (User Interface): decide what types of “widgets” should be on the screen. Should there be more than 1 screen?
  • Start building the initial iteration of the UI by adding elements to the story board

Other Teams?:

  • Last week we also discussed building additional Clients, including:
    • Web Page with JavaScript to call the Web Service
    • AppInventor: Web-based IDE with coding blocks for Android devices
    • C# Console Application: simple application build in Visual Studio to call the Web Service and display a result
  • If anyone wants to work on one of those teams we will help you get  started. Or we can circle back to those in a couple of weeks….

Web Service Overview: 

In Client/Server architecture, the Web Service is the Server and the Clients can be one or more applications(Web sites, mobile app, console app, etc.) that send an HTTP REQUEST to the Web Service and receive an HTTP RESPONSE back from the Web Server. The Web Service provides an API (Application Programming Interface to receive the REQUESTS from a Client. The Client software must know the specifications for formatting and submitting the REQUEST. The Client software must parse the RESPONSE from the API call to get the data into a format that the Client can use. Our Web Service will return the data in JSON (JavaScript Object Notation).

More Resources:

Check out this tutorial for more on JSONW3C Schools JSON

Sample Code for various types of Clients calling the Weather Underground Service: Wunderground API Call Samples

Visual Studio C# Example of a Web API ClientCalling a Web API from a .NET Client


December 15, 2017 Meeting

This evening’s meeting is at 25N Coworking at 5:45 pm.  It is our last meeting of 2017.  Looking forward to seeing everyone there!


Last week’s guest speaker, Grace Haaf, had so much great information to share that we decided to dedicate the meeting to listening to her career journey in the field of tech and having a great discussion on what the future holds for our girls, today’s challenges for women in tech, and how to make a positive impact on your community by utilizing the tech skills learned in college and beyond.

Now this week, we will be working with the Snake Game, Makey Makey kits, and Object-Oriented coding.  Please see last week’s agenda below for details.


December 8, 2017 Meeting

This evening we will meet back at our usual time and place: 25N Coworking at 5:45 PM.


Guest Speaker: Grace Haaf. Grace earned a PhD from Carnegie Mellon, has done extensive work in engineering and big data as well as owning her own company and recently participating in the Democratic primary process for the IL 6th Congressional District. We are looking forward to hearing her perspective on working in tech while being an active and engaged citizen in the political process.

Techie Table Talk:  Following Grace’s presentation, we’ll hang out around our Conference Table where our FVGCC Members can share thoughts on what we just heard or discuss other ideas and interests related to tech fields, women in tech, educational opportunities, projects we may work on, upcoming events, etc.

Slither Onward with Game Development — It’s time for the Snake Game!

  • Let’s Play! Fire up the code in our Chapter 6 code directory in Cloud 9 and try out the game to get a feel for how it works
  • Makey MakeyAdd a Makey Makey input device and get creative on how to connect to the game!
  • Get a glimpse of Object-Oriented coding:  We will take a brief look at how the game uses the concept of a class and an object that represents an instance of that class. 
    • Classes and Objects are the most important concepts in Object-oriented languages like C++, C#, and Java.

Class: a template representing some type; it has properties that hold values representing state and methods (aka functions) that invoke behaviors. Example: we can define a class Snake that has properties for size, body, skin, isAlive, and more. The properties may be given initial values within the class definition

But does JavaScript have real classes?: JavaScript didn’t have an actual “class” keyword and syntax until a 2015 specification which may not be implemented yet by all Browsers; see this MDN article on JavaScript classes

Constructor Function declaration conceptually implements a class: In the Snake program (written prior to the 2015 addition of “class” to JavaScript),  the Snake variable defined by a constructor function is conceptually a class

Constructor: a function used to create a new instance of the class; it may have parameters which are values passed to the function and used to set some initial values for the object. The Snake constructor starts like:

 var Snake = function(x, y, width, height, maxSize) {

Object: an instance of a class that can have its properties set and its methods invoked in code. For example, we create a Snake instance like this:   var snake = new Snake(0, 0, canvas.width, canvas.height, 1000);


Amanda Lannert – CEO of Jellyvision

The girls of FVGCC had the privilege of web chatting with Jellyvision CEO, Amanda Lannert, as we wrapped up our first full year of coding club meetings.  Ms. Lannert generously shared her path in tech as well as providing insight and advice to our high school students.  Here is a sample of our conversation:

Ms. Lannert went to work for Leo Burnett right out of college.  She discovered early in her career that any job and any industry can be interesting if the people you work with are curious and engaged.  Who you work for and with is often more important than what you are doing in your daily work.  When looking for employment, interview your boss just as they interview you.  A good boss can turn your job into a fountain of learning that will lead to your next opportunity.  A bad boss can make even the best career seem awful.

In every position you take, it is important to build your network.  Who you know can often mean more than what you know as you move through your career.  One such contact led Ms. Lannert to a tech startup, Jellyvision, that was producing CD-ROM games. At that time, Jellyvision produced the number one CD-ROM game, Who Wants to be a Millionaire?, based off of the popular TV show and the game, You Don’t Know Jack, a trivia-based party game series.  In her first position at Jellyvision, Ms. Lannert was working with future head writers of The Colbert Report and creative types that inspired her every day.  Interestingly, the company even turned down Seth Meyers for a job at that time!  Joining Jellyvision, was important because of the people and the creative work, it wasn’t about the initial position she held, but what she learned from it.  Within six months, Ms. Lannert was Jellyvision’s President.

With this new position, came the challenge of watching Jellyvision’s profit and loss numbers going off a cliff because the company’s main business was producing CD games and the technology around gaming was rapidly changing.  As a result, at the age of 28, Ms. Lannert had the gut wrenching responsibility of shutting down the company, laying off 60 people, including herself.  They had three opportunities to keep the company, but then the tech bubble burst and the company had to close.  One of the greatest takeaways for Ms. Lannert from this experience was that, “Failure is not permanent.  You need perspective and resilience.”

Ms. Lannert’s next opportunity would find her again working with Jellyvision after the company’s founder raised money to restart the company, transitioning from the gaming industry to selling software that talks people through difficult life decisions such as health benefits, insurance, and investments/saving.  The change did not come with overnight success, the company spent a decade going sideways, but through grit and perseverance, Jellyvision now works with just under 1,000 companies, representing 91 billion dollars in insurance premium.  Companies spend significant amounts of money each year to help explain health insurance to their employees.  Jellyvision helps make this process clearer, more engaging, and as an added benefit, easy, and fun!

Ms. Lannert used the latter part of our conversation to take questions and share important thoughts on college and career:

  • She hears from a lot of women “I can’t fail.”  Ms. Lannert says you may have set backs or failures but that should be because you have big dreams.  She told the girls of FVGCC, “I want you to have more audacious dreams.  Dream to have an audacious and brave life.”
  • The girls wanted to know how a person knows how to lead a 350 person company.  Ms. Lannert shared that the ability to learn is the greatest thing you will be taught in college. Through Liberal Arts, you can learn about diverse topics so challenge yourself to take a lot of unusual classes.  In Cultural Anthropology, you can learn why people do what they do.  The skills and knowledge you pick up will lead to understanding when you are in a position to lead a team, division, or a company.
  • Have curiosity and chase what interests you!
  • Developers with great communication skills help to bridge the gap between business and development.  The better you communicate within and across groups, the more invaluable you become.
  • Start-up companies are scrappy – never stop learning.  Pick up Ruby on Rails, Java, Python.  Stay curious.  You will find yourself taking on many diverse roles in a start- up.
  • Ms. Lannert is passionate about helping women gain opportunities.  She will meet with anyone who is female.  But, she advised the girls that it is important to do their part.  Know yourself and what you want both from yourself and others.  Make it easy for people to help you.  Ask for something as simple as an introduction.  There is a world of people to help you, everywhere from Facebook to LinkedIn.  Be clear on where you are and where you are trying to go.
  • Join a Women in Tech Group or view the video series 30 Days of Genius by Chase Jarvis.
  • Most importantly, know that as a girl going into tech, you can, “Join, build, or create a business that will make a difference.”

Thanks Ms. Lannert for your time and insight!