reid@glacier.ARPA (Brian Reid) (03/08/86)
I'm tired of speculation about how many people read USENET, and how big the audiences are. Here is a program that does a pretty good job of determining that information. Please install this program on your site, and run it with the -m option that will mail the results back to glacier. I will tally and total the results and post them. We've been running this program at about 20 sites in the San Francisco area for 6 months now, and the results are remarkably counterintuitive. This shell script is named "arbitron". Edit the "configuration information" to work at your site, then type arbitron -m netsurvey@glacier.ARPA to mail the results to me. If you want to keep a copy of the results, type arbitron -m "netsurvey@glacier myname" where "myname" is your login name. On Glacier, which is a Vax 750 with 250 user accounts, this program takes about 5 minutes to run on a lightly-loaded system. #! /bin/sh # arbitron -- this program produces rating sweeps for USENET. # # Usage: arbitron > filename for local data # arbitron -p net.foo to post to USENET # arbitron -m person to mail results to an accumulator # # Run "arbitron -p" at the end of each month, which will post your site's # arbitron report. # To participate in the international monthly ratings sweeps, # run "arbitron -m net-survey@glacier" every month. I combine the results # and post the information to net.news. # # The names of users reading individual groups are not posted to the network, # only the summary counts. Whether or not somebody reads a group is private # information. # # By Brian Reid, Stanford. # v1.2 September 18, 1985 # v1.3 March 8, 1986 # # copied to a certain extent from the "subscribers" # script posted by Blonder, McCreery, and Herron. The awk script to format # the report was especially stolen from them. ############################################################################ # Configuration information: tmpdir=/tmp news=/usr/lib/news # For uucp, try {sun, pyramid, decwrl, hplabs, bellcore}!glacier summarypath="net-survey@glacier.ARPA" hostname=`hostname` PATH=$news:/usr/local/bin:/usr/ucb:/usr/bin:/bin ############################################################################ export PATH # --------------------------------------------------------------------------- trap "rm -f $tmpdir/arb.sel.$$ $tmpdir/arb.fmt.$$ $tmpdir/arb.tmp.$$" 0 1 2 15 opt1=${1-0} case $opt1 in -p) opt2=${2-ba.news.ratings};; -m) opt2=${2-netsurvey@glacier};; esac set `date` dat="$2 $6" moption=0 case $opt1 in -p) destination="$news/inews -t Monthly arbitron ratings for $hostname ($dat) -n $opt2" poption=1;; -m) destination="mail $opt2" moption=1; poption=1;; *) destination="cat" poption=0 esac ################################ # Here are several expressions, each of which figures out approximately how # many people use this machine. Comment out all but 1 of them; pick the one # you like best ########## fast but usually returns too big a number lowUID=5 highUID=999 nusers=`awk -F: "BEGIN {N=0}\\$3>=$lowUID && \\$3<=$highUID{N=N+1}END{print N}" </etc/passwd` ########## slow but accurate if /usr/adm/wtmp has enough data ## wc is a Berkeley-ism, I think. We just want to count the lines in the ## standard output of sort -u # set `last | colrm 9 | sort -u | wc` # nusers=$1 ################################ cat > $tmpdir/arb.sel.$$ << 'CAT' /^net\..*: *[0-9].*$/ { nn=split($0,n,":"); print n[1], n[2] } /^mod\..*: *[0-9].*$/ { nn=split($0,n,":"); print n[1], n[2] } NF == 1 && $1 ~ /^[a-z]*$/{ print $1 } CAT sed -e "s/POPTION/$poption/" -e "s/MOPTION/$moption/" -e "s/NUSERS/$nusers/" -e "s/HOSTNAME/$hostname/" > $tmpdir/arb.fmt.$$ << 'DOG' # makereport -- utility for "arbitron". Shamelessly copied from the # similar script distributed with "subscribers.sh" by Blonder, McCreery, and # Herron. # BEGIN { rdrcount = 0 ; reader = "" ; grpcount = 0 ; realusers = 0} NF == 4 { # 4 fields means it is a /usr/lib/news/active entry grpcount++ grpname[grpcount] = $1 grpnumber[$1] = grpcount grplast[grpcount] = $2 grpfirst[grpcount] = $3 grpcounts[grpcount] = 0 grpreaders[grpcount] = "" } # 1 field means it's a user name NF == 1 { rdrcount++; rdrname[rdrcount] = $1; rdrnumber[$1] = rdrcount reader = $1} # 2 fields means it's a .newsrc line NF == 2 { gnum = grpnumber[$1] n1 = split($2, n2, "-") n3 = split(n2[n1], n4, ",") lastread = n4[n3] if (lastread >= grpfirst[gnum]) { grpcounts[gnum]++ grpreaders[gnum] = (grpreaders[gnum] " " reader) if (realuser[rdrcount] == 0) { realuser[rdrcount]=1 realusers++ } } } END {bigblanks = " " printf("9999 Host\t\t%s\n","HOSTNAME") printf("9998 Users\t\t%d\n",NUSERS) printf("9997 NetReaders\t%d\n",realusers) if (0 == MOPTION) printf("9996 \n9995 rdrs rating share traffic M/R newsgroup\n") for (i=0; i < grpcount; i++) { if (grpcounts[i] > 0) { rating = (100*grpcounts[i])/NUSERS share = (100*grpcounts[i])/realusers traffic = grplast[i]-grpfirst[i] if (grpcounts[i] != 0) ratio = traffic/grpcounts[i] else ratio = 0 if (0 == POPTION) { obuf = sprintf("%4d %5d %s", grpcounts[i], traffic, grpname[i]) nf = split(grpreaders[i], rdrs, " ") obuf = substr ((obuf bigblanks),1,35) width = 35 for (j=1; j <= nf; j++) { nwidth = length(rdrs[j]) obuf = (obuf rdrs[j] " ") width = length(obuf) } } else if (0 == MOPTION) { obuf = sprintf("%4d %5.1f%% %4d%% %5d %5.1f %s", grpcounts[i], rating, share, traffic, ratio, grpname[i]) } else { obuf = sprintf("%d %s\n",grpcounts[i], grpname[i]) } printf("%s\n",obuf) } } } DOG awk -F: '{printf "echo %s\negrep : %s/.newsrc\n",$1,$6}' \ </etc/passwd | sh 2>/dev/null | awk -f $tmpdir/arb.sel.$$ >$tmpdir/arb.tmp.$$ egrep '^net\.|^mod\.' $news/active | sort | \ awk -f $tmpdir/arb.fmt.$$ - $tmpdir/arb.tmp.$$ | sort -nr | \ sed -e 's/^999[0-9] //' | $destination -- Brian Reid decwrl!glacier!reid Stanford reid@SU-Glacier.ARPA
reid@glacier.ARPA (Brian Reid) (03/10/86)
A couple of days ago I posted a rating-sweep program and asked people to run it with the -m option, which will mail its output to a collector I set up on glacier. I've gotten 11 responses so far, which while not earth-shaking, provide a fascinating look at what's going on. Here's the output so far. (The file from one place (BU) was empty--somehow the program didn't work there). The definition that this software uses of "X reads group Y" is that X has read at least one of the messages posted to this group since the last expiration was run, or else that there has been no traffic. You will see some names from the past, such as "mod.ber", in here. This is roughly a 0.4 % sample of net sites. If you don't like these numbers, then contribute to them by mailing in your site's arbitron results. Summary: 1701 users at 10 sites, 15.99% of them (272) netreaders. # of % of all % of news readers users users 58 3.41 21.32 mod.movies 50 2.94 18.38 net.announce 47 2.76 17.28 net.jokes 47 2.76 17.28 net.general 47 2.76 17.28 mod.sources 43 2.53 15.81 net.sources 40 2.35 14.71 mod.unix 33 1.94 12.13 mod.std 32 1.88 11.76 net.lang.c++ 32 1.88 11.76 net.audio 32 1.88 11.76 mod.os.unix 31 1.82 11.40 net.singles 30 1.76 11.03 mod.newprod 29 1.70 10.66 net.arch 29 1.70 10.66 mod.recipes 28 1.65 10.29 net.jobs 27 1.59 9.93 net.usenix 27 1.59 9.93 net.sources.bugs 26 1.53 9.56 net.rec.nude 26 1.53 9.56 mod.test 25 1.47 9.19 net.sources.mac 25 1.47 9.19 net.micro.mac 25 1.47 9.19 net.announce.newusers 25 1.47 9.19 mod.os 25 1.47 9.19 mod.general 24 1.41 8.82 net.movies 24 1.41 8.82 net.cooks 24 1.41 8.82 net.consumers 23 1.35 8.46 net.sources.games 23 1.35 8.46 net.rumor 23 1.35 8.46 net.news 23 1.35 8.46 net.med 23 1.35 8.46 net.jokes.d 22 1.29 8.09 net.women 22 1.29 8.09 net.emacs 22 1.29 8.09 net.bugs 22 1.29 8.09 net.bicycle 22 1.29 8.09 net.announce.arpa-internet 21 1.23 7.72 net.unix 21 1.23 7.72 net.sci 21 1.23 7.72 net.rec 21 1.23 7.72 net.astro.expert 20 1.18 7.35 net.travel 20 1.18 7.35 net.research 20 1.18 7.35 net.music.classical 19 1.12 6.99 net.ai 19 1.12 6.99 mod.std.mumps 19 1.12 6.99 mod.std.c 19 1.12 6.99 mod.human-nets 19 1.12 6.99 mod.ber 18 1.06 6.62 net.taxes 18 1.06 6.62 net.social 18 1.06 6.62 net.lang 18 1.06 6.62 net.astro 18 1.06 6.62 mod.singles 18 1.06 6.62 mod.protocols.kermit 18 1.06 6.62 mod.politics 18 1.06 6.62 mod.compilers 17 1.00 6.25 net.news.stargate 17 1.00 6.25 net.news.group 17 1.00 6.25 net.net-people 17 1.00 6.25 net.lsi 17 1.00 6.25 net.lan 17 1.00 6.25 net.invest 17 1.00 6.25 net.auto.tech 17 1.00 6.25 net.auto 17 1.00 6.25 mod.computers.macintosh 17 1.00 6.25 mod.computers.laser-printers 16 0.94 5.88 net.text 16 0.94 5.88 net.rec.ski 16 0.94 5.88 net.music.folk 16 0.94 5.88 net.micro.pc 16 0.94 5.88 net.micro 16 0.94 5.88 net.games.hack 16 0.94 5.88 net.followup 16 0.94 5.88 net.books 16 0.94 5.88 net.bio 15 0.88 5.51 net.wines 15 0.88 5.51 net.wanted 15 0.88 5.51 net.unix-wizards 15 0.88 5.51 net.puzzle 15 0.88 5.51 net.music 15 0.88 5.51 net.math 15 0.88 5.51 net.mail 15 0.88 5.51 net.lang.c 15 0.88 5.51 net.graphics 15 0.88 5.51 net.games 15 0.88 5.51 net.bugs.4bsd 15 0.88 5.51 mod.protocols 15 0.88 5.51 mod.graphics 15 0.88 5.51 mod.computers.sun 15 0.88 5.51 mod.ai 14 0.82 5.15 net.tv 14 0.82 5.15 net.rec.photo 14 0.82 5.15 net.misc 14 0.82 5.15 net.legal 14 0.82 5.15 net.columbia 14 0.82 5.15 mod.techreports 14 0.82 5.15 mod.music 14 0.82 5.15 mod.computers.workstations 13 0.76 4.78 net.space 13 0.76 4.78 net.physics 13 0.76 4.78 net.music.gdead 13 0.76 4.78 net.mag 13 0.76 4.78 net.lang.mod2 13 0.76 4.78 net.internat 13 0.76 4.78 net.games.video 13 0.76 4.78 net.dcom 13 0.76 4.78 net.bugs.v7 13 0.76 4.78 mod.telecom 12 0.71 4.41 net.religion.jewish 12 0.71 4.41 net.periphs 12 0.71 4.41 net.nlang.india 12 0.71 4.41 net.news.sa 12 0.71 4.41 net.math.symbolic 12 0.71 4.41 net.mail.headers 12 0.71 4.41 net.lang.prolog 12 0.71 4.41 net.cse 12 0.71 4.41 net.crypt 12 0.71 4.41 net.challenger 12 0.71 4.41 mod.computers.ibm-pc 11 0.65 4.04 net.wanted.sources 11 0.65 4.04 net.veg 11 0.65 4.04 net.startrek 11 0.65 4.04 net.sf-lovers 11 0.65 4.04 net.rec.wood 11 0.65 4.04 net.os 11 0.65 4.04 net.nlang 11 0.65 4.04 net.news.b 11 0.65 4.04 net.micro.68k 11 0.65 4.04 net.kids 11 0.65 4.04 net.games.chess 11 0.65 4.04 net.database 11 0.65 4.04 net.comics 11 0.65 4.04 net.college 11 0.65 4.04 net.cog-eng 11 0.65 4.04 mod.protocols.tcp-ip 11 0.65 4.04 mod.newslists 10 0.59 3.68 net.wobegon 10 0.59 3.68 net.religion 10 0.59 3.68 net.news.adm 10 0.59 3.68 net.motss 10 0.59 3.68 net.micro.amiga 10 0.59 3.68 net.ham-radio 10 0.59 3.68 net.bugs.uucp 9 0.53 3.31 net.tv.drwho 9 0.53 3.31 net.micro.atari 9 0.53 3.31 net.lang.lisp 9 0.53 3.31 net.decus 9 0.53 3.31 mod.protocols.appletalk 9 0.53 3.31 mod.motss 9 0.53 3.31 mod.map 8 0.47 2.94 net.video 8 0.47 2.94 net.sport.baseball 8 0.47 2.94 net.sport 8 0.47 2.94 net.sources.d 8 0.47 2.94 net.pets 8 0.47 2.94 net.news.notes 8 0.47 2.94 net.news.newsite 8 0.47 2.94 net.micro.16k 8 0.47 2.94 net.lang.apl 8 0.47 2.94 net.ham-radio.packet 8 0.47 2.94 net.games.board 8 0.47 2.94 net.aviation 8 0.47 2.94 net.analog 8 0.47 2.94 mod.std.unix 8 0.47 2.94 mod.computers.pyramid 7 0.41 2.57 net.religion.christian 7 0.41 2.57 net.politics 7 0.41 2.57 net.origins 7 0.41 2.57 net.news.config 7 0.41 2.57 net.micro.hp 7 0.41 2.57 net.micro.att 7 0.41 2.57 net.micro.atari16 7 0.41 2.57 net.info-terms 7 0.41 2.57 net.flame 7 0.41 2.57 mod.computers.sequent 6 0.35 2.21 net.philosophy 6 0.35 2.21 net.nlang.africa 6 0.35 2.21 net.music.synth 6 0.35 2.21 net.lang.st80 6 0.35 2.21 net.lang.forth 6 0.35 2.21 net.lang.f77 6 0.35 2.21 net.lang.ada 6 0.35 2.21 net.games.trivia 6 0.35 2.21 net.games.frp 6 0.35 2.21 net.abortion 6 0.35 2.21 mod.vlsi 6 0.35 2.21 mod.risks 6 0.35 2.21 mod.legal 6 0.35 2.21 mod.computers.gould 6 0.35 2.21 mod.computers.apollo 5 0.29 1.84 net.roots 5 0.29 1.84 net.poems 5 0.29 1.84 net.math.stat 5 0.29 1.84 net.lang.pascal 5 0.29 1.84 net.garden 5 0.29 1.84 net.games.rogue 5 0.29 1.84 net.games.emp 5 0.29 1.84 net.cycle 5 0.29 1.84 net.bio.slime 5 0.29 1.84 mod.os.os9 4 0.24 1.47 net.railroad 4 0.24 1.47 net.micro.trs-80 4 0.24 1.47 net.micro.cpm 4 0.24 1.47 net.micro.atari8 4 0.24 1.47 net.micro.apple 4 0.24 1.47 net.eunice 4 0.24 1.47 net.bugs.usg 4 0.24 1.47 mod.rec.guns 4 0.24 1.47 mod.politics.arms-d 4 0.24 1.47 mod.computers.vax 3 0.18 1.10 net.tv.soaps 3 0.18 1.10 net.test 3 0.18 1.10 net.suicide 3 0.18 1.10 net.sport.hockey 3 0.18 1.10 net.sport.football 3 0.18 1.10 net.rec.scuba 3 0.18 1.10 net.rec.birds 3 0.18 1.10 net.movies.sw 3 0.18 1.10 net.micro.ti 3 0.18 1.10 net.games.pbm 3 0.18 1.10 net.games.go 3 0.18 1.10 net.bugs.2bsd 3 0.18 1.10 mod.map.uucp 3 0.18 1.10 mod.computers.ridge 2 0.12 0.74 net.sport.hoops 2 0.12 0.74 net.rec.bridge 2 0.12 0.74 net.rec.boat 2 0.12 0.74 net.politics.theory 2 0.12 0.74 net.micro.cbm -- Brian Reid decwrl!glacier!reid Stanford reid@SU-Glacier.ARPA