Saturday, November 12, 2011

[RFC] JPEG encoders control class

I am posting this on both my Church of BSD & Video Technology Blogs. 

---------- Forwarded message ----------
From: Sylwester Nawrocki <snjw23@gmail.com>
Date: Sat, Nov 12, 2011 at 11:46 AM
Subject: [RFC] JPEG encoders control class
To: linux-media <linux-media@vger.kernel.org>
Cc: Mauro Carvalho Chehab <mchehab@infradead.org>, Jean-Francois Moine <moinejf@free.fr>, Hans Verkuil <hverkuil@xs4all.nl>, Hans de Goede <hdegoede@redhat.com>, Luca Risolia <luca.risolia@studio.unibo.it>


Hi all,

This RFC is discussing the current support of JPEG encoders in V4L2 and
a proposal of new JPEG control class.


Motivation
==========

JPEG encoder control is also required at the sub-device level, but currently
there are only defined ioctls in regular V4L2 device API. It doesn't seem
to make sense for these current ioctls to be inherited by sub-device nodes,
since they're not generic enough, incomplete and rather not compliant with
JFIF JPEG standard [2], [3].


Current implementation
======================

Currently two ioctls are available [4]:

#define VIDIOC_G_JPEGCOMP        _IOR('V', 61, struct v4l2_jpegcompression)
#define VIDIOC_S_JPEGCOMP        _IOW('V', 62, struct v4l2_jpegcompression)

And the corresponding data structure is defined as:

struct v4l2_jpegcompression {
       int quality;

       int  APPn;              /* Number of APP segment to be written,
                                * must be 0..15 */
       int  APP_len;           /* Length of data in JPEG APPn segment */
       char APP_data[60];      /* Data in the JPEG APPn segment. */

       int  COM_len;           /* Length of data in JPEG COM segment */
       char COM_data[60];      /* Data in JPEG COM segment */

       __u32 jpeg_markers;     /* Which markers should go into the JPEG
                                * output. Unless you exactly know what
                                * you do, leave them untouched.
                                * Inluding less markers will make the
                                * resulting code smaller, but there will
                                * be fewer applications which can read it.
                                * The presence of the APP and COM marker
                                * is influenced by APP_len and COM_len
                                * ONLY, not by this property! */

#define V4L2_JPEG_MARKER_DHT (1<<3)    /* Define Huffman Tables */
#define V4L2_JPEG_MARKER_DQT (1<<4)    /* Define Quantization Tables */
#define V4L2_JPEG_MARKER_DRI (1<<5)    /* Define Restart Interval */
#define V4L2_JPEG_MARKER_COM (1<<6)    /* Comment segment */
#define V4L2_JPEG_MARKER_APP (1<<7)    /* App segment, driver will
                                       * allways use APP0 */
};


What are the issues with such an implementation ?

These ioctls don't allow to re-program the quantization and Huffman tables
(DQT, DHT). Additionally, the standard valid segment length for the application
defined APPn and the comment COM segment is 2...65535, while currently this is
limited to 60 bytes.

Therefore APP_data and COM_data, rather than fixed size arrays, should be
pointers to a variable length buffer.

Only two drivers upstream really use VIDIOC_[S/G]_JPEGCOMP ioctls for anything
more than compression quality query/control. It might make sense to create
separate control for image quality and to obsolete the v4l2_jpegcompressin::quality
field.

Below is a brief review of usage of VIDIOC_[S/G]_JPEGCOMP ioctls in current mainline
drivers. Listed are parts of struct v4l2_jpegcompression used in each case.


cpia2
-----

vidioc_g_jpegcomp, vidioc_s_jpegcomp
- compression quality ignored, returns fixed value (80)
- uses APP_data/len, COM_data/len
- markers (only DHT can be disabled by the applications)


zoran
-----

vidioc_g_jpegcomp, vidioc_s_jpegcomp
- compression quality, values 5...100, used only to calculate buffer size
- APP_data/len, COM_data/len
- markers field used to control inclusion of selected JPEG markers
 in the output buffer


et61x251, sn9c102, s2255drv.c
-----------------------------

vidioc_g_jpegcomp, vidioc_s_jpegcomp
- compression quality only,
 valid values: et61x251, sn9c102use - {0, 1}, s2255drv.c - (0..100)


staging/media/go7007
--------------------

vidioc_g_jpegcomp
- only for reporting JPEG markers (_DHT and _DQT returned),
- always returns fixed value of compression quality (50)

vidioc_s_jpegcomp
 - does nothing, only returns error code when passed parameter
  do not match the device capabilities


drivers/media/video/gspca/conex.c
drivers/media/video/gspca/jeilinj.c
drivers/media/video/gspca/mars.c
drivers/media/video/gspca/ov519.c
drivers/media/video/gspca/spca500.c
drivers/media/video/gspca/stk014.c
drivers/media/video/gspca/sunplus.c
drivers/media/video/gspca/topro.c
drivers/media/video/gspca/zc3xx.c
------------------------------------

vidioc_s_jpegcomp
- compression quality

vidioc_g_jpegcomp
 - compression quality, marker flags


drivers/media/video/gspca/sonixj.c
------------------------------------

vidioc_g_jpegcomp
 - compression quality, marker flags

--------------------------------------

The following is an initial draft of the new control class

o V4L2_CTRL_CLASS_JPEG

As not everything might be covered by the controls (the application data and comment
segments, quantization and Huffman tables, etc.) the control class should probably
just complement VIDIOC_[G/S]_JPEGCOMP ioctls, rather than entirely replacing them.


Proposed controls
=================

1. Chroma sub-sampling
---------------------

The subsampling factors describe how each component of an input image is sampled,
in respect to maximum sample rate in each spatial dimension.
More general description can be found in [2], clause A.1.1., "Dimensions and
sampling factors".

The chroma subsampling would describe how Cb, Cr components should be downsampled
after coverting an input image from RGB to Y'CbCr color space.

o V4L2_CID_JPEG_CHROMA_SUBSAMPLING

 - V4L2_JPEG_CHROMA_SUBSAMPLING_GRAY - only luminance component is present,
 - V4L2_JPEG_CHROMA_SUBSAMPLING_410  - subsample Cr, Cb signals horizontally by
                                       4 and vertically by 2
 - V4L2_JPEG_CHROMA_SUBSAMPLING_411  - horizontally subsample Cr, Cb signals by
                                       a factor of 4
 - V4L2_JPEG_CHROMA_SUBSAMPLING_420  - subsample Cr, Cb signals horizontally and
                                       vertically by 2
 - V4L2_JPEG_CHROMA_SUBSAMPLING_422  - horizontally subsample Cr, Cb signals by
                                       a factor of 2,
 - V4L2_JPEG_CHROMA_SUBSAMPLING_444  - no chroma subsampling, each pixel has Y,
                                       Cr and Cb values.

Using no subsampling produces sharper colours, even with higher compression
(in order to achieve similar file size) [7], thus it seems important to provide
the user with a method of precise subsampling control.


2. Restart interval (DRI)
-----------------------

o V4L2_CID_JPEG_RESTART_INTERVAL

The restart interval (DRI marker) determines the interval of inserting RSTm
markers. The purpose of RSTm markers is to additionally reinitialize decoder
process' predictor with initial default value. For lossy compression processes
the restart interval is expressed in MCU (Minimm Coded Unit).
If restart interval value is 0 DRI and RSTm (m = 0..7) markers will not be
inserted. Consequently this control would make current V4L2_JPEG_MARKER_DRI
markers flag redundant. This control would be useful for S5P JPEG IP block [6].


3. Image quality
----------------

o V4L2_CID_JPEG_QUALITY

Image quality is not defined in the standard but it is used as an intermediate
parameter by many encoders to control set of encoding parameters, which then
allow to obtain certain image quality and corresponding file size.
IMHO it makes sense to add the quality control to the JPEG class as it's widely
used, not only for webcams.

As far as the value range is concerned, probably it's better to leave this driver
specific. The applications would then be more aware of what is supported by
a device (min, max, step) and they could translate driver specific range into
standardised values (0..100) if needed. Still the drivers could do the translation
themselves if required. The specification would only say the 0..100 range is
recommended.


4. JPEG markers presence
------------------------

Markers serve as identifiers of various structural parts of compressed data
formats. All markers are assigned two-byte codes: an 0xFF byte followed by
a byte which is not equal to 0 or 0xFF. [2] Excluding the reserved ones there
is 39 valid codes.

I'm not really sure how the markers inhibit feature is useful, but since some
drivers use it let's assume it is needed. Likely a 32-bit bitmask control could
be used for activating/deactivating markers, as it doesn't make sense for some
of markers to be freely discarded from the compressed data.

o V4L2_CID_JPEG_ACTIVE_MARKERS

Following markers might be covered by this control, listed in Table E.1, [2]:
APP0..15, COM, DHT, DQT, DAC and additionally DNL.
There is still room for 10 additional markers which might be added if required.


The above list of controls is most likely not exhaustive, it's just an attempt
to cover features available in the mainline drivers and the S5P SoC JPEG codec
IP block [6].

In order to support reconfiguration of quantization and Huffman tables the
VIDIOC_[G/S]_JPEGCOMP probably need to be re-designed, but it's out of scope
of this RFC.


References
==========

[1] http://www.mail-archive.com/linux-media@vger.kernel.org/msg01783.html

[2] http://www.w3.org/Graphics/JPEG/itu-t81.pdf

[3] http://www.w3.org/Graphics/JPEG/jfif3.pdf

[4] http://linuxtv.org/downloads/v4l-dvb-apis/vidioc-g-jpegcomp.html

[5] http://www.mail-archive.com/linux-media@vger.kernel.org/msg01784.html

[6] http://patchwork.linuxtv.org/patch/8197

[7] http://www.ampsoft.net/webdesign-l/jpeg-compression.html


--
Thanks,
Sylwester
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Friday, November 11, 2011

Generation of Random Numbers from PING

When looking for a flawless Random number generator I realized ping would be it.  This worked well because we were already testing the connectivity between hosts using scripted ping, so we could repurpose that data for random number generation.

We could also save the random numbers to disk and use them one time as a pad then delete them.

sokol@server:~/test$ ./getrand
97598993
sokol@server:~/test$ ./getrand
27EC0C20
sokol@server:~/test$ ./getrand
F31CE56C


sokol@server:~/test$ cat getrand
#!/bin/bash
target=google.com
#c=0
#while [ $c -lt 8 ]
#do
#c=$[$c+1]

{
echo "obase = 16"
ping -c 8 -i 0.2 $target |\
grep --line-buffered "time=" |\
sed -u \
-e 's/[a-z \.(),_:+=-]//g' \
-e 's/\(.\)/\1+/g' \
-e 's/^\(.*\)+$/(\1)% 16/'
} |\
bc |\
tr -d '\n'

echo ""
#done

In the code commented out is the ability to run this in a loop, also if your not going to enjoy the output in real-time you can remove the --line-buffered from grep and -u from sed, it may make a small performance improvement    Keep in mind each 4 bit hex work is the result of one ping. So this is taking up network resources.

Generation of 8x8 tile Random Hex Digits

sokol@server:~/test$ sudo ./getrand2
7BDBF0AA
6BC6BC42
B63F2397
D55A5A5C
F10A1A7D
112329BC
110099F7
C1F53C98

sokol@server:~/test$ cat getrand2
#!/bin/bash
target=google.com
c=0
while [ $c -lt 8 ]
do
c=$[$c+1]

{
echo "obase = 16"
ping -c 8 -i 0.02 $target |\
grep "time=" |\
sed \
-e 's/[a-z \.(),_:+=-]//g' \
-e 's/\(.\)/\1+/g' \
-e 's/^\(.*\)+$/(\1)% 16/'
} |\
bc |\
tr -d '\n'
echo ""
done

This is easy enough to adapt for any purpose, and even redirect output to a file.

you need to be root to set the ping Interval time to below 0.2. Sudo does this.

Under the Hood


Below I peel off each layer to show how it's being done.


This is what just ping generates

sokol@server:~/test$ sudo ping -c 8 -i 0.02 google.com | grep "time="
64 bytes from 173.194.64.99: icmp_seq=1 ttl=47 time=8.86 ms
64 bytes from 173.194.64.99: icmp_seq=2 ttl=47 time=8.87 ms
64 bytes from 173.194.64.99: icmp_seq=3 ttl=47 time=8.86 ms
64 bytes from 173.194.64.99: icmp_seq=4 ttl=47 time=8.08 ms
64 bytes from 173.194.64.99: icmp_seq=5 ttl=47 time=8.08 ms
64 bytes from 173.194.64.99: icmp_seq=6 ttl=47 time=8.85 ms
64 bytes from 173.194.64.99: icmp_seq=7 ttl=47 time=8.97 ms
64 bytes from 173.194.64.99: icmp_seq=8 ttl=47 time=8.93 ms


After everything but the number have been stripped out, added together and modulo 16.

sokol@server:~/test$ sudo ping -c 8 -i 0.02 google.com | grep "time=" | sed -e 's/[a-z \.(),_:+=-]//g' -e 's/\(.\)/\1+/g' -e 's/^\(.*\)+$/(\1)% 16/'
(6+4+1+7+3+1+9+4+6+4+9+9+1+4+7+8+9+4)% 16
(6+4+1+7+3+1+9+4+6+4+9+9+2+4+7+8+9+2)% 16
(6+4+1+7+3+1+9+4+6+4+9+9+3+4+7+8+9+1)% 16
(6+4+1+7+3+1+9+4+6+4+9+9+4+4+7+7+9+8)% 16
(6+4+1+7+3+1+9+4+6+4+9+9+5+4+7+7+9+8)% 16
(6+4+1+7+3+1+9+4+6+4+9+9+6+4+7+7+9+8)% 16
(6+4+1+7+3+1+9+4+6+4+9+9+7+4+7+7+9+6)% 16
(6+4+1+7+3+1+9+4+6+4+9+9+8+4+7+8+9+3)% 16

What bc generates for it's output. But I send it the command "obase=16" first that makes it's output Hex.

sokol@server:~/test$ sudo ping -c 8 -i 0.02 google.com | grep "time=" | sed -e 's/[a-z \.(),_:+=-]//g' -e 's/\(.\)/\1+/g' -e 's/^\(.*\)+$/(\1)% 16/' | bc
5
4
6
9
6
7
13
10


Read also: Testing ping based Random number generator

Tuesday, November 08, 2011

Illusions in the Web: a real-time video editor built in HTML5 | Mateu Batle's Blog

http://mbatle.wordpress.com/2011/11/02/illusions-in-the-web-a-real-time-video-editor-built-in-html5/

Support Linux by Not Writing Linux-Only Software – Tanner Helland (dot) Com - Tanner Helland (dot) Com

http://www.tannerhelland.com/3772/support-linux-stop-exclusive-software/

Experimental Virtual Graphics Port Support For Linux - Slashdot

Experimental Virtual Graphics Port Support For Linux - Slashdot
From Slashdot:

"A recently open-sourced experimental Linux infrastructure created by Bell Labs researchers allows 3D rendering to be performed on a GPU and displayed on other devices, including DisplayLinkdongles. The system accomplishes this by essentially creating 'Virtual CRTCs', or virtual display output controllers, and allowing arbitrary devices to appear as extra ports on a graphics card."The code and instructions are at GitHub. This may also be the beginning of good news for people with MUX-less dual-GPU laptops that are currently unsupported.



LINUX MEDIA INFRASTRUCTURE API

http://hverkuil.home.xs4all.nl/spec/media.html

Monday, November 07, 2011

Fwd: [svlug] ACCU Wednesday "Deep C" Olve Maudal

UPDATE:
 Presentation Slides  http://www.slideshare.net/olvemaudal/deep-c

---------- Forwarded message ----------
From: "Walter Vannini" <walterv@gbbservices.com>
Date: Nov 7, 2011 8:06 AM
Subject: [svlug] ACCU Wednesday "Deep C" Olve Maudal
To: "SVLUG" <svlug@lists.svlug.org>

When:      Wednesday, November 9, 2011
Topic:     Deep C
Speaker:   Olve Maudal
Time:      6:30pm doors open
         7:00pm meeting begins
Where:     Symantec
         VCAFE building
         350 Ellis Street (near E. Middlefield Road)
         Mountain View, CA 94043
Map:       <http://tinyurl.com/334rv5>
Directions: VCAFE is accessible from the semicircular courtyard between Symantec buildings <http://tinyurl.com/2dccgc>
Cost:      Free
More Info: <http://www.accu-usa.org>

Programming is hard. Programming correct C and C++ is particularly hard. Indeed, both in C and certainly in C++, it is uncommon to see a screenful containing only well defined and conforming code. Why do professional programmers write code like this? Because most programmers do not have a deep understanding of the language they are using. While they sometimes know that certain things are undefined or unspecified, they often do not know why it is so.

In this presentation we will study small code snippets in C and C++, and use them to discuss the fundamental building blocks, limitations and underlying design philosophies of these wonderful but dangerous programming languages.

Olve Maudal works for Cisco Systems. He loves to write code, but is just as interested in how software is developed as what it actually does. He is currently involved in developing telepresence systems. Previous experience includes developing systems for finding oil (Schlumberger), and developing systems for electronically moving money (BBS).

Olve is an active member of the vibrant geek community in Oslo where he is involved in JavaPils, Cantara, XP Meetup, Oslo C++ Users Group, Lean Meetup and a few other things. He is also an active member of ACCU in Europe. You can follow him at http://olvemaudal.wordpress.com and http://twitter.com/olvemaudal

Meetings are open to the public and are free of charge.

---------

The ACCU meets monthly. Meetings are always open to the public and are free of charge. To suggest topics and speakers please email Walter Vannini via walterv@gbbservices.com


_______________________________________________
svlug mailing list
svlug@lists.svlug.org
http://lists.svlug.org/lists/listinfo/svlug

Diebold Unveils Prototype for World's First Virtualized ATM | SecurityWeek.Com

http://www.securityweek.com/diebold-unveils-prototype-worlds-first-virtualized-atm

Saturday, November 05, 2011

The UNIX system family tree: Research and BSD

The UNIX system family tree: Research and BSD
---------------------------------------------

First Edition (V1)
     |
Second Edition (V2)
     |
Third Edition (V3)
     |
Fourth Edition (V4)
     |
Fifth Edition (V5)
     |
Sixth Edition (V6) -----*
       \                |
        \               |
         \              |
Seventh Edition (V7)    |
            \           |
             \        1BSD
             32V        |
               \      2BSD---------------*
                \    /                   |
                 \  /                    |
                  \/                     |
                 3BSD                    |
                  |                      |
               4.0BSD                2.79BSD
                  |                      |
               4.1BSD --------------> 2.8BSD
                  |                      |
              4.1aBSD -----------\       |
                  |                \     |
              4.1bBSD                \   |
                  |                    \ |
      *------ 4.1cBSD --------------> 2.9BSD
     /            |                      |
Eighth Edition    |                   2.9BSD-Seismo
     |            |                      |
     +----<--- 4.2BSD               2.9.1BSD
     |            |                      |
     +----<--- 4.3BSD -------------> 2.10BSD
     |            |               /      |
Ninth Edition     |              / 2.10.1BSD
     |         4.3BSD Tahoe-----+        |
     |            |              \       |
     |            |                \     |
     v            |                  2.11BSD
Tenth Edition     |                      |
                  |                  2.11BSD rev #430
               4.3BSD NET/1              |
                  |                      v
               4.3BSD Reno
                  |
   *---------- 4.3BSD NET/2 -------------------+-------------*
   |                    |                      |             |
386BSD 0.0              |                      |           BSD/386 ALPHA
   |                    |                      |             |
386BSD 0.1 ------------>+                      |           BSD/386 0.3.[13]
   |     \              |                  4.4BSD Alpha      |
   |     386BSD 1.0     |                      |           BSD/386 0.9.[34]
   |                    |                  4.4BSD            |
   |                    |                    / |             |
   |                    |   4.4BSD-Encumbered  |             |
   |                 NetBSD 0.8                |           BSD/386 1.0
   |                    |                      |             |
FreeBSD 1.0          NetBSD 0.9                |           BSD/386 1.1
   |                    |           .----- 4.4BSD Lite       |
FreeBSD 1.1             |          /   /       |     \       |
   |                    |         /   /        |      \      |
FreeBSD 1.1.5       .---|--------'   /         |       \     |
   |               /    |           /          |        \    |
FreeBSD 1.1.5.1   /     |          /           |         \   |
   |             /   NetBSD 1.0 <-'            |          \  |
   |            /       |                      |           \ |
FreeBSD 2.0 <--'        |                      |           BSD/OS 2.0
   |                     \                     |             |
FreeBSD 2.0.5             \                    |           BSD/OS 2.0.1
   |                 .-----\------------- 4.4BSD Lite2       |
   |                 |      \             |  |   |   |       |
   |                 | .-----|------Rhapsody |   |   |       |
   |                 | |     |        NetBSD 1.3 |   |       |
   |                 | |     |           OpenBSD 2.3 |       |
   |                 | |     |                BSD/OS 3.0     |
FreeBSD 2.1          | |     |                               |
 |   |               | |  NetBSD 1.1 ------.               BSD/OS 2.1
 | FreeBSD 2.1.5     | |     |              \                |
 |     |             | |  NetBSD 1.2         \             BSD/OS 3.0
 | FreeBSD 2.1.6     | |     |  \          OpenBSD 2.0       |
 |     |             | |     |   \             |             |
 | FreeBSD 2.1.6.1   | |     |    \            |             |
 |     |             | |     |     \           |             |
 | FreeBSD 2.1.7     | |     |      |          |             |
 |     |             | |     |  NetBSD 1.2.1   |             |
 | FreeBSD 2.1.7.1   | |     |                 |             |
 |                   | |     |                 |             |
 |                   | |     |                 |             |
 *-FreeBSD 2.2       | |     |                 |             |
 |        \          | |     |                 |             |
 |     FreeBSD 2.2.1 | |     |                 |             |
 |         |         | |     |                 |             |
 |     FreeBSD 2.2.2 | |     |             OpenBSD 2.1       |
 |         |         | |     |                 |             |
 |     FreeBSD 2.2.5 | |     |                 |             |
 |         |         | |     |             OpenBSD 2.2       |
 |         |         | |  NetBSD 1.3           |             |
 |     FreeBSD 2.2.6 | |     |    |            |             |
 |         |         | |     | NetBSD 1.3.1    |           BSD/OS 3.1
 |         |         | |     |    |        OpenBSD 2.3       |
 |         |         | |     | NetBSD 1.3.2    |             |
 |     FreeBSD 2.2.7 | |     |    |            |             |
 |         |         | |     |    |            |           BSD/OS 4.0
 |         v         | |     |    |            |             |
 |     FreeBSD 2.2.8 | |     |    |            |             |
 |                   | |     |    |        OpenBSD 2.4       |
FreeBSD 3.0 <--------* |     |    v            |             |
 |                     |     | NetBSD 1.3.3    |             |
 *---FreeBSD 3.1       |     |                 |             |
 |       |             |     |                 |           BSD/OS 4.0.1
 |   FreeBSD 3.2----*  |  NetBSD 1.4       OpenBSD 2.5       |
 |       |          |  |  |  |    |            |             |
 |       |          |  |  |  |    |            |             |
 |       |          |  |  |  |    |            |             |
 |   FreeBSD 3.3    |  |  |  | NetBSD 1.4.1    |             |
 |       |          |  |  |  |    |        OpenBSD 2.6       |
 |   FreeBSD 3.4    |  |  |  |    |            |             |
 |           |      |  |  |  |    |            |           BSD/OS 4.1
FreeBSD 4.0  |      |  |  |  | NetBSD 1.4.2    |             |
 |           |      |  |  |  |    |            |             |
 |           |      |  |  |  |    |            |             |
 |   FreeBSD 3.5    |  |  |  |    |        OpenBSD 2.7       |
 |           |      |  |  |  |    |            |             |
 |   FreeBSD 3.5.1  |  |  |  |    |            |             |
 |                  |  |  |  |    |            |             |
 *---FreeBSD 4.1    |  |  |  |    |            |             |
 |      |           |  | (?) |    |            |             |
 |   FreeBSD 4.1.1  |  |  /  |    |            |             |
 |      |           |  | /   |    |            |             |
 |   FreeBSD 4.2   Darwin/   | NetBSD 1.4.3    |             |
 |      |         Mac OS X   |             OpenBSD 2.8     BSD/OS 4.2
 |      |             |      |                 |             |
 |      |             |      |                 |             |
 |      |           10.0  NetBSD 1.5           |             |
 |   FreeBSD 4.3      |      |    |            |             |
 |      |             |      |    |        OpenBSD 2.9       |
 |      |             |      | NetBSD 1.5.1    |             |
 |      |             |      |    |            |             |
 |   FreeBSD 4.4-.    |      | NetBSD 1.5.2    |             |
 |      |        | Mac OS X  |    |            |             |
 |      |        |   10.1    |    |        OpenBSD 3.0       |
 |   FreeBSD 4.5 |    |      |    |            |             |
 |      |         \   |      |    |            |           BSD/OS 4.3
 |   FreeBSD 4.6   \  |      |    |        OpenBSD 3.1       |
 |      |           \ |      | NetBSD 1.5.3    |             |
 |   FreeBSD 4.6.2 Mac OS X  |                 |             |
 |      |            10.2    |                 |             |
 |   FreeBSD 4.7      |      |                 |             |
 |      |             |   NetBSD 1.6       OpenBSD 3.2       |
 |   FreeBSD 4.8      |      |    |            |             |
 |      |             |      | NetBSD 1.6.1    |             |
 |      |--------.    |      |    |        OpenBSD 3.3     BSD/OS 5.0
 |      |         \   |      |    |            |             |
 |   FreeBSD 4.9   |  |      |    |        OpenBSD 3.4     BSD/OS 5.1 ISE
 |      |          |  |      |    |            |
 |      |          |  |      | NetBSD 1.6.2    |
 |      |          |  |      |    |            |
 |      |          |  |      |    |        OpenBSD 3.5
 |      |          |  |      |    v            |
 |   FreeBSD 4.10  |  |      |                 |
 |      |          |  |      |                 |
 |   FreeBSD 4.11  |  |      |                 |
 |                 |  |      |                 |
 |                  `-|------|-----------------|---------------------.
 |                    |      |                 |                      \
FreeBSD 5.0           |      |                 |                       |
 |                    |      |                 |                       |
FreeBSD 5.1           |      |                 |                 DragonFly 1.0
 |          \         |      |                 |                       |
 |           ----- Mac OS X  |                 |                       |
 |                   10.3    |                 |                       |
FreeBSD 5.2           |      |                 |                       |
 |      |             |      |                 |                       |
 |   FreeBSD 5.2.1    |      |                 |                       |
 |                    |      |                 |                       |
 *-------FreeBSD 5.3  |      |                 |                       |
 |           |        |      |             OpenBSD 3.6                 |
 |           |        |   NetBSD 2.0           |                       |
 |           |        |      | |  |            |                DragonFly 1.2.0
 |           |     Mac OS X  | | NetBSD 2.0.2  |                       |
 |           |       10.4    | |  |            |                       |
 |       FreeBSD 5.4  |      | |  |            |                       |
 |           |        |      | |  |        OpenBSD 3.7                 |
 |           |        |      | | NetBSD 2.0.3  |                       |
 |           |        |      | |  |            |                       |
 *--FreeBSD  |        |      | |  v        OpenBSD 3.8                 |
 |    6.0    |        |      | |               |                       |
 |     |     |        |      |  \              |                       |
 |     |     |        |      | NetBSD 2.1      |                       |
 |     |     |        |      |                 |                       |
 |     |     |        |   NetBSD 3.0           |                       |
 |     |     |        |      | |  |            |                DragonFly 1.4.0
 |     |     |        |      | |  |        OpenBSD 3.9                 |
 |  FreeBSD  |        |      | |  |            |                       |
 |    6.1    |        |      | |  |            |                       |
 |     |  FreeBSD 5.5 |      | |  |            |                       |
 |     |              |      | | NetBSD 3.0.1  |                DragonFly 1.6.0
 |     |              |      | |  |            |                       |
 |     |              |      | |  |        OpenBSD 4.0                 |
 |     |              |      | | NetBSD 3.0.2  |                       |
 |     |              |      | NetBSD 3.1      |                       |
 | FreeBSD 6.2        |      |                 |                       |
 |     |              |      |                 |                DragonFly 1.8.0
 |     |              |      |             OpenBSD 4.1                 |
 |     |              |      |                 |                DragonFly 1.10.0
 |     |           Mac OS X  |                 |                       |
 |     |             10.5    |                 |                       |
 |     |              |      |             OpenBSD 4.2                 |
 |     |              |   NetBSD 4.0           |                       |
 | FreeBSD 6.3        |      |                 |                       |
 |            \       |      |                 |                       |
 *--FreeBSD    |      |      |                 |                DragonFly 1.12.0
 |    7.0      |      |      |                 |                       |
 |     |       |      |      |             OpenBSD 4.3                 |
 |     |       |      |      |                 |                DragonFly 2.0.0
 |     |    FreeBSD   |      |             OpenBSD 4.4                 |
 |     |      6.4     |      |                 |                       |
 |     |              |      |                 |                       |
 |  FreeBSD 7.1       |      |                 |                       |
 |     |              |      |                 |                DragonFly 2.2.0
 |  FreeBSD 7.2       |   NetBSD 5.0       OpenBSD 4.5                 |
 |             \      |      |    |            |                       |
 |              |  Mac OS X  |    |            |                       |
 |              |    10.6    |    |            |                       |
 |              |     |      |    |            |                DragonFly 2.4.0
 |              |     |      |    |        OpenBSD 4.6                 |
 |              |     |      |    |            |                       |
 *--FreeBSD     |     |      |    |            |                       |
 |    8.0       |     |      |    |            |                       |
 |     |     FreeBSD  |      |    |            |                       |
 |     |       7.3    |      |    |            |                DragonFly 2.6.0
 |     |        |     |      |    |        OpenBSD 4.7                 |
 |  FreeBSD     |     |      |    |            |                       |
 |    8.1       |     |      |    |            |                       |
 |     |        |     |      |    |            |                DragonFly 2.8.2
 |     |        |     |      |    |        OpenBSD 4.8                 |
 |     |        |     |      | NetBSD 5.1      |                       |
 |  FreeBSD  FreeBSD  |      |                 |                       |
 |    8.2      7.4    |      |                 |               DragonFly 2.10.1
 |     v              |      |             OpenBSD 4.9                 |
 |                    |      |                 |                       |
 |                    |      |                 |                       |
 |                    |      |             OpenBSD 5.0                 |
 |                    |      |                 |                       |
FreeBSD 9 -current    |  NetBSD -current  OpenBSD -current             |
 |                    |      |                 |                       |
 v                    v      v                 v                       v

Time
----------------

Time tolerance +/- 6 months, depending on which book/article you read; if it
was the announcement in Usenet or if it was available as tape.

[44B] McKusick, Marshall Kirk, Keith Bostic, Michael J Karels,
 and John Quarterman. The Design and Implementation of
 the 4.4BSD Operating System.
[APL] Apple website [http://www.apple.com/macosx/]
[BSDI] Berkeley Software Design, Inc.
[DFB] DragonFlyBSD Project, The.
[DOC] README, COPYRIGHT on tape.
[FBD] FreeBSD Project, The.
[KB]  Keith Bostic. BSD2.10 available from Usenix. comp.unix.sources,
 Volume 11, Info 4, April, 1987.
[KKK] Mike Karels, Kirk McKusick, and Keith Bostic. tahoe announcement.
 comp.bugs.4bsd.ucb-fixes, June 15, 1988.
[KSJ] Michael J. Karels, Carl F. Smith, and William F. Jolitz.
 Changes in the Kernel in 2.9BSD. Second Berkeley Software
 Distribution UNIX Version 2.9, July, 1983.
[NBD] NetBSD Project, The.
[OBD] OpenBSD Project, The.
[QCU] Salus, Peter H. A quarter century of UNIX.
[SMS] Steven M. Schultz. 2.11BSD, UNIX for the PDP-11.
[TUHS] The Unix Historical Society.  http://minnie.tuhs.org/Unix_History/.
[USE] Usenet announcement.
[WRS] Wind River Systems, Inc.
[dmr] Dennis Ritchie, via E-Mail

Multics                 1965
UNIX                    Summer 1969
    DEC PDP-7
First   Edition         1971-11-03 [QCU]
    DEC PDP-11/20, Assembler
Second  Edition         1972-06-12 [QCU]
    10 UNIX installations
Third   Edition         1973-02-xx [QCU]
    Pipes, 16 installations
Fourth  Edition         1973-11-xx [QCU]
    rewriting in C effected,
                                above 30 installations
Fifth   Edition         1974-06-xx [QCU]
    above 50 installations
Sixth   Edition         1975-05-xx [QCU]
    port to DEC Vax
Seventh Edition         1979-01-xx [QCU]
    first portable UNIX
Eighth  Edition         1985-02-xx [QCU]
    VAX 11/750, VAX 11/780 [dmr]
    descended from 4.1c BSD [dmr]
    descended from 4.1 BSD [44B]
   scooping-out and replacement of the character-device
   and networking part by the streams mechanism

Ninth   Edition         1986-09-xx [QCU]
Tenth   Edition         1989-10-xx [QCU]

1BSD                    late 1977
   1978-03-09 [QCU]
    PDP-11, Pascal, ex(1)
    30 free copies of 1BSD sent out
    35 tapes sold for 50 USD [QCU]
2BSD                    mid 1978 [QCU] 1979-05-10 [TUHS]
    75 2BSD tapes shipped
2.79BSD   1980-04-xx [TUHS]
2.8BSD   1981-07-xx [KSJ]

2.8.1BSD  1982-01-xx [QCU]
    set of performance improvements
2.9BSD   1983-07-xx [KSJ]
2.9.1BSD                1983-11-xx [TUHS]
2.9BSD-Seismo  1985-08-xx [SMS]
2.10BSD   1987-04-xx [KKK]
2.10.1BSD  1989-01-xx [SMS]
2.11BSD   1992-02-xx [SMS]
2.11BSD rev #430 1999-12-13 [SMS]

32V   1978-1[01]-xx [QCU]
3BSD                    late 1979 [QCU] March 1980 [TUHS]
    virtual memory, page replacement,
                         demand paging
4.0BSD                  1980-10-xx
4.1BSD                  1981-07-08 [DOC]
4.1aBSD                 1982-04-xx
    alpha release, 100 sites, networking [44B]
4.1bBSD    internal release, fast filesystem [44B]
4.1cBSD                 late 1982
    beta release, IPC [44B]
4.2BSD                  1983-09-xx [QCU]
                        1983-08-03 [DOC]
4.3BSD                  1986-06-xx [QCU]
   1986-04-05 [KB], [DOC]
4.3BSD Tahoe            1988-06-15 [QCU], [DOC]
4.3BSD NET/1            1988-11-xx [QCU]
                        1989-01-01 [DOC]
4.3BSD Reno             1990-06-29 [QCU], [DOC]
4.3BSD NET/2            1991-06-28 [QCU], [DOC]

BSD/386 ALPHA  1991-12-xx [BSDI]
    first code released to people outside BSDI
386BSD 0.0              1992-02-xx [DOC]
BSD/386 0.3.1         1992-04-xx [BSDI] first ext. beta; B customers
BSD/386 0.3.3  1992-06-xx [BSDI] first CDROM version
386BSD 0.1              1992-07-28 [DOC]
4.4BSD Alpha            1992-07-07
BSD/386 0.9.3  1992-10-xx [BSDI]
    first external gamma; G customers
BSD/386 0.9.4  1992-12-xx [BSDI]
    would have been 1.0 except for request
    for preliminary injunction
BSD/386 1.0   1993-03-xx [BSDI]
    injunction denied; first official release
NetBSD 0.8              1993-04-20 [NBD]
4.4BSD                  1993-06-01 [USE]
NetBSD 0.9              1993-08-23 [NBD]
FreeBSD 1.0  1993-11-01 [FBD]
FreeBSD 1.0.2  1993-11-14 [FBD]
    supersedes 1.0 13 days after release.
BSD/386 1.1  1994-02-xx [BSDI]
4.4BSD Lite             1994-03-01 [USE]
FreeBSD 1.1  1994-05-07 [FBD]
FreeBSD 1.1.5  1994-06-30 [FBD]
FreeBSD 1.1.5.1  1994-07-05 [FBD]
    supersedes 1.1.5 5 days after release.
NetBSD 1.0              1994-10-26 [NBD]
386BSD 1.0              1994-11-12 [USE]
FreeBSD 2.0  1994-11-23 [FBD]
BSD/OS 2.0  1995-01-xx [BSDI] 4.4 lite based
FreeBSD 2.0.5  1995-06-10 [FBD]
BSD/OS 2.0.1  1995-06-xx [BSDI]
4.4BSD Lite Release 2 1995-06-xx [44B]
    the true final distribution from the CSRG
FreeBSD 2.1.0  1995-11-19 [FBD]
NetBSD 1.1              1995-11-26 [NBD]
BSD/OS 2.1  1996-01-xx [BSDI]
FreeBSD 2.1.5  1996-07-14 [FBD]
NetBSD 1.2              1996-10-04 [NBD]
OpenBSD 2.0             1996-10-18 [OBD]
FreeBSD 2.1.6  1996-11-16 [FBD]
FreeBSD 2.1.6.1  1996-11-25 [FBD] (sendmail security release)
Rhapsody  1997-xx-xx
FreeBSD 2.1.7  1997-02-20 [FBD]
BSD/OS 3.0  1997-02-xx [BSDI] 4.4 lite2 based
FreeBSD 2.2.0  1997-03-16 [FBD]
FreeBSD 2.2.1  1997-03-25 [FBD]
FreeBSD 2.2.2  1997-05-16 [FBD]
NetBSD 1.2.1            1997-05-20 [NBD] (patch release)
OpenBSD 2.1             1997-06-01 [OBD]
FreeBSD 2.2.5  1997-10-22 [FBD]
OpenBSD 2.2             1997-12-01 [OBD]
NetBSD 1.3              1998-01-04 [NBD]
FreeBSD 2.2.6  1998-03-25 [FBD]
NetBSD 1.3.1            1998-03-09 [NBD] (patch release)
BSD/OS 3.1  1998-03-xx [BSDI]
OpenBSD 2.3             1998-05-19 [OBD]
NetBSD 1.3.2            1998-05-29 [NBD] (patch release)
FreeBSD 2.2.7  1998-07-22 [FBD]
BSD/OS 4.0  1998-08-xx [BSDI]
    2-lock MP support, ELF executables
FreeBSD 3.0  1998-10-16 [FBD]
    FreeBSD-3.0 is a snapshot from -current,
    while 3.1 and 3.2 are from 3.x-stable which
    was branched quite some time after 3.0-release
FreeBSD 2.2.8           1998-11-29 [FBD]
OpenBSD 2.4             1998-12-01 [OBD]
NetBSD 1.3.3            1998-12-23 [NBD] (patch release)
FreeBSD 3.1  1999-02-15 [FBD]
BSD/OS 4.0.1  1999-03-xx [BSDI]
NetBSD 1.4              1999-05-12 [NBD]
FreeBSD 3.2             1999-05-17 [FBD]
OpenBSD 2.5             1999-05-19 [OBD]
NetBSD 1.4.1            1999-08-26 [NBD] (patch release)
FreeBSD 3.3             1999-09-17 [FBD]
OpenBSD 2.6             1999-12-01 [OBD]
FreeBSD 3.4             1999-12-20 [FBD]
BSD/OS 4.1  1999-12-xx [BSDI]
FreeBSD 4.0             2000-03-13 [FBD]
NetBSD 1.4.2            2000-03-19 [NBD] (patch release)
OpenBSD 2.7             2000-06-15 [OBD]
FreeBSD 3.5  2000-06-24 [FBD]
FreeBSD 4.1  2000-07-27 [FBD]
FreeBSD 3.5.1  2000-07-28 [FBD]
FreeBSD 4.1.1  2000-09-25 [FBD] (a network-only patch release)
FreeBSD 4.2    2000-11-21 [FBD]
NetBSD 1.4.3  2000-11-25 [NBD] (patch release)
BSD/OS 4.2  2000-11-29 [BSDI]
OpenBSD 2.8  2000-12-01 [OBD]
NetBSD 1.5              2000-12-06 [NBD]
Mac OS X 10.0           2001-03-24 [APL]
FreeBSD 4.3    2001-04-20 [FBD]
OpenBSD 2.9    2001-06-01 [OBD]
NetBSD 1.5.1  2001-07-11 [NBD] (patch release)
NetBSD 1.5.2  2001-09-13 [NBD] (patch release)
FreeBSD 4.4    2001-09-18 [FBD]
Mac OS X 10.1  2001-09-29 [APL]
OpenBSD 3.0  2001-12-01 [OBD]
FreeBSD 4.5    2002-01-29 [FBD]
BSD/OS 4.3  2002-03-14 [WRS]
OpenBSD 3.1  2002-05-19 [OBD]
FreeBSD 4.6    2002-06-15 [FBD]
NetBSD 1.5.3  2002-07-22 [NBD] (patch release)
FreeBSD 4.6.2  2002-08-15 [FBD] (patch release)
Mac OS X 10.2  2002-08-23 [APL]
NetBSD 1.6  2002-09-14 [NBD]
FreeBSD 4.7  2002-10-08 [FBD]
OpenBSD 3.2  2002-11-01 [OBD]
FreeBSD 5.0  2003-01-17 [FBD]
    FreeBSD 5.0 is a separate branch off of
    -current, similar to 3.0.
FreeBSD 4.8  2003-04-03 [FBD]
NetBSD 1.6.1  2003-04-21 [NBD] (patch release)
OpenBSD 3.3  2003-05-01 [OBD]
BSD/OS 5.0  2003-05-?? [WRS]
FreeBSD 5.1  2003-06-09 [FBD]
Mac OS X 10.3  2003-10-24 [APL]
FreeBSD 4.9  2003-10-28 [FBD]
BSD/OS 5.1 ISE  2003-10-?? [WRS] (final version)
OpenBSD 3.4  2003-11-01 [OBD]
FreeBSD 5.2  2004-01-12 [FBD]
FreeBSD 5.2.1  2004-02-22 [FBD] (patch release)
NetBSD 1.6.2  2004-03-01 [NBD] (patch release)
OpenBSD 3.5  2004-04-01 [OBD]
FreeBSD 4.10  2004-05-27 [FBD]
DragonFly 1.0  2004-07-12 [DFB]
OpenBSD 3.6  2004-10-29 [OBD]
FreeBSD 5.3  2004-11-06 [FBD]
NetBSD 2.0  2004-12-09 [NBD]
FreeBSD 4.11  2005-01-25 [FBD]
DragonFly 1.2.0  2005-04-08 [DFB]
NetBSD 2.0.2  2005-04-14 [NBD] (security/critical release)
Mac OS X 10.4  2005-04-29 [APL]
FreeBSD 5.4  2005-05-09 [FBD]
OpenBSD 3.7  2005-05-19 [OBD]
NetBSD 2.0.3  2005-10-31 [NBD] (security/critical release)
OpenBSD 3.8  2005-11-01 [OBD]
FreeBSD 6.0  2005-11-01 [FBD]
NetBSD 2.1  2005-11-02 [NBD]
NetBSD 3.0  2005-12-23 [NBD]
DragonFly 1.4.0  2006-01-08 [DFB]
OpenBSD 3.9  2006-05-01 [OBD]
FreeBSD 6.1  2006-05-08 [FBD]
FreeBSD 5.5  2006-05-25 [FBD]
NetBSD 3.0.1  2006-07-24 [NBD] (security/critical release)
DragonFly 1.6.0  2006-07-24 [DFB]
OpenBSD 4.0  2006-11-01 [OBD]
NetBSD 3.0.2  2006-11-04 [NBD] (security/critical release)
NetBSD 3.1  2006-11-04 [NBD]
FreeBSD 6.2  2007-01-15 [FBD]
DragonFly 1.8.0  2007-01-30 [DFB]
OpenBSD 4.1  2007-05-01 [OBD]
DragonFly 1.10.0 2007-08-06 [DFB]
Mac OS X 10.5  2007-10-26 [APL]
OpenBSD 4.2  2007-11-01 [OBD]
NetBSD 4.0  2007-12-19 [NBD]
FreeBSD 6.3  2008-01-18 [FBD]
DragonFly 1.12.0 2008-02-26 [DFB]
FreeBSD 7.0  2008-02-27 [FBD]
OpenBSD 4.3  2008-05-01 [OBD]
DragonFly 2.0.0  2008-07-21 [DFB]
OpenBSD 4.4  2008-11-01 [OBD]
FreeBSD 6.4  2008-11-28 [FBD]
FreeBSD 7.1  2009-01-04 [FBD]
DragonFly 2.2.0  2009-02-17 [DFB]
NetBSD 5.0  2009-04-29 [NBD]
OpenBSD 4.5  2009-05-01 [OBD]
FreeBSD 7.2  2009-05-04 [FBD]
Mac OS X 10.6  2009-06-08 [APL]
DragonFly 2.4.0  2009-09-16 [DFB]
OpenBSD 4.6  2009-10-18 [OBD]
FreeBSD 8.0  2009-11-26 [FBD]
FreeBSD 7.3  2010-03-23 [FBD]
DragonFly 2.6.0  2010-03-28 [DFB]
OpenBSD 4.7  2010-05-19 [OBD]
FreeBSD 8.1  2010-07-24 [FBD]
DragonFly 2.8.2  2010-10-30 [DFB]
OpenBSD 4.8  2010-11-01 [OBD]
NetBSD 5.1  2010-11-19 [NBD]
FreeBSD 7.4  2011-02-24 [FBD]
FreeBSD 8.2  2011-02-24 [FBD]
DragonFly 2.10.1 2011-04-26 [DFB]
OpenBSD 4.9  2011-05-01 [OBD]
OpenBSD 5.0  2011-11-01 [OBD]

Bibliography
------------------------

Leffler, Samuel J., Marshall Kirk McKusick, Michael J Karels and John
Quarterman. The Design and Implementation of the 4.3BSD UNIX Operating
System. Reading, Mass. Addison-Wesley, 1989. ISBN 0-201-06196-1

Salus, Peter H. A quarter century of UNIX. Addison-Wesley Publishing
Company, Inc., 1994. ISBN 0-201-54777-5

McKusick, Marshall Kirk, Keith Bostic, Michael J Karels, and John
Quarterman. The Design and Implementation of the 4.4BSD Operating
System. Reading, Mass. Addison-Wesley, 1996. ISBN 0-201-54979-4

McKusick, Marshall Kirk, George Neville-Neil. The Design and
Implementation of the FreeBSD Operating System.
Addison-Wesley Professional, Published: Aug 2, 2004. ISBN 0-201-70245-2

Doug McIlroy. Research Unix Reader.

Michael G. Brown. The Role of BSD in the Development of Unix.
Presented to the Tasmanian Unix Special Interest Group of the
Australian Computer Society, Hobart, August 1993.

Peter H. Salus. Unix at 25. Byte Magazine, October 1994.
URL: http://www.byte.com/art/9410/sec8/art3.htm

Andreas Klemm, Lars Köller. If you're going to San Francisco ...
Die freien BSD-Varianten von Unix. c't April 1997, page 368ff.

BSD Release Announcements collection.
URL: http://www.FreeBSD.org/releases/

BSD Hypertext Man Pages
URL: http://www.FreeBSD.org/cgi/man.cgi

UNIX history graphing project
URL: http://minnie.tuhs.org/Unix_History/index.html

UNIX history
URL: http://www.levenez.com/unix/

James Howard: The BSD Family Tree
URL: http://ezine.daemonnews.org/200104/bsd_family.html
("what are the differences between FreeBSD, NetBSD, and OpenBSD?")


Acknowledgments
---------------

Josh Gilliam for suggestions, bug fixes, and finding very old
original BSD announcements from Usenet or tapes.

Steven M. Schultz for providing 2.8BSD, 2.10BSD, 2.11BSD manual pages.

--
Copyright (c) 1997-2007 Wolfram Schneider 
URL: http://cvsweb.freebsd.org/src/share/misc/bsd-family-tree

$FreeBSD: src/share/misc/bsd-family-tree,v 1.148 2011/11/02 14:28:36 maxim Exp $

Thursday, November 03, 2011

Weird obfuscation crap in their code, please don't be clever.

Weird obfuscation crap I found in a driver. 
This is an example of what NOT TO DO. 

[jsokol@jsokol-lx test]$ cat define.c
#include <stdio.h>

#define XYZ_MASK(Register,Field) \
XYZ_##Register##_##Field##_MASK

#define XYZ_SOMEREG_SOMEFIELD_MASK 8

main()
{
int x;
x = XYZ_MASK( SOMEREG, SOMEFIELD );
printf("x = %d\n", x);
}


Why in the hell would someone dynamically rewrite #define constants?!?!?
There is a reason why we don't do that.
None of the tools could tell me what the constants were defined too.
Because I see x = XYZ_MASK( SOMEREG, SOMEFIELD );
and "SOMEFIELD" is never defined.
  Instead I need to look up XYZ_MASK, but oh wait, grep doesn't show me the whole line because the \'ed it.
only to find I need to look for XYZ_SOMEREG_SOMEFIELD_MASK.
did coding it as
XYZ_MASK( SOMEREG, SOMEFIELD );
make it easier then
XYZ_SOMEREG_SOMEFIELD_MASK
Nooo, it didn't. But some one thought he was being clever.

In professional code we don't want clever because clever make the next guys job hell.


Fwd: Holly - TCC - Embedded Linux opp!

---------- Forwarded message ----------
From: "Holly Rusin" <holly@tripleco.com>
Date: Nov 2, 2011 2:33 PM
Subject: Holly - TCC - Embedded Linux opp!
To: <john.sokol@gmail.com>

Good afternoon John,

I ran across your resume and wanted to introduce myself and my company. 

As you may see, I am a Technical recruiter, based in Austin, TX. Although we (my Company) are based in Austin we are a national firm. We have clients all across the US and Canada that range anywhere from Start-ups to Fortune 500 companies. I place engineers in the areas of Semiconductors, Aerospace, Commercial, Telecom, Networking, Government Defense... Etc.

 

Please give me a call when you have a chance. I have a job opportunity that I'd like to discuss with you.

______________

 

6 months

Carlsbad, CA

Make decision by NOV. 15th

 

Embedded Linux Host Engineer

We are looking for a highly motivated and enterprising embedded host SW (Linux based) engineers. SW engineers will be responsible primarily for SW architecture/API definition/algorithm integration and GUI integration on MxL linux platform.

Key responsibilities will include

·         host SW architecture & API implementation for end-customer use-cases

·         Writing device drivers for USB, I2C and UART communication interfaces

·         Integration of critical performance code into host application

·         Debug/optimize host software algorithms to enhance performance & reduce power consumption of the system

·         Code optimization for min. stack usage

·         Interfacing with embedded SW to ensure end-end system operation

·         Testing code to ensure it is bug free, stable & production worthy

 

 

Applicant must be comfortable with quickly learning new technologies, have strong design and problem solving skills and must be a team player.

 

Requirements:

- +10 years of Linux experience (Kernel, usermode) preferably for wireless systems

- +7 years of firmware experience writing low level device drivers for USB, UART & I2C

- Strong C/C++ skills

- Strong debugging capabilities

- Familiarity with embedded SW development environments (ThreadX, Keil etc.)

- Strong verbal and written communication skills

_____________________

 

Thanks in advance,


 
Holly Rusin
Triple Crown Consulting, LLC
Technical Recruiter
Direct: 512-623-5750

Wednesday, November 02, 2011

Excellent site of Linux resources.

http://www.makelinux.com/resources

Linux resources

• Hyperlink map of Android API classes
• Android packages
• Android internals
• Linux man pages
• Map of GNU/Linux OS internals
• Interactive map of GNU/Linux OS and FOSS
• "GNU/Linux is my home" - map of GNU/Linux system
• Interactive map of Linux kernel
• Linux inside
• Linux Technology Reference (single page view)
• Linux kernel diagram
• Linux Device Drivers, 3rd Edition
• Advanced Linux Programming
• Managing Projects with GNU make
• 1000 Hacker Tutorials 2008
• Understanding the Linux Kernel, 3rd Edition
• Linux Kernel Development, 2nd Edition
• Embedded Linux kernel and driver development
• Introduction to Linux
• Bash Guide for Beginners
• Advanced Bash-Scripting Guide
• GNU/Linux Command-Line Tools Summary
• Linux Filesystem Hierarchy
• The Linux Kernel Module Programming Guide
• The Linux System Administrator's Guide
• Linux Network Administrators Guide
• GNU/Linux advanced administration
• Autobook: GNU Autoconf, Automake, and Libtool src
• Understanding the Linux Virtual Memory Manager
Linux related products
• Linux kernel poster

Cool sound tricks. C programming one liners.

http://hackaday.com/2011/11/01/annoy-your-sound-guy-even-more/#more-60170

Tuesday, November 01, 2011

Fwd: [svlug-announce] SVLUG Nov. 2nd meeting: MapR - the next-generation Hadoop distribution that integrates with Linux



---------- Forwarded message ----------
From: Rick Moen <rick@linuxmafia.com>
Date: Tue, Nov 1, 2011 at 2:40 PM
Subject: [svlug-announce] SVLUG Nov. 2nd meeting: MapR - the next-generation Hadoop distribution that integrates with Linux
To: svlug-announce@lists.svlug.org



WHEN:

  Wednesday, Nov. 2nd, 2011
  7pm-9pm


MAIN PRESENTATION

 TOPIC:
   MapR - the next-generation Hadoop distribution that integrates with Linux

 PRESENTED BY:
   Tomer Shiran,
   Director of Product Management, MapR Technologies, Inc.

 TOPIC SUMMARY:
   The MapR Distribution (http://www.mapr.com/) for Apache's Hadoop
   (https://secure.wikimedia.org/wikipedia/en/wiki/Apache_Hadoop)
   Java-based software framework (for creating data-intensive
   distributed applications) makes Hadoop dramatically easier, more
   dependable, and faster.  In addition, unlike other distributions, it
   provides capabilities that allow users to leverage the Linux
   ecosystem.  For example, the MapR distribution includes a read/write
   storage layer with NFS access, allowing users to mount the cluster
   and use traditional Linux utilities, ranging from cp and ls to rsync
   and grep.  In this talk, we'll provide an overview of the MapR
   Distribution for Apache Hadoop and its unique capabilities, as well
   as a number of interesting use cases from MapR users.

 ABOUT THE PRESENTER:
   Tomer Shiran is currently MapR Technologies, Inc.'s Director of
   Product Management.  He's previously worked for IBM Research,
   Microsoft Corporation, HP Labs, and ePassportPhoto.com, and is a
   graduate of the Technion and CMU.


 LOCATION:

   Symantec
   VCAFE Facility
   350 Ellis Street (near E. Middlefield Road)
   Mountain View, CA 94043

   Directions on how to get there are listed at:

   http://www.svlug.org/directions/veritas.php

 We've tried our very best for these directions to be accurate.
 If you have any improvements to make, please let SVLUG's volunteers know!
 webmaster at svlug.org

POST-MEETING GATHERING:

 If you just can't get enough, a smaller group usually goes to a local
 restaurant/diner after the meeting:  Frankie, Johnnie & Luigi, Too,
 939 West El Camino Real between Shoreline and Castro, Mountain View.

We look forward to seeing you there!


_______________________________________________
svlug-announce mailing list
svlug-announce@lists.svlug.org
http://lists.svlug.org/lists/listinfo/svlug-announce

OpenBSD 5.0 Unleashed On the World

From SlashDot:

"A new version of the operating system that most of us would love to love, but probably hardly ever directly use, has been released. As scheduled, release 5.0 brings support for more hardware, network improvements, and OpenSSH 5.9. The links: changelogdownloadmain 5.0 page; and how to order your OpenBSD products!"

Monday, October 31, 2011

Upcoming Kinect Development Kit Could Change In-Store Shopping

http://www.wired.com/gadgetlab/2011/10/xbox-kinect-sdk-microsoft/


The Xbox Kinect is Microsoft’s big push into motion-controlled gaming. You don’t even need a controller to play. Just move your hands and feet with gestures that the Kinect understands, and — voilà! — you’re kicking footballs, competing in dance challenges, and shooting down bad guys.
But now, one year since its launch, the Kinect has gone way beyond video games. It could change our retail buying experiences, and reinvent the way we shop.
A commercial version of the Kinect software development kit will be made available in early 2012, Microsoft announced on Monday, opening the door for businesses to create new applications for the popular platform.
“With the Kinect for Windows commercial program, Microsoft hopes that visionaries all over the globe will continue to transform the way we do things with new Kinect-enabled tools,” a Microsoft spokesperson told Wired.com in a statement. Microsoft is currently running a pilot program with more than 200 businesses across more than 20 countries, including partners like Toyota, textbook publisher Houghton Mifflin Harcourt, and digital advertising agency Razorfish.
If all goes as planned, we could see Kinect-based interactions show up at retailers, banks, automotive dealers and other commercial environments. Razorfish, for example, is looking at building kiosks in which customers’ bodies would be scanned in order to try on digital outfits without needing to take off any clothes — so said Razorfish VP of emerging tech Jonathan Hull in an interview with Kotaku. Other applications could include simpler tasks, such as waving one’s hands to navigate an ATM’s menu screens.
Microsoft previously released a non-commercial version of its Kinect SDK in June, encouraging hackers and open software enthusiasts to create off-beat, innovative applications that take advantage of the platform’s motion-sensing capabilities. From gimmicky motion controls for banking software to NSF grant-backed medical research, the non-commercial SDK spurred creative uses of the platform beyond what Microsoft expected.
Kinect first debuted in November of 2010 to much fanfare. The system eschews the traditional button-and-joystick controller scheme, and instead lets users navigate and play games via hands-free motion capture. The system was an instant hit, setting a Guinness World Record for the fastest-selling consumer device ever in the first few days after its release. In March, Microsoft announced it had sold more than 10 million Kinect devices.
Though the hands-free controller has been a fun novelty for gaming enthusiasts, the Kinect’s utility for hardware-modding enthusiasts has been more compelling. The Xbox peripheral is packed with a bevy of sophisticated motion-capturing instruments, including an infrared light emitter to capture the surfaces of items in a room, and a depth camera that builds a 3D model of all the objects captured by infrared.
The Kinect’s relatively low $150 price tag has been even more attractive for budding DIY-ers. Willow Garage — the Silicon Valley robotics outfit known for its robot control operating system — now offers a $500 open-source robotics kit that incorporates the Kinect. The company’s previous version (also pre-Kinect) cost $280,000.
The initial forays into Kinect modification began with the homebrew modding community, spurring a wave of creative software hacks that ranged from Street Fighter games to the intricacies of “boob physics.” (Yes, really.)
Instead of taking action against the hackers or trying to bar hardware nerds from further Kinect mods, Microsoft encouraged development, promising to eventually release SDKs to new segments of would-be Kinect hackers. “Kinect represents the first incarnation of the next big thing in computing — a world where computing is becoming more natural and intuitive,” a Microsoft spokesperson told Bloomberg Businessweek in a statement.
Kinect’s natural progression is to move into the commercial realm. Much like app developers for Apple’s iOS and Google’s Android, the release of the commercial SDK allows third parties to use Microsoft’s technology in bolstering their own brands and services. Partners, however, would use Microsoft’s hardware to augment their own businesses — this rather than providing content to a centralized store. In return, Microsoft would open itself up to untold numbers of potential new hardware purchasing partners.
David Dennis, group program manager of Microsoft’s Xbox team, told Kotaku that Kinect devices could be sold in bulk numbers — the “tens of thousands” — to partner businesses.
Microsoft hasn’t released any hard details on the commercial SDK’s release date beyond “early next year.” So don’t expect to start waving on digital fashion accessories right away.

Fwd: DVR HARD DRIVES!! ORDER 1-500 PCS OF EACH



---------- Forwarded message ----------
From: CCTV Imports <sales@cctvimports.com>
Date: Mon, Oct 31, 2011 at 7:41 AM
Subject: DVR HARD DRIVES!! ORDER 1-500 PCS OF EACH
To: sokol@dnull.com


Having trouble viewing this email? Click here
HARD DRIVE
CCTV IMPORTS HARD DRIVE PROMOTION
 
The current hard drive market is very unstable.  We have seen prices already jump 300% from last week and we are told it will continue to increase.
 
We are fortunate to have an unlimited supply of Seagate 7200rpm hard drives.
 
              1-5 drives   6-50 drive  51-500 drives
500gb     $109.00       $95.00        $89.00
1tb          $159.0         $149.00       $139.00
2tb           $189.00       $175.00       $165.00 

Call now to place your order

         1-888-315-1219  

CCTV Imports | 600 Deer Cross Court East | Madisonville | LA | 70447