Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
<<importTiddlers>>
<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])

<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

----
Also see [[AdvancedOptions]]
<!--{{{-->
<div class='header' role='banner' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' role='navigation' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' role='navigation' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' role='complementary' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea' role='main'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected {color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:alpha(opacity=60);}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0; top:0;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0 3px 0 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0; padding-bottom:0;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
<!--{{{-->
<div class='toolbar' role='navigation' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
!Snail mail address
Stefaan Eeckels
15 Rue Bettlange
L-9657 Harlange
~Grand-Duch&eacute; de Luxembourg
!GPS coordinates
N 49&deg;55.696'
E 005&deg;46.859'
Elevation: 428m
!Faster communications
|CssClass|k
|!Medium|!Stefaan Eeckels|!!Hilde ~Eeckels-Beerens|h
|!Telephone|+352 993615 20|+352 993615 21|
|!Fax|>|+352 993615 24|
|!e-mail|Stefaan.Eeckels@eccECHHOENDECH.lu|Hilde.Beerens@eccECHHOENDECH.lu|
|!Skype|stefaan.eeckels||

//The e-mail address has an obvious upper-case-only sequence to foil address-harvesting spambots. Just remove it to email us.//
!Other administrativia
We no longer have a VAT account or bank references.
Many people confuse the roles of DNS resolvers and DNS servers. Even if both roles are integrated in the same executable - the case with the granddaddy of DNS implementations: BIND, but also with Microsoft's DNS implementation - they are quite unrelated, and can (and arguably should) be performed by separate executables.

!!A DNS resolver 
(or more accurately, a //recursive resolver//) takes a query and follows the DNS server hierarchy down from the root to resolve the query. It caches the results it receives based on the ~Time-To-Live (TTL) information available in the replies, and hence can acquire quite substantial, but ultimately ephemeral, knowledge of Internet names and addresses.  Anyone who wants to access information on the Internet will need to have access to a DNS resolver. Most people will end up using their ISP's resolvers.

!!A DNS server 
(or more accurately, an //authoritative server//) knows the answers for queries it is authoritative for. It is responsible for providing answers to DNS resolvers, and its knowledge is strictly limited, but persistent. Unless one owns a domain, there's no reason to run a DNS server.
[[News]]
''Please note that a number of the systems shown and discussed here have been retired. New pictures and updates to the text are -as they say in the classics- imminent.''
!Working systems
!!Unix systems
!!!hulk: Tyan dual dual-core Opteron (2008-04)
{{{hulk}}} has 4 cores at 2.2GHz, 12GB RAM, and 4 500GB disks. It runs Solaris 11 and uses ZFS to deliver an effective 1.2TB disk space. At &euro;1325, it was quite cheap, especially for someone who spec'ed and bought Unix systems in the 1980ies.
[img[http://www.ecc.lu/tiddly/hulk.JPG]]
It is powered by a 1200VA Trust Intelligent UPS, which retails for &euro;99. Amazing value.

Here is a picture of the innards of the system. I tried to keep the cabling as clean as possible, unfortunately two of the SATA cables weren't long enough.
[img[http://www.ecc.lu/tiddly/hulk_innardss.JPG]]
!!!blinky: Intel Pentium E2180 dual-boot ~OpenSolaris 2009/06 and Kubuntu Linux (2002-10 to now)
* Current situation
The {{{blinky}}} upgrade story is fast becoming too long to be told - since early April 2009 it sports 4GB RAM, a 500GB SATA disk, and dual-boots either [[OpenSolaris|http://www.opensolaris.org/]] or Kubuntu Linux. ~OpenSolaris is working well enough so {{{monster}}} has been mothballed, and {{{blinky}}} has been promoted to main workstation. The virtual machines that used to run under Kubuntu can be run on Sun's [[VirtualBox|http://www.virtualbox.org/]], which is close in functionality and approach to the original ~VMWare Workstation and runs quite nicely on Solaris. This eliminates the need to boot Kubuntu. 
In September 2009 a second 500GB SATA was added, and the Solaris ZFS root pool is now mirrored. To improve display performance on the new Samsung 24" monitor, the graphics card was upgraded to a ~GT250.
* History
{{{blinky}}} started its career as a cheap system bought off eBay. Though cheap with a gaudy and rather wobbly case (which prompted the name {{{blinky}}}), it worked quite well, running various versions of Linux. In its early days, it was used to help testing programs using ~VMWare Workstation. The 40GB disk and 256MB RAM were upgraded to 80GB and 512MB respectively, and further upgrades brought it to 1GB RAM, a 250GB IDE disk, a better power supply, a faster video card, an LG DVD writer, a better CPU cooler and a nice case fan with ceramic bearings.
A good deal on a shiny black [[Antec Sonata III|http://www.antec.com/us/productDetails.php?ProdID=15137]] case, prompted a transplant of all the parts to a new home, which lead to a significant reduction in noise as well as CPU and motherboard temperatures.
By September 2009 the ECS ~K7S5A motherboard of {{{blinky}}} was showing signs of instability (and the tell-tale bulging capacitors), so it, the original AMD Athlon ~XP2000+ from 2002 and the 1GB DDR RAM were replaced by an Asus ~P5KPL/1600 motherboard sporting a cheap dual-core Intel Pentium E2180 with 2GB ~DDR2 RAM. We kept the case, the 250GB PATA disk and the LG DVD writer, but upgraded the graphics card to a passively cooled PCI Express Nvidia 8500GT graphics card.
Paired with a cheap Samsung 24" (1920x1200 for a mere &euro;199) monitor this Frankensteinian creation is a very usable system. [img[http://www.ecc.lu/tiddly/blinky.JPG]]
This machine is our upgrade king. One would almost forget that originally, {{{blinky}}} was a very inexpensive system...
!!!monster: Sun Blade2000 (2004-10)
{{{monster}}} is an aging but still usable Sun Blade 2000 (the system Sun produced for their 20th birthday). I got it off eBay in October 2004 for a very reasonable price. It has dual 900MHz Cu processors, 4GB of RAM, and dual 73GB ~FC-AL disk. With its temperature controlled fans, it's a reasonably quiet machine, and far, far quicker than the 360MHz Ultra 60 it replaces. In addition, the colour-changing front with the illuminated Sun logo is way cool :-).  This is one hunk of a system. Though mostly switched off, I still love it.
[img[http://www.ecc.lu/tiddly/monster.JPG]]
!!MS Windows systems
Like most of our Unix systems, our Windows systems are neither particularly powerful nor particularly recent. We choose our kit carefully and use it for a long time, which is cheap, ecologically sound (whatever that means :), and fun. Of course, there are always moments when a new acquisition raises the ante...
!!!attila: Acer Aspire, Intel Core Duo quad-core at 2.4GHz, 4GB RAM (2008-12)
{{{attila}}} is a nice Acer Aspire that was bought to replace {{{ghengis}}}, which was not able to drive a new, very inexpensive (&euro;149) 22" monitor at its native resolution of 1680x1050. In addition, {{{ghengis}}} had some problems running recent digitizing software, and had needed a fan transplant. Add into the mix its venerable age and an end-of-year sale on the Acer, and the decision was easy. For a couple of months, E.C.C. will have a nearly state-of-the-art system, with more than enough power to run the copy of Windows Vista it came with.
!!!speedy: ACER Ferrari 4500 running Windows XP and Solaris 11 (2005-09)
speedy has a AMD Thurion 2GHz processor, a 100GB hard disk, lots of USB ports and a ~WiFi card. I've long resisted buying laptops because of the high price premium, low speed and smallish displays. When it became apparent in late 2003 that the processor speed wars were over, I decided to buy a rather cheap Acer portable, which proved to be really useful for presentations and Windows development work. This lead to the purchase of the Ferrari in September 2005. Hard to believe it's already three years old.
[img[http://www.ecc.lu/tiddly/speedy.JPG]]
!!!mini: Medion netbook
This is a netbook with 1GB RAM, a 1.6GHz Atom processor, and a 10" 1024x600 screen. Very portable, and very useful through the built-in ~WiFi, webcam and microphone which makes it an ideal Skype device. Plus, it's cheap.
!!Communications equipment
The availability of ADSL (~LuxDSL) here in Harlange (the guy who did the installation informed me we were the first ADSL customer in our village) has prompted E.C.C. to invest in ADSL modems (starting with the ~SpeedTouch home from Alcatel, which I got from the Post Office, and continuing with a Cisco 836 used purely as a modem, and finally an Arcor ~ADSL2+ modem), and a number of small routers (configuring routers is fun). The ~ZyXEL ~ZyWall 5 (2005-05) has been retired after nearly five years of faithful service. Its replacement is a ~ZyWALL ~USG-100.  

"Thanks" to the thick walls and reinforced concrete ceiling, I had to install a D-link Access Point upstairs, but this solution wasn't very satisfactory. The ~AP had to be rebooted every so often to restore communications to a PC, causing other ~PCs to lose connection. This prompted the installation of a number of Olitec ~CPL200plus ~HomePlug adapters. They work remarkably well.
[img[http://www.ecc.lu/tiddly/DWL-2100AP_main.jpg]]
The following picture shows the networking rack (which is actually a cheap ~HiFi rack from Ikea).
[img[http://www.ecc.lu/tiddly/rack.JPG]]
From top to bottom, the ~PictureTel videoconference unit and its display (a TV set with no antenna connected - strictly business), and on the shelf below,  {{{groggy}}} the Sun Ultra 1. On the next shelf one can see the ~AirLive Access Point, the ELSA Microlink ISDN router and the ~LevelOne NAS device. The following shelf contains the Arcor ~ADSL2+ modem, a Cisco 836 (earlier used as an ADSL modem) and a Cisco 801 ISDN router used for ISDN Dial backup. Then follows the ~ZyWall 5. Here's the [[total Internet traffic|http://eeckels.dyndns.org/mrtg/vpnrouter_6.total.2009.html]] through the ~ZyWall. Click on the month to see a detailed graph. [[MRTG graphs|http://eeckels.dyndns.org/mrtg/vpnrouter_6.html]] for the Internet interface are refreshed every five minutes. At the bottom of the rack one finds older equipment and the 650VA UPS that powers the networking equipment.
[img[http://www.ecc.lu/tiddly/switches.JPG]]
We've recently upgraded the switch to a ~USRobotics 997724A sporting 24 Gigabit Ethernet ports, with VLAN, trunking and port mirroring. Its predecessor, an ~OvisLink 24+2 switch, serves as backup. The switches are mounted in a little rack just below the patchpanel where the ~CAT5e cables are terminated. The Cameo 24 port Fast Ethernet switch we used before acquiring the ~OvisLink is no longer connected - if you want it, please drop us a line. At the right of the picture is a corner of the UPS that feeds the switches. 

A vintage Allied Telesyn 8 port Ethernet hub with a BNC connector is used to provide Ethernet access to the collection of old Unix systems described below.

!Printers, copiers and related office equipment
After the demise of the HP ~OfficeJet d155xi , the office is down to a single AIO and an Epson photo printer. This is an area where some thinking is, and an investment might called for given the rather high price of consumables.
!!Brother ~MFC-9420NC (2006-05)
This is a colour-laser device that incorporates a Postscript interpreter, network support (including scanning to an email address). Its drawbacks are the lack of a duplexing unit, and the rather high cost of the cartridges. While they last a long time, &euro;190 list for a black toner cartridge is a bit steep (an equivalent Brother AIO can be bought for &euro;499).
[img[http://www.ecc.lu/tiddly/brother.JPG]]
!Unix Collection
!!blue: IBM RS/6000 7012-340
This is a genuine RS/6000 ~POWERserver, with a 33MHz processor and 128MB of memory, dating from 1992. I stripped the two 1GB drives it came with, and installed a 18GB SCSI drive instead. For its age, it runs well (and remarkably fast given the slow processor), and with AIX 4.3.3 installed it's a real blast from the past. Unfortunately the only Ethernet interfaces it has use BNC connectors. 
!!happy: ~Hewlett-Packard Visualize C160
With its 160MHz ~PA-RISC processor {{{happy}}} is a bit speedier than {{{blue}}}. It only has a 4GB disk drive (a HVD SCSI drive, high voltage differential SCSI is dead, and I've not been able to find a bigger drive), but with ~HP-UX 11.0 and a reasonably recent JDK, it even runs Java programs with a quite acceptable turn of speed, ~GUIs included. ~PA-RISC was a nice processor.
!!groggy: Sun Ultra 1
{{{groggy}}} is a 167MHz ~UltraSPARC I with 768MB memory and a 9GB disk drive. It runs Solaris 9, has two Ethernet interfaces (10Mbps and 100Mbps) and two frame buffers. 
!!ultra: Sun Ultra 60
{{{ultra}}} is a dual-360MHz system with 1.7 GB RAM. The {{{hme}}} Fast Ethernet interface ceased working, and I installed a cheap Realtek based NIC to keep the machine usable. It has a ~SunPCi card with an AMD 500MHz processor, and runs Windows in a window...
!!curly: DEC (then Compaq now HP) Personal Workstation 500au
{{{curly}}} has a 500MHz Alpha processor, 768MB RAM and runs Tru64 5.1A. There's something special about DEC and the Alpha. DEC because they influenced computing more than almost any other company, and the Alpha because even today, after years of dereliction, it's still one of the faster processors on the planet. Both DEC and the Alpha should have stayed around.
!!fuel: sgi Octane
{{{fuel}}} has a 195MHz R10000 processor and 1GB of RAM. It runs IRIX 6.5.11 when it's switched on, which isn't all that often as it makes more noise than a Jumbo jet at take-off. It seems there is no way to get the fan to behave, at least Google couldn't come up with anything. sgi machines were once the stuff of dreams.
!Old, and really old stuff
One of the things I regret from time to time is that I didn't keep my ~TRS-80 Model 1 Level 2, if only to remind me how far we have come. Mine had 16K, and a cassette recorder that gave problems on every second CSAVE (or CLOAD), and even though I ogled the extension interface and disk drives, I never got beyond buying a ~TRS-DOS manual. Oh well, I don't have the space to start a museum anyway.
!!Cromemco C-10 with CDOS
I got the Cromemco C-10 down from the attic. Its two full-height 5.25" disk drives have given up the ghost (the latch, to be more accurate), but I still have a working half-height 5.25" drive in a box in the cupboard - well, it was working when I removed it from {{{joost}}}, the old 386/25 and my first ever Unix box. It turns out I can't use the old 5.25" disk drive on the C-10, as I have lost the special cable with a totally non-standard, stackable connector Cromemco used. Sad, I really would like to show a genuine screen-shot of {{{WriteMaster}}}, Cromemco's word processor. I still have all the manuals that came with the C-10. Great news (at least for me) is that I've made a cable to use the C-10 as serial console for {{{groggy}}}, as can be seen in the second picture.

* Cromemco C-10 ad from Byte October 1983:
[img[http://www.ecc.lu/tiddly/cromemco_c10.jpg]]
* A picture of the Cromemco C-10 doing console duty:
[img[http://www.ecc.lu/tiddly/Cromemco.jpg]]

The latest ~ROMs for the C-10 included CDOS as well as a terminal emulator; when a serial connection is detected and no drives are connected, the C-10 automatically starts the terminal emulator.

This is the home page of E.C.C. sa. We're located in Luxembourg, and between 1991 and 2010 we used to provide system design, program development, and system administration services. Our focus is Solaris and Linux, but we've lots of Windows development expertise as well. 

This Web presence is a Wiki, a [[TiddlyWiki|http://tiddlywiki.org]] to be more precise. This is an intriguing and very clever ~JavaScript-only implementation of the Wiki idea, with the complete site contained in a single HTML file. Exploring the technology was one of the reasons to revamp the old Twiki-based web site.
!You've received SPAM
E.C.C. doesn't spam; if you receive SPAM purporting to originate from {{{ecc.lu}}}, a spammer has been using our domain (which is old, by Internet standards, as it was registered in 1995) to hide his tracks. Alternatively, one of the innumerable email worms has infected a pour soul's machine, and it's sending out mail pretending to come from an {{{ecc.lu}}} address. We can't deal with the bounces and virus reports - they're automated anyway, and replying to them isn't all that useful. Please feel free to mail the customary [[abuse or postmaster|mailto:postmaster@ecc.lu?Subject=I have been spammed with a message from ecc.lu]] accounts at E.C.C., and we'll be happy to track the origin. If it's SPAM, we'll submit it to Spamcop. 
!You've sent us an email
E.C.C. gets a lot of SPAM, and we try not to be submerged by offers for shady mortgages, bargain-basement pirated software, dubious cheap medecine, "male enhancement" contraptions, and other RC cars. That's why email emanating from IP addresses without proper Reverse DNS (i.e. after doing a PTR DNS lookup on the IP address, our MTA looks up the IP address of the PTR name it obtained, and one of the returned addresses must match the original IP address), as well as third party email relays on the ZEN list of Spamhaus is refused. Once accepted, email is filtered and tagged by Eric Raymond's bogofilter Bayesian SPAM filter. These approaches combined yield excellent results -- most if not all SPAM and scam messages arrive in a SPAM mailbox. Genuine messages are left alone (mostly).

Thanks for visiting!
!Problems and solutions

[[QmailBounces]] - 08 Jun 2005
[[SolarisGnomeDevelopment]] - 28 Feb 2003 / 13 Sep 2008
[[SecureSMTP]] - 04 Nov 2004 
[[NetscapeSigntool]] - 13 Mar 2003
[[OracleTemporaryTable]] - 07 Feb 2005

!Notes and observations
[[DNS confusion]] - 13 Nov 2009
[[News]]
[[Introduction]]
[[ContactInformation]]
[[Network]]
[[Equipment]]
[[KnowledgeBase]]

^^[img[favicon.ico]] <html><small>Site contents
&copy; Stefaan Eeckels 2008-2013</small></html>^^

^^<html><small>ecc.lu is powered by Debian, Apache, djbdns and qmail. Since 2003-12-03 we're running our own djbdns servers.</small></html>
[img[http://www.ecc.lu/tiddly/openlogo-nd-50.png][http://www.debian.org/]]
[img[http://www.ecc.lu/tiddly/powered-by-djbdns.gif][http://cr.yp.to/djbdns.html]]
[img[http://www.ecc.lu/tiddly/powered-by-qmail2.jpg][http://cr.yp.to/qmail.html]]^^

^^<html><small>This site was created with</small></html>
[img[http://www.ecc.lu/tiddly/tiddlywikki.ico]] [[TiddlyWiki|http://www.tiddlywiki.com]] <<version>>^^
^^<html><small>and is served up with Apache from  a Xen-based VM from RapidXen/Enzu</small></html>
[img[RapidXen Logo|http://www.ecc.lu/tiddly/rxrev2_3.png][http://www.rapidxen.net/]]^^
!Problem
The Netscape "signtool 1.3" fails when using a key database created (or modified) by Netscape 6 or 7.
!Solution
Use Netscape 4.7x to handle the key database. Alternatively, use the Java tools, something I intend to read up on and document.

-- StefaanEeckels - 13 Mar 2003

[img[http://home.ecc.lu:8018/network/Sub_1.jpg]]

[[NView|http://www.n-view.net/]] by Wolfgang Ullrich is a nice network monitor written in Java. I helped him with the JNI on Solaris and got a couple of free licenses as reward. It's not too heavy on resources (for a Java program) so I ran it for a while on {{{happy}}}, the HP C-160 with ~HP-UX 11.0. Even though this machine has only 128M RAM, ~NView ran quite nicely. Now it runs on {{{hulk}}} in the network zone {{{netzone}}} and it disappears in the computing background noise. It can generate [[HTML pages|http://home.ecc.lu:8018/network/index.html]] like the main one above, allowing the network to be monitored from a distance. 

Other network-related information is [[the total traffic|http://home.ecc.lu:8008/mrtg/vpnrouter_14.total.2013.html]] through the ~ZyWALL ~USG-100 router, and you might also be interested in the [[MRTG|http://home.ecc.lu:8008/mrtg/vpnrouter_14.html]] graphs of ECC's internet connection. 

The office is connected through an ADSL line with a dynamic IP address. The DNS, SMTP and HTTP servers are hosted on  Xen based Virtual Machines from [[RapidXen|http://www.rapidxen.net]]. Both systems run Debian are have identical configurations. A home-grown dynamic DNS mechanism based on [[djbdns|http://cr.yp.to/djbdns.html]] ensures that "home.ecc.lu" always points to the ADSL address. 
!2013-09-05: New ~TP-Link managed 24-port Gigabit switch
Fanless, fast and stable with a CLI reminiscent of Cisco, it was remarkably affordable (not quite 165€) on Amazon. The same features would have cost four times as much only a few years ago.
!2013-08-01: Synology ~DiskStation replaces hulk
hulk was using about 0.25kWh -- not so much for a 12GB quad-CPU system with 4 500GB and 2 1TB disks, but it adds up when a machine is running 24/7. To save electricity (and money :), I replaced it with a Synology DS 213j, a real power miser with its 19Wh when active and a measly 3.5W when idle. All the services have been migrated to it, so it acts as a DNS server, a file server, a mail server (SMTP and IMAP) and an LDAP server. All of that and mirroring 2 2TB Western Digital Red NAS disks in 512MB RAM and using a 1.2GHz ARM processor. As a bonus, we now have remote email access through ~RoundCube. 
!2013-01-15: New NAS
After years of faithful (but noisy) service, the ~LevelOne NAS was replaced with a 2TB NAS from Medion (which uses ~ZyXEL firmware). Like the device it replaces, it runs under Linux.
!2012-07-17: Recovery from server crash
The host of one of the two external servers suffered a storage crash, and as a result its contents were lost. I imaged a new OS and reloaded the services (qmail, tinydns/dnscache and Apache). The crash also affected the family pictures site, and I decided to use the opportunity to create a new site. ETA: Sometime in 2013.
!2012-04-01: The Auerswald ~COMpact 5020 VOIP is up and running
I received the 5020 and installed it in the telecoms corner (after removing the Philips IS 3000, of course)
[img[http://www.ecc.lu/tiddly/auerswald.jpg]]. 
It's a lot smaller, physically, and not quite as extensible, but in most respects it's far superior. For starters, you can connect to it using a browser, and it keeps accurate time (it supports NTP!). I replaced the wiring cabinet with a patch panel, so now all eight wires in the ~CAT5e cables are available (the old wiring cabinet only connected four). This means the wiring can be used both for telephone and network connections (cf. the red patch cable in the image, used to link the PBX to the network). All the cables are now labeled -- they weren't, and any PBX port can be patched to any socket. The previous PBX used special plugs and 16-wire cables to connect the ports, of course without any labeling... Professionals, you gotta love them.
!Problem
Access a LOB from a ~DBlink results in error {{{ORA-22992}}}
{{{
SQL> select req_id, public_key from request@ediflowprod;
select req_id, public_key from request@ediflowprod
               *
ERROR at line 1:
ORA-22992: cannot use LOB locators selected from remote tables
}}}
!Solution
Create a temporary table corresponding to the remote table:
{{{
  1  create global temporary table temp_request
  2  (
  3   REQ_ID                      NUMBER(10),
  4   REQUEST_ID                  VARCHAR2(30),
  5   ORG_ID                      NUMBER(10),
  6   DESCRIPTION                 NUMBER(7),
  7   THEME_ID                    NUMBER(6),
  8   COMMENTS                    VARCHAR2(510),
  9   STATUS                      NUMBER(1),
 10   LEGAL_BASIS                 NUMBER(7),
 11   SP_MODULE                   VARCHAR2(100),
 12   CONFIDENTIAL                NUMBER(1),
 13   PUBLIC_KEY                  CLOB
 14  )
 15  on commit preserve rows
SQL> /
}}}
Insert the required row into the temporary table:
{{{
SQL> insert into temp_request
        (select * from request@ediflowprod where req_id = 665);

1 row created.
}}}
Then query against the temporary table:
{{{
SQL> select req_id, public_key 
     from temp_request where req_id = 665;

    REQ_ID PUBLIC_KEY
---------- ---------------------------------------
       665 -----BEGIN PGP PUBLIC KEY BLOCK-----
           Version: GnuPG v1.2.1 (MingW32)

           mOsEQgJ
}}}
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='macro' force='true' macro='slider chkSideBarTabs SideBarTabs "&nbsp;index >" "display lists of tiddlers"'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
!Problem
Dan Bernstein's qmail sends a bounce message when the addressee doesn't exist. While this was a valid approach in the early, naive days of the Internet, today it merely amplifies the volume of SPAM. Spammers using dictionary-based adresses, or abusing one's domain in their From: lines create many many messages addressed to unknown addressees, and the best approach is to simply drop the message. Recording the sender and recipient is a nice idea that can help identifying address problems in messages from genuine correspondents .
!Solution
* Create a script, e.g. {{{recordbadmail}}} (in {{{/var/qmail/bin}}} for example), make sure it's executable:
{{{
#!/bin/ksh
 
# Script to record salient data on dropped messages
echo `date`": SENDER: <$SENDER>, RECIP: <$RECIPIENT>" >>/var/log/qmail/droppedmessages
}}}
This will allow you to see if someone you want to receive mail from used an incorrect address which you rejected.
* Put the following in {{{/var/qmail/alias/.qmail-default}}}:
{{{
# DISCARD unknown@yourdomain
|/var/qmail/bin/recordbadmail
}}}
Now qmail will accept the message (there's no easy way to make it close the connection on invalid user names), but drop it in the bit-bucket instead of sending a bounce message. 
!Problem
Create a secure SMTP link from a qmail server on the LAN to the company's mail qmail server on a Linux Virtual System. ECC rents a ~User-Mode Linux VM at ~RedwoodVirtual, which is used as the mailhost and Web server. On this LVS (a slice of a bi-processor machine) we have "near"-root access, meaning that most root actions are allowed, but a small number aren't. One of these is access to the /dev/net/tun device, and another installing kernel modules. This ruled out the use of Linux ~VPNs such as ~FreeS/WAN and tinc. As I am reluctant to fork over the �25 per month the P&T want for a static IP address, I needed a secure way to use the LVS as ECC's main SMTP smarthost, as it has a fixed IP address. .
!Solution
Zebedee, a secure encrypted user space tunnel program allows a tunnel to be created from a port (2525) on the LAN's SMTP server (a Solaris zone running qmail), to port 25 on the LVS ({{{www.ecc.lu}}}). qmail can be instructed (through the {{{smtproutes}}} control file) to use a smarthost and a different port. The problem is solved, and with less overhead than SSH.
<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal "DD MMM YYYY" "journal">><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel "options >" "Change TiddlyWiki advanced options">>

Stefaan Eeckels (ex [img[http://www.ecc.lu/tiddly/ecclogo.png]]E.C.C.sa)
http://www.ecc.lu/
!Problem
Compiling GNOME based programs on Solaris complains about missing packages, even though these are installed in {{{/usr/sfw}}}, {{{/opt/sfw}}} or {{{/opt/csw}}}.
!Solution
The ~PKG_CONFIG_PATH environment variable should be set to include the directories where packages have been installed:
{{{
: [sae@hulk /usr/bin];  find /usr /opt -type d -name pkgconfig
/usr/share/pkgconfig
/usr/lib/amd64/pkgconfig
/usr/lib/pkgconfig
/usr/lib/pentium_pro+mmx/pkgconfig
/usr/sfw/lib/pkgconfig
/usr/sfw/ups/lib/pkgconfig
/usr/apache2/2.2/lib/amd64/pkgconfig
/usr/apache2/2.2/lib/pkgconfig
/usr/local/lib/pkgconfig
}}}
Not all of these directories are relevant - for example, the {{{/usr/sfw/ups/lib/pkgconfig}}} was added when I installed the UPS monitoring software. 
Since April 2010 and until March 2013 I am working for Eurostat (part of the European Commission), maintaining and improving SAS programs. This is quite a major change as I am in employment, with paid holidays and working flexi-time, doing what I love and do best: learning new skills and programming. 

Until then, for almost 20 years, I was a self-employed C, C++, Java programmer, systems analyst/designer and Solaris, Linux, Windows and a bit of AIX, and ~HP-UX system administrator with solid Oracle and networking knowledge. This is the result of more than 30 years experience in all aspects of computing (including selling computers, and a 4 year stint as MIS manager). I don't mind writing reports and going to meetings, and have a penchant for producing documentation. I've traveled extensively but prefer staying home with my family, which is why I have been promoting and using tele-commuting since 1997. I've been told I look dashing in a suit, but am more comfortable in informal clothes :). 
!Mug Shot
[img[http://www.ecc.lu/tiddly/stefaan.JPG]]
!Relevant facts
* Name: Stefaan Eeckels
* Email: Stefaan.Eeckels@eccECHHOENDECH.lu (remove the upper case letters to email me)
* URL: http://www.ecc.lu (you're here:)
* Location: Harlange
* Country: Luxembourg
!Curriculum vitae
* [[CV_2013_01|http://www.ecc.lu/tiddly/CV_2013_01.pdf]]: Stefaan Eeckels' CV (resum&eacute;) as of 2013-01.
!Freeware
Here are a number of small utilities that I find quite handy, especially in shell scripts. All of them should compile on most if not all Unix (and Linux) systems through a simple {{{$ make program}}}. 
* [[age.c|http://www.ecc.lu/tiddly/age.c]]: a 'C' program to print the age (in minutes, hours, days and weeks) of a file.
* [[fixpath.c|http://www.ecc.lu/tiddly/fixpath.c]]: a little 'C' program to manage PATH variables (remove elements from the PATH, avoid adding duplicate entries, make sure the current directory is not on the path, etc.).
* [[follow.c|http://www.ecc.lu/tiddly/follow.c]]: a 'C' program to follow a file (like tail -f, but it will switch to the new file when it is renamed and a new file is created).
* [[fsize.c|http://www.ecc.lu/tiddly/fsize.c]]: a 'C' program to return the size of a file in bytes, kB, MB or GB.
*[[yesterday.c|http://www.ecc.lu/tiddly/yesterday.c]]: an tiny 'C' program to print yesterday's date and time.
/***
Use a larger font size
***/
/*{{{*/
body {font-size:1em; font-family:verdana,arial,helvetica; margin:0; padding:0;}
/*}}}*/
/***
This fixes a problem with the tabs slider
***/
/*{{{*/
#sidebarTabs .button {
	margin:0em 0.2em;
	padding:0.2em 0.3em;
	display:block;
}
/*}}}*/