Big Data and Blockchain (BDB) course (code 25418)

Lecturer: Dr. Paolo Coletti Paolo.Colettiunibz.it . Office E203 - Office hours: www.paolocoletti.it/timetable
Website: www.paolocoletti.it/bigdata

Lesson of Thursday 2nd April 2020

The lesson of Thursday 2nd April 2020 will be an asynchronous lesson, which means that you have to watch the video on Cryptocurrencies and blockchain technology that I have already prepared. You can watch it before the lesson. I will be online during the lesson time in case you have questions. You do not need to show up if you do not have anything to ask, I will record the questions and answers.

This part will be asked at the final exam. However, the next lesson on Monday 6th April will use some concepts that I explain in this video, so please watch it at least before Monday.

https://youtu.be/sAgk-QeUofI

First midterm

Solution of Python 10 exe

Here you have . It is not a good idea to look at it before doing all the exercises yourself.

Midterm training exercises without solution UPDATE 24/3 18:39 and with solution

Here you have a ton of training exercises (I updated them on 24/3 18:39 fixing some minor errors and adding other exercises at the end). For now you can do only the ones which do not mention the dictionary. After Wednesday's lesson you will be able to do all of them.

They are without solution, as for this kind of subject the approach that we all use for mathematics "watch the solution and learn how does it work" is not optimal. Incredibly, you learn much more writing wrong code and finding the problem. Later on, when you ask for them, I shall publish the solutions.

There is an indication of the difficulty level. To me it is very difficult to estimate it, so if you think that some numbers are completely wrong compared to others write to me to give me an indication on how to calibrate the difficulties.

And here you find the solution.

Organization

The official session is 30 March 14-16. The alternative session is 31 March 10:30-12:30.

It will be done at home by yourself. You do not need VPN, all the files are sent via email. Topics are up to dictionaries and tuples. You shall receive training exercises, we are preparing them.

Timetable

Monday 30 at 14:00: Boninsegna, Brugnera, Cantore, Cason, Da Ros, Dall'Olio, Dalpiaz, Ennemoser, Forti, Gamper, Hendrix, Holl, Leonardi, Paolazzi, Sicchirollo
Tuesday 31 at 10:30: Andjelic, Bertoli, Bontorin, Comper, D'Antino, Dobenko, Eisendle, Gagno, Hölzl, Marabese, Moresco, Oselini, Pasqualini, Pesce, Unterthiner, Venker, Vettori, Zenatti

Whatsapp (if you have not received my Whatsapp test message, write me an email!): Boninsegna, Brugnera, Cantore, Cason, Comper, Dobenko, Eisendle, Gagno, Gamper, Leonardi, Venker, Unterthiner, Da Ros, Sicchirollo, Dall'Olio, D'Antino, Ennemoser, Hölzl, Andjelic, Zenatti, Moresco, Bontorin, Forti, Oselini, Pesce,
Skype if Whatsapp fails: Eisendle, Leonardi, Forti
Teams on another device: Dalpiaz, Holl, Paolazzi, Marabese, Bertoli, Vettori, Pasqualini.

If you want to change something, just write me. However, moving you to 31 only in case of strong motivations.

Anti-cheating measures.

If you do not send me a phone number for Whatsapp and you do not send me a skype name and you do not send me an email for facetime, I take for granted that you want to be called on Teams using your unibz account. Pay attention that this latter solution does not work if you use Teams on the same computer on which you are doing the exercises, as I would like to see your face and your screen (and not a screenshot). In this case, try to install Teams on your smartphone.

Sorry for the radical tools, but I was not able to come up with any other solution to check that you do not send your assignment by email to another person and receive it done. I will do the equivalent of what I do in class during a traditional midterm, i.e. walk around your tables and look at what you are doing.

You will need to have a smartphone or tablet or computer (not the one on which you are doing the midterm) switched on and close to you. I must be able to make a VIDEOcall with you on:
- WhatsApp (you need to tell me your phone number, I shall delete it immediately after the midterm)
- Skype (you need to tell me your Skype username and I would like to make a brief test) on smartphone or another computer
- Facetime (you need to tell me your email address and I would like to make a brief test) on smartphone or another computer
- Teams (I would like to make a brief test) on smartphone or another computer
- another videochat if I am able to use it without installing things
You may use another person's device if you prefer to (your grandma's telephone...).
During the midterm I shall occasionally videocall you and ask you to show me your face and your monitor. I will consider this extra lost time when determining the midterm's duration.

Lesson of Wednesday 25 March

Lesson was about the final part of Python08 and Python10.

On Friday 27 I will be available to solve and comment exercises on request.

Assignment are for Monday 6 April (to be submitted 24 hours before the beginning of the office hour), but I suggest to do them before the midterm, obviously:
1. the last 4 questions of Python08exe, in the section Lists are objects
2. all Python10exe

Please send it to the new email address dedicated to assignments

Lesson of Monday 23 March

Lesson was about Python08 up to difference between variable and object excluded. Next lesson we will finish Python08 and do Python10.

On Friday 27 I will be available to solve and comment exercises on request. Assignment are for Friday 27 (to be submitted 24 hours before the beginning of the office hour), but I suggest if you have time to do them for Wednesday because we will talk about dictionaries which are similar to lists:
1. try to do alone without looking at the video the CountStartWith in Python08
2. all Python08exe, except the last section "Lists are objects". Please redownload the Python08exe file as I updated it.

Please send it to the new email address dedicated to assignments

Lesson of Friday 20 March

Unfortunately in the recording the video does not show up! You find the code written in class here below or here. The code of the previous exercises is instead here.

Lesson was about Python07, only the easy approach.

The code is here:

def isDateBefore(sy,sm,sd,ey,em,ed): 
    if sy < ey:
        return True
    elif sy > ey:
        return False
    elif sm < em:
        return True
    elif sm > em:
        return False
    elif sd < ed:
        return True
    elif sd > ed:
        return False
    else:
        return False

def isLeapYear(y):
    if y%4!=0:
        return False
    elif y%100!=0 or y%400==0:
        return True
    else:
        return False
    
def numberOfDays(m,y): 
    if m==2:
        if isLeapYear(y):
            return 29
        else:
            return 28
    elif m==11 or m==4 or m==6 or m==9:
        return 30
    else:
        return 31
    
def advanceByOneDay(y,m,d):
    if d < numberOfDays(m,y):
        d+=1
    elif m < 12:
        d=1
        m+=1
    else:
        d,m=1,1
        y+=1
    return y,m,d

def differenceDays(sy,sm,sd,ey,em,ed):
    result=0
    while isDateBefore(sy,sm,sd,ey,em,ed):
        result+=1
        sy,sm,sd=advanceByOneDay(sy,sm,sd)
    return result

Assignment for Monday 23 (to be submitted 24 hours before the beginning of the lesson):
1. calculate the complexity of this algorithm in terms of additions as a function of the output (yes, it is strange, as a function of the output and not of the input)
2. calculate the complexity of this algorithm in terms of comparisons (estimate it approximately) as a function of the output
3. build a procedure which calculates the difference in days using the adult's approach (more efficient but difficult to write) in case two dates have the same year and same month
4. build a procedure which calculates the difference in days using the adult's approach (more efficient but much difficult to write) in case two dates have the same year but any month and any day. I know that this procedure is already in the video, but watching the video will spoil your exercise. Calculate its complexities in terms of additions and in terms of comparisons (estimate it)
5. optional and very difficult: build a procedure which calculates the difference in days using the adult's approach for any two dates. This is really tough, as you have to nest the problems of the years with the problems of the months with the problems of the days...
6. not optional: watch the video Python08. Really watch it (and not at 2x while falling asleep...), it will make your life easier in the next lesson.

Questions

A. Is the algorithm you ask the same as we did in class?

The algorithm we wrote in class is the algorithm that children use. I hope that you are never going to use this method to manually count how many days are there between two dates, because if the two dates are at several years of distance it will take a lot of time!
The approach that an adult will take is something very different. An adult will first of all check whether the year and month are the same and this is the very easy case in which he will simply calculate the difference of the days.
If the year is the same but the month is different an adult will calculate the number of days up to the end of the month, then add up the days of the months in the middle, then the remaining days in the arrival month.
If also the year is different, it is a mess!
Obviously if you still insist in not taking out your pencil and paper and not doing one/two examples on paper, you will have a hard time figuring out how to write the code.

B. What do you mean by complexity as a function of the OUTPUT ?

If you try to calculate the complexity of that program you will see that it depends on how many days of difference are between the two dates, which is the output.
So you can conveniently express it as a function of how far away are the two dates. Expressing it as a function of the input is instead a real mess.

C. I cannot figure out how to calculate complexity

Let's consider this procedure of Python05bis

def showStars(rows):
    if type(rows)!=int or rows<1:
        print "bad words"
    else:
        i=1
        while(i<=rows): # rows comparisons of int
            print "* "*i # rows int multiplications
            i=i+1 # rows int additions
# procedure finished


Which operations it is doing?

A comparison at the beginning. This comparison is performed only once
A comparison for the while condition. This comparison is performed for i=1, for i=2, for i=3.... at the end it will be performed rows-times
Then a multiplication of a string by an int (we can imagine this as an int multiplication.
How many times is it performed? Same as above, rows times
Then an addition, which again is performed rows times.

At the end we have rows+1 comparisons, rows additions and rows multiplications.

So complexity is rows multiplications.
It means that if you pass as input argument a very large number, the algorithm will take a very large time.




Let's consider printMultiplicationTable

def pmt(N):
    i=1
    while i<=N:
        j=1
        while j<=N:
            print i," x ",j," = ",i*j
            j=j+1
        i=i+1

Which operations is it doing?
A comparison in the first while. This comparison is performed N times
Another comparison on the internal while. This comparison is performed N times IN THIS WHILE but since it is inside the external while everything is repeated N times. So at the ned it is performed N by N times.
A multiplication in the internal while. Again, this is performed N times in the entire internal while, which itself is repeated N times. So that multiplication is done N*N times.
An addition in the internal loop. Same thing, done N*N times
Finally an addition which is only in the external loop, so only N times.

At the end we have N*N int multiplications, N+N*N int additions, N+N*N int comparisons.
Since the multiplication is the heaviest, when N becomes very very big N*N and N+N*N become similar and thus complexity is N*N int multiplications


If for example we had N int multiplications and N*N int addition, then N*N would become much bigger than N and thus complexity would be measured in terms of int additions and be N*N int additions.

Second midterm

  1. after the first midterm the second part of the course is easier, as we will do only financial applications. So you will have less time-consuming assignments, as they will be more straightforward
  2. it is so easy, that I decided not to do the second midterm. You will be evaluated for that part only on your assignments. So for the second part, do them to the best of your abilities.

Lesson of Monday 16 March

Lesson was abou review of Python05, supplementary

Assignment for Friday 20 (to be submitted 24 hours before the beginning of the lesson):
1. draw a flowchart for factorial
2. all Python05exe new version (see extra exercises below)
3. draw a flowchart for the second procedure of Python05exe (the one marked as #difficult)
4. draw a flowchart for your printMultiplicationTable
5. think how you would solve the problem of calculating the difference in days between two dates. Ask the same thing to your 11-years old brother and to your mother and take your conclusions on the efficiency of the solutions (and on who is closer to you in the family). You do not need to write this in the assignment but do it really.

Please send it to the new email address dedicated to assignments

Extra exercies added to Python05:

Build a procedure  showNumbers  that takes a parameter called  N . It should print all the numbers between 1 and  N  with a label to identify the even and odd numbers.
For example, if  N  is 4, it should print:
1 ODD
2 EVEN
3 ODD
4 EVEN

You probably have build a procedure which does N comparisons to check whether the number is even or odd. Suppose that you do not know about operator  % . Rewrite the procedure in such a way that it produces the same output but never does any comparison to check whether a number is even or odd.
You know that 1, the number you start with, is odd. Then you know that the next one is even. Then again one odd and one even. You can use this information to make two pritings at the same time without any need to check odd or even.    

DIFFICULT
Write a procedure that returns the sum of multiples of X between 0 and N.
This is how this exercise would be written in any class for to-be computer scientists :-)

I instead write it like this

Write procedure  sumMultiples  that takes as parameter  N  and returns the sum of multiples of 3 between 0 and  N . For example, if  N  is 20, it should return 63, which is the sum of 3, 6, 9, 12, 15, 18.
Strategy: you obviosuly have to set up a loop which goes from 0 to N and a variable in which you are going to store the sum set originally to 0. In this loop, you check whether the considered number is divisible by 3 and if it is you add it to sum.

After having done it, modify the procedure in such a way that it works also with a generic number instead of 3. Your procedure should accept two parameters,  N  and  divisor  and returns the sum of multiples of  divisor  between 0 and  N .

Lesson of Friday 13 March

Lesson was about Python05 all.

Assignment for Friday 20 (to be submitted 24 hours before the beginning of the lesson):
1. draw a flowchart for factorial
2. all Python05exe
3. draw a flowchart for the second procedure of Python05exe (the one marked as #difficult)
4. draw a flowchart for your printMultiplicationTable

Please send it to the new email address dedicated to assignments

IMPORTANT NEWS: ASSIGNMENTS POSTPONED

Lesson of Wednesday 11 March

Lesson was about Python04 all.

Assignment for Friday (to be submitted 24 hours before the beginning of the lesson): draw a flowchart for these programs/procedures. Draw it based on your own code, even if it is wrong!
- Assume A is a float variable containing a float number with several digits after the dot. Build a Python code which prints A rounded down to two decimal digits. For example, if A were 67.34563 the program should print 67.34
- median (only procedure)
- isLeapYear (only procedure)
Please send it to the new email address dedicated to assignments

Next lesson Python 05 and starting Python 07 (instead of Python 06 which for the moment we skip!).

Lesson of Monday 9 March

Lesson was about Python03 all.

Assignment for Wednesday (to be submitted 24 hours before the beginning of the lesson). Python03exe all. Please send it to the new email address dedicated to assignments

Next lesson flowcharts (Python04) and if we have time we start Python05.

I am planning to do the midterm on the lesson of Monday 30 March, with an alternative on another day close-by. I hope that unibz will be open for that day.... but I am afraid it won't and I am studying a strategy to make it online.

Lessons are now only online... it's CoronaTime!

This lesson (and the next ones) will be only online, as university is closed. The university suggests to use Microsoft Teams. Here a small tutorial on how to install it (if you do not have it already) and how to use it: https://youtu.be/ZYDNpq_t3EE
I have already inserted in the BDB team all the students who have this course in the study plan. If you are not, the team code is jc4t317 (and please check your study plan....)
It is a good idea to check that it works well before the lesson's scheduling. The lesson can be attended in your browser or using Microsoft Teams (which is in Office 2019, freely available for unibz students see below the FAQ). During the lesson you will be able to talk (I suggest to switch your mic off when you do not want to talk with the class) and to write in the public chat. Microsoft Teams is also available as a smartphone app, which is a good idea if you are using your computer to work on the Jupyter file and don't have a second computer.

Lesson of Wednesday 4 March

Lesson was about: Python02 from strings up to the end, Python03 the very beginning up to "Very important remarks on often forgotten things". The lesson in class is avaiable on Youtube: here the homework correction and here the lesson

Assignment for Monday (to be submitted 24 hours before the beginning of the lesson). Python02exe from "Turn 99 into a float" up to the end. You probably have already done the first exercises, but please check that they are correct now that we have done those things in class. Python03exe the very first exercise.

Lesson of Monday 2 March

Lesson was about: course introduction (this webpage), lecturers and students presentations, installing Anaconda (see video 01 below), video Python 02 up to the usage of single and double quotation for strings.

Assignment for Wednesday (to be submitted 24 hours before the beginning of the lesson). Python02exe up to "Turn 0.99 into an integer." excluded (sorry for whom has already done exercises which were not done in class, but it is rather difficult for me to decide the exercises when the lesson does not correspond with the video). I remind you that you can do it in groups of one or two. If you chose to do it with another person, the next assignment cannot be done with the same person (either alone or with another one), we encourage poligamy here.

Course

Prerequisites

In order to correctly follow this course each student is required previous knowledge on these topics:

Course content

How to study for this course

This course is different from the majority of courses you are used to. This course is much more technical than theoretical and it is strictly sequential. This means that you have to adapt your study strategy:
1. First of all, you either attend all the lessons (or compensate for missing lessons watching immediately the corresponding videos or reading the book) or it is really not worth coming to the next one, since you will have a hard life understanding the next topic.
2. After each lesson you must repeat slowly on your own everything done in class in order to be sure to have fully grasped the explained concepts before the next lesson.
3. Needless to say it, do the exercise without copying them from your colleagues.
4. If you feel that writing programs and problem solving are not your best skills, it is better that before each lesson you watch the next videos so you will be able to grasp also the little concepts explained in the lessons.

For the exam the main difference with respect to other courses is that you have to train much more than studying. The content of this course is easy and does not need extensive study, however it is only with practice that you become skilled enough and know immediately what to do without wasting time.

Exam

Exam is split in four parts. The grade is the weighted average of the four parts, based on how many lessons were dedicated to each of them.

1. Theoretical questions on cryptocurrencies and blockchain technology
2. Practical exercises on Python
3. Practical exercises on financial applications with Python
4. Practical exercises on smart contracts on ethereum blockchain

Coursework

Attending students have the opportunity to skip parts 2, 3 and 4 of the exam with three mid-terms. Each mid-term is completely independent and will let you skip that part of exam. The mid-term grade will be your grade at the exam. If you believe that a grade in a certain mid-term is too low for you, write an email to dr. Coletti at least 7 days before the exam and you will be able to do the exam on that part.

In order to be allowed to participate in the mid-terms you must submit all the home exercises that are assigned after each lesson by email to not later than 24 hours before the next lesson. You can do them alone or in a group of two, but your partner may not be the same of the previous homework. If they are not done properly or contain severe mistakes, you will receive immediate feedback from dr. Coletti. If you submit them early and not at the last minute and they are not sufficient, you can get the possibility to redo them after the feedback. Home exercises will be evaluated and you need to do them in a decent way to be allowed to participate in the mid-term, even though the home exercises grade will not be considered for your exam's grade.

Do not:
- search with Google and come up with a solution which uses techniques and tools not explained in class. All exercises are designed to be solved with what is explained in class and you cannot use other tools to make your job easier, it is not useful for you;
- copy the assignment from your colleagues (excluding obviously the colleague with whom you are working, if you chose to work as a group). I will have to inform the Dean if this happens (yes, in the past it happened...);
- send your code to your colleagues. It is fine to help other students and even to work together in more than two, but each group has his/her own code. If you send your code around, for sure somebody will send it to me very similar and I will inform the Dean (yes, in the past it happened...);
- send the assignment to me without specifying that you worked in a group with another person. It is not possible to attach a person after you have submitted (yes, in the past somebody tried it...)

Note that in order to be considered an attending student only the home assignments are necessary, we are in the XXI century and being physically present at the lesson is not mandatory. However, at the beginning of each lesson we will discuss together the home exercises and your problems and thus being present has its advantages for your comprehension and you can get extra points for course's improvements and good suggestions.

For academic year 2019/20 there will be no second mid-term. Students will receive as a grade their weighted average of the assignments' grades of that part.

Study resources

Topic
Lessons' slides
Videos as replacement of attendance
Written material as support
Precourse No slides anymore in XXI century Go down here

No textbook in XXI century !

Python No slides anymore in XXI century Go down here No textbook in XXI century !
financial applications with Python No slides anymore in XXI century Go down here No textbook in XXI century !
Cryptocurrencies and Blockchain technology Slides in PDF and in PPTX Go down here No textbook in XXI century !
Crypto2 te be determined    
Smart contracts No slides anymore in XXI century Go down here No textbook in XXI century !

 

Files and programs used in class Last updated
Directory with the files used in class  

Python 3 versus Python 2

Issue Python 2 Python 3
print it is a command:
print <string>
it is a function, therefore it needs parentheses:
print(<strin>g)
print with trailing comma a trailing comma after print suppresses new line:
print <string>,
to suppress new line use:
print(<string>, end="")
integer division 5/2 gives 2. To get the float result:
either 5.0/2 or float(5)/2 or 5/2.0 or 5/float(2); float(5/2) still returns 2.0

5/2 gives 2.5
If you want the integer division, use 5//2

dict order is decided by the computer memory, so do not rely on it order is exactly the insertion order
range function range function returns a list range function returns a range object. To get a list:
list(range(<arguments>))
xrange function xrange function returns a range object, like range in Python 3  
sha256 sha256(<string>).hexdigest() sha256(<string>.encode('utf-8')).hexdigest()

Videos of lessons

course advertisement
YouTube Old course advertisement
course brief presentation
YouTube Brief course presentation
precourse 01
YouTube Precourse for Windows 10 on unibz network and file handling, first part.
precourse 02
YouTube Precourse for Windows 10 on unibz network and file handling, second part.
precourse Mac 01
YouTube Precourse for Mac on unibz network and file handling, first part.
precourse Mac 02
YouTube Precourse for Mac on unibz network and file handling, second part.
   
01 installing Anaconda
YouTube For Python we will use Anaconda with Jupyter and Python 2.7 (but 3.7 is fine)
01bis refusing to install Anaconda
YouTube For those who do not have a notebook (and borrow one from the library) or refuse to install Anaconda
02 basic Python
YouTube Basic Python programming, Bakus-Naur form, integer and float variables, string variables, find method.
How to solve problems
YouTube

How to solve computer problems explained with a carpentry example

03 procedures and decisions
YouTube Procedures, tab, logical expressions, and, or, not, If, else, elif.
04 flowcharts
YouTube Flowcharts
05 while and complexity
YouTube While loops, break, multiple assignment, computational complexity
07 Solving problems
YouTube How to tackle a computational problem
08 Lists
YouTube Lists and strings, loops, objects and their differences towards variables.
10 Dictionaries
YouTube Flags, dictionaries, tuples.
12 Hash functions
YouTube Hash functions: fingerprint for large objects, keeping passwords and PIN secret, timestamping, mining bitcoins
     
20 Objects
YouTube Classes, libraries, packages.
21 arrays and random
YouTube  
22 importing data
YouTube  
23 rate of return
YouTube  
24 portfolios
YouTube  
25 risk
YouTube  
27 Markowitz theory
YouTube  
28 CAPM and Sharpe ratio
YouTube  
29 simple regression
YouTube  
30 multivariate regression
YouTube  
31 Monte Carlo for predicting gross profit
YouTube PAY ATTENTION THAT COGS *MUST* have cogs=rev*numpy.random.normal(0.6,0.1,iterations), which is the opposite of what I say. Sorry.
32 Monte Carlo for predicting stock prices
YouTube  
   
Cryptocurrencies and blockchain technology
YouTube A decentralised currency, basic cryptography, Bitcoin history and technology, blockchain technology, advantages and criticisms
01 smart contracts introduction
YouTube  
02 Metamask and Remix
YouTube You need to install Chrome or Firefox. Safari and Edge do not work :-(
03 first Solidity contracts
YouTube  
04 a decentralized unstoppable bank
YouTube  
05 purchase contract
YouTube  
06 cryptotoken
YouTube THIS LESSON IS NOT ASKED AT THE EXAM (even though it is the most interesting smart contract...)
YouTube

This short video illustrates how to reach unibz network folder \\ubz01fst (which contains course_coletti and your own personal stuff) using VPN when you are connected from outside university or when you are connected using wifi.
This procedure is not part of exam's stuff.

Exam

Before the exam:

  1. if you do not use your own notebook, borrow a computer from the library well before the exam and configure it before the exam
  2. make sure that Anaconda is installed and that you can use Jupyter for Python;
  3. make sure Metamask is installed, that you have some Rinkeby ethers on its accounts and that it interacts correctly with Remix;
  4. check that you are able to locate \\ubz01fst.unibz.it\Courses directory;
  5. just in case your notebook crashes the night before, some days before the exam borrow a computer from the library and check that you are able to log in on your unibz account and that you have, or are able to install, everything you need

Frequently Asked Questions

Q: Which software do I need for Python on my notebook?
A:
Anaconda is available for Windows and for Mac. Take care to install Python 2. Watch the video 01 or 01bis for details.

Q: Which software do I need for smart contracts on my notebook?
A:
We will use only Metamask, which is a browser add-on. Unfortunately only Chrome, Firefox and Opera accept add-on, so you need to have one of these three browsers. Watch video 02 on smart contracts for details

Q: I have no notebook. What do I need for the course and for the exam?
A:
You can borrow a notebook from the library. Watch the video 01bis to know how can you use Jupyter, you have several possibilities. For smart contracts, probably before every lesson you will need to install the add-on to the browser with your 12-words phrase.

Q: How can I reach network folder \\ubz01fst from outside unibz or connected via wifi?
A: For Windows users: if you are connected to wifi ScientificNetwork try to digit in any explorer address bar \\ubz01fst.unibz.it and see whether you reach it. You need to provide your login and password, but you need to tell to your computer that you are using a different domain and then you have to type unibz\loginname instead of simply loginname. If this fails or if you are no connected to ScientificNetwork, then you need to install VPN. There is a specific video up here.
For Mac users: if you are connected to wifi ScientificNetwork, Finder -> Go -> Connect to server -> smb://ubz01fst.unibz.it . You need to provide your login and password, but you need to tell to your computer that you are using a different domain and then you have to type unibz\loginname instead of simply loginname.

Q: May I fix an appointment to talk with you?
A: I live in the XXI century, the age of asynchronous communication. Try to send an email to me clearly stating the course you are talking about (I have several ones) and the problem you have. You will be surprised by how fast I react, and without having the notifications on my smartphone.

Q: When will the next exam be? Can you give me a hint on the exam's date because I have to catch a plane? Can you move the exam's date? Can you fix the exam's date on the week I suggest?
A: Please stop writing me emails on this topic. Exam's date appears on your timetable as soon as it is official. If you have something to say about it, contact your students' speaker who is the only one who can submit requests on students' behalf.

Q: I may not enrol online for technical or administrative reasons or I forgot to enrol or it is my third attempt and I cannot enrol. Can I do the exam anyway?
A: No, I may not let non-enrolled students take part of the exam. Do not ask me to do illegal things! Ask the secretary whether there is something they can do.

Q: May I do the exam with my computer?
A: Sure. But beware: (1) you must be able to navigate the Internet and to enter directory \\ubz01fst.unibz.it\Courses\Course_Coletti. Do not wait for the day before the exam to check it. (2) You are responsible for your different programs' versions and configurations and for the absence on your computer of specific programs.
In any case you will have a unibz desktop computer in front of you.

Q: May I use the operating system in a different language?
A: Yes, sure. Your business.

Q: Will the exam be similar to the other exams on this website?
A: Sure. For the first year (2018/19) I shall put a couple of exam's prototypes.

Q: I lost a file during the practical exam because I did not save it correctly. What may you do?
A: Absolutely nothing. With time spent on exercises you should know the unreliability level of your programs, and how often you have to save.

Q: My files were not copied correctly at the end of the practical exam. What may I do?
A: Checking that the copy is correct, and practicing file copy even during the exam, is your task and is official prerequisite for this course.

Q: Hey, exam's time is not enough! I could not even finish it. If I only had other 5 minutes I would have done it much better!
A: Sorry but you are wrong, as I calculate more than twice the needed time. Look at the important warning after exam's explanation: the fact that for you exam's time was not enough is instead an indication that you must do many more exercises to be efficient and fast enough. On the other hand, if you have documented medical problems that slow your operations, write an email to me to have more time.

Previous exams

ID
Session
Notes
Exam link
Solution link
Videosolution for Python
Videosolution for smart contracts
03
May 2019
exam
solution
YouTube
YouTube
02
prototype for A.Y. 2018/19
exam
solution
YouTube
01
prototype for A.Y. 2018/19
exam
solution
YouTube

This page is maintained by Paolo Coletti.

Marisa Crucitti il teatro per ringiovanire Paolo Coletti personal page La stanza dell'arte Paolo Coletti Paolo Associazione culturale e ricreativa Kender Trento Bolzano La stanza dell'arte Marzia Centro Felix Trento Aarghen Thael Il Vecchio Continente GURPS Marisa Crucitti il teatro per ringiovanire Laboratorio d'arte Gabbana cornici Rovereto Nursing Up sindacato infermieri Bolzano ASL Italia Advanced Squad Leader Club scherma Bolzano Bozen Fecht club spada fioretto sciabola