00:01:35 -!- pikhq has joined.
00:04:36 -!- pikhq_ has quit (Ping timeout: 260 seconds).
00:40:32 -!- kallisti has joined.
00:40:37 <kallisti> where is the log that shows up at boot?
00:55:39 -!- kallisti has quit (Changing host).
00:55:40 -!- kallisti has joined.
00:56:38 -!- kallisti has quit (Quit: leaving).
00:59:21 -!- derdon has quit (Remote host closed the connection).
01:08:04 -!- cheater has quit (Read error: Operation timed out).
01:14:11 -!- azaq23 has quit (Ping timeout: 244 seconds).
01:22:15 -!- cheater has joined.
01:23:37 -!- azaq23 has joined.
01:36:16 -!- azaq23 has quit (Quit: Leaving.).
01:50:37 -!- kallisti has joined.
01:51:10 <kallisti> the OS can provide an arbitrary virtual interface?
01:51:32 <kallisti> it would be like a giant Nintendo DS.
01:51:56 <kallisti> I suppose it's not practical yet.
01:52:11 <Jafet> Go buy a goddamn iPad.
01:52:25 <kallisti> I'd want a touchscreen, and touchscreen keyboard. NEEDS TWO PARTS
01:52:29 <Madoka-Kaname> Would make it harder to use, esp for touch typers.
01:52:50 <kallisti> so like, when I switch over to insert-IDE it throws me a keyboard customized for the programming language.
01:52:56 <kallisti> with any relevant unicode symbols.
01:53:07 <Jafet> Actually, Acer made a cheap gimmick exactly like that
01:53:21 <Madoka-Kaname> Remebering a new layout because you switched programs?
01:53:55 <Jafet> @google acer iconia
01:53:56 <Madoka-Kaname> Oh, many people won't be hurt-- they hunt and peck anyways.
01:54:04 <kallisti> touchscreen interfaces with tactile sensation.
01:55:21 <kallisti> I think it would be a step in the right direction. with a single touchscreen it's difficult to cram both control and display elements into the same space.
01:55:51 <kallisti> with two you would have a display screen with some control elements like an ipad or whatever, and then a lower screen specifically for control. or however else you'd want to set it up.
01:56:50 <kallisti> basically I want the ASCII era of concrete syntax to go away.
01:57:33 <kallisti> where things like, say, improved record semantics, gets bogged down by a sudden lack of conveniently placed keys on a standard keyboard.
01:58:44 <Madoka-Kaname> Otherwise, you make it very troublesome for people who have standard keyboards, can't afford touchpad ones, or just prefer standard ones.
01:59:02 <Madoka-Kaname> A touchpad keyboard would need pressure detection or something.
01:59:17 <Jafet> What is the warranty on a touchpad keyboard
01:59:43 <kallisti> the screen should just zap you whenever you're on top of a key
02:00:02 <zzo38> I prefer physical keyboard with ASCII and that stuff. I like the original IBM PC keyboard with the function keys on the left. The only problem with that one is no indicator LEDs.
02:00:13 <kmc> is this iconia an actual thing you can buy
02:00:14 <kallisti> well, if you wanted to limit it to JUST keyboard-style stuff
02:00:27 <kmc> or in theory could ever buy
02:00:32 <kallisti> you could have a fixed grid of raised buttons, but with some sort of display mechanism to change the keys? I don't even know.
02:00:46 <kmc> http://www.artlebedev.com/everything/optimus/
02:01:30 <kmc> only $2,068
02:01:44 <kmc> 48x48 pixel color OLED screen under every key
02:01:57 <zzo38> I think you don't need to display on every key. That would waste energy and program size a lot it seems.
02:02:14 <kmc> yeah, clear keys above a single commodity display makes a lot more sense
02:02:37 <kmc> but anyway, why are we looking at the keyboard?
02:02:49 <pikhq> Who needs keycaps, anyways?
02:02:58 <zzo38> kmc: I suppose you are correct about that. But still I don't think you need a display for all keys even if it is the same one
02:03:05 <kmc> yeah, i don't either
02:03:26 <Jafet> We need HOLOGRAPHIC KEYCAPS
02:04:01 <kmc> i guess some people like the no-label keyboards because it forces them to learn to touch type
02:04:33 <kmc> it mostly seems like a stupid way to show off
02:04:51 <kmc> the copy on the Das Keyboard website certainly gives that impression
02:05:11 <pikhq> I've heard the Das Keyboards are actually rather high-quality keyboards, though...
02:05:20 <pikhq> So, even disregarding caps/not-caps, might be worth getting.
02:05:27 <kmc> they have a version with labels
02:05:46 <pikhq> I also heard when they started out they were shitty dome keyboards, which is... Stupid.
02:06:04 <pikhq> $100 premium for no key labels? Screw that.
02:06:09 <zzo38> I suppose the one without labels might also be useful in case you need to attach your own labels to all of the keys for any reason
02:06:33 <kmc> $100 to show everyone that you're a L33T H5X0R?
02:06:37 <kmc> seems like a bargain
02:06:51 <pikhq> More efficient uses of that $100, though.
02:06:58 <zzo38> Although even if there is labels, you can still put other labels on top, but they would need to be opaque. Without labels already on there, you can also use transparent labels, or just direct marking on the keys
02:06:59 <Jafet> They sell a set of four differently-coloured keys for you to replace the WASD cluster
02:07:12 * pikhq suggests a cheap monitor which always has that Matrix-effect screensaver going)
02:07:30 <pikhq> Jafet: What, cause WASD is hard to find?
02:07:54 <Jafet> Come on, the keycaps are blank!
02:08:10 <zzo38> Why do you even need to find WASD that easily; the F and J are the keys you should find easily they will have raised dots to find them easily.
02:08:13 <pikhq> And F/J still have the indent to make them easy to find.
02:08:47 <pikhq> zzo38: PC games use WASD as directional keys.
02:08:59 <Jafet> Well, the strange thing is that they use clicking Cherry switches, so gamers wouldn't buy them anyway. I don't know whether Das has any idea what kind of niche market it wants to sell to.
02:09:06 <zzo38> pikhq: It depend on the game. Some use arrow keys.
02:09:19 -!- amca has joined.
02:09:23 <pikhq> zzo38: Not if you want to mouse and use any other keys. :)
02:09:52 <kmc> they want to sell to office workers whose coping strategy is to pretend they are leet ninja rockstars
02:10:08 <Jafet> Hmm, that could be a significant market.
02:10:11 <kmc> that and people who just want a keyboard with serious tactile response
02:10:21 <kmc> there are a few others in that category
02:10:23 <pikhq> Jafet: How do Cherry switches compare with e.g. a Model M?
02:10:26 <zzo38> I have written many games for the PC, and none of them use WASD for directional keys; usually the arrow keys are used although sometimes the number pad and/or HJKL also work.
02:10:49 <pikhq> zzo38: It's basically the expected input scheme for first-person games, though.
02:11:13 <Jafet> The clicking ones are meant to evoke the Model M, but they are not buckling-spring switches, so they don't have anywhere near the durability and tactile response
02:11:42 <zzo38> pikhq: Well, I don't play or make first-person games; I suppose you might want to find WASD in case of first-person games possibly; but maybe you can use a joystick too?
02:12:07 <kmc> unicomp makes keyboards similar to the Model M
02:12:09 <Jafet> Buckling-spring switches create the sound, tactile feedback and electrical signal with the same spring, so they never register incorrectly
02:12:15 <kmc> some with a pointing stick too
02:12:31 <zzo38> Does anyone make keyboard similar to the original IBM PC keyboard with function keys on the left?
02:12:34 <Jafet> I thought Unicomp took over the IBM keyboard division
02:12:49 <Jafet> So they're rebranded Model M
02:13:00 <kmc> i wonder which switch technology is used in the Kinesis Advantage
02:13:12 <kmc> it's pretty loud and has decent feedback
02:13:32 <Jafet> If they use Cherry switches, you can be sure this fact will be advertised somewhere
02:13:42 <Jafet> The switches seem to be a new status symbol thingy
02:15:17 <kmc> i don't think Kinesis has quite caught on to the hacker rockstar ninja aesthetic
02:15:29 <kmc> their keyboards and website look like they were designed in the mid-90's
02:15:47 <kmc> also the keyboards are expensive as hell, for probably no good reason
02:16:07 <pikhq> They're hand-made.
02:16:22 <kmc> i mean, define "hand-made"
02:16:29 <kmc> they're not whittled by hand from old-growth plastic trees
02:16:44 <zzo38> I have also seen hacker keyboards, which are very good for UNIX; but lack a number pad or any way to send those codes. (I think they should make the keyboard with one key that allows you to send any code you enter)
02:16:58 <kmc> how much does a kinesis factory worker make?
02:17:39 <pikhq> zzo38: What, the Happy Hacking? Those things are... Meh.
02:18:33 <kmc> but it has "hacking" in the name
02:19:15 <pikhq> They're more-or-less laptop-layout boards.
02:19:20 <pikhq> With dome switches.
02:19:26 <kmc> i use my happy hacking keyboard to comment on hacker news about the hacker lifestyle
02:20:08 <kmc> i also have a standalone version of the thinkpad keyboard with trackpoint
02:20:10 <kmc> that's pretty good
02:20:27 <kmc> i wonder if the classic thinkpad keyboard will still exist in 5 years
02:21:05 <kmc> of the 5 current models listed as "ThinkPad X series" on Lenovo's website, four have chiclet keyboards
02:21:09 <Jafet> Does the classic thinkpad still exist now?
02:21:23 <kmc> i think so, yes
02:21:30 <kmc> but the "ThinkPad" brand name doesn't mean anything
02:21:43 <kmc> it just means lenovo wants to sell that model of laptop / netbook / android tablet to businesses
02:22:28 <kmc> otoh, if the branding is meaningless then maybe the IdeaPads are worth looking at
02:23:15 <pikhq> ... Chiclet keyboards?
02:24:26 <kmc> i'm also not sure the legendary ThinkPad quality isn't just nerd hipsterism
02:24:39 <kmc> in 6 years of owning thinkpads I've had a lot of shit break
02:24:54 <kmc> and a few bad interactions with the repair people, as well as some good ones
02:24:58 <pikhq> quintopia: Chiclet keyboards are about as shitty as you can get without resorting to a membrane keyboard.
02:25:24 <kmc> aren't those independent properties
02:25:53 <kmc> i think today "chiclet" just means there are gaps between the keys
02:26:16 <pikhq> kmc: No, "chiclet" refers to a particular keyboard switch type...
02:26:20 <kmc> it's not meant to imply the terrible switch technology of the ZX Spectrum
02:27:08 <pikhq> Like on remote controls, calculators, and the ZX Spectrum.
02:27:42 <pikhq> Also, 6 years? That's all after Lenovo bought the brand. :)
02:28:14 <pikhq> Not that I could judge the quality before that, as I never owned an IBM ThinkPad.
02:28:59 <kmc> the first one I owned was the X41
02:29:08 <kmc> it was IBM branded and designed by IBM
02:29:17 <kmc> even if Lenovo owned the company by that point
02:29:28 <kmc> also the repair centers are *still* IBM
02:29:51 <kmc> to open a ticket you fill out a form on an IBM website that was clearly derived from a 50 year old mainframe app
02:30:22 <kallisti> so I'm trying to manually configure my wlan interface now.
02:30:40 <pikhq> kmc: Probably still is a 50 year old mainframe app.
02:30:47 <kallisti> DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 8
02:30:47 <kallisti> DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 7
02:30:47 <kallisti> DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 11
02:30:47 <kallisti> DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 11
02:30:47 <kallisti> DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 12
02:30:49 <kallisti> DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 12
02:30:54 <kallisti> No working leases in persistent database - sleeping.
02:31:39 <kmc> i think it's the same form you use to request repairs on your $50,000,000 zSeries mainframe installation
02:32:02 <kmc> assuming you can't afford the 40U rackmount on-call service technician
02:33:14 <kmc> http://en.wikipedia.org/wiki/Chiclet_keyboard "The term has also been used more recently to describe several popular low-profile, low-travel keyboards. These keyboards have small, flat, squarish keys that are separated from each other by some space on the baseplate they protrude from - a feature common to the old chiclet keyboards. They are not chiclets in the earlier sense, however, as they do not use a rubber membrane or directly moulde
02:33:14 <kmc> d hard key tops as the keys themselves and instead use a more modern technology."
02:33:29 <kmc> you see this usage a lot in current reporting on new models of laptop etc
02:34:04 <kmc> when i search for the term i get a lot of that
02:34:10 <quintopia> yeah i thought that is what you meant
02:36:21 <kmc> it is what i meant
02:38:43 <kmc> also the thinkpad power adapters frequently break at the plug that goes into the computer
02:38:55 -!- kallisti has quit (Quit: Lost terminal).
02:39:15 <kmc> this was true in the IBM days, and with the first Lenovo models, and they've recently taken steps to fix it
02:44:11 <pikhq> kmc: Confusing. The original sense of chiclet keyboards are still around.
02:46:29 <kmc> apple and thinkpad laptops are pretty similar
02:46:36 <kmc> they both have pretty good build quality
02:46:43 <kmc> they both have a dedicated fanbase who will ignore flaws
02:47:24 <kmc> and they both appeal to a specific aesthetic
02:47:36 <kmc> i'll admit that part of my reason for buying thinkpads is aesthetics and peer pressure
02:47:40 <myndzi> chiclet keyboard is worst keyboard
02:47:52 <myndzi> not much in the way of choice with laptops these days though
02:48:20 <kmc> what specifically don't you like about chiclet keyboards (in the new sense)
02:48:51 <myndzi> key travel, key shape, key spacing, key switches
02:49:05 <kmc> compared to other laptop keyboards?
02:49:12 <myndzi> compared to any keyboards
02:49:19 <myndzi> i realize that travel is low on all laptops these days
02:49:26 <myndzi> but even so i prefer the tapered keys
02:49:31 <quintopia> i like them. they are slim, cheap, easily replaced, and the switches never cause me trouble
02:49:36 <myndzi> my fingers have a tendency to 'hang up' on the edge of the key caps
02:49:47 <myndzi> but even disregarding that, they just don't feel very good
02:49:57 <myndzi> as for switches, it's not that they are necessarily troublesome
02:50:08 <myndzi> it's that i have very picky taste in keyswitches these days :P
02:50:10 <kmc> i think the thinkpad chiclet keys are still tapered a bit
02:50:22 <myndzi> you ain't finding a laptop with topres though so *shrug*
02:50:25 <kmc> and i don't know what keyswitch they use
02:50:37 <myndzi> laptops are generally scissor switches
02:50:39 <kmc> but it's not clear why a chiclet layout would require them to change that
02:50:54 <myndzi> i forgot to list one other thing i dislike about them
02:51:27 <kmc> the thinkpad keys i've seen have a keycap attached to a scissor, above a little plastic nipple thing which touches the circuit board
02:52:04 -!- augur has joined.
02:52:10 <myndzi> presumably that's normal for scissor switches
02:52:19 <myndzi> i never pry at laptop keys, i don't want to break them
02:52:25 <kmc> "ATTENTION: Please note that this keyboard has black labeling on dark gray plastic keycaps. In low lit environments, this keyboard will appear to be blank! This keyboard is not available with higher contrast keycaps; for better visibility, please consider a white keyboard."
02:52:33 <myndzi> so i haven't been under the keycaps much
02:52:56 <myndzi> yeah, it is pretty low contrast
02:53:02 <kmc> what's the point of that
02:53:16 <myndzi> appearance is really the only point
02:53:22 <myndzi> but i prefer blank caps because i type multiple layouts
02:53:28 <myndzi> and i don't really like typing on the wrong letters
02:53:43 <kmc> i prefer labeled keys because i type multiple layouts ;)
02:54:04 <myndzi> the labels don't do you any good if they don't represent the key you are pressing :P
02:54:07 <pikhq> kmc: Not helpful if you type multiple layouts on the same board.
02:54:21 <myndzi> i'm losing some of my qwerty skill, it's been a year since i had to type it daily
02:54:25 <kmc> i usually type dvorak without looking at the keys
02:54:29 <myndzi> but i can still get over 80 wpm
02:54:32 <kmc> but sometimes i have to type a password or something in qwerty, without echo
02:54:34 <pikhq> Which I don't, because fuck kana layouts.
02:54:39 <myndzi> it used to be even with my dvorak speed though
02:54:43 <kmc> and then the labels help
02:54:50 <kmc> i can still touch type qwerty but not with great accuracy
02:54:58 <myndzi> i know what you mean on that count
02:55:10 <myndzi> touch typing is easy but single letters get hard after you're past that phase for awhile
02:55:22 <kmc> actually i pretty much can't touch-type qwerty on the kinesis
02:55:27 <myndzi> i've started pairing various letters in my head though
02:55:32 <kmc> because i've never done it regularly
02:55:33 <pikhq> イエユイノボメノレンミリヨジュヨゴハサテカナエクタマエ
02:55:50 <myndzi> when i'm using dvorak and i copy/paste things i actually think ctrl+i
02:56:02 <kmc> yeah i do that, but only for some keys
02:56:24 <myndzi> the hardest key is a :V
02:56:26 <myndzi> i always get it mixed up
02:56:38 -!- sebbu2 has joined.
02:56:39 -!- sebbu2 has quit (Changing host).
02:56:39 -!- sebbu2 has joined.
02:57:05 <Jafet> Uh, it remains in the same place.
02:58:18 -!- Jafet has quit (Quit: Leaving.).
03:00:42 -!- sebbu has quit (Ping timeout: 276 seconds).
03:01:41 -!- Friendship has changed nick to Gregor.
03:01:52 <lambdabot> Gregor: You have 1 new message. '/msg lambdabot @messages' to read it.
03:01:58 <lambdabot> elliott said 3d 8h 34m 4s ago: "ℒ was originally described to generalize the question raised by Befunge/index.php." not quite true
03:02:04 <Gregor> Accidentally denicked.
03:02:08 -!- Gregor has changed nick to Friendship.
03:02:23 <myndzi> oh good, we're friends again <3
03:02:38 <Friendship> I am friends with all! I am the abstract concept of friendship!
03:03:36 <Friendship> So anyway, I got an email from somebody who apparently runs the blog championofbirds.com .
03:03:47 <Friendship> He says he wants to interview me for his blog because he found my hats site or something?
03:04:40 <myndzi> that is ... interesting
03:04:47 <myndzi> did you ask him what kind of hats birds like?
03:12:56 -!- amca has quit (Quit: Farewell).
03:14:35 <Friendship> myndzi: I haven't responded, it was an email.
03:14:47 <Friendship> Does one accept this kind of invitation?
03:15:32 <myndzi> it's a perfect opportunity for trolling
03:15:37 <myndzi> do you have a site about hats?
03:15:44 <zzo38> Respond by telephone.
03:15:50 <myndzi> he could be just spamming you
03:15:58 <zzo38> And use a payphone.
03:16:31 <myndzi> Friendship: lulz, obviously
03:17:00 <myndzi> i honestly have no idea what he wants to interview you about though so i don't have any particular ideas heh
03:17:13 <myndzi> this is the kind of thing a pal of mine from dalnet used to turn into comedy gold all the time
03:17:20 <myndzi> except in his case it was over irc
03:18:04 <myndzi> sacring the police , that lobster would snap is claw aroung , KLAP !!! KLAP !!! V..V
03:18:11 <myndzi> there's one gem from such a conversation, hehe
03:18:23 <Friendship> The problem is that since he found me via my web site, my real name is known and hence my reputation is risked.
03:18:53 <myndzi> if some guy i didn't even know wanted to interview me i wouldn't be terribly worried if he was like omg i tried to interview myndzi but he trolled me!
03:18:59 <myndzi> on the other hand i understand
03:19:08 <myndzi> you may as well do it, could be interesting
03:19:14 <myndzi> and if it sucks you can always switch to trolling midway :>
03:19:15 <Friendship> If I loon it up and then that becomes the top search result for "gregor richards", yikes.
03:19:38 <myndzi> then people will think you have a sense of humor?
03:19:48 <myndzi> ur mather is SNACK LORD!
03:20:05 <Friendship> I think I'll just send him back this: http://codu.org/hats/NewTopHat-med.jpg
03:20:13 <Friendship> "That's the answer to every question."
03:20:52 <myndzi> i forgot about snack lord, that's one of my favorites
03:23:33 <zzo38> In my idea of new programming language I have written part of specification already. There are similarity to Haskell. But, some of my ideas are: One type of kind # might be (unsafe "i8"). And all monomorphic types of kind ? (even if they have polymorphic components) are automatically instances of (\x -> Prelude.typeOf :: x -> Prelude.Type) although it is not implied so you need to mention it explicitly if you use it.
03:24:04 <zzo38> (The other thing, various things are put into the prelude which isn't what Haskell does)
03:24:49 <zzo38> I don't know, if this seem at all sensible to you or not.
03:28:28 <Friendship> Oh, looka that, he's actually one of five people who runs that site >_> <_<
03:32:45 <quintopia> what reputation, gregor. what reputation.
03:33:40 <quintopia> this is your first chance to MAKE A REPUTATION
03:33:46 <Friendship> I've made quite a name for myself in certain circles which produce content not eligible for minors or distributable in most countries.
03:34:56 <oerjan> i can see you wouldn't want to tarnish that, then
03:36:46 * oerjan suddenly realizes he doesn't know where those hats have been
03:36:59 <pikhq> Hooray, hat fetish!
03:39:39 <oerjan> you can leave your hat on
03:45:47 -!- oerjan has quit (Quit: Good night).
04:07:11 -!- Jafet has joined.
04:13:30 <Sgeo> ...anyone? UPDATE
04:14:16 <monqy> I was just saying hello ;_;
04:20:10 -!- PiRSquared17 has changed nick to Insert_non-forma.
04:22:10 -!- Friendship has set topic: It Is The Absolute Verifiable Truth & Proven Fact That Your Belly-Button Signature Ties To Viviparous Mama. | 4 corner harmonic 24 hour time cube | http://codu.org/logs/_esoteric/ | http://esolangs.org/wiki/ has moved servers!.
04:25:52 <ion> My Little Stallman: Foot Dirt is Magic
04:31:38 -!- Insert_non-forma has changed nick to PiRSquared.
04:34:33 -!- MoALTz_ has quit (Read error: Connection timed out).
04:37:02 -!- MoALTz_ has joined.
05:16:50 -!- TeruFSX has quit (Read error: Connection reset by peer).
05:22:48 -!- TeruFSX has joined.
05:24:04 -!- PiRSquared has changed nick to PiRSquaredBai.
05:36:22 <Jafet> Foot dirt may lead to open sores.
05:47:53 -!- MoALTz_ has quit (Read error: Connection timed out).
05:54:43 -!- cswords_ has quit (Quit: Leaving).
05:55:07 -!- cswords has joined.
07:06:01 -!- cheater has quit (Read error: No route to host).
07:06:52 -!- cheater has joined.
07:19:24 -!- pikhq_ has joined.
07:19:29 -!- pikhq has quit (Ping timeout: 252 seconds).
07:27:56 -!- TeruFSX_ has joined.
07:30:51 -!- TeruFSX has quit (Ping timeout: 260 seconds).
07:39:18 <olsner> Jafet: open source and foot dirt? reminds me of richard stallman
07:44:23 -!- pikhq has joined.
07:44:25 -!- pikhq_ has quit (Ping timeout: 240 seconds).
07:54:25 -!- MoALTz has joined.
09:01:26 -!- zzo38 has quit (Quit: MAYBE DO NOT COME FROM CHOICE).
09:52:53 <mRoman> So. My javascript interpreter/debugger is finished.
09:53:06 <mRoman> I can pause the program at any point and inspect memory at will.
10:15:11 -!- Vorpal has joined.
11:01:30 -!- ais523 has joined.
11:46:14 -!- derdon has joined.
11:55:21 -!- monqy has quit (Quit: hello).
12:26:50 <mRoman> Would brainfuck be turing complete if we'd have to know at compile time for each loop in which memory cell we currently are?
12:28:37 -!- cswords_ has joined.
12:29:36 <mRoman> In beam I have the problem that I only figured a way out how to write loops which don't bother if the beam is even or odd by using the beam != store instructions which requires me to know at time of writing the program
12:29:40 <mRoman> what the current cell address is.
12:30:35 <mRoman> the other loops would require to know whether the cell's value is even or odd
12:30:50 <mRoman> but I can decide even/odd at runtime somehow.
12:31:20 <mRoman> but that'd be tediously complex :(
12:31:50 -!- cswords has quit (Ping timeout: 260 seconds).
12:34:51 -!- derdon has quit (Remote host closed the connection).
12:45:08 <ais523> mRoman: I think no, because it couldn't access infinite memory
12:45:38 <ais523> why not just use only even numbers?
12:45:47 <ais523> BF is still complete if + and - add and subtract 2 rather than 1
12:46:01 <fizzie> Speaking of Beam, is the comparison in u/n modulo 256 or not? I.e. if the store is >= 256, is it always false?
12:47:25 <fizzie> ais523: With unbounded tape cells, I wouldn't bet on that. I mean, it wouldn't surprise me if the TC three-cell brainfuck construction always knew in which cell it is.
12:48:12 <ais523> fizzie: oh, I was thinking about the usual mod-256 version
12:48:28 <ais523> bignum BF I somehow have mentally filed as a different language
12:48:32 <ais523> I blame it on too much BF Joust
12:48:41 <mRoman> then beam != store is always true
12:49:48 <mRoman> you have a beam = (store % 256); instruction
12:49:53 <mRoman> and a store = beam; instruction
12:50:30 <mRoman> you'd need a temporary location to not lose the beam, though.
12:51:07 <fizzie> More imporantly, a temporary location not to lose the store, and there's no other unboundedly large place, I suppose.
12:52:09 <mRoman> You can't save the store.
12:52:15 <mRoman> memory cells are limited to 8bit
12:53:07 <mRoman> (which means we can only save (store % 256))
12:53:17 <mRoman> you'd have to spread store >= 256 to different memory cells somehow.
12:54:22 <mRoman> Basically it's limited to 256 memory cells which are easily accessible.
13:02:23 <mRoman> Using only 0 and 1 should be possible
13:02:36 <mRoman> and it should also be possible to encode data in the control flow
13:08:25 <mRoman> http://codepad.org/HQoJOyhh <- which produces 101
13:08:56 <fizzie> I have a rather non-optimal but I-think-correct translation from brainfuck to Beam here.
13:09:25 <fizzie> It has an unbounded tape of 8-bit values.
13:09:53 <fizzie> It looks like this: http://sprunge.us/UORC
13:12:23 <fizzie> The 'XXX' at ^6 can be just an unconditional jump back to [ for easiness.
13:12:40 <HackEgo> /home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: (`): not found
13:13:14 <mRoman> `(`) with an initial store value of 1
13:13:17 <HackEgo> /home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: (`): not found
13:13:37 <mRoman> ok, it decrements to zero
13:13:44 <mRoman> but control flow is redirected to left.
13:14:21 <fizzie> mRoman: Initial store value is always even when that is hit.
13:14:36 <fizzie> mRoman: It's one of 2, 4, 6, ... always.
13:15:02 <fizzie> (Since it's at the marker cell of 3, 5, 7, ...)
13:18:38 <fizzie> I'll see about writing a program that performs that transformation, and try it on some loopy brainfuck code, but maybe not while I'm technically supposed to do work-stuff.
13:22:26 -!- PiRSquaredBai has changed nick to PiRSquaredHai.
13:29:13 -!- sebbu2 has changed nick to sebbu.
14:04:00 <fizzie> Well, it does http://sprunge.us/COCL => http://sprunge.us/VOdH correctly; code at http://sprunge.us/SePY
14:12:33 -!- ais523 has quit (Ping timeout: 260 seconds).
14:30:52 <chickenz> mRoman: what happens, in beam, when the control flow reaches a border ? The program exits ?
14:31:12 <chickenz> (i'm writing a little interpreter in python for the fun)
14:34:15 <fizzie> http://p.zem.fi/bf2beam.pl with a bit more formatting and the construction "documented"; I also pointed a link to that from the Wiki just for giggles, since it managed the hello world.
14:43:37 -!- cswords__ has joined.
14:47:11 -!- cswords_ has quit (Ping timeout: 260 seconds).
14:53:45 -!- MoALTz has quit (Ping timeout: 244 seconds).
14:55:39 -!- MoALTz has joined.
15:14:31 <mRoman> and you have to pay attention to spaces
15:15:25 <mRoman> because the second line is only 1 character long.
15:15:39 <mRoman> you have to place a nop there
15:18:31 <mRoman> If the brainfuck program should print Hello, hello, world.
15:18:38 <chickenz> ok, my interpreter already works like that
15:21:31 <fizzie> Yeah, I !bf_txtgen'd it. (Though the Perl script strips doesn't add enough spaces at the end of lines like that, will have to fix it. (Doesn't matter in the example, but would probably break nested loops. (Though those might be already broken. (I was sort-of assuming it'd be all Befungey and fill the universe with spaces.))))
15:23:54 <mRoman> seems your perl script generates not enough spaces sometimes.
15:26:25 <mRoman> http://codepad.org/ZfxIyvc9
15:26:31 <mRoman> Thats the output translation of
15:26:45 <mRoman> ++++>++>+>+<[>[-<++++>]<<]>
15:27:02 <mRoman> It get's stuck in '>'p?
15:27:30 <fizzie> Yes, that's what I said.
15:29:53 <mRoman> which then increments store all the time
15:30:42 <mRoman> until it exceeds the 1024 memory cells in the javascript implementation.
15:32:45 <fizzie> Mhm. It's supposed to hit the flagged cell that was left by the `p+P' bit.
15:34:07 <fizzie> I'll take a look when not in a bus with a silly phone.
15:34:18 <mRoman> That should search a zero cell, right?
15:35:32 <mRoman> ? only lets you pass with beam != 0
15:36:20 <fizzie> Yes, that's the point. All the even cells it tests should be 0, except the one that was +'d before the (`).
15:36:41 <fizzie> After hitting that one it should go through the ?.
15:37:33 <fizzie> Anyway, my bus stop is like right now. ->
15:37:45 <mRoman> In the mean time, I'll implement break points :D
15:46:58 <mRoman> Ok. I have a breakpoint at (y,x) = (1,39)
15:47:13 <mRoman> at which point Beam := 0 and Store := 0
15:47:24 <mRoman> and Memory[0] = 1; Memory[1] = 0;
15:48:11 <mRoman> at breakpoint (y,x) = (4,42)
15:48:18 <mRoman> (which is the > in '>'p?)
15:48:33 <mRoman> Beam := 0 Store := 1 Memory[0] := 1 Memory[1] := 0
15:49:00 <fizzie> Memory[0] being nonzero is just plain wrong. I suppose it has messeded up.
15:52:39 <fizzie> Oh, if it walks past the left edge of the tape in the brainfuck code, all bets are off.
15:53:18 <fizzie> Like the unbalanced [>[-<++++>]<<] will, presumably.
15:54:19 -!- calamari has joined.
15:54:54 -!- azaq23 has joined.
15:55:01 <mRoman> I haven't thought of that
15:55:08 -!- azaq23 has quit (Max SendQ exceeded).
15:56:32 -!- azaq23 has joined.
15:57:29 <mRoman> ++++[>+++++[>+++++<-]<-]>>- works
15:57:35 <mRoman> (non-wrapping bfconstant 99)
16:01:55 -!- Phantom_Hoover has joined.
16:09:14 <mRoman> Nested loops work if they are balanced
16:10:02 <mRoman> at least those I tested from the brainfuck constants.
16:13:10 <mRoman> And the truth-machine translated from brainfuck works :)
16:14:15 <fizzie> There shouldn't be anything special about unbalanced loops either, as long as they don't try to go < past the left edge.
16:14:32 <fizzie> That, translated, with stdin "hello" produced "olleh" in the Javascript interp.
16:16:12 -!- calamari has quit (Quit: Leaving).
16:17:55 <mRoman> Thank you very much for that translation script.
16:24:01 <fizzie> Added the missing spaces. (Now there's a bit more than exactly the necessary amount, but better safe than sorry.)
16:31:35 -!- mRoman has changed nick to mroman.
16:49:22 -!- Taneb has joined.
16:53:25 -!- PiRSquaredHai has changed nick to PiRSquared17.
17:08:47 -!- ais523 has joined.
17:10:23 -!- MDude has joined.
17:10:59 -!- elliott has joined.
17:11:23 <elliott> ais523: what is it with people and trying to prove TwoDucks is computable?
17:11:37 <ais523> people are trying to prove TwoDucks computable?
17:11:48 <elliott> http://esolangs.org/wiki/Talk:TwoDucks a new comment posted just today
17:13:21 <ais523> oh no, ESR's trying to interfere in politics
17:13:51 -!- tzxn3 has joined.
17:14:19 <Taneb> El Stallman Richard?
17:14:31 <elliott> if you don't already know, you probably don't want to
17:14:39 <ais523> elliott: the problem is, I'm not convinced this will end well even if he argues a point of view I agree with, which seems possible (although far from certain)
17:15:11 <Taneb> Oh, I know who he is
17:15:22 <elliott> ais523: The likelihood of you and esr agreeing on a political point is about 0 unless I've grossly misjudged your political stances.
17:15:26 <Taneb> Well, I've skimmed his wikipedia article at least once in the past
17:15:59 <ais523> elliott: well, he's arguing something to do with regulation of the Internet
17:16:07 <ais523> which is a topic that I think there's a chance greater than 0 we agree on
17:16:14 <ais523> but I don't know his actual point of view on the issue, so I'm not sure
17:18:07 <Phantom_Hoover> It's not like ESR's wrong on everything, he's just right on some things and then takes it too far.
17:18:28 <ais523> Phantom_Hoover: that's a good description
17:19:28 <elliott> Phantom_Hoover: Gun-toting islamophobic libertarianism doesn't really start at being right.
17:19:38 <elliott> It might accidentally cross into the realms of rightness by mistake once in a while.
17:20:08 <elliott> Wait, I think he's racist too. I lost track trying to forget his political posts.
17:20:39 -!- augur has quit (Remote host closed the connection).
17:22:27 <Taneb> I think I'll start saying that I use GNU/Windows, just to confuse people
17:23:10 <Taneb> Nah, that isn't as funny as it seemed when it was on the inside of my head
17:24:47 <ais523> Taneb: you mean GNU/NT
17:24:51 <ais523> you have to put a kernel after the slash
17:25:17 <ais523> and you probably /don't/ do that, because I don't think NT can load GNU tools without several layers in between
17:25:38 <fizzie> GNU/GNU, the better name for GNU/Hurd.
17:25:40 <ais523> it's not like you can use bash as your init process, like you can in Linux (and occasionally have to, if your system gets borked)
17:25:43 <fizzie> After all, Hurd is the GNU kernel.
17:26:30 <Friendship> fizzie: They like to just call it "GNU" y'know X-D
17:26:37 <Phantom_Hoover> elliott, you should totally write a toolset thing and call it Elliott.
17:26:37 <ais523> right, it's just called "GNU"
17:27:18 <Friendship> elliott: Debian isn't the "they" to whom I was referring.
17:27:20 <ais523> that's because Debain have to make sense
17:27:30 <ais523> in order to be taken seriously
17:27:41 <ais523> Debian is serious distro
17:27:50 <elliott> Yeah, but I'm pretty sure Debian agree with GNU on 90% of things.
17:27:52 <ais523> almost as serious as Red Hat
17:28:06 <ais523> elliott: right, but wow is the other 10% hotly argued
17:28:24 <ais523> GNU hate them for having a non-free repo that's compatible with the distro, even though it technically isn't part of it
17:28:52 <elliott> They still administrate and maintain it :P
17:29:34 <Friendship> Idonno, it took me more work than it ought to have to get rid of those shitty nouveau drivers and install NVidia's binary ones :)
17:30:08 <ais523> elliott: oh, crazy and stupid situation at work
17:30:25 <ais523> the project we set the GPU students can only be worked on from home if you happen to have a recentish NVidia GPU in your own computer
17:31:27 <Friendship> "Every time I tarball, my Makefile becomes corrupt and I think this is why my program isn't working when I submit. What do?" // 99-to-1 this guy is typing tar zcf Makefile <rest of his files>
17:31:55 <elliott> Friendship: Not like tar has the most intuitive of user interfaces.
17:32:10 <elliott> Probably they're listing the tarfile last in analogy with mv, cp and so on
17:32:13 <Friendship> elliott: We give them the exact command to run :)
17:32:24 <elliott> Friendship: You think people read that?
17:32:35 <Friendship> No, but it makes a nice excuse to scream at them.
17:33:25 <ais523> elliott: actually, many nontechnical users, if you give them an exact command to run, they'll just run it
17:33:43 <ais523> but right, command-line interfaces could do with more standardisation
17:34:18 <ais523> I like the rule (which GNU invented IIRC but don't enforce consistently) that if you give a command a filename to write, not read, it must be prefixed with -o (or >, for a different reason)
17:34:48 <Friendship> tarfs -z lolmytarfile.tar mnt/ ; cp -a lolmyfiles mnt/ ; fusermount -u mnt/
17:35:10 <elliott> http://www.cs.virginia.edu/~evans/cs655/readings/mockingbird.html
17:35:23 <fizzie> I wonder what's RMS's current distro recommendation. It's been at least GNU/LinEx and UTUTO and one third one that all have been described as "the only one with no non-free software" at one point, but I'm not sure which was the recentest one and if it's still kosher.
17:35:34 <ais523> fizzie: what did you expect to be in /mnt?
17:35:52 <elliott> fizzie: He uses a Lemote Yeeloong thing.
17:35:57 <elliott> Because it's aaaaall free.
17:35:59 <ais523> fizzie (actually fizzie this time): I think they mentioned Gobuntu at one point
17:36:02 <elliott> Presumably with whatever OS it comes with.
17:36:06 <ais523> actually, I'm surprised RMS doesn't use LFS
17:36:14 <ais523> he's a good enough programmer to be able to maintain it
17:36:17 <elliott> http://upload.wikimedia.org/wikipedia/commons/5/56/Richard_Matthew_Stallman_working_on_his_Lemote_Machine.JPG
17:36:29 <elliott> ais523: I doubt he wants to
17:36:32 <elliott> he doesn't really like Linux
17:36:56 <ais523> he has no philosophical objection to using it, but doesn't want to contribute, or something
17:37:11 <ion> He seems to have a huge jaw in that photo. :-D
17:37:38 <ion> http://stallman.org/stallman-computing.html
17:37:39 <elliott> heh, that took a while to see
17:38:04 <elliott> "I use a Lemote machine which has a free initialization program and a free operating system. One other advantage of this machine is that Windows has never supported it."
17:38:13 <elliott> Windows supporting a machine will make rms not want to use it?
17:38:24 <elliott> ais523: oh, he cheats: "I do not have a preferred GNU/Linux distro. I recommend all the ethical distros — namely, those that are 100% free software.
17:38:24 <elliott> I've chosen not to have any preferences among those ethical distros. But I am not in a position to judge them on other criteria: even to try them all would be a lot work that I have no need to do."
17:38:41 <elliott> ais523: that said, gnu.org links "Download GNU" to http://www.gnu.org/distros/free-distros.html
17:38:42 <ais523> that's surprisingly reasonable, actually
17:38:52 <elliott> so you can see the very short list they recommend
17:39:10 <elliott> their front-page screenshot http://www.gnu.org/distros/screenshot.html is from Trisquel, IIRC
17:39:26 <elliott> and ofc the FSF sponder gNewSense
17:39:51 <elliott> ...whose website runs MoinMoin
17:40:03 <elliott> has anyone ever installed MoinMoin and not immediately regretted it?
17:40:08 <fizzie> Urban legend: If you take a video of RMS speaking, and re-encode that to a non-free format such as MPEG4, RMS will not appear in the video. (It's like vampires and mirrors.)
17:40:54 <ais523> fizzie: did you just invent that urban legend?
17:41:00 <elliott> you're not allowed to ask that
17:41:07 <elliott> if he says yes, it won't spread
17:41:18 <ais523> and if he says no, it won't spread either
17:41:20 <fizzie> ais523: I... maybe. But it was inspired by the RMS-speaking info-package.
17:41:30 <elliott> "When you start a Lisp system, it enters a read-eval-print loop. Most other languages have nothing comparable to read, nothing comparable to eval, and nothing comparable to print. What gaping deficiencies!"
17:41:56 <fizzie> But can they do the dashes.
17:42:02 -!- Taneb has quit (Quit: g2g).
17:42:04 <elliott> Phantom_Hoover: they don't
17:42:18 <elliott> how many languages have a way to fully print out any object?
17:42:31 <elliott> how many languages have a way to read in any object?
17:42:36 <elliott> "Lisp is no harder to understand than other languages. So if you have never learned to program, and you want to start, start with Lisp. If you learn to edit with Emacs, you can learn Lisp by writing editing commands for Emacs. You can use the Introduction to Programming in Emacs Lisp to learn with: it is free as in freedom, and you can order printed copies from the FSF."
17:42:44 <elliott> ais523: OK, rms tells people to learn Emacs Lisp as a first language
17:43:10 <elliott> "I read a book about Java, and found it an elegant further development from C."
17:43:16 <Phantom_Hoover> Does Lisp necessarily let you read and print any object?
17:43:20 <elliott> "I skimmed documentation of Python after people told me it was fundametally similar to Lisp. My conclusion is that that is not so. When you start Lisp, it does `read', `eval', and `print', all of which are missing in Python."
17:43:34 <elliott> Phantom_Hoover: well, not sure; but read/print also operate with the same syntax as Lisp
17:43:39 <elliott> which is the most important thing
17:43:40 <ais523> hmm, I'd debate that if I hadn't come across a script that had the same purpose as a CGI script written in elisp
17:43:49 <fizzie> "Please check with me before you allow a CD of GNU/Linux to be distributed at the event [where I'm speaking]."
17:43:50 <ais523> it wasn't actually a CGI script because it wouldn't run if connected to a webserver, though
17:43:53 <ais523> I think it was run manually
17:44:16 <elliott> wow, RMS has a twitter account
17:44:18 <elliott> although he refuses to use it
17:44:27 <ais523> so why does he have one in the first place?
17:44:39 <elliott> to log into websites that use Twitter's OAuth thing
17:44:52 <elliott> "I do not post on 4chan." THANKS, I WAS WONDERING
17:45:21 <ais523> elliott: it's anonymous, you can't tell
17:45:39 <ais523> although, some celebrities have rules so you can tell if it's them if they post elsewhere
17:45:45 <ion> I heard all messages on 4chan are posted by RMS.
17:45:54 <ais523> like PJ of Groklaw's rule that if she posts anywhere else, she'll report the fact on Groklaw so that people know it's her
17:45:59 <elliott> ais523: 4chan isn't necessarily anonymous, although I think /b/ is
17:46:09 <kmc> i'm going to spread that urban legend
17:46:20 <elliott> although, hmm, I think they only have the easily-crackable tripcode format, so probably it effectively is
17:46:33 <elliott> kmc: you're doing god's work
17:46:44 <ion> elliott: Which one’s?
17:48:12 -!- augur has joined.
17:50:09 <elliott> Feb 3rd update: For every 5,000 signatures we get, we will send this giant "1984" postcard to Steve Jobs."
17:51:23 <elliott> ais523: fizzie: hey, how are you meant to indent SQL?
17:51:48 <ais523> you can't meaningfully indent it unless you add far too many newlines
17:51:54 <ais523> to give something /to/ indent
17:52:26 <elliott> anything is better than select user_name from user where (select count(*) from revision where rev_user = user_id) = 0 and (select count(*) from archive a1 where a1.ar_user = user_id and a1.ar_timestamp = (select min(a2.ar_timestamp) from archive a2 where a2.ar_title = a1.ar_title and a2.ar_namespace = a1.ar_namespace) and exists (select * from logging where log_action = 'delete' and (log_namespace = 0 or log_namespace = 2) and log_comment like '%
17:52:26 <elliott> spam%' and log_title = a1.ar_title and log_namespace = a1.ar_namespace)) > 0;
17:53:52 <fizzie> I think you just indent it as you wish. But probably subqueries get one level, and sometimes the fixed bits like SELECT and FROM and such are in the first column.
17:54:18 <elliott> OK, this is slightly better.
17:54:50 <elliott> "DbD's Steve Jobs welcomes fans: http://i.imgur.com/nUtZK.jpg" Uh, that... doesn't look much like Jobs.
17:56:43 <elliott> http://sqlformat.appspot.com/
17:56:46 <elliott> Yay, I can just outsource the job.
17:57:35 <ion> Yeah, that doesn’t look like Jobs. This does. http://youtu.be/aeXXwQrQiPE
17:58:39 <elliott> fizzie: I don't suppose there's some "standard" way for making little subquery functions?
17:58:53 <elliott> I could factor out these awful "page creation time" and "page was deleted" things.
17:59:26 <fizzie> Of course not, though there are things that are somewhat more or less kinda-sorta partially compatible with Oracle's PL/SQL.
17:59:27 <elliott> Well, okay, I don't care how standard it is.
17:59:35 <elliott> Does MySQL have such a thing?
18:01:49 <fizzie> Actually I suppose plain SQL functions are a semi-standard thing.
18:02:03 <fizzie> And of course there are views.
18:02:22 <elliott> Friendship: Excellent, tell me about views. fizzie: Tell me about SQL functions.
18:02:49 <Friendship> elliott: http://lmgtfy.com/?q=sql+views
18:03:31 <elliott> That's not telling! That's pointing.
18:04:40 <fizzie> With a view you can make a complicated query into a sort-of-a virtual table thing, so that you can run further selects and such on it.
18:04:50 <elliott> Right, I don't think that's quite what I want though.
18:04:57 <elliott> The things I want to refactor are
18:04:58 <elliott> (SELECT MIN(a2.ar_timestamp)
18:04:59 <elliott> WHERE a2.ar_title = a1.ar_title
18:04:59 <elliott> AND a2.ar_namespace = a1.ar_namespace)
18:05:06 <elliott> parametrised on (a1.ar_title, a1.ar_namespace), and
18:05:14 <elliott> WHERE log_action = 'delete'
18:05:14 <elliott> AND (log_namespace = 0 OR log_namespace = 2)
18:05:14 <elliott> AND log_comment LIKE '%spam%'
18:05:14 <elliott> AND log_title = a1.ar_title
18:05:16 <elliott> AND log_namespace = a1.ar_namespace)
18:05:26 <elliott> parametrised on (a1.ar_title, a1.ar_namespace) again.
18:05:52 <Friendship> Yeah, views only let you factor out the constant bits.
18:06:15 <elliott> Friendship: Weeeell, I could make a deleted_for_spam table as a view, I think.
18:06:18 <elliott> Which would vastly simplify that part.
18:06:21 <elliott> And a page_creation_times table.
18:06:28 <elliott> But just making a function out of those two would be nicer...
18:06:41 <fizzie> A function is also something you can make, yes.
18:08:36 <elliott> When I do "CREATE FUNCTION", does that, like... store it?
18:08:40 <elliott> Because I only need it for this one thing.
18:09:29 <fizzie> CREATE FUNCTION creationtime(title <typeoftitle>, namespace <typeofnamespace>) RETURNS <typeoftimestamp> RETURN (SELECT MIN(ar_timestamp) FROM archive WHERE ar_title = title AND ar_namespace = namespace); could work.
18:09:49 <fizzie> DROP FUNCTION, I'd guesstimate.
18:10:45 <elliott> fizzie: Do I have to specify the size of the types?
18:10:49 <fizzie> There are temporary tables (persist for the connection, are automatically dropped then), but I'm not sure about temporary functions.
18:10:55 <elliott> I'm lazy and don't want to look up how big the namespace int is :P
18:11:11 <fizzie> I'd think conversions happen if they don't match exactly.
18:12:51 <fizzie> MySQL does have a compound statement thing which would let you do more complicated logic in a function, but for result-of-a-single-select I think just RETURN (query) should work.
18:13:40 <elliott> First things first though, time to negate the query and see what other patterns I can spot.
18:14:47 <elliott> -U, --i-am-a-dummy Synonym for option --safe-updates, -U.
18:15:02 <fizzie> Also INDENTATION http://sprunge.us/BEaN
18:16:15 <elliott> [elliott@dinky esowiki]$ ssh mysql esolang_wiki --html <spammers.sql >spammers.html
18:16:38 <fizzie> From dinky to solidity; that's progress.
18:17:32 <elliott> hey ais523, you have p7zip, right?
18:17:56 <ais523> I think I have some 7z-related program, but I think it's called something else
18:18:00 <elliott> err, do you have 7z(1), then?
18:18:19 <fizzie> "p7zip" has a 'p' for 'port'.
18:18:23 <ais523> I seem to have 7z and 7za
18:18:57 <elliott> ais523: how worky is your email?
18:19:22 <ais523> Yahoo! have a borked SSL cert for my usual method of accessing it
18:19:32 <ais523> I can access it via the web interface, but it's somewhat obnoxious
18:19:48 <ais523> as you can see from my emails to Agora
18:19:58 <ais523> (obnoxious on the recipients too)
18:20:51 <elliott> ais523: unobnoxious enough to download a single attachment?
18:21:05 <ais523> depends on how physically large it is
18:21:14 <ais523> if it's less than 20MB (possibly MiB), I should be able to manage it
18:22:47 <ais523> oh, @bham's working fine, but I'm increasingly trying to use it as a work email
18:22:55 <ais523> @yahoo is probably better
18:23:08 <elliott> OK, sent message to @yahoo
18:23:22 <ais523> I received it before your "OK, sent"
18:23:39 <elliott> it contains a list of users (+ id, email, realname and edit count) that the spammer query does /not/ catch
18:23:45 <elliott> it still has some obvious spam users in them with some obvious patterns
18:23:52 <elliott> including, I think, some that follow the patterns you discovered
18:23:52 <ais523> heh, Yahoo! went and scanned it with Norton
18:24:03 <elliott> and the pattern I couldn't manage to pin down earlier
18:24:55 <ais523> "\d+ buy .*" is an obvious uncaught pattern
18:25:07 <ais523> (err, make that "^\d+ buy"; I keep forgetting regexes need anchors)
18:30:09 * ais523 thinks that this conclusively establishes that there is /no/ channel I'm currently in that's potentially safe from NetHack references
18:32:07 -!- Phantom_Hoover has quit (Remote host closed the connection).
18:34:27 -!- Phantom_Hoover has joined.
18:36:58 <elliott> 2010$username$email$firstname $lastname0
18:37:01 <elliott> behold, one of our actual users
18:40:49 -!- Frooxius has quit (Quit: ChatZilla 0.9.88-rdmsoft [XULRunner 1.9.0.17/2009122204]).
18:40:53 <ais523> I wonder if $username made any edits replacing the page with $page, with summary $summary
18:41:02 <ais523> check the deleted history of $title :)
18:41:19 -!- Frooxius has joined.
18:53:55 <elliott> fizzie: Why's this query returning ~every user:
18:53:55 <elliott> select user_id, user_name, user_email, user_real_name, user_editcount
18:53:56 <elliott> where exists (select 1 from user u2 where u2.user_id != u1.user_id and
18:53:56 <elliott> left(replace(u2.user_email,'.',''),locate('@',replace(u2.user_email,'.',''))) =
18:53:57 <elliott> left(replace(u1.user_email,'.',''),locate('@',replace(u1.user_email,'.','')))
18:58:52 -!- PiRSquared17 has quit (Read error: Connection reset by peer).
18:58:55 <elliott> ais523: OK the SQL debugging falls to you :P
18:59:46 <fizzie> I suppose you've checked what the subselect returns for some J. Random User?
19:00:06 <elliott> fizzie: You suppose wrong!
19:00:38 <fizzie> It does look like a reasonable "thing before the @, disregarding dots" comparison.
19:01:33 <elliott> Is (NULL = x) true for some reason?
19:01:50 <ais523> oh, I think it might be
19:02:06 <fizzie> I don't think it is. In fact, I don't think null = null is true either.
19:02:19 <ais523> right, I knew it had some special behaviour with comparisons
19:02:29 <ais523> oh, is this MySQL, which doesn't distinguish between NULL and ''?
19:03:10 <elliott> mysql> select left(replace('ab@c','.',''),locate('@',replace('ab@c','.','')));
19:03:10 <elliott> +-----------------------------------------------------------------+
19:03:11 <elliott> | left(replace('ab@c','.',''),locate('@',replace('ab@c','.',''))) |
19:03:11 <elliott> +-----------------------------------------------------------------+
19:03:11 <elliott> +-----------------------------------------------------------------+
19:04:13 <kmc> are you working on a SQL-based esolang?
19:05:21 <ais523> nah, he's trying to delete all the spambots from Esolang's users tables
19:08:04 <elliott> fizzie: Maybe it's going wrong because one person has an empty email or something?
19:09:16 <fizzie> Maybe, though purely going by logic I think it should work. If one person has an empty email, left(replace(u2.user_email,'.',''),locate('@',replace(u2.user_email,'.',''))) for that one person should just be '', in which case it shouldn't match the non-'' thing returned for u1.user_email.
19:09:53 <fizzie> Do you have any empty emails? select count(*) from user where user_email = '' or user_email is null?
19:10:35 <elliott> I don't know whether they end up empty or null, is that important?
19:10:51 <fizzie> Not that I know of, though null is admittedly more special.
19:11:05 <fizzie> Still, I think that should at most lead it to report every emailless person.
19:11:15 <fizzie> As long as there's >1 such.)
19:11:15 <elliott> +-------------------------------------------------------------+
19:11:16 <elliott> | left(replace(null,'.',''),locate('@',replace(null,'.',''))) |
19:11:16 <elliott> +-------------------------------------------------------------+
19:11:16 <elliott> +-------------------------------------------------------------+
19:11:33 <elliott> fizzie: It reports a bunch of emailful and emailless users
19:12:32 <elliott> There are indeed two rune@* users.
19:18:59 <elliott> [[::If the program halts, it'll print 0, then eventually erase that and print 1. If the program doesn't halt, it'll print 0 and loop forever. So at any given point before it replaces the 0 with a 1, you can't tell whether it's going to halt or not, and since nonhalting programs never halt, you'll never be able to say for sure whether that 1 will eventually show up. So this doesn't solve the halting problem.]]
19:19:04 <elliott> this person does not seem to understand twoducks at all
19:25:17 <ais523> it's confusing time with metatime
19:44:17 <ais523> hmm, I think that person is actually trying to apply the Feather time-travel model to TwoDucks
19:49:28 <Sgeo> There's at least one person who knows the Feather time-travel model?
19:50:02 <ais523> oh, it has a very simple time travel model (it's basically meta-timeline)
19:52:00 <elliott> "Veoh is a Flash video site relying on user contributed content. IO Group argued that since Veoh transcoded user uploaded videos to Flash format it became a direct infringer and the materials were under their direct control, thereby disqualifying them for DMCA safe harbor protection."
19:52:17 <ais523> I hope they didn't /succeed/
20:01:08 -!- oerjan has joined.
20:03:04 <fizzie> I, uh, doesn't YouTube transcode too?
20:05:30 <ais523> this is as crazy as the "it made a copy in memory" thing that Blizzard made to stick when they were suing Glider
20:08:08 <fizzie> Copies in memory are quite a popular thing to include, I believe.
20:12:13 <elliott> Hey fizzie, look what you have wrought: http://sprunge.us/JXgX
20:29:43 <elliott> fizzie: So, erm, would you hate me if I asked more SQL questions?
20:33:13 <oerjan> SQLing is a bannable offense.
20:34:08 <elliott> oerjan: Is deleting spammers?
20:34:30 <oerjan> ah. i guess in that case it counts as justified.
20:35:27 <oerjan> (what is the english term for a law not applying because of overriding emergency concerns?)
20:35:53 <ais523> there's "duress", but that's when something's legal because you did it with a gun to your head
20:35:58 <ais523> (and someone else was pointing the gun)
20:36:23 <oerjan> maybe the english/americans don't _have_ such a thing, and that's why their laws are so insane.
20:36:58 <elliott> exceptional circumstances?
20:37:03 <elliott> hmm, apparently not: http://en.wikipedia.org/wiki/Exceptional_circumstances
20:37:31 <oerjan> hm maybe i should try to look up the norwegian term and see if there's an interwiki link
20:38:30 <oerjan> "necessity", apparently
20:39:12 <oerjan> "Except for a few statutory exemptions and in some medical cases [1] there is no corresponding defense in English law."
20:39:27 <oerjan> so it's just the english that are insane, not the americans, check.
20:42:06 * oerjan thinks he may have insulted someone.
20:43:59 <oerjan> "However case law suggests necessity is narrowed to medical cases."
20:44:11 <oerjan> so the US is maybe not that different anyway.
20:48:57 <oerjan> hm, the first time cube quote above could be interpreted as true.
20:54:17 <elliott> 02:05:11: <pikhq> I've heard the Das Keyboards are actually rather high-quality keyboards, though...
20:55:42 -!- augur has quit (Remote host closed the connection).
20:55:46 <elliott> oerjan: If you don't wake fizzie up, you'll have to answer my SQL questions.
20:56:18 <elliott> 02:10:11: <kmc> that and people who just want a keyboard with serious tactile response
20:56:18 <elliott> 02:10:21: <kmc> there are a few others in that category
20:56:28 <elliott> kmc: There are many others in that category, and they're all better than Das
20:56:49 <oerjan> fizzie: WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKE UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPPPPPPPPP!!!!!!!!!!!!!!!!!!!!!!!!!!!!111111111111111ELEVEN
20:57:06 <olsner> oh, are we talking about keyboards now?
20:57:13 <oerjan> the threat might be more effective if i actually knew SQL.
20:57:35 -!- monqy has joined.
20:57:47 <elliott> oerjan: You'll have to learn it.
20:58:08 <elliott> 02:13:00: <kmc> i wonder which switch technology is used in the Kinesis Advantage
20:58:09 <elliott> 02:13:12: <kmc> it's pretty loud and has decent feedback
20:58:28 <elliott> They're like the Blues (as used, badly, in the Das) but without the explicit click and slightly lighter feedback.
20:58:49 <elliott> 02:17:39: <pikhq> zzo38: What, the Happy Hacking? Those things are... Meh.
20:58:53 <elliott> They use Topre switches, though.
20:59:05 <elliott> 02:19:15: <pikhq> They're more-or-less laptop-layout boards.
20:59:06 <elliott> 02:19:20: <pikhq> With dome switches.
20:59:28 <elliott> (Some of the Happy Hacking models use rubber dome, but they're not the ones everyone knows.)
21:01:35 <elliott> oerjan: I'll keep talking about keyboards if you don't answer my SQL questions :'9
21:02:58 <oerjan> i _said_ i don't know SQL
21:04:39 <oerjan> if i can tune out linux administration talk, i can tune out keyboards.
21:06:43 <elliott> fizzie: So, say I have a SELECT query. I also have a list of (table,column)s. Those columns contain references to user_ids. I want to update all those columns to set the user_id to 0, wherever they're equal to a user_id returned by that SELECT query.
21:07:10 <elliott> I could do "UPDATE table SET column = 0 WHERE column = (SELECT user_id FROM user WHERE <myquery>)" but that'd duplicate the query across every (table,column) pair, and be really slow.
21:08:52 <elliott> fizzie: (If this somehow helps things, I would like to delete the user records in question at the end.)
21:09:05 <elliott> Should I create a view on users or something? Would that cache the results?
21:09:18 <oerjan> <fizzie> ais523: With unbounded tape cells, I wouldn't bet on that. I mean, it wouldn't surprise me if the TC three-cell brainfuck construction always knew in which cell it is.
21:09:28 <kmc> good to know
21:09:49 <oerjan> of course. i couldn't even find a way to use unbalanced loops usefully with that few cells.
21:10:55 <oerjan> (i certainly tried, during my failed attempt to implement a halting condition when each fractran rule had its own loop)
21:11:28 <fizzie> elliott: Well, uh. Probably a temporary table of the list of user_id's you want to zero would be nice, then you could quite efficiently zero those, maybe with the UPDATE ... FROM thing or some-such.
21:12:30 <elliott> fizzie: I'd need a join of some sort to the temporary table, right?
21:12:34 <fizzie> elliott: If the database in question had proper foreign keys and those had ON DELETE SET DEFAULT behaviour and all your columns had a default of zero, then just deleting the user rows would automagically do the right thing, but I doubt MediaWiki does that. Historically MySQL and FOREIGN KEYs have been kinda iffy.
21:12:53 -!- kmc has quit (Quit: Leaving).
21:13:02 <elliott> Yes, I don't think MediaWiki does the "relational integrity" thing.
21:13:21 <fizzie> UPDATE ... FROM basically joins the update table with the FROM-list items. If it's a regular (inner) join, you'll get one updated row for each item in your list of userids.
21:13:39 <elliott> Oh, I didn't even know there was an UPDATE ... FROM.
21:14:11 <fizzie> Probably "WHERE column IN (SELECT user_id FROM mylistofbadguys)" or some-such might also work. I forget how that is spelled, exactly, but anyway.
21:14:44 <elliott> Let's deprecate UPDATE FROM!
21:14:44 <elliott> I guess that many people using UPDATE … FROM on a daily basis do so without being aware that they are violating all SQL standards."
21:15:08 <elliott> fizzie: MySQL doesn't have UPDATE FROM.
21:15:16 <elliott> It's a Microsoft thing, apparently.
21:15:26 <fizzie> Well, it's not a Microsoft-*only* thing.
21:15:28 <fizzie> "When a FROM clause is present, what essentially happens is that the target table is joined to the tables mentioned in the from_list, and each output row of the join represents an update operation for the target table. When using FROM you should ensure that the join produces at most one output row for each row to be modified. In other words, a target row shouldn't join to more than one row from the other table(s). If it does, then only one of the ...
21:15:35 <fizzie> ... join rows will be used to update the target row, but which one will be used is not readily predictable.
21:15:37 <fizzie> Because of this indeterminacy, referencing other tables only within sub-selects is safer, though often harder to read and slower than using a join."
21:16:03 <elliott> MySQL has... transactions, right?
21:16:22 <fizzie> Yes, though I'm not entirely sure what kind of.
21:16:36 <elliott> I don't suppose there's a way to clone a table's schema under a different name.
21:16:39 <elliott> (To be my temporary table.)
21:17:00 <fizzie> You can generate a temporary table as the result of a select. If you select *, it clones all columns.
21:17:01 <elliott> I guess that's what views are for.
21:17:08 <fizzie> (If you select less, then you'll get less.)
21:17:14 <elliott> CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
21:17:14 <elliott> { LIKE old_tbl_name | (LIKE old_tbl_name) }
21:18:57 <fizzie> I suppose you actually need to create it if you use the "INSERT INTO table SELECT ..." syntax.
21:19:12 <elliott> Ooh, you can update multiple tables in one UPDATE?
21:20:30 <fizzie> Oh, right; yes; so it's part of CREATE TABLE syntax.
21:20:40 <fizzie> "CREATE TABLE new_tbl SELECT * FROM orig_tbl;"
21:20:51 <fizzie> Or CREATE TEMPORARY TABLE if you want it to auto-drop when you disconnect.
21:21:22 <fizzie> If you don't list any columns after new_tbl, the names and types will be taken from whatever the select returns.
21:24:16 <fizzie> Anyway, the sub-select in an UPDATE statement's WHERE term should return just one line if you're testing it with =; so I think it'd be something slightly ridiculous like UPDATE table SET column = 0 WHERE column = (SELECT user_id FROM badguys WHERE user_id = column) or then with the IN operator as in UPDATE table SET column = 0 WHERE column IN (SELECT user_id FROM badguys).
21:24:26 <fizzie> No idea which one's faster.
21:24:39 <Phantom_Hoover> OK guys official announcement, Whitespace is now The Worst Thing.
21:25:22 <ais523> butohdearhowamIgoingtowritelegiblynow?
21:25:32 <elliott> Here's what I currently have (although me and ais523 have agreed to tweak what it does slightly).
21:26:10 <elliott> That will take the user count down to 1432.
21:26:21 <elliott> Then we'll need YOUR HELP(tm) rounding up the remaining spambots.
21:27:37 <fizzie> http://p.zem.fi/651r -- can't tell which one of those would be better even with plans, though obvsly your statistics would differ also. (That's a bit of a nonsense example.)
21:29:08 <fizzie> Anyway at least with "in (select ...)" where ... doesn't depend on the particular row it's only doing the sub-select once.
21:29:27 <fizzie> (On the other hand, in the second the subquery is just an index check.)
21:29:35 -!- zzo38 has joined.
21:30:44 <elliott> http://behappyandjoyful.com/
21:31:10 <fizzie> Doesn't MediaWiki have some sort of a defined process of "do this if you want to programmatically remove a list of users" as opposed to manually setting a bunch of columns to zero? (Or is that in fact the process?)
21:31:10 <elliott> fizzie: What's the bestest name to give all the spambots?
21:31:26 <elliott> fizzie: It doesn't really support deleting users in any sort of official capacity.
21:31:40 <elliott> That (table, column) was a-stolen from the "Merge User and Delete" extension.
21:31:43 <fizzie> Oh. I suppose that's some kind of a philosophical thing.
21:31:55 <elliott> It just can't really do it.
21:32:11 <elliott> I think they consider it too brittle too bother with.
21:32:49 <elliott> Though I think there *is* a "delete unused accounts" script.
21:32:56 <elliott> But that thing doesn't have to bother updating any columns, by definition.
21:33:21 <elliott> fizzie: Anyway, like I said, we're actually going to set them to something other than zero.
21:33:32 <elliott> We're going to register a new user, and merge all the things the spammers did into that one.
21:39:03 <elliott> <elliott> fizzie: What's the bestest name to give all the spambots?
21:39:14 <elliott> ais523: comedy option: "MediaWiki default"
21:39:25 <ais523> elliott: oh no, seriously oh no
21:39:35 <ais523> I like "deleted spambot account"
21:39:44 <elliott> We don't know they're all bots!
21:40:38 <elliott> oh, since we're handling the tables properly, this means we can extend it to those with undeleted edits
21:41:18 <fizzie> It's not a "deleted spambot account" if it's not deleted.
21:41:23 -!- Jafet has quit (Quit: Leaving.).
21:41:34 <elliott> It's the account for deleted spambots.
21:42:25 <fizzie> "Esoteric Marketing Department". Well, maybe not.
21:43:46 <elliott> ais523: hmm, can you think of any way to make the 3-duplicate-emails thing less likely to have false positives?
21:43:51 <elliott> I realise it almost certainly has none
21:43:57 <elliott> but it's the only clause that I'm not completely sure about
21:44:03 <ais523> make it 4 duplicate emails?
21:47:42 <oerjan> hm is this when 4 accounts have the same email?
21:48:32 <oerjan> if none of them have non-deleted edits you should be pretty safe, i'd think
21:48:39 <elliott> that criterion isn't part of it, no
21:48:47 <elliott> we've found several legit users with 2 accounts with the same email (me, ais523, evincar, Sgeo)
21:49:26 <ais523> so why are Sgeo's accounts called Sgeo2 and Sgeo3?
21:49:46 <ais523> or does Sgeo[1] have a different email?
21:50:40 <elliott> hmm, verified that all users with exactly 3 accounts with the same email are spammers
21:50:52 * elliott verifies that all users with exactly 4 accounts with the same email are spammers
21:51:00 <elliott> that way, we can just use more-than-2 accounts as the criterion and be as safe
21:52:10 <oerjan> elliott: you could call the account "Sir Spamalot"
21:52:29 <oerjan> although i'm sure i've seen that somewhere
21:52:33 <elliott> ais523: meh, I feel safe in saying that no legitimate user would have more than 4 accounts with the same email
21:52:47 <ais523> yep, that would seem reasonable
21:52:48 <oerjan> well, there's a monty python musical
21:52:59 <elliott> and since I just manually verified 3 and 4, we can delete all users with more than one duplicate
21:54:35 <elliott> ais523: hmm, are parens valid in usernames?
21:54:53 <ais523> anything that's valid as a page name is IIRC valid as a user name
21:55:03 <ais523> (someone want to register User:///?)
21:55:20 <elliott> I was thinking (deleted spam user)
21:55:54 <oerjan> i cannot understand elliott's recent allergy to puns
21:56:08 <oerjan> (WHAT DO YOU MEAN YOU'VE ALWAYS HATED THEM?)
21:57:48 <elliott> ais523: hmm, MW appears to be inconsistent about using "user" vs. "account"
21:58:23 <ais523> would you expect it to be consistent?
21:58:41 <elliott> well, no, but I'd hope it to be
21:59:03 <elliott> "The MediaWiki default user preferences are in the language file, i.e. languages/Language.php if you're using English."
21:59:08 <fizzie> elliott: "Spam: Coarse, Uncut". (Coarse, uncut is an anagram for user account.)
21:59:49 <fizzie> Okay, maybe it's a bit too "subtle".
22:00:30 <elliott> fizzie: Do you have any serious suggestions that don't include the OMGINACCURATE "deleted" part? :p
22:01:10 <oerjan> you _are_ merging them, after all.
22:01:44 <shachaf> elliott: Hey, you like really horrible nonsense articles about monads, right?
22:01:51 <shachaf> Did you see today's entry in the competition?
22:02:07 <elliott> And yes. In reverse order.
22:02:23 <ion> Heh. In reverse order.
22:02:47 <shachaf> http://the-27th-comrade.appspot.com/blog/ahJzfnRoZS0yN3RoLWNvbXJhZGVyDAsSBUVudHJ5GOFdDA
22:02:54 <ais523> there's a horrible nonsense articles about monads competition?
22:03:11 * ais523 notes that threatening to write a monad tutorial is about the worst threat you can make against elliott
22:03:25 <elliott> [[So, to prove this ridiculous statement, I told him (upper-right corner): “Monads are conditional function calls.”]]
22:03:34 <elliott> Mmm, that feeling of murderous rage in the morning.
22:03:46 <elliott> (It's the day, in reverse order.)
22:03:48 <shachaf> We need to write a monad tutorial generator.
22:03:57 <ais523> wow is that font size obnoxious
22:04:06 <elliott> "In Haskell, one example of a monad is the Maybe anythingElse type. It has two possible values: Nothing and Just anythingElse."
22:04:10 <elliott> Two possible values! As long as anythingElse has one.
22:04:30 <shachaf> elliott: Are you going to quote every wrong statement in there?
22:04:34 <elliott> "So, you see that what increased the cyclomatic complexity of pymon has been achieved in Haskell without any increase in cyclomatic complexity."
22:04:38 <elliott> shachaf: No, that would be too many.
22:05:18 <ais523> elliott: you don't have to write if statements that check for nullness explicitly because you can use (>>=) instead; this saves you a level of indentation
22:05:20 <elliott> "And so … you have been using monads in Python, all along sneering at the “smug Haskell douchebags who brag about the size of their gonads or something”. You are one of them."
22:05:20 <elliott> The problem with micropayments is that they give things to things you like.
22:05:29 <elliott> Everyone is required to put a microhurtment button on their site.
22:05:34 <ion> Micropayments are basically a conditional function call.
22:05:35 <ais523> (because you use Python and thus have to indent your if statements)
22:05:41 <elliott> Whenever anyone clicks it, it costs them a small amount of money, and delivers a small, painful electric shock to the author of the article.
22:06:00 <shachaf> I was with you until the "small".
22:06:19 <ion> Well, you’ll also have macropayments for big electric shocks.
22:06:37 <elliott> Even this guy's name and blog title are obnoxious.
22:06:48 <ais523> elliott: it'd make it possible for DOSes (or dDOSes) to kill people, probably
22:06:57 <ais523> I don't want that much power in the hands of Anonymous
22:07:08 <shachaf> elliott: Want more irritating articles about Haskell?
22:07:19 <shachaf> Apparently today/yesterday was unusually productive.
22:07:24 <elliott> ais523: No, to enter the microhurtment system you have to pay slightly more than the average monthly allowance of a US teenager.
22:07:51 <ais523> OK, "Even simple, direct, applicable understanding of monads is a Monad" is the point where I decided the article was complete bunk after all, rather than merely incorrectly worded
22:08:25 <elliott> ais523: You missed the part where monads aren't conditional function calls, and pymon doesn't actually implement (>>=) on Maybe.
22:08:48 <ais523> elliott: I saw that line, and assumed it was backwards, "some subset of conditional function calls are monads"
22:08:51 <shachaf> And also the part where everything else in the article is wrong.
22:09:16 <shachaf> elliott: Here's the other article: http://williamedwardscoder.tumblr.com/post/18319031919/programming-language-readability
22:09:25 <ais523> is the mistake in pymon that it's missing a "then Nothing"? or something worse than that?
22:09:55 -!- Vorpal has quit (Ping timeout: 276 seconds).
22:10:02 <elliott> ais523: Well, Python's None is not comparable to Maybe's Nothing.
22:10:10 <elliott> There's no value to represent "Just Nothing".
22:10:14 <monqy> "Even simple, direct, applicable understanding of monads is a Monad: if you grok, apply." what
22:10:25 <shachaf> Also Python's if is about "falsiness", not about "Noneness".
22:10:35 <ais523> elliott: I'd still say they're comparable, even though they're not quite equivalent
22:10:36 -!- derdon has joined.
22:10:43 <elliott> ais523: No.Consider that you can also write a monad as return, fmap, and join. You can't do that for None Python:
22:10:53 <elliott> def return(x): return x # incorrect on None
22:11:02 <ais523> they are plainly similar enough to compare, in fact you're doing that right now
22:11:04 <ais523> so how are they not comparable?
22:11:11 <shachaf> They're comparable in a few ways that have nothing to do with monads.
22:11:16 <elliott> Everything is "comparable".
22:11:20 <elliott> They are not comparable enough.
22:11:22 * shachaf compares elliott and oranges.
22:11:34 <elliott> In fact, they can be compared in such a way that proves that one isn't a mond.
22:11:47 <shachaf> elliott: def join(x): return x
22:11:52 <ais523> shachaf: elliott's been online more recently than oranges
22:12:05 <ais523> (in fact, oranges hasn't been around for almost two years)
22:12:25 <shachaf> 14:11 <preflex> oranges was last seen on ##c 1 year, 112 days, 10 hours, 24 minutes and 55 seconds ago, saying: declare argv as const array of pointers to char
22:12:39 <elliott> shachaf: Oh, but this guy is clearly an expert. "Node.js is Bad Ass Rock Star Tech", says he.
22:12:54 <ais523> shachaf: err, wow, how did you guess what channel oranges would have been in so you could ask a bot?
22:13:05 <elliott> preflex is in tons of cahnnels.
22:13:26 <elliott> ais523: It was when mauke was here.
22:13:32 <ais523> in fact, preflex and I don't share a channel
22:14:20 <shachaf> ais523: I guess you aren't in any of the cool channels.
22:14:34 <ais523> nah, I guess /preflex/ isn't
22:15:39 <ais523> btw, I was trying to implement typed underload in Anarchy
22:15:48 <ais523> I think it worked, but lacking an Anarchy compiler, I'm not sure
22:16:01 <ais523> then I tried to compile to OCaml by hand, which is what lead to the discussion we had a few days ago
22:16:30 <monqy> was it a good discussion
22:16:59 <ais523> I think so, although it was mostly just me
22:17:19 <HackEgo> 321) [After a long monologue] <oklopol> i think i have to escape this heated discussion before it becomes a flamewar
22:17:23 <ais523> oerjanswap had a really neat-looking type, even if it was the wrong type
22:18:10 <ais523> elliott: what's your opinion on the code formatting thing
22:18:58 <elliott> oh, i read the start of it and decided it was too stupid to keep reading further
22:19:01 <ais523> it shows some signs of being an unfair comparison
22:19:22 <elliott> "If a list comprehension or something isn’t obvious, you could just rewrite the Python in a less-pretentious way and recover this readability."
22:19:34 <elliott> it's almost as if this is a bullshit argument for readability and applies to basically every language, including Haskell
22:19:41 <shachaf> Every other sentence there is wrong.
22:19:43 <elliott> "'The Python has indent and this is important to speed-reading"
22:19:53 <elliott> "Second is the use of short words instead of symbols."
22:19:56 <elliott> just like 90% of the haskell!
22:20:00 <shachaf> I thought elliott would appreciate it, but I guess he's grown wiser.
22:20:08 <elliott> "Python goes further than most to use short concise words; COBOL used long words"
22:20:13 <ais523> the Haskell contains a lot of technically unnecessary stuff that could have been written in the Python but wasn't
22:20:15 <elliott> True, yes, Python is more readable than COBOL. Is this article Python vs. COBOL?
22:20:23 <ais523> (apart from type signatures, that I guess you could put in the docstrings)
22:20:25 <elliott> "Python is so readable because of significant whitespace, its conciseness and use of small words instead of symbols."
22:20:30 <shachaf> ais523: The two pieces of code do very different things.
22:20:32 <ais523> I think the Python there looks neater than the Haskell there
22:20:33 <elliott> You know, all things that Haskell has (except sometimes it uses symbols).
22:20:37 <ais523> but that's because it's an unfair comparison
22:20:47 <shachaf> Here's a slightly fairer comparison to the Python code: https://github.com/rostayob/haskell-readability/blob/master/haskell-readability.md
22:20:51 <elliott> Yes, it looks like the two code samples are completely incomparable.
22:20:57 <elliott> Do they even achieve the same task?
22:21:09 <elliott> "Haskell is doing neither of these." You listed three, moron.
22:21:17 <elliott> "Most of the training material on Haskell that I’ve read is aimed at students with no prior programming experience."
22:21:20 <ais523> elliott: sort-of, the codes look like they're both used for the same purpose
22:21:24 <elliott> Yes, just like LYAH and RWH! Which are... both targetted at people who know how to program.
22:21:28 <elliott> As is the Wikibook (IIRC).
22:21:30 <elliott> As is Write Your own Scheme.
22:21:36 <elliott> As is this person is a complete idiot.
22:21:44 <elliott> "You can make functional languages in the Python readability style; you don’t have to try so hard to look like algebra. You can make static fast languages in Python readability style too."
22:21:51 <elliott> Links to his own post on "his dream programming language"; -1, Troll.
22:21:59 <elliott> "There are as many new languages as ever; my dream programming language post got suggestions other than Haskell, including Rust, D and Tart. Those three are curly bracket languages again though. Big opportunity miss."
22:22:08 <elliott> "I lament that all languages aren’t trying to be readable the Python way; to my thinking, it ought to be goal number 0."
22:22:18 <elliott> -1, Starting Lists From 0 To Make You Look Like A True Hacker
22:22:30 <elliott> "The Haskell goes on to use Levenshtein distance - edit distance - (here) to offer spelling corrections. Interestingly, Dr Pete Norvig has written a neat essay on this with Python source-code. Lets focus on readability over algorithm. Compare and contrast them too."
22:22:35 <elliott> -1, This Is Becoming Completely Irreleavnt
22:22:37 <ais523> a reviewer for a paper I wrote actually complained that I started numbering at 0
22:22:48 <ais523> even though 0 was different from 1, etc., as it was the thing I was trying to prove about
22:23:00 <elliott> "As usual, tangents spring to mind: TDD evolving solutions is really paralleled in my old adventures in genetic programming and also Kolmogorov Complexity."
22:23:09 <elliott> -1, Crank/Idiot (Can't Tell Which)
22:23:30 <elliott> "(This post is inspired to explain why “looks like Python” is all through my dream programming language requirements. If you liked this, you may also like the rest of the blog ;) )"
22:23:42 <elliott> "[Every blog post contains a small word-misuse for the grammar glue-chewers; this post its bare instead of bear. Do tell me if you spot any others that are accidental :) ]"
22:23:43 * ais523 wonders if cyclomatic complexity is actually useful
22:23:48 <elliott> Final Score: -238947928349234789234
22:23:59 <ais523> now I'm trying to figure out if "its" was deliberate or not there
22:24:48 <shachaf> ais523: Given all the other mistakes in that post, does it really matter?
22:25:15 <ais523> shachaf: yes, in the "now I'll never know" sort of way
22:25:19 <monqy> what other mistakes
22:25:26 <elliott> fizzie: You complained that "Deleted spam account" is inaccurate.
22:25:34 <elliott> YOU HAVE YET TO PROPOSE A SERIOUS ALTERNATIVE :'(
22:25:59 <fizzie> elliott: I don't have alternatives, I just like to complain.
22:26:22 <elliott> fizzie: Sorry, I may have given the impression that giving an alternative was optional.
22:26:42 <shachaf> fizzie: You don't gotta give no alternative.
22:27:00 -!- Phantom_Hoover has quit (Read error: Connection reset by peer).
22:27:33 <shachaf> elliott: Did you know HURD in GNU/HURD stands for "HIRD of Unix-Replacing Daemons"?
22:27:40 <fizzie> ais523: SDCC has a "report cyclomatic complexity" option, the stated purpose of which is to select "bad" functions for simplification/had-assemblying. Not that that's any evidence for usefulness or anything.
22:28:04 <elliott> oerjan: I DIDN'T ASK FOR NON-SERIOUS SUGGESTIONS ;_;
22:28:15 * oerjan swats elliott -----###
22:28:31 <fizzie> I liked the hive mind. :/
22:28:34 <shachaf> > repeat '-' ++ repeat '#'
22:28:35 <lambdabot> "--------------------------------------------------------------------------...
22:30:26 <elliott> Okay, now y'all gotta vote: Deleted spam account, Deleted spam user, Deleted spam user account, Spam user, Spam account, Spam user account
22:30:37 <oerjan> > fix ((repeat '-'++).(>>repeat '-')) ++ repeat '#'
22:30:38 <lambdabot> "--------------------------------------------------------------------------...
22:31:28 <oerjan> (i _think_ that maybe omega^omega '-'s)
22:31:50 <monqy> that's a lot of '-'s
22:32:25 * shachaf has no idea what we're voting on.
22:32:58 <elliott> shachaf: Yes, that's why you're not allowed to vote.
22:32:59 <oerjan> elliott: TOO SERIOUS TO CARE
22:33:01 <elliott> Also, that's not a valid option.
22:33:05 <elliott> oerjan: VOTING IS NON-OPTIONAL
22:33:46 <elliott> ais523: fizzie: Vote or experience mild discontent.
22:34:04 <elliott> Actually I hereby remove "Deleted spam user account" from the vote.
22:34:17 <fizzie> oerjan: Here's csh's opinion on your swatter:
22:34:18 <fizzie> % If I had a ( for every - in oerjan-swatter, what would I have?
22:34:45 <ais523> but I don't have a strong preference
22:35:05 <fizzie> I'll vote whatever ais523 voted, maybe that way we'll be rid of this whole naming thing?
22:35:12 <elliott> No no no. That's not allowed.
22:35:21 <elliott> Voting with explicit justification of vote being to end the vote is totally banned now.
22:35:28 <shachaf> Hey, why is oerjan getting the credit for that swatter?
22:35:36 <ais523> actually, I changed my mind, I endorse eelpout
22:35:57 <fizzie> elliott: Oh, I thought you meant multiple votes of one opinion was not allowed. That would be an... interesting voting scheme.
22:35:59 <shachaf> elliott: I vote for cadmium.
22:36:12 <Friendship> I vote for "Annihilated atopical advertisement-oriented client configuration"
22:36:17 <zzo38> What exactly are we supposed to vote for?
22:36:18 <monqy> what's eelpout can I vote for it
22:36:28 <ais523> zzo38: what user to mark edits made by spambots as having been made by
22:36:38 <oerjan> shachaf: i increased the ordinal number of '-'s greatly
22:36:59 * ais523 hits oerjan with a swatter with nineteenth -s
22:37:05 <zzo38> An invalid IP address.
22:37:08 <elliott> REMINDER: THE VALID OPTIONS ARE: Deleted spam account, Deleted spam user, Spam user, Spam account, Spam user account
22:37:14 <elliott> monqy is now a valid option.
22:37:27 <shachaf> oerjan: Your version uses more memory than mine, so the process would be terminated sooner.
22:37:48 <fizzie> % Describe the dash-count of oerjan's swatter, please.
22:37:52 <zzo38> Deleted spam user account.
22:38:04 <ais523> elliott: what do you think of zzo38's suggestion of an invalid IP address? it's quite clever
22:38:07 <shachaf> Wait, can I change my vote to zzo38?
22:38:11 <elliott> ais523: it's as clever as it is confusing
22:38:23 <elliott> zzo38: But I removed that option :(
22:38:39 <monqy> i;m also voting for hello
22:38:51 <zzo38> elliott: Why? Is the name too long to fit in MediaWiki?
22:38:52 <monqy> and stop using cologne blue
22:39:06 <elliott> zzo38: I don't like it, because it's too many words. :(
22:39:12 <zzo38> Deleted spam account.
22:39:24 <elliott> --THE VOTE IS NOW CLOSED--
22:39:34 <elliott> Thank you for participating. Well, thank the people who participated for participating.
22:40:14 <shachaf> elliott: Did anyone participate?
22:40:26 <shachaf> Also, open the votes so my suggested can get in.
22:40:28 <ais523> shachaf: my client can't really render the crossed-out m properly
22:40:49 <ais523> also, is there actually a combined character for doing that, or is that some sort of cunning combination of multiple combining characters?
22:40:54 <ais523> (the m doesn't fit in the circle)
22:41:16 <oerjan> my client doesn't see any strange char at all
22:41:38 <monqy> <marquee>helloerjan</marquee>
22:41:51 <elliott> <script>alert("hi")</script>
22:41:56 <ais523> elliott: did you ever look at that log where we XSSed oerjan?
22:42:03 <elliott> <script>location.href="http://goat"</script>
22:42:14 <shachaf> Sounds like a toerjan horse
22:42:27 <ais523> "troerjan" would work better, I think
22:42:32 <ais523> also, is http://goat a valid URL?
22:42:40 <ais523> it's missing the TLD, I think
22:42:46 <elliott> ais523: It is if goat becomes a TLD.
22:42:46 <oerjan> if you ever get me with that, there will be some banning around here.
22:42:47 <ais523> (and some would be goatse, and some wouldn't)
22:42:52 <elliott> Which it will be, one day.
22:43:05 <ais523> elliott: that's a surprisingly bold statement to make
22:43:08 <elliott> oerjan: Is there ever not banning around here when we inconvenience you in some way?
22:43:10 <fizzie> ais523: Many resolvers will add the local domain or whatever's in the search path; and how many networks there are without a goat?
22:43:14 <elliott> ais523: You haven't seen my life plan.
22:43:20 <oerjan> elliott: very observant.
22:43:25 <elliott> The last step is to pay a lot of money to register goat as a TLD
22:43:44 <elliott> oerjan: By the way, I just made you a sysop.
22:43:47 <shachaf> "A room without books is like a network without a goat" -- Cicero
22:43:47 <ais523> elliott: please don't actually do that
22:44:00 <oerjan> elliott: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA OK
22:44:11 <shachaf> > 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
22:44:12 <lambdabot> 102609391136443956281976666927457327617395154350170434031115347406889900446...
22:44:24 <elliott> ais523: What, it's helpful!
22:44:38 <ais523> elliott: but it's not helpful /enough/
22:45:03 <elliott> OK, I'll crat him instead.
22:45:14 <ais523> oh, I was referring to the goat thing
22:45:21 <ais523> not the sysopping oerjan thing
22:45:35 <ais523> what did you /think/ I meant?
22:45:41 <ais523> I'm fine with sysopping oerjan
22:45:53 <elliott> ais523: But what if I want to register goat as a TLD?
22:46:00 <monqy> it would be helpful
22:46:05 <ais523> monqy: but not helpful /enough/
22:46:31 <elliott> things don't have to be helpful!
22:46:41 <elliott> If I want to register goat and put, e.g. a picture of a goat there, that's totally OK.
22:46:53 <ais523> that is not what TLDs are designed for!
22:47:01 <ais523> stop polluting the TLD namespace!
22:47:10 <monqy> goats aren't polution
22:47:24 <elliott> ais523: icann decided thats what they were for
22:47:30 <elliott> and if companise are allowed to
22:48:09 <elliott> hey ais523, "Deleted spam account" or "Deleted spam user"?
22:48:15 <elliott> & furthermore why (500 word minimum)
22:48:20 <shachaf> Apparently some squatter is squatting goat.ee
22:48:29 <shachaf> elliott: I thought voting was closed.
22:48:32 <ais523> elliott: but I can only fit 510 characters on a line!
22:48:36 <monqy> is there a goat.oo
22:48:40 <elliott> ais523: OK, 1 word minimum.
22:48:48 <ais523> shachaf: it is, we've gone from democracy onto dictatorship
22:49:01 <shachaf> And monqy is the dictator?
22:49:23 <ais523> and hmm, normally I'd say "user" because it's used for the purpose of saying who did the editing, not what they edited via, but "account" seems to fit spambots better because they aren't actually people
22:49:30 <monqy> a new spam user deleted summary every day
22:49:34 <monqy> this is my promise
22:49:43 <monqy> "keeping it fresh"
22:49:44 -!- pikhq has quit (Ping timeout: 248 seconds).
22:49:49 -!- pikhq_ has joined.
22:49:52 <monqy> - monqy, promising, for the people
22:50:09 <ais523> monqy: oh no, you've reminded me of why I stopped being a politician
22:50:23 <ais523> (short version: I was too honest running for re-election, and only got 2 votes out of several thousand)
22:50:27 <ais523> (I'm still wondering who the other one was)
22:50:39 <elliott> how did you even get elected in the first place
22:50:43 -!- Jafet has joined.
22:51:02 <ais523> it was under a different system, in which I managed to get in unopposed several years in a row
22:51:15 <ais523> so I didn't need to state my opinions at all
22:52:03 <elliott> monqy: "user" or "account"
22:52:12 <elliott> (I am merely consulting a few people in my role as dictator, not establishing a vote.)
22:52:49 <monqy> a vote for "thing"
22:53:10 <monqy> a nonvote for thing
22:53:21 <ais523> didn't Wikipedia eventually settle on the term "!vote"?
22:53:35 <ais523> for things that were like votes in every way, except officially not being votes?
22:54:36 <Jafet> The con-two-centsus.
22:54:56 <elliott> Jafet: "Deleted spam user" or "Deleted spam account" & why (5 word minimum) thanks.
22:55:06 <shachaf> elliott: Why is my computer so loud and hot? :-(
22:55:19 <shachaf> And the battery life is so short.
22:55:21 <Jafet> I vote "Mickey Mouse".
22:55:32 <elliott> Jafet: Nope! This isn't a vote.
22:55:41 <Jafet> shachaf: stop using it and these problems will go away
22:55:51 <elliott> shachaf: Because you didn't follow my advice.
22:55:52 <Jafet> Except perhaps the heaviness
22:55:53 <monqy> a vote for monqy and "Mickey Mouse" will be today's spam account deletion summary
22:55:58 <elliott> ais523: I found your "saying who did the editing" argument convincing.
22:57:18 <shachaf> elliott: By the way, I'm pretty happy with it so far.
22:57:23 <shachaf> elliott: When do I stop being happy?
22:57:49 <elliott> ais523: then I'll run the query on the DB
22:57:52 <elliott> (after taking a backup, ofc)
22:58:11 <ais523> how are you merging users directly on the DB?
23:05:22 <oerjan> !addinterp vote c printf("Your vote has been registered.\n");
23:05:22 <EgoBot> Interpreter vote installed.
23:05:34 <oerjan> !vote Cthulhu for president!
23:05:39 <EgoBot> Your vote has been registered.
23:05:53 <EgoBot> Your vote has been registered.
23:06:45 <fizzie> ^def vote ul (Your vote has been registered.)S
23:07:32 <fizzie> You could also say that they share the same record of registered votes, in a sense.
23:11:46 -!- kmc has joined.
23:18:32 <oerjan> !c printf("%d\n", strcmp("", "test"));
23:18:45 <oerjan> !c printf("%d\n", strcmp("a", "test"));
23:18:55 <elliott> ais523: like this: http://sprunge.us/eeWX
23:19:37 <ais523> elliott: change COMMIT to ROLLBACK first for testing
23:19:47 <elliott> err, that'll do absolutely nothing, surely?
23:19:52 <oerjan> aren't ^ and $ identical commands? http://esolangs.org/wiki/Sortle
23:20:10 <ais523> also, you miscapitalised "from" in "DELETE From watchlist"
23:20:21 <ais523> elliott: so you can inspect the situation before the rollback to see if it's what you expected
23:20:34 <elliott> ais523: err, transactions don't work like that?
23:20:35 -!- tzxn3 has quit (Quit: Leaving).
23:20:43 <ais523> they do if you do them slowly enough
23:20:59 <ais523> as in, you run it up to the rollback
23:21:01 <ais523> then look at the state
23:21:06 <ais523> then if it's not what you expected, rollback
23:21:28 <elliott> but i was going to take a backup first
23:21:33 <elliott> that's basically equivalent
23:22:15 <ais523> except it's the difference between the change going live and the change not going live while you test
23:22:48 <elliott> well, OK, but I'm going to set the wiki to read-only mode
23:22:56 <elliott> so the worst that could happen is a minute's outage
23:24:03 <elliott> ais523: anyway, do you really trust MySQL to isolate a transaction properly? :)
23:25:23 <elliott> ais523: oh, and I'll keep the wiki read-only to scan through the account list to find any others we missed
23:27:21 <elliott> OK, the wiki is officially read-only
23:27:22 <oerjan> perhaps take a backup too?
23:29:24 <elliott> Query OK, 3131 rows affected (37.67 sec)
23:30:37 <elliott> fizzie: I think these UPDATEs are running over every single element of the table.
23:32:05 <elliott> oerjan: btw I hereby enlist you for help in going over the resulting user list to find any remaining spammers.
23:34:06 <elliott> mysql> UPDATE logging SET log_user = @spam_user_id WHERE log_user IN (SELECT user_id FROM spammers)
23:34:06 <elliott> -> UPDATE ipblocks SET ipb_by = @spam_user_id WHERE ipb_by IN (SELECT user_id FROM spammers);
23:34:06 <elliott> ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE ipblocks SET ipb_by = @spam_user_id WHERE ipb_by IN (SELECT user_id FROM ' at line 2
23:34:32 -!- kmc has quit (Quit: Leaving).
23:39:34 <elliott> ais523: well, the rows-affected results look right
23:39:52 <elliott> there are now 1371 users left, which is correct
23:40:18 <elliott> (most of them are still spammers, ofc, but still)
23:40:24 <ais523> hmm, anyone here know how to go from a hexdump of a file to the actual file?
23:40:40 <ais523> elliott: it has a reverse-dump mode?
23:40:53 <fizzie> (I'm aSQLeep now, by the way.)
23:41:18 <ais523> we're trying to recover a crashed website from people's browser caches
23:41:45 <elliott> OR u.user_name REGEXP '^\\d+ buy '
23:41:45 <ais523> hmm, I guess I can do this with a Perl oneliner
23:41:52 <elliott> as in, there's a ton of them still left
23:42:06 <elliott> hmm, nope, that part just didn't work
23:42:18 <elliott> http://esolangs.org/wiki/Special:Contributions/Deleted_spam_user heh
23:42:53 <fizzie> ais523: xxd has a reverse-dump mode; but Perl with some pack 'C*' and map hex split is what I've used.
23:45:28 <elliott> ais523: http://esolangs.org/w/index.php?title=Special:ListUsers&limit=5000 btw
23:46:15 <ais523> yay, this actually worked
23:46:50 <elliott> ais523: yep, but there's still a bunch left; it'd be nice to get the low-hanging ones before unlocking the DB
23:47:34 <ais523> oh, I meant my reverse-hexdump thing
23:47:57 <elliott> | 2408 | Asd184900 | asd184900@asd.de | dsfgdsfgsfd | 0 |
23:48:24 <elliott> meh, /me just removes the email requirement
23:48:27 <elliott> nobody legit is going to have that username
23:48:42 <olsner> can't you just delete the whole user database and let people re-register?
23:48:56 <elliott> olsner: I refuse to do that
23:50:59 <elliott> ais523: haha, one of our users is called "Angela"; I wondered for a moment, but it turns out it's a spambot
23:51:09 <elliott> looks like deletion is the correct choice :P
23:52:09 <elliott> ais523: how busy are you right now?
23:52:28 <ais523> in the middle of this recover
23:52:56 <elliott> ais523: hey, blognomic.com has some malware on it
23:53:03 <elliott> some javascript redirects me to google.com
23:53:16 <ais523> someone's been complaining about that recently
23:53:21 <ais523> you might want to comment in the associated thread
23:53:42 <elliott> I'm not sure what input I could provide, exactly
23:53:47 -!- augur has joined.
23:54:17 <elliott> <script src="http://ban85kmak.rr.nu/pmg.php?dr=1"></script>
23:54:23 <elliott> can't admins edit the template?
23:54:27 <elliott> presumably removing that would fix it
23:55:50 <elliott> oerjan: how trustworthy are you
23:55:56 * oerjan isn't sure precisely what to do
23:57:19 <oerjan> oerjan at a certain place called nvg in org