Social networks
You can find me on:
   
Open sharing content

These articles are available under Creative Commons license BY-SA-3.0

Archive for the ‘Programming’ Category

The numpy module features some useful functions for statistics, like “mean()” and “median()”:

https://docs.scipy.org/doc/numpy/reference/routines.statistics.html

For example let´s consider a 2D array with age and height of some people and print out some statistics:

#! /usr/bin/env python
import numpy as np

#age, height in meters
person = [[11,1.56],[4, 0.80], [44, 1.88], [23, 1.68], [55, 1.74]]

np_person = np.array(person)

print(np_person)

age = np_person[:,0]

height = np_person[:,1]
 
 #average
print("average age: " + str(np.mean(age)))
print("average height: " + str(np.mean(height)))

#the standard deviation is also rounded to two decimals only.
std_height= round(np.std(height),2)

print("standard deviation of the height: "+ str(std_height))

#correlation
corr = np.corrcoef(np_person[:,0], np_person[:,1])
print("Correlation: " + str(corr))

The code can be also found on github:
https://github.com/lauraliparulo/python-scripts/blob/master/statistics/person_stats.py

If you want to execute python scripts with Linux you need to add the shebang line: “#! /usr/bin/env python”

It must be added on top of the file.

The shebang will allow you to run the script as any other script. Among the many options to run it, assuming the script name is “script”, one is:

> ./script.py

The file must be made executable:

>  sudo chmod +x script.py

Assuming we want to print an homogenous array created with the numpy module, a script might include the module import too:

#! /usr/bin/env python

import numpy as np

array1 = np.array([1,2,3,4])

print(array1)

print(type(array1))

It will print the following lines:

[1 2 3 4]
<type ‘numpy.ndarray’>

 

 

In the previous post I told you about the old fashioned way to handle files in java.
In this article we will focus on the new API.
The File class is no longer used. We will use the “Path” class instead.
Files is a utility class to create either files or directories, that takes a path in the constructor:

	Path filePath=Paths.get("/home/laura/demo.txt");
	Files.createFile(filePath);
	
	Path dirPath=Paths.get("/home/laura/newdir");
	Files.createDirectory(dirPath);
	
	Path nestedDirPath=Paths.get("/home/laura/newdir3/newdir4");
	Files.createDirectories(nestedDirPath);

The “createDirectories” method created the whole file system structure (the nested directories).

With NIO.2 copying or deleting a file or directory have become a matter of one line of code, thanks to the very straightforward methods “copy”, “delete”, etc.

Many things can be achieved with the utility classes Files and Paths.

Let´s take a look a the classic IO file handling in java.
First let´s start with the “File” class.
The File class is not used to read or write data. It´s used to create or delete files and directories, for searching and working with paths.
So it´s not used for the files or directories content.

The File class constructor does not create anything on the hard drive. As you can see in the following snippet, you need to use the createNewFile method for it:

		File file = new File("/home/laura/demo.txt");
		System.out.println("Does the file exists?"+file.exists());
		boolean created = file.createNewFile();
		System.out.println("File created?"+created);
		System.out.println("Does the file exists?"+file.exists());

The createNewFile method returns “false” if the file already exists.

If the goal is handling text files, you don´t need to use any Stream class. All you need is a writer one. The basic option is to use the naked “FileReader” and “FileWriter” classes:

		FileWriter fileWriter= new FileWriter(file);
		fileWriter.write("hello world. this is a text file.");
		fileWriter.flush();
		fileWriter.close();
		
		FileReader fileReader= new FileReader(file);
		char[] in = new char[100];		
		int size = fileReader.read(in);
	
		System.out.println("File size:"+size);
		
		for(char c: in){
			System.out.print(c);
		}
	
		fileReader.close();

The FileReader method “read” delivers the amount of character read.

Notice that after writing the text into the file, you need to call the method “flush”. It´s necessary to call it to make sure that the whole data flows into the file before closing the writer.

So far so good. But this simple way shown above is not the most elegant solution out there, because we have been using an array (that has a fixed size)!

A much better approach is wrapping it up using the classes BufferedReader and BufferedWriter:

		FileWriter fileWriter= new FileWriter(file);
		BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
		
		bufferedWriter.write("hello world. this is a text file.");
		bufferedWriter.newLine();
		bufferedWriter.write("You are using the buffered reader now!");			
		bufferedWriter.close();
		
		FileReader fileReader= new FileReader(file);
		BufferedReader bufferedReader = new BufferedReader(fileReader);
		
		String data;			
		while((data=bufferedReader.readLine())!=null){
			System.out.println(data);		
		}
		
		bufferedReader.close();

Notice that buffered reader also has a method called “readLine”, that you wouldn´t get with a simple File reader.
Once you close a writer it cannot be reopened again. You get an exception if you use it after closing it!

For testing and debugging purposes you can enable the assertions evaluation with the VM parameter “-ea” ( or “-enableassertions” if you prefer the whole thing).

The assertions remain in the code and are just ignored at runtime if you don´t enable them. You can think of them as an aid in case of need.

The following method throws an exception if the parameter given is not a String containing “Laura”:


         private void testFirstName(String firstName){
                 assert(firstName.equals("Laura"));

               System.out.println("The given first name is Laura");
         }

A string message can be displayed in the stack trace, by adding a second expression to the assertion, like :

	private void testFirstName(String firstName){
		assert(firstName.equals("Laura")) : "the name "+ firstName+ " is not Laura!";
		
		System.out.println("The given first name is Laura");
	}

The output in this second case would be something like:

Exception in thread "main" java.lang.AssertionError: the name Anna is not Laura!
at com.demo.AssertionsDemo.testFirstName(AssertionsDemo.java:15)
at com.demo.AssertionsDemo.main(AssertionsDemo.java:8)

Since Java 1.4 “assert” has become a keyword.

Assertions can be disabled with the VM option “-da” or “-disableassertions”. Although the assertions are disabled by default, the manual disabling might make sense if you don´t want to enable the assertions for all the classes.

For example if you want to run a java jar file (for example “demo.jar”), but disabling the assertions for one of its classes (ex. “com.demo.Demo.java”) you need to use the following parameters:

> java -jar -ea -da:com.demo.Demo

To disable them for the whole “com.demo” package (including subpackages):

> java -jar -ea -da:com.demo...

So entering VM parameters like “-ea:” or “-ea:” allow you to select which assertions to evaluate.

To learn about Java threads and concurrency I have decided to represent a Call Center. The customers making the phone calls to a call center can be represented as threads.
To simulate the real world scenario I will use Semaphores and a Cyclic Barrier to simulate the standby situation.

It´s a simple Producer/Consumer scenario. The producers are the operators working in a call centers.
The critical block is the phone call, simulated with a thread sleep method.

First of all let´s start with semaphores.

Semaphores can control access to more than one resource at a time. They enable a certain amount of threads in a program block.
In the semaphore constructor you can specify the number of threads that can access the resource at the same time.
With the method acquire() the thread tries to get the resource. If the resource is busy, the thread will wait.
The release() method frees the resource from the thread.

CyclicBarrier offers an elegant way to trigger an event if all the operators are busy.

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.Semaphore;

public class Customer extends Thread {

	CyclicBarrier standByMessage;
	private Semaphore operators;

	public Customer(Semaphore operators, CyclicBarrier standByMessage,
			String name) {
		this.standByMessage = standByMessage;
		this.operators = operators;
		this.setName(name);
		this.start();
	}

	@Override
	public void run() {

		// simulate the time required for the phone call (between one and six seconds...
		long duration = ThreadLocalRandom.current().nextLong(1,10);

		try {

			System.out.println(getName()
					+ &amp;quot; is waiting to speak to the operator...&amp;quot;);

			standByMessage.await();
			// if you put acquire first and then await the operators are not
			// free and all the customers are not called

			operators.acquire();

			System.out.println(getName()
					+ &amp;quot; is getting the connection to the operator ...&amp;quot;);
                        //using TimeUnit enumeration to make the code more readable
			Thread.sleep(TimeUnit.SECONDS.toMillis(duration));
			
			System.out.println(getName()
					+ &amp;quot;´s phone call with the operator ending.&amp;quot;);
			operators.release();
			
			System.out.println(&amp;quot;Available operators=&amp;quot;
					+ operators.availablePermits());
			
		} catch (InterruptedException | BrokenBarrierException e) {
			System.err.println(e);
		} 

	}
}

Take a look at the way the duration of the call is generated. I am using the ThreadLocalRandom class, that in a multithreading context it´s helpful to get the job done much faster.
At first I tried it with Math.random() and it was MUCH slower!

The call center has 3 operators:

import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.Semaphore;

public class CallCenter {

	public static void main(String[] args) {
		
		Semaphore operators = new Semaphore(3);
		
		CyclicBarrier standbyMessage = new CyclicBarrier(3, new StandBy());
	
		System.out.println(&amp;quot;The call center is ready to answer phone calls&amp;quot;);
		
        System.out.println(&amp;quot;Available operators initially=&amp;quot; + operators.availablePermits() );
        
		new Customer(operators,standbyMessage,&amp;quot;Laura&amp;quot;);
		new Customer(operators,standbyMessage,&amp;quot;Mario&amp;quot;);
		new Customer(operators,standbyMessage,&amp;quot;Luigi&amp;quot;);
		new Customer(operators,standbyMessage,&amp;quot;Paola&amp;quot;);
		new Customer(operators,standbyMessage,&amp;quot;Alfonso&amp;quot;);
		new Customer(operators,standbyMessage,&amp;quot;Anna&amp;quot;);
		new Customer(operators,standbyMessage,&amp;quot;Giorgio&amp;quot;);
		new Customer(operators,standbyMessage,&amp;quot;Francesca&amp;quot;);
		new Customer(operators,standbyMessage,&amp;quot;Pietro&amp;quot;);
		new Customer(operators,standbyMessage,&amp;quot;Antonio&amp;quot;);
		new Customer(operators,standbyMessage,&amp;quot;Marco&amp;quot;);
		new Customer(operators,standbyMessage,&amp;quot;Giovanna&amp;quot;);
		new Customer(operators,standbyMessage,&amp;quot;Daniele&amp;quot;);
		new Customer(operators,standbyMessage,&amp;quot;Giorgio&amp;quot;);
	}

}

The Cyclic barrier takes a Thread as argument for the constructor:

public class StandBy implements Runnable {

	@Override
	public void run() {
    System.out.println(&amp;quot;All operators are busy at the moment - playing MUSIC ...&amp;quot;);
	}

}

 

The output is something like:

The call center is ready to answer phone calls
Available operators initially=3
Alfonso is waiting to speak to the operator...
Laura is waiting to speak to the operator...
Paola is waiting to speak to the operator...
Luigi is waiting to speak to the operator...
Anna is waiting to speak to the operator...
Mario is waiting to speak to the operator...
Giorgio is waiting to speak to the operator...
All operators are busy at the moment - playing MUSIC ...
Francesca is waiting to speak to the operator...
Pietro is waiting to speak to the operator...
All operators are busy at the moment - playing MUSIC ...
Paola is getting the connection to the operator ...
Giovanna is waiting to speak to the operator...
Luigi is getting the connection to the operator ...
Marco is waiting to speak to the operator...
Antonio is waiting to speak to the operator...
Giorgio is waiting to speak to the operator...
All operators are busy at the moment - playing MUSIC ...
Daniele is waiting to speak to the operator...
Mario is getting the connection to the operator ...
All operators are busy at the moment - playing MUSIC ...
Luigi´s phone call with the operator ending.
Available operators=1
Alfonso is getting the connection to the operator ...
Mario´s phone call with the operator ending.
Available operators=1
Laura is getting the connection to the operator ...
Paola´s phone call with the operator ending.
Available operators=1
Francesca is getting the connection to the operator ...
Alfonso´s phone call with the operator ending.
Available operators=1
Pietro is getting the connection to the operator ...
Laura´s phone call with the operator ending.
Available operators=1
Marco is getting the connection to the operator ...
Francesca´s phone call with the operator ending.
Available operators=1
Anna is getting the connection to the operator ...
Pietro´s phone call with the operator ending.
Available operators=1
Giovanna is getting the connection to the operator ...
Anna´s phone call with the operator ending.
Available operators=1
Daniele is getting the connection to the operator ...
Marco´s phone call with the operator ending.
Available operators=1
Giorgio is getting the connection to the operator ...
Giorgio´s phone call with the operator ending.
Available operators=1
Giovanna´s phone call with the operator ending.
Available operators=2
Daniele´s phone call with the operator ending.
Available operators=3

The thread class provides some methods to define the threads behavior.
Two important methods to consider are:
join(), to make the other instanced threads to wait for it to day. You can provide a timeout as parameter.
sleep();

The sleep() method throws a checked exception called “InterruptedException”,each time the thread receives an interrupt request. You have to handle in the code by wrapping the method in a try-catch block.

The following code will make you understand the join method.
We define a MyThread thread:

public class MyThread implements Runnable {

	public void run() {
		Thread thread= Thread.currentThread();
		System.out.println("Implementing the runnable interface"
				+ " - Thread name: " + thread.getName()
				+ " - priority: " + thread.getPriority()
				+ " - group: " + thread.getThreadGroup().getName());

	}

}

Then we can observe the behaviour running the following main:

		public static void main(String[] args) {

		// extending Thread
		Thread myThread = new Thread(new MyThread());
		Thread myJoiningThread = new Thread(new MyThread());

		myThread.setName("myThread");
		myJoiningThread.setName("myJoiningThread");

		System.out.println("Threads will be started...");

		myJoiningThread.start();

		try {
			// waits for this thread to die
			myJoiningThread.join();
		} catch (InterruptedException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		myThread.start();

	}

Without the try-catch block in which the join method is invoked the threads would be started asynchronously (the order is not predictable) and in the console you might get either:
Threads will be started...
Implementing the runnable interface - Thread name: myThread - priority: 5 - group: main
Implementing the runnable interface - Thread name: myJoiningThread - priority: 5 - group: main

or:

Threads will be started...
Implementing the runnable interface - Thread name: myJoiningThread - priority: 5 - group: main
Implementing the runnable interface - Thread name: myThread - priority: 5 - group: main

But if you include the try-catch block, the myJoiningThread will always be invoked first.

To understand the sleep method you can create a MySleepingThread:

public class MySleepingThread implements Runnable {

	public void run() {
		Thread thread= Thread.currentThread();
		try {
			Thread.sleep(3000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("Implementing the runnable interface"
				+ " - Thread name: " + thread.getName()
				+ " - priority: " + thread.getPriority()
				+ " - group: " + thread.getThreadGroup().getName());

	}

}

Then you can run the following main method:

public static void main(String[] args) {

		// extending Thread
		Thread myThread = new Thread(new MyThread());
		Thread mySleepingThread = new Thread(new MySleepingThread());
		myThread.setName("myThread");
		mySleepingThread.setName("mySleepingThread");

		System.out.println("Threads will be started...");

		mySleepingThread.start();
		myThread.start();

	}

You can see in the console that the sleeping thread will be started after 3 seconds.

The sleep method is static. By invoking “Thread.sleep(3000)” you are delaying the creation of the current thread.

If you use the method in the main method, the sleeping thread will be “main”.

I am learning for the Java OCP 7 and summarizing some relevant infos about Multithreading.
For now I am referring to chapter 13 in the book by G.Ganesh.

You can create threads in 2 ways: extending the Thread class or implementing the Runnable interface
Extending the Thread class is more convenient if you don´t need to extend another class that is not “Thread” (since in java you can only extend one class), because you can use the class methods directly (like “getName()“).
If you implement the Runnable interface (preferred way because of inheritance) you will have to use the static method “currentThread()” of the Thread class to do your operations on the thread (like setting or getting the name).

The two fundamental methods to know are:
run(): like a main method, necessary to enable the execution of a thread.
start(): that creates the thread.

The thread will be terminated when the run method execution is complete. It´s invoked implicitly by the JVM (DON´T invoke it explicitly!).
The main method starts a Thread called “main“. If you create and start your own thread it will have default names like “Thread-0“, “Thread-1“.

If you extend the thread class you need to override the run() method (otherwise it does nothing). If you implement the Runnable interface you will have to implement the run() method (mandatory)

The following code will help you to understand more about these first concepts.

public class MyThread1 extends Thread {

	public void run() {
		System.out.println("Extending the Thread class - Thread name: "
				+ getName() + " - priority: " + getPriority() + " - group: "
				+ getThreadGroup().getName());

	}

}
public class MyThread2 implements Runnable {

	public void run() {
		Thread thread= Thread.currentThread();
		System.out.println("Implementing the runnable interface"
				+ " - Thread name: " + thread.getName()
				+ " - priority: " + thread.getPriority()
				+ " - group: " + thread.getThreadGroup().getName());

	}

}
public class ThreadsDemo {

	public static void main(String[] args) {

		// extending Thread
		Thread myThread1 = new MyThread1();
		// implementing Runnable
		Thread myThread2 = new Thread(new MyThread2());

		System.out.println("Threads defined. Default properties: ");
		//name, priority, group returned by the toString method 
		System.out.println(myThread1);
		System.out.println(myThread2);
		System.out.println("Changing default names...");
		myThread1.setName("Thread_1");
		myThread2.setName("Thread_2");
		System.out.println("Threads will be started...");
		myThread1.start();
		myThread2.start();

	}

}

The output of the main method should be something like:

Threads defined. Default properties:
Thread[Thread-0,5,main]
Thread[Thread-1,5,main]
Threads will be started...
Extending the Thread class - Thread name: Thread-0 - priority: 5 - group: main
Implementing the runnable interface - Thread name: Thread-1 - priority: 5 - group: main

Launching the main program you see that the threads are started asynchronously. Sometimes you see:
Implementing the runnable interface - Thread name: Thread-1
Extending the Thread class - Thread name: Thread-0

Sometimes it´s:
Extending the Thread class - Thread name: Thread-0
Implementing the runnable interface - Thread name: Thread-1

You can quickly proof it in Eclipse launching the program with the shortcut Ctlr+11.

To change this “random” behaviour you can set the priority with the setPriority() method, from 1, the lowest, to 10, the highest. The default is 5. They can be all retrieved by the static members:
– Thread.NORM_PRIORITY ;
– Thread.MAX_PRIORITY ;
– Thread.MIN_PRIORITY .

Threads can be in one of the following states:
– NEW (created)
– RUNNABLE (started)
– TERMINATED
– BLOCKED (waiting to acquire the lock)
– WAITING (waiting for notifications)
– TIMED_WAITING (sleep() invoked and the thread is sleeping or if wait() with timeout)

States are defined with the Thread.State enumeration.
You can get the state with the getState() method.

If you need to convert audio files in another format you can use the tool called “soundconverter”, that you can simply install:

~$ sudo apt-get install soundconverter

Then simply run a command like:

~$ soundconverter -b -m "audio/mpeg" -s ".mp3" /home/laura/cd-wav/*.wav

“-b” stands for batch type

“-m” to specify the mime format.

“-s” to specify the suffix

And move them into another folder eventually:

~$ mv /home/laura/cd-irene/*.mp3 /home/laura/cd-wav.

For more info check the official wiki pages:
http://wiki.ubuntuusers.de/soundconverter
http://manpages.ubuntu.com/manpages/karmic/man1/soundconverter.1.html

I was dealing with the Apache modcluster configuration for the Wildfly load balancing and I ran into the following error

[Server:server-four] 16:55:00,093 ERROR [org.jboss.modcluster] (UndertowEventHandlerAdapter - 1) MODCLUSTER000042: Error MEM sending STATUS command to localhost/127.0.0.1:6666, configuration will be reset: MEM: Can't read node

The error occurs when the servers are “idle”, that is where there is nore request from the browser for a time longer than the keep alive timeout setting.