=== peter is now known as Guest8144 | ||
sirajperson | hey all | 03:15 |
---|---|---|
sirajperson | I have been google'n crazy to try and get VT100 to work right from the vga of my server install | 03:15 |
sirajperson | I have an script that I want to use shades of colors to display information, but cannot get the monitor to use a VT100 terminal | 03:16 |
sirajperson | anyone have any idea how to get VT100 without installing X? | 03:16 |
=== sirajperson_ is now known as sirajperson | ||
=== freeflying_away is now known as freeflying | ||
stlu | Hi Again | 05:11 |
stlu | Re my DNS project: I have left the home router out of the picture, because I really don't know whats under the hood, and it doesnt allow user-configuration of its DNS service. | 05:12 |
stlu | So heres what I have: | 05:12 |
stlu | domain is "myroom" | 05:13 |
stlu | I have a desktop unit "dell.myroom" | 05:14 |
stlu | 3 laptops which I have now separated into 3 VLANs | 05:14 |
stlu | ...instead of 1. | 05:14 |
stlu | dns.vbox1.myroom ubuntu1.vbox1.myroom | 05:15 |
stlu | dns.vbox2.myroom ubuntu2.vbox1.myroom | 05:15 |
stlu | dns.vbox3.myroom ubuntu1.vbox3.myroom | 05:16 |
stlu | And they are bridged networking. | 05:16 |
stlu | Question: should I make records in "dell.myroom" for "vbox_.myroom" pointing down to "dns.vbox_.myroom"? | 05:17 |
stlu | ...oh, the virtual DNSs are also routers/gateways for the vlan | 05:18 |
stlu | so for vbox2 it would have a WAN of 172.24.100.202 <-- dns.vbox2.myroom --> 192.168.102.1 (the VLAN) | 05:20 |
stlu | Therefore, I am thinking I should add to dell.myroom's DNS database: vbox1 as 172.24.100.201, vbox2 as 172.24.100.202, vbox3 as 172.24.100.203 | 05:23 |
stlu | ...And that's with my intention to let them share record information. | 05:23 |
stlu | ... to clarify the question: is the 4th DNS server nessesary for the transfer of records? | 05:25 |
yolanda | jamespage, zul : https://code.launchpad.net/~yolanda.robla/cinder/autopkgtests/+merge/183394 | 08:18 |
jamespage | yolanda, merged - thanks! | 08:23 |
yolanda | np | 08:23 |
jamespage | zul, adam_g: https://code.launchpad.net/~james-page/horizon/refresh-static-assets-fix-type/+merge/183400 | 09:10 |
zul | jamespage: North America is on vacation today but I +1ed the horizon merge | 11:09 |
jamespage | zul, ta | 11:09 |
jamespage | zul, thanks | 11:09 |
Katafalkas | hey, why locale is broken on every image i try ? i start a fresh ubuntu1204 64bit image on amazon - on apt-get upgrade - locale is broken. I do exactly the same on DigitalOcean - again. fresh image - locale is broken. | 11:18 |
=== freeflying is now known as freeflying_away | ||
=== freeflying_away is now known as freeflying | ||
stlu | hey, sorry to repeat myself - if DNS servers want to exchange records, do they need the IP of each other, the URL, either, or both? | 11:36 |
stlu | And, am I doint | 11:36 |
stlu | am I thinking the wrong way if I feel the need to have another DNS server to help the other DNS servers to find each other by URL? | 11:37 |
stlu | * | 11:37 |
andol | stlu: Not sure I fully understand the question, but assuming we are talking about zonetransfers I'd say the most common scenarion is them knowing each others ip addresses | 11:39 |
stlu | andol: ok thanks. So then, through 3 different VLANs, all I have to do is make sure routing is set up, and each DNS server will just need the IP of the other two. | 11:49 |
stlu | right? | 11:49 |
stlu | I keep getting tripped up thinking that the heirarchy of URLs must be strictly followed by the DNS server. | 11:50 |
stlu | but like, technically, this means I could have each DNS server with a master database for one other VLAN, or even have a tossup where each DNS server has records for any random set of IPS... | 11:52 |
stlu | Ok then, so if the VLAN has a domain vbox3.myroom, and addresses x.vbox3.myroom, what conventionally does one do with that URL? should it point to something or nothing? | 11:54 |
andol | stlu: Well, exactly what info is needed where might depend of what dns server you are running, and in what way you want the update chain to happen | 11:54 |
andol | stlu: Unless you have any other preferenses, just take a look at BIND, and some of the examples in its configuration, and see whatever works for you. | 11:55 |
stlu | andol: I have 3 VLANs side-by-side, under a LAN. I don't care how they transfer information, I just want to learn the conventions. | 11:55 |
stlu | but I want one DNS for each VLAN, since the VLAN is inside virtualBox on a laptop, and not all 3 laptops will be on all the tim. | 11:57 |
stlu | *time | 11:57 |
RoyK | why not one or two common DNS servers? | 11:58 |
* RoyK works at a college with 20+ VLANs and two DNS servers | 11:59 | |
stlu | I may not be using 'VLAN' as it is supposed to be used, but what I have is a couple VMs running under virtualbox, in a laptop. | 12:00 |
RoyK | you should be able to route between them nevertheless | 12:01 |
stlu | If I do a common DNS server, it would have to be on hardware that is on all the time... | 12:01 |
RoyK | or run dns server on your laptop :P | 12:01 |
stlu | RoyK: and when that laptop is off, the other two laptops will have no DNS! | 12:02 |
RoyK | stlu: just trying to be a bit practical here :) | 12:03 |
RoyK | stlu: do you have an official domain? if so, the isp should give dns as a service free of charge | 12:03 |
RoyK | or whoever sold you the domain | 12:03 |
stlu | no, I'm extremely minimalistic here, my domain is .myroom, and the laptops are in my room. | 12:04 |
stlu | there is home ISP service, but it isn't relevant for my learning project - I don't even know if the home modem/router would share its DNS information for the wifi lan. | 12:05 |
RoyK | stlu: hm... can you afford a raspberry pi? | 12:05 |
stlu | RoyK: yes, I could. | 12:06 |
RoyK | that'd be a neat "dedicated server" ;) | 12:06 |
stlu | That's a great idea. Then it would be on 24/7, and any of the VMs could reach it, regardless of the other laptops being on/off. | 12:07 |
RoyK | stlu: mhm - doesn't cost much either | 12:08 |
stlu | to the next question: what would be the convention if I had pc1.vbox3.myroom, pc2.vbox3.myroom, pc3.vbox3.myroom, all together, but I tried to connect to vbox3.myroom itself, what should that point to? | 12:11 |
RoyK | what do you mean"point to"? | 12:12 |
RoyK | the easiest would be to run virtualbox in bridged mode and put them all on the same IP network | 12:12 |
stlu | could be many things, say I open a web browser, or "ping" it, or email stlu@vbox3.myroom, or ssh, or whatever. | 12:12 |
RoyK | stlu: are you using rfc1918 addresses on your laptop? | 12:13 |
RoyK | stlu: just run ifconfig to check | 12:13 |
stlu | rfc1918? | 12:14 |
RoyK | just pastebin ifconfig output | 12:14 |
stlu | umm, I'll explain again the network diagram: | 12:14 |
RoyK | http://en.wikipedia.org/wiki/RFC1918#Private_IPv4_address_spaces | 12:14 |
stlu | ah yes, absolutely | 12:15 |
RoyK | and all clients on the same IP network? | 12:15 |
stlu | all laptops are on the 192.168.2.0/24 network for my wireless home internet. | 12:15 |
RoyK | then they should be able to ping oneanother without issues | 12:16 |
RoyK | same applies to any VMs on those | 12:16 |
stlu | each laptop has a virtualbox internal-only network 192.168.{101,102,103}.0/24 and pc1 is the gateway. | 12:16 |
RoyK | if you're not using bridged mode networking, the VMs won't be reachable | 12:16 |
RoyK | ic | 12:16 |
RoyK | better make the pi the gateway when you get it | 12:17 |
RoyK | eh | 12:17 |
RoyK | no | 12:17 |
RoyK | sorry | 12:17 |
stlu | but the DNS server doesn't necessarily *have to* have a record for the domain vbox3.myroom, but I could make it anything or nothing. what is the convention? | 12:17 |
stlu | Sorry I can't seem to phrase this question in a way that makes it obviously simple as it is. | 12:17 |
stlu | I have *no* issues with pinging the systems, I just wonder about the convention for the over-riding domain that all the VMs are part of. | 12:18 |
stlu | pc1.vbox3.myroom = VM PC#1 | 12:19 |
stlu | pc2.vbox3.myroom = VM PC #2 | 12:19 |
stlu | pc3.vbox3.myroom = VM PC#3 | 12:19 |
stlu | all the VMs now have a URL | 12:19 |
stlu | My question is, this remains: | 12:19 |
stlu | vbox3.myroom = ??? | 12:20 |
stlu | ... | 12:20 |
stlu | and I realized I'd better change the pc numbering to avoid confusion... | 12:20 |
stlu | pc1.vbox1.myroom, pc2.vbox1.myroom, pc3.vbox.myroom | 12:21 |
stlu | pc4.vbox2.myroom, pc5.vbox2.myroom, pc6.vbox2.myroom | 12:21 |
stlu | pc7.vbox3.myroom, pc8.vbox3.myroom, pc9.vbox3.myroom | 12:22 |
stlu | there. | 12:22 |
stlu | I have several ideas, but I don't know which is most conventional/correct. | 12:23 |
stlu | I could make that domain point to the gateway pc, on it's "wan" interface, so a web brower, a ping, or an ssh connection would go to that pc | 12:25 |
stlu | or I could just pick one of the VMs as a web server and set it to that, say pc8.vbox3.myroom = www.vbox3.myroom = vbox3.myroom | 12:26 |
stlu | or I could point it to the laptop itself, but that seems to have little use, since the laptop's OS isn't supposed to be part of the project. | 12:27 |
stlu | RoyK? | 12:27 |
stlu | do you have any of your 20 VLANs with similar subdomains? | 12:28 |
RoyK | stlu: back | 12:32 |
RoyK | stlu: no, we don't mix network structure and dns | 12:33 |
RoyK | not that it should be a problem | 12:33 |
stlu | ok, so to pick on zkxs, for example, I see that his URL is ip68-14-174-230.ok.ok.cox.net | 12:37 |
stlu | so there doesn't have to be any relationship between those subdomains, this is what you're saying? | 12:37 |
stlu | Well then, it seems that some of the subdomains don't matter: http://pastebin.com/8G26bcvp | 12:43 |
stlu | RoyK: so this is an example of proper conventions? If it isn't related to network structure, what might they have been thinking when they made the subdomains ok, and ok.ok ? | 12:44 |
stlu | Hmm, If I were in charge of that DNS, I'd want to change it to something more informative, like *.customers.cox.net | 12:47 |
stlu | I just looked at my own URL, bas16-toronto12-1088897118.dsl.bell.ca | 12:50 |
stlu | At least that makes a bit more sense. | 12:50 |
stlu | I think that "dsl." is just a way to separate the customer records from other systems, like their routers and office machines and stuff. | 12:51 |
shauno | ok.ok.cox.net may be a very poor example; that could easily be $city.$state.cox.net, and Oklahoma City, OK has thrown you off | 12:52 |
stlu | frick, I'll bet you're right! | 12:54 |
stlu | dangit, zkxs, why'd you have to live in Oklahoma, confusing my noob brain? | 12:56 |
* stlu that IP is in Oklahoma | 12:57 | |
shauno | actually, I might be wrong, I see a friend in san diego has sd.sd.cox.net. there goes my logic | 12:57 |
stlu | ok, well maybe they have other gear there, like x.routers.ok.cox.net? | 12:58 |
stlu | ok.ok is like "general.ok" | 12:58 |
stlu | or "customers.ok" | 12:58 |
stlu | so then, in conclusion, if my subdomains "vbox1", "vbox2" and "vbox3" just help me to remember which laptop (equiv. to the city/state idea) the VM resides, then it would be perfectly acceptable to leave no DNS record for them. | 13:00 |
shauno | name hierarchies can have as much or little meaning as you like. eg, we have a bunch of machines that are server.foo.corp.com because their dns is handled by a load-balancer, so we can just delegate foo.corp.com | 13:10 |
shauno | on the other hand, www.corp.com and mail.corp.com don't need to be on the same subnet, planet, etc, despite being at the same level | 13:11 |
stlu | I'm having fun pinging all over the place. | 13:15 |
stlu | www.ok.cox.net actually points to something, while ok.cox.net is nothing. | 13:16 |
stlu | and cox.net is the same IP as for www.cox.net, which make a bit of sense. | 13:18 |
stlu | mail.cox.net is nothing. | 13:18 |
stlu | www.ok.ok.cox.net is also nothing | 13:19 |
RoyK | stlu: I don't there are much naming convensions - that is - I'd say there are about as many convensions as there are sysadmins | 13:19 |
stlu | thank you RoyK. I can say that knowing there aren't any conventions is probably just as important as knowing when there are conventions. | 13:20 |
RoyK | stlu: there are always convensions, and always arguments between sysadmins etc about which is the best ;) | 13:23 |
stlu | you know what I mean :P | 13:23 |
stlu | There isn't a hard and fast rule that everyone is all trying to reach for... they have a few, and reasons to use whichever one they like best. | 13:24 |
stlu | because no sysadmin who still has a job would decide to say, assign a dotted-trio IP address to his systems, because he has a good argument for it! "I think 55.44.33 is a much better way to address the database server!" | 13:27 |
stlu | ... omg... apparently 55.44.33 is translated into 55.44.0.33... why oh why??? I just wanted to pick something impossible... | 13:30 |
stlu | WTF? $ ping 64.2316494 | 13:33 |
stlu | PING 64.2316494 (64.35.88.206) 56(84) bytes of data. | 13:33 |
stlu | I'm going to beat my forehead upon the nearest durable wooden surface... brb | 13:34 |
stlu | $ ping 642316494 | 13:35 |
stlu | PING 642316494 (38.72.248.206) 56(84) bytes of data. | 13:35 |
Patrickdk_ | heh? I name my servers 4digit numbers | 13:36 |
Patrickdk_ | have to patch syslog-ng to even allow that | 13:36 |
Patrickdk_ | it keeps thinking my server name is a date | 13:36 |
stlu | Patrickdk: I pity the poor soul that has to take over your job after you retire... | 13:37 |
Patrickdk_ | me? | 13:38 |
Patrickdk_ | the numbers make perfect sense :) | 13:38 |
Patrickdk_ | better than naming them all after greek gods or something | 13:38 |
yolanda | zul, jamespage https://code.launchpad.net/~yolanda.robla/neutron/autopkgtests/+merge/183451 | 13:39 |
stlu | Finally: $ ping 2648F8CE | 13:40 |
stlu | ping: unknown host 2648F8CE | 13:40 |
stlu | Patrickdk: Oh, i though you meant you gave your servers some perverted IP address like 12.34 with only four digits. | 13:42 |
baswazz_ | i have set 'hdparm -y /dev/sd[b-g] for almost 24 hours works fine, but when i remove the '# spindown_time = 60' in /etc/hdparm.conf nothing happens no spindown. And i did a reboot. | 13:42 |
stlu | I guess a nuumeric hostname isn't such a bad thing. | 13:42 |
stlu | Of course, it has to make me wrong again, 12.34 is translated to 12.0.0.34.... | 13:43 |
Patrickdk_ | makes it simple, 8001, 8002, 8003, would be 3 web servers :) | 13:43 |
Patrickdk_ | bet you can't think of the email servers name | 13:43 |
stlu | 2501, 2502, 2503? | 13:43 |
stlu | And FTP servers at 2101, 2102, 2103...? | 13:44 |
Patrickdk_ | well, try to stick to sftp | 13:44 |
RoyK | stlu: root@francesco:~# ping 0x2648F8CE | 13:44 |
RoyK | PING 0x2648F8CE (38.72.248.206) 56(84) bytes of data. | 13:44 |
stlu | FUUUUUUUUUUUUUUUUUUUUUUUUUUU | 13:44 |
sgran | machines with both smtp and ssh are 4701, 4702 ? | 13:44 |
sgran | stlu: what's the problem? | 13:45 |
Patrickdk_ | sgran, no, wouldn't combine servers like that, too much security risk | 13:45 |
stlu | RoyK: you didn't seriously do that just now. | 13:45 |
RoyK | stlu: just had to try to ping a hex address ;) | 13:46 |
sgran | it's just a number :) | 13:46 |
RoyK | sgran: an ip address is just a 32bit unsigned number too ;) | 13:47 |
sgran | that's what I mean | 13:47 |
RoyK | :) | 13:47 |
sgran | try 'ping 0' | 13:47 |
sgran | these are valid, if thankfully uncommon, ways to express IP addresses | 13:48 |
stlu | PING 0 (127.0.0.1) 56(84) bytes of data | 13:48 |
stlu | O.O | 13:48 |
RoyK | :) | 13:49 |
sgran | also ping 2130706433 | 13:50 |
sgran | steve@gashuffer:~$ echo $(( (74 << 24 ) + (125 << 16) + (136 << 8) + 113 )) | 13:51 |
sgran | 1249740913 | 13:51 |
sgran | steve@gashuffer:~$ ping 1249740913 | 13:51 |
sgran | PING 1249740913 (74.125.136.113) 56(84) bytes of data. | 13:51 |
highvoltage | heh, strange how chromium turns that in to 'localhost' and not '127.0.0.1' | 13:51 |
stlu | $ ping 0x1000000111001110100000001011110 | 13:53 |
stlu | that doesnt work | 13:53 |
RoyK | stlu: that's a rather large number :P | 13:54 |
RoyK | 0x => hex | 13:54 |
stlu | oh | 13:54 |
stlu | I wanted to make it interpret as binary | 13:54 |
RoyK | don't think you can do binary directly from the shell | 13:54 |
baswazz_ | anyone who can help me out? | 13:54 |
sgran | my telepathy is not working | 13:55 |
sgran | perhaps with more detail, I could answer that | 13:55 |
RoyK | well http://www.linuxtopia.org/online_books/advanced_bash_scripting_guide/numerical-constants.html | 13:56 |
RoyK | stlu: ping $((2#1000000111001110100000001011110)) | 13:57 |
stlu | RoyK: PING 1088897118 (64.231.64.94) 56(84) bytes of data. | 14:00 |
stlu | mind=blown | 14:00 |
stlu | is the double parantheses needed because its a bash arithmetic expression? | 14:01 |
stlu | *are the | 14:01 |
sgran | yes | 14:02 |
sgran | $(( )) is integer arithmetic | 14:02 |
sgran | 2#1000000111001110100000001011110 is an input to that that returns 1088897118 | 14:02 |
stlu | I'm learning sh syntax and my mentor gets pissed every time I learn a new 'bash-ism' as he calls it. | 14:03 |
stlu | But he's old-school and I'm not. | 14:03 |
sgran | $(( )) is POSIX | 14:06 |
=== oyvin is now known as oyvind | ||
=== oyvind is now known as Guest35153 | ||
=== Guest35153 is now known as oyvin | ||
stlu | ahah! So I can flaunt my arithmetic in my old-school mentor's face! | 14:14 |
stlu | Anyway, for some reason I cannot email myself at adam@1604548979 | 14:15 |
stlu | gmail doesn't waaaaaant it. | 14:16 |
mardraum | well, it's not a valid email address. | 14:17 |
mardraum | or are you still being cute? | 14:17 |
stlu | I'm noob. No time for cute. | 14:19 |
mardraum | then read about DNS and particularly MX records | 14:19 |
stlu | but if thats not valid, how come sending email to adam@95.163.121.115 is? | 14:19 |
mardraum | (if you care about smtp and not arithmetic) | 14:19 |
RoyK | sgran: sure it's posix? it works with bash/zfs, but not with dash/tcsh | 14:20 |
sgran | steve@gashuffer:~$ dash | 14:20 |
sgran | $ echo $(( (74 << 24 ) + (125 << 16) + (136 << 8) + 113 )) | 14:20 |
sgran | 1249740913 | 14:20 |
mardraum | email to bare IPs, never guaranteed to work no matter how you got to the IP | 14:20 |
RoyK | sgran: # echo $((2#01000100101)) | 14:20 |
RoyK | dash: 1: arithmetic expression: expecting EOF: "2#01000100101" | 14:20 |
sgran | stlu: a valid smtp hostname is not the same thing as a valid IP | 14:20 |
stlu | mardraum: ok then, I had a false notion. I tried again and it came back bad. | 14:20 |
sgran | RoyK: oh, yes 2# is a bash extension | 14:21 |
* stlu feels slightly offended being called 'cute' | 14:35 | |
Patrickdk_ | you troll | 14:36 |
jamespage | smb, any good with seccomp? | 14:40 |
jamespage | bug 1219857 | 14:40 |
uvirtbot | Launchpad bug 1219857 in vsftpd "vsftpd connections fail on amd64: "500 OOPS: child died"" [Undecided,New] https://launchpad.net/bugs/1219857 | 14:40 |
smb | jamespage, hm not very good... | 14:41 |
smb | jamespage, is there more hints or maybe some apparmour log | 14:42 |
jamespage | smb, other than: | 14:42 |
jamespage | Sep 2 14:25:51 vsftpd-debug kernel: [ 15.517149] type=1326 audit(1378131951.002:12): auid=4294967295 uid=65534 gid=65534 ses=4294967295 pid=1402 comm="vsftpd" sig=31 syscall=96 compat=0 ip=0x7fffacf79dff code=0x0 | 14:43 |
smb | jamespage, I would probably try my luck in #security but not sure how many US/CA folks are around | 14:44 |
=== freeflying is now known as freeflying_away | ||
=== HisaoNakai_ is now known as HisaoNakai | ||
=== lordsame is now known as SergioMeneses | ||
baswazz_ | can anyone assist me with hdparm /etc/hdparm.conf is not working | 15:54 |
baswazz_ | when i use hdparm -y the drives go in sleep | 15:54 |
baswazz_ | but when i set it up in hdparm.conf nothing happen even after a reboot | 15:54 |
=== psivaa is now known as psivaa-bbl | ||
cocoa117 | i am running ubuntu 12.10 server on Xen platform, how can I tell if that is right? i got uname -a | 16:57 |
cocoa117 | Linux ABCD 3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux | 16:57 |
Patrickdk_ | virtwhat | 16:59 |
cocoa117 | Patrickdk_, ? | 17:00 |
Patrickdk_ | heh? | 17:01 |
Patrickdk_ | you asked a question, I gave you an answer, and you ? me? | 17:01 |
Patrickdk_ | hmm, actually, maybe that isn't in ubuntu | 17:01 |
cocoa117 | Patrickdk_, not sure what you mean by virtwhat | 17:02 |
Patrickdk_ | oh, virt-what, in ubuntu | 17:02 |
cocoa117 | Patrickdk_, command not found | 17:02 |
Patrickdk_ | install it | 17:02 |
Patrickdk_ | always helps | 17:02 |
cocoa117 | oh, ok, i try | 17:03 |
cocoa117 | Patrickdk_, got it, Xen, many thanx | 17:04 |
cocoa117 | should the ubuntu 12.10 server have empty folder in /proc/xen? | 17:06 |
cocoa117 | i want to figure out if i am running xen-domu or xen-hvm | 17:06 |
cocoa117 | this applogic thing is hard to figure things out | 17:07 |
Patrickdk_ | don't look in /proc/ use /sys | 17:15 |
cocoa117 | Patrickdk_, does the independent_wallclock still exist in 12.10 xen pv domU? | 17:29 |
RoyK | cocoa117: is this a vm you got from somewhere? | 17:31 |
cocoa117 | RoyK, yes, this is a VM | 17:31 |
RoyK | cocoa117: from an isp etc? | 17:31 |
cocoa117 | that's right | 17:32 |
cocoa117 | RoyK, in fact, i am pretty sure it is a Xen domU | 17:32 |
cocoa117 | it just didn't show the normal info off it, and i can't solve the time issue | 17:33 |
RoyK | cocoa117: I haven't seen virt-what miss yet | 17:33 |
cocoa117 | xen as the answer | 17:34 |
RoyK | cocoa117: then what are you trying to sort out? | 17:36 |
Patrickdk_ | it's impossible to make the clock stable | 17:38 |
Patrickdk_ | it won't happen | 17:38 |
Patrickdk_ | independent wallclock just makes it a mess, unless the host has LOTS of free cpu cycles | 17:39 |
* RoyK mutters something about NTP | 17:39 | |
Patrickdk_ | ntp will help with independent wallclock, but still, you need enough cpu cycles, or it will giveup | 17:39 |
=== psivaa-bbl is now known as psivaa | ||
=== matanya_ is now known as matanya | ||
=== freeflying_away is now known as freeflying |
Generated by irclog2html.py 2.7 by Marius Gedminas - find it at mg.pov.lt!