←2014-10-31 2014-11-01 2014-11-02→ ↑2014 ↑all
00:00:33 -!- copumpkin has joined.
00:01:28 -!- shikhin has quit (Ping timeout: 255 seconds).
00:09:52 -!- Lymia has quit (Ping timeout: 244 seconds).
00:19:29 <Sgeo> Do Apple laptops ever break down the way this laptop is breaking down?
00:19:45 <Sgeo> Whenever I move the screen, there's a chance of a bunch of stuff getting tinted blue
00:19:51 <Sgeo> Is this something I can fix?
00:20:37 <Sgeo> It seems to be particular colors
00:31:13 -!- not^v has joined.
00:33:07 -!- shachaf has joined.
00:56:26 -!- Lymia has joined.
01:02:35 <Sgeo> http://www.snopes.com/college/homework/foundcar.asp
01:02:38 <Sgeo> I've read that book!
01:03:08 <Sgeo> I don't know what printing it was
01:03:09 <Sgeo> :(
01:05:06 <Sgeo> Apparently the author is a felon
01:08:21 <Bike> you've read Rapid Interpretation of EKGs?
01:08:36 -!- not^v has quit (Ping timeout: 265 seconds).
01:08:58 <Sgeo> Yes
01:11:02 <Bike> are you like, into electrocardiology
01:12:32 <Sgeo> My dad's a doctor. The book was lying around
01:12:37 <Sgeo> This was when I was a kid
01:12:49 -!- zzo38 has joined.
01:20:32 <int-e> . o O ( I guess it has been a while since http://www.schlockmercenary.com/2014-06-15 so a reminder was in order. http://www.schlockmercenary.com/2014-10-30 )
01:22:48 -!- shikhout has quit (Ping timeout: 250 seconds).
01:29:05 -!- Phantom_Hoover has joined.
01:29:05 -!- Phantom_Hoover has quit (Changing host).
01:29:05 -!- Phantom_Hoover has joined.
01:33:16 -!- Lymia has quit (Ping timeout: 255 seconds).
01:46:39 -!- copumpkin has quit (Ping timeout: 256 seconds).
01:50:01 -!- not^v has joined.
02:11:28 <MDude> But if they're in a ring around the planet, how could they *all* pplint to one spot?
02:11:31 <MDude> *point
02:11:56 <Bike> spot could be somewhere off the planet
02:12:03 <MDude> It's have to be one of the poles, and then it'd be at an odd angle.
02:12:19 <MDude> Oh, true.
02:16:04 <int-e> MDude: I think half of them would be enough.
02:16:32 <MDude> It would, but still.
02:17:07 -!- not^v has quit (Ping timeout: 272 seconds).
02:17:23 <int-e> This is Schlock talking. Schlock is not known for impeccable logic. He's known for his love of big guns, and being near indestructible.
02:22:20 <MDude> That's fair enough.
02:24:01 <int-e> hey how about this excuse ...
02:24:46 <MDude> The planet could be considered one spot, if "spot" is takes as peing sufficiently imprecise/on large enough of a scale?
02:24:58 <int-e> those mirrors could just change their orbit slightly until they're all in sight of the target?
02:25:25 <int-e> of course that would produce a ring with a gap
02:25:39 <MDude> They should all just reflect it back to where it came. BURN THE SUN.
02:25:43 <int-e> but that's a small sacrifice when logic is at stake ;-)
02:26:18 <MDude> They could form a smaller, thicker ring on one side of a planet.
02:27:05 <int-e> I was looking for a solution that does not require a lot of energy per mirror (to maintain its orbit).
02:27:49 <int-e> rather I was looking for something that current Earth satellites might be capable of doing.
02:28:45 <int-e> ooh, logic. http://thedevilspanties.com/archives/10247 ... looks painful.
02:31:57 -!- hjulle has joined.
02:32:12 -!- hjulle has quit (Remote host closed the connection).
02:41:44 -!- Lymia has joined.
02:42:00 <Lymia> I took a look at Maptools to see if I could bypass GM protections and stuff
02:42:18 <Lymia> I ended up with a proof of concept for arbitary file write on servers with no authentication needd.
02:42:20 <Lymia> needed*
02:43:23 <int-e> "servers"
02:44:30 <Lymia> They accept connections from clients
02:44:35 <Lymia> I feel safe calling them servers.
02:46:29 <int-e> Never mind, Google enlightened me about the context.
02:47:03 <vanila> Recommendations on languages to easily write bootstrapping compilers in?
02:47:37 <int-e> Lymia: How about "The best part is all this isn't limited to a single PC. You can utilize the integrated server function to let your players maintain your server, [...]"
02:52:17 -!- copumpkin has joined.
03:19:11 -!- contrapumpkin has joined.
03:20:56 -!- vanila has quit (Quit: Leaving).
03:22:10 -!- copumpkin has quit (Ping timeout: 255 seconds).
03:25:09 -!- contrapumpkin has changed nick to copumpkin.
03:28:04 -!- copumpkin has quit (Read error: Connection reset by peer).
03:29:48 -!- copumpkin has joined.
03:35:22 -!- copumpkin has quit (Ping timeout: 240 seconds).
03:41:08 -!- copumpkin has joined.
03:49:25 -!- oerjan has joined.
03:51:10 -!- Samhain has changed nick to centrinia.
03:58:18 <zzo38> Now I bought some new Akagi book, as well as a Famicom. I don't know how to connect it up to the TV set, yet.
04:00:09 -!- copumpkin has quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…).
04:04:37 <Sgeo> The March 2016 cruise I wanted to go on was cancelled, I think
04:21:52 -!- MDude has changed nick to MDream.
04:52:54 -!- copumpkin has joined.
04:56:39 -!- not^v has joined.
05:01:47 -!- not^v has quit (Ping timeout: 272 seconds).
06:54:46 -!- shikhin has joined.
07:04:10 -!- ais523 has joined.
07:16:35 -!- MoALTz has joined.
07:16:56 -!- shikhin has quit (Ping timeout: 244 seconds).
07:18:58 -!- ais523 has changed nick to ais523\unfoog.
07:22:17 -!- centrinia has quit (Ping timeout: 265 seconds).
07:41:18 -!- mihow has joined.
07:52:50 -!- centrinia has joined.
08:39:02 <HackEgo> [wiki] [[Talk:FakeASM]] http://esolangs.org/w/index.php?diff=40742&oldid=40735 * Rdebath * (+493) /* Um Esoteric Language ? */
08:49:44 <Sgeo> "On the ship or ashore the speed and reliability of internet may not be optimal. Expect to encounter issues with uploading or downloading attachments, possible frequent outages, computer freezups, access to USB ports, etc."
08:53:19 -!- AnotherTest has joined.
08:53:28 -!- Phantom_Hoover has quit (Ping timeout: 250 seconds).
09:16:46 -!- Froox has quit (Read error: Connection reset by peer).
09:24:49 -!- Phantom_Hoover has joined.
10:20:31 -!- oerjan has quit (Quit: leaving).
11:10:48 -!- hjulle has joined.
11:33:03 -!- MDream has changed nick to MDude.
11:38:08 <J_Arcane> new *nix OS for z80s. https://github.com/EtchedPixels/FUZIX cc: zzo38
11:45:53 -!- ais523 has joined.
11:49:41 -!- ais523\unfoog has quit (Ping timeout: 264 seconds).
11:51:22 -!- ais523 has changed nick to ais523\unfoog.
11:53:44 -!- centrinia has quit (Ping timeout: 250 seconds).
12:02:17 -!- MoALTz has quit (Quit: Leaving).
12:06:54 -!- ais523\unfoog has quit.
12:07:00 -!- ais523 has joined.
12:21:55 -!- AnotherTest has quit (Remote host closed the connection).
12:23:59 -!- ais523 has changed nick to ais523\unfoog.
12:25:24 -!- SignX has joined.
12:35:52 <SignX> I am trying to implement a Brainfuck interpreter in my own programming language and I am a bit unsure whether the approach i am taking is going to lead anywhere. How do you implement a imperative programming language in a declarative one?
12:48:27 <Jafet> You could start with a simpler language, like deadfish.
12:50:13 -!- SignX has quit (Ping timeout: 246 seconds).
12:55:50 -!- SignX has joined.
12:58:45 <SignX> Jager: I was under the impression brainfuck already was a simple language. But you think deadfish is a better choice?
12:59:05 <SignX> Jager = Jafet
13:02:49 <mroman> deadfish is even simpler
13:02:52 <mroman> mainly because no loops .
13:06:08 <SignX> Aha, thx. I have to go. Bye!
13:06:10 -!- SignX has quit (Quit: Page closed).
13:07:47 -!- qlkzy has quit (Excess Flood).
13:10:12 -!- qlkzy has joined.
13:22:51 -!- ais523\unfoog has quit.
13:28:49 <b_jonas> state monads
13:36:54 <mroman> identity monads
13:46:26 <Melvar> ( the (Monad id) %instance
13:46:26 <idris-bot> constructor of Prelude.Monad.Monad (\{meth0} => \{meth1} => \{meth2} => \{meth3} => meth meth) : Monad id
13:55:48 <Jafet> A meth lab
14:09:34 -!- Frooxius has joined.
15:34:11 -!- ais523 has joined.
15:54:32 -!- blsqbot has quit (Quit: Exiting).
15:55:28 -!- blsqbot has joined.
15:55:30 <mroman> !blsq {1 2 3}iT
15:55:30 <blsqbot> {{} {1} {1 2} {1 2 3}}
15:55:39 <mroman> !blsq 10roq++pa
15:55:39 <blsqbot> {1 3 6 10 15 21 28 36 45 55}
15:56:15 <mroman> fizzie: Even with a partial builtin you don't beat 12B ;)
15:56:42 <mroman> (you would with a partial sum builtin though)
15:56:52 <mroman> (pa is the partial command)
15:56:59 <mroman> !blsq 10roqpdpa
15:56:59 <blsqbot> {1 2 6 24 120 720 5040 40320 362880 3628800}
15:58:12 <mroman> !blsq 10roq<-pa
15:58:12 <blsqbot> {{1} {2 1} {3 2 1} {4 3 2 1} {5 4 3 2 1} {6 5 4 3 2 1} {7 6 5 4 3 2 1} {8 7 6 5
15:58:51 <mroman> !blsq 10roiT
15:58:52 <blsqbot> {{} {1} {1 2} {1 2 3} {1 2 3 4} {1 2 3 4 5} {1 2 3 4 5 6} {1 2 3 4 5 6 7} {1 2 3
15:58:55 <mroman> !blsq 10roiT)++
15:58:55 <blsqbot> {0 1 3 6 10 15 21 28 36 45 55}
16:00:33 -!- blsqbot has quit (Read error: Connection reset by peer).
16:01:31 <Melvar> ( the (StateT Integer id ()) $ do put (!get + 1)
16:01:31 <idris-bot> ST (\st => ((), prim__addBigInt st 1)) : StateT Integer id ()
16:02:03 <Melvar> ( runState (the (StateT Integer id ()) $ do put (!get + 1)) 2
16:02:03 <idris-bot> No such variable runState
16:02:09 <Melvar> ( runStateT (the (StateT Integer id ()) $ do put (!get + 1)) 2
16:02:10 <idris-bot> ((), 3) : ((), Integer)
16:02:59 <Melvar> Best identity monad: actually id.
16:07:51 -!- blsqbot has joined.
16:07:52 <mroman> !blsq "abc"iR
16:07:52 <blsqbot> {"abc" "bca" "cab"}
16:07:56 <mroman> !blsq "abcd"iR
16:07:56 <blsqbot> {"abcd" "bcda" "cdab" "dabc"}
16:08:20 <mroman> !blsq "abcd"iRq_+pa
16:08:20 <blsqbot> {{"abcd"} ERROR: Burlesque: (_+) Invalid arguments! {"abcd" "bcda"} ERROR: Burle
16:08:31 <mroman> !blsq "abcd"iR{)\[}pa
16:08:31 <blsqbot> {{ERROR: Burlesque: (\[) Invalid arguments! "abcd"} {ERROR: Burlesque: (\[) Inva
16:08:40 <mroman> !blsq "abcd"iR{\[}pa
16:08:40 <blsqbot> {"abcd" "abcdbcda" "abcdbcdacdab" "abcdbcdacdabdabc"}
16:08:55 <mroman> !blsq "world"iRq\[pa
16:08:55 <blsqbot> {"world" "worldorldw" "worldorldwrldwo" "worldorldwrldwoldwor" "worldorldwrldwol
16:09:06 <mroman> !blsq "abc"iRq\[pa
16:09:07 <blsqbot> {"abc" "abcbca" "abcbcacab"}
16:10:34 <mroman> Work on Burlesque 1.7.4 has started :D
16:14:13 <b_jonas> mroman: good
16:14:19 <b_jonas> is that the one that will have variables?
16:18:25 <ais523> hmm, Snowflake would make for an excellent golfing language
16:18:44 <ais523> especially if the interpreter was persistent between runs (which it really should be)
16:31:16 -!- nys has joined.
16:46:32 -!- blsqbot has quit (Ping timeout: 260 seconds).
17:42:10 <mroman> b_jonas: assumingly.
17:45:50 -!- adu has joined.
17:45:57 -!- blsqbot has joined.
17:45:59 <mroman> !blsq 3ro)roqiRpa
17:45:59 <blsqbot> {{{{1}}} {{{1} {1 2}} {{1 2} {1}}} {{{1} {1 2} {1 2 3}} {{1 2} {1 2 3} {1}} {{1
17:46:37 <mroman> !blsq 2ro)roqiRpa
17:46:37 <blsqbot> {{{{1}}} {{{1} {1 2}} {{1 2} {1}}}}
17:47:07 <mroman> !blsq 10ro{roq++pa}pa
17:47:07 <blsqbot> Ain't nobody got time fo' dat!
17:47:12 <mroman> !blsq 5ro{roq++pa}pa
17:47:12 <blsqbot> Ain't nobody got time fo' dat!
17:47:15 <mroman> !blsq 2ro{roq++pa}pa
17:47:15 <blsqbot> {1 {{1}} 1 {{1 2} {1 2 2 1}}}
17:47:19 <mroman> !blsq 3ro{roq++pa}pa
17:47:19 <blsqbot> {1 {{1}} 1 {{1 2} {1 2 2 1}} 1 {{1 2 3} {1 2 3 2 1 3} {1 2 3 2 1 3 3 2 1} {1 2 3
17:48:06 <mroman> weird
17:48:08 <mroman> !blsq 3ro{roq++pa}paL[
17:48:08 <blsqbot> 6
17:48:11 <mroman> !blsq 4ro{roq++pa}paL[
17:48:11 <blsqbot> 8
17:48:14 <mroman> !blsq 14ro{roq++pa}paL[
17:48:14 <blsqbot> 28
17:58:15 <b_jonas> um, what does pa do?
17:58:30 <b_jonas> !blsq 3 1 4 1 5 9pa#s
17:58:30 <blsqbot> {ERROR: Burlesque: (pa) Invalid arguments! 9 5 1 4 1 3}
17:58:41 <b_jonas> !blsq 3 1 {4 1 5 9}pa#s
17:58:42 <blsqbot> {ERROR: Burlesque: (pa) Invalid arguments! {4 1 5 9} 1 3}
17:58:54 <b_jonas> !blsq 3 {1 4 1 5} 9pa#s
17:58:55 <blsqbot> {ERROR: Burlesque: (pa) Invalid arguments! 9 {1 4 1 5} 3}
17:59:03 <b_jonas> !blsq {3 1 4}{1 5 9}pa#s
17:59:03 <blsqbot> {{{3} 1 5 9 {3 1} 1 5 9 {3 1 4} 1 5 9}}
18:08:09 -!- adu has left.
18:14:23 <mroman> b_jonas: partial
18:14:26 <mroman> like partial sums
18:14:30 <mroman> !blsq 10ro{++}pa
18:14:30 <blsqbot> {1 3 6 10 15 21 28 36 45 55}
18:14:37 <mroman> or partial products
18:14:40 <mroman> !blsq 10ro{pd}pa
18:14:40 <blsqbot> {1 2 6 24 120 720 5040 40320 362880 3628800}
18:15:34 <b_jonas> aha
18:16:22 <fizzie> If that's an O(n^2) thing, I'm slightly afraid of the time limits, compared to a regular scan[lr]1?-based partial thing.
18:25:03 <mroman> It is an O(n^2) thing
18:25:15 <mroman> but I'm implementing a version of it that works differently
18:25:36 <mroman> (i.e. one that takes ?+)
18:25:43 <mroman> and which will be more efficient
18:26:46 <mroman> pa will be usably for commands that work on lists
18:26:55 <mroman> and PA will be usable the other way
18:26:56 <b_jonas> mroman: is this associating the direction that has to be O(n^2), or the direciton where it coudl be O(n)?
18:27:01 <mroman> where you just collect intermediate results
18:27:29 <mroman> pa just builds up tails
18:27:35 <mroman> and maps the supplied block over it
18:27:36 <mroman> so
18:27:39 <mroman> !blsq 10roiT
18:27:39 <blsqbot> {{} {1} {1 2} {1 2 3} {1 2 3 4} {1 2 3 4 5} {1 2 3 4 5 6} {1 2 3 4 5 6 7} {1 2 3
18:27:43 <mroman> !blsq 10roiT)++
18:27:43 <blsqbot> {0 1 3 6 10 15 21 28 36 45 55}
18:27:49 <mroman> that's what pa does
18:28:33 <mroman> which is inefficient but there might be some weird use cases for it
18:28:41 <mroman> !blsq {1 2 3}q<-pa
18:28:41 <blsqbot> {{1} {2 1} {3 2 1}}
18:28:47 <mroman> like that one or I don't know
18:29:16 <int-e> > foldl (flip (:)) [] [1..3] -- hmm
18:29:18 <lambdabot> [3,2,1]
18:29:24 <int-e> > scanl (flip (:)) [] [1..3]
18:29:26 <lambdabot> [[],[1],[2,1],[3,2,1]]
18:29:48 <mroman> !blsq {1 2 3}q\[pa
18:29:48 <blsqbot> {{1} {1 2} {1 2 3}}
18:29:56 <mroman> !blsq "bar"q\[pa
18:29:56 <blsqbot> ERROR: Burlesque: (pa) Invalid arguments!
18:30:02 <mroman> !blsq "barfuss"q\[pa
18:30:02 <blsqbot> ERROR: Burlesque: (pa) Invalid arguments!
18:30:04 <mroman> hm
18:30:07 <mroman> !blsq "barfuss"XXq\[pa
18:30:07 <blsqbot> {"b" "ba" "bar" "barf" "barfu" "barfus" "barfuss"}
18:30:26 <mroman> ah. yeah
18:30:29 <b_jonas> !blsq {3 1 4 1 5}{bx[+}pa
18:30:29 <blsqbot> {{{3}} ERROR: Burlesque: ([+) Invalid arguments! {{3 1}} ERROR: Burlesque: ([+)
18:30:33 <mroman> gotta add a (BlsqStr x :) too
18:30:38 <b_jonas> !blsq {3 1 4 1 5}{bx[+}PA
18:30:39 <blsqbot> ERROR: Unknown command: (PA)!
18:30:46 <b_jonas> !blsq {3 1 4 1 5}{{bx[+}r[}pa
18:30:46 <blsqbot> {3 ERROR: Burlesque: ([+) Invalid arguments! ERROR: Burlesque: ([+) Invalid argu
18:30:47 <mroman> that one is not implemented yet
18:30:51 <b_jonas> !blsq {3 1 4 1 5}{{bx+]}r[}pa
18:30:51 <blsqbot> {3 ERROR: Burlesque: (+]) Invalid arguments! ERROR: Burlesque: (+]) Invalid argu
18:30:59 <mroman> !blsq {3 1 4 1 5}{im}pa
18:30:59 <blsqbot> {3 31 314 3141 31415}
18:31:04 <b_jonas> !blsq {3 1 4 1 5}{{bxj[+}r[}pa
18:31:04 <blsqbot> {3 {1 3} {4 {1 3}} {1 {4 {1 3}}} {5 {1 {4 {1 3}}}}}
18:31:13 <b_jonas> right, that
18:31:27 <mroman> !blsq {3 1 4 1 5}{p^}pa
18:31:27 <blsqbot> {3 1 3 4 1 3 1 4 1 3 5 1 4 1 3}
18:31:30 <b_jonas> ^ that can be done in linear time, and
18:31:37 <b_jonas> !blsq {3 1 4 1 5}{<-{bxj[+}r[}pa
18:31:37 <blsqbot> {3 {3 1} {3 {1 4}} {3 {1 {4 1}}} {3 {1 {4 {1 5}}}}}
18:31:41 <b_jonas> ^ that can't
18:32:32 <int-e> C-x RET c <-- who's supposed to remember this?!
18:32:40 <mroman> !blsq "barFUsS"XX{)<-}pa
18:32:41 <blsqbot> {{'B} {'B 'A} {'B 'A 'R} {'B 'A 'R 'f} {'B 'A 'R 'f 'u} {'B 'A 'R 'f 'u 'S} {'B
18:32:49 <mroman> !blsq "barFUsS"XX{)<-\[}pa
18:32:49 <blsqbot> {"B" "BA" "BAR" "BARf" "BARfu" "BARfuS" "BARfuSs"}
18:33:51 <int-e> > mapM words["big bare flat","foot"]
18:33:53 <lambdabot> [["big","foot"],["bare","foot"],["flat","foot"]]
18:34:08 <int-e> > concat<$>mapM words["big bare flat","foot"]
18:34:10 <lambdabot> ["bigfoot","barefoot","flatfoot"]
18:34:54 <int-e> > concat<$>words=<<["big bare flat","foot"]
18:34:56 <lambdabot> "bigbareflatfoot"
18:46:58 <int-e> . o O ( somehow, Make 24 is far more satisfying in Perl than in Haskell )
18:52:29 <b_jonas> int-e: well of course
18:52:38 <b_jonas> almost any golf is
18:52:46 <b_jonas> oh, you got it down to 181
18:52:46 <b_jonas> nice
18:53:20 <b_jonas> that's quite short
19:02:06 <int-e> let's see how short it'll look in two weeks...
19:02:45 <int-e> in this problem there are so many approaches that one could try
19:14:21 -!- vanila has joined.
19:14:22 <vanila> Hi
19:15:22 <ais523> hi
19:15:44 <tromp> hi
19:17:09 <vanila> I started an analyzer to see if prolog query is deterministic
19:17:21 <vanila> should be able to compile them to haskell
19:17:28 <vanila> type classes and instances
19:23:44 -!- shikhin has joined.
19:51:15 <HackEgo> [wiki] [[Talk:FakeASM]] http://esolangs.org/w/index.php?diff=40743&oldid=40742 * Zzo38 * (+445)
19:56:23 -!- MoALTz has joined.
20:08:16 -!- AnotherTest has joined.
20:51:13 -!- boily has joined.
21:01:21 -!- boily has quit (Quit: QUID CHIC).
21:01:44 -!- boily has joined.
21:01:58 -!- boily has quit (Client Quit).
21:10:08 <mroman> !blsq 1{2 3 4}{<-}e!
21:10:09 <blsqbot> {4 3 2}
21:10:16 <mroman> !blsq 1{2 3 4}{#<}e!#s
21:10:16 <blsqbot> {1 {2 3 4}}
21:10:32 <mroman> !blsq 1{2 3 4}{#<}st
21:10:32 <blsqbot> ERROR: Burlesque: (st) Invalid arguments!
21:11:00 <mroman> !blsq 1{2 3 4}{#<}rs
21:11:00 <blsqbot> {4 3 2}
21:11:04 <mroman> !blsq 1{2 3 4}{#<}rs#s
21:11:04 <blsqbot> {{4 3 2} 1}
21:11:28 <mroman> (rs is a form of eval that doesn't touch the current stack)
21:11:39 <mroman> !blsq 1{2 3 4}{#<}e!#s
21:11:39 <blsqbot> {1 {2 3 4}}
21:18:36 -!- blsqbot has quit (Ping timeout: 260 seconds).
21:34:00 -!- ais523 has changed nick to ais523\unfoog.
21:43:22 <tromp> > 652*93
21:43:24 <lambdabot> 60636
21:43:31 <tromp> > 653*92
21:43:32 <lambdabot> 60076
21:51:25 -!- ais523\unfoog has quit.
22:04:45 <zzo38> Is there a single-file simple LZMA2 compression and decompression library?
22:05:47 <zzo38> (Additionally, I require that it be cross-platform and free-software.)
22:17:21 -!- FreeFull has quit (Ping timeout: 265 seconds).
22:19:20 -!- FreeFull has joined.
22:19:34 -!- FreeFull has quit (Changing host).
22:19:34 -!- FreeFull has joined.
22:22:09 <b_jonas> zzo38: I don't know any of those for lzma2, sorry (though you could try to put some existing source code to one file). do you need lzma2? would some other compression and decompression not do?
22:22:59 <zzo38> Well, LZMA would probably do too, it doesn't have to be LZMA2.
22:23:16 <zzo38> (The data I am trying to compress doesn't compress well with DEFLATE.)
22:23:51 <b_jonas> zzo38: dunno, try to take the non-machine specific part of the compressor from xz or 7z and massage it to one file.
22:24:04 <b_jonas> but that's probably not so easy
22:29:36 <zzo38> I also don't need filters like xz has, nor support for a file listing. I don't know what algorithm Bzip2 uses, but that seems to work well too.
22:31:13 <b_jonas> could you use some domain-specific compression method, or domain-specific preprocessing?
22:31:33 <b_jonas> what are you compressing?
22:32:19 <zzo38> I am compressing a "Z-Machine Archive", which contains a story file, capability set, metadata, and possibly also sounds and pictures.
22:32:58 <b_jonas> zzo38: um, some of those might be different from the others. can you somehow separate it to sounds, pictures, and the rest, and see how each compresses,
22:33:25 <b_jonas> then use sound and picture specific compression for those parts, and zip-like byte compression for the byte-oriented text stuff, possibly after some preprocessing?
22:35:06 <zzo38> Actually, all of the data is already somewhat compressed in different ways (text in story files is packed to 5-bits per character and also uses a simple dictionary coding scheme; YZIP picture libraries are compressed using Huffman, XOR, palettes, and stippling; XZIP picture libraries and sounds aren't compressed at all)
22:35:33 <b_jonas> zzo38: yes, that's the problem. you might want to unpack the text so taht you can zip it after
22:35:50 <b_jonas> like, if it's 5 bits per character, but zip is very 8-bit oriented, it's harder for it to compress
22:35:52 <zzo38> I could allow it to avoid compressing some parts if compressing them wouldn't help, and add a mode to the program to disable all compression, but other than that I want to just use a single compression algorithm.
22:36:05 <zzo38> b_jonas: I know that, although it isn't always predictable where the text even is in the file.
22:36:22 <b_jonas> zzo38: yeah... that could be tricky. you may need some imperfect heuristics
22:36:35 <b_jonas> as long as you compress losslessly, it shouldn't be a problem if you sometimes misidentify stuff
22:36:41 <b_jonas> does the compression have to be fast?
22:36:55 <zzo38> Yes, that was a thought too. But since I found out that bzip2 works good enough, I thought that could be used.
22:37:26 <zzo38> b_jonas: No it doesn't have to be particularly fast (although it would be a good idea for the decompression not to be too slow)
22:37:28 <b_jonas> if bzip2 works well, that might be easier to get a small implementation, but I think bzip2 is byte-oriented too (and png is too while we're there)
22:38:28 <zzo38> Yes, although I found that bzip2 does work. (Another thing about the Z-machine text packing: It is packed three 5-bit characters into two bytes; the remaining bit tells if it is finished or not.)
22:38:28 <int-e> bzip2 is definitely byte oriented
22:39:16 <int-e> oh that should be fine. then every repeated string comes in just two versions, essentially.
22:39:21 <b_jonas> zzo38: oh, that's better! better than packing 8 characters in 5 bytes that is, because you have less synchronization problems
22:39:30 <b_jonas> yep
22:39:34 <myname> int-e: no
22:39:40 <int-e> oh 3.
22:39:45 <myname> it depends on where it is in the text
22:40:19 <zzo38> It might not be the best compression, but it does work reasonably well; DEFLATE doesn't work so well from my testing.
22:40:34 <myname> sounds fun
22:41:30 <int-e> myname: abcdef can be packed as (abc)(def)(ghi), (..a)(bcd)(efg)(hi.), (.ab)(cde)(fgh)(i..); bwt will put the repeated center parts together and probably produce decent predictions (and thus compression) anyway.
22:42:02 <int-e> (sorry, abcdefghi - I added another triplet as an afterthought)\
22:42:50 <int-e> but the point was that while having only 1 encoding would be ideal, having 3 is better than having 8.
22:43:03 <b_jonas> zzo38: so how quickly do the text and other segments mix? can you try to pack each part normally and after expanding the text, and choose whichever compresses better?
22:44:21 <zzo38> b_jonas: I did think of that too, although the alignment is also unpredictable (sometimes on an even byte boundary, and sometimes odd).
22:44:33 <b_jonas> ouch...
22:44:41 <b_jonas> then try all three?
22:44:49 <b_jonas> even text, odd text, bytes
22:44:52 -!- AnotherTest has quit (Ping timeout: 240 seconds).
22:44:57 <int-e> zzo38: how does this work? does the z machine encode addresses that are then decoded and displayed as strings?
22:45:11 <b_jonas> odd alignment... ewww
22:46:20 <zzo38> int-e: It depends on the situation. The PRINTI and PRINTR instructions are followed by text strings inline; PRINT and PRINTB point to other strings (PRINT always to even alignment, PRINTB to even or odd); an object header may point to a string representing the "short description" of an object, and the vocabulary also contains packed strings.
22:46:29 <int-e> (I sort of expected the files to have a string table instead, with code providing indices into the table, a bit like java objects... but I never investigated)
22:46:34 <b_jonas> ouch, that's worse....
22:46:52 <b_jonas> that means the thingies can change very quickly
22:47:05 <b_jonas> and hard to find them
22:48:20 <int-e> (Ok, PRINTI is more efficient than that; it saves the index.)
22:49:07 <int-e> zzo38: Do you know whether games ever exploit common suffixes of strings, if the alignment allows it?
22:50:09 <zzo38> int-e: As far as I know no existing files do, but if I make my own, they would exploit a whole lot of stuff (I mentioned these things in a document called the Tricky Document).
22:53:40 <b_jonas> zzo38: so how much is it possible to try to follow all the possible execution paths hoping all of them are actually possible, sort of like decompiling, and that way try to determine which parts of the image are text and stuff?
22:53:52 -!- idris-bot has quit (Ping timeout: 244 seconds).
22:54:41 <zzo38> b_jonas: That is probably very complicated. I am not intending to cause the best possible compression anyways though; I am just trying to make it to be reasonably good compression.
22:55:49 <b_jonas> ok, so bzip2 then
22:57:53 <b_jonas> zzo38: you could try to concatenate the seven source files from the bzip2 program, that isn't too many, there's only like seven source files, plus some headers
22:58:04 <b_jonas> zzo38: you could try to remove the checksumming part, though that doesn't really add much
22:59:25 <b_jonas> zzo38: or you could similarly try to catenate the lzma stuff from the 7z sources or something
22:59:28 <zzo38> The archiver program uses its own header formats and stuff, so, I want to use it in a library. And, yes I don't need checksumming and stuff; the uncompressed format it is known to figure out when the data is finished, so it will know when to stop.
23:00:08 <zzo38> I will look to see how the bzip2 codes are working so that I can learn that.
23:09:10 <b_jonas> ooh, strange choice, rng! two wands of polymorph in a chest in a starting room.
23:11:59 <myname> i like playing as a dragon, it makes things so convinient
23:12:15 <myname> lay some eggs, hatch them, eat babys
23:12:25 <b_jonas> but... no hands
23:12:25 <myname> never be hungry again
23:14:22 -!- impomatic_ has joined.
23:16:12 <b_jonas> what a crazy mines level layout
23:17:02 <b_jonas> well, this was a quick deat
23:17:11 <b_jonas> magic trap in mines
23:18:24 <b_jonas> oh, wrong channel
23:21:19 -!- Sprocklem has joined.
23:24:08 -!- vyv_ has joined.
23:24:09 -!- vyv has quit (Ping timeout: 260 seconds).
23:34:30 <Sgeo> b_jonas: what game?
23:34:41 <Sgeo> Oh, NetHack I assume
23:34:44 <b_jonas> yes
23:45:50 -!- FreeFull has quit (Ping timeout: 244 seconds).
23:46:39 -!- FreeFull has joined.
←2014-10-31 2014-11-01 2014-11-02→ ↑2014 ↑all