Dietrich Schroff

Subscribe to Dietrich Schroff feed
Dietrich Schroff
Updated: 10 hours 14 min ago

OpenJDK 9: Jshell - how to load scripts and how to save/persist finished snippets

Fri, 2017-07-14 13:07
In my last posting i showed the builtin jshell commands and how to start working with the java shell.

What about loading and saving scripts?

I created a file myshell.txt with this content:
class MyClass {
 private int a;
 public MyClass(){a=0;}
 int getA() {return a;};
 void setA(int var) {a=var; return;}
MyClass ZZ;
ZZ = new MyClass();
The help shows the following:
-> /help /open

|  /open

|  Open a file and read its contents as snippets and commands.

|  /open
|      Read the specified file as jshell input.
so i tried this one:
-> /open myjshell.txthmmm. No feedback inside jshell. But no news is good news:
-> /list

   1 : class MyClass {
        private int a;
        public MyClass(){a=0;}
        int getA() {return a;};
        void setA(int var) {a=var; return;}
   2 : MyClass ZZ;
   3 : ZZ = new MyClass();
   4 : ZZ.setA(200);
 Saving your work is quite easy:
-> /help /save

|  /save

|  Save the specified snippets and/or commands to the specified file.

|  /save
|      Save the source of current active snippets to the file.

|  /save all
|      Save the source of all snippets to the file.
|      Includes source including overwritten, failed, and start-up code.

|  /save history
|      Save the sequential history of all commands and snippets entered since jshell was launched.

|  /save start
|      Save the default start-up definitions to the file.
And also no news is good news:
-> /save myjshell2.txtand like expected:
$ cat myjshell2.txt
class MyClass {
 private int a;
 public MyClass(){a=0;}
 int getA() {return a;};
 void setA(int var) {a=var; return;}
MyClass ZZ;
ZZ = new MyClass();
But what about this /save start ?
-> /save start myjshell3.txtand the content of this file is:
$ cat myjshell3.txt

import java.util.*;
import java.math.*;
import java.util.concurrent.*;
import java.util.prefs.*;
import java.util.regex.*;
void printf(String format, Object... args) { System.out.printf(format, args); }
 To load a scipt on startup just type
jshell myjshell.txt

OpenJDK 9: JShell - an interactive java interpreter shell | builtin commands

Wed, 2017-07-12 14:33
One of the new features of java 9 is jshell (JEP 222).

On my ubuntu system the installation was quite easy:
# apt-get install openjdk-9-jdk-headlessand you can find
$ ls /usr/lib/jvm/java-9-openjdk-amd64/bin/
idlj       jcmd    jmap        jstatd       schemagen
jar        jdb     jmod        keytool      serialver
jarsigner  jdeps   jps         orbd         servertool
java       jhsdb   jrunscript  pack200      tnameserv
javac      jimage  jsadebugd   policytool   unpack200
javadoc    jinfo   jshell      rmic         wsgen
javah      jjs     jstack      rmid         wsimport
javap      jlink   jstat       rmiregistry  xjc
 (in the third column, sixth row: jshell)

After a startup jshell comes up with this prompt:

$ /usr/lib/jvm/java-9-openjdk-amd64/bin/jshell
|  Welcome to JShell -- Version 9-internal
|  For an introduction type: /help intro

 The most important command is
/exitto leave the jshell (Strg-C works also, but i think /exit should be used).

There is no syntax highlighting but this does not matter.

The following builtin commands are allowed:
-> /help
|  Type a Java language expression, statement, or declaration.
|  Or type one of the following commands:

|     /list [all|start|]                       -- list the source you have typed
|     /edit                                    -- edit a source entry referenced by name or id
|     /drop                                    -- delete a source entry referenced by name or id
|     /save [all|history|start]                      -- Save snippet source to a file.
|     /open                                          -- open a file as source input
|     /vars                                                -- list the declared variables and their values
|     /methods                                             -- list the declared methods and their signatures
|     /classes                                             -- list the declared classes
|     /imports                                             -- list the imported items
|     /exit                                                -- exit jshell
|     /reset                                               -- reset jshell
|     /reload [restore] [quiet]                            -- reset and replay relevant history -- current or previous (restore)
|     /classpath                                     -- add a path to the classpath
|     /history                                             -- history of what you have typed
|     /help [|]                          -- get information about jshell
|     /set editor|start|feedback|newmode|prompt|format ... -- set jshell configuration information
|     /? [|]                             -- get information about jshell
|     /!                                                   -- re-run last snippet
|     /                                                -- re-run snippet by id
|     /-                                                -- re-run n-th previous snippet

|  For more information type '/help' followed by the name of command or a subject.
|  For example '/help /list' or '/help intro'.  Subjects:

|     intro     -- an introduction to the jshell tool
|     shortcuts -- a description of shortcuts
With /list the source code, which you provided, is shown:
-> /list 5

   5 : class MyClass {
       private int a;
       public MyClass(){a=0;}
       int getA() {return a;};
       void setA(int var) {a=var; return;}

Everytime you create an Object, you will see the following:
-> ZZ = new MyClass();
|  Variable ZZ has been assigned the value MyClass@28d25987

-> ZZ.getA();
|  Expression value is: 0
|    assigned to temporary variable $8 of type int

-> ZZ.setA(200);

-> ZZ.getA();
|  Expression value is: 200
|    assigned to temporary variable $10 of type int With /vars the variables are shown:
-> /vars
|    MyClass ZZ = MyClass@28d25987
|    int $8 = 0
|    int $10 = 200
Listing the classes (ok it is getting boring):
-> /classes
|    class MyClass
 and last but not least /methods:
-> /methods
|    printf (String,Object...)void
|    getA ()int

Bash: enabling Eclipse for Bash Programming | Plugin Shelled (shell editor)

Mon, 2017-07-10 14:14
After writing several posts about useless shell commands i tried to enable Eclipse for working with the bourne again shell.

First step is to get a plugin for syntax highlighting. The plugin shelled is very easy to find. Just download the zip

and in Eclipse go to "help --> install new software".
There you have to add the archive:
And all other clicks are straight forward:

After the installation of the plugin you have to restart your Eclipse IDE and then the editor understands bash commands:

The configuration can be done via -> window -> preferences

If you want to setup your own coloring scheme, you can customize it within -> Shell Script -> Editor -> Syntax coloring

(bash): The most useless commands (7)

Sat, 2017-07-01 03:14

After talking about
  1. rev
  2. sl
  3. cowsay
  4. cmatrix
here another pretty useless command:
calToday with every smartphone having its own calendar app or every e-mail program with integrated time planning function this command is no more needed. The manpage says:
     cal, ncal — displays a calendar and the date of EasterAnd here we go:
$ cal 2000
       Januar               Februar                 März        
So Mo Di Mi Do Fr Sa  So Mo Di Mi Do Fr Sa  So Mo Di Mi Do Fr Sa
                   1         1  2  3  4  5            1  2  3  4
 2  3  4  5  6  7  8   6  7  8  9 10 11 12   5  6  7  8  9 10 11
 9 10 11 12 13 14 15  13 14 15 16 17 18 19  12 13 14 15 16 17 18
16 17 18 19 20 21 22  20 21 22 23 24 25 26  19 20 21 22 23 24 25
23 24 25 26 27 28 29  27 28 29              26 27 28 29 30 31  
30 31                                                          
       April                  Mai                   Juni        
So Mo Di Mi Do Fr Sa  So Mo Di Mi Do Fr Sa  So Mo Di Mi Do Fr Sa
                   1      1  2  3  4  5  6               1  2  3
 2  3  4  5  6  7  8   7  8  9 10 11 12 13   4  5  6  7  8  9 10
 9 10 11 12 13 14 15  14 15 16 17 18 19 20  11 12 13 14 15 16 17
16 17 18 19 20 21 22  21 22 23 24 25 26 27  18 19 20 21 22 23 24
23 24 25 26 27 28 29  28 29 30 31           25 26 27 28 29 30  
        Juli                 August              September      
So Mo Di Mi Do Fr Sa  So Mo Di Mi Do Fr Sa  So Mo Di Mi Do Fr Sa
                   1         1  2  3  4  5                  1  2
 2  3  4  5  6  7  8   6  7  8  9 10 11 12   3  4  5  6  7  8  9
 9 10 11 12 13 14 15  13 14 15 16 17 18 19  10 11 12 13 14 15 16
16 17 18 19 20 21 22  20 21 22 23 24 25 26  17 18 19 20 21 22 23
23 24 25 26 27 28 29  27 28 29 30 31        24 25 26 27 28 29 30
30 31                                                          
      Oktober               November              Dezember      
So Mo Di Mi Do Fr Sa  So Mo Di Mi Do Fr Sa  So Mo Di Mi Do Fr Sa
 1  2  3  4  5  6  7            1  2  3  4                  1  2
 8  9 10 11 12 13 14   5  6  7  8  9 10 11   3  4  5  6  7  8  9
15 16 17 18 19 20 21  12 13 14 15 16 17 18  10 11 12 13 14 15 16
22 23 24 25 26 27 28  19 20 21 22 23 24 25  17 18 19 20 21 22 23
29 30 31              26 27 28 29 30        24 25 26 27 28 29 30
 Or "the date of Easter":
$ ncal -e 2018
 1 April 2018

(bash): The most useless commands (6)

Sat, 2017-06-24 08:35
After talking about
  1. rev
  2. sl
  3. cowsay
 i found another funny command:
cmatrixThe manpage says:
       CMatrix - simulates the display from "The Matrix"and it is true:

(bash): The most useless commands (5)

Wed, 2017-06-21 15:17
In a comment Albert Godfrind pointed out, that the commands i was talking about like
  1. rev
  2. sl
  3. cowsay
are not really bash commands (in a way that they will be installed within the installation of the bash shell). They are commands, which can be used from on every shell. So my headline is a little bit missleading - thanks for this notice.

Just for clarification here a list with all bash builtin commands:
  • alias
  • bind
  • builtin
  • caller
  • command
  • declare
  • echo
  • enable
  • help
  • let
  • local
  • logout
  • mapfile
  • printf
  • read
  • readarray
  • source
  • type
  • typeset
  • ulimit
  • unalias
and the bourne shell builtins:

  • break
  • cd
  • continue
  • eval
  • exec
  • export
  • getopts
  • hash
  • pwd
  • readonly
  • return
  • shift
  • test
  • times
  • trap
  • umask
  • unset
Still missing:

Bash: The most useless command (4)

Sun, 2017-06-18 14:04
The blog statistics show, that there are many people reading the posts about useless commands. And there is the next candidate:
cowsayNow you are thinking, what is cowsay?
       Cowsay  generates  an  ASCII picture of a cow saying something provided by the user.  If run with no arguments, it accepts standard input, word-wraps
       the message given at about 40 columns, and prints the cow saying the given message on standard output.

Okay. Here we go:
$ echo what a cool command | cowsay
< what a cool command >
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
One thing to add here: moo 

Bash: The most useless command (3)

Wed, 2017-06-14 12:48
The blog statistics show, that there are many people reading the posts about useless commands. And there is the next candidate, suggested by an anonymous comment:
slThis is my most hated program on a shell. Why?
sl − display animations aimed to correct users who accidentally enter sl instead of ls.and this program is not interruptable by ctrl-c.
It shows a train running from the left to the right
and blocks your shell for at least 2-3 seconds (depends on the width of your shell window):
$ time sl
real 0m3.347s

Ubuntu: mouse jumps to trash icon / move to lower left corner / bottom left

Sat, 2017-06-10 14:02
There are many questions about jumping mouse cursors on ubuntu.
And there are often answers like
  • clean your touchpad
  • your touchpad is broken
  • send your laptop back
But there are so many people suffering this, so it is not reasonable that all these touchpads do not work well.

One thing to solve this is to install
gpointing-device-settingsbut this does not really help.
Next thing:
add-apt-repository ppa:atareao/atareao
apt-get update
apt-get install touchpad-indicator
/opt/  But this is not really the solution. But you can disable your touchpad while typing, so that the window focus does not jump to the trash icon and your typing is interrupted.

After searching i found the following discussion on a mailing list:

And the follwing did the job:
apt-get install xserver-xorg-core apt-get install xserver-xorg-input-libinput
apt-get remove --purge xserver-xorg-input-synaptics and then a logoff and login into the x window system...

Bash: The most useless command (2)

Fri, 2017-06-09 14:58
The last posting about useless commands for bash discussed the command
rev. One nice comment pointed out, that the rev command can be used for searching inside logfiles (Thanks to

Like it was said there, the command
yeslooks even more useless:
       yes - output a string repeatedly until killed
       yes [STRING]...
Ok - it can be used for scripts to answer call backs. But which kind of script needs always the same answer? (and commands like "apt-get" support this via the option "-y".

Any other suggestions about useless bash commands?

Bash: The most useless command

Sun, 2017-06-04 14:08
After many years working with the bourne again shell i still learn some commands, which i never used.
I am completely convinced that i discovered the most useless command:
revThe manpage says:
rev - reverse lines characterwise Is there anything, where i can use this command?

Ok. I can check if a word is a palindrome (like 123321 or otto):

# Shell script to test if a string is a palindrome
# This simply uses the 'rev' command found in util-linux-ng package
# and checks if the reverse of the string is same as the original
 echo "Enter a String : "
read string
if [ "$(echo $string | rev)" = "$string" ]
 echo "\"$string\" IS a Palindrome"
 echo "\"$string\" IS NOT a Palindrome"
fiThis script i found in this article.

Have anyone used the rev command for something reasonable?
Please write a comment!

Ubuntu: Eclipse does not find openjdk (JRE)

Sat, 2017-06-03 14:06
On my Ubunut linux i decided to do some Java programming.
So first step is to install java:
apt-get install openjdk-9-jdk openjdk-9-demo openjdk-9-doc openjdk-9-jre-headless openjdk-9-source This just works like expected. But after that i installed eclipse.
Download via was easy and the installation ran without any error.
But Eclipse was not able to find the JRE for compiling, autocorrection, etc.

For all developers, which are not used to linux:
The JRE is in Ubuntu located here:
/usr/lib/jvm/java-9-openjdk-amd64/jreAnd it is added like on any other platform via the preferences window:
 After that Eclipse runs fine and you can start building your java applications...

Ubuntu: visudo problem / NOPASSWD option does not work for commands

Sat, 2017-06-03 13:56
It is always the same:
After installing a new Linux commands like
/sbin/rebootonly work with entering your password everytime (or precisely: after every reboot).
This can be changed with visudo:
export EDITOR=vi; visudo Inside the /etc/sudoers.conf you will see:
# User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALLAnd this is the problem:
First idea is to double the line
root    ALL=(ALL:ALL) ALL
schroff    ALL=(ALL) NOPASSWD: /usr/sbin/s2diskand do the desired changes.

BUT: This will not work!

You have to add your line at the end of the file and after you exit vi (or whatever editor you have configured) it will work...

UEFI and Linux: Installation of Ubuntu on a new laptop / How to add grob on UEFI

Sat, 2017-06-03 09:28
On my new laptop i decided to install in addition to windows 10 a linux distribution.
First idea was to install debian linux but the debian installer does not provide any functionality to resize the partitions. And without this, the windows partition will be erased after the installtion.
I knew, that the ubuntu installer had this functionality, so i created a usb stick and tried installing ubuntu.

The installation went through like a charm, but the next reboot does not show up the grub boot menu. The laptop started without any call back.


I found a solution here.

You have to enter the BIOS/UEFI and set a password:
After that you are allowed to select a new trusted uefi file:
 Then walk to grubx64.efi via HDD0 -> EFI -> ubuntu:

After that you have to reboot once and enter the BIOS/UEFI again.
New you can change the boot order and move the grub to the first entry:
Now every reboot enters the grub menu and you are able to choose ubuntu or windows...

review at amazon: Apache SOLR for newbies

Thu, 2017-05-25 14:39
Last weekend this book fell into my hands:

Paul Lawson wrote a splendid introduction into Apache SOLR. At the beginning he describes the motivation behind the project SOLR:
 "Outside the firewall  [searching] is used to make money, and inside to save money."
Within 130 pages this books covers everything from installation, adminstration GUI, examples to start (importing documents, first searches, etc.) and the quick overview to the fundamental configuration files.
If you are interested in Apache SOLR and you do not know where to start: this book is the answer.
But one thing is missing: The book only covers searching XML documents. On page 42 (!) it is pointed out, that you have to configure SOLR cell. I think this was a good decision, because deep dives should be done after an introduction.

if you are interested, take a look at my review at (as all my reviews written in german ;-)

Touchpad tuning on linux: touchpad-indicator...

Fri, 2017-04-14 10:21
I encoutered some problems with my touchpad on ubuntu:
While typing some text, the touchpad signalled the mouse some strange moves. Sometimes it marked parts of the text and the next key erased the highlighted text...

First idea was to edit the xorg.conf or something else, but i found a less difficult was via touchpad-indicator.

It can be installed via
apt-get install touchpad-indicatorAlittle problem is, that you can not run it via cli with just calling touchpad-indicator, because ubuntu installs this program into /opt:

Here you can choose "disable touchpad on typing" and you are done...

Review at amazon: Quality of Service for Intenet Multimedia

Sat, 2017-03-25 07:21
Over the last three months i read a really amazing book about quality of service techniques.
Today everyone has internet access with more than 50Mbit/s, it seems like overbooking does not happen anymore and traffic priorization is no longer needed.
But this is only the half of the truth: Using cloud service, video streaming, onling gaming, ... you can really fast reach the limit of your internet access bandwith.
Companies face the same problem at a different scale: They can buy up to 1Gb/s but if they use techniques like shared workplace, cloud storage etc. even they will exhaust their bandwidth.

If you are interested how priorization can be done (and what are the problems in real life), you should read this book:

It covers the theory and practice for multimedia streaming which is just one of many categories of internet traffic. It is clear that the proposed solution can only be implemented by internet service provicers - but here you can understand what they do und why they are doing it.

if you are interested, take a look at my review at (as all my reviews written in german ;-)

How to embed HTTP content inside a HTTPS webpage / Mixed content problems

Sat, 2017-03-04 03:27
If you are running a webpage and you decide to move to SSL protection you can encounter the following problem: Inside your webpage you are using tags like "iframe", "script" or "link" pointing to HTTP servers. This is considered as mixed active content (mozilla):

Mixed active content is content that has access to all or parts of the Document Object Model of the HTTPS page. This type of mixed content can alter the behavior of the HTTPS page and potentially steal sensitive data from the user. Hence, in addition to the risks described for mixed display content above, mixed active content is vulnerable to a few other attack vectors.
And this will not work...

The best solution is: change all links from HTTP to HTTPS and you are done.

But there are still websites which offer their content in HTTP only. If you really trust them, you can do the following:
Add the link inside a https proxy like

Of course this is not an excellent solution, but a workaround which allows you to protect your website and if you seperate this solution from the pages, which deal with sensitive content you should be fine...

Linux: keyring-password for wlan needed / legitimate wlan login

Sat, 2017-02-18 03:20
Each time i resume my notebook after a suspend to disk-cycle the connection to WLAN hangs with the following message:

 (Die Systemrichtlinien verhinder das Bearbeiten von Netzwerkeinstellungen für alle Benutzer / Enter password for default keyring to unlock)
I tried to fix this via network-manager with adding the hook at the checkbox "Alle Benutzer dürfen dieses Netzwerk verwenden", but this did not help at all.
The point is, that after resuming my login keyring wants a authentication with password again. But this behaviour can be easily changed with the tool seahorse.
(Installation in debian with:  apt-get install seahorse)

After starting seahorse choose "File -> New" and you will get the following dialog:
 Create a new password-keyring (Passwort-Schlüsselbund) -
 Choose a name -
 and do not enter a password (this is not really secure, but if you configure your screensaver to lock your screen with a password, this should not be a problem)
 Confirm an empty password - and the you are done.

At the end you have to delete the old keyring (the one with the password):
This is done with right clicking the appropriate item...

After all this steps you should not see this legitimate-popup anymore...

Review at amazon: Projektbegleitendes Projektmanagement

Fri, 2017-02-17 14:06
Today i finished the book "Projektbegleitendes Projektmanagement:

The author created a quite good reference for project and quality management. If you need a short summary of ISO 9001 or best practices for quality assurance, you will find this in a few pages.
I would like to pay particular attention to the following part: The chapters 9 to 11 contain many checklists, table of contents for some needful documents and so on...
From my point of view this is already sufficient for the purchase of this book.

If you are interested, take a look at my review at (like all my reviews: written in german ;-)