←2014-02-16 2014-02-17 2014-02-18→ ↑2014 ↑all
00:01:04 -!- CADD has joined.
00:01:06 -!- CADD has quit (Client Quit).
00:03:56 <Sgeo> Even if I can represent most interesing things with getter+modifier, it may actually be _easier_ for end-users to define a van Laarhoven style lens
00:03:58 <Sgeo> :/
00:05:53 <nooodl> oerjan: elliott: i brute-force checked all brainfuck programs of length <= 10, and only two of them reverse input: ,[<,]>[.>] and ,[>,]<[.<]
00:06:06 <Bike> what a sensible thing to do
00:06:21 <elliott> nooodl: wait, really?
00:06:26 <elliott> did you actually do that
00:06:39 <elliott> that first one is invalid if you disallow left tape underflow
00:06:41 <elliott> which is fairly standard
00:06:50 <elliott> oh, both of them are wrong in that case
00:08:28 <nooodl> ignoring + and - you get only about 73 million programs, which isn't really a lot! and many of those are invalid (i.e. mismatched [])
00:09:35 <nooodl> here's my completely awful thing http://sprunge.us/jSJA
00:11:21 <elliott> nooodl: + and - could be used
00:11:25 <elliott> for loop conditiony stuff
00:11:36 <nooodl> this is kinda fun. here's a bunch of echo programs http://sprunge.us/bjVe
00:12:18 <elliott> does it check things in parallel?
00:12:39 <nooodl> nope it's really inefficient
00:13:00 <elliott> I guess + and - would blow it up too much
00:14:57 <FireFly> nooodl: you could also filter out programs containing NOPs (><, <>, -+, +-)
00:15:10 <FireFly> since an equivalent shorter program would already have been tried
00:15:32 <elliott> the solution is obvious, just run esotope on every input program to remove duplicates
00:16:19 <nooodl> :D
00:16:41 <elliott> actually that could even be viable
00:16:42 <elliott> if you reuse the IR
00:23:01 -!- nooga_ has quit (Ping timeout: 248 seconds).
00:27:25 <nooodl> here's all possible outputs for 5-character brainfuck programs http://sprunge.us/eXIL
00:28:20 <nooodl> wait this can't possibly handle things like ,[.,] or ,[.-]
00:34:18 <FreeFull> nooodl: Maybe that's all the possible finite outputs
00:34:47 <FreeFull> Although ,[.-] would be finite
00:34:49 <nooodl> ,[.-] is finite
00:34:49 <nooodl> yeah
00:39:42 <pikhq_> Except on EOF = -1 bignum implementations. :D
00:42:02 -!- augur has quit (Remote host closed the connection).
00:44:51 -!- blotter has quit (Ping timeout: 265 seconds).
00:48:40 <quintopia> nooodello
00:53:56 <quintopia> bellotter
00:54:56 * oerjan might point out that mangling people's nicks probably doesn't nickping them, hth hth
00:55:10 <oerjan> ...what just happened
00:55:24 <oerjan> test
00:55:31 * oerjan tests hth
00:55:32 <kmc> `coins
00:55:33 <HackEgo> flabillcoin sbtealpediumcoin andcoin cumcoin benerancecoin irculuscoin easedcoin xbtizedcoin skacoin alcacoin migolcoin unfustiglcoin zwissercoin rumcoin noobcoin philosoecoin thorecoin btfcoin inverundcoin 92.12coin
00:55:41 <oerjan> elliott: i sense a bug hth
00:55:58 <kmc> cumcoin
00:56:00 <kmc> skacoin
00:56:13 <Sgeo> There are unsafeCoerces in lens apparently :/
00:56:29 <kmc> i think shachaf knows all about that
00:56:57 <oerjan> Sgeo: there are plans to change those to the new (safe) coerce eventually
00:57:02 <kmc> there is so much unsafe coercing in Servo :/
00:57:08 <kmc> oerjan: what's the safe coerce
00:57:29 <oerjan> kmc: the one that has typeclass restriction to check that the types actually can be coerced
00:57:36 <kmc> ok
00:57:49 <kmc> what are examples of pairs of types that "actually can be coerced"
00:58:23 <Sgeo> I want to quote what someone said to me in #haskell-lens, but it's not publically logged as far as I can tell
00:58:24 <oerjan> any newtype wrapping (with constructor visible), things that only differ in phantom types
00:58:45 <quintopia> helloerjan. i don't want to ping people. i want to test if they are paying attention.
00:58:55 <oerjan> and "parametric" type constructors applied to those
00:59:00 <quintopia> pinging people who are busy would be bothersome
00:59:19 <oerjan> (using the new role system)
00:59:37 -!- Sprocklem has quit (Ping timeout: 272 seconds).
01:00:50 <quintopia> oerjan: any progress on TCness of RePairate-2? you know you want to know for sure.
01:01:25 -!- blotter has joined.
01:02:16 <oerjan> quintopia: oh, i sort of put that away after you started mumbling about _exactly_ 2
01:02:27 <oerjan> because i have no idea how to do _that_
01:03:09 <oerjan> but yes, i have a design sketch that i think should work for <= 2
01:03:41 <oerjan> (in my head, mostly)
01:04:32 <quintopia> oerjan: well i want to see that. obviously, the exactly 2 thing would be super-cool, but I recognize it is a very difficult problem. m in {0,2} would be good enough for now.
01:04:58 -!- nooodl has quit (Quit: Ik ga weg).
01:08:00 <shachaf> oerjan: i don't think that's necessary
01:08:07 <shachaf> in fact i've been
01:08:13 <shachaf> mostly arguing against the new coerce
01:08:18 <oerjan> shachaf: oh?
01:08:27 <shachaf> but only in places like irc that spj doesn't see, so it's not relevant one way or the other
01:08:40 <shachaf> well, ok, i have nothing against this safe coerce thing, it just isn't really relevant to lens
01:08:54 <shachaf> what is relevant to lens is a 5-line patch spj implemented over a year ago
01:09:02 <oerjan> oh?
01:09:13 <shachaf> https://ghc.haskell.org/trac/ghc/ticket/7542
01:09:27 <shachaf> ok, 10 line patch
01:10:15 <shachaf> The issue is that (foo . NewtypeConstructor) turns into (foo . id) post-denewtypification, and (foo . id) is (\x -> foo x), which isn't the same as foo
01:10:44 <Bike> why isn't it again
01:10:53 <shachaf> But that patch makes it so that strict composition is enough, because foo `seq` (\x -> foo x) should be equal to foo.
01:10:59 <shachaf> Bike: seq can distinguish them.
01:11:07 <shachaf> > (undefined :: Int -> Int) `seq` ()
01:11:10 <lambdabot> *Exception: Prelude.undefined
01:11:11 <Bike> oh foo can be bottom you mean
01:11:12 <shachaf> > ((\x -> undefined x) :: Int -> Int) `seq` ()
01:11:13 <lambdabot> ()
01:11:14 <shachaf> Yes.
01:11:17 <Bike> yeah makes sense
01:12:07 <shachaf> So to show what the Core would look like if GHC did it correctly, I introduced composition operators that aren't composition at all but are actually unsafeCoerce.
01:12:20 <shachaf> And edwardk said "that's a good idea, let's put it in".
01:12:53 <shachaf> But anyway the point is that the whole thing can be fixed with the strict composition thing in GHC HEAD.
01:13:35 <shachaf> However, partly as a result of this bug I filed, SPJ wrote https://ghc.haskell.org/trac/ghc/wiki/NewtypeWrappers
01:13:41 <shachaf> "See #7542 for a real life example."
01:14:12 <shachaf> This newtype wrappers mechanism, and the various other things proposed to solve this issue, are far more complicated than the thing that actually fixes it.
01:14:50 <shachaf> whoa, there was discussion on that ticket 6 days ago
01:15:47 <shachaf> Maybe it's not quite that simple.
01:16:49 <shachaf> But I'm still wholeheartedly on the side of fixing this via a compiler optimization of strict composition rather than all this complicated coercion business.
01:18:21 -!- Sprocklem has joined.
01:45:50 -!- Sprocklem has quit (Ping timeout: 264 seconds).
01:46:35 -!- blotter has quit (Ping timeout: 260 seconds).
01:49:03 -!- prooftechnique has quit (Quit: Lost terminal).
01:54:05 -!- blotter has joined.
01:54:57 -!- Phantom__Hoover has quit (Quit: Leaving).
02:00:15 -!- augur has joined.
02:06:38 -!- yorick has quit (Read error: Connection reset by peer).
02:07:38 <oerjan> `unidecode ..
02:07:38 <HackEgo> ​[U+002E FULL STOP] [U+002E FULL STOP]
02:08:43 <oerjan> weird why does the wiki mark it as changed.
02:50:17 <blotter> oerjan, is HackEgo yours?
02:50:34 <blotter> `author
02:50:35 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: author: not found
02:50:40 <blotter> lol
02:50:55 <oerjan> no it's Gregor's
02:55:41 <Sgeo> Does the name cartesian-compose make sense for a function that composes functions, but, when one function in the chain returns multiple values, it maps the rest of the composition onto it, rather, than, say, providing the results as multiple arguments?
02:56:02 <Sgeo> Still not sure if I can just use this cartesian-compose, or if I need to change what a getter can do
02:56:06 <blotter> `test
02:56:07 <HackEgo> No output.
02:57:01 <blotter> `test xa
02:57:01 <HackEgo> No output.
02:57:28 <blotter> `say xa
02:57:28 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: say: not found
02:59:44 <blotter> `dmesg
02:59:44 <HackEgo> Initializing cgroup subsys cpuset \ Initializing cgroup subsys cpu \ Initializing cgroup subsys cpuacct \ Linux version 3.13.0-umlbox (hackbot@codu) (gcc version 4.7.2 (Debian 4.7.2-5) ) #1 Wed Jan 29 12:56:45 UTC 2014 \ On node 0 totalpages: 73344 \ free_area_init_node: node 0, pgdat 60318390, node_mem_map 62c3a000 \ Normal zone: 1003 pages used
02:59:47 <blotter> aha
02:59:53 <blotter> `echo hi
02:59:54 <HackEgo> hi
03:00:02 <blotter> `halt -p
03:00:02 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: halt: not found
03:00:04 <blotter> lol
03:00:27 <blotter> `wget
03:00:28 <HackEgo> wget: missing URL \ Usage: wget [OPTION]... [URL]... \ Try `wget --help' for more options.
03:01:07 <blotter> `whoami
03:01:08 <HackEgo> whoami: cannot find name for user ID 5000
03:01:21 <blotter> `cat /etc/passwd
03:01:21 <HackEgo> cat: /etc/passwd: No such file or directory
03:01:32 <blotter> `pwd
03:01:33 <HackEgo> ​/hackenv
03:01:36 <Bike> `help
03:01:36 <HackEgo> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch <URL>" downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert <rev>" can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/
03:01:45 <Bike> `? help
03:01:46 <HackEgo> help? ¯\(°​_o)/¯
03:01:48 <Bike> oh well.
03:01:53 <blotter> lol
03:01:58 <blotter> `ls .
03:01:58 <HackEgo> 98076 \ bdsmreclist \ bin \ canary \ cat \ complaints \ :-D \ dog \ etc \ factor \ fb \ fb.c \ head \ hello \ hello.c \ ibin \ index.html \ interps \ lib \ paste \ pref \ prefs \ quines \ quotes \ share \ src \ test \ Test \ Test.hi \ Test.hs \ Test.o \ tmp \ UNPA \ wisdom \ wisdom.pdf
03:02:06 <blotter> `ls /
03:02:06 <HackEgo> bin \ dev \ etc \ hackenv \ home \ lib \ lib64 \ opt \ proc \ sbin \ sys \ tmp \ usr
03:02:15 <blotter> `ls /etc
03:02:16 <HackEgo> alternatives \ java-6-openjdk
03:02:40 <blotter> `rm
03:02:41 <HackEgo> rm: missing operand \ Try `rm --help' for more information.
03:02:47 <blotter> oh well, when all else fails...
03:02:47 <newsham> `du -sm ./:-D
03:02:48 <HackEgo> du: invalid option -- ' ' \ du: invalid option -- '.' \ du: invalid option -- '/' \ du: invalid option -- ':' \ du: invalid option -- '-' \ Try `du --help' for more information.
03:02:53 <blotter> `rm -rf /
03:02:53 <HackEgo> rm: invalid option -- ' ' \ Try `rm --help' for more information.
03:03:04 <blotter> `rm --help
03:03:04 <HackEgo> Usage: rm [OPTION]... FILE... \ Remove (unlink) the FILE(s). \ \ -f, --force ignore nonexistent files, never prompt \ -i prompt before every removal \ -I prompt once before removing more than three files, or \ when removing recursively. Less intrusive than -i, \
03:03:20 <newsham> `env
03:03:20 <HackEgo> TERM=linux \ http_proxy=http://127.0.0.1:3128 \ HACKENV=/hackenv \ PATH=/hackenv/bin:/opt/python27/bin:/opt/ghc/bin:/usr/bin:/bin \ PWD=/hackenv \ LANG=en_NZ.UTF-8 \ SHLVL=0 \ HOME=/tmp
03:03:34 <blotter> `ps -aux
03:03:35 <HackEgo> warning: bad ps syntax, perhaps a bogus '-'? \ See http://gitorious.org/procps/procps/blobs/master/Documentation/FAQ \ USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND \ 0 1 0.0 0.1 1012 272 ? S 03:03 0:00 /init \ 0 2 0.0 0.0 0 0 ? S 03:03 0:00 [kthreadd] \ 0
03:03:52 <Bike> did you expect a sensible display
03:04:08 <blotter> say what?
03:04:17 <newsham> `python -c "print 1"
03:04:17 <HackEgo> ​ File "<string>", line 1 \ "print 1" \ ^ \ IndentationError: unexpected indent
03:04:52 <newsham> `find . -type f
03:04:53 <HackEgo> find: `. -type f': No such file or directory
03:05:01 <blotter> `tee ./a
03:05:07 <blotter> `ps
03:05:14 <blotter> `echo hi
03:05:19 <blotter> lol, i think it worked
03:06:02 <HackEgo> No output.
03:06:03 <HackEgo> ​ PID TTY TIME CMD \ 286 ? 00:00:00 init \ 288 ? 00:00:00 sh \ 290 ? 00:00:00 ps \ 291 ? 00:00:00 cat
03:06:04 <HackEgo> hi
03:06:10 <blotter> ah, time out
03:06:31 <blotter> Gregor, you should add </dev/null to your execs
03:06:47 <oerjan> blotter: what
03:07:05 <blotter> the reason HackEgo wasnt responding for a while is b/c tee was blocking on stdin
03:07:17 <blotter> if the exec cmd is followed by </dev/null
03:07:29 <blotter> it'll nullify the stdin, preventing anything from blocking on it
03:07:43 <oerjan> hm
03:07:46 -!- Frooxius has quit (Ping timeout: 245 seconds).
03:08:45 <blotter> `ls /sbin
03:08:46 <HackEgo> agetty \ badblocks \ blkid \ blockdev \ cfdisk \ ctrlaltdel \ debugfs \ depmod \ dhclient \ dhclient-script \ dmsetup \ dumpe2fs \ e2fsck \ e2image \ e2label \ e2undo \ fdisk \ findfs \ fsck \ fsck.cramfs \ fsck.ext2 \ fsck.ext3 \ fsck.ext4 \ fsck.ext4dev \ fsck.minix \ fsck.nfs \ fsfreeze \ fstab-decode \ fstrim \ getty \ halt \ hwclock \ ifconfig
03:09:04 <blotter> `ls /dev
03:09:05 <HackEgo> agpgart \ audio \ audio1 \ audio2 \ audio3 \ audioctl \ console \ core \ dsp \ dsp1 \ dsp2 \ dsp3 \ fd \ full \ kmem \ loop0 \ loop1 \ loop2 \ loop3 \ loop4 \ loop5 \ loop6 \ loop7 \ mem \ midi0 \ midi00 \ midi01 \ midi02 \ midi03 \ midi1 \ midi2 \ midi3 \ mixer \ mixer1 \ mixer2 \ mixer3 \ mpu401data \ mpu401stat \ null \ port \ ptmx \ pts \ ram \
03:09:18 <blotter> `cat /dev/dsp
03:09:19 <HackEgo> cat: /dev/dsp: Permission denied
03:09:24 <Bike> oh shit were being hackd
03:09:30 <blotter> lol, no
03:09:49 <Bike> wait, why the hell does it have midi and dsp out
03:10:04 <Bike> Gregor have you been djing behind our backs
03:10:34 <oerjan> `cat -
03:10:58 <blotter> `sh -e "echo hi"
03:10:59 <HackEgo> sh: 0: Illegal option -
03:11:04 <oerjan> hm that does seem to block stuff
03:11:05 <HackEgo> No output.
03:11:17 <Bike> an ejoyable dos
03:11:19 <oerjan> `run echo hi
03:11:19 <blotter> `sh -c "echo hi"
03:11:19 <HackEgo> hi
03:11:20 <HackEgo> sh: 0: Illegal option -
03:11:52 <oerjan> ` doesn't actually run the command with shell expansion and stuff, you need to use `run
03:12:18 <oerjan> also someone defined `` as an abbreviation of that
03:12:42 <blotter> oh ok
03:13:21 <blotter> `run echo hi | tr h H
03:13:22 <HackEgo> Hi
03:13:36 <oerjan> Bike: Gregor sometimes composes music
03:13:44 <blotter> `run cat /dev/null | tr '\0' '#'
03:13:45 <HackEgo> No output.
03:14:07 <blotter> damn, no /dev/zero
03:14:10 <blotter> `ls /dev/zero
03:14:11 <HackEgo> ​/dev/zero
03:14:13 <blotter> oh
03:14:18 <blotter> `run cat /dev/zero | tr '\0' '#'
03:14:19 <HackEgo> ​###########################################################################################################################################################################################################################################################################################################################################################
03:15:27 <blotter> `run cat /dev/zero | tr '\0' a | sed 's/aa/ab/' | tr b '\n'
03:15:30 <HackEgo> No output.
03:15:40 <blotter> `run cat /dev/zero | tr '\0' a | sed 's/aa/ab/g' | tr b '\n'
03:15:43 <HackEgo> No output.
03:16:00 <blotter> `run cat /dev/zero | tr '\0' a | sed 's/aa/ab/g' | tr b 'c'
03:16:03 <HackEgo> No output.
03:16:17 <blotter> stop misbehaving HackEgo :-(
03:16:38 <blotter> `run cat /dev/zero | tr '\0' '\n'
03:16:38 <HackEgo> No output.
03:16:54 <oerjan> blotter: HackEgo strips trailing newlines
03:17:08 <blotter> yeah i see :-(
03:18:25 <oerjan> and also has some buffering problems with long lines
03:18:47 <oerjan> or hm
03:19:48 <oerjan> i'm not entirely sure why you're getting no input on all of those
03:20:17 <oerjan> oh maybe it's sed which cannot handle it
03:20:34 <oerjan> it never gets to the end of the line to print out the result
03:20:42 <Bike> ``cat /dev/zero | tr '\0' a | sed 's/aa/ab/'
03:20:43 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: `cat: not found
03:20:48 <Bike> `` cat /dev/zero | tr '\0' a | sed 's/aa/ab/'
03:20:52 <HackEgo> No output.
03:21:05 <shachaf> `run cat bin/\`
03:21:06 <HackEgo> exec bash -c "$1"
03:25:15 <blotter> `ls /hackenv/src/buttsnack
03:25:16 <HackEgo> ls: cannot access /hackenv/src/buttsnack: No such file or directory
03:25:26 <blotter> `ls /hackenv/bin/buttsnack
03:25:26 <HackEgo> ​/hackenv/bin/buttsnack
03:25:28 <blotter> lol
03:30:20 -!- Taneb has changed nick to Tasnout.
03:30:53 -!- ter2 has quit (Read error: Connection reset by peer).
03:35:19 * oerjan is guessing Tasnout met a dane
03:36:19 <copumpkin> kmc: your safe-globals package seems a bit dead on a modern GHC
03:36:59 <oerjan> hm wait that's wrong, it's spelled næb
03:37:22 <ion> `coins
03:37:24 <HackEgo> repocoin oxycoin .yachcoin sartcoin pooncoin sciacoin shooncoin tre-calcoin palcoin strecoin halietzellcoin hydrainecoin trideadfteloppensigcoin kimlcoin counterncoin strelcoin bolitershacoin procoin niggerecoin lnussintecoin
03:37:45 <zzo38> Can C/shellscripts polyglot be made?
03:38:27 <zzo38> Perhaps you can if the first line is #define
03:41:06 -!- Sorella has quit (Quit: It is tiem!).
03:41:42 <Sgeo> haskell-lens isn't answering my lens question :(
03:51:23 -!- ter2 has joined.
03:52:08 <oerjan> Sgeo: have you managed to confuse them or is there nobody awake
03:52:27 <Sgeo> I'm hoping it's just that no-one's awake
03:52:44 <Sgeo> Either that or I didn't explain my question well, I don't think it's an inherently confusing question
03:52:55 <Sgeo> <Sgeo> Suppose I have a.both.b
03:52:55 <Sgeo> <Sgeo> Will either a or b have the ability to look at or manipulate both values, or only each value one at a time?
03:53:31 <oerjan> :t both
03:53:32 <lambdabot> Applicative f => (a -> f b) -> (a, a) -> f (b, b)
03:53:54 <oerjan> hm
03:54:32 -!- Tasnout has changed nick to Taneb.
03:54:46 <zzo38> OK, I managed to write a C/shellscripts polyglot.
03:55:48 <Taneb> :t (a :: Lens' Int (Bool, Bool) . both . (b :: Lens' Bool Char)
03:55:49 <lambdabot> Illegal symbol '.' in type
03:55:50 <lambdabot> Perhaps you intended -XRankNTypes or similar flag
03:55:50 <lambdabot> to enable explicit-forall syntax: forall <tvs>. <type>
03:56:04 <Taneb> :(
03:56:14 <Taneb> :t (a :: ALens' Int (Bool, Bool) . both . (b :: ALens' Bool Char)
03:56:14 <lambdabot> Illegal symbol '.' in type
03:56:15 <lambdabot> Perhaps you intended -XRankNTypes or similar flag
03:56:15 <lambdabot> to enable explicit-forall syntax: forall <tvs>. <type>
03:56:20 <Taneb> :( :(
03:56:24 <Sgeo> Missing parens
03:56:31 <Sgeo> :t (a :: Lens' Int (Bool, Bool)) . both . (b :: Lens' Bool Char)
03:56:33 <lambdabot> Couldn't match expected type `((Bool, Bool) -> f (Bool, Bool))
03:56:33 <Bike> :t (a :: ALens' Int (Bool, Bool)) . both . (b :: ALens' Bool Char)
03:56:33 <lambdabot> -> Int -> f Int'
03:56:33 <lambdabot> with actual type `Expr'
03:56:34 <lambdabot> Couldn't match type `Expr'
03:56:34 <lambdabot> with `((Bool, Bool)
03:56:35 <lambdabot> -> Control.Lens.Internal.Context.Pretext
03:56:39 <Bike> fuck ur type
03:56:57 <Sgeo> I blame lambdabot
03:57:10 <Sgeo> :t (afucklambdabot :: Lens' Int (Bool, Bool)) . both . (bfucklambdabot :: Lens' Bool Char)
03:57:11 <lambdabot> Not in scope: `afucklambdabot'
03:57:11 <lambdabot> Not in scope: `bfucklambdabot'
03:57:30 <Sgeo> :t (undefined :: Lens' Int (Bool, Bool)) . both . (undefined :: Lens' Bool Char)
03:57:31 <lambdabot> Applicative f => (Char -> f Char) -> Int -> f Int
03:57:34 <quintopia> zzo38: is it a QUINE
03:57:38 <Taneb> :(
03:57:42 <Taneb> :)
03:57:52 <zzo38> quintopia: No, it isn't. It doesn't even do the same thing in C as shellscripts.
03:57:57 <Sgeo> I have no idea how to translate that into a lambda
03:58:15 <Sgeo> and by "lambda", I mean "answer to my question"
03:58:28 <Sgeo> Concepts right next to each other, or something
03:58:36 <Taneb> b can only look at one value at a time
03:58:41 <Taneb> As far as b knows, there is only one value
03:58:43 <quintopia> zzo38: make one that's a QUINE IN BOTH
03:58:50 <Taneb> a deals with two values.
03:59:02 <zzo38> quintopia: Maybe another time; this time I don't have such an intention.
03:59:03 <Sgeo> Taneb: but not because of both, I'm guessing, but because it actually sees the pair?
03:59:11 <oerjan> i bet if it's possible to make a quine in both, then someone already has.
03:59:21 <zzo38> oerjan: Yes, probably.
03:59:28 <Taneb> Sgeo, yes
03:59:43 <zzo38> The first line is #define echo echo1( and then #define echo1(x)
04:00:13 <oerjan> Taneb: btw the trick to get types that way is to use implicit variables
04:00:19 <zzo38> And then the actual shell scripts (terminated by exit), and thenn it undefines those two macros.
04:00:52 <oerjan> :t (?a :: Lens' Int (Bool, Bool)) . both . (?b :: Lens' Bool Char)
04:00:53 <lambdabot> Could not deduce (?a::((Bool, Bool) -> f1 (Bool, Bool))
04:00:53 <lambdabot> -> Int -> f1 Int)
04:00:53 <lambdabot> arising from a use of implicit parameter `?a'
04:01:01 <zzo38> What it does is echo >/dev/null and then runs gcc.
04:01:07 <oerjan> well, it should have been.
04:01:21 <quintopia> zzo38: does it compile itself?
04:01:25 <zzo38> quintopia: Yes.
04:01:31 <Sgeo> Great, so... all I need to do to be confident in my representation being satisfactory (once I start using cartesian-compose) is ... understand prisms
04:01:43 <oerjan> hm maybe those have trouble with rank-N
04:01:45 <Taneb> oerjan, I thought I used ImplicitParams. I blame the fact that it's 4 am
04:01:59 <Sgeo> Hmm, worse comes to worst, I could have prism be a subtype of lens, I think
04:02:42 <Sgeo> Since my representation will support traversals just fine, it's just prisms may (or may not) be more than a traversal... just a traversal reversible into a getter... somehiw
04:03:07 <Sgeo> Also need to understand folds, but I think those are just getters?
04:04:16 <oerjan> Sgeo: prisms and lenses are not contained in each other either way
04:04:36 <Sgeo> What I'm calling a 'lens' is more fiexible than a lens
04:04:43 <zzo38> I don't know if anyone else has written C/shellscripts polyglots at all; do you know of any such things?
04:04:43 <Sgeo> flexible
04:05:42 <elliott> please don't call it a lens thne
04:05:43 <elliott> *then
04:06:25 <Sgeo> :/ what should I call it
04:06:45 <Bike> a generalized lens
04:06:51 <Bike> i love general
04:07:01 <kmc> zzo38: I wrote a C / shell / python / haskell / brainfuck / DOS .COM file polyglot
04:07:28 <quintopia> zzo38: such a program won the 1986 IOCCC
04:07:30 <quintopia> http://www.spinellis.gr/blog/20100112/
04:07:39 <kmc> C/shell is pretty easy because of #if 0 and because shell doesn't do static syntax checking
04:07:56 <zzo38> kmc: Yes, #if 0 or whatever
04:07:57 <quintopia> kmc: what did it do
04:08:09 <kmc> quintopia: prints "Hello, $lang!" for each lang
04:08:32 <quintopia> kmc: needs more brainfuck
04:09:03 <quintopia> kmc: make the brainfuck part a quine
04:09:05 <quintopia> :P
04:09:07 <kmc> it starts with a blank line
04:09:09 <kmc> that's kind of annoying
04:09:12 <oerjan> it seems the polymath project to reduce the size of the known minimal gap between primes has got down to 270
04:09:37 <quintopia> oerjan: maximal gap?
04:10:32 <oerjan> well it's a little confusing
04:10:55 <oerjan> it's "for all N there exist primes >= N closer than this gap"
04:11:06 <oerjan> *+ distinct
04:12:01 <oerjan> closer or equally close
04:12:51 <zzo38> I have seen another one to check what programming language it is; but it was different, and also included both Plain TeX and LaTeX.
04:13:18 <oerjan> http://michaelnielsen.org/polymath1/index.php?title=Bounded_gaps_between_primes
04:24:22 -!- prooftechnique has joined.
04:26:46 <Sgeo> My "lenses" might not match up with Haskell lenses, but they're still a pair of getter+modifier
04:29:18 -!- password2 has joined.
04:33:25 -!- prooftechnique has quit (Quit: leaving).
04:41:24 <Sgeo> Am I a bad person for using λ in my source files?
04:43:44 -!- prooftechnique has joined.
04:45:23 <Taneb> Doesn't seem like sleep is happening
04:48:17 <Sgeo> I strongly recommend ensuring that it happens at some point, otherwise it could happen forever
04:48:36 <Sgeo> hmm, that doesn't... quite mean what I intended it to
04:52:32 -!- CADD has joined.
04:52:32 -!- CADD has quit (Client Quit).
05:07:53 -!- Sprocklem has joined.
05:09:25 <blotter> :t both
05:09:26 <lambdabot> Applicative f => (a -> f b) -> (a, a) -> f (b, b)
05:09:29 <blotter> :t neither
05:09:30 <lambdabot> Not in scope: `neither'
05:09:30 <lambdabot> Perhaps you meant `either' (imported from Data.Either)
05:09:43 <blotter> :t either
05:09:44 <lambdabot> (a -> c) -> (b -> c) -> Either a b -> c
05:09:58 <oerjan> not very related
05:10:29 <blotter> yeah i see
05:10:50 <blotter> this channel is a botfest ^_^
05:11:20 <kmc> `coins
05:11:21 <HackEgo> smuragrapcoin qualcoin optincoin chintcoin pointcoin gregxcoin cvocoin immicoin bluelcoin redcoin minisetercoin padabccoin alnecoin hq9+coin boationcoin preputecoin cobcoin zeicoin miindeltorcoin stucoin
05:11:42 <kmc> hq9+coin
05:11:56 <shachaf> imo cocoin
05:12:36 <Jafet> Qualcoin, mined by chinese factory workers
05:12:45 <oerjan> :t ignored
05:12:46 <lambdabot> Applicative f => pafb -> s -> f s
05:13:21 <oerjan> i think that may be the thing that corresponds most to "neither" in the sense that matches with "both"
05:13:56 <shachaf> Sure. Or "none" in the sense that matches with "each".
05:14:46 <oerjan> ^celebrate
05:14:47 <fungot> \o| c.c \o/ ಠ_ಠ \m/ \m/ \o_ c.c _o/ \m/ \m/ ಠ_ಠ \o/ c.c |o/
05:14:47 <myndzi> | c.c.c | ¯|¯⌠ `\o/´ | c.c.c | `\o/´ ¯|¯⌠ | c.c.c |
05:14:47 <myndzi> >\ c.c |\ >\| | |\ c.c /'\ | >\| |\ c.c /|
05:14:48 <myndzi> (_|¯`\ /´\
05:14:48 <myndzi> |_) (_| |_)
05:14:57 -!- jix_ has quit (Ping timeout: 252 seconds).
05:15:02 <oerjan> blotter: botfest you said?
05:15:08 <ter2> `coins
05:15:09 <HackEgo> unbaccoin cogscoin yeartraccoin xnigmentacoin turdocicoin uustencoin hungcoin cronkeymacoin iluriencoin alcodaycoin zombcoin fulcoin noilogcoin theolanguinncoin opmecoin rydcoin vingintercoin matcoin ruberiggcoin cancoin
05:15:34 -!- jix has joined.
05:15:50 -!- blotter has quit (Ping timeout: 264 seconds).
05:17:36 <Sgeo> World of Padman seems to have generally 0 players online
05:17:37 <Sgeo> :(
05:20:34 <oerjan> :t united -- here's the other one i was trying to find
05:20:36 <lambdabot> Functor f => (() -> f ()) -> a -> f a
05:20:52 <shachaf> united :: Lens' a ()
05:22:33 <shachaf> the following three exist: Lens' s (); Lens' Void a; Prism' s Void
05:22:43 <shachaf> but Prism' () a doesn't
05:23:10 <oerjan> shocking
05:24:07 <Sgeo> How important are the prism-specific features of prisms?
05:24:31 <shachaf> how important are the ocean-specific features of oceans?
05:25:36 <shachaf> oerjan: hm, that seems more reasonable to me now than it did back then
05:32:54 -!- itsy has quit (Ping timeout: 265 seconds).
05:37:05 -!- blotter has joined.
05:47:34 -!- prooftechnique has quit (Quit: leaving).
05:51:11 -!- luserdroog has joined.
06:03:51 -!- oerjan has quit (Quit: Fnord!).
06:25:22 -!- tromp_ has quit (Read error: Connection reset by peer).
06:25:45 -!- tromp has joined.
06:34:49 -!- Sprocklem has quit (Remote host closed the connection).
06:35:08 <zzo38> SQLite now added recursive queries now. There is an example SQL program that solves sudoku puzzle, given.
06:35:58 -!- trout has quit (Read error: Connection reset by peer).
06:38:46 <zzo38> The WITH clause look like a really good feature.
06:45:50 -!- password2 has quit (Ping timeout: 264 seconds).
06:45:59 -!- blotter_ has joined.
06:49:16 -!- blotter has quit (Ping timeout: 265 seconds).
07:10:42 <kmc> zzo38: show me?
07:10:54 <copumpkin> CTEs?
07:10:57 <copumpkin> recursive?
07:14:58 <kmc> how was I not already following ISO/IEC JTC1/SC22/WG21 on twitter???
07:15:21 <zzo38> kmc: http://www.sqlite.org/lang_with.html
07:15:28 <Bike> i, what
07:16:01 <Bike> that's uh... C++ standards?
07:16:05 <kmc> yes
07:16:25 <kmc> zzo38: I like the Mandelbrot set renderer as well :D
07:29:46 <kmc> zzo38: inductive data types in Inform? https://twitter.com/chrisamaphone/status/435247774712344577
07:33:52 <zzo38> He needs to specify whether he means Inform6 or Inform7, which are two different programming languages. I don't know much of either.
07:36:19 <Sgeo> I think a problem with WebGL is that everyone ends up making their own control scheme, there's no consistency
07:36:36 <Sgeo> Which may be good for some games, but generic places to explore, some consistency might be useful
07:37:10 <kmc> zzo38: she
07:37:21 <kmc> (I think)
07:37:24 <kmc> and a followup tweet says i7
07:37:35 <kmc> zzo38: oh, I thought you knew a lot about inform
07:41:49 <kmc> so do the recursive WITH clauses make SQLite into a logic programming language
07:41:53 <kmc> or some other kind of thing
07:50:58 <zzo38> kmc: I don't know, but it allows loops and recursion without triggers, so it can be used in a query by itself.
07:51:11 <zzo38> It looks to be an extremely useful feature.
08:01:03 -!- luserdroog has quit (Ping timeout: 245 seconds).
08:04:35 -!- blotter_ has quit (Ping timeout: 272 seconds).
08:11:15 <zzo38> But SQL does have unusual features compared to other programming languages; many of which can be useful in the applicable circumstances. Other features I think would be useful to have are overridable views, trigger indices, and ordered triggers.
08:14:29 <zzo38> And the ability to rename views would also be useful.
08:39:56 <zzo38> I don't know much about logic programming language; if you know then hopefully you would know whether WITH clauses can make SQL into logic programming language.
08:58:20 <Sgeo> So, I won't be changing my representation to just modifiers, I think. Although I will try to provide a function to turn a modifier into a getter+modifier pair, although it's only meant to be used on non-lazy structures
08:58:35 <Sgeo> Racket does have the occasional lazy structure, so I hope this is the right decision
09:21:19 <Taneb> Sgeo, did you know that lens is turing complete
09:23:11 <Sgeo> Now I do
09:23:12 <Sgeo> Howso?
09:24:55 <Taneb> Well, the easiest way I've seen is by simulation of B,C,K,W with fix to get round Hindley-Milner
09:24:55 <Sgeo> It suddenly occurs to me that I have no idea if this is a good idea :/
09:25:20 <Sgeo> Well, when I run my test, it will probably break horribly if this is a bad idea
09:25:30 <Bike> "good" is a false concept. There is no justice in this world, Sgeo.
09:25:36 <Taneb> @type over mapped `asTypeOf` \a b c -> a (b c)
09:25:38 <lambdabot> Functor ((->) t) => (a -> b) -> (t -> a) -> t -> b
09:25:56 <Taneb> @type view flipped `asTypeOf` \a b c -> a c b
09:25:57 <lambdabot> (a -> b -> c) -> b -> a -> c
09:26:18 <Taneb> @type view curried (view _1) `asTypeOf` \a b -> a
09:26:19 <lambdabot> b1 -> b -> b1
09:26:45 <Sgeo> Oh hey, looks like it did break horribly
09:26:52 <Taneb> @type perform (over mapped acts acts) `asTypeOf` \a b -> a b b
09:26:53 <lambdabot> Monad ((->) t) => (t -> t -> b) -> t -> b
09:27:02 <Taneb> And the grand finale:
09:27:27 <Taneb> @type over mapped (view flipped (foldrOf folded (over mapped) (view simple)) ((&) ^?! ignored)) (toListOf repeated)
09:27:28 <lambdabot> (a -> a) -> a
09:28:11 <Bike> it's so simple.
09:29:36 <Taneb> :t (.) join . (.) . flip
09:29:37 <lambdabot> (a -> b -> c) -> (a -> b) -> a -> c
09:30:19 <Taneb> :t (.) join . flip . (.) (.)
09:30:19 <lambdabot> (a -> b -> c) -> (a -> b) -> a -> c
09:42:46 -!- shikhin has joined.
09:48:09 <zzo38> What is the algorithm to figure out how to create a "frequent words" table so that text containing any sequence of characters which are included in the table can be compressed? It is slightly complicated, because the cost of the text may occasionally differ slightly depending on which table it is in.
09:59:20 <Sgeo> I either need to rework getters to use lists instead of multiple-valued return, or rework composition of modifiers to be compatible with multiple-valued returns
10:00:59 <Sgeo> I think the former may make more sense
10:19:37 -!- nooga has joined.
10:23:56 -!- MoALTz has joined.
10:53:20 -!- Sellyme has quit (Excess Flood).
10:54:02 -!- Sellyme has joined.
10:56:55 -!- Sellyme has quit (Excess Flood).
10:57:41 -!- Slereah__ has quit (Ping timeout: 248 seconds).
10:59:01 -!- Sellyme has joined.
11:15:16 <FreeFull> @djinn (a -> b -> c) -> (a -> b) -> a -> c
11:15:17 <lambdabot> f a b c = a c (b c)
11:15:40 <FreeFull> @pl f a b c = a c (b c)
11:15:41 <lambdabot> f = ap
11:15:53 <FreeFull> Taneb: It's all just ap
11:17:30 <FreeFull> I bet there is a simpler way to do ap with lens
11:17:39 <FreeFull> Without using cheaty lambdas
11:29:09 <Jafet> > over mapped (view flipped (foldrOf folded (over mapped) (view simple)) ((&) ^?! ignored)) (toListOf repeated) id
11:29:13 <lambdabot> mueval-core: Time limit exceeded
11:41:38 -!- nooga has quit (Ping timeout: 265 seconds).
11:45:06 -!- nooga has joined.
11:49:02 <Sgeo> I am running into problems that are, fundamentally, caused by being in a dynamic language
11:49:31 <Sgeo> (lens-mod (hash 'a 5) (compose-lens (at 'a) (at 'b)) (const 6))
11:50:00 <Sgeo> What is that supposed to do, exactly? The item at 'a in the original object isn't a dict that (at 'b) would know how to modify
11:51:47 -!- nooga has quit (Ping timeout: 252 seconds).
11:54:01 -!- conehead has quit (Quit: Computer has gone to sleep.).
11:56:28 <FreeFull> Sgeo: You're on your own
12:05:27 -!- nooga has joined.
12:06:05 <Sgeo> The only solution that comes readily to mind is having a separate mode for setters
12:06:15 <Sgeo> So, getter+modifier+setter tuple
12:06:20 <Sgeo> But that seems horrific
12:07:11 <Sgeo> Unless... I can have a lens that would 'fail', instead somehow ask upstream what to do
12:07:30 <Sgeo> Like, sending some kind of signal, that const would, by its very nature, ignore, but other things wouldn't
12:07:42 <Sgeo> Except... hmm
12:08:52 <Sgeo> (values) is a thing that unless you ignore it, you choke on it
12:09:03 <Sgeo> (Or otherwise specifically look for it)
12:23:05 <Sgeo> lens.rkt is now safely on GitHub.
12:40:51 -!- MindlessDrone has joined.
12:55:45 -!- Fusl has joined.
12:55:46 -!- yorick has joined.
12:56:02 -!- Fusl has left ("Konversation terminated!").
12:57:11 -!- nyuszika7h has joined.
13:04:47 -!- Phantom_Hoover has joined.
13:18:43 -!- realzies has changed nick to dgw__.
13:18:54 -!- dgw__ has changed nick to realzies.
13:19:12 -!- Frooxius has joined.
13:21:46 -!- realzies has changed nick to some1special.
13:21:58 -!- some1special has changed nick to realzies.
13:30:21 <FreeFull> Sgeo: I wonder if Typed Racket would work better
13:32:06 <Sgeo> Or I just modify all modifiers to receive a signal saying 'no value given'
13:32:52 <Sgeo> Some modifiers might choke on that (car-l, cdr-l), some might not
13:35:17 <Sgeo> Ultimately, const would not care that there's no value given, because it provides a value.
13:35:27 <Sgeo> But a different user-supplied modifier would fail with an arity error
13:37:24 <Sgeo> Hmm, just now decided to check for lenses in other dynamically-typed languages
13:37:28 <Sgeo> pylens exists
13:38:22 <Sgeo> I need sleep
13:45:52 -!- heroux has joined.
14:27:44 -!- MoALTz has quit (Read error: Connection reset by peer).
14:28:25 -!- MoALTz has joined.
14:32:47 -!- MoALTz has quit (Read error: Connection reset by peer).
14:48:17 -!- password2 has joined.
15:20:05 -!- Phantom_Hoover has quit (Read error: Operation timed out).
15:35:35 -!- shikhout has joined.
15:39:00 -!- shikhin has quit (Ping timeout: 265 seconds).
15:39:01 -!- shikhout has changed nick to shikhin.
15:43:20 -!- ter2 has quit (Read error: Connection reset by peer).
15:48:29 -!- constant has joined.
16:06:41 <password2> mmm , shikhout sounds nederlands
16:14:40 <shikhin> password2: Nah, it's a play on my primary nick (my real name), shikhin.
16:14:49 <shikhin> password2: So, shikhout and shikherr are my secondary nicks.
16:14:54 <shikhin> *and tertiary
16:17:48 -!- blotter has joined.
16:21:56 -!- shikhin has quit (Ping timeout: 245 seconds).
16:25:02 -!- tertu has joined.
16:34:15 -!- tromp_ has joined.
16:34:40 <password2> ah
16:34:48 <password2> hout means wood in my language
16:36:51 -!- tromp has quit (Ping timeout: 245 seconds).
16:44:05 -!- blotter_ has joined.
16:45:51 -!- blotter has quit (Ping timeout: 260 seconds).
17:04:10 <FreeFull> Drewno means wood in my language
17:06:34 -!- tertu has quit (Ping timeout: 260 seconds).
17:13:26 -!- Slereah has joined.
17:35:17 -!- nooodl has joined.
17:43:40 <password2> what language is that?
17:45:13 <password2> ah polish
17:48:50 -!- nooodl has quit (Ping timeout: 264 seconds).
17:50:31 -!- nooodl has joined.
17:52:57 -!- heroux has quit (Ping timeout: 272 seconds).
17:57:35 -!- heroux has joined.
18:04:29 -!- nooodl has quit (Ping timeout: 265 seconds).
18:07:31 <kmc> `coins
18:07:32 <HackEgo> doncoin gebsoncoin polycoin tempncoin paranhehcoin isccoin subamcoin emocoin mdjcoin @!coin versigcoin msizecoin haccoin roadlycoin nolocoin gasphalcshicoin sothesecoin calcoin bigehotorcoin retuacoin
18:09:51 <kmc> hot or coin
18:10:16 -!- password2 has quit (Ping timeout: 245 seconds).
18:10:23 <Slereah> Fun fact : coin means "quack" in french
18:10:27 <Slereah> coin coin
18:14:14 <FreeFull> Duck is kaczka in Polish
18:20:18 -!- prooftechnique has joined.
18:21:39 <tromp__> cuckoo coin
18:23:48 -!- password2 has joined.
18:41:13 -!- password2 has quit (Ping timeout: 265 seconds).
19:08:06 -!- JesseH has quit (Ping timeout: 245 seconds).
19:08:55 -!- JesseH has joined.
19:52:27 -!- Phantom_Hoover has joined.
19:52:48 <Bike> which of these fuckin bots has quotes again
19:52:50 <Bike> `quote box
19:52:51 <HackEgo> 46) <apollo> Maternal instincts? <apollo> Don't you just leave the thing in a box until it starts crying, and then shake it until it stops? \ 518) <itidus20> according to physics and maths can we theoretically have a box with infinite cookies inside? \ 637) <Ngevd> BOXBOT IS TERRIBLE <Ngevd> NOBODY LIKES BOXBOT <Ngevd> He's just a box with arms
19:53:07 <Bike> `quote broke
19:53:08 <HackEgo> 174) <pikhq> zzo38: A better definition would probably fix Avogadro's number. <Sgeo> It's broken? \ 380) * Sgeo mutters about broken toilets <Sgeo> #toilet is useless <monqy> is #toilet even a thing <Sgeo> I'm looking for help with toilets \ 497) <Patashu> But I mean, why fix it if it ain't broke? Except now it is \ 795) <kmc> the other day I b
19:54:39 <olsner> `quote HackEgo
19:54:39 <HackEgo> 33) <ehird> `translatefromto hu en Hogy hogy hogy ami kemeny <HackEgo> How hard is that \ 74) <ais523> let's put that in the HackEgo quotes files, just to completely mystify anyone who looks back along them in the future \ 310) <cpressey> `quote django <HackEgo> ​352) <olsner> django is named after a person? <olsner> thought it would be a gira
19:55:19 <olsner> I wonder which bot has the most quotes, fungot perhaps?
19:55:19 <fungot> olsner: there is winscheme48, too.)
19:57:45 <fizzie> `run tr ' ' '\n' < quotes | grep '^<.*>$' | sort | uniq -c | sort -nr | paste
19:57:47 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.14276
19:57:57 <fizzie> Oh, no pasteing allowed.
19:58:01 <fizzie> `run tr ' ' '\n' < quotes | grep '^<.*>$' | sort | uniq -c | sort -nr
19:58:01 <HackEgo> ​ 142 <elliott> \ 132 <Phantom_Hoover> \ 109 <kmc> \ 100 <zzo38> \ 96 <ais523> \ 95 <oklopol> \ 88 <fizzie> \ 78 <fungot> \ 68 <Bike> \ 63 <Taneb> \ 61 <monqy> \ 55 <Sgeo> \ 52 <olsner> \ 52 <oerjan> \ 49 <Gregor> \ 42 <shachaf> \ 32 <Vorpal> \ 26 <itidus20> \
19:58:11 <fizzie> Well, it's the first bot-like thing in the list, anyway.
19:58:55 <Taneb> :O
19:59:36 <olsner> `run /usr/bin/paste
19:59:56 <fizzie> I guess that kind of pasteing is fine.
20:00:06 <HackEgo> No output.
20:00:13 <Bike> no pasting allowed?
20:00:30 <Bike> wait what the heck, i'm in more quotes than itidus?
20:00:32 <Bike> travesty
20:08:32 -!- conehead has joined.
20:23:38 -!- Phantom_Hoover has quit (Ping timeout: 265 seconds).
20:25:54 -!- Phantom_Hoover has joined.
20:40:34 -!- nooodl_ has joined.
20:44:48 -!- blotter__ has joined.
20:45:26 -!- nooga has quit (Quit: Lost terminal).
20:46:22 -!- blotter_ has quit (Ping timeout: 265 seconds).
20:52:41 <zzo38> Do you like SQL?
20:54:06 -!- MindlessDrone has quit (Quit: MindlessDrone).
20:54:34 <kmc> I don't like that SQL is so strongly identified with its concrete syntax, and that SQL is still commonly used by gluing together strings in another programming languages
20:54:58 <kmc> the interface between an application and a database should be something richer than strings
20:55:23 <zzo38> I don't like that strongly gluing of SQL either, but I don't generally use it that way anyways.
20:56:12 <zzo38> And you can use things like ?1 ?2 rather than joining strings using other programs, if you do need to pass parameters to the SQL statements.
20:56:42 <zzo38> SQL can be used fine by itself, and if the program allows the user to enter SQL statements.
20:59:06 <zzo38> SQL is actually a complete programming language, although one which is unusual, it is still good for many things.
21:00:20 <zzo38> Do you disagree with any of this?
21:03:20 <kmc> not really
21:03:47 <kmc> parameters like ?1 are an improvement, but don't really address my core complaint, which isn't about SQL but about how the world works more generally
21:04:11 <kmc> perhaps I will try to explain later
21:05:20 <zzo38> Actually I think I agree your statement about "how the world works more generally", but that doesn't make SQL bad; it just means database interfaces are lacking.
21:06:01 <zzo38> I do generally work with SQL by writing all of the SQL statements, triggers, etc in one file, so the program is mainly written in SQL and any extensions required may be written in C.
21:06:26 <zzo38> The other way around seems more common, and perhaps your complaint addresses that.
21:36:13 <kmc> yeah
21:36:15 <kmc> basically I am annoyed that the only truly universal data format is ASCII text
21:38:16 <kmc> and so when you design a new file format / language / protocol, you have to put a lot of thought into how to represent it as ASCII text
21:39:10 <kmc> and both designers and implementers tend to screw this up in ways that make life miserable
21:39:52 <kmc> in particular it causes a lot of security problems due to improper escaping
21:40:22 <kmc> and the fact that escaping needs to be aware of multiple layers at once
21:40:48 <zzo38> Actually a lot of things can be done with binary data, if you know the endianness and all of that stuff.
21:43:09 <kmc> e.g. perfectly well-formated JSON can still cause trouble when it's pasted after a HTML <script> tag and a string literal contains "</script>"
21:43:35 <kmc> whereas if you think mostly in terms of trees, you still need to serialize them at some point, but that can be a core low-level library and you only have to get it right there
21:50:14 <zzo38> It is possible to work-around the "</script>" problem though. But there are in fact binary formats meant to be usable similar to JSON but if you want binary rather than text format.
22:25:01 -!- Sprocklem has joined.
22:30:43 -!- Phantom_Hoover has quit (Remote host closed the connection).
22:32:53 -!- Phantom_Hoover has joined.
22:37:26 -!- Phantom_Hoover has quit (Ping timeout: 264 seconds).
22:46:39 -!- oerjan has joined.
22:51:00 * oerjan just realized you could do let s = it in ghci
22:51:06 -!- boily has joined.
22:51:12 <oerjan> hoily
22:52:18 <boily> hellœrjan!
22:55:27 -!- metasepia has joined.
23:00:54 <kmc> `coins
23:00:55 <HackEgo> knhcoin sticcoin catccoin flattocoin wiecoin flecoin cariacoin d1reratcoin drocoin brzrocoin recolouxcoin subicoin subulolchicoin nicidicoin commucoin comercoin sallingpowrtyrevolucoin twomacoin genomecoin cradicoin
23:01:23 <kmc> zzo38: sure, it is usually possible to work around design flaws in any kind of system
23:01:56 <kmc> but you can't count on every developer to know all the traps and workarounds and apply them perfectly 100% of the time
23:02:02 <kmc> and even if they did it would still be a large cost
23:03:23 * boily chokes on trying to say “brzrocoin”
23:04:34 -!- prooftechnique has quit (Quit: leaving).
23:13:22 -!- Sorella has joined.
23:28:27 -!- augur has quit (Remote host closed the connection).
23:28:54 -!- augur has joined.
23:30:33 -!- augur has quit (Read error: Connection reset by peer).
23:30:37 -!- augur has joined.
23:50:47 <int-e> nocoin
23:54:54 -!- prooftechnique has joined.
23:56:40 <blotter__> `run echo KCUF | rev
23:56:41 <HackEgo> FUCK
23:57:30 <blotter__> `run echo 'GAB A KCUF' | rev
23:57:31 <HackEgo> FUCK A BAG
23:57:37 <blotter__> Gregor, your bot has misbehaving
23:57:54 <blotter__> *is
23:57:55 <kmc> Knights Christian United in Faith
23:58:01 <kmc> `relcome blotter__
23:58:02 <HackEgo> blotter__: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: <http://esolangs.org/wiki/Main_Page>. (For the other kind of esoterica, try #esoteric on irc.dal.net.)
23:58:48 <blotter__> `run echo 'CMK UOY KCUF' | rev
23:58:49 <HackEgo> FUCK YOU KMC
23:58:56 <blotter__> wow so mean
23:59:09 <kmc> `coins
23:59:10 <HackEgo> dungcoin objectcoin podoccoin muguecoin iorslccoin pyraziecoin afelycoin ilecoin rfremblebraicoin pircoin blongcoin minarycodcoin soncoin laoticacoin blacroncalcoin commencoin dravitycoin genocoin elzellornicoin mithcoin
23:59:31 <blotter__> tittycoin appears to be missing
←2014-02-16 2014-02-17 2014-02-18→ ↑2014 ↑all