Notizzettel

29.04.12 Mitarbeiter Motivation

23.03.12 100 Hygienefehler

22.03.12 Okklusionslöffel

21.03.12 Treiber D-Link Gigabit-Karte

09.03.12 LED-Stripe

01.03.12 Zahnfilmscanner

24.02.12 Lendenstützkissen

22.02.12 Surfstick optimieren

09.02.12 Händedesinfektion Noroviren

03.02.12 Lancom VPN

05.01.12 Stellmachersendung

30.12.11 Revisionsklappe Edelstahl

29.12.11 Staubschutzgehäuse

05.12.11 Windows 7 Tipps

17.11.11 Excelproblem im Netzwerk -> merkwürdige Dateien

17.11.11 Office 2000 Updates

13.11.11 Heinz von Foerster

07.11.11 Windows 7 unscharfe und verwaschene Schriften

28.10.11 Verschlüsselung von Patientendaten im Mailaustausch

24.10.11 Windows 7 Upgrade Advisor

21.10.11 Windows 7 Problem: Nicht identifiziertes Netzwerk

08.10.11 Lenovo L520 L420 L421 Benutzerhandbuch

06.10.11 Birdiesync Event Sync Problem

21.09.11 Backupsoftware

21.09.11 Synctools

07.09.11 UMTS

07.09.11 Sync Thunderbird/Lightning <-> Smartphone

07.09.11 Thunderbird <-> Outlook synchronisieren

07.09.11 Internet Notebook <-> Handy Kopplung

07.09.11 MFD mit WLAN

05.08.11 Window XP KnowHow

http://www.amazon.de/Elektrische-Anlagen-medizinischen-Einrichtungen-Instandhaltung/dp/3810102067/ref=sr_1_1?ie=UTF8&qid=1306443711&sr=8-1

http://www.amazon.de/Elektrische-Sicherheit-medizinisch-genutzten-Bereichen/dp/3800728311/ref=sr_1_2?ie=UTF8&qid=1306443711&sr=8-2

09.05.11 Bürostühle

Hersteller

Shops

Händler Dortmund

Interessante Alternativen

PDF-Broschüren

04.05.11 Pentium Chipsatz

01.04.11 PIM/Terminplanerprojekte

19.03.11 Openstreetmap auf Garmin Etrex

12.02.11 Sichelform von Lüftern - Sinn und Unsinn

03.02.11 Gehäusefilter

01.02.11 Schmales Cherry-Keyboard

01.02.11 Outlook Daten sichern

01.01.11 Online Umfragetools

04.10.10 Kontextmenü-Einträge löschen/hinzufügen

01.10.10 Treeline antesten

  • Sehr interessant, ein Outliner, bei dem man formatierte Informationen ablegen kann. Hierzu gibt es Format-Templates.
  • http://treeline.bellz.org/

25.08.10 Füllstandsanzeige IP4700 abschalten oder Spezialchip

22.07.10 Sonnenschutzfolien Fenster

15.07.10 Zeitschrift Oya - anders leben. anders denken.

24.05.10 Jojo Mayer - Ein Architekturvortrag der anderen Art!

06.03.10 Online Künstler

29.01.10 Rubydoc

27.01.10 Ruby MySQL

09.01.10 Screencasting

27.11.09 Kerio fwdrv.sys blue screen

22.11.09 Turbocad Infos einpflegen

30.10.09 Anrufbeantworter Elmeg

22.08.09 Erwin Thoma

14.08.09 Scharniere

10.07.09 Kaldet Tiergeeignet

15.06.09 Abriebtester Lackoberflächen

31.05.09 PETlinge

30.05.09 Inspired Bicycles

31.03.09 PC-System Thinkcentre

22.03.09 Firefox-FTP-Client

01.03.09 Tests USB-Sticks

17.02.09

06.02.09 Paradox Dateien bearbeiten

01.01.09 Ubuntu Community-Regeln

25.12.08 Holz-Künstler

13.12.08 Garmin

11.21.08 Heise: Angriffe auf Router

11.12.08 Video Holzschuhe 1923

07.12.08 Freeware getestet

07.12.08 Textbausteinsoftware

25.09.08 DMA-PIO Problematik XP

05.09.08 ShellExtension Problem (rechte Maustaste)

06.08.08 Treesize

06.08.08 DVD-Recovery

27.07.08

27.07.08 Messerforum

24.07.08 Shadowbox Bildpräsentationstool in Websites

16.07.08 Woodworking

04.07.08 Open Cola

16.06.08 Wilhelm von Humboldt

13.06.08 Windows 2000 Hotfix falsche Schriftart beim drucken

31.05.08 Lacktechnik

28.05.08 Holzstäube

23.04.08 Sockengarn

12.04.08 APIC Linux

02.04.08 CSS-Layout

01.03.08 Parallelport und Ruby

03.02.08 Lupen, Pinzetten

13.01.08 Rosenstolz

07.12.07 Unitymedia

01.12.07 SMS-Benachrichtung o2-loop-Handy abschalten lassen

  • der Anrufer zahlt, wenn ich nicht erreichbar bin eine Gebühreneinheit, deshalb ist die Deaktivierung der SMS-Benachrichtung sinnvoll.
  • Abschaltung ist gebührenpflichtig, 0,39 Euro pro Minute Hotline, Anruf dauert typischerweise 2 Minuten
  • Folgende Infos braucht man für die Hotline: Telefon-Nummer, auf wen ist dieses Telefon registriert, Geburtsdatum, Straße der Adresse.
  • 0179 55282 -> Option 2 wählen -> Kundenberater ist dran -> Mitteilen, dass man die SMS-Benachrichtung bei ausgeschaltetem Handy abschalten lassen möchte -> Infos werden abgefragt -> nach 5 Minuten sollte dann SMS-Benachrichtigung deaktiviert sein.

30.11.07 Samba

08.11.07 Servo: 300169148001

19.10.07 Bilderdienste

28.09.07 Kugeln Kugellager

test

14.08.07 Notebooks IBM

10.08.07 Kamera Transfer Programme

29.07.07

  • 190060946156

28.07.07 fetchmail und ssl

28.07.07 USB Linux

06.07.2007 Schneller Gruppenwechsel Adminrechte

15.06.2007 Cups-pdf einrichten

08.05.2007 MTU Wert

08.05.2007 IP 2000 Auffangbehälter voll

26.04.2007 Naturfreundehäuser

24.04.2007 Treibriemen Plattenspieler

26.03.2007 Druckertreiber HP

17.03.2007 Recherche Aktenvernichter

  • http://www.dahle.de - Machen einen guten Eindruck. Geräte ab ca. 100-200 Euro sollten was taugen, z.B. 20092 PSeC (200Euro) oder 20082 (80 Euro)
  • http://www.hsm-online.de - Modell 104.3-1288 für 360 Euro; shredstar X5 für 35 Euro; HSM 80.2 für 115 Euro (Partikelschnitt); HSM 90.2 für 160 Euro (Partikelschnitt);
  • http://www.martinyale.de - Modell Martin Yale 1000 CC für etwa 150 Euro
  • http://www.intimus.com/ - Intimus gehört zu Martin Yale; HIT 100 C für etwa 60 Euro (Partikel);
  • Geha, z.B. Primo 1200CC (Partikelschnitt) für etwa 150 Euro; Primo 800CC für 70 Euro (Partikelschnitt; Primo 900CC für 95 Euro
  • http://tinyurl.com/ypu86z - Ebay-Shop Aktenvernichter

Derzeitiger Favorit ist der INTIMUS 155 CC bauglich mit dem TAROS 15.55 CC für 144 Euro bei Ebay Sofortkauf. Der MARTIN YALE 1000CC für 149 Euro (Ebay) ist auch interessant, hat Rollen und einen Schubladenaufbau für den Behälter. Von den technischen Daten nehmen sich alle nicht viel. Angenehm ist bei allen, dass das Schneidwerk in einem Rahmen gehalten wird, wenn man den Behälter rausnimmt. Bei vielen preisgünstigeren Geräten muss man die Schneideinheit beim ausleeren auf den Boden legen. Ebenso werden alle 3 Modelle über Lichtschranke aktiviert, herkömmlich wird es über einen Schalter gemacht, der oft bei dünnem Papier klemmt. Lichtschranke ist eleganter.

07.03.2007 Reparatur Brother HL-1650

03.03.2007 Subversion Client für Windows

10.01.2007 Interessante Firewall-Lösung

10.01.2007 Artikel lesen

10.01.2007 Rescue/Virencheck-CD's

09.01.2007 1und1 Virus

30.12.2006 Notfallreparatur W2000

29.12.2006 Programm Mailaccount-Admin cfgmailuser

 
#!/usr/bin/env ruby
#
# This file is automatically generated. DO NOT MODIFY!
#

#!/usr/bin/ruby1.8

# cfgmailuser.rb - Konfiguration Mail-Accounts
# mittels /etc/cfgmail/cfgmail.conf
# fetchmail, postfix, qpopper, Unix-Accounts Konfiguration
# Winfried Mueller, www.reintechnisch.de
# Start: 30.11.2006, Stand: 04.12.2006

require 'optparse'
require 'yaml'
require 'ostruct'
require 'open3'


# ========== begin include wmclasslib/dbg ==========

module Dbg
  VERBOSE = FALSE
end

class AssertError    < StandardError; end
class RequireError    < StandardError; end
class EnsureError    < StandardError; end

# debug print helper
def dp( line )
  $stderr.puts "Dbg: #{line}"
end


def x_assert( dsc="" )
  begin
    raise AssertError, "Assert: #{dsc}"
  rescue =>exc
    new_backtrace = exc.backtrace
    new_backtrace.shift
    exc.set_backtrace( new_backtrace )
    raise
  end
end


def x_require( dsc="" )
  begin
    raise RequireError, "Require: #{dsc}"
  rescue =>exc
    new_backtrace = exc.backtrace
    new_backtrace.shift
    exc.set_backtrace( new_backtrace )
    raise
  end
end

def x_ensure( dsc="" )
  begin
    raise EnsureError, "Ensure: #{dsc}"
  rescue =>exc
    new_backtrace = exc.backtrace
    new_backtrace.shift
    exc.set_backtrace( new_backtrace )
    raise
  end
end

def dbg_warn
  begin
    raise
  rescue
    backtrace = $!.backtrace
    backtrace.shift
    $stderr.print "dbg: Warn => "
    $stderr.puts backtrace.shift
    if Dbg::VERBOSE
      backtrace.each { |l|
        puts "                 " + l
      }
    end
  end
end

def dbg_info
  begin
    raise
  rescue
    backtrace = $!.backtrace
    backtrace.shift
    $stderr.print "dbg: Info => "
    $stderr.puts backtrace.shift
    if Dbg::VERBOSE
      backtrace.each { |l|
        puts "                 " + l
      }
    end
  end
end


# ========== end include wmclasslib/dbg ==========


# ========== begin include wmclasslib/platform ==========

#----------------------------------------------------------------------
def platform
  case RUBY_PLATFORM
    when /linux/i, /freebsd/i, /bsd/i, /solaris/i, /hpux/i, /powerpc-darwin/i
      :unix
    when /mswin32/i, /mingw32/i, /cygwin/i, /bccwin32/i
      :windows
    when /java/i
      :java
    else
      :other
  end
end
# ========== end include wmclasslib/platform ==========


# ========== begin include wmclasslib/file_ext ==========


#----------------------------------------------------------------------
class File
  def File.chown1( owner, fname )
    x_require unless owner[/^[a-zA-Z_\-]+(:[a-zAZ_\-]+)?$/]
    p = platform
    if p == :unix
      `chown #{owner} #{fname}`
      x_ensure unless $? == 0
    else
      # do nothing
    end
  end
end
# ========== end include wmclasslib/file_ext ==========


# ========== begin include wmclasslib/dir_ext ==========


class Dir

  # Get all regular files under base_path
  # all_files -> aArray 
  def self.all_files( base_path, recursive=true )
    x_require unless recursive  # not recursive not implemented
    gdir = File.join(base_path,"**/*")
    gdir_hiddenfiles = File.join(base_path,"**/.*")
    f = Dir[gdir]
    f.concat( Dir[gdir_hiddenfiles] )
    f = f.select { |x| File.file?( x ) } 

    # convert base_path/path/file to path/file
    base_path_end = gdir.length - 4
    f.each do |file|
      file.replace( file[base_path_end..-1] )
    end
    f
  end

end
# ========== end include wmclasslib/dir_ext ==========


# ========== begin include wmclasslib/linux_user ==========

ENV["LANGUAGE"]="en"
LINUX_USER_CMD_TIMEOUT = 5
require 'expect'
require 'open3'

class IO
  def expect_raise( rxp, timeout )
    if (r = expect( rxp, timeout )) == nil
	     raise "command timeout"
	   else
	     r
	   end
  end
end

def passwd( user, pw )
  Open3::popen3( "/usr/bin/passwd #{user}" ) do  |stdin, stdout, stderr|

    r = stderr.expect_raise( /(Enter.*password:)|(unknown user)/, LINUX_USER_CMD_TIMEOUT )
    if r[0] =~ /unknown/
      raise "user unknown"
    end
    stdin.print "#{pw}\n"

    stderr.expect_raise( /Retype.*password:/, LINUX_USER_CMD_TIMEOUT )
    stdin.print "#{pw}\n"

    stderr.expect_raise( /updated successfully/, LINUX_USER_CMD_TIMEOUT )
  end
end

def useradd( user, shell )
  r = `/usr/sbin/useradd -m -s #{shell} #{user} 2>&1`
  if $? >> 8 != 0
    raise "#{r}"
  end
end

def user_exist?( user )
  File.foreach( "/etc/passwd" ) do |line|
    if line =~ /^#{user}/
      return true
    end
  end
  return false
end
# ========== end include wmclasslib/linux_user ==========


# Files in aktuellem Verzeichnis nehmen und erzeugen für Debugzwecke
# DEBUG1 = true
if defined? DEBUG1
  CONFIG_FILE    = "cfgmail.conf"
  FETCHMAIL_FILE = "fetchmail.conf"
  VIRTUAL_FILE   = "virtual"
else
  FETCHMAIL_FILE = "/etc/fetchmail.conf"
  VIRTUAL_FILE   = "/etc/postfix/virtual"
  CONFIG_FILE    = "/etc/cfgmail/cfgmail.conf"
end

# Fetchmail Configfile Header (Statics)
FETCHMAIL_HEADER = <<EOF
# Fetchmail fetchmail.conf
# !!!Generated File, do not edit!!!
# Use: cfgmailuser instead

set postmaster "root"
set no bouncemail
set no spambounce
set syslog
set logfile /var/log/fetchmail
set invisible

# Start Accounts

EOF

# Virtual Configfile Header (Statics)
VIRTUAL_HEADER = <<EOF
# Postfix virtual
# !!!Generated File, do not edit!!!
# Use: cfgmailuser instead

# Start Accounts

EOF



class CfgMailUser

  def initialize( cfg_fname )
    @cfg = YAML.load_file( cfg_fname )
  end

  # /etc/fetchmail.conf generieren
  def generate_fetchmail
    r = sprintf( "# Generated at %s\n", timestamp ) 
    r << FETCHMAIL_HEADER


    @cfg['Accounts'].each do |account|
      next if account['Enabled'] !~ /yes/i
      r << sprintf( "\n# Account: %s %s\n", account['Name'], account['Description'] )
      account['FetchAccounts'].each do |fetchaccount|
        next if fetchaccount['Enabled'] !~ /yes/i
        proto = 'pop3'
        case fetchaccount['Proto']
          when nil
          when 'pop'
          when 'apop'
            proto = 'apop'
          else 
            raise "Undefined Proto: #{fetchaccount['Proto']} Account: #{fetchaccount['Mail']}"          
        end
        r << sprintf( "# Fetch: %s\n", fetchaccount['Mail'] )
        r << sprintf( "poll %s proto %s timeout 60 user \"%s\" pass \"%s\" is %s fetchall\n", 
                      fetchaccount['Server'], proto, fetchaccount['User'], fetchaccount['Pass'],
                      account['Name'] )
      end
    end
    File.open( FETCHMAIL_FILE, "w" ) do |f|
      f << r
    end
  end

  # postfix virtual Table generieren für internes Routing
  def generate_virtual
    r = sprintf( "# Generated at %s\n", timestamp ) 
    r << VIRTUAL_HEADER
    @cfg['Accounts'].each do |account|
      next if account['Enabled'] !~ /yes/i
      account['FetchAccounts'].each do |fetchaccount|
        next if fetchaccount['RouteIntern'] !~ /yes/i
        r << sprintf( "%s\t\t%s\n", fetchaccount['Mail'], account['Name'] )
      end
    end
    File.open( VIRTUAL_FILE, "w" ) do |f|
      f << r
    end
  end

  # Linux User Accounts anlegen und Passwörter zuweisen
  def generate_user_accounts
    @cfg['Accounts'].each do |account|
      next if account['Enabled'] !~ /yes/i
      user = account['Name']
      pass = account['Pass']
      if user_exist?( user )
        puts "Account: #{user} vorhanden. Skip."
      else
        puts "Account: #{user} wird angelegt."
        useradd( user, "/bin/false" )
      end
      passwd( user, pass )
    end  
  end

  # QPopper popauth Passwörter für apop anlegen
  def update_popauth
    @cfg['Accounts'].each do |account|
      next if account['Enabled'] !~ /yes/i
      user = account['Name']
      pass = account['Pass']
      if !user_exist?( user )
        raise "update_popauth: Account #{user} nicht vorhanden. Zuerst Account anlegen."
      else
        puts "Popauth fuer #{user} wird aktualisiert."
        print `popauth -user #{user} #{pass} 2>&1`
      end
    end      
  end

  # Postfix Generierung Datenbänke und Restart
  def update_postfix
    print `/usr/bin/newaliases 2>&1`
    print `/usr/sbin/postmap /etc/postfix/canonical 2>&1`
    print `/usr/sbin/postmap /etc/postfix/sender_canonical 2>&1`
    print `/usr/sbin/postmap /etc/postfix/recipient_canonical 2>&1`
    print `/usr/sbin/postmap /etc/postfix/virtual 2>&1`
    print `/usr/sbin/postmap /etc/postfix/transport 2>&1`
    print `/usr/sbin/postmap /etc/postfix/smtp_auth 2>&1`
    print `/etc/init.d/postfix restart 2>&1`
  end

  # Überprüfe Konfigdatei auf Konsistenz  
  def check_config

  # Schablonentest
    n = 1
    @cfg['Accounts'].each do |account|
      if account['Description'].class != String
        raise "Account Nr. #{n} [Description] Error."
      end
      if account['Enabled'].class != String
        raise "Account Nr. #{n} [Enabled] Error."
      end
      if account['Name'].class != String
        raise "Account Nr. #{n} [Name] Error."
      end
      if account['Pass'].class != String
        raise "Account Nr. #{n} [Pass] Error."
      end
      if account['FetchAccounts'].class != Array
        raise "Account Nr. #{n} [FetchAccounts] Error."
      end

      account['FetchAccounts'].each do |fetchaccount|
        if fetchaccount['Mail'].class != String
          raise "Account Nr. #{n}, fetchaccount: [Mail] Error."
        end
        if fetchaccount['Enabled'].class != String
          raise "Account Nr. #{n}, fetchaccount: [Enabled] Error."
        end
        if fetchaccount['User'].class != String
          raise "Account Nr. #{n}, fetchaccount: [User] Error."
        end
        if fetchaccount['Pass'].class != String
          raise "Account Nr. #{n}, fetchaccount: [Pass] Error."
        end
        if fetchaccount['Server'].class != String
          raise "Account Nr. #{n}, fetchaccount: [Server] Error."
        end
        if fetchaccount['Proto'].class != String
          raise "Account Nr. #{n}, fetchaccount: [Proto] Error."
        end
        if fetchaccount['RouteIntern'].class != String
          raise "Account Nr. #{n}, fetchaccount: [RouteIntern] Error."
        end
      end
      n += 1
    end


    # Check Mehrfachzuweisung Fetchaccounts
    check_accounts = Hash.new
    @cfg['Accounts'].each do |account|
      next if account['Enabled'] !~ /yes/i
      account['FetchAccounts'].each do |fetchaccount|
        next if fetchaccount['Enabled'] !~ /yes/i
        mail = fetchaccount['Mail']
        if check_accounts[mail]
          raise "Mehrfachzuweisung Mailaccount: #{mail}"
        else
          check_accounts[mail] = true
        end
      end
    end

    # Check Unix-Account Mehrfachzuweisung
    check_accounts = Hash.new
    @cfg['Accounts'].each do |account|
      next if account['Enabled'] !~ /yes/i
      user = account['Name']
      if check_accounts[user]
        raise "Mehrfachzuweisung Unix-Account: #{user}"
      else
        check_accounts[user] = true
      end        
    end        

  end

  def timestamp
    return Time.new.strftime( "%a %b %d %H:%M:%S %Z %Y" )
  end
end

# ----------------------------------------------------------------
# Main

cfgmailuser = CfgMailUser.new( CONFIG_FILE )

puts "Check Config File..."
cfgmailuser.check_config

puts "Generiere Fetchmail fetchmail.conf..."
cfgmailuser.generate_fetchmail

puts "Generiere Postfix virtual..."
cfgmailuser.generate_virtual

puts "Erzeuge Benutzeraccounts..."
cfgmailuser.generate_user_accounts

puts "Update Popauth..."
cfgmailuser.update_popauth

puts "Postfix Update..."
cfgmailuser.update_postfix



15.08.2006 Anleitung Toshiba A50

27.07.2006 Wecker

18.07.2006 Aktuelle DSL-Router mit DSL-Modem

  • Netgear DG834B (4Port, Kabel) 59 Euro (FCC Artikel 20029)
  • Linksys AG241 (4Port, Kabel) 62 Euro (FCC Artikel 44777)
  • Linksys WAG354G (4Port, WLAN) 84 Euro
  • Netgear DG834GB (4Port, WLAN) 79 Euro

07.07.2006 ADSL-Modem Siemens C2-010-I (Reinhold)

20.12.2005 WPA unter XP

09.09.2005 Pedalboote

07.09.2005 Aluprofile

30.07.2005 Boote

29.07.2005 Baustoffe, Dachdeckmaterial

11.07.2005 htdig Recherche

03.07.2005 UML Werkzeuge

31.05.2005 Günstige Prepaid Karte Angebot

  • http://www.simyo.de/
  • 19 cent/min in alle Netze jederzeit
  • Billig-Line von E-Plus
  • Nur über Internet erhältlich

30.05.2005 HTML, XHTML, CSS

28.05.2005

15.05.2005

10.05.2005

19.03.2005

04.03.2005

12.01.2005 Kabeldurchmesser

  • Patch Cat5 0.4-0.5mm
  • Telefonkabel 0.6mm
  • Isolierung CAT5: Polyethylen
  • Isolierung Telefonkabel: PVC

03.01.2005 Notebookangebote

  • Generell: Wenig Angebote mit Centrino. Mir fehlen Angebote um 1200 Euro von Toshiba bei den Märkten nebenan.
  • Media-Markt: Fujitsu Siemens, Amilo M 7425-M1406571, Centrino 1.4GHz, 512 M, 60G, DVD-RW, 4h Akkulaufzeit, 2 Jahre Garantie Pick Up&Return, 1299 Euro
  • Avitos: Toshiba Satellite A50-532 IP-M 725 15"TFT XP Home, 60 GB, 2x256 MB, DVD+/-RW, 3.7h Akkulaufzeit, 1.6GHz M725 (Centrino), 2 Jahre Garantie, 1179 Euro
  • Avitos: Fujitsu-Siemens Amilo M7405 IP-M 1.6 GHz 15" XP Home, 512 MB, DVD+/-RW DL, 60 GB, 3 Jahre Garantie, 2,75Kg, 1199 Euro
  • Avitos: Fujitsu-Siemens Amilo Pro V2000 IP-M 725 15" XP Pro, 60 GB, 2x 256 MB, DVD+RW, 2 Jahre Garantie, 2,9Kg, Windows XP Prof, 1179 Euro
  • Alternate: IBM ThinkPad R50e, Centrino M725, 256MB, 40 GB, DVD Rom/CD-RW, 4.5h Akkulaufzeit, 3Kg, 2 Jahre Garantie, 1169 Euro
  • Alternate: IBM Thinkpad R51, Centrino M715, 256MB, 40GB, DVD Rom/CD-RW, 4,7h, 3Kg, 1199 Euro