Linux servers - Exercice 6
==============

*Disclaimer:*
--------------

This exercise is a part of [Linux servers (ICT4TN021, spring 2018) // Linux-palvelimet (ICT4TN021, kevät 2018)](http://www.haaga-helia.fi/fi/opinto-opas/opintojaksokuvaukset/ICT4TN021) school course organized as a part of Information Technology studies in Haaga-Helia university of Applied Sciences, Helsinki, Finland. Course lecturer [Tero Karvinen](http://terokarvinen.com/) has defined the original assignment descriptions in Finnish presented in this document in English. Answers and translations have been written by Pekka Helenius (me, ~ Fincer).

**a)** Write and execute "Hello world" in three code languages of your choice. Set up a necessary development environments.
--------------

**Answer:**

Let's write "Hello World" in the following three languages: perl, python 3 and C. Let's install needed development tools:

```
sudo apt-get -y install perl python gcc
```

(GCC = [Gnu Compiler Collection](https://gcc.gnu.org/) + [Wikipedia](https://en.wikipedia.org/wiki/GNU_Compiler_Collection))

Let's write the codes into a subfolder _hello-world_ in user's home dir:

```
[newuser@goauldhost: ~ ]$ mkdir ~/hello-world
[newuser@goauldhost: ~ ]$ cd hello-world/
[newuser@goauldhost: hello-world ]$ touch {hello.py,hello.pl,hello.c}
```

- hello.py = "Hello World" written in Python 3

- hello.pl = "Hello World" written in Perl

- hello.c = "Hello World" written in C

Hello World program written in three languages (nano editor used):

**Perl (hello.pl):**

```
#!/usr/bin/env perl
# Declare runtime environment above

# Include these to find common warnings, syntax errors etc in the code
import strict;
import warnings;

# Print Hello World! with a newline
print "Hello World!\n";

```

**Python (hello.py):**

```
#!/usr/bin/env python3
# Declare runtime environment above

# Print Hello World!
print("Hello World!");

```

**NOTE!** Pay attention when referring to python executable. On some Linux distributions, python refers to python2, and on some, python refers to python3. Practices differ. It can be safer to use 'python3' or 'python2' instead of just 'python'.

In a simple program like "Hello world" this python issue doesn't really matter but if any python libraries are imported into the code, you must know which python environment to use, Python 2 or Python 3. 

**C (hello.c):**

```
// Include Standard Input Output Library (stdio.h core library included in)
#include <stdio.h>

// Declare main function for the program. Int for returning a integer
int main()
{
   // Print Hello World! (stdout in CLI)
   printf("Hello World!");

   // Return boolean value "true" to the execution environment
   return 0;
}
```

hello.c requires compiling from source code to executable binary file. Therefore, we compile the source code with the following command in _hello-world_ folder:

```
gcc -o hello hello.c
```

after which our 'binary' can be executed with 

```
~/hello-world/hello
```

All programs give stdout/output string "Hello World!" in our shell environment:

```
[newuser@goauldhost: hello-world ]$ pwd
/home/newuser/hello-world
[newuser@goauldhost: ~ ]$ python hello.py
Hello World!
[newuser@goauldhost: ~ ]$ perl hello.pl
Hello World!
[newuser@goauldhost: ~ ]$ ./hello
Hello World!
```

**b)** (optional) Write a simple program for some practical purpose with each language. Ideas: utilize the key benefits of your language of choice. Take an input value from a user, generate a calculation and print the output (input-processing-layout).
--------------

**Answer:**

This could have been very interesting assignment to work out. Unfortunately, my working laptop was broken so that I was not effectively able to write new code. I have worked with a perl program which generated random port and TCP/UDP sequences for knockd daemon. In addition, I have worked with some updates to Wine Configuration window (winecfg, part of Wine program) in C language:

![winecfg-update](https://i.imgur.com/SihmPUA.jpg)

Some Python and bash based program-related scripts and code updates are available here:

- [PlayOnLinux patches](https://github.com/Fincer/linux-patches-and-scripts/tree/master/playonlinux).

- Little CMake script targeted for compiling C++ code can be found [here](https://github.com/Fincer/linux-patches-and-scripts/tree/master/xclipshow)

- Some basic scripting to convert videos with ffmpeg in KDE DE: [ffmpeg-fileconversion-video](https://github.com/Fincer/linux-patches-and-scripts/blob/master/kde-servicemenus-multimediatools/ffmpeg-fileconversion-video.sh)

etc.
