Merge branch 'master' of woozle.org:projects/homepage
This commit is contained in:
commit
aaba43634e
|
@ -4,12 +4,13 @@ import (
|
||||||
"net"
|
"net"
|
||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
const MAGIC = "\x00\xff\xff\x00\xfe\xfe\xfe\xfe\xfd\xfd\xfd\xfd\x12\x34\x56\x78"
|
const MAGIC = "\x00\xff\xff\x00\xfe\xfe\xfe\xfe\xfd\xfd\xfd\xfd\x12\x34\x56\x78"
|
||||||
|
|
||||||
func isAlive() bool {
|
func isAlive(host string) bool {
|
||||||
conn, err := net.Dial("udp", "h.woozle.org:30919")
|
conn, err := net.Dial("udp", host)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
@ -28,24 +29,59 @@ func isAlive() bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
|
||||||
|
func waitClose(c chan<- string) {
|
||||||
|
wg.Wait()
|
||||||
|
close(c)
|
||||||
|
}
|
||||||
|
|
||||||
|
type HostEntry struct {
|
||||||
|
host string
|
||||||
|
owner string
|
||||||
|
}
|
||||||
|
|
||||||
|
var hosts = []HostEntry{
|
||||||
|
{"h.woozle.org:30919", "Ginnie"},
|
||||||
|
{"h.woozle.org:44321", "Neale"},
|
||||||
|
{"h.woozle.org:58000", "Amy"},
|
||||||
|
}
|
||||||
|
|
||||||
|
func ping(results chan<- string, e HostEntry) {
|
||||||
|
defer wg.Done()
|
||||||
|
if isAlive(e.host) {
|
||||||
|
results <- fmt.Sprintf("%s is playing at %s", e.owner, e.host)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
results := make(chan string, 5)
|
||||||
|
|
||||||
|
for _, host := range hosts {
|
||||||
|
wg.Add(1)
|
||||||
|
go ping(results, host)
|
||||||
|
}
|
||||||
|
go waitClose(results)
|
||||||
|
|
||||||
fmt.Println("Content-type: text/html")
|
fmt.Println("Content-type: text/html")
|
||||||
fmt.Println("")
|
fmt.Println("")
|
||||||
fmt.Println("<!DOCTYPE html>")
|
fmt.Println("<!DOCTYPE html>")
|
||||||
fmt.Println("<html>")
|
fmt.Println("<html>")
|
||||||
fmt.Println("<head>")
|
fmt.Println("<head>")
|
||||||
fmt.Println("<meta name=\"viewport\" content=\"width=device-width\">")
|
fmt.Println("<meta name=\"viewport\" content=\"width=device-width\">")
|
||||||
fmt.Println("<style type=\"text/css\">#a{font-size: 500%; text-align: center; background: silver;}</style>")
|
fmt.Println("<style type=\"text/css\">#a{font-size: 120%; background: silver;}</style>")
|
||||||
fmt.Println("<title>Is Ginnie playing Minecraft PE?</title></head>")
|
fmt.Println("<title>Minecraft PE ping</title></head>")
|
||||||
fmt.Println("<body>")
|
fmt.Println("<body>")
|
||||||
fmt.Println("<h1>Is Ginnie playing Minecraft PE?</h1>")
|
fmt.Println("<h1>Are The Picketts playing Minecraft PE?</h1>")
|
||||||
fmt.Println("<p id=\"a\">")
|
fmt.Println("<ul id=\"a\">")
|
||||||
if isAlive() {
|
count := 0
|
||||||
fmt.Println("yes")
|
for msg := range results {
|
||||||
} else {
|
fmt.Printf("<li>%s</li>\n", msg)
|
||||||
fmt.Println("no")
|
count += 1
|
||||||
|
}
|
||||||
|
fmt.Println("</ul>")
|
||||||
|
if count == 0 {
|
||||||
|
fmt.Println("<p>Sorry, looks like nobody's playing right now.</p>")
|
||||||
}
|
}
|
||||||
fmt.Println("</p>")
|
|
||||||
fmt.Println("<p>Use the external server address <code>h.woozle.org</code>, port <code>30919</code> to join in.</p>")
|
|
||||||
fmt.Println("</body></html>")
|
fmt.Println("</body></html>")
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,62 @@ All bets are for $1.
|
||||||
Neale's prediction is the one stated.
|
Neale's prediction is the one stated.
|
||||||
|
|
||||||
Los Angeles Population (Blake)
|
Los Angeles Population (Blake)
|
||||||
------------------------------
|
==============================
|
||||||
|
|
||||||
On Feb 24, 2029, the metropolitan area commonly known as "Los Angeles"
|
On Feb 24, 2029, the metropolitan area commonly known as "Los Angeles"
|
||||||
will have, at most recent measure, double-digit population decrease.
|
will have, at most recent measure, double-digit population decrease.
|
||||||
|
|
||||||
|
|
||||||
|
Neale's Rationale
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
LA uses a ton of fresh water, brought in from all over the place.
|
||||||
|
As droughts worsen, there will be increasingly large fights over water.
|
||||||
|
Regardless of the political outcome,
|
||||||
|
places closer to fresh water will tend to keep that water.
|
||||||
|
LA is not close to fresh water.
|
||||||
|
Las Vegas is going to have the same problem,
|
||||||
|
but predicting the collapse of Las Vegas didn't seem as challenging.
|
||||||
|
|
||||||
|
------
|
||||||
|
|
||||||
|
This Page (Nemo Thorx)
|
||||||
|
======================
|
||||||
|
|
||||||
|
|
||||||
|
By 7 December, 2028, Neale will have updated this web page
|
||||||
|
within the last 12 months.
|
||||||
|
|
||||||
|
|
||||||
|
Neale's Rationale
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
I actually think Nemo's right,
|
||||||
|
but this was such an amusing bet,
|
||||||
|
I couldn't turn it down.
|
||||||
|
|
||||||
|
------
|
||||||
|
|
||||||
|
DC Power (Nobody yet!)
|
||||||
|
======================
|
||||||
|
|
||||||
|
By 2030, over ⅓ of US residences currently being built will be wired with a DC power bus.
|
||||||
|
|
||||||
|
|
||||||
|
Neale's Rationale
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
When I counted in 2014, we had only 5 electrical devices
|
||||||
|
that used Alternating Current.
|
||||||
|
Everything else ran off a "wall wart":
|
||||||
|
an AC to DC transformer.
|
||||||
|
|
||||||
|
In addition to DC being tremendously safer
|
||||||
|
(it won't stop Junior's heart when he sticks a fork in a USB port),
|
||||||
|
it's also potentially more efficient to have a single transformer for the entire house.
|
||||||
|
As more houses move to solar power with battery storage,
|
||||||
|
the conversion from DC batteries to AC wall power,
|
||||||
|
just to be converted again to DC,
|
||||||
|
will be a tantalizing inefficiency to conquer.
|
||||||
|
And with the introduction in 2015 of USB delivering up to 100W,
|
||||||
|
there will even be a standard to use.
|
||||||
|
|
|
@ -42,14 +42,15 @@ At work, I use an Intel NUC.
|
||||||
Software
|
Software
|
||||||
--------
|
--------
|
||||||
|
|
||||||
I recently switched to Xubuntu from Arch Linux.
|
I run Arch Linux, with a shell script PID 1 that I maintain because I enjoy tinkering with early userspace.
|
||||||
I'm not sure I'll stay here, but I got tired of maintaining my one-off
|
It uses runit from busybox to manage starting and stopping daemons.
|
||||||
/sbin/init that uses runit.
|
Runit is a lot like systemd or upstart at core: daemons don't do the double-fork trick, and log to stdout.
|
||||||
Linux distributions are all heading toward systemd,
|
|
||||||
which I strongly dislike. But I figure it's time to catch up
|
|
||||||
and abandon understanding how the computer boots.
|
|
||||||
|
|
||||||
On the desktop, I run Google Chrome, xterm, and acme from plan9port.
|
On the desktop, I run Google Chrome, xterm, and acme from plan9port.
|
||||||
|
My window manager varies a lot.
|
||||||
|
Most times it's Openbox plus tint2, but sometimes I go back to 9wm (which I maintain).
|
||||||
|
I'm starting to make overtures at Wayland.
|
||||||
|
|
||||||
Occasionally I kick up inkscape or gimp, and mixxx for my DJ work.
|
Occasionally I kick up inkscape or gimp, and mixxx for my DJ work.
|
||||||
Most of my non-work computer use is through Chrome, which ties me strongly
|
Most of my non-work computer use is through Chrome, which ties me strongly
|
||||||
to Linux, for better or worse.
|
to Linux, for better or worse.
|
||||||
|
@ -65,14 +66,17 @@ All my home printing is through Google Cloud Print.
|
||||||
What would be your dream setup?
|
What would be your dream setup?
|
||||||
-------------------------------
|
-------------------------------
|
||||||
|
|
||||||
A Chromebook that had Acme and my development tools.
|
I'm actually not too far away right now.
|
||||||
I really like how my wife's Chromebook updates itself,
|
I like working in the cloud, and for my development stuff,
|
||||||
and how it doesn't need dozens of mystifying apps in the default menu.
|
acme is pretty great.
|
||||||
|
|
||||||
Some day I may figure out how to get Chrome to expose its window manager,
|
I spend a lot of time fretting about window managers.
|
||||||
and then I'll probably abandon all of XFCE4,
|
Hopefully I can move to Wayland soon, and port 9wm to it.
|
||||||
since I don't really use it for anything other than kicking up Chrome
|
Or maybe I can get Chrome to expose its window manager.
|
||||||
and acme.
|
|
||||||
|
I kind of wish I didn't need a gazillion packages in order to run my 3 main programs
|
||||||
|
(chrome, acme, and xterm).
|
||||||
|
But I don't know how I can fix that, and I'm not sure I really even want to.
|
||||||
|
|
||||||
I would also like to do away with the FitPC print server.
|
I would also like to do away with the FitPC print server.
|
||||||
I'd love to be able to buy a little box that will hop on our wireless network
|
I'd love to be able to buy a little box that will hop on our wireless network
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
Title: xss: X Screensaver Construction Kit
|
Title: xss: X Screensaver Construction Kit
|
||||||
Author: Neale Pickett <neale@woozle.org>
|
Author: Neale Pickett <neale@woozle.org>
|
||||||
|
|
||||||
[xss](http://woozle.org/~neale/src/xss) is a suite of X screensaver
|
[xss](http://woozle.org/neale/g.cgi/x11/xss) is a suite of X screensaver
|
||||||
utilities. You can use shell scripts to glue the tools together to
|
utilities. You can use shell scripts to glue the tools together to
|
||||||
build your own screen saver and/or locker. You can use any
|
build your own screen saver and/or locker. You can use any
|
||||||
`xscreensaver` hack instead of the built-in `magic` hack, or you can use
|
`xscreensaver` hack instead of the built-in `magic` hack, or you can use
|
||||||
|
@ -86,9 +86,9 @@ won't lock if the cursor's at the top of the screen.
|
||||||
Download
|
Download
|
||||||
--------
|
--------
|
||||||
|
|
||||||
You can [browse the source](http://woozle.org/~neale/g.cgi/xss),
|
You can [browse the source](http://woozle.org/neale/g.cgi/x11/xss),
|
||||||
download a [tarball of the latest
|
download a [tarball of the latest
|
||||||
commit](http://woozle.org/~neale/g.cgi/xss/snapshot/xss-master.tar.gz), or clone the
|
commit](http://woozle.org/neale/g.cgi/x11/xss/snapshot/xss-master.tar.gz), or clone the
|
||||||
git repository:
|
git repository:
|
||||||
|
|
||||||
git clone http://woozle.org/~neale/projects/xss
|
git clone http://woozle.org/~neale/projects/xss
|
||||||
|
|
Loading…
Reference in New Issue