Fall-20 Programming Activities

We are heading for the last quarter of a strange and daunting year, a year with so many difficulties and challenges. Yet, whatever may be happening around we need to keep going, keep learning, and keep preparing for whatever the future may bring.

So, what’s on the plate for the Fall?

There are 3 key areas I believe will contribute to the efforts of my students and will improve their skills and experience:

  1. Algorithmic thinking: Knowledge of the keywords and syntax of a programming language is not enough. We need to train our problem solving muscles frequently. Hence, we will solve a number of challenges every week, we will discuss the different solutions and approaches and will document the details. This way by the end of the year we will solve at least 24 problems. The platform to be used for this activity is: LeetCode.
    Suggested readings:
    Grokking Algorithms An Illustrated Guide For Programmers and Other Curious People
  2. Programming Principles: We usually learn the “what” but not always the “why” things are used in a specific way. This is what we will try to achieve here. In a weekly discussion we plan to cover the basic Object Oriented Programming principles, the SOLID principles for software development, and the most important design patterns. All in a Head First way with hands on examples.
    Suggested readings:
    Clean Architecture: A Craftsman’s Guide to Software Structure and Design
    Clean Code: A Handbook of Agile Software Craftsmanship
    Head First Design Patterns
    Head First Object-Oriented Analysis and Design
    Head First Software Development
  3. Software Development: Well, this takes time so we will focus on back or front end web development mostly (but mobile or desktop development is OK, too), depending on the interests of each student getting an idea of the rest of the stack at the same time. A lot of diversity here (challenging but I like that students have an opinion on what they want to do). There will be projects in Java, C#, Python, PHP, JavaScript, and C++. The idea is to build something very simple at first in order to demonstrate techniques and ideas. Those simple projects will be documented so that future newcomers will be able to catch up. Once simple projects will be complete, new, more challenging projects will get started for each technology.

Whatever we do will be documented and the code will be maintained on GitHub. So, besides the progress and skills for each one of the participants we expect to prepare important material for the future.


On to a Problem Solving Fall 2020!

SoC2020 – Week 12

Aug, 31 – Sep, 04

Online Meetings:
1. Tuesday Sep, 01 # 12:00 – 14:00 EEST (11:00 – 13:00 CEST)
2. Thursday Sep, 03 # 18:00 – 20:00 EEST (17:00 – 19:00 CEST)
Additional meetings will be scheduled ad-hoc.

This week we are:

  1. Focusing on MovieBuildings web app with React and Laravel.
    We do several experiments to solve problems and learn how to do things (practice and experimental code here).
    The actual code of the project will be kept here.
  2. Working with several students who are learning specific technologies and tools:
    • Unreal and C++
    • Spring Boot, Androidm and Java
    • React and JavaScript
    • .NET Core MVC, Xamarin, and C#
    • Laravel and PHP
    • Django and Python

SoC2020 – Week 10

Aug, 17 – Aug, 21

Online Meetings:
1. Tuesday Aug, 18 # 12:00 – 14:00 EEST (11:00 – 13:00 CEST)
2. Thursday Aug, 20 # 17:00 – 19:00 EEST (16:00 – 18:00 CEST)
Additional meetings will be scheduled ad-hoc.

This week we are:

  1. Implementing MovieBuildings web app with React and Laravel.
    Last week we experimented with Google Maps API and completed experiments to display DB data as pins on the map (practice code here)
  2. Building Hangman with React and with JavaFX.
    React Hangman is almost ready (code here). Need to implement the canvas drawing part and retrieve words from an API.
  3. Exploring:
    • Xamarin.
    • Unreal.
    • Spring Boot.
  4. Keep solving problems on LeetCode, CodeWars, Edabit
  5. Discussing: Connolly R. (2020) “Why computing belongs within the social sciences”, Communications of the ACM, Volume 63, Issue 8
  6. Examining an implemented solution of Google Hashcode of Self-driving rides challenge in Python and Java.
  7. Reading and applying the “Design Patterns Everyday” article (in JavaScript)
  8. Building an Arduino experiment with environment sensors and servo motors.
  9. Attending Control System Cyber Security Association International – (CS)2AI event on Thursday.

SoC2020 – Week 9

Aug, 10 – Aug, 14

Online Meetings:
1. Tuesday Aug, 11 # 12:00 – 15:00 EEST (11:00 – 14:00 CEST)
2. Thursday Aug, 13 # 17:00 – 20:00 EEST (16:00 – 19:00 CEST)
Additional meetings will be scheduled ad-hoc.

This week we are:

  1. Implementing MovieBuildings web app with React and Laravel.
  2. Building Hangman with React and with JavaFX
  3. Exploring:
    • Xamarin.
    • Unreal.
    • Spring Boot
  4. Keep solving problems on LeetCode, CodeWars, Edabit
  5. Reading: Connolly R. (2020) “Why computing belongs within the social sciences”, Communications of the ACM, Volume 63, Issue 8
  6. Completing Google Hashcode of Self-driving rides challenge in Python and Java.
  7. Implementing the Singleton pattern in Java.
  8. Building an Arduino experiment with environment sensors and servo motors.

SoC2020 – Week 8

Aug, 03 – Aug, 07

Online Meetings:
1. Tuesday Aug, 04 # 12:00 – 15:00 EEST (11:00 – 14:00 CEST) General meeting
2. Thursday Aug, 06 # 17:00 – 20:00 EEST (16:00 – 19:00 CEST) General meeting(*)
(*) Thursday meeting may start later or move to Friday.
3. Ad hoc meetings for projects

Week 7 highlights:
Planned a new idea: MovieBuildings (more soon) to be implemented with React and Laravel.
Hangman on Android completed, needs some more refactoring and polish the views.
Decided to take a look at Xamarin as well.

Programming:
Keep solving problems as frequently as possible on:
LeetCode, CodeWars, Edabit

Reading Papers:
On Thursday we will discuss again:
Dominic DiFranzo D., Gloria-Garcia K. (2017) Filter bubbles and fake news. XRDS: Crossroads, The ACM Magazine for Students, Vol.23, No.3

Design Patterns:
Implementing the Decorator, Factory, and Singleton patterns.
Implementations are posted here: https://github.com/soc-2020/design-patterns

Robotics and Automation:
This week we will continue experiments with environment sensors and servo motors.

Google Hashcode:
Implementation of Self-driving rides challenge started in Python: https://github.com/soc-2020/hashcode-cars-py
A Java solution is ongoing.

Tutorials:
Tutorials will repeat again on:
Git and GitHub, Laravel, React

Projects:
a. Building “Hangman” (Android, React, and plain JavaScript app using some open API for words. Also a Python and a JavaFX version ongoing)
JS version here: https://github.com/soc-2020/hangman-js
b. “Trello Clone” stuck. Needs volunteers.
c. Simple Windows Forms app with C++ completed.
d. Started a Todo List with Laravel. Will continue during this week. https://github.com/soc-2020/laratodo
e. Starting implementation for MovieBuildings a new project using Laravel, React, and Android/Java. Join for details.

New experiments
a. Xamarin
b. Unreal

MOOCs
Ongoing: A number of students started attending the following Coursera specializations:
1. Python for Everybody (taught by the amazing Charles Severance, a.k.a Dr.Chuck)
2. Applied Data Science with Python
They are both excellent and highly recommended.

SoC2020 – Week 7

Jul, 27 – Jul, 31

Online Meetings:
1. Tuesday Jun, 30 # 12:00 – 15:00 EEST (11:00 – 14:00 CEST) General meeting
2. Thursday Jul, 02 # 17:00 – 20:00 EEST (16:00 – 19:00 CEST) General meeting
3. Ad hoc meetings for projects

Week 6 highlights:
We had an inspiring discussion with a distinguished graduate, mrs.Valbona Cucuri.
A real world project idea was discussed and will be implemented.
Started Kali Linux experiments.

Programming:
Keep solving problems as frequently as possible on:
LeetCode, CodeWars, Edabit

Reading Papers:
On Thursday we will discuss:
Dominic DiFranzo D., Gloria-Garcia K. (2017) Filter bubbles and fake news. XRDS: Crossroads, The ACM Magazine for Students, Vol.23, No.3

Design Patterns:
Implementing the Decorator, Factory, and Singleton patterns.
Implementations are posted here: https://github.com/soc-2020/design-patterns

Robotics and Automation:
This week we will make some experiments with environment sensors and servo motors.

Google Hashcode:
Implementation of Self-driving rides challenge started in Python: https://github.com/soc-2020/hashcode-cars-py
A Java solution is expected to start this week.

Tutorials:
Tutorials will repeat again on:
Git and GitHub, Laravel, React

Projects:
a. Building “Hangman” (Android, React, and plain JavaScript app using some open API for words. Also a Python and a JavaFX version started)
JS version here: https://github.com/soc-2020/hangman-js
b. We will do some experiments on “Trello Clone” (Full Stack Web Application and Mobile version in the future)
c. Building a simple Windows Forms app with C++.
d. Started a Todo List with Laravel. Will continue during this week. https://github.com/soc-2020/laratodo
e. Starting a new real-life project using Laravel, React, and Android/Java. Join for details.

MOOCs
Ongoing: A number of students started attending the following Coursera specializations:
1. Python for Everybody (taught by the amazing Charles Severance, a.k.a Dr.Chuck)
2. Applied Data Science with Python
They are both excellent and highly recommended.

SoC2020 – Week 6

Jul, 20 – Jul, 24

Online Meetings:
1. Tuesday Jun, 30 # 12:00 – 15:00 EEST (11:00 – 14:00 CEST) General meeting
2. Thursday Jul, 02 # 17:00 – 20:00 EEST (16:00 – 19:00 CEST) General meeting
3. Ad hoc meetings for projects

Alumni Speech:
On Thursday Jul, 23 15:00 (EEST) / 14:00 (CEST) we will have a discussion online with a distinguished graduate, mrs.Valbona Cucuri.

Programming:
Keep solving problems as frequently as possible on:
LeetCode
CodeWars
Edabit

Reading Papers:
For this week we read and discuss:
Dominic DiFranzo D., Gloria-Garcia K. (2017) Filter bubbles and fake news. XRDS: Crossroads, The ACM Magazine for Students, Vol.23, No.3

Design Patterns:
Observer Pattern implemented: https://github.com/soc-2020/design-patterns
Implementing the Decorator pattern
and looking at compound patterns and the Model-View-Controller Architecture.

Robotics and Automation:
Experimenting with environment sensors.

Google Hashcode:
Keep working with Self-driving rides challenge.
A Java solution and a Python solution are ongoing.

Tutorials:
Tutorials will repeat again on:
Git and GitHub
Laravel

Projects:
a. Building “Hangman” (Android, React, and plain JavaScript app using some open API for words. Also a Python and a JavaFX version started)
JS version here: https://github.com/soc-2020/hangman-js
b. We will do some experiments on “Trello Clone” (Full Stack Web Application and Mobile version in the future)
c. Building a simple Windows Forms app with C++.
d. Started a Todo List with Laravel. Will continue during this week. https://github.com/soc-2020/laratodo

MOOCs
Ongoing: A number of students started attending the following Coursera specializations:
1. Python for Everybody (taught by the amazing Charles Severance, a.k.a Dr.Chuck)
2. Applied Data Science with Python
They are both excellent and highly recommended.

SoC2020 – Week 5

Jul, 13 – Jul, 17

Several activities are proceeding very well and some others don’t. So we focus on what seemed more interesting for the participants so far.

Online Meetings:
1. Tuesday Jun, 30 # 12:00 – 15:00 EEST (11:00 – 14:00 CEST) General meeting
2. Thursday Jul, 02 # 17:00 – 20:00 EEST (16:00 – 19:00 CEST) General meeting
3. Ad hoc meetings for projects

Programming:
It is important to practice coding daily, so keep using
LeetCode
CodeWars
Edabit
And solve problems frequently. 

Reading Papers:
For this and the next week we read:
Dominic DiFranzo D., Gloria-Garcia K. (2017) Filter bubbles and fake news. XRDS: Crossroads, The ACM Magazine for Students, Vol.23, No.3

Design Patterns:
Strategy Pattern implemented: https://github.com/soc-2020/design-patterns
Implementing the Observer pattern
and studying the Decorator pattern.

Robotics and Automation:
Plan to experiment with environment sensors.

Google Hashcode:
Keep working with Self-driving rides challenge.
No valid solution so far.

Tutorials:
Tutorials will repeat again on:
Git and GitHub
Laravel

Projects:
a. Building “Hangman” (Android, React, and plain JavaScript app using some open API for words. Also a Python and a JavaFX version started)
JS version here: https://github.com/soc-2020/hangman-js
b. We will do some experiments on “Trello Clone” (Full Stack Web Application and Mobile version in the future)
c. Building a simple Windows Forms app with C++.
d. Started a Todo List with Laravel. Will continue during this week. https://github.com/soc-2020/laratodo

MOOCs
A number of students started attending the following Coursera specializations:
1. Python for Everybody (taught by the amazing Charles Severance, a.k.a Dr.Chuck)
2. Applied Data Science with Python
They are both excellent and highly recommended.

Laravel ToDo List – Part 1

Yet another todo list! Too common but it works well in order to learn a framework.

This 1st part is a very simple implementation with just one user and not any styling. The goal is students to become familiar with the Laravel framework and learn the basics of the Model-View-Controller architecture. Initial design is pretty simple and will look like this:

The code for this example is at:
https://github.com/soc-2020/laratodo – Tag: v1.0

Prerequisites:
1. A web server stack like, XAMPP, AMPPS, MAMP, Laragon, or WAMP.
2. Composer (for Windows there is an installer available)

So here we go:

1. Create a fresh Laravel project:
composer create-project --prefer-dist laravel/laravel laratodo
Then cd into the project’s folder.

2. Create a MySQL Database. Select any name you like, we called it laratodo and grant all privileges to a user on this database.

3. Edit the .env file and update the database credentials, for example:
DB_DATABASE=laratodo
DB_USERNAME=user
DB_PASSWORD=1234

4. Now the application knows how to connect to the database. So we can create the tasks table. In order to do so create a migration:
php artisan make:migration create_tasks_table --create=tasks
In the migration file created, add the required fields for name (varchar) and completed (boolean):
$table->string("name");
$table->boolean("completed")->default(false);

Then run the migrate command to create the table. Two other migrations are already there by Laravel, users and failed_jobs and will create the respective tables:
php artisan migrate

5. Create a Model for this table named Task. Models are created by default in the app directory but might be better to put them in a Models directory. So create a directory Models under app and then run the following command to create the model:
php artisan make:model Models/Task

6. The application will have the following routes for the moment:
/
/tasks/completed
/task/add
/task/complete
/task/delete
/task/undo

These routes are defined in the routes/web.php file.

7. Create a controller named TodoController. This controller is referred by all routes.
php artisan make:controller TodoController

8. Add the methods: home, task_add, task_complete, task_delete, task_undo, and tasks_completed for the respective routes.
The code for these methods can be found in the TodoController at the app/Http/Controllers directory.

9. Create the views. Here we use the blade templating system and create a template.blade.php file which contains the basic structure of any page and yields what specific content each page wants to add.
The pages home.blade.php and completed.blade.php extend the template and add their content at the respective sections.
Views are located at the resources/views directory.

SoC2020 – Week 4

Jul, 06 – Jul, 10

Online Meetings:
1. Tuesday Jun, 30 # 12:00 – 16:00 EEST (11:00 – 15:00 CEST) General meeting
2. Wednesday Jul, 1 # 12:00 – 13:00 EEST (11:00 – 12:00 CEST) Git and GitHub tutorial
3. Wednesday Jul, 1 # 13:00 – 14:00 EEST (12:00 – 12300 CEST) Laravel tutorial – Trello
Clone project
4. Thursday Jul, 02 # 16:00 – 20:00 EEST (15:00 – 19:00 CEST) General meeting
5. Friday Jul, 03 # 18:00 EEST (17:00 CEST) Hangman project

  1. Programming Weekly:
    Two problems from LeetCode to be solved:
    a. (Easy) Reverse Bits   
    b. (Medium) Restore IP Addresses    
  2. Read a Paper Biweekly:
    Keep reading:
    Resor E. (2019) Finding the Local n Locations: Working with GPS non-use in Nairobi, ACM XRDS vol.26 No.2
    – Will be discussed on Thursday Jul, 09.
  3. Head First Design Patterns:
    Chapter 2: The Observer Pattern: Keeping your Objects in the know
    We examine “Observer Pattern”.
    Goal: Build examples to demonstrate this pattern.
  4. Robotics and Automation:
    Intro to using motors with Arduino.
  5. Google Hashcode:
    We continue with this problem. This week we should complete this problem.
    Self-driving rides. In this competition problem, we’ll be looking at how a fleet of self-driving vehicles can efficiently get commuters to their destinations in a simulated city.
    Not solved during last week so we need to complete it bu Jul, 10 and proceed to the next problem.
  6. Alumni Speech:
    Will start next week (week 5).
  7. Tutorials:
    Third tutorial on Git and GitHub – Fork.
    Wednesday Jul, 01 (12:00 EEST – 11:00 CEST)
    Laravel tutorial will follow.
  8. Projects:
    a. Building “Hangman” (Android, React, and plain JavaScript app using some open API for words)
    b. Complete requirements and database design and start implementation of “Trello Clone” (Full Stack Web Application and Mobile version in the future)
    c. Building a simple Windows Forms app with C++.

PLUS
A number of students started attending the following Coursera specializations:
1. Python for Everybody (taught by the amazing Charles Severance, a.k.a Dr.Chuck)
2. Applied Data Science with Python
They are both excellent and highly recommended.