Softpanorama
May the source be with you, but remember the KISS principle ;-)

Contents Bulletin Scripting in shell and Perl Network troubleshooting History Humor

Pipes in syslog

News See also Recommended Links logger Messages Classification Configuration examples Etc
Event correlation   Tips Horror Stories Random Findings Humor Etc

You could get your syslog.conf to point to a pipe instead of the messages file and then have a job running that reads from the pipe greps out any messages you dont want and then writes any other messages to the messages file! eg :

  1. Create a named pipe using mkfifo: mkfifo -p /var/adm/syslog.pipe

  2. Make syslog.conf to points to this file (for example  /var/adm/syslog.pipe)

      *.info                        |/var/adm/syslog.pipe
     

  3. Relaunch syslogd:
      kill -HUP `cat /var/run/syslogd.pid`

  4. Create processing script that read the pipe. It should run constantly and be launched from RC scripts

    #!/bin/ksh
     
    cat /var/adm/syslog.pipe | grep -v "denied update from" | while read LINE
    do
      echo $LINE >>/var/adm/denied_update.log
    done

     

syslog-ng has slightly different sysntax but similar capabilities

On Mon, Dec 20, 1999 at 02:05:47PM -0800, Chris Scheller wrote:
> is it possible to do a destination such as
> destination d {file("| some_script"); };  ?

destination d_prg { program("somescript"); };

or

destination d_pipe { pipe("pipe"); };

and read the messages from the given named pipe.

NEWS CONTENTS

Old News ;-)

Martijn Lievaart <m@remove.this.part.rtij.nl> writes:
> Using Linux syslog, I have the possibility to write the output to a pipe.
> I then can read this pipe from a program.
>
> My question is, what happens when there is no one reading from the pipe.
> Informal testing shows that when I write to the pipe myself, it stalls
> until the pipe is read. Yet syslog seems to be chucking along. Does it set
> some flags on the pipe? Does it increase the buffer?

(At least in Debian) the Linux syslogd sets O_NONBLOCK on named pipes
and ignores both EAGAIN and short writes.

> The main point is, even though it seems to work, syslogging to
> files/remote servers continues even when the pipe is not read, would
> it stall syslogging in the longer run? So how safe is it to use this
> feature?

syslogd should not wedge but you will have missing and/or mangled
messages if they arrive faster than you can process them.

I don't think this is a very reliable way of reading syslog messages
unless you have a guarantee the rate will be low enough; tailing a
disk file would be safer.

--
http://www.greenend.org.uk/rjk/

[Mar 05, 2005] Pipes and syslog

03-05-05 12:47 PM

Hello,

Using Linux syslog, I have the possibility to write the output to a pipe.
I then can read this pipe from a program.

My question is, what happens when there is no one reading from the pipe.
Informal testing shows that when I write to the pipe myself, it stalls
until the pipe is read. Yet syslog seems to be chucking along. Does it set
some flags on the pipe? Does it increase the buffer?

The main point is, even though it seems to work, syslogging to
files/remote servers continues even when the pipe is not read, would it
stall syslogging in the longer run? So how safe is it to use this feature?

TIA,
M4
--
Redundancy is a great way to introduce more single points of failure.

Re: Pipes and syslog
Martijn Lievaart <m@remove.this.part.rtij.nl> writes:
> Using Linux syslog, I have the possibility to write the output to a pipe.
> I then can read this pipe from a program.
>
> My question is, what happens when there is no one reading from the pipe.
> Informal testing shows that when I write to the pipe myself, it stalls
> until the pipe is read. Yet syslog seems to be chucking along. Does it set
> some flags on the pipe? Does it increase the buffer?

(At least in Debian) the Linux syslogd sets O_NONBLOCK on named pipes
and ignores both EAGAIN and short writes.

> The main point is, even though it seems to work, syslogging to
> files/remote servers continues even when the pipe is not read, would
> it stall syslogging in the longer run? So how safe is it to use this
> feature?

syslogd should not wedge but you will have missing and/or mangled
messages if they arrive faster than you can process them.

I don't think this is a very reliable way of reading syslog messages
unless you have a guarantee the rate will be low enough; tailing a
disk file would be safer.

--
http://www.greenend.org.uk/rjk/

[ Feb 9, 1997 ] Syslog 2c Tip Revised Linux Gazette

Syslog 2c Tip Revised

Date: Sun, 9 Feb 1997 23:26:46 -0800 (PST)

From: Ian Main, imain@vcc.bc.ca

Hi, just going through issue #14 of the linux gazzette, and I noticed the tip on logging *.* to a file
so you can read it in an rxvt in X. I do a similar thing here, but rather than logging to a file, I log
to a pipe (ah ha! Why didn't I think of that? :-) ).

Works really well. No disk space used, and you can just use cat to view it, and it scrolls along
nicely.

To make a named pipe (FIFO) in /var/log/message-pipe:

mknod -p /var/log/message-pipe

and add this to your /etc/syslog.conf (note the pipe symbol there.) :

*.* |/var/log/message-pipe

and finally, just type:

cat /var/log/message-pipe

Or of course.. you can stick it in a shells script or as the command rxvt runs when it starts.. whatever
you like.

Hope you find it useful,

Ian

freshmeat.net Project details for Modular syslog

Unix man pages SYSLOG.CONF (5)

Named Pipes
       This version of syslogd(8) has support for logging  output
       to  named  pipes (fifos). A fifo or named pipe can be used
       as a destination for log messages  by  prepending  a  pipe
       symbol  (``|'') to the name of the file. This is handy for
       debugging. Note that the fifo must  be  created  with  the
       mkfifo(1) command  before syslogd(8) is started.
 

Syslog output to a named pipe

Subject: Syslog output to a named pipe.
To: None <current-users@NetBSD.ORG>
From: Dave Burgess <burgess@cynjut.neonramp.com>
List: current-users
Date: 07/26/1998 16:51:06

I had a requirement for a mkfifo pipe as the input for a program I'm
working on.  I noticed that our syslogd did not work well with pipes.
The program will just hang when trying to open the pipe.

I hacked syslogd to be able to use pipes.  The fix isn't very robust,
does little to no error checking, but it was easy and didn't break
syslogd in an appreciable way.  One question I have is, is there any
interest in such a beast?  I'm using it for a 'authlog' scanner for
hacker monitoring without having to go through the trouble of keeping
the file state available all the time.

The other question, of course, is "was there a better way to do it?"

-- 
Dave Burgess                   Network Engineer - Nebraska On-Ramp, Inc.
*bsd FAQ Maintainer / SysAdmin for the NetBSD system in my spare bedroom
"Just because something is stupid doesn't mean there isn't someone that 
doesn't want to do it...."

 

Syslog-ng faq Performance of system logging

One of my customers recently had a serious performance issue with one of his installations. Surprisingly, it wasn't even the real applications software itself that had performance issues, but the mechanism used for logging from this application.

So I started to think about the way logging ususally works within a linux-based system.

The server applications can be divided within two groups. One of them logs via syslog(), the other logs directly to it's own files. The logging itself happens synchronously, i.e. blocking the normal code flow until the log line was written. In the case of syslog, it might block because the syslog pipe is full - in case of standalone files, the file/io might take some time to complete.

Even in a multi-threaded or forked model of a network server program, this might pose considerable problems with regard to threads waiting for their log i/o to complete.

Syslog itself might not be as bad, especially since the 2.6.x pipe implementation works with only the minimal necessary amoutn of copying, and supports larger pipe sizes to avoid writer blocking.

Some people however tend to use something like syslogger in order to redirect the log output from programs with no syslog support also into syslog. This means that you have one pipe between your application and syslogger, and another pipe between syslogger and your real syslog daemon.

Comparing this issue with networking is actually not too problematic. In networking, we have packets that are passed from one process to another... with logging it's not a packet but usually one or more lines of text (that is, about 60 to 240 characters per entry).

You don't want to copy this data around and around... and in a lot of installations you'd rather want to use a couple of log lines than to slow down your application just for some statistics that you might collect.

Of course, you don't want to modify any of the existing applications, too - they should just be able to use syslog() calls as usual. OF course you could load a LD_LIBRARY_PRELOAD lib and redirect the syslog() calls, if needed.

So what I came up with, is something like a partially mmap()able pipe. The logging process would log to that pipe like it would with any other file descriptor. Internally, that 'pipe' has a ring buffer of configurable size. The pipe-reader could now mmap() this ring buffer into his address space in order to read the log.

This scheme should have the advantage of not blocking the writer if the pipe is full (it would just wrap around the ring buffer), and it avoids copying the data from some in-kernel pipe buffer into the userspace of the pipe reader.

Did you notice, this now looks perfectly like the DMA ring buffer of your ethernet device and the linux softirq handler ;)

Anyway, as I didn't do any vm / vfs hacking in linux so far, this is not a trivial thing to implement. And I have lots of other work at this point. However, I'd certainly like to investigate the possible performance gains [losses?] of this idea. Comments welcome.

Ensure Network Safety with Centralized Logging

The syslog daemon typically shipped with Unix systems is somewhat inflexible, only providing for logging to text files on the drive. Syslog-ng, as it's name implies, is the "next generation" of syslog daemons. Two of the concepts in syslog-ng that you’ll be using are 'templates' for your data, and extremely flexible 'destination' configuration.

First, you need to modify the syslog-ng.conf (usually in /etc/syslog-ng or /usr/local/etc/syslog-ng). Add the destination and the template for the Postgres database:


destination d_pgsql {
 pipe("/tmp/.syslogd.pipe"
 template("INSERT INTO syslog (ip, facility, priority, level, tag, date,time, program, msg) VALUES
( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL', '$TAG','$YEAR-$MONTH-
$DAY', '$HOUR:$MIN:$SEC', '$PROGRAM', '$MSG' );\n") template-escape(yes) owner("root") group("c-syslog") perm(0660));
 };

Keep in mind that this can be used with any SQL client that is available on the system on which you've configured syslog-ng, so make sure that your SQL is valid for that particular RDBMS.

Next, configure the source/destination of the syslog to allow traffic via the network:


source net { udp(); };

Configure this to go to the previously configured destination:


log { source(net); destination(d_pgsql); };

Don't start or restart your running syslog-ng yet.

Script Configuration
On Unix systems, the fifo file type provides a way to ensure that the first amount of data sent into the file comes out first and so on. In this section, you'll create a fifo that will be writable via the syslog-ng process, running as root, and readable by a user in a group to send the syslog data to your RDBMS.

Create a user on your system (usually adduser or useradd) and call it c-syslog. It's not absolutely necessary to give the user a password—if no password is set, nobody can log in as that user. Also create a syslog group, and put the c-syslog user into the syslog group.

To create a fifo, use the mkfifo command and run mkfifo /tmp/.syslogd.pipe. Set permissions on the fifo by using chmod 660 /tmp/.syslogd.pipe, then set chown root:syslog /tmp/.syslogd.pipe. Finally, type ls—al /tmp/.syslogd.pipe to make sure it was created properly:


prw-rw----  1 root  c-syslog  0 May  4 13:20 /tmp/.syslogd.pipe

Next, you'll need a simple looping script. Cut and paste these contents and create a file in /usr/local/bin, call it syslog-db.sh, save it, and run chmod 755 syslog-db.sh:


#!/bin/bash
PIPE="/tmp/.syslogd.pipe";
if [ -e ${PIPE} ]; then
  while [ -e ${PIPE} ]
  do
	# Edit this line to work with your sql client of choice.
     /usr/local/pgsql/bin/psql -q -h  syslog < ${PIPE} > /dev/null 2>&1
  done
else
  # Since some systems clean out /tmp on bootup, you would 
   # probably want to include the steps to automatically re-create
   # the fifo here, but since those steps vary a bit, i haven't
   # included them. Assuming you followed my instructions above
   # they'd look like this:
   # mkfifo /tmp/.syslogd.pipe
   # chmod 660 /tmp/.syslogd.pipe
   # chown root:syslog /tmp/.syslogd.pipe
  echo “ERROR: fifo not created in ${PIPE}. Please create.”
  exit(1)
	fi

Change <dbhost> to reflect the host on your network running Postgres. It's important to not restart syslog-ng or start running the looping script mentioned aboveuntil everything is ready.



[syslog-ng]Can't get pipe working

Stephan Hendl syslog-ng@lists.balabit.hu
Fri, 02 Jul 2004 08:10:20 +0200

 

Hi Clayton,

wie use ist in slyghtly other way and it writes several gigabytes per dy =
in our mysql database.

1) the syslog-ng configuration

destination d_ToSysLogDB {
  pipe("/tmp/syslog.pipe"
  owner("root")
  group("root")
  perm(0640)
  template("insert into syslog(host,facility,priority,level,tag,date,time,p=
rogra
m,msg) values ('$HOST','$FACILITY', '$PRIORITY', '$LEVEL', '$TAG','$YEAR-$M=
ONTH-
$DAY', '$HOUR:$MIN:$SEC', '$PROGRAM', '$MSG' );\n") template-escape(yes));
};

log { source(loghost); destination(d_ToSysLogDB); };
=20
2) there is a script running that takes the data from the pipe and writes =
them into the databse

#!/bin/bash
#
if [ -e /tmp/syslog.pipe ]; then
  while [ -e /tmp/syslog.pipe ]
    do
      mysql -u syslog --password=3D<password> syslog -h syslog < /tmp/syslo=
g.pipe
  done
else
  mkfifo /tmp/syslog.pipe
  while [ -e /tmp/syslog.pipe ]
    do
      mysql -u syslog --password=3D<password> -h syslog < /tmp/syslog.pipe
  done
fi

3) Keep in mind that a tail -f on a pipe will take all data out of the =
pipe and you cannot write them into a database.

Stephan


Dr. Stephan Hendl
Systemmanagement
-----------------------------------
Landesbetrieb f=FCr
Datenverarbeitung und Statistik
Land Brandenburg

Adresse: 14467 Potsdam, Dortustr. 46
Telefon: +49-(0)331 39-471
Fax: +49-(0)331 27548-1187
Mobil: +49-(0)160 90 645 893
EMail: Stephan.Hendl@lds.brandenburg.de=20
Internet: http://www.lds-bb.de=20


>>> cdukes@cdukes.com 01.07.2004 20:02:57 >>>
Hi all,
I seem to be having trouble getting a mysql pipe working and thought I =
would
enlist your help.

Here's my config:

options { use_fqdn(no);
          keep_hostname(yes);
          use_dns(no);
          long_hostnames(off);
          sync(0);
          log_fifo_size(1000);

        # The default action of syslog-ng 1.6.0 is to log a STATS line
        # to the file every 10 minutes.  That's pretty ugly after a while.
        # Change it to every 12 hours so you get a nice daily update of
        # how many messages syslog-ng missed (0).
        stats(43200);
};

############################
# Set up Sources
############################
source src { unix-dgram("/dev/log"); internal(); };
source net { udp(); };
source s_jffnms { unix-dgram("/dev/log"); internal(); udp(); };

# MySQL Logs

destination d_jffnms {
  pipe("/tmp/mysql.pipe"
    template("INSERT INTO syslog (date, date_logged, host, message) VALUES
('$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC', NOW\(\), '$FULLHOST', '$MSG');\n")
template-escape(yes));
    };
destination jffnms_processing {
      program ("mysql -u jffnms -pjffnms jffnms < /tmp/mysql.pipe"); };

log {
       source (s_jffnms);
       #filter (f_jffnms);   #if you use it
       destination (d_jffnms);
};


# End
When I restart syslog-ng and tail -f /tmp/mysql.pipe nothing comes in (nor
are there any database inserts happening).
When I do a tcpdump, I do see the event coming into my server, but it =
seems
as though syslog-ng is just dropping the packet...?




Regards,
Clayton Dukes
CCNA, CCDA, CCNP, CCDP
Sr. Network Engineer
E Solutions Corp.
http://www.esnet.com=20
813.301.2620 (o)
813.545.7373 (c)
=20

_______________________________________________
syslog-ng maillist  -  syslog-ng@lists.balabit.hu=20
https://lists.balabit.hu/mailman/listinfo/syslog-ng=20
Frequently asked questions at http://www.campin.net/syslog-ng/faq.html=20

Re: syslog to ignore certain msg
Posted By Gordon Bloxham On Wednesday, July 02, 2003 at 3:22 AM  

It should be ok to run all the time as it will only be avtive when there is
something going out to the pipe file. We have a script running on one of our
very busy boxes to capture certain messages and it does not seem to affect the
box.

Gordon.

"TJS52... via solaris-l" <solaris-l@openitx.com> on 01/07/2003 15:14:37

Please respond to solaris-l@openitx.com

To:   Gordon Bloxham/HAV/SSE@SSE
cc:

Subject:  [solaris-l] Re: syslog to ignore certain msg



Archive Page - http://unix.ittoolbox.com/groups/groups.asp?v=solaris-l
I like this programming better than my idea (more sleek and efficient),
however is it necessary to always have it running.  Couldn't/Shouldn't you
"cron"
it nightly to remove the "offending" entries (especially if you have fairly
large activity being captured to syslog).  This may be a better conversation of
system resources.  Thoughts?

Thomas Stoffa

> Archive Page - http://unix.ittoolbox.com/groups/groups.asp?v=solaris-l
> You could get your syslog.conf to point to a pipe instead of the messages
> file
> and then have a job running that reads from the pipe greps out any messages
> you
> dont want and then writes any other messages to the messages file!
>
> eg :-
>
> syslog.conf points to /var/adm/syslog.pipe
>
> you do mkfifo -p /var/adm/syslog.pipe
>
> script to always run
>
> #!/bin/ksh
>
> cat /var/adm/syslog.pipe | grep -v "denied update from" | while read LINE
> do
>  echo $LINE >>/var/adm/messages done
>
>
> Gordon.
>
>
>
>
> "Ubiquitous Geebles via solaris-l" <solaris-l@openitx.com> on 01/07/2003
> 14:39:13
>
> Please respond to solaris-l@openitx.com
>
> To:   Gordon Bloxham/HAV/SSE@SSE
> cc:
>
> Subject:  [solaris-l] syslog to ignore certain msg
>
>
>
> Archive Page - http://unix.ittoolbox.com/groups/groups.asp?v=solaris-l
> Morning All!
>
> How can I configure syslog.conf to track 'regular' named messages, but
> ignore one particular one?  The
> (*&#$   AD servers and workstations keep trying to update the BIND server,
> and I want syslogd to ignore JUST the:
>
> named: [PID} denied update from (ip.IP.Ip.IP)
>
> messages, which number in the hundreds and thousands of lines in
> /var/adm/messages every day.
>
> Other than downloading logger or checklogs or one of the other logging
> programs, is there a way to do this with syslog.conf?
>
> Thanks in advance.
>
>
> (Yes, I know the ultimate answer. And  I have spoken to the AD guys, they
> are updating the builds, but it's going to be months before they clean them
> ALL up...)
>
>
> Ubi Geebles
> Net  Goddess (yeah, I trip over my robe sometimes, but remember Goddesses
> have the power to let you live in an eternal migrating puddle of goo, so be
> nice to me! )
>
> _________________________________________________________________
> Add photos to your messages with MSN 8. Get 2 months FREE*.
> http://join.msn.com/?page=features/featuredemail
>
>
> ************ASICs-The Future of Security Technology************
> Make security your strength-with WatchGuard(R)
> http://www.ITtoolbox.com/r/rd.asp?i=249
> ***************************************************************
> *Archives: http://www.OpenITx.com/g/solaris-l.asp
> *Unsubscribe: mailto:leave-solaris-l@openitx.com
> *Terms of Use: http://www.ittoolbox.com/help/termsofuse.htm
> *Copyright (c) ITtoolbox and message author. No redistribution.

Recommended Links

Softpanorama Top Visited

Softpanorama Recommended

Centralized Syslog Server Using syslog-NG with web Interface using ...

Secure Logging Over a Network Linux Journal

[PDF] An intrusion detection system based in the gathering of Linux ...

www.vermeer.org: Centralized syslog-ng to Mysql;

Ensure Network Safety with Centralized Logging

Syslog-ng faq

Random Findings

Как организовать сохранение syslog логов на удаленном сервере.  
На сервере с которого поытаем логи (/etc/syslog.conf):
   mail.*   /var/log/maillog
   mail.*   @loger.host.ru
На удаленном FreeBSD сервере, принимающем логи syslog должен запускаться без опции -s 
(для некоторых версий нужно указать опцию -r),
удаленные хоcты ограничиваем через "-a ip1 -a ip2", рекомендую прикрыть доступ к 514 UDP порту пакетным фильтром.
Пример /etc/syslog.conf:
   mail.*   /var/log/maillog_all   # логи со всех серверов
   +@   # +@ - выборка только для локального хоста
   mail.*   /var/log/maillog
   +relay1.host.ru
   mail.*   /var/log/maillog_relay1
   +relay2.host.ru
   mail.*   /var/log/maillog_relay2
   +*       # +* - отмена привязки к хосту
   !popa3d  # далее по логи по масте программы.
   *.*      /var/log/pop3log

Как пересылать логи с Cisco в syslog   Автор: LS

На Cisco:
    router(config)# logging x.x.x.x
    router(config)# logging source-interface fastethernet 0/0
    router(config)# logging facility local0
В syslog.conf (syslogd нужно запускать с ключем -r):
    local0.* /var/log/cisco.log



Etc

Society

Groupthink : Understanding Micromanagers and Control Freaks : Toxic Managers : BureaucraciesHarvard Mafia : Diplomatic Communication : Surviving a Bad Performance Review : Insufficient Retirement Funds as Immanent Problem of Neoliberal Regime : PseudoScience : Who Rules America : Two Party System as Polyarchy : Neoliberalism  : The Iron Law of Oligarchy : Libertarian Philosophy

Quotes

Skeptical Finance : John Kenneth Galbraith : Keynes : George Carlin : Skeptics : Propaganda  : SE quotes : Language Design and Programming Quotes : Random IT-related quotes : Oscar Wilde : Talleyrand : Somerset Maugham : War and Peace : Marcus Aurelius : Eric Hoffer : Kurt Vonnegut : Otto Von Bismarck : Winston Churchill : Napoleon Bonaparte : Ambrose Bierce : Oscar Wilde : Bernard Shaw : Mark Twain Quotes

Bulletin:

Vol 26, No.1 (January, 2013) Object-Oriented Cult : Vol 25, No.12 (December, 2013) Rational Fools vs. Efficient Crooks: The efficient markets hypothesis : Vol 25, No.08 (August, 2013) Cloud providers as intelligence collection hubs : Vol 23, No.10 (October, 2011) An observation about corporate security departments : Vol 23, No.11 (November, 2011) Softpanorama classification of sysadmin horror stories : Vol 25, No.05 (May, 2013) Corporate bullshit as a communication method : Vol 25, No.10 (October, 2013) Cryptolocker Trojan (Win32/Crilock.A) : Vol 25, No.06 (June, 2013) A Note on the Relationship of Brooks Law and Conway Law

History:

Fifty glorious years (1950-2000): the triumph of the US computer engineering : Donald Knuth : TAoCP and its Influence of Computer Science : Richard Stallman : Linus Torvalds  : Larry Wall  : John K. Ousterhout : CTSS : Multix OS Unix History : Unix shell history : VI editor : History of pipes concept : Solaris : MS DOSProgramming Languages History : PL/1 : Simula 67 : C : History of GCC developmentScripting Languages : Perl history   : OS History : Mail : DNS : SSH : CPU Instruction Sets : SPARC systems 1987-2006 : Norton Commander : Norton Utilities : Norton Ghost : Frontpage history : Malware Defense History : GNU Screen : OSS early history

Classic books:

The Peter Principle : Parkinson Law : 1984 : The Mythical Man-MonthHow to Solve It by George Polya : The Art of Computer Programming : The Elements of Programming Style : The Unix Hater’s Handbook : The Jargon file : The True Believer : Programming Pearls : The Good Soldier Svejk : The Power Elite

Most popular humor pages:

Manifest of the Softpanorama IT Slacker Society : Ten Commandments of the IT Slackers Society : Computer Humor Collection : BSD Logo Story : The Cuckoo's Egg : IT Slang : C++ Humor : ARE YOU A BBS ADDICT? : The Perl Purity Test : Object oriented programmers of all nations : Financial Humor : Financial Humor Bulletin, 2008 : Financial Humor Bulletin, 2010 : The Most Comprehensive Collection of Editor-related Humor : Programming Language Humor : Goldman Sachs related humor : Greenspan humor : C Humor : Scripting Humor : Real Programmers Humor : Web Humor : GPL-related Humor : OFM Humor : Politically Incorrect Humor : IDS Humor : "Linux Sucks" Humor : Russian Musical Humor : Best Russian Programmer Humor : Microsoft plans to buy Catholic Church : Richard Stallman Related Humor : Admin Humor : Perl-related Humor : Linus Torvalds Related humor : PseudoScience Related Humor : Networking Humor : Shell Humor : Financial Humor Bulletin, 2011 : Financial Humor Bulletin, 2012 : Financial Humor Bulletin, 2013 : Java Humor : Software Engineering Humor : Sun Solaris Related Humor : Education Humor : IBM Humor : Assembler-related Humor : VIM Humor : Computer Viruses Humor : Bright tomorrow is rescheduled to a day after tomorrow : Classic Computer Humor

 

The Last but not Least


Copyright © 1996-2014 by Dr. Nikolai Bezroukov. www.softpanorama.org was created as a service to the UN Sustainable Development Networking Programme (SDNP) in the author free time. This document is an industrial compilation designed and created exclusively for educational use and is distributed under the Softpanorama Content License. Site uses AdSense so you need to be aware of Google privacy policy. Original materials copyright belong to respective owners. Quotes are made for educational purposes only in compliance with the fair use doctrine. This is a Spartan WHYFF (We Help You For Free) site written by people for whom English is not a native language. Grammar and spelling errors should be expected. The site contain some broken links as it develops like a living tree...

You can use PayPal to make a contribution, supporting hosting of this site with different providers to distribute and speed up access. Currently there are two functional mirrors: softpanorama.info (the fastest) and softpanorama.net.

Disclaimer:

The statements, views and opinions presented on this web page are those of the author and are not endorsed by, nor do they necessarily reflect, the opinions of the author present and former employers, SDNP or any other organization the author may be associated with. We do not warrant the correctness of the information provided or its fitness for any purpose.

Last modified: February 19, 2014