Random Weird Things - Part Ⅰ
Published at 2024-07-05T10:59:59+03:00; Updated at 2025-02-08
Every so often, I come across random, weird, and unexpected things on the internet. I thought it would be neat to share them here from time to time. As a start, here are ten of them.
2024-07-05 Random Weird Things - Part Ⅰ (You are currently reading this)
2025-02-08 Random Weird Things - Part Ⅱ
/\_/\ WHOA!! ( o.o ) > ^ < / - \ / \ /______\ \
Table of Contents
- ⇢ Random Weird Things - Part Ⅰ
- ⇢ ⇢ 1. `bad.horse` traceroute
- ⇢ ⇢ 2. ASCII cinema
- ⇢ ⇢ 3. Netflix's Hello World application
- ⇢ ⇢ C programming
- ⇢ ⇢ ⇢ 4. Indexing an array
- ⇢ ⇢ ⇢ 5. Variables with prefix `$`
- ⇢ ⇢ 6. Object oriented shell scripts using `ksh`
- ⇢ ⇢ 7. This works in Go
- ⇢ ⇢ 8. "I am a Teapot" HTTP response code
- ⇢ ⇢ 9. `jq` is a functional programming language
- ⇢ ⇢ 10. Regular expression to verify email addresses
1. `bad.horse` traceroute
Run traceroute to get the poem (or song).
Update: A reader hinted that by specifying `-n 60`, there will be even more output!
❯ traceroute -m 60 bad.horse traceroute to bad.horse (162.252.205.157), 60 hops max, 60 byte packets 1 _gateway (192.168.1.1) 5.237 ms 5.264 ms 6.009 ms 2 77-85-0-2.ip.btc-net.bg (77.85.0.2) 8.753 ms 7.112 ms 8.336 ms 3 212-39-69-103.ip.btc-net.bg (212.39.69.103) 9.434 ms 9.268 ms 9.986 ms 4 * * * 5 xe-1-2-0.mpr1.fra4.de.above.net (80.81.194.26) 39.812 ms 39.030 ms 39.772 ms 6 * ae12.cs1.fra6.de.eth.zayo.com (64.125.26.172) 123.576 ms * 7 * * * 8 * * * 9 ae10.cr1.lhr15.uk.eth.zayo.com (64.125.29.17) 119.097 ms 119.478 ms 120.767 ms 10 ae2.cr1.lhr11.uk.zip.zayo.com (64.125.24.140) 120.398 ms 121.147 ms 120.948 ms 11 * * * 12 ae25.mpr1.yyz1.ca.zip.zayo.com (64.125.23.117) 145.072 ms * 181.773 ms 13 ae5.mpr1.tor3.ca.zip.zayo.com (64.125.23.118) 168.239 ms 168.158 ms 168.137 ms 14 64.124.217.237.IDIA-265104-ZYO.zip.zayo.com (64.124.217.237) 168.026 ms 167.999 ms 165.451 ms 15 * * * 16 t00.toroc1.on.ca.sn11.net (162.252.204.2) 131.598 ms 131.308 ms 131.482 ms 17 bad.horse (162.252.205.130) 131.430 ms 145.914 ms 130.514 ms 18 bad.horse (162.252.205.131) 136.634 ms 145.295 ms 135.631 ms 19 bad.horse (162.252.205.132) 139.158 ms 148.363 ms 138.934 ms 20 bad.horse (162.252.205.133) 145.395 ms 148.054 ms 147.140 ms 21 he.rides.across.the.nation (162.252.205.134) 149.687 ms 147.731 ms 150.135 ms 22 the.thoroughbred.of.sin (162.252.205.135) 156.644 ms 155.155 ms 156.447 ms 23 he.got.the.application (162.252.205.136) 161.187 ms 162.318 ms 162.674 ms 24 that.you.just.sent.in (162.252.205.137) 166.763 ms 166.675 ms 164.243 ms 25 it.needs.evaluation (162.252.205.138) 172.073 ms 171.919 ms 171.390 ms 26 so.let.the.games.begin (162.252.205.139) 175.386 ms 174.180 ms 175.965 ms 27 a.heinous.crime (162.252.205.140) 180.857 ms 180.766 ms 180.192 ms 28 a.show.of.force (162.252.205.141) 187.942 ms 186.669 ms 186.986 ms 29 a.murder.would.be.nice.of.course (162.252.205.142) 191.349 ms 191.939 ms 190.740 ms 30 bad.horse (162.252.205.143) 195.425 ms 195.716 ms 196.186 ms 31 bad.horse (162.252.205.144) 199.238 ms 200.620 ms 200.318 ms 32 bad.horse (162.252.205.145) 207.554 ms 206.729 ms 205.201 ms 33 he-s.bad (162.252.205.146) 211.087 ms 211.649 ms 211.712 ms 34 the.evil.league.of.evil (162.252.205.147) 212.657 ms 216.777 ms 216.589 ms 35 is.watching.so.beware (162.252.205.148) 220.911 ms 220.326 ms 221.961 ms 36 the.grade.that.you.receive (162.252.205.149) 225.384 ms 225.696 ms 225.640 ms 37 will.be.your.last.we.swear (162.252.205.150) 232.312 ms 230.989 ms 230.919 ms 38 so.make.the.bad.horse.gleeful (162.252.205.151) 235.761 ms 235.291 ms 235.585 ms 39 or.he-ll.make.you.his.mare (162.252.205.152) 241.350 ms 239.407 ms 238.394 ms 40 o_o (162.252.205.153) 246.154 ms 247.650 ms 247.110 ms 41 you-re.saddled.up (162.252.205.154) 250.925 ms 250.401 ms 250.619 ms 42 there-s.no.recourse (162.252.205.155) 256.071 ms 251.154 ms 255.340 ms 43 it-s.hi-ho.silver (162.252.205.156) 260.152 ms 261.775 ms 261.544 ms 44 signed.bad.horse (162.252.205.157) 262.430 ms 261.410 ms 261.365 ms
2. ASCII cinema
Fancy watching Star Wars Episode IV in ASCII? Head to the ASCII cinema:
3. Netflix's Hello World application
Netflix has got the Hello World application run in production 😱
- https://www.Netflix.com/helloworld
By the time this is posted, it seems that Netflix has taken it offline... I should have created a screenshot!
C programming
4. Indexing an array
In C, you can index an array like this: `array[i]` (not surprising). But this works as well and is valid C code: `i[array]`, 🤯 It's because after the spec `A[B]` is equivalent to `*(A + B)` and the ordering doesn't matter for the `+` operator. All 3 loops are producing the same output. Would be funny to use `i[array]` in a merge request of some code base on April Fool's day!
#include <stdio.h> int main(void) { int array[5] = { 1, 2, 3, 4, 5 }; for (int i = 0; i < 5; i++) printf("%d\n", array[i]); for (int i = 0; i < 5; i++) printf("%d\n", i[array]); for (int i = 0; i < 5; i++) printf("%d\n", *(i + array)); }
5. Variables with prefix `$`
In C you can prefix variables with `$`! E.g. the following is valid C code 🫠:
#include <stdio.h> int main(void) { int $array[5] = { 1, 2, 3, 4, 5 }; for (int $i = 0; $i < 5; $i++) printf("%d\n", $array[$i]); for (int $i = 0; $i < 5; $i++) printf("%d\n", $i[$array]); for (int $i = 0; $i < 5; $i++) printf("%d\n", *($i + $array)); }
6. Object oriented shell scripts using `ksh`
Experienced software developers are aware that scripting languages like Python, Perl, Ruby, and JavaScript support object-oriented programming (OOP) concepts such as classes and inheritance. However, many might be surprised to learn that the latest version of the Korn shell (Version 93t+) also supports OOP. In ksh93, OOP is implemented using user-defined types:
#!/usr/bin/ksh93 typeset -T Point_t=( integer -h 'x coordinate' x=0 integer -h 'y coordinate' y=0 typeset -h 'point color' color="red" function getcolor { print -r ${_.color} } function setcolor { _.color=$1 } setxy() { _.x=$1; _.y=$2 } getxy() { print -r "(${_.x},${_.y})" } ) Point_t point echo "Initial coordinates are (${point.x},${point.y}). Color is ${point.color}" point.setxy 5 6 point.setcolor blue echo "New coordinates are ${point.getxy}. Color is ${point.getcolor}" exit 0
Using types to create object oriented Korn shell 93 scripts
7. This works in Go
There is no pointer arithmetic in Go like in C, but it is still possible to do some brain teasers with pointers 😧:
package main import "fmt" func main() { var i int f := func() *int { return &i } *f()++ fmt.Println(i) }
8. "I am a Teapot" HTTP response code
Defined in 1998 as one of the IETF's traditional April Fools' jokes (RFC 2324), the Hyper Text Coffee Pot Control Protocol specifies an HTTP status code that is not intended for actual HTTP server implementation. According to the RFC, this code should be returned by teapots when asked to brew coffee. This status code also serves as an Easter egg on some websites, such as Google.com's "I'm a teapot" feature. Occasionally, it is used to respond to a blocked request, even though the more appropriate response would be the 403 Forbidden status code.
9. `jq` is a functional programming language
Many know of `jq`, the handy small tool and swiss army knife for JSON parsing.
What many don't know that `jq` is actually a full blown functional programming language `jqlang`, have a look at the language description:
As a matter of fact, the language is so powerful, that there exists an implementation of `jq` in `jq` itself:
Here some snipped from `jqjq`, to get a feel of `jqlang`:
def _token: def _re($re; f): ( . as {$remain, $string_stack} | $remain | match($re; "m").string | f as $token | { result: ($token | del(.string_stack)) , remain: $remain[length:] , string_stack: ( if $token.string_stack == null then $string_stack else $token.string_stack end ) } ); if .remain == "" then empty else ( . as {$string_stack} | _re("^\\s+"; {whitespace: .}) // _re("^#[^\n]*"; {comment: .}) // _re("^\\.[_a-zA-Z][_a-zA-Z0-9]*"; {index: .[1:]}) // _re("^[_a-zA-Z][_a-zA-Z0-9]*"; {ident: .}) // _re("^@[_a-zA-Z][_a-zA-Z0-9]*"; {at_ident: .}) // _re("^\\$[_a-zA-Z][_a-zA-Z0-9]*"; {binding: .}) # 1.23, .123, 123e2, 1.23e2, 123E2, 1.23e+2, 1.23E-2 or 123 // _re("^(?:[0-9]*\\.[0-9]+|[0-9]+)(?:[eE][-\\+]?[0-9]+)?"; {number: .}) // _re("^\"(?:[^\"\\\\]|\\\\.)*?\\\\\\("; ( .[1:-2] | _unescape | {string_start: ., string_stack: ($string_stack+["\\("])} ) ) . . .
10. Regular expression to verify email addresses
This is a pretty old meme, but still worth posting here (as some may be unaware). The RFC822 Perl regex to validate email addresses is 😱:
(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t] )+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?: \r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:( ?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0 31]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\ >(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+ (?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?: (?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z |(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n) ?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\ r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n) ?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t] )*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])* )(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t] )+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*) *:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+ |\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r \n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?: \r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t >))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031 >+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\]( ?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(? :(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(? :\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(? :(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)? [ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]| \\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<> @,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|" (?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t] )*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\ ".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(? :[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[ \]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|( ?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,; :\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([ ^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\" .\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\ >\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\ [\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\ r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\] |\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \0 00-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\ .|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@, ;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(? :[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])* (?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\". \[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[ ^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\] >))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*( ?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\ ".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:( ?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[ \["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t >)*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t >)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(? :\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+| \Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?: [^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\ >]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n) ?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[" ()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n) ?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<> @,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@, ;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t] )*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\ ".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)? (?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\". \[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?: \r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[ "()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t]) *))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]) +|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\ .(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z |(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:( ?:\r\n)?[ \t])*))*)?;\s*)
I hope you had some fun. E-Mail your comments to `paul@nospam.buetow.org` :-)
other related posts are:
Source