3499 (mirror)

installation des solid-servers auf debian.

translated from https://solid.inrupt.com/docs/installing-running-nss

wie in diesem howto installieren wir Node.js und npm:

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs build-essential

als root installieren wir den server global:

npm install -g solid-server

nun müssen wir den hostnamen festlegen, wir werden im folgenden beispielhaft your.host.example.org verwenden. entscheiden sie ebenfalls, wo sie die dateien speichern, die der server zum laufen braucht. die datenbank mit konfiguration, daten und unterstützenden metadaten kann auch getrennt gehalten werden, wieauchimmer halten wir sie jedoch zusammen.

weil alles, was mit dem solid-server passiert, verschlüsselt ist, brauchen wir einen ssl-schlüssel und -zertifikat. diese bekommen wir z.b. bei let’ s encrypt. dies geht am einfachsten mit certbot. um certbot auf debian stable zu benutzen, brauchen wir backports. um diese zu verwenden, fügen wir der /etc/apt/sources.list folgendes hinzu:

deb http://ftp.debian.org/debian stretch-backports main

nun installieren wir certbot

apt-get update
apt-get -t stretch-backports install certbot

das zertifikat anfordern und installieren

certbot certonly --authenticator standalone -d your.host.example.org

now go

solid init

wir werden nach verschiedenen dingen geprompted, dies könnte so aussehen

? Path to the folder you want to serve. Default is /var/www/your.host.example.org/data
? SSL port to run on. Default is 8443 443
? Solid server uri (with protocol, hostname and port) https://your.host.example.org
? Enable WebID authentication Yes
? Serve Solid on URL path /
? Path to the config directory (for example: /etc/solid-server) /var/www/your.host.example.org/config
? Path to the config file (for example: ./config.json) /var/www/your.host.example.org/config.json
? Path to the server metadata db directory (for users/apps etc) /var/www/your.host.example.org/.db
? Path to the SSL private key in PEM format /etc/letsencrypt/live/your.host.example.org/privkey.pem
? Path to the SSL certificate key in PEM format /etc/letsencrypt/live/your.host.example.org/fullchain.pem
? Enable multi-user mode No
? Do you want to have a CORS proxy endpoint? Yes
? Serve the CORS proxy on this path /proxy
? Do you want to set up an email service? No
config created on /root/config.json

die pfade, die wir gewählt haben, müssen wir nun anlegen. ebenso müssen wir die config.json wo angegeben speichern.

nun sollten wir den server starten können

solid start

wir empfehlen, z.b. systemd zu verwenden, um den server automatisch zu starten und zu stoppen.

da es ein sicherheitsrisiko ist, den server als root zu betreiben, legen wir für ihn einen user an, beispielhaft so

adduser --system --ingroup www-data --no-create-home solid

nun legen wir die datei /lib/systemd/system/solid.service mit folgendem inhalt an

[Unit]
Description=solid - Social Linked Data
Documentation=https://solid.inrupt.com/docs/
After=network.target

[Service]
Type=simple
User=solid
WorkingDirectory=/var/www/your.host.example.org
ExecStart=/usr/bin/solid start -v
Restart=on-failure

[Install]
WantedBy=multi-user.target

symlink this

ln -s /lib/systemd/system/solid.service /etc/systemd/system/multi-user.target.wants/

wir weisen den verzeichnissen user zu

cd /var/www/your.host.example.org/
chown solid:www-data config/ data/ .db/

wir machen die config.json datei dem unprivilegierten user readable.

den server nun starten geht so

systemctl start solid.service

nun haben wir auch die anderen funktionalitäten, die durch systemd bereitgestellt werden. der start sollte nun automatisch nach bootvorgang erfolgen.

das zertifikat muss alle paar monate erneuert werden. wir weisen im Let’s Encrypt-setup an, das webroot plugin zu benutzen, das funktioniert besser in dem fall eines laufenden servers. um dies zu tun, editieren wir /etc/letsencrypt/renewal/your.host.example.org.conf

die authenticator line sollte so aussehen

authenticator = webroot

wir setzen ebenfalls folgendes

webroot_path = /var/www/your.host.example.org/data
[[webroot_map]]
your.host.example.org = /var/www/your.host.example.org/data

nun legen wir noch eine cronjobdatei in /etc/cron.daily/ folgenden inhalts an

#!/bin/bash
certbot renew -w /var/www/your.host.example.org/data/

fertig. das moduleREADME finden wir hier. be happy !

3453 (turtle introduction {([ttl])})

illustration02.png

illustration02.png


—-
illustration01.ttl

{
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix ns4: <https://mevering.solid.community/profile/card#> .
@prefix ldp: <http://www.w3.org/ns/ldp#> .
@prefix wdrs: <http://www.w3.org/2007/05/powder-s#> .
@prefix gr:  <http://purl.org/goodrelations/v1#> .
@prefix dcterms: <http://purl.org/dc/terms/> .

<>
a foaf:Document ;
foaf:name "A Document about illustrating a simple Linked Data exercise" ;
dcterms:description "A collection of RDF sentences that describe a Linked Data exercise" ;
foaf:depiction <https://www.serverproject.de/etc/freax/files/ttl/pics/illustration02.png> ;
foaf:topic <glossary_index01.txt>, <doc01.ttl>, <doc02.ttl>, <doc03.ttl>, <product01.ttl>, <org01.ttl> .
}

—-
glossary_index01.txt

glossary_index01.txt
{
doc01.ttl#man			pics/man200x200.png
doc02.ttl#woman			pics/woman200x200.png
doc03.ttl#couple		pics/manwoman200x200.png
org01.ttl#meisdata		pics/meisdata200x200.png
product01.ttl#coolFavicon	pics/favicon.ico
illustration01.ttl		pics/illustration02.png
}
https://mevering.solid.community/profile/card#me

—-
doc01.ttl

{
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix ldp: <http://www.w3.org/ns/ldp#> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix gr: <http://purl.org/goodrelations/v1#> .
@prefix wdrs: <http://www.w3.org/2007/05/powder-s#> .

<>
a foaf:Document ;
foaf:name "A Document that describes a Person literally identified as 'man'" ;
dcterms:description "A collection of RDF sentences that describe a Person literally identified (or labeled) as 'man'" ;
foaf:primaryTopic <#man> .

<#man>
a foaf:Person ;
foaf:name "man" ;
foaf:depiction <https://www.serverproject.de/etc/freax/files/ttl/pics/man200x200.png> ;
gr:seeks <product01.ttl#coolFavicon> ;
foaf:knows <doc02.ttl#woman>, <doc03.ttl#couple> ;
wdrs:describedby <> .
}

—-
doc02.ttl

{
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix ldp: <http://www.w3.org/ns/ldp#> .
@prefix wdrs: <http://www.w3.org/2007/05/powder-s#> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix gr: <http://purl.org/goodrelations/v1#> .

<>
a foaf:Document ;
foaf:name "A Document that describes a Person literally identified as 'woman'" ;
dcterms:description "A collection of RDF sentences that describe a Person literally identified (or labeled) as 'woman'" ;
foaf:primaryTopic <#woman> .

<#woman>
rdf:type foaf:Person ;
foaf:name "woman" ;
foaf:knows <doc01.ttl#man>, <doc03.ttl#couple> ;
foaf:depiction <https://www.serverproject.de/etc/freax/files/ttl/pics/woman200x200.png> ;
gr:seeks <product01.ttl#coolFavicon> ;
wdrs:describedby <> .
}

—-
doc03.ttl

{
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix ldp: <http://www.w3.org/ns/ldp#> .
@prefix wdrs: <http://www.w3.org/2007/05/powder-s#> .
@prefix rel: <http://purl.org/vocab/relationship/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix gr: <http://purl.org/goodrelations/v1#> .

<>
a foaf:Document ;
foaf:name "A Document that describes a Person literally identified as 'couple'" ;
dcterms:description "A collection of RDF sentences that describe a Person literally identified (or labeled) as 'couple'" ;
foaf:primaryTopic <#couple> .

<#couple>
rdf:type foaf:Person ;
foaf:name "couple" ;
foaf:knows <doc01.ttl#man>, <doc02.ttl#woman> ;
foaf:depiction <https://www.serverproject.de/etc/freax/files/ttl/pics/manwoman200x200.png> ;
rel:employedBy <org01.ttl#meisdata> ;
wdrs:describedby <> .
}

—-
org01.ttl

{
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix ldp: <http://www.w3.org/ns/ldp#> .
@prefix gr: <http://purl.org/goodrelations/v1#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix ldp: <http://www.w3.org/ns/ldp#> .
@prefix gr: <http://purl.org/goodrelations/v1#> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix wdrs: <http://www.w3.org/2007/05/powder-s#> .

<>
a foaf:Document ;
foaf:name "A Document that describes an Organization literally identified as 'meisdata'" ;
dcterms:description "A collection of RDF sentences that describe an Organization literally identified (or labeled) as 'meisdata'" ;
foaf:primaryTopic <#meisdata> .

<#meisdata>
rdf:type gr:BusinessEntity , foaf:Organization ;
foaf:name "meisdata" ;
foaf:depiction <https://www.serverproject.de/etc/freax/files/ttl/pics/meisdata200x200.png> ;
foaf:made <product01.ttl#coolFavicon> ;
wdrs:describedby <> .

}

—-
product01.ttl

{
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix ldp: <http://www.w3.org/ns/ldp#> .
@prefix gr: <http://purl.org/goodrelations/v1#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix wdrs: <http://www.w3.org/2007/05/powder-s#> .

<>
a foaf:Document ;
foaf:name "A Document that describes a Product literally identified as 'coolFavicon'" ;
dcterms:description "A collection of RDF sentences that describe a Product literally identified (or labeled) as 'coolFavicon'" ;
foaf:primaryTopic <#coolFavicon> .

<#coolFavicon>
rdf:type gr:ProductOrService ;
foaf:name "coolFavicon" ;
foaf:depiction <https://www.serverproject.de/etc/freax/files/ttl/pics/favicon.ico> ;
foaf:maker <org01.ttl#meisdata> ;
wdrs:describedby <> .
}

—-
https://www.serverproject.de/etc/freax/files/ttl/
https://mevering.solid.community/profile/card#me

3437 (how person digital domain edit x.org remote web local how)

<root>
<url>
<work>https://www.serverproject.de/</work>
<home>https://configedit.wordpress.com/</home>
<local>
<subdomain>venus</subdomain>
<main>wood</main>
<tld>local</tld>
</local>
</url>
<nickname>ewing</nickname>
<occupation>hitchhiker</occupation>
<word>writer</word>
<os>debian</os>
<year>1968</year>
<past>forum</past>
<status>alive</status>
<info>gedit</info>
<timestamp>data</timestamp>
<comment>solid</comment>
</root>

3403 (code from index.php in /etc/freax/ highlighted with educational impact specialchars in title)

<!DOCTYPE html>
<html>
<head>
<title>browsertitelzeile</title>
</head>
<body>
<!--dies ist ein html-kommentar-->
<p>hier k&ouml;nnte 'hello world' stehen...</p>
<a href = 'https://selfhtml.org/'>hier selfhtml at https://selfhtml.org/</a><br />
<!--erste adressierungsart-->
<a href = 'https://www.serverproject.de/etc/freax/files/'>/etc/freax/files/ {([one])}</a><br />
<!--zweite adressierungsart-->
<a href = '/etc/freax/files/'>/etc/freax/files/ {([two])}</a><br />
<!--dritte adressierungsart-->
<a href = './files/'>/etc/freax/files/ {([three])}</a><br />
<!--vierte adressierungsart-->
<a href = 'files/'>/etc/freax/files/ {([four])}</a><br />
<hr /><br />
<?php
/*dies ist ein php-kommentar*/
$file = './index.php';
$code = highlight_file ($file, $return = true);
echo $code;
?>
</body>
</html>

3317 (code)

<!DOCTYPE html>
<html lang="de">
<head>
<base href="https://www.serverproject.de/"/>
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta http-equiv="Content-type" content="text/html;charset=UTF-8"/>
<meta name="author" content="ewing"/>
<meta name="editor" content="gedit 3.14.0"/>
<meta name="keywords" content="ewing, Literatur, Code, Experiments, Excercises, Local Dealer, check, typo3, static html, bootstrap, meisdata, db"/>
<meta name="description" content="Code und Literatur zum Download: Fuhrparkverwaltung 'Drive-by', Typo3, 'Herr der Gezeiten', 'Also sprach Gardobaldo', 'Bernie the Rat' und Audio-Zeug."/>
<link rel="icon" href="https://www.serverproject.de/favicon.ico" type="image/x-ico; charset=binary"/>
<title>serverproject.de</title>
<!-- Bootstrap core CSS -->
<link href="/dist/css/bootstrap.min.css" rel="stylesheet"/>
<!-- Bootstrap theme -->
<link href="/dist/css/bootstrap-theme.min.css" rel="stylesheet"/>
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
<link href="/assets/css/ie10-viewport-bug-workaround.css" rel="stylesheet"/>
<!-- Custom styles for this template -->
<link href="/combine.css" rel="stylesheet"/>
<!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
<!-- [if lt IE 9]><script src="/assets/js/ie8-responsive-file-warning.js"></script><![endif] -->
<script async="" src="//www.google-analytics.com/analytics.js"></script>
<script src="/assets/js/ie-emulation-modes-warning.js"></script>
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!-- [if lt IE 9]> <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script><script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> <![endif] -->
<!-- ggua -->
<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-33907597-1', 'auto');
  ga('send', 'pageview');

</script>
<!-- /ggua -->
</head>
<body role="document">
<!-- Google Tag Manager -->
<noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-TBLWBK"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-TBLWBK');</script>
<!-- End Google Tag Manager -->
<!-- Fixed navbar -->
<span itemscope itemtype="http://schema.org/SoftwareApplication">
<nav class="navbar navbar-inverse navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
	  <a class="navbar-brand" href="/"><img src="/logo.jpg" height="25" width="25" alt="Home"/></a>
          <a class="navbar-brand" href="/">serverproject.de</a>
        </div>
        <div id="navbar" class="navbar-collapse collapse">
          <ul class="nav navbar-nav">
            <li class="active"><a href="#">Home</a></li>
            <li class="dropdown">
              <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Download <span class="caret"></span></a>
              <ul class="dropdown-menu">
                <li><a href="/download/hoerprobe-herr-der-gezeiten.htm">Hörprobe Herr der Gezeiten</a></li>
		<li role="separator" class="divider"></li>
                <li><a href="/download/also-sprach-gardobaldo.htm">Also sprach Gardobaldo</a></li>
		<li role="separator" class="divider"></li>
                <li><a href="/download/herr-der-gezeiten.htm">Herr der Gezeiten</a></li>
		<li role="separator" class="divider"></li>
                <li><a href="/download/bernie-the-rat.htm">Bernie the Rat</a></li>
                <li role="separator" class="divider"></li>
		<li><a href="/download/audio-sugardope-0.htm">Audio - Sugardope - 0</a></li>
		<li role="separator" class="divider"></li>
		<li><a href="/download/psych-o-rama-monologue-17.htm">Psych-o-rama - Monologue 17</a></li>
              </ul>
            </li>
	    <li class="dropdown">
              <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Internal 		      <span class="caret"></span></a>
              <ul class="dropdown-menu">
                <li><a href="/internal/guestbook-archive.htm">Guestbook (Archive)</a></li>
		<li role="separator" class="divider"></li>
                <li><a href="/internal/my-next-opera-slitaz.htm">My Next Opera</a></li>
		<li role="separator" class="divider"></li>
                <li><a href="/internal/curriculum-vitae.htm">CV</a></li>
		<li role="separator" class="divider"></li>
                <li><a href="/internal/order-herr-der-gezeiten-audio.htm">Order Herr der Gezeiten (Audio)</a></li>
		<li role="separator" class="divider"></li>
                <li><a href="/internal/bookmarks.htm">Bookmarks</a></li>
              </ul>
            </li>
	    <li class="dropdown">
              <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Subsites 		      <span class="caret"></span></a>
              <ul class="dropdown-menu">
		<li class="dropdown-header">DB Subsites</li>
		<li role="separator" class="divider"></li>
                <li><a href="/subsites/t3-zero.htm">t3 - Zero</a></li>
		<li role="separator" class="divider"></li>
                <li><a href="/subsites/t5-meisdata.htm">t5 - Meisdata</a></li>
		<li role="separator" class="divider"></li>
		<li><a href="/subsites/t7-project-mx.htm">t7 - Project Matrix</a></li>
		<li role="separator" class="divider"></li>
                <li>

<!-- offer -->
<span itemprop="offers" itemscope itemtype="http://schema.org/Offer">
<a itemprop="url" href="/subsites/driveby.htm">Fuhrparkverwaltung driveby</a>
<span itemprop="priceSpecification" itemscope itemtype="http://schema.org/priceSpecification">€<meta itemprop="priceCurrency" content="EUR" /><span itemprop="price">400</span>/instance</span>
<!--<meta itemprop="price" content ="400" />
<meta itemprob="priceCurrency" content ="EUR" />
-->
</span>
<!-- end offer -->

		</li>
              </ul>
            </li>
	    <li class="dropdown">
              <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Links <span class="caret"></span></a>
              <ul class="dropdown-menu">
                <li><a href="/links/blog.htm">Blog</a></li>
		<li role="separator" class="divider"></li>
                <li><a href="/links/experienced-involvement.htm">Experienced Involvement</a></li>
		<li role="separator" class="divider"></li>
                <li><a href="/links/social.htm">Social</a></li>
                <li role="separator" class="divider"></li>
                <li><a href="/links/shopping.htm">Shopping</a></li>
		<li role="separator" class="divider"></li>
                <li><a href="/links/via.htm">Via</a></li>
              </ul>
            </li>
            <li><a href="/about.htm">About</a></li>
            <li><a href="/contact.htm">Contact</a></li>
          </ul>
        </div><!-- /.nav-collapse  -->
      </div>
    </nav>

    <div class="container theme-showcase" role="main">

<!--  carousel  -->
      <div class="page-header">
        <h1>
<span itemprop="name">serverproject</span>.de</h1>
      </div>
      <div id="carousel-example-generic" class="carousel slide" data-ride="carousel">
        <ol class="carousel-indicators">
          <li data-target="#carousel-example-generic" data-slide-to="0" class="active"></li>
          <li data-target="#carousel-example-generic" data-slide-to="1"></li>
          <li data-target="#carousel-example-generic" data-slide-to="2"></li>
        </ol>
        <div class="carousel-inner" role="listbox">
          <div class="item active" align="center">
            <img itemprop="image" src="/pics/slider01b.png" alt="First slide"/>
          </div>
          <div class="item" align="center">
            <img src="/pics/slider02b.png" alt="Second slide"/>
          </div>
          <div class="item" align="center">
            <img src="/pics/slider03b.png" alt="Third slide"/>
          </div>
        </div>
        <a class="left carousel-control" href="#carousel-example-generic" role="button" data-slide="prev">
          <span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
          <span class="sr-only">Previous</span>
        </a>
        <a class="right carousel-control" href="#carousel-example-generic" role="button" data-slide="next">
          <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
          <span class="sr-only">Next</span>
        </a>
      </div>

<!--  carousel end  -->

      <!--  Main jumbotron for a primary marketing message or call to action  -->
      <div class="jumbotron">
        <h1>meisdata</h1>
        <p>Programmierung und Optimierung. Public Area consisting Code and Literature.</p>
      </div>


    </div> <!--  /container  -->

    <footer class="footer">
      <div class="container">
        <p><a href = "/impressum.htm">Impressum</a> | <a href = "/">serverproject.de</a> <img src = "/pics/1px.png">
	</p>
      </div>
<!-- ar --><div itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">  
    <div class="rating-stars-img stars3-4" title="5 persons gave 18 of 25 points for this handcrafted site">
	<meta itemprop="ratingValue" content="3.6" />
	<span itemprop="reviewCount">5</span>
    </div>	
     </div>
<!-- end ar -->
	</footer>
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="name" content="Matthias Evering">
</span>
<span itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="meisdata Individual Software"></span>
<meta itemprop="screenshot" content="http://serverproject.de/pics/serverproject-de.png">
<meta itemprop="operatingSystem" content="debian 8.1">
<meta itemprop="softwareVersion" content="1.0">
<meta itemprop="applicationCategory" content="Database Applications"></span> <!-- Bootstrap core JavaScript ================================================== --> <!-- Placed at the end of the document so the pages load faster --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> <script></script> <script src="/dist/js/bootstrap.min.js"></script> <script src="/assets/js/docs.min.js"></script> <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> <script src="/assets/js/ie10-viewport-bug-workaround.js"></script> </body></html>

3304 (some bash-commando-argument-existance-check-note)

#pos1
if [ $1 != '' ] && [ $2 != '' ]
then 
    do something.....
----
#pos2
Try using the -z test:

if [ -z "$1" ] && [ -z "$2" ]

From man bash:

-z string
   True if the length of string is zero.
----
#pos3
$ fullvar=somestring
$ emptyvar=
$ echo "<${fullvar+set}>"
<set>
$ echo "<${emptyvar+set}>"
<set>
$ echo "<${unsetvar+set}>"
<>
----
if [ $# -eq 0 ]
  then
    echo "No arguments supplied"
fi

3262 (line, diamond)

play with lines/diamond in java (external input class)

print diamond on shell

print diamond on shell



class j1exam01
{
    public static void printLine (int highest, int length)
    {
    int digit = 0;
    int help = 0;
    int spaces = (length - (2 * highest + 1)) / 2;
    //print leading spaces
    if (spaces > 0)
        {
        for (int i = 0; i < spaces; i++)
            {
            System.out.print (" ");
            }  
        }
    //print digits
    switch (highest)
        {
    //case highest 0
        case 0:
            {
            System.out.print ("0");
            break;
            }
    //case highest 1
        case 1:
            {
            System.out.print ("010");
            break;
            }  
    //case other
        default:
            {
            for (int i = 0; i  0)
    {
    for (int i = 0; i < spaces; i++)
        {
        System.out.print (" ");
        }
    }
    //print newline
    System.out.println();
    }
    public static void printDiamond (int center)
    {
    int digit = 0;
    int help = 0;
    int length = (2 * center) + 1;
    //print empty line
    System.out.println();
    //diamond
    switch (center)
        {
        case 0:
            {
            printLine (0, 1);
            break;
            }
        case 1:
            {
            printLine (0, 3);
            printLine (1, 3);
            printLine (0, 3);
            break;
            }
        default:
            {
            for (int i = 0; i < ((2 * center) + 1); i++)
                {
                if (i  center) { digit = center - help; help++; }
                printLine (digit, length);         
                }
            break;
            }
        }
    //print newline {([done in printLine()])}
    //print empty line
    System.out.println();
    }
    public static void main (String[] args)
    {
    int q = 0;
    int h, l, c;
    h = 0;
    l = 0;
    c = 0;
    //main menu
    do
        {
        q = eingabe.readInt("(1)line, (2)diamond or (3)end?");
        if (q == 1)
            {
            h = eingabe.readInt("highest:");
            l = eingabe.readInt("length:");
            printLine (h, l);
            }
        else if (q == 2)
            {
            c = eingabe.readInt("center:");
            printDiamond (c);
            }
        } while (!(q == 3));
    System.out.println ("this is the end");
    }
}