00:00:31 <fizzie> Actually checking again, it's (the N900 temp, that is) in the phone, just next to the battery. Probably cuts off charging if it raises to "you could burn an egg" temperatures.
00:02:17 <Vorpal> fizzie, how much does pressure vary with altitude compared to how much it varies with weather?
00:05:29 -!- TeruFSX_ has quit (Read error: Connection reset by peer).
00:06:15 <fizzie> IIRC you need really significant altitude changes to vary more than due to weather, but I suppose you could get some relative altitude data with better precision, maybe. (Weather doesn't change all that rapidly.)
00:07:50 <Vorpal> why don't they make glasses with oleophobic coatings?
00:07:52 <fizzie> It could even slurp the reference barometric pressure from the nearest weather station over the net and use that to fix things for altitude readings.
00:08:22 <Vorpal> and speaking of that, why don't they make glasses out of Gorilla glass?
00:09:02 <Vorpal> fizzie, right, that seems reasonable
00:11:05 <fizzie> I suppose their lens-making tools might not work on that? I don't really know how Gorilla glass works.
00:11:29 <Vorpal> the oleophobic coating should though
00:11:41 <fizzie> Or maybe they just assume people with glasses don't get hit so often.
00:12:08 <Vorpal> that is the real issue
00:13:50 <fizzie> Apparently some folks at "Zenni Optical" do oleophobic coating on eyeglasses. (Didn't see any actual reviews on whether it works.)
00:15:13 -!- VorpalPhone has joined.
00:16:18 <VorpalPhone> fizzie: glasses with that would be amazing though
00:18:53 <fizzie> They took a professional-photographer research group photo at work few weeks back, but I don't think it's online yet.
00:19:29 <fizzie> All others are somewhat old.
00:19:32 -!- Vorpal has quit (Ping timeout: 246 seconds).
00:20:02 <fizzie> There's a dithered black-and-white one at http://zem.fi/img/namecard.png -- that's from 2004.
00:20:46 <fizzie> I don't normally have the hair quite like that.
00:21:06 <fizzie> I was visiting a friend, whose girlfriend did that, if I recall correctly.
00:22:01 <fizzie> Yes, but not braided like that, nor with a bowtie-like thing.
00:24:11 <fizzie> I used it in a black-and-white-printed piece of paper at my (shared-)office door originally.
00:24:28 <fizzie> Also it's not quite as clear as the original, which is just a benefit.
00:25:14 <fizzie> I, uh... actually the other online photo I have is from 2001, 18th birthday party, and it has an even more ridiculous hair.
00:25:22 <fizzie> Again someone else's fault.
00:25:57 <fizzie> I'm not sure I should.
00:27:50 <fizzie> Well, it's over a decade old, maybe I'm detached enough from it.
00:27:56 <VorpalPhone> Also why does swype think "why" is eddy or edgy most puff the time
00:28:15 <fizzie> http://chillout.irc-galleria.net/e/fi-i/00/00/00/65/65.jpg?h=31fa662a24e06ca351d0a2329dc4dad3456ee50b&t=1341735256 -- and yes, the query string params seem to be necessary.
00:28:40 -!- edwardk has joined.
00:28:57 <fizzie> Maybe they'll get that group photo up soon, then I can refer to it. (Except if it turns out horrible.)
00:29:31 -!- edwardk has quit (Client Quit).
00:31:37 <fizzie> Speech group of the Information and Computer Science department of the School of Science of Aalto University.
00:32:09 <fizzie> Kind of long to spell out like that in an affiliation field.
00:32:24 <fizzie> Speech recognition and synthesis, for the most part.
00:33:26 <fizzie> Also it's part of the Computational... O-something Inverse... N-something special thing-thing, but I'm not sure where it goes, hierarchically.
00:33:34 <fizzie> I guess it goes a bit sideways.
00:34:03 <fizzie> Haven't talked to, can't really have an opinion.
00:35:05 <fizzie> Oh, it was "Centre of Excellence in Computational Inference Research".
00:35:16 <VorpalPhone> Samsung's s voice is annoying. That is their siri clone
00:35:17 <fizzie> It's just called COIN most of the time.
00:35:43 <fizzie> (The Centre of Excellence thing is some sort of a funding-related nation-wide thing.)
00:36:00 <fizzie> (There's probably a dozen or two of them.)
00:37:06 <fizzie> Well, the previous Centre of Excellence used to be AIRC, and then NN-something before that.
00:37:18 <fizzie> It's a fixed-term (five years?) thing.
00:37:43 <VorpalPhone> Sure you live up to that, but everyone else?
00:38:24 <fizzie> I'm not even sure who of the department are "in" COIN. I *think* our group as a whole is.
00:38:45 <fizzie> It's not like it actually affected something that'd be visible on my level.
00:38:46 <VorpalPhone> You mean the title is on a rotating schedule?
00:39:01 <fizzie> They nominate new ones as old ones end.
00:39:14 <fizzie> (It's not an exclusive title.)
00:39:34 <fizzie> And normally it has a bit different focus than the previous one.
00:39:57 <fizzie> I think this current one is in fact shared with University of Helsinki.
00:40:10 <fizzie> Adative Informatics Research Centre.
00:40:32 <fizzie> And the one before had Neural Networks in the name.
00:42:05 <fizzie> "The Finnish Centre of Excellence in Computational Inference Research (COIN) develops methods for transforming the data produced by the current data revolution into useful information. The key methodology for achieving this goal is statistical and computational inference based on the data. The emphasis is on large data collections and computationally demanding modelling and inference ...
00:42:11 <fizzie> ... algorithms. Our mission is to push the boundary towards both more complex problems, requiring more sructured data models, and towards extremely rapid inference. -- We will work on two flagship applications. In the Intelligent Information Access flagship, the challenge is to make use of massive interrelated information sources, whether in everyday life or in science, and select what ...
00:42:17 <fizzie> ... information to present to the user. The inference needs to be done on-line, learning relevance from the user's responses. In the Computational Biology and Medicine flagship, we develop methods for maximally utilizing the novel measurement databases and structured stochastic models in making data-driven biology cumulative."
00:42:22 <fizzie> Someone good at writing funding applications has been doing their blurbs.
00:42:37 <fizzie> Since it says "we will", chances are it's quoted directly from the application docs.
00:42:55 <fizzie> Anyway, fancy buzzwords and all that.
00:43:24 <itidus21> i love the part where the acronym isn't even close to the word it indicates
00:43:50 <fizzie> COmputational INference, COIN.
00:44:12 <fizzie> Suppose they wanted it pronounceable and memorable.
00:44:39 <itidus21> well thats extremely arbitrary :D
00:44:55 <fizzie> I'm no biologist. But Bayesians doing biology. Gene expression datasets feature heavily, I think.
00:46:15 <fizzie> Protein-protein interaction networks, too. (All I know about this is the abstracts in email ads of arranged talks.)
00:46:44 <itidus21> its roughly like saying, The Esoteric Programming Languages Wiki(ESPR)
00:46:54 <VorpalPhone> itidus21: not as random as xml... should be eml
01:06:13 -!- ais523 has quit (Quit: rebooting, brb).
01:06:21 -!- Phantom_Hoover has set topic: #esoteric: Where we decide just how much you can shoot someone and their dog. | http://codu.org/logs/_esoteric/ | This is what the bfjoust hill will look like under the new scoring system: http://pastebin.com/raw.php?i=XEWnVMg8.
01:06:53 <Phantom_Hoover> itidus21, that's contrived because it leaves out half the words, though.
01:07:20 <VorpalPhone> Also input method is pretty cool. I I'm trying out SwiftKey atm
01:07:30 <itidus21> The Finnish Centre of Excellence in Computational Inference Research (COIN)
01:09:28 <VorpalPhone> Also SwiftKey is much faster than Swype with two hands. And more comfortable
01:09:44 -!- ais523 has joined.
01:10:30 -!- edwardk has joined.
01:32:37 -!- zzo38 has joined.
01:34:01 -!- augur_ has changed nick to augur.
01:45:17 -!- esowiki has joined.
01:45:21 -!- esowiki has joined.
01:45:21 -!- esowiki has joined.
01:45:49 -!- esowiki has joined.
01:45:50 -!- glogbot has joined.
01:45:50 -!- glogbackup has left.
01:45:53 -!- esowiki has joined.
01:45:54 -!- esowiki has joined.
01:46:09 -!- EgoBot has joined.
01:46:10 -!- HackEgo has joined.
01:46:35 -!- ion has joined.
01:51:08 -!- Phantom_Hoover has quit (Read error: Connection reset by peer).
01:53:44 <VorpalPhone> Swype beta is pretty good as well. Both it and swiftkey have their own advantages...
02:01:37 <Sgeo> Swype is still in beta?
02:07:51 <VorpalPhone> There is a beta version, much improved to the default on this phone
02:09:14 <VorpalPhone> Sgeo: the default is just Samsung keyboard with swiping. I proper swupe 3 beta is better
02:09:56 <VorpalPhone> Using SwiftKey atm though, and much faster with the thumbs
02:11:06 <VorpalPhone> Skype is better with one hand or with an index finger (and holding in the other hand)
02:13:11 -!- TeruFSX has joined.
02:19:04 -!- VorpalPhone has quit (Quit: Bye).
02:46:24 -!- copumpkin has quit (Ping timeout: 245 seconds).
02:48:13 -!- copumpkin has joined.
03:08:32 -!- itidus21 has quit (Quit: Leaving).
03:14:06 -!- itidus21 has joined.
03:33:33 -!- Guest34050 has joined.
03:34:17 -!- Tod-Autojoined has joined.
03:34:18 -!- pikhq has joined.
03:34:18 -!- TodPunk has quit (Read error: Connection reset by peer).
03:34:18 -!- pikhq_ has quit (Quit: Reconnecting).
03:37:09 -!- oklopol has quit (Ping timeout: 240 seconds).
03:37:47 <shachaf> 20:37 <zzo38> edwardk: Do you know what I was writing about above? Maybe you know, nobody else responded and neither did you
03:37:53 <shachaf> zzo38: What a charming phrasing. :-)
03:39:32 <shachaf> Oh, edwardk is in here too these days.
03:40:31 <edwardk> i drove him off the other day with too much talk of locally nameless syntax
03:40:51 <edwardk> i've learned over the years you have to approach him slowly, with one hand out holding a bit of interesting code
03:41:35 <edwardk> but if you get too aggressive he clams up and goes quiet, or runs away
03:49:46 <Sgeo> Well, /r/nostalgia thinks I'm a spammer
03:49:54 <Sgeo> Because I linked to a song on modarchive
03:50:13 <Sgeo> Or, well, that the link I submitted was spam
03:50:31 <Sgeo> Because apparently it "takes me to some website to download something"
03:50:51 <Sgeo> http://modarchive.org/module.php?36405 the link in question
03:54:40 <shachaf> edwardk: So I was at this one category-theory-related meeting where they were drawing a bunch of diagrams and things.
03:55:08 <shachaf> Someone said I should read Pierce's book on it. Is that a good book to read on it?
03:56:46 -!- MDude has quit (Ping timeout: 276 seconds).
04:05:31 -!- function has changed nick to variable.
04:11:52 <edwardk> categories for the working mathematician
04:12:20 <edwardk> that said, awodey is good, and lawvere and schanuel will drill drill drill the basics until you know sections/retracts cold
04:12:34 <edwardk> i also really like of all things serge lang's algebra
04:12:51 <edwardk> because he goes out of his way to set up the category theory construct as he defines the algebraic ones
04:13:14 <edwardk> its only slightly less dense than CftWM but way way thicker
04:15:54 -!- augur has quit (Remote host closed the connection).
04:33:02 -!- calamari has joined.
04:33:15 -!- calamari has left.
04:55:21 -!- asiekierka has joined.
05:23:03 -!- copumpkin has quit (Ping timeout: 246 seconds).
05:23:41 -!- copumpkin has joined.
05:49:40 -!- edwardk has quit (Read error: Connection reset by peer).
05:52:38 -!- edwardk has joined.
06:33:48 -!- AnotherTest has joined.
06:38:17 <nortti> how is crunchfuck supposed to work?
06:42:46 <mroman> cat ignore_list.txt | ./crunchfuck 'startProgram' howManyPrograms
06:43:06 <mroman> It then brute forces the next howManyPrograms starting from 'startProgram'.
06:43:23 <mroman> while ignoring results for numbers on the ignore_list
06:43:36 <mroman> (which is a newline seperated list of numbers followed by the text 'end')
06:44:53 <mroman> If your startProgram has a length of 15 you can put all numbers on the ignore_list known to be shorter than 16 bytes
06:45:07 <mroman> because it won't get any shorter.
06:50:01 <mroman> You can bruteforce on an i3 approx 16 ULONG_MAX ranges a night :)
06:50:27 <mroman> checking the output is more time consuming :)
06:50:31 <mroman> if you don't automate it.
06:51:26 <ion> http://www.techdirt.com/articles/20120622/16193319442/myth-dispensing-whole-spotify-barely-pays-artists-story-is-bunk.shtml
06:58:27 -!- DHeadshot has quit (Read error: Connection reset by peer).
06:58:32 -!- DH____ has joined.
06:58:36 -!- DH____ has quit (Remote host closed the connection).
06:59:36 -!- edwardk has quit (Quit: Computer has gone to sleep.).
06:59:55 -!- DHeadshot has joined.
07:02:56 -!- asiekierka has quit (Quit: Wychodzi).
07:04:35 -!- zzo38 has quit (Remote host closed the connection).
07:07:25 -!- AnotherTest has quit (Quit: Leaving.).
07:08:00 -!- AnotherTest has joined.
07:13:52 -!- AnotherTest has quit (Ping timeout: 250 seconds).
07:45:45 -!- augur has joined.
07:59:08 <kmc> i am amused by http://www.electrical-contractor.net/PC/EuroBS1363adapter.jpg
07:59:15 <kmc> apparently if you buy import electronics in the UK this is often what you get
08:04:31 -!- Vorpal has joined.
08:06:03 <shachaf> kmc: You find that amusing?
08:22:02 <kmc> "The 3 kilometers (1.9 mi) long Botlekspoortunnel under Rotterdam harbour replaces the antiquated Botlek bridge, which remains in service as backup and for regional traffic. Space around the tunnel was so constrained that, after completing the first tube, the tunnel boring machine had to be dismantled inside the tube. The parts were then returned to the starting point and reassembled to bore the second tube."
08:29:46 <mroman> Cuz bootlegz're mainstreamz?
08:31:11 <fizzie> The bootleg bridge, replaced by the bootleg sport tunnel.
08:31:24 -!- jix has quit (Ping timeout: 272 seconds).
08:31:43 <kmc> nederlandse spoorwegen
08:45:19 -!- Patashu has joined.
09:01:12 -!- Phantom_Hoover has joined.
09:33:05 -!- derdon has joined.
09:33:59 -!- nortti has quit (Quit: see ya).
09:59:20 -!- jix has joined.
10:03:21 -!- AnotherTest has joined.
10:07:19 -!- AnotherTest1 has joined.
10:09:17 -!- AnotherTest has quit (Ping timeout: 244 seconds).
10:13:25 -!- pikhq has quit (Ping timeout: 244 seconds).
10:13:31 -!- pikhq has joined.
10:15:08 -!- AnotherTest1 has quit (Ping timeout: 240 seconds).
10:39:03 <Sgeo> This spam reads like something some kid would threaten
10:39:10 <Sgeo> It's supposedly a letter from the FBI
10:39:26 <Sgeo> "We have warned you so many times and you have decided to ignore our e-mails or because you believe we have not been instructed to get you arrested, and today if you
10:39:26 <Sgeo> fail to respond back to us with the payment then, we would first send a letter to the mayor of the city where you reside and direct them to close your bank account
10:39:26 <Sgeo> until you have been jailed and all your properties will be confiscated by the fbi."
10:39:50 <Sgeo> " We would also send a letter to the company/agency that you are working for so that
10:39:50 <Sgeo> they could get you fired until we are through with our investigations because a suspect is not suppose to be working for the government or any private organization.
10:41:08 <Sgeo> http://pastie.org/4170733
10:41:21 <Sgeo> Ok, I hate pastie.
10:41:25 <Sgeo> Next pastebin?
10:42:29 -!- neutrino2000 has quit (Ping timeout: 248 seconds).
10:42:29 <fizzie> I've sort of lazily defaulted to sprunge.
10:43:00 <fizzie> I've gotten that one too.
10:43:05 <fizzie> Or at least one very much like it.
10:43:16 <Sgeo> http://pastebin.com/f7Bi93pT
10:43:34 -!- oerjan has joined.
10:43:39 <kmc> pastebin.com sucks
10:43:43 <Vorpal> sprunge is really nice though
10:43:46 <kmc> full of ads
10:44:00 <Vorpal> there are ads on the internet?
10:44:19 * kmc rolls eyes
10:44:23 <Sgeo> kmc, at least it linewraps
10:44:26 <fizzie> Sgeo: http://p.zem.fi/ikvv
10:44:31 <Vorpal> Sgeo, that isn't a good thing
10:44:42 <fizzie> Linewrapping is just a |fmt|sprunge in place of |sprunge.
10:44:53 <fizzie> Vorpal: Spam for a spam, that's the rule.
10:44:54 -!- Gregor has joined.
10:44:54 <Vorpal> why are you pasting spam?
10:45:06 -!- oerjan has set topic: Where we decide just how much you can shoot someone, and their little dog too. | http://codu.org/logs/_esoteric/ | This is what the bfjoust hill will look like under the new scoring system: http://pastebin.com/raw.php?i=XEWnVMg8.
10:45:08 <kmc> Vorpal: i was completely unaware that adblock existed. thank you for telling me about it, it proves that you are the more intelligent person and more knowledgable in the ways of the world
10:45:09 <Sgeo> Apparently, Vorpal has me on ignore
10:45:36 <Vorpal> Sgeo, I just connected to my bouncer
10:45:44 <Sgeo> Ah. Read scrollup then
10:45:49 <Vorpal> and for some reason scrollback replay is broken...
10:45:54 <Sgeo> Read logs then
10:45:56 <Vorpal> I have to investigate that later
10:46:01 <Vorpal> and read logs for now yeah
10:46:34 <Vorpal> <Sgeo> This spam reads like something some kid would threaten [...] <-- okay why were you pasting spam? And why were you reading spam to begin with?
10:46:58 <fizzie> I read some spam every now and then.
10:47:09 <Sgeo> fizzie, mine's better. They're also offering me money, apparently.
10:47:31 <Sgeo> I'm under investigation and being offered compensatory money
10:47:33 <kmc> there's spam on the internet? lolololol, i use spamblock and I will tell everyone about it whenever spam is mentioned
10:47:54 <kmc> did you know I don't use Windows either?
10:47:59 <kmc> and i don't own a TV
10:48:05 <Sgeo> Vorpal, it's good to check Spam folder occasionally (just in case), but some spam caught my eye
10:48:31 <fizzie> Sgeo: It's not exactly "yours", I have had it too. Anyway, you must've not read "mine" very carefully: "-- the only funds that was entitled to you of which the FBI has been given the necessary order to necessitate the transfer is the compensation funds which is valued at the sum of $20million usd that was issued to by the Nigerian Government to compensate you for the embarrassment and insults ...
10:48:37 <fizzie> ... to your personality --"
10:48:43 <Vorpal> Sgeo, eh, gmail is pretty good at spam filtering
10:48:55 <Sgeo> fizzie, oh, oops
10:49:24 <fizzie> Though to be honest, it's not exactly an offer, more of an aside.
10:52:28 <fizzie> Anyway, there seems to be a reasonable amount of this spam which sort of presupposes a pre-existing relationship with some other spammers.
10:53:11 <Vorpal> does anyone actually fall for spam?
10:53:40 <Vorpal> I can't see how they can make money out of it
10:53:40 -!- AnotherTest has joined.
10:53:50 <fizzie> Because I got one from the "bank insider" the people I was "conversing with" were going to use for the actual money transfer, warning me that those people are but scammers and haven't paid him his agreed-upon $10k yet. (But he was willing to make a deal directly with me.)
10:54:15 <fizzie> It sort of assumes that the recipient is in the middle of doing some deal with some other spammers.
10:59:35 -!- AnotherTest has left.
11:01:44 <oerjan> <Sgeo> Well, /r/nostalgia thinks I'm a spammer <-- um you mean an actual moderator thinks so? or just the automatic spam filter? or just stupid commenters?
11:02:01 <oerjan> if #2, ask a moderator to fix it.
11:05:04 <kmc> yeah some people called me a spammer for posting links to my own blog on reddit
11:05:15 <kmc> even though i was posting original content and my blog has no ads
11:05:47 <kmc> substantial content too, not the usual "17 weird old tricks to make you a Real Programmer"
11:06:01 <kmc> which constitutes the majority of /r/programming
11:08:29 <ais523> wow, Dwarf Fortress has a randomly generated subtitle too
11:08:42 <ais523> in addition to "Slaves to Armok: God of Blood: Chapter II: Dwarf Fortress"
11:09:17 <kmc> (that was a reference to a particular type of online ad, so it will be lost on you more evolved specimins of mankind who use adblock)
11:09:56 <Sgeo> Adblock Plus is a memory hog
11:11:31 -!- asiekierka has joined.
11:14:35 -!- neutrino2000 has joined.
11:14:37 <oerjan> kmc: hey, reddit _thanks_ me for not using adblock. too bad i never click them except by accident.
11:15:44 <oerjan> (most of my ad clicking happens when i try to get a particularly crowded page into focus)
11:47:01 <Sgeo> On UniversityOfReddit, sending a message that contains the words manhoodacademy or manhood101 is an instaban
11:47:51 <Sgeo> As is attempting to make a course with either of those in the description, but that's not as alarming
11:48:33 <Sgeo> https://github.com/ureddit/ureddit/commit/3161d6f1e6a2660914f511b027f8a9c090469c76
11:50:52 <Sgeo> Ok, so apparently manhoodacademy and manhood101 are actually existing mysogenistic things
11:51:26 <Sgeo> But even mentioning the word in a private message equating to a ban seems extreme
11:51:59 <itidus21> oerjan: one webpage i wrote that kept getting hits was just a rant
11:52:38 <itidus21> but TBH i haven't had a web presence(tm) for 6 years or more
11:53:22 <oerjan> itidus21: wait, was that in response to something i said?
11:54:05 <itidus21> oerjan: sort of yeah. i just did this rant about anime and games and kung fu films once.. and it got 1000s of google hits
11:59:13 -!- boily has joined.
11:59:56 <oerjan> yes. just don't mix in any oranges.
12:01:33 <itidus21> "Potatoes" 8 letters, vegetable, requires cooking, grows underground. "apples" 6 letters, fruit, directly edible, grows on trees.
12:03:14 <itidus21> sadly i defined fruits and vegetables instead of apples and potatoes i think
12:03:27 * oerjan has eaten a potato raw before
12:04:09 <oerjan> it tastes rather stronger than the boiled variety
12:04:37 <boily> oerjan: wasn't it a little bit too starchy?
12:04:42 <kmc> oerjan: with skin?
12:05:23 <kmc> just don't eat the green parts >_<
12:05:33 <itidus21> i can't even bear the taste of potato which is 70% cooked
12:05:49 <oerjan> i'm not sure what "starchy" means, i think it was about the same consistency as a raw carrot or rutabaga
12:06:18 <oerjan> it was pretty long ago, anyway
12:08:20 <oerjan> kmc: i've eaten _boiled_ potatoes with skin, mind you.
12:09:18 <oerjan> it's traditional not to peel them when they are very fresh
12:09:50 <boily> same here. when you have "patates nouvelles" (new harvest potatoes), you don't peel them.
12:10:14 <oerjan> "nypoteter" in norwegian
12:12:27 -!- augur has quit (Remote host closed the connection).
12:12:53 -!- augur has joined.
12:15:49 <oerjan> this thar browser needs a killing
12:15:51 <fizzie> Well, that's nice: the LaserJet 4650 and the LaserJet 5200 that we have in the closest print corner both just flat out refuse to print out the PDFs generated by SNCB's (the Belgian national railway company) "tickets online" system. Both just say "INSUFFICIENT MEMORY".
12:16:22 <fizzie> (They printed my full-page-150dpi-raster-image Gimp-produced PDFs just fine.)
12:16:32 <fizzie> (And these have just text for the most part.)
12:17:08 -!- augur has quit (Ping timeout: 240 seconds).
12:17:09 <fizzie> I suppose I'll try to print out from Acrobat Reader, maybe it'll do a better PS conversion or something.
12:17:26 <kmc> yeah, i agree that skin-on is the way for mashed, baked, or even french fried potatos
12:17:30 <kmc> just makes the texture more interesting
12:18:20 <kmc> maybe SNCB is using everyone's printers to do distributed computation
12:18:25 <kmc> or is distributing printer malware
12:18:56 <fizzie> The web thing was kind of horrible, and it took about two minutes for it to generate the PDF. So I suppose there's *something* going on in that PDF.
12:19:06 <fizzie> Though the files are just 30 kilobytes or so.
12:19:12 <kmc> i don't remember if PDF is capable of arbitrary computation
12:19:25 <kmc> (other than the embedded Javascript feature, which the printer probably does not support)
12:19:37 <Sgeo> iirc, Postscript is?
12:19:40 <kmc> my vague conception is that PDF is like "PostScript in normal form"
12:19:52 <kmc> yeah, postscript is a fairly general stack-based programming language
12:19:56 <kmc> writing postscript by hand can be fun
12:20:08 <fizzie> I have a vague feeling that they may have deliberately broken some of the general programming features.
12:20:22 <fizzie> But I'm certain I'm not certain.
12:20:31 <kmc> you can send a postscript file to your printer which will make it print out the Game of Life, one generation per page, indefinitely
12:21:10 <Sgeo> I should try implementing GoL in something at some point
12:21:21 <Sgeo> But I'm not good at visual stuff
12:21:32 <kmc> you mean graphical output?
12:21:38 <kmc> you can just print to the terminal, or output a PPM file
12:21:39 <fizzie> One PDF normalization I'm sure of is that they impose a strict page structure on it. For a general PostScript file, you can't really do "extract only page X".
12:21:58 <Sgeo> And also, there needs to be some sort of UI, even if console based
12:22:08 <kmc> PPM is a super simple image format
12:22:08 <Sgeo> I want the user to be able to look around a randomly seeded infinite board
12:22:13 <fizzie> "[PostScript] can handle not just graphics, but standard features of programming languages such as if and loop commands. PDF is largely based on PostScript but simplified to remove flow control features like these, while graphics commands such as lineto remain."
12:22:13 <oerjan> kmc: these "new potatoes" are skin-on boiled, though.
12:22:16 <kmc> http://netpbm.sourceforge.net/doc/ppm.html
12:22:28 <kmc> Sgeo: oh, well if you actually want a GUI that's harder (but not that hard)
12:22:42 <kmc> you can probably find like 10 Game of Life examples for any GUI framework you like
12:23:11 <Sgeo> I'm not sure how I'm going to make tradeoffs
12:23:35 <kmc> i coded a game of life thing that runs on a 128 × 48 red LED display
12:23:40 <Sgeo> I mean, I can't store every single calculated cell (which is why I'm not going to just use Haskell's built-in laziness)
12:23:49 <kmc> i made a few unusual design choices
12:24:05 <fizzie> Oh, these PDFs are "(SECURED)". Maybe that has something to do with the problems. Though one (out of 11) printed out with just the background image lacking, so maybe not.
12:24:08 <Sgeo> Going to need to make my own laziness, with forgetting
12:24:14 <kmc> both edges of the grid wrap to the opposite edge, but with reflection, so it's a projective plane
12:24:23 <kmc> (or almost, because i didn't really do anything sensible at the corners)
12:24:47 <kmc> also the way it keeps the display interesting is that occasionally it will spawn a glider in a random position
12:25:03 <Sgeo> Hmm, easy constraint: Under no circumstances should the user be able to cause an inconsistency
12:25:12 <Sgeo> Saying "Out of memory" is preferable
12:25:20 * oerjan printed a mandelbrot set with postscript once
12:25:31 <fizzie> This silly thing inserts a photo, and then four copies of a summary of the ticket as totally unreadable red, yellow, blue and green texts on top of the photo. I have no idea what purpose that serves.
12:25:43 <kmc> i think IFS fractals are very easy in postscript
12:25:44 <oerjan> took a long time. and wasn't very good being only black and white.
12:25:44 <fizzie> Except to make a real ugly mess if someone prints this thing with a black-and-white printer, I suppose.
12:26:11 <kmc> i wrote a TI-83 BASIC program to render a mandelbrot set in 4-level greyscale
12:26:15 <kmc> it took about an hour
12:26:42 <fizzie> Hey, I think I wrote one too except for TI-86 and black-and-white.
12:27:04 <fizzie> You can't really get grayscale output (well, except with dithering) out of TI-86 basic, anyway, since it requires some interrupt handling.
12:27:11 <kmc> there's no builtin greyscale support in TI-83 BASIC, but you could flip between saved images with speed just barely good enough
12:27:19 <kmc> (this was on the 83+, the 83 might be too slow)
12:27:36 <fizzie> I have a feeling 86 would be also too slow since the saved images actually copy the data.
12:27:48 <fizzie> Normally you'd just flip the starting address of the display buffer.
12:28:30 <fizzie> Sadly, I don't think it has a POKE.
12:28:54 <fizzie> (Or a translates-to-'out' either.)
12:28:58 <kmc> hmm, I wonder what format the TI-83+ uses for fractional numbers
12:30:12 <fizzie> The TI-86 floats are ten-bytes-or-so BCD floats, and the ROM routines are incredibly horribly slow. (I don't know about the fractionals, it's pretty iffy in TI-86 at all.)
12:32:40 <fizzie> Seven bytes of BCD digits, two-byte biased exponent with some arbitrary range restriction, and one type/flag byte to denote sign and real/complex.
12:34:35 <fizzie> And if I recall correctly, the UI will only ever show up to 12 digits of the mantissa.
12:35:57 <fizzie> I got into an argument about this on an "introduction to computer architecture" (or something) course.
12:36:46 <fizzie> The person doing the lecturing -- I think a temporary substitute -- just plain refused to believe there was any system in the world that used a non-binary floating point format.
12:37:37 <fizzie> A bit weird since even IEEE-754 defindes the decimal32, decimal64 and decimal128 formats.
12:38:17 <fizzie> (Those aren't BCD, though.)
12:40:08 <Vorpal> <fizzie> The TI-86 floats are ten-bytes-or-so BCD floats, and the ROM routines are incredibly horribly slow. (I don't know about the fractionals, it's pretty iffy in TI-86 at all.) <-- it did fp in software?!
12:40:12 <Vorpal> that just sounds stupid
12:40:18 <Vorpal> for a calculator I mean
12:40:33 <fizzie> The Z80 does not exactly have an FPU. And those cost big bucks.
12:40:41 <fizzie> It's not like the calculation speed was all *that* important.
12:40:51 <Vorpal> wow, why do they use them for calculators...
12:40:57 <Vorpal> I guess the battery life?
12:41:06 <Vorpal> my TI-83+ has exceptional battery life after all
12:41:53 <fizzie> It doesn't have hardware integer multiplication or division either, for that matter.
12:42:10 <Vorpal> kmc, iirc you can put asm into basic programs on the 83+
12:42:19 <Vorpal> don't remember the details though
12:43:12 <fizzie> If you interpret that *just* right, you can do that on the 86 too, because you can write hex-encoded machine code into a program with the BASIC editor, put a suitable keyword at start, and then "compile" that.
12:43:23 <fizzie> Doesn't have any sort of "inline ASM" though.
12:43:33 <fizzie> Or an assembler that'd do mnemonics.
12:43:40 <fizzie> So you have to be kind of masochistic.
12:44:10 <fizzie> (Unless it's a very short program.)
12:44:26 <fizzie> I guess you could use that to make a "POKE" program you could call.
12:44:38 <Vorpal> uh a fan in my desktop revved up from the lowest speed. Just for a couple of seconds. That never happened before... All the fans usually run at the lowest speed even when under heavy load
12:45:42 <fizzie> Dust buildup is the main cause for higher fan speeds for me. Especially the fan exhaust grill seems to collect quite a lot of it.
12:46:22 <Vorpal> fizzie, I cleaned the case like two weeks ago, normally I would clean it in August next time. Also the intakes have dust filters
12:46:25 -!- augur has joined.
12:46:28 <Vorpal> anyway I think it was the GPU fan
12:46:53 <Vorpal> I managed to get it to repeat by doing the same thing again and I observed all the other fan values
12:46:57 <Vorpal> and none of those changed
12:47:05 <Vorpal> trying to remember how to get the GPU fan speed atm
12:47:20 <Vorpal> oh wait, could be PSU I guess
12:47:25 <fizzie> Well, that's nice; now I printed one of the 11 tickets from acroread, and it no longer accepts mouse clicks.
12:47:27 <Vorpal> can't observe that speed
12:47:52 <Vorpal> <fizzie> If you interpret that *just* right, you can do that on the 86 too, because you can write hex-encoded machine code into a program with the BASIC editor, put a suitable keyword at start, and then "compile" that. <-- ah yes, that is how it works
12:48:08 <kmc> yeah i did write some small machine language programs, assembled by hand
12:48:25 <Vorpal> anyway with the 83+ you can transfer programs from a computer
12:48:42 <kmc> all of the TI graphing calculators have that ability
12:49:05 <Vorpal> but I thought it lacked the link port completely
12:49:12 <Vorpal> might have been some other model
12:49:51 <fizzie> All the TI-8x's I know of do. Though the 85 had some awkwardness when it came to asm programs.
12:50:07 <fizzie> I think you needed to be running a shell, you couldn't just invoke them from the normal thing.
12:50:08 <Vorpal> So why not just make a program that goes under the APPS button. IIRC they run directly from flash or something?
12:50:10 <fizzie> Or something like that.
12:50:19 <kmc> Vorpal: you can do that too
12:50:43 <kmc> the TI-86 doesn't have that though
12:51:07 <kmc> nor does the 85 or the 83 (non-plus)
12:51:12 <Vorpal> fizzie, the odd thing about the fan is that Trine 2 caused it. And it was on the screen between chapters where it just shows some text and some hand drawn artwork
12:51:20 <Vorpal> so uh, not sure why that makes the GPU rev up
12:51:34 <Vorpal> normal 3D rendered Trine 2 gameplay doesn't as far as I can tell
12:52:04 <kmc> they didn't have flash, just ROM and a small amount of RAM
12:52:15 <fizzie> Small?! It's 128 KB in TI-86.
12:52:21 <fizzie> That's like double the processor address space.
12:52:33 <kmc> also flash apps are signed and i don't remember how annoying it was to get a signing key as some random person
12:52:38 <kmc> or whether you could load unsigned apps
12:52:55 <fizzie> They've bruteforced the system keys so you can flash in a custom OS, though.
12:54:19 <kmc> there is an xkcd strip mocking TI for not upgrading their hardware
12:54:22 <kmc> but as usual xkcd misses the point
12:54:40 <fizzie> Also, regarding "transfer from computer", at least on the TI-86 the computer link cable is not part of the standard accessories, you have to buy it separately. (Or build your own.)
12:54:41 <kmc> let's make fun of people for not jumping on shiny new tech, while ignoring the actual application requirements
12:55:03 <kmc> fizzie: what do you mean? most models don't sell with a link cable
12:55:14 <fizzie> Okay. I thought they might've made it a standard thing.
12:55:17 <Phantom_Hoover> http://www.reddit.com/r/atheism/comments/vs5hw/you_guys_are_fucking_champions/
12:55:25 <kmc> some of the newer ones have a USB link cable built in
12:55:28 <Phantom_Hoover> "/r/atheism has turned me from not only being religious but also from being an asshole into a caring and tolerant person."
12:55:31 <Vorpal> god damn it, I almost managed 100% completion on Trine 2 (I have done 100% on Trine 1 of course), but there are two experience orbs that I can't find...
12:55:39 <Vorpal> other than that, I'm 100% complete
12:55:50 <kmc> afaik you can use the standard black link cable or grey link cable with the TI-86
12:56:26 <Vorpal> <kmc> let's make fun of people for not jumping on shiny new tech, while ignoring the actual application requirements <-- I wouldn't mind a faster CPU. Try plotting something more advanced than a polynomial equation on the TI-83+. It can be painfully slow
12:56:57 <fizzie> Well, officially; you can also use something that costs $5 (in parts) that you make.
12:57:17 <kmc> Vorpal: sure, the 83+ is the low end calculator anyway
12:57:24 <Vorpal> <kmc> fizzie: what do you mean? most models don't sell with a link cable <-- mine sold with a Black Link. Of course, I don't have a serial port nowdays on my main computer (I keep an old dell laptop around for that, and that alone)
12:57:25 <kmc> Phantom_Hoover: doubtful
12:57:30 <fizzie> Though some standard 2.5mm plugs don't quite fit the link port.
12:57:32 <Phantom_Hoover> kmc, http://www.reddit.com/r/atheism/comments/vs5hw/you_guys_are_fucking_champions/c578bj2
12:58:34 <fizzie> The black is (IIRC) slightly more picky when it comes to serial ports, too, since it doesn't do translation between RS-232 and the TI protocol internally, but expects software to toggle the port lines appropriately.
12:58:37 <Vorpal> kmc, the TI-83+ has awesome battery time though
12:59:06 <Vorpal> fizzie, so no USB converter?
12:59:26 <kmc> Vorpal: yeah
12:59:33 <fizzie> I have a feeling it might not be so friendly to USB serial ports, right.
12:59:36 <kmc> fizzie: yeah, with the grey cable you could connect directly to a modem
13:00:30 <kmc> i used a grey link cable and a big stack of adapters to connect to a Ricochet modem
13:00:37 <kmc> so i could log into my Linux machine wirelessly from my TI-83+
13:00:47 <kmc> that was pretty entertaining
13:01:16 <Vorpal> fizzie, my motherboard actually has serial in my desktop. However it doesn't have the port, that is an add-on, you put the addon in an empty PCI hole (just the hole at the back of the computer, not the actual PCI slot itself) then you connect a cable from that to the motherboard
13:01:17 <fizzie> The TI link protocol is kind of funny, anyway; it doesn't really have a set clock speed.
13:01:22 <Vorpal> weird way to do it IMO
13:01:39 <kmc> you know, it would be pretty easy to put wireless hardware inside a TI calculator case, and use this to cheat on the SAT etc.
13:01:51 <kmc> Vorpal: that's pretty common
13:02:01 <kmc> saves space on the motherboard backplane itself
13:02:20 <kmc> it's something most people don't use anyway
13:02:22 <Vorpal> kmc, there is space left over there (which is pretty amazing given how many ports this thing has)
13:02:28 <kmc> and maybe you can charge extra for the port
13:02:37 <Vorpal> well I guess there is that yeah
13:02:51 <kmc> well it's not just a matter of physical space, you also need to route the electrical connections to it
13:02:52 <fizzie> You can charge extra for spares after people invariably lose the one that comes in the motherboard box.
13:03:06 <Vorpal> fizzie, there isn't one in the box though=
13:03:12 <kmc> motherboards seem to use standard connector blocks with, like, one parallel port above 3 audio ports, or something
13:03:14 <fizzie> Ah. Well, in that case, especially.
13:03:27 <kmc> if the standard block you need containing a serial port isn't cheaply available, you use the extra slot solution instead
13:03:31 <Vorpal> kmc, I haven't had a parallel port in ages...
13:03:37 * kmc recently bought a machine specifically with a parallel port
13:03:51 <kmc> i have a CNC laser cutter which is controlled via parallel port
13:04:02 <fizzie> The extra port headers seem to be kind of de-facto standardized, though, so you don't need to get the manufacturer's own extra port slot-cover thing.
13:04:04 <kmc> it's controlled via parallel port because it's the cheapest crappiest CNC laser cutter you can buy
13:04:04 <Vorpal> are there USB converters for such?
13:04:14 <kmc> and so they just have stepper motors wired up to a parallel port
13:04:28 <Vorpal> so not proper parallel protocol?
13:04:33 <kmc> no definitely not
13:04:34 <fizzie> Parallel ports are probably the easiest to directly wire things to.
13:04:44 <Vorpal> what about the voltages?
13:04:49 <fizzie> One of the DIY link cables does that. (The other model goes to serial port.)
13:04:49 <kmc> there are USB to parallel adapters, but you can't use them as a general purpose extremely low latency I/O interface
13:04:56 <Vorpal> I know serial has some crazy high voltages
13:05:02 <kmc> Vorpal: what about them
13:05:18 <Vorpal> kmc, does parallel ports have like 12 V or so too for the signal?
13:05:24 <Vorpal> iirc that is what standard serial port has
13:05:38 <fizzie> I think you get +5V out of the data lines, actually.
13:05:39 <kmc> i remember reading a proposal that Beowulf clusters should connect the machines together with parallel port, in addition to gigabit ethernet
13:05:41 <fizzie> But I might misremember.
13:05:46 <Vorpal> fizzie, pretty crazy high still
13:05:51 <kmc> using the parallel port for extremely low latency communication
13:05:52 <fizzie> In the parallel port, that is.)
13:06:24 <kmc> Vorpal: 5V is the standard TTL logic level
13:06:34 -!- augur has quit (Read error: Connection reset by peer).
13:06:45 * kmc prepares to stab someone who complains about "redundant" acronyms
13:06:48 <Vorpal> what are the data line voltages in things like USB?
13:06:53 -!- augur has joined.
13:06:58 <kmc> USB uses differential signaling
13:07:17 <fizzie> RS-232 seems to require anything from 3 to 15 volts. (And -3V to -15V for the other bit.)
13:07:32 <kmc> not that low
13:07:55 <Vorpal> thought you could get like less than 1 V with differential?
13:08:28 <kmc> "On low and full speed devices, a differential ‘1’ is transmitted by pulling D+ over 2.8V with a 15K ohm resistor pulled to ground and D- under 0.3V with a 1.5K ohm resistor pulled to 3.6V. A differential ‘0’ on the other hand is a D- greater than 2.8V and a D+ less than 0.3V with the same appropriate pull down/up resistors."
13:08:42 <kmc> Vorpal: just because you can doesn't mean they do it that way
13:08:47 <kmc> i don't know what the other design considerations are
13:09:12 <Vorpal> kmc, full speed? Is that USB 2.0 or USB 1.1?
13:09:30 <Vorpal> low is USB 1.0, full USB 1.1 right?
13:09:42 <Vorpal> and what is USB 2 then? fuller?
13:09:44 <kmc> high speed
13:09:54 <Vorpal> forgot what they called USB 3 as well
13:10:04 <kmc> i mean USB 2.0 is a version of the spec, that supports all three speeds
13:10:15 <Vorpal> what about USB 3 then?
13:10:17 <kmc> but the fastest speed available in USB 2.0 is called "high speed"
13:10:19 <kmc> look it up
13:10:39 <Vorpal> not that anything uses it yet as far as I can tell. My desktop has USB 3 connectors, but I don't have any peripherals with USB 3 support
13:10:51 <kmc> you can definitely get hard drive enclosures which support it
13:11:02 <Vorpal> right, and that is about it I guess
13:11:18 <Vorpal> kind of surprises me that my new fancy phone didn't do USB 3
13:11:27 <kmc> maybe external monitors/video cards
13:11:29 <Vorpal> I mean, it is Samsung's flagship model after all
13:11:36 <kmc> or maybe manufacturers are skipping USB 3.0 for Thunderbolt
13:11:50 <Vorpal> eh, has anyone except apple adopted that?
13:12:00 <kmc> dude the entire PC industry is based on copying whatever Apple does
13:12:11 <kmc> and they have a huge market share by themselves
13:12:19 <Vorpal> well yes, but I thought they had some exclusive deal on thunderbolt?
13:12:23 <kmc> they were the first to take the plunge with USB
13:12:34 <kmc> the success of USB today is largely due to the iMac
13:12:44 <Vorpal> I had a first generation ibook
13:12:53 <Vorpal> I still think I have that USB floppy drive somewhere XD
13:12:56 <kmc> cause Apple had the guts and the customer loyalty to say "suck it, this is how shit connects now"
13:13:04 <Vorpal> (because then you actually needed floppies still, and apple had dropped it)
13:13:58 <kmc> on the earlier subject of printer hacks, you can change the text on the LCD display of a HP printer with an unauthenticated packet
13:14:06 <kmc> i have used this for both legitimate and prank purposes
13:15:23 <kmc> no, network printers
13:16:48 <kmc> i was printer czar for the house where i lived in college
13:17:05 <Vorpal> what do you mean with that?
13:17:15 <kmc> meaning i was in charge of buying printer supplies, and yelling at people for printing too much
13:17:39 <fizzie> Vorpal: It's "SuperSpeed" for USB 3. (Really.)
13:17:52 <fizzie> I don't know what they're going to go with USB 4. HyperSpeed?
13:17:53 <kmc> so i wrote a script which would scrape the supply levels from the web interface, then calculate how much we were spending per page printed, and put it on the display
13:18:10 <kmc> in hopes that people would see it as they pick up their job and would feel guilty
13:18:13 <kmc> which probably never happened
13:18:18 <fizzie> Anyway, I think low-speed and full-speed are both part of USB 1.0 already.
13:18:31 <kmc> we had one guy who was in the habit of printing a 300 page math textbook, single-sided, and then immediately losing it
13:18:42 <kmc> i think he eventually got banned from 8 different computer labs
13:19:34 <fizzie> I just printed 30 sheets, most of them in color. Now I feel guilty.
13:20:20 <Vorpal> fizzie, at work or at home?
13:20:34 <fizzie> At work, since there's only a black-and-white laser at home.
13:21:23 <kmc> MIT has a new system, where you print to a single campus-wide virtual printer
13:21:29 <fizzie> Didn't want to start dabbling with drying-up inks or whatever, what used to happen with our previous very-little-used DeskJet thing.
13:22:04 <kmc> and then you walk to a printer, scan your ID, and it prints the job there
13:22:16 <fizzie> There's a famous bit in some MS TechNote or such about the benefits of adding printers at different physical locations into the same print queue, because your users will then get more exercise.
13:24:07 -!- oerjan has quit (Quit: leaving).
13:24:35 <kmc> it was somewhat controversial at MIT
13:24:46 <kmc> someone even vandalized a few of the stations
13:24:58 <kmc> i guess people don't want to wait around at the printer
13:25:10 <copumpkin> I did reverse the protocol and find the password was symmetrically encrypted, and we had open wifi
13:25:33 <kmc> the problem it solves is people who print big jobs (intentionally or by accident) and then don't pick them up
13:25:36 <kmc> copumpkin: heh
13:26:04 <copumpkin> it was kind of awkward if you had to wait behind someone printing something large, or you were printing something large just before class and a bunch of people needed their assignments
13:26:19 <fizzie> I usually walk to the printer and type in "lpr -Pfoo file" with SSH over the phone just to be there when things print. (The printers do have some sort of "wait until the user types a passcode" features, but I don't think those are all that likely to work.)
13:26:22 <kmc> this is why profs should accept assignments by emailed pdf :)
13:26:37 <copumpkin> but there are always the old-school profs :)
13:26:59 <kmc> we would often pick one person who would print out and hand in everyone's assignments
13:27:10 <kmc> so that everyone else could sleep through class after an all-nighter
13:27:13 <kmc> not really healthy behavior...
13:28:19 <fizzie> I accepted weekly exercise solutions by email or on paper, and there was an approximate 50%/50% split. (Though majority of returned papers were handwritten, since they were mostly mathy.)
13:37:03 <kmc> sorry, when i said "emailed pdf" i should have said "push to a git repository" ;)
13:37:19 -!- augur has quit (Read error: Operation timed out).
13:38:27 <fizzie> Don't you mean "add to the Visual SourceSafe library"?
13:38:39 -!- augur has joined.
13:39:22 <kmc> isn't VSS a joke
13:39:26 <kmc> i mean microsoft doesn't use it
13:40:14 <fizzie> That's just because they generously want to save all its powers to their customers.
13:40:52 <fizzie> Also I think it got discontinued and replaced by Team Foundation Something Or Other.
13:41:13 <kmc> but does it have sharepoint integration =D
13:48:13 <Vorpal> <kmc> so that everyone else could sleep through class after an all-nighter <-- from what I seen at university, most comp sci students were pretty study focused and would never have skipped class.
13:48:48 -!- yorick_ has changed nick to yorick.
13:48:50 <Vorpal> personally I only skipped a total of 2 days during my three years at university. And that was when I had influenza.
13:50:07 <kmc> well at my school skipping classes was extremely common
13:50:40 <fizzie> It's not called skipping if one has a legitimate reason such as illness, is it? Then it's just missing class.
13:50:47 <kmc> in most upper level CS classes, most of your grade is projects, with exams a smaller portion, and even the exams are take-home
13:51:10 <kmc> so you're better off spending that time on the projects, and maybe reading through lecture slides when you get a chance
13:51:19 <fizzie> Anyway, people in general do skip lectures here, too. Not all, of course.
13:51:29 <kmc> in many cases the lectures were pretty useless for getting the projects done
13:51:58 <kmc> that said i and my friends skipped more classes than was probably advisable
13:52:28 <Vorpal> <fizzie> It's not called skipping if one has a legitimate reason such as illness, is it? Then it's just missing class. <-- well yeah
13:52:44 <fizzie> The majority (or that's at least how it felt like) of our later classes were in the "seminar" format. (I.e. one or two introductory lectures, then each participant has a topic, some papers, then gives a lecture about it to the others.)
13:53:22 <fizzie> Well, those and some amount of project-based things. But not terribly many "classic" lecture-based things. Or maybe I've just tuned them out.
13:54:40 <fizzie> The parallel computation seminar assigned one or two chapters of a book to each participants, because the prof hadn't managed to motivate himself to read the book otherwise, but he wanted to. (Or that's what he said, anyway.)
13:54:55 <fizzie> s/parallel computation/distributed systems/, sorry.
13:55:14 <fizzie> I remember my chapter had stuff about election in hypercube networks or something very interesting like that.
13:55:27 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
13:55:32 <Vorpal> fizzie, if the prof can't motivate himself to read the book, then why should the students?
13:55:50 <fizzie> Well, it was rumoured to be a good book.
13:56:00 <Vorpal> then why wasn't he motivated
13:56:04 <Vorpal> I feel the logic is flawed
13:56:15 <fizzie> Too busy, I'd say, based on who he was.
13:56:40 <fizzie> He used to reply to student question emails at 03am during the Saturday/Sunday night.
13:57:05 <fizzie> A kind of a personality. :p
13:57:22 <Vorpal> I guess you could say that
13:57:26 <fizzie> From the viewpoint of the students, I guess course credits are a powerful motivator too.
13:58:10 <fizzie> A hypercube is a nice shape. You can (obviously) reach everyone in at most log_2(N) hops.
13:58:25 <Vorpal> fizzie, did he get burned out btw from working like that?
13:58:32 -!- Tod-Autojoined has changed nick to TodPunk.
13:58:41 <fizzie> Oh, he's still around. Was the head of the department for some time, too.
14:08:53 -!- edwardk has joined.
14:13:16 -!- copumpkin has joined.
14:29:05 -!- MDoze has joined.
14:31:24 <Vorpal> argh, NFC is badly designed. Why haven't they learnt anything from previous systems...
14:31:47 <Vorpal> MITM is super easy with the right equipment apparently...
14:40:29 <itidus21> Vorpal: (disclaimer: all of my common disclaimers) the lack of indefinite positive feedback in intelligence enables newcomers to succeed and older ones to suffer entropy
14:42:51 <itidus21> like how IBM was able to make lots of computers but they lost to bill gates who was only good for writing basic interpreters
14:44:07 <itidus21> microsoft is more successful than ibm right?
14:44:16 <MDoze> I don't see what that has to do with near-feild communicaiton's vuilerability to man-in-the-middle attacks.
14:44:36 <MDoze> Or if there was any other related conversation before I joined.
14:44:52 -!- MDoze has changed nick to MDude.
14:46:27 <itidus21> suppose you had a company like IBM in manufacturing and in the space of a few decades a silly little contract or whatever about dos eventually led another company to outgrow you
14:46:38 <MDude> I think IBM got less successfulll than Micrisoft because they allowed all those knockoffs of thier design.
14:47:05 <itidus21> im being extremely arbitrary and avoiding research or reality
14:47:18 <MDude> Intel similarly is making bank, I think.
14:47:26 <Vorpal> also the whole windows vs. OS/2 thing
14:47:58 <MDude> Was OS/2 very backwards compatible?
14:48:12 <itidus21> its like.. decades of success in an industry can be toppled by these trivialities
14:48:15 <MDude> Because that's the main thing WIndows has had for it.
14:48:18 -!- fizziew has quit (Remote host closed the connection).
14:49:24 <Vorpal> MDude, I don't think there was a single reason for OS/2 failing, rather it was a combination of many things
14:49:44 <ais523> hmm, theory: the number of assassination attempts Hitler survived is proof that time travel exists, yet is incapable of changing history
14:49:46 <Vorpal> including some bad business decisions on IBMs part and some really good ones from MS
14:49:56 <ais523> going back in time to kill Hitler is probably one of the most common uses for time machines
14:50:08 <Vorpal> ais523, how many did he survive?
14:51:19 <Vorpal> also I presume you meant hypothesis, not theory
14:51:49 <Vorpal> itidus21, in the information theory sense? Or the physical sense?
14:52:20 <itidus21> Vorpal: not sure. just in the sense that they had to fail eventually
14:52:21 <Vorpal> (and if the latter, how is thermodynamics related to this?)
14:52:33 <Vorpal> itidus21, I don't think that is an existing sense of the word
14:53:09 <itidus21> maybe companies never have to fail
14:53:50 <MDude> IBM is still around, though.
14:54:00 <MDude> And even made that Jeopardy machine.
14:54:28 <Vorpal> pretty sure failing is a result of bad management in most of the time. Also they can recover from it. And there can be external factors (a mining company runs out of ore in the current vein)
14:54:39 <itidus21> ok i think i'm working on the basis that the only way to say something novel is to lie
14:54:44 <Vorpal> so no I don't think a company will inherently fail
14:57:21 <itidus21> so i get bored or restless and open the irc clickable bitmap.
14:57:34 <itidus21> its a bitmap you can click on!
14:58:22 <itidus21> and then, of all possible things i can say everything true has already been said, or is obvious
14:59:10 <itidus21> i start inventing uses for words like entropy
15:00:01 <itidus21> and ridiculous ideas like that there is some law governing when businesses fail
15:00:21 <itidus21> and i use examples of successful businesses to show where businesses have failed
15:00:37 <MDude> Ah, I was curious more about what you meant by indefinite positive feedback on intelligence.
15:01:05 <itidus21> i was meaning the intelligent eventually stop getting more intelligent
15:02:06 <itidus21> but saying this is because of earthly mortality seems to be cheating
15:02:37 <itidus21> maybe a more realistic explanation is that people stagnate
15:02:55 <itidus21> but as i can see, it isn't a general rule
15:03:13 <MDude> It could be a problem of sheer proccessing power, at least partly.
15:03:32 <Vorpal> looking at NFC it is built upon RFID, which is only really interested in reading numbers from tags. Originally security was not an issue (it was used for logistics, identifying shipments and so on in warehouses and terminals and what not). A much larger issue was power usage in the tags. Since it worked well other uses started to appear. Some however turned out to be security sensitive. Oops.
15:03:51 <Vorpal> and then NFC was built on top of RFID... why? no idea
15:04:10 <MDude> Because lazy, I would guess.
15:04:43 <itidus21> maybe it is the fact that money builds itself
15:04:49 <Vorpal> MDude, usages include bluetooth pairing by NFC. Works fine with standard antennas that have a range of centimeters, and that is what you find in phones.
15:05:04 <MDude> A complete lack of idea as to the reason we don't just use reprogrammible RFID tags in our phones for NFC was probably there too.
15:05:08 <Vorpal> MDude, now, if you instead use professional equipment you can get a range of a few meters against such a phone
15:05:27 <itidus21> whereas, on a given day n, in order to become more knowledgable or skilful a person one must exert energy again, be motivated again
15:06:12 <Vorpal> MDude, and the communications are unencrypted. Encryption is up to the application level
15:06:20 <Vorpal> which is again fine for the original usage
15:06:45 <Vorpal> (low power, possibly passive tags for logistics: you want something cheap and simple there. Yep)
15:08:08 <MDude> itidus21: So, to be suepr smart, it would make sense to devote some time into finding ways to get smarter faster?
15:08:44 -!- MoALTz__ has joined.
15:10:09 <Vorpal> MDude, another early use was identifying cattle. Yeah I guess that is fine with RFID. Then several decades later someone decides to start doing payments with the technology. Oops.
15:10:16 <itidus21> its probably difficult to find motivation eventually
15:10:18 -!- Taneb has joined.
15:11:10 <Vorpal> itidus21, this is all very interesting, but I don't think it really applies to NFC
15:11:11 <MDude> I guess that what makes evil geniuses so smart, they've always got taking voer the world to look forward to.
15:11:48 -!- MoALTz_ has quit (Ping timeout: 250 seconds).
15:11:53 <Taneb> Am I allowed to say I'm well respected in the esoteric programming language community?
15:12:13 -!- edwardk has quit (Quit: Computer has gone to sleep.).
15:12:48 <itidus21> MDude: http://3.bp.blogspot.com/_0codWCfcAsc/SlX3Ck35_HI/AAAAAAAAAzc/Qi1tr_mH_3M/s400/pinky_brain_x_22.jpg
15:13:15 <Vorpal> wow, someone made an RFID tag that was 0.05mm x 0.05mm... (Though the range of that one was apparently only a few millimeters)
15:14:22 <Taneb> Vorpal, UCAS, and hence various universities in the UK
15:18:01 <MDude> I'd like to make an RFID tag that uses the bulkiest, most anachronistic components possible that also aren't too expensive.
15:19:32 <Taneb> Vorpal, body that handles university applications in the UK
15:19:56 <Vorpal> Taneb, why would you mention that to them? Isn't the only thing relevant for such applications your previous grades?
15:20:08 <Taneb> Nah, there's loads
15:20:16 <Vorpal> In Sweden at least they only care about your grades
15:20:27 <Taneb> Basically, I'm trying to demonstrate interest in the subject
15:20:36 <Taneb> (the subject being, maths and computer science)
15:21:22 <Vorpal> Taneb, they work out a score between 1 and 20 depending on your grades in the Swedish equiv. of high school. I had 17.5 iirc, which is very good.
15:21:46 <Vorpal> and then they basically use that in a priority queue system
15:21:47 <Taneb> Yes, but seeing as I am neither in Sweden nor applying to a Swedish university, that isn't especially relevant
15:21:59 <Vorpal> Taneb, I'm just surprised every country doesn't do it that way
15:22:15 <Taneb> Pretty much every country does it different
15:22:43 <Vorpal> well I expected the exact details to vary (different scoring algorithms, different ranges and so on) but not the general concept
15:23:12 <Taneb> I believe the Netherlands lets everyone in, and decides a year later
15:23:56 -!- zzo38 has joined.
15:24:20 <jix> copumpkin: since when are you in here?
15:24:22 <Vorpal> (oh and there may of course be specific requirements for different programs at university, like I needed to have at least Mathematics D (I studied up to Mathematics E, which is as far as it goes))
15:24:44 <copumpkin> jix: I used to be in here a lot, and then forgot to rejoin when I redid my IRC client
15:24:53 <copumpkin> and now I've started joining again
15:26:05 <jix> now I wonder if we've met here before without me realizing
15:27:16 <Taneb> So, can I say I'm well respected in the esoteric programming community?
15:30:57 -!- Guest34050 has changed nick to oklopol.
15:31:10 <oklopol> why does nnscript insist on renaming me guest
15:31:43 <oklopol> perhaps i need to suggest some alternatives
15:31:44 -!- oklopol has changed nick to oklofok.
15:31:51 -!- oklofok has changed nick to oklodol.
15:31:54 <MDude> I think it would make more sense to say your work on esoteric languages is generally admired in the community.
15:32:08 <MDude> Since you could be respected on a personal level witohut really making anything.
15:32:16 -!- oklodol has changed nick to okloblock.
15:32:54 <okloblock> i only respect him on a personal level, since i don't remember what his work is.
15:33:09 -!- okloblock has changed nick to oklopol.
15:34:29 <Taneb> Nandypants, Numberwang, MIBBLLII, Fueue, Brook, Constatinople, Luigi, Real Fast Nora's Hair Salon 3: Shear Disaster Download
15:34:31 <jix> copumpkin: ah no, according to public logs you joined years after I was active a lot here
15:35:01 <Taneb> I only joined last year :(
15:36:39 <MDude> You joined before I did, and thus "Forever ago".
15:36:42 <jix> copumpkin: I use them from time to time to transfer value
15:37:02 <Vorpal> didn't bitcoin drop in value some time back
15:37:14 <jix> but not much beyond that... but for that they do their job pretty well
15:37:23 <copumpkin> it got inflated way beyond what was reasonable
15:38:58 <MDude> Taneb: Forever apparently being less than a month, according to the edit logs of our user pages.
15:39:49 <zzo38> Should LLVM have an instruction to test addition/subtraction overflow?
15:40:34 <Taneb> zzo38, are you on the LLVM development committee?
15:40:56 <kmc> zzo38 is on the everything committee
15:45:02 <Vorpal> zzo38, isn't the usual solution that the CPU sets a flag in some flag register for that?
15:45:25 <Vorpal> hm I wonder how that works on VLIW architectures... One flag register per concurrent instruction?
15:45:42 <zzo38> No I am not on the LLVM development committee.
15:46:03 <Vorpal> zzo38, then would your opinion on this matter? It wouldn't affect LLVM development
15:46:03 <zzo38> Vorpal: Yes that is what I am thinking, usually the CPU sets a flag for it, but LLVM has no instruction to test that flag
15:46:55 <zzo38> Perhaps someone who is on LLVM can suggest it to them
15:47:21 <jix> in theory a backend could detect the instrucion sequence that tests for overflows and produce code that uses the flags
15:48:56 <zzo38> jix: Yes, like that, I mean
15:50:32 <zzo38> I mean there might be instructions "tsof" (test signed overflow) and "tuof" (test unsigned overflow) and then it points to an addition or subtraction instruction which has already been executed, and the result of this instruction will be of type i1
15:50:35 * itidus21 looks at the recent changes, sees an optimized set of images, and dazzled by the existence of enterbrainfuck
15:51:20 <jix> zzo38: no I mean just using detecting the usual workarounds you do in C ((a + b) < b) for unsigned add for example and detecting the resulting instruction sequence
15:51:43 <jix> that would not require a change to the llvm instruction set
15:51:59 <Vorpal> what does LLVM currently do for that bit of code?
15:52:31 <zzo38> At least to me, I have found cases where I want to explicitly specify overflow test instruction
15:53:17 <zzo38> The optimizer could do the conversion from ((a + b) < b) to the tsof and tuof instructions
15:53:36 <Vorpal> itidus21, "enterbrainfuck"?
15:53:40 <Vorpal> I don't see that on the wiki
15:53:56 <itidus21> http://esolangs.org/wiki/User:FireFly/Enterbrainfuck
15:54:07 <fizzie> zzo38: It already has the llvm.uadd.with.overflow.i32 kind of intrinsics which "return" the result and an i1 about the overflow.
15:54:12 <jix> zzo38: but if you keep the addition and comparision instructions (maybe with an annotation to mark them as belonging together (if llvm does support this)) you wouldn't break existing passes
15:54:43 <itidus21> enterbrain is a company that makes rpgmaker products. rpgmaker products contain a ruby scripting language.
15:56:18 <itidus21> this is the kind of nonsense i would come up with, but far more intelligent than anything i would come up with
15:56:20 <Vorpal> itidus21, I once wrote a small GOL simulation in the RPG blades of avernum (btw, the avernum series is amazing). I think it may only run on classical PPC Mac OS
15:56:35 <Vorpal> used floor tiles as the data storage
15:56:56 <Taneb> That's it, I'm gonna make a brainfuck interpreter in Ren'Py
15:57:14 <Vorpal> btw I might fire up my old ibook and see if I still have that thing around
15:57:15 <Taneb> Visual novel creator with Python back-end
15:57:25 <Vorpal> however, how did you take screenshots on macs? I don't remember
15:57:42 <Vorpal> also... I don't currently have any surface to put the thing on
15:57:56 <Taneb> And I don't know how to use Ren'Py
15:58:21 <Vorpal> anyway the size of it was limited due to the number of instructions you could execute per script event
15:58:29 <itidus21> i abanoned this ridiculous thing, but this is a picture i made the other day where i advocate using graphic tiles as symbols http://oi50.tinypic.com/29z9egm.jpg
15:58:30 <Vorpal> so iirc it was like a 30x30 GOL world
15:59:41 <itidus21> i think the super mario bros tiles are so pretty to look at. maybe it's just the association with the games
16:03:02 <itidus21> and having destroyed the topic with my greedy post, i will back away
16:03:35 -!- ais523 has quit.
16:04:59 <zzo38> In Haskell (I have discussed this in #haskell channel yesterday), I have thought of (forall z. c z => (x -> z) -> z) and (forall z. c z => (z -> x, z)). The first one is right and the second one is left. Here I am using the methods and the mathematical laws of the class c.
16:06:20 <zzo38> Perhaps the names can be ClassCodensity for the right version and ClassDensity for the left version.
16:07:38 <zzo38> Now for ClassCodensity, depending on the methods and laws of c: If it is a monoid, you get a list. If it is a semigroup, you get a non-empty list. If it is a commutative idempotent monoid, I think you get a set.
16:08:11 <Taneb> First class classes?
16:08:56 <zzo38> It is possible using constraint kind, although it can be done even without constraint kind.
16:09:36 <zzo38> For ClassDensity, if c is Copeanoid then I would think you get a non-empty list comonad.
16:10:46 <Taneb> class Class (c :: * -> *)
16:11:32 <Taneb> data Monoid' :: Monoid m => m -> Monoid' m
16:11:43 <Taneb> I don't even know where I'm going with this
16:11:51 <zzo38> You could even have something like this: data Monoid_ x where { Monoid_ :: Monoid x => Monoid_ x; }; data Functor_ x where { Functor_ :: Functor x => Functor_ x; };
16:12:07 <zzo38> Now the (,) for constraints and the (,) for types is the same one
16:12:58 <coppro> I need to learn agda again
16:13:07 <coppro> since apparently I'm giving a 45 minute talk on it
16:14:14 <olsner> not knowing agda should count as a good reason not to give a talk on it
16:14:35 <zzo38> data Restrict c x = Restrict { classOfRestrict :: !(c x), getRestrict :: x };
16:14:42 <olsner> but I guess you might not have been thinking right
16:17:37 <zzo38> Now can it be done like this? ClassCodensity Monoid = Codensity (Restrict Monoid_) I am unsure, I haven't tried
16:23:32 -!- Taneb has quit (Quit: shopping time).
16:24:53 -!- augur has quit (Remote host closed the connection).
16:27:30 <zzo38> It appears not to work so well.
16:29:53 <zzo38> It works if you make up the type separately
16:29:54 -!- zzo38 has quit (Remote host closed the connection).
16:46:00 -!- Taneb has joined.
16:55:40 -!- augur has joined.
16:55:52 -!- augur has quit (Remote host closed the connection).
16:55:59 -!- augur_ has joined.
17:06:34 -!- Patashu has changed nick to Patashu[Zzz].
17:11:14 -!- Patashu[Zzz] has quit (Ping timeout: 255 seconds).
17:41:46 <MDude> http://images.4chan.org/diy/src/1340967259708.gif
17:46:39 -!- MoALTz__ has quit (Quit: brb).
17:46:58 -!- MoALTz has joined.
17:57:01 -!- calamari has joined.
17:57:32 -!- edwardk has joined.
17:57:54 -!- azaq23 has joined.
17:59:45 -!- edwardk has quit (Read error: Connection reset by peer).
18:07:35 -!- azaq23 has quit (Quit: Leaving.).
18:13:29 <fizzie> Everyone was co-py-pasting / those kids were fast as lightning.
18:14:21 <itidus21> i wrote a program in BytePusher..
18:14:51 <itidus21> when it really comes down to it i can't deny that it allows for some extremely small programs
18:14:56 <fizzie> In fact it was a little bit frightening / but they ^v'd with expert timing.
18:15:26 <olsner> how do you pronounce ^v'd?
18:15:56 <fizzie> I don't know, but "pasted" didn't really flow either.
18:17:03 <itidus21> and also the fact it's easy to program it directly into a hex editor
18:21:31 <fizzie> There's a Finnish translation that goes approximately "who knows the feared Kung-Fu / can beat all the obstacles / you can break even a stone fence / everyone respects you".
18:21:57 <olsner> sounds like a fairly good translation
18:22:14 <olsner> not that anyone cares what the song's text is about
18:24:58 <fizzie> Also other such gems. "I shouted: 'get in the queue' / the first fell down by my kick / soon the others each in their turn / were examining the ground / after I swinged [fists] a bit more / the rest fled running".
18:26:06 -!- zzo38 has joined.
18:26:20 <itidus21> it's fun seeing my native language[english] being hacked by translators
18:27:05 <itidus21> i can't really explain what it's like to only know english
18:27:29 <olsner> how does it feel? please explain
18:27:35 <zzo38> I think LLVM has no unions, isn't it?
18:28:33 <itidus21> olsner: well, what some would call bad translations, is like seeing the language being used in new and fun ways
18:28:36 <zzo38> Can you make a structure with zero-length arrays and access them as if it were a union, can it work without the optimization messing it up?
18:28:41 <itidus21> like that craze about all your base are belong to us
18:28:53 <olsner> if LLVM has casts, unions could be a source language-only thing
18:29:36 <olsner> and I'm pretty sure it does have casts, but no idea how it treats aliasing
18:29:44 <zzo38> LLVM does have casts but will any optimization or anything allow it to cause problems?
18:29:49 <itidus21> it's not just an act of mockery. theres a secret joy in witnessing so called engrish
18:29:56 <zzo38> And, yes, aliasing too
18:31:34 <Taneb> Advert for Snickers: people get annoyed when they're hungry, so eat, I guess?
18:31:39 <itidus21> it's like, as if you were to move to a new country where everyone spoke english, except that they all spoke it in a different way
18:32:53 <itidus21> nah its 4:30 am here.. i think i'm just flipping out
18:34:04 <itidus21> zzo38: i wrote a bytepusher program
18:35:05 <zzo38> itidus21: In what programming language did you write it in? If it is written in a text format programming language, post it in the wiki.
18:35:16 <zzo38> (Otherwise, just post the binaries.)
18:35:53 <itidus21> not sure what the best way to post a binary is..
18:36:08 <itidus21> its very short though, like trivial
18:36:29 <fizzie> LLVM had an union type earlier, but indeed the latest language reference doc no longer does. Maybe they have a documented alternative somewhere.
18:37:33 <zzo38> itidus21: One way is to host it in your own computer. Another way is to use base-64 or uuencode or something like that.
18:37:48 <olsner> http://llvm.org/docs/LangRef.html#pointeraliasing
18:38:21 <zzo38> itidus21: One way is to send it to my computer (I will give details on private message) and I will then host it
18:40:44 <fizzie> 2.8 release notes: "The LLVM IR 'Union' feature was removed. While this is a desirable feature for LLVM IR to support, the existing implementation was half baked and barely useful. We'd really like anyone interested to resurrect the work and finish it for a future release." Apparently no-one did.
18:41:40 <fizzie> But if they say type-based aliasing is not done on arbitrary IR code, I guess casts are safe.
18:41:58 <itidus21> zzo38: it's this.. i dunno if wikisend.com is safe or not.. im putting blind faith in it.. the program itself is only 27 bytes and does very little http://wikisend.com/download/615140/test.BytePusher
18:42:28 <zzo38> itidus21: Just post the hex on esolang wiki if it is that short.
18:42:36 -!- oerjan has joined.
18:43:29 -!- edwardk has joined.
18:43:36 <itidus21> zzo38: well my main reason for mentioning it is i noticed you worked on bytepusher stuff. its not that the actual program has any value
18:44:21 <zzo38> itidus21: Yes I would think a short program such as that would do nothing useful, but if you want to post it anyways, if it is that short you can just post the hex
18:46:05 <oerjan> <fizzie> Don't you mean "add to the Visual SourceSafe library"? <-- i think that's the one i saw mentioned as "the only VCS that is worse than not having any"
18:46:20 <fizzie> oerjan: It's famously bad, yes.
18:46:23 <oerjan> i may have mentioned this before
18:46:48 <itidus21> zzo38: i just wanted to say that i looked at bytepusher really :D
18:46:48 <olsner> how can anyone ever "mean" to add something to the VSS library?
18:47:31 <itidus21> i had my doubts about it when i first looked on the wiki but its the first time ive written a program in a hex editor
18:47:50 <Vorpal> I actually met someone who defended VSS (he didn't claim it was perfect, just not as bad as people made it out to be). Strange thing is he wasn't an idiot in most other respects
18:48:41 <kmc> i find that when everyone hates a given technology without using it
18:48:47 <kmc> and i start using it
18:48:50 <kmc> it's not as bad as everyone says
18:48:53 <zzo38> itidus21: OK. Other programs were generated using C programs and Python programs, and one program I wrote in the PUSHEM assembler.
18:49:06 <olsner> Vorpal: he might have been sarcastic, and you're the fool
18:49:41 <fizzie> Vorpal: I (knowingly) know only one VSS user, and they said it was quite bad. But I suppose they must've improved some things about it. At least I heard they added a client/server model. (Before that, all clients directly manipulated the repository over a SMB share.)
18:49:48 <Vorpal> olsner, he seemed honest, and the rest of the people nearby were equally fooled in that case.
18:49:57 <itidus21> zzo38: all it really does is plot a red pixel (step 1), then it plots a second pixel next to it based on reading the first keyboard byte as a colour(color)
18:50:13 <Vorpal> fizzie, proper locking for that model sounds like hell
18:50:17 <itidus21> i was really impressed that you can do all that in 27 bytes
18:50:28 <olsner> I have actually seen VSS in use (as in, seen the screen while someone was using it)
18:50:38 <itidus21> i don't think the guy who made it really knows what to do with it
18:50:39 <Vorpal> olsner, okay, what did it look like?
18:50:54 <fizzie> Vorpal: Rumour has it that the dtabases had a habit of going bad often. Though I think there was a database unfucker tool too.
18:50:57 <olsner> I don't really remember that well, but some guy was building a custom UI for it in VB
18:51:56 <fizzie> Today's piece of (partially unverified) trivia: win32 ABI only guarantees 4-byte stack alignment upon function entry, but if you have a double-precision float variable that goes on the stack, (at least some versions of) MSVC will opt to dynamically align stack to 8 with an and esp, 0xfffffff8 in the epilogue, for performance reasons.
18:52:15 <olsner> was the client/server thing ever in VSS though, or is that new for team thingy?
18:52:26 <fizzie> olsner: In VSS, I believe.
18:52:55 <Vorpal> fizzie, wait, what is so special about that instruction?
18:53:16 <Vorpal> seems like a reasonable way as long as the stack grows down (which it does)
18:53:24 <fizzie> "Starting with VSS 2005, Microsoft has added a client–server mode. In this mode, clients do not need write access to a SMB share where they can potentially damage the SS database."
18:53:45 <olsner> Vorpal: the special part is the alignment, not the instruction being used, I think
18:53:47 <fizzie> Vorpal: There's nothing special about it. It is reasonable.
18:54:06 <Vorpal> the alignment is kind of annoying though
18:54:15 <fizzie> I'm not sure the alignment is terribly special either. It was a random useless fact, is all.
18:54:21 <Vorpal> fizzie, what about 64-bit windows?
18:54:25 <fizzie> Well, at least mostly useless.
18:54:30 <EgoBot> Score for quintopia_areyoualive: 8.3
18:54:53 <olsner> Vorpal: always 8-byte aligned, you can't push other quantities of bytes in long mode
18:54:56 <fizzie> Vorpal: That has bigger stack alignment by default. Though I don't recall if it's 8 or even 16.
18:55:19 <olsner> I should say *at least* 8-byte
18:55:42 <fizzie> olsner: I actually believe you can push two. Not four, though.
18:55:44 <itidus21> zzo38: there is 1 problem i can see with it though.
18:55:59 <fizzie> (Not that anyone would push two.)
18:56:05 <zzo38> itidus21: What problem?
18:56:17 <quintopia> !bfjoust brachiation >->(-)*5(>+)*4(>[(<)*3(+)*7<<(+[<{}>(-)*50<(-)*50<(-)*15>>(>--[(-)*50(>)*7(>[(-)*9([+{[(+)*25[-]]}[+]])%14[-]][+][-])*27](+)*50)*3 (>-[(-)*50(>)*7(>[(-)*9([+{[(+)*25[-]]}[+]])%14[-]][+][-])*27](-)*50)*2(>)*7 (>[(-)*9([+{[(+)*25[-]]}[+]])%14[-]][+][-])*22])%28]++)*22>(-)*115[-][+][-]
18:56:20 <EgoBot> Score for quintopia_brachiation: 41.7
18:56:21 <olsner> fizzie: iirc a smaller immediate or memory operand gets zero-expanded to 64-bit
18:56:33 <olsner> and for registers, only 64-bit ones are allowed
18:57:21 <quintopia> !bfjoust brachiation >->(-)*5(>)*4(>[(<)*3(+)*7<<(+[<{}>(-)*50<(-)*50<(-)*10>>(>-[(-)*50(>)*7(>[(-)*5([+{[(+)*25[-]]}[+]])%10[-]][+][-])*27](+)*50)*3 (>-[(-)*50(>)*7(>[(-)*5([+{[(+)*25[-]]}[+]])%10[-]][+][-])*27](-)*50)*2(>)*7 (>[(-)*5([+{[(+)*25[-]]}[+]])%10[-]][+][-])*22])%28]++)*22>(-)*115[-][+][-]
18:57:24 <EgoBot> Score for quintopia_brachiation: 47.9
18:57:25 <itidus21> he should have made the 1 byte pixelmap address into 3 bytes.. and added a large buffer onto the end of the memory to catch it
19:00:05 <fizzie> olsner: The pseudo in Intel's manual goes: IF in 64-bit mode THEN [ IF operand size = 64 THEN [ RSP <- RSP - 8; Memory[RSP] <- Temp; (* Push quadword *) ] ELSE [ RSP <- RSP - 2; Memory[RSP] <- TEMP; (* Push word *) ] ].
19:00:58 <olsner> obviously it's wrong and I'm right!
19:01:14 <itidus21> or at least added a byte to toggle between 1 and 3 byte addressing of where the map of pixels begins
19:01:24 -!- pikhq has quit (Ping timeout: 245 seconds).
19:01:32 <itidus21> maybe it was a design decision. after all it's his thing not mine.
19:01:32 <fizzie> But what is true is you can't push a dword, and if you use PUSH imm32, it zero-extends to eight bytes.
19:01:34 -!- pikhq has joined.
19:01:40 <itidus21> or maybe just didn't occur to him
19:01:49 <olsner> are there byte-size pushes?
19:02:11 <Vorpal> <olsner> Vorpal: always 8-byte aligned, you can't push other quantities of bytes in long mode <-- oh okay
19:02:23 <olsner> Vorpal: it's being debated as you speak though
19:02:38 <fizzie> Well, I mean, there's PUSH imm8, but I think it's always pushed at least the 16 bits.
19:02:40 <Vorpal> olsner, I thought you could puss eax and such sizes of registers still?
19:03:18 <Vorpal> hm anyway iirc modern compilers (gcc at least) tend to use mov relative %rsp rather than push or pop
19:03:23 <Vorpal> that way you could do it
19:03:32 <olsner> fizzie: well, PUSH imm8 and PUSH reg8 is what I was thinking about, the question is which ones exist and what they do
19:03:39 <Vorpal> such as adding your whole stack frame size on entry of the function
19:03:46 <fizzie> olsner: There's no PUSH r8, just imm8.
19:03:58 <fizzie> olsner: And "If the source operand is an immediate and its size is less than the operand size,
19:04:01 <fizzie> a sign-extended value is pushed on the stack. If the source operand is a
19:04:04 <fizzie> segment register (16 bits) and the operand size is greater than 16 bits, a zero-
19:04:07 <fizzie> extended value is pushed on the stack.
19:04:14 <fizzie> (The operand size is listed to be 16, 32 or 64.)
19:04:44 <Vorpal> fizzie, you can do something like ADD %rsp,10 followed by MOV %rsp+2,%eax I think? (Not sure about the asm syntax for that, haven't been doing x86 asm for ages)
19:04:48 <fizzie> (Pasting from the Intel PDF, from Evince, is just lousy with newlines.)
19:05:07 <fizzie> You can certainly perform a "one-byte push" by just dec rsp.
19:05:08 <Vorpal> also I meant SUB not ADD
19:05:26 <fizzie> If you don't mind breaking most ABIs.
19:06:17 <Vorpal> fizzie, well, I can't help notice that gcc does not compile code to use PUSH and POP, rather it substracts the size of the stack frame from %rsp on function entry and then does mov relative %rsp
19:06:31 <Vorpal> so then you could easily have say 2 4-byte values pushed
19:06:41 <Vorpal> and just increment the stack frame by 8 rather than 2*8
19:06:58 <olsner> and a 32-bit operand size means zero-extending to 64-bit and pushing that? then there's at least two different ways to push a segment register zero-extended as 8 bytes?
19:07:12 <olsner> but pushing immediates is silly
19:07:35 <fizzie> Actually I suppose imm32 would be sign-extended to 64, I just misread that on the first pass.
19:07:36 <Vorpal> olsner, hm does it zero extend 16-bit registers too?
19:07:50 <zzo38> They should use PUSH and POP if their effect matches what need to be done
19:07:51 <olsner> Vorpal: you can zero-extend anything you want?
19:08:07 <zzo38> Also use AAA and so on if those work for the program done too
19:08:16 <Vorpal> olsner, well obviously, I meant if you have garbage in a register and do mov %ax,whatever
19:08:24 <olsner> AAA and some other old crap is not available in long mode
19:08:34 <Vorpal> olsner, I know mov %eax,whatever will zero the upper 32 bits of %rax
19:08:41 <kmc> but how will i do 64-bit BCD math?!?!?
19:08:41 <zzo38> olsner: Well, it would not compile those instructions in long mode, tghen.
19:08:56 <fizzie> Vorpal: That's kind of weird that you put the arguments the Intel way but add AT&T prefix %s.
19:09:02 <olsner> Vorpal: no, word and byte-size operations work as before on the lower bits preserving the higher bits
19:09:07 <Vorpal> fizzie, I like to be unusual!
19:09:33 <kmc> afaik the rationale for zero-extending 32-bit loads is that you can use 32-bit pointers for the first 4GB of memory
19:09:38 <olsner> Vorpal: also, you now have lower-byte/word registers for di, si, sp, bp that didn't use to have them
19:09:47 <Vorpal> olsner, ah, so would mov %ax,whatever zero the upper 32 bit but leave the bits between that and the lower 16 bits as they were before?
19:10:05 <olsner> Vorpal: no, it leaves all 48 upper bits unaffected
19:10:05 <Vorpal> fizzie, seriously though I haven't been doing x86 asm for ages.
19:10:25 <Vorpal> fizzie, mostly AVR recently. And that is recently as in half a year ago
19:10:26 <zzo38> There is also AAM which allows you to set what base you want, instead of always base ten; AAD also does that; you can use these for some purpose other than BCD arithmetic
19:10:54 <fizzie> Anyway, the x86-64 "Unix ABI" requires 16-byte stack alignment; don't know about x64 Windows. (And yes, as long as you have the alignment right the bytes inside could of course form smaller objects.)
19:11:19 <Vorpal> fizzie, as long as you don't use PUSH or POP for them that is
19:11:44 <fizzie> Well, if you manually pack them to a register. And I still maintain you can do the 2-byte push in long mode.
19:11:55 <fizzie> So four times push ax should be okay.
19:12:06 <Vorpal> what about alignment of x87 floating point on 32-bit windows? That is 80 bytes isn't it? What alignment does that need?
19:12:25 <kmc> er 80 bits?
19:12:33 <kmc> iirc the 80 bit format is only used internally
19:12:38 <kmc> in FPU registers
19:12:43 <fizzie> You *can* store them, though.
19:12:46 <Vorpal> so what does long double then use when written to memory?
19:12:55 <zzo38> "The AAD instruction sets the value in the AL register to (AL + (10 * AH)), and then clears the AH register to 00H." (The number ten in there can be changed to an eight-bit immediate value)
19:13:10 <fizzie> GCC writes the 80-bit long doubles as 12-byte or 16-byte objects depending on a flag.
19:13:32 <Vorpal> zzo38, is that a BCD instruction?
19:13:40 <pikhq> Isn't long double just a double on x86-64?
19:13:44 <olsner> anyway, the fun thing with the new lower-byte registers is that with the 64-bit operand prefix, ah, bh, ch, dh change meaning to spl, bpl, sil, dil
19:13:44 <pikhq> (because fuck x87)
19:13:47 <fizzie> -m96bit-long-double and -m128bit-long-double.
19:13:58 <Vorpal> pikhq, 100% sure that isn't so. I got different results last time I checked
19:14:12 <pikhq> Vorpal: Well then.
19:14:15 <zzo38> Vorpal: It is the command for ASCII adjust before division, so yes it is meant to be a BCD instruction, although it has other uses too.
19:14:25 <Vorpal> pikhq, at least gcc compiled my use of long double into x87 instructions on 64-bit x86 Linux
19:14:41 <pikhq> Guess it is, then.
19:14:57 <olsner> I somehow got the idea that x87 was entirely unavailable in long mode
19:14:59 <Vorpal> pikhq, anyway my question concerned alignment of long double on the 32-bit windows stack
19:15:05 <zzo38> The AAM instruction does the reverse operation of AAD; it does division and modulo by immediate.
19:15:14 <pikhq> olsner: x87 is *entirely* available in long mode.
19:15:18 <fizzie> Vorpal: I'm thinking 16 bits.
19:15:26 <pikhq> olsner: And worse still, necessary for MMX to work.
19:15:43 <pikhq> (admittedly, you're not *that* likely to use it. Still.)
19:15:51 <fizzie> Vorpal: I mean, it could be 12, but they already align doubles to 8 for performance, so...
19:16:01 <fizzie> GCC has the fanciest -mfpmath=both. "Attempt to utilize both instruction sets at once. This effectively doubles the amount of available registers, and on chips with separate execution units for 387 and SSE the execution resources too. Use this option with care, as it is still experimental, because the GCC register allocator does not model separate functional units well, resulting in unstable ...
19:16:02 <Vorpal> pikhq, I actually used it for one thing. Trying to remember what it was...
19:16:12 <olsner> pikhq: oh, because of that mmx/fpu registers sharing registers thing?
19:16:29 <Vorpal> pikhq, does anyone use MMX on 64-bit though?
19:16:33 <Vorpal> I thought it was all SSE
19:17:18 <olsner> pikhq: that's fairly horrible
19:17:41 <pikhq> Vorpal: Because of SSE2, in practice SSE is an extension to MMX.
19:17:50 <Vorpal> pikhq, different register set though
19:17:54 <pikhq> (some of the SSE2 opcodes are MMX opcodes extended to work on XMM registers)
19:18:07 <Vorpal> pikhq, no need to support the legacy registers in theory
19:18:11 <zzo38> I think the AAM and AAD instructions are useful even if you do not use BCD arithmetic.
19:18:22 <pikhq> Yes, but x86_64 was designed to be a *minimal* change to x86.
19:18:29 <Vorpal> zzo38, IIRC they are gone on 64-bit x86
19:18:43 <Vorpal> zzo38, and the opcodes converted into new prefixes or something
19:18:53 <zzo38> Vorpal: Yes, but I would think they would still work if not in 64-bit mode
19:18:58 <Vorpal> pikhq, yet they dropped vm86
19:19:07 <pikhq> Vorpal: That's actually hard to do.
19:19:20 <olsner> actually, I think the BCD opcodes were left unassigned, just removed
19:19:29 <pikhq> If it was less work to keep something than remove it, they kept it.
19:19:35 <Vorpal> pikhq, the CPU still has to be able to do that when running a 32-bit OS though
19:19:41 <Vorpal> so the functionality is still there
19:19:58 <olsner> all one-byte inc (and dec?) opcodes got reassigned to prefix duty, but those were already redundant with other encodings for those isntructions
19:20:28 <Vorpal> olsner, what did they do with AAM and AAD then?
19:20:37 <pikhq> Vorpal: Yes, but to get it working under x86_64 you need to get segmentation working under x86_64.
19:21:03 <pikhq> VM86 is mostly just sticking segmentation on top of paging.
19:21:12 <Vorpal> pikhq, but uh doesn't 64-bit still have some segment registers? IIRC one is used for something still
19:21:28 <Vorpal> fs relative addressing iirc?
19:21:29 <kmc> you can still set a base on %fs and %gs
19:21:33 <kmc> but the limits are not checked
19:21:40 <pikhq> Vorpal: Yes, but those are vestigial.
19:21:41 <fizzie> And the bases are set by writing some MSRs.
19:21:44 <kmc> cs, ds, es, ss are all stuck to 0 base
19:21:48 <Vorpal> kmc, what were those bases used for?
19:21:49 <olsner> more fun stuff: 0x90 is XCHG eax,eax but is used everywhere as NOP - but according to the zero-extending 32-bit stuff that instruction should no longer be a no-op in long mode
19:21:56 <Vorpal> thread local storage iirc?
19:22:02 <kmc> Vorpal: depends on the OS and library
19:22:29 <Vorpal> pretty sure %fs was used for TLS
19:22:45 <pikhq> Vorpal: Amusingly, you can still run 16-bit code when in long mode.
19:22:51 <olsner> so, they redefined it to NOP, and to do an actual XCHG eax,eax you'll need to use another (existing redundant) encoding
19:22:54 <Vorpal> <olsner> more fun stuff: 0x90 is XCHG eax,eax but is used everywhere as NOP - but according to the zero-extending 32-bit stuff that instruction should no longer be a no-op in long mode <-- they special cased it though
19:23:04 <pikhq> 16-bit protected mode code just *barely* works.
19:23:20 <pikhq> I don't know, I just know WINE does it.
19:23:26 <kmc> Vorpal: %fs is used for TLS and stack-protector canary
19:23:41 <kmc> i don't know if %gs is commonly used by anything in userspace
19:23:46 <pikhq> How else do you think it does Win16 on x86_64? :)
19:23:47 <Vorpal> pikhq, I'm kind of torn on if I want to check out the source to figure it out or if it would be too horrible
19:23:55 <Vorpal> pikhq, it does that? nice
19:24:00 <kmc> it's used by kernels thanks to the SWAPGS instruction
19:24:03 <kmc> http://www.x86-64.org/pipermail/discuss/2000-October/001009.html
19:24:17 <Vorpal> kmc, %fs is used for two things? huh
19:24:36 <olsner> really, %fs is used for whatever you want to use it for :)
19:24:39 <kmc> the stack protector canary value lives within the TLS block
19:24:40 <zzo38> If things like that stop working entirely in a 64-bit operating system, you could still either run those programs in an emulator or dual-boot to another operating system.
19:24:56 <pikhq> zzo38: Thus DOSbox.
19:25:07 <kmc> i mean, the %fs base points to a libc internal structure, a different one per thread
19:25:12 <kmc> which contains various stuff like the canary value
19:25:20 <kmc> and also contains pointers to reach the user-visible TLS variables
19:25:23 <Vorpal> pikhq, it uses vm86 afaik
19:25:29 <pikhq> Vorpal: dosemu now has an 8086 emulator, because of x86_64.
19:25:32 <fizzie> GS is used for TLS and a pointer to some kernel data structure on Windows. Not sure what, if anything, they do with FS. (They used to have FS pointing at those, I also don't know why they bothered swapping that for x64.)
19:26:29 <Vorpal> fizzie, well the kernel one is easy to understand given the SWAPGS instruction
19:26:35 <kmc> hm so in long mode, SYSCALL does not load %ss:%rsp?
19:26:49 <kmc> "When using SYSCALL to implement system calls, no kernel stack exists at the OS entry point."
19:27:03 <kmc> but i'm pretty sure that's not true in 32-bit mode
19:27:05 <kmc> Vorpal: stack segment
19:27:09 <kmc> I guess it is irrelevant in long mode
19:27:19 <olsner> swapgs is pretty hard to work with, easy to swap the wrong number of times and end up with kernel code using a gs that was set by user space
19:28:04 <olsner> I think ss gets loaded with a null segment, rsp is iirc unchanged and you have to load it if you want a stack in the kernel
19:28:08 <Vorpal> what happens when a 32-bit program running under a 64-bit OS does a SYSCALL?
19:28:29 <olsner> interrupts will also give you this ss is a null segment state, but for some reason you can still access it there
19:28:46 <Vorpal> <olsner> swapgs is pretty hard to work with, easy to swap the wrong number of times and end up with kernel code using a gs that was set by user space <-- oh? Wouldn't you just execute it once after entering kernel mode?
19:29:20 <kmc> Vorpal: and once on leaving...
19:29:34 <kmc> and you have to make sure you got every exit path
19:29:40 <Vorpal> but if you have clearly defined entry and exit points that shouldn't be an issue
19:30:03 <Vorpal> kmc, that is just a question about proper design though
19:30:06 <kmc> hm I'm wrong, it looks like SYSCALL doesn't load the stack pointer even in 32-bit mode
19:30:11 <kmc> the instruction existed before amd64, you see
19:30:30 <kmc> SYSENTER does load the stack pointer from a MSR, but doesn't save the instruction pointer
19:30:33 <kmc> what a country
19:30:48 <Vorpal> x86, what did you expect?
19:31:15 <kmc> well they were invented by competing companies too
19:31:24 <kmc> it's a bit like the NYC subway system
19:31:36 <kmc> which was built by three competing entities
19:31:45 <kmc> and then gradually unified
19:31:47 <olsner> the part of the segments stuff that got left over in long mode is quite silly, you have stuff like syscall requiring a specific set (two sets, for 32-bit back-compat) of segment descriptor in the descriptor table that should look a certain way
19:32:38 <olsner> but still most of the information is ignored and it just loads default values (like, at best it checks that you put the only allowed values in there)
19:33:37 <itidus21> zzo38: quick comment offtopic, it has occured to me that the reason for not scrolling is that it throws out the advantage of having ZZYYXX addresses
19:34:33 <itidus21> but there is a way around this.. if there was a single XX0000 space where writing or reading it referenced the pixelmap
19:35:46 <Vorpal> olsner, AVR is quite clean, except the GCC ABI for it makes no sense. Like hardware integer division puts part of the result in a fixed register (%r0 iirc), which is callee-saved in the GCC ABI. There are caller saved registers (%r24-%r27 iirc), a better mapping would have been to make %r0 a caller saved register.
19:36:08 <Vorpal> Since most code could then just avoid using it, thus avoiding saving and restoring it at all
19:36:54 <Vorpal> also there was left shift and right shift on the model I worked with, but only one step at a time.
19:37:12 <kmc> AVR chips are quite fun
19:37:23 <pikhq> Vorpal: Betcha "love" how x86 Linux has __kernel_vsyscall.
19:37:24 <fizzie> Hey, I have another piece of trivia that I recently came across again. Z80 has the usual arithmetic left shift (SLA, shifts zeroes in), arithmetic right shift (SRA, duplicates the sign bit) and logical right shift (SRL, shifts zeroes in again) instructions. *But*, if you look at the opcodes, there's a hole in where you'd logically have SLL, the logical left shift. And if you go and use it, ...
19:37:30 <fizzie> ... turns out it's actually one of the undocumented instructions; it's a left shift, but it shifts 1 bits in. At least one assembler still calls it SLL, though.
19:37:34 <Vorpal> pikhq, is that related to the vdso?
19:37:46 <kmc> i don't have much opinion about the AVR ISA, but the chips have neat peripherals
19:37:54 <kmc> i guess all microcontrollers do, but this is the one i know best
19:38:00 <Vorpal> pikhq, right, I know about it then. To select SYSENTER/SYSCALL/INT
19:38:02 <pikhq> It's the generic system call function in x86's VDSO.
19:38:11 <kmc> wait, hold on
19:38:17 <kmc> vsyscall means something different
19:38:23 <kmc> at least in some contexts,
19:38:24 <zzo38> I made up a 7-bit instruction set, where addresses are 14-bits
19:38:36 <kmc> vsyscall means the "system calls" that actuall execute in userspace, like gettimeofday
19:38:49 <pikhq> kmc: Yes, but those don't go through __kernel_vsyscall at all.
19:39:01 <Vorpal> kmc, they are in the same sort of general area of memory iirc
19:39:05 <kmc> yeah... I'm not surprised they are inconsistent with terminology
19:39:06 <olsner> fizzie: but arithmetic/logic doesn't make sense for left shifts
19:39:12 <Vorpal> and they are done with vdso rather than vsyscall these days iirc
19:39:18 <Vorpal> which iirc is slightly different
19:39:21 <kmc> in current systems they are both in the vdso, afaik
19:39:22 <pikhq> __kernel_vsyscall does a *real* system call.
19:39:28 <Vorpal> and only matters on 64-bit
19:39:34 <zzo38> GCC can compile to MMIX; when will they make LLVM compile to MMIX?
19:39:36 <pikhq> You actually have to special-case the userspace-only ones.
19:39:43 <kmc> Vorpal: what only matters on 64-bit?
19:39:54 <Vorpal> 7fffbbeb0000-7fffbbeb1000 r-xp 00000000 00:00 0 [vdso]
19:39:55 <Vorpal> ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
19:39:59 <pikhq> Vorpal: VDSO is on all Linux archs.
19:40:00 <Vorpal> from /proc/self/maps on 64-bit
19:40:04 <fizzie> olsner: Yes, but since the other three are called what they are, it kind of induces the name "logical left shift".
19:40:07 <kmc> that last page is legacy though
19:40:10 <zzo38> In addition, can they make LLVM compile to Glulx?
19:40:12 <Vorpal> vsyscall is like a deprecated alternative to vdso yes
19:40:28 <Vorpal> kmc, and iirc only 64-bit had vsyscall as opposed to the vdso
19:40:34 <shachaf> I'm pretty sure when glibc does a syscall it doesn't go through either of those.
19:40:34 <Vorpal> unless I completely misremember
19:40:45 <Vorpal> no 32-bit cat around to check with alas
19:40:46 <kmc> shachaf: on amd64? yeah, it uses the SYSCALL instruction
19:40:48 <shachaf> It just uses a "syscall" instruction.
19:40:56 <olsner> vdso is for the userspace-implemented stuff (plus syscalls), and vsyscall is only for the thing that selects the best way of doing syscalls?
19:41:10 <pikhq> shachaf: Uh, *surely* it goes through VDSO for gettimeofday et al.
19:41:16 <pikhq> olsner: Basically.
19:41:21 <Vorpal> olsner, vsyscall contains a userspace gettimeofday (legacy) iirc. While vdso contain the current user space one
19:41:30 <Vorpal> iirc vsyscall didn't scale and was a horrible hack
19:41:38 <kmc> these days vsyscall doesn't contain the legacy gettimeofday, it just contains code to make a "real" gettimeofday syscall
19:41:40 <Vorpal> but removing it would break statically linked applications
19:41:41 <kmc> as a compatibility hack
19:41:43 <pikhq> shachaf: Also, on x86_64, __linux_vsyscall DNE anyways.
19:41:49 <fizzie> olsner: SLA/SRA have opcode 0x26/0x2E, and SRL (which is what the only shift-left in the manual is called) is 0x3E, and 0x36 does perform a left shift, so it sort of has to be called "SLL" even though it's not exactly "logical" to shift in set bits.
19:41:55 <Vorpal> kmc, ah, it used to contain a user space one
19:42:00 <kmc> they minimized the amount of code in the legacy vsyscall page, to reduce attack surface
19:42:03 <zzo38> Is it allowed for LLVM functions to be both inline and naked? It may be useful to implement some of the glk.h functions in this way when targeting Glulx
19:42:05 <pikhq> (as syscall always exists, and it's always fast)
19:42:10 <kmc> (specifically the amount of code in fixed locations, for ROP)
19:42:34 <zzo38> Since much of glk.h functions are native instructions in Glulx
19:42:39 <pikhq> Vorpal: Does Not Exist
19:42:45 <shachaf> kmc: Having a "syscall" in a fixed location seems like a pretty useful thing for ROP.
19:42:55 <fizzie> I really thought I used SLL in rfk86, but it does not seem to. :/
19:43:14 <olsner> what can you use it for?
19:43:24 <kmc> on i386, you make normal syscalls through vdso, but the address of that entry point comes in through an ELF auxv, so you don't need a dynamic linker in userspace to find the syscall entry point
19:43:32 <Vorpal> shachaf, the syscall in question was only gettimeofday iirc?
19:43:33 <kmc> whereas you do need one to find the vsyscalls for gettimeofday etc
19:43:48 <olsner> fizzie: but in other words, you have found no use for it?
19:44:02 <Vorpal> shachaf, in the vsyscalls page
19:44:06 <kmc> i don't know if i386 ever had that stuff at a fixed address as x86_64 does
19:44:09 <Vorpal> I don't think it contained "syscall"
19:44:20 <kmc> <kmc> these days vsyscall doesn't contain the legacy gettimeofday, it just contains code to make a "real" gettimeofday syscall
19:44:20 <shachaf> Vorpal: But it does now, doesn't it?
19:44:24 <Vorpal> shachaf, just the "fixed functionality" gettimeofday
19:44:31 <fizzie> olsner: I thought I had. I'm sure I used it in *something*. I mean, it's like SCF; RLC (set carry flag; rotate left via carry) except shorter and doesn't mess the carry. (Er, I guess it might do the latter due to the shift. But anyway, shorter.)
19:44:32 <Vorpal> shachaf, no, that is in the vdso
19:44:58 <fizzie> olsner: If you're collecting bits that come in one by one, serially, in a register, it could be nice.
19:45:00 <shachaf> Vorpal: Last time I looked at [vsyscall] it was mostly empty with a few syscall instructions.
19:45:07 <kmc> == shachaf
19:45:16 <kmc> i found the commit where they removed the interesting code in the vsyscall page
19:45:19 <Vorpal> shachaf, read the bloody source for vsyscall
19:45:34 <kmc> i think you two are confusing two things
19:45:43 <kmc> "vsyscall" the legacy page mapped at ffffffffff600000
19:45:51 <kmc> and "vsyscall" the idea of doing system calls in userspace
19:45:58 <kmc> which these days is implemented not with that page, but with the vdso
19:46:24 <shachaf> Vorpal: I didn't "read the bloody source", but I did "dump the bloody page and disassemble it"
19:46:30 <kmc> probably a wild-ass guess as to how much space they wanted
19:46:51 <olsner> they should've given it a 1GB page, just in case
19:47:04 <kmc> fun fact: you can't write(1, 0xffffffffff600000, 4096)
19:47:21 <shachaf> If bytes were IPv6 addresses...
19:47:41 <Vorpal> kmc, and? it is in the negative address space. User space shouldn't expect to be able to do anything there
19:47:47 <olsner> write rejects all upper-half/negative addresses?
19:47:52 <kmc> olsner: yeah
19:48:04 <kmc> Vorpal: well, you can read from that memory, and jump to it
19:48:06 <shachaf> Vorpal: But you can memcpy(buf, vsyscall);
19:48:19 <Vorpal> shachaf, of course, because that doesn't go into the kernel
19:48:23 <kmc> and this is how vsyscalls used to work
19:48:28 <kmc> Vorpal: not "of course"
19:48:33 <kmc> the kernel sets up the page tables so that you can read that page
19:48:41 <kmc> when ordinarily, you cannot read pages above the midpoint
19:48:46 <Vorpal> kmc, well duh, of course you couldn't do it if it didn't do that
19:48:56 <kmc> don't duh me
19:49:12 <Vorpal> kmc, but it is "of course" since /proc/self/maps says you can read it
19:49:17 <Vorpal> then of course you can memcpy it
19:49:20 <shachaf> Vorpal: I think kmc's point is that you can read from the page but not write(1, page);
19:49:32 <Vorpal> shachaf, yes and not surprising really
19:49:53 <kmc> i'm glad you're such a genius that this fact does not give you a moment's pause
19:49:57 <EgoBot> Score for quintopia_a: 57.1
19:50:05 <kmc> and thanks for telling us all how smart you are
19:50:22 <olsner> I think that's one of those things where if it's not surprising you aren't thinking properly about it
19:50:28 <Vorpal> kmc, I didn't mean to offend you, nor did I intend to appear like a genius (I'm not)
19:50:30 <olsner> if you can read it, of course you can write it to a file
19:51:18 <fizzie> kmc: What do you get back from write, incidentally? I mean, if it's EFAULT which means "outside your accessible address space", you could maybe sue someone for lying to you.
19:51:26 <kmc> i think that's what you get
19:51:31 <pikhq> Except that write() makes the read from kernel space, and the kernel no doubt screams about higher-half addresses in system calls.
19:51:34 <kmc> because access_ok() is not particularly clever
19:51:36 <Vorpal> olsner, err no, because write() happens in the kernel. And making the SYSCALL handler error out on kernel addresses is a reasonable security measure
19:51:51 <kmc> it's not "the SYSCALL handler" it's the code for each individual system call
19:52:06 <kmc> in fact that code has to exist in every device driver pretty much
19:52:23 <Vorpal> pikhq, exactly, which is why it makes perfect sense
19:52:26 <kmc> so if one driver forgets it (for example the Reliable Datagram Sockets implementation), you can use that driver to root the machine
19:52:46 <olsner> Vorpal: it doesn't really error out on kernel addresses here, it's erroring out on a "randomly" selected part of the address space, completely unrelated to whether you have access to it or not
19:53:13 <kmc> Vorpal: dude, I never said this fact was completely baffling, it makes sense, it's just slightly odd
19:53:17 <olsner> I mean, it's because it's not actually doing access checks at all that it needs to check address ranges in the first place
19:53:19 <Vorpal> olsner, well yes, but according to the ABI anything with MSB set is kernel.
19:53:30 <kmc> it's just an amusing corner case where the kernel says you can't read a particular piece of memory, but the processor itself lets you read it
19:53:38 <kmc> anyway I think we're all repeating the same facts over and over at this point
19:53:40 <Vorpal> kmc, well yes, that is true
19:53:52 <Vorpal> (both that it is amusing and that we are repeating facts)
19:54:20 <zzo38> Does LLVM have anything that you can make a global variable belong to an instruction? If not, will they ever add such things?
19:54:25 <pikhq> Let's get someone else in here to agree.
19:54:34 <olsner> Vorpal: the whole discussion is also amusing in a way
19:54:36 <kmc> > text "i agree with kmc"
19:54:54 <Vorpal> olsner, hm, be careful of going too meta
19:54:55 <zzo38> Perhaps by a metadata such as !owns
19:55:13 <olsner> in which way can a variable belong to an instruction?
19:55:34 <shachaf> I find it amusing how often [vdso]- or [vsyscall]-related discussions come up when kmc is around.
19:55:34 <fizzie> The ABI in fact explicitly does say "conforming processes may only use addresses from 0x0000000000000000 to 0x00007fffffffffff", that's also a bit funny with the readable high page there.
19:55:40 <shachaf> He doesn't even have to start them, the just happen.
19:55:48 <Vorpal> shachaf, that is strange
19:55:51 <zzo38> I mean that if the instructions are stored in RAM, the address of the global variable will be the same address of the immediate operands to that instruction.
19:56:00 <olsner> fizzie: does it also say somewhere that conforming processes must use vsyscall?
19:56:13 <kmc> it is a bit obnoxious that you can't use the VDSO vsyscalls without a dynamic linker
19:56:32 <zzo38> (If the instructions are not stored in RAM, or if there is something else preventing the instructions from being modified, then that metadata will be removed and a warning will be emitted.)
19:56:34 <kmc> (maybe not a whole dynamic linker; maybe you can get by with a simplistic ELF reader)
19:56:35 <olsner> well, obviously it doesn't now that vdso is there but err, something
19:56:45 <Vorpal> kmc, you could write your own code to parse the ELF structure of the VDSO surely?
19:56:52 <kmc> well, it depends
19:56:58 <kmc> are there dynamic relocations inside the VDSO?
19:56:59 <Vorpal> kmc, since it doesn't have to be a full linker that shouldn't be /too/ hard
19:57:04 <shachaf> kmc: Linux is turning into Windows!
19:57:05 <fizzie> olsner: Well, this is the System V Application Binary Interface. I guess a hypothetical Linux ABI document could just say "overriding SysV ABI, you can actually have this one page if you behave".
19:57:06 <kmc> if so, you need to apply those relocations
19:57:13 <olsner> hmm, where do you get the pointer to the vdso in the first place?
19:57:19 <Vorpal> kmc, I don't think the vdso is writable from user space
19:57:22 <kmc> olsner: ELF auxv
19:57:42 <kmc> Vorpal: it's not a COW mapping like any other shared library?
19:57:45 <olsner> but I guess you'll at least need to look up stuff in the symbol table, yuck
19:57:47 <kmc> i think it is writable
19:57:51 <zzo38> olsner, Vorpal: Can you understand what I meant now, by a variable belonging to an instruction?
19:57:55 <shachaf> kmc: I tried to unmap or mprotect [vdso] and didn't manage it.
19:58:14 <pikhq> kmc: If it's writable and not COW then that's a pretty major vuln.
19:58:16 <Vorpal> kmc, don't /think/ so. Since it contains some shared memory with the kernel, containing that time of day value
19:58:20 <Vorpal> for the user space gettimeofday
19:58:29 <kmc> i remember a mmap_min_addr bypass where you construct an executable where the only location for the VDSO is 0
19:58:49 <shachaf> As far as I know there's no way to get rid of [vdso]/[vsyscall].
19:58:57 <Vorpal> speaking of which, I wish root could disable mmap_min_addr for a specific process, rather than for the whole system
19:59:07 <kmc> can't you?
19:59:08 <olsner> zzo38: probably not possible, for one you have no idea how an immediate gets encoded into memory on your cpu, and self-modifying code might not work at all
19:59:15 <Vorpal> kmc, I have an emulator (ppc mac os classic emulator) that needs mmap_min_addr set to 0 to run
19:59:38 <Vorpal> a better solution than switching it for the whole system would be nice
19:59:51 <kmc> what about the MMAP_PAGE_ZERO personality bit
19:59:54 <shachaf> That's what makes me think [vsyscall] would be ideal for a debugger to do syscalls with.
19:59:55 <olsner> if you accept that it only sometimes works, then sure it's possible but I see no sane reason for someone to add it to LLVM
19:59:56 <kmc> can you set that from userspace
20:00:00 <zzo38> olsner: That is why you would need to make it a metadata which the program that compiles the LLVM code to the native code, must figure out how to encode it properly, or just ignore it
20:00:06 <Vorpal> kmc, yeah afaik the vdso is not writable and not COW
20:00:15 <Vorpal> look at the mapping: 7fff94549000-7fff9454a000 r-xp 00000000 00:00 0 [vdso]
20:00:20 <kmc> sure, but can it be remapped
20:00:24 <kmc> shachaf says no, but i haven't tried
20:00:41 <Vorpal> kmc, why would it need to be remapped? Everything can be RIP relative
20:00:48 <Vorpal> hm maybe not on 32-bit though?
20:00:51 <Vorpal> not sure how that works
20:01:01 <kmc> Vorpal: does not seem relevant
20:01:10 <kmc> i meant, are you allowed to call mprotect() on it to add the write bit
20:01:18 <shachaf> kmc: I'd love to be wrong!
20:01:21 <Vorpal> I would doubt it, try it
20:01:39 <kmc> olsner: on i386 you get an auxv entry for the start of VDSO and another for the syscall entry point
20:01:41 <zzo38> olsner: Maybe you don't want to add it to LLVM, but I think it is good idea. If it is done with a metadata like this, there may be no need for it to be a part of LLVM since the backend can just parse it if it is there
20:01:44 <shachaf> An easier way to test than what I did would be to try to write to it from gdb.
20:02:04 <zzo38> Backends that cannot use this !owns metadata can ignore it.
20:02:24 <Vorpal> <zzo38> olsner, Vorpal: Can you understand what I meant now, by a variable belonging to an instruction? <-- no
20:02:43 <kmc> i think he means, if you write to that variable it changes the instruction
20:02:50 <zzo38> Vorpal: I did explain it though.
20:02:54 <kmc> a variable where "reads" are actually load immediates scattered through the code
20:02:58 <kmc> and "writes" change all those instructions
20:03:01 <kmc> linux has or had a mechanism for this
20:03:07 <Vorpal> zzo38, it made no sense though
20:03:36 <Vorpal> zzo38, not sane basically
20:03:39 <zzo38> kmc: Yes, like that, although it would normally be used to change only the instructions which want that variable as an immediate; other instructions that read it would just read the value directly
20:03:43 <shachaf> ptrace can in theory write to any memory in the process's address space, no matter what the protection.
20:03:56 <zzo38> I don't care if it is sane or not
20:03:57 <shachaf> It goes so far as to convert a SHARED mapping to a PRIVATE mapping.
20:04:00 <kmc> shachaf: 7fff5fdc6000-7fff5fdc7000 rwxp 00000000 00:00 0 [vdso]
20:04:06 <kmc> and i wrote over it, and read the data back out
20:04:06 <Vorpal> <kmc> linux has or had a mechanism for this <-- really?
20:04:11 <kmc> Vorpal: yes, look up "immediate values"
20:04:16 <Vorpal> kmc, so then it is COW
20:04:22 <Vorpal> kmc, does gettimeofday still work after that?
20:04:41 <kmc> i'm not sure where the variables it reads are stored
20:04:47 <kmc> presumably they are in the upper half of memory
20:04:51 <kmc> and don't show up in /proc/self/maps
20:04:54 <kmc> but are readable by userspace
20:05:06 <shachaf> kmc: Maybe I'm just thinking of [vsyscall], then.
20:05:07 <Vorpal> kmc, I think they are static volatile variables in the vdso?
20:05:16 <shachaf> Or maybe I just got it wrong. I don't remember.
20:05:30 <kmc> shachaf: yes, i wouldn't be surprised if vsyscall is permanently read only
20:05:38 <kmc> having some RWX memory at a fixed address would be a serious security concern
20:05:49 <Vorpal> #define gtod (&VVAR(vsyscall_gtod_data))
20:05:58 <olsner> if they are external to the vdso they can be anywhere
20:06:01 <Vorpal> that was clock_gettime though
20:06:28 <olsner> and the kernel can patch in the address or something
20:06:31 <EgoBot> Score for quintopia_a: 56.8
20:06:45 <Vorpal> hm so the variable is basically read until it doesn't change between two reads?
20:07:25 <mroman> bfjoust should be more like core wars.
20:07:31 <Vorpal> ../kernel/vmlinux.lds:.vsyscall_var_vsyscall_gtod_data ADDR(.vsyscall_0) + (3072 + 128) + 128 : AT((ADDR(.vsyscall_var_vsyscall_gtod_data) - ((-10*1024*1024) - __vsyscall_0 + 0xffffffff80000000))) { *(.vsyscall_var_vsyscall_gtod_data) } vsyscall_gtod_data = (ADDR(.vsyscall_var_vsyscall_gtod_data) - ((-10*1024*1024) - __vsyscall_0));
20:07:31 <olsner> why would you do that? in case there's a context switch just after you read it?
20:07:46 <Vorpal> olsner, because there are two fields
20:07:51 <Vorpal> olsner, so you need to do it atomic
20:08:04 <Vorpal> and yeah I guess there could be a context switch
20:08:16 <Vorpal> in the middle of reading it
20:08:24 <kmc> i,i cmpxchg16b
20:08:24 <Vorpal> time_t tv_sec; /* seconds */
20:08:24 <Vorpal> suseconds_t tv_usec; /* microseconds */
20:08:38 <Vorpal> time_t is 64-bit, not sure about suseconds_t
20:08:55 <Vorpal> for clock_gettime it is definitely two 64-bit values
20:09:01 <kmc> Vorpal: ah the joy of linker scripts
20:09:01 <Vorpal> kmc, hm you need a LOCK prefix
20:09:10 <EgoBot> Score for quintopia_a: 57.5
20:09:27 <Vorpal> kmc, that one looks generated. No human would write that line
20:09:30 <olsner> suseconds_t is 16-bit, so it only works for the first 65ms of a second
20:09:39 <kmc> Vorpal: you would be surprised
20:09:52 <Vorpal> kmc, no seriously, not on one line
20:10:16 <zzo38> I added [ ] repeat in ITMCK. It normally has to be all on one line, but it is OK for [ outside of a macro and ] inside of a macro as long as it is tail recursive. Repeat [ ] cannot nest although you can have a macro inside of [ ] which the macro also has [ ]
20:10:23 <Vorpal> kmc, also the second line of the file reads: " * Automatically generated C config: don't edit"
20:10:27 <olsner> ah, -10*1024*1024, that's 0xffffffff600000
20:10:35 <zzo38> (You will get error messages if you do it wrong.)
20:10:35 <Vorpal> olsner, on that specific kernel
20:10:39 <fizzie> olsner: Ten megs should be enough for everyone.
20:10:40 <Vorpal> which I'm not even running atm
20:10:46 <fizzie> Linker scripts are the best, though.
20:10:53 <Vorpal> olsner, wait, is that in the vsyscall page?
20:10:54 <kmc> perhaps the simplest way is to use gdb to step into the vsyscall code
20:11:21 <olsner> Vorpal: vsyscall_gtod_data was also a hint if the address wasn't enough
20:11:58 <Vorpal> (gdb) disassemble clock_gettime
20:11:58 <Vorpal> Dump of assembler code for function clock_gettime:
20:12:03 <fizzie> .bss ALIGN(4) (NOLOAD) : { . = . + 72; f = .; . = . + 4096; /* such a hack */ *(.bss) } (Okay, it wasn't on one line.)
20:12:14 <Vorpal> oh maybe this kernel is too old
20:12:17 <kmc> (gdb) break gettimeofday
20:12:18 <kmc> Cannot access memory at address 0x7ffff7ffb9f0
20:12:31 <Vorpal> kmc, try disassemble on it?
20:12:31 <olsner> kmc: mprotect to make it writeable first?
20:13:01 <Vorpal> also I thought glibc called the vdso. rather than you calling it directly
20:13:06 <kmc> i thought there efb
20:13:44 <olsner> that reminds me of that time I set a breakpoint inside what happened to be an immediate NULL value in the code
20:13:44 <mroman> Isn't there a version of 'bfjoust' where programs are actually in-memory and can modify each other?
20:13:57 <Vorpal> anyway I don't have debug symbols for that page
20:14:05 <olsner> (speaking of gdb setting breakpoints by modifying code)
20:14:10 <Vorpal> olsner, what happened?
20:14:16 <zzo38> I also want to add runtime subroutines to ITMCK. But there would be some limitations, based on the limitations of the .IT file format: * Runtime subroutines cannot be nested. * Channels must all be synchronized for runtime subroutines (although it may be possible to turn off a channel before calling the subroutine).
20:14:23 <zzo38> Neither of these restrictions applies to macros.
20:14:27 <olsner> Vorpal: the code ran, but set the variable to 0xcc instead of null
20:14:47 <fizzie> mroman: http://esolangs.org/wiki/FukYorBrane not so popular.
20:14:50 <Vorpal> olsner, I thought gdb used hardware breakpoints as long as there were enough around to spare
20:15:11 <olsner> it probably doesn't have access to set those
20:15:26 <Vorpal> olsner, I thought ptrace provided that?
20:15:59 <Vorpal> hbreak -- Set a hardware assisted breakpoint
20:16:07 <Vorpal> olsner, guess it doesn't by default?
20:16:28 <Vorpal> may or may not work I guess
20:16:39 <olsner> I think you only have like 4 of them per cpu
20:16:54 <mroman> I find that to be much better than bfjoust.
20:17:13 <Vorpal> olsner, well it works to break on _init in /bin/cat at least
20:17:19 <mroman> The data buffer for each of them is the opponent's program buffer.
20:17:23 <zzo38> Actually I guess runtime subroutines probably could be nested, although there would still be the restriction against desynchronized subroutines.
20:17:44 <kmc> Vorpal: "edit: fuck, beaten"
20:17:54 <Taneb> Is skype not working for anyone else?
20:18:03 <kmc> i was going to say what you had just said
20:18:22 <Vorpal> olsner, also what about hyper threading here ;P
20:18:23 <mroman> I mean to BF programs running in the SAME memory.
20:18:40 <fizzie> Vorpal: There's some undocumented special features in the hardware breakpoint #0, it had some sort of data-conditional (with masks) thingamajik.
20:19:07 <Vorpal> fizzie, undocumented eh? Anyway data-conditional aren't that uncommon. Quite useful sometimes
20:19:14 <Vorpal> probably very limited since it is hw
20:19:37 <mroman> .....+[]1...........[->]2...
20:19:45 <mroman> where 1 is where the cell pointer of program 1 points to
20:19:46 <fizzie> Yeah, it was something very limited.
20:19:53 <mroman> and 2 where the cell pointer of program 2 points to.
20:20:02 <Vorpal> fizzie, the best hardware breakpoints I ever used was on AVR (with a debugger board connected to it with JTAG). IIRC they were quite numerous and had a lot of functionality
20:20:07 <olsner> Vorpal: *shrug* I did mean cpu==core, but there may be interesting conditionals of course
20:20:13 <shachaf> kmc: Is [vdso] in kernel address space in 32-bit Linux but user address space in 64-bit Linux?
20:20:26 <Vorpal> shachaf, I doubt that...
20:20:35 <kmc> no, i think it's user mapped in both
20:20:39 <zzo38> But perhaps there should be some command it ITMCK which allows you to have multiple entry points and to specify the order number for each one, for compatibility with programs that expect specific order numbers.
20:20:49 <shachaf> f57fe000-f57ff000 r-xp 00000000 00:00 0 [vdso]
20:20:52 <kmc> b7827000-b7828000 r-xp 00000000 00:00 0 [vdso]
20:21:04 <kmc> shachaf: that must be on a 64-bit kernel?
20:21:20 <Vorpal> shachaf, aren't both of those in the the same address space? Below the upper 1 GB on 32-bit that is
20:21:51 <kmc> on a 64-bit kernel, 32-bit processes get the full 4GB
20:22:00 <kmc> though, I don't know where the magic vsyscall variables go then!
20:22:11 <shachaf> kmc: No, it's a 32-bit kernel.
20:22:13 <Vorpal> kmc, they aren't on 32-bit? That fixed page I mean
20:22:24 <Vorpal> kmc, so what would it matter
20:22:25 <olsner> 10MB below 4GB perhaps?
20:22:32 <kmc> shachaf: huh
20:22:45 <Vorpal> kmc, all you have to do is map in a single page somewhere with your data. You could reserve a full page inside your VDSO for that
20:22:46 <kmc> shachaf: the rest of libraries are mapped around 0xb0000000?
20:22:57 <Vorpal> so that one of those pages happens to be empty apart from the shared variables
20:23:05 <Vorpal> and then you just map that page in specially
20:23:09 <Vorpal> kmc, sounds reasonable?
20:23:14 <Vorpal> because iirc that is how it is done
20:23:29 <kmc> well it's tricky though
20:23:40 <kmc> you have to make sure that user writes to that page will fault
20:23:50 <kmc> (either to implement COW or just abort, it's not really relevant)
20:24:03 <fizzie> Vorpal: Bah, the postings about it seem to have vanished. But from some related posts, you need to have 0x9c5a203a in edi for the controlling MSRs to actually appear to exist. And they were AMD-only. So, very undocumented.
20:24:08 <olsner> COW sounds counter-productive on the page that contains the current time and things like that
20:24:11 <kmc> but the page has to be readable from userspace and writable from kernel
20:24:22 <kmc> olsner: sure, but maybe you should allow userspace to COW that page if they really want to
20:24:28 <kmc> olsner: maybe it's the simplest default behavior, i don't know
20:24:44 <kmc> oh, i think i know what
20:24:51 <kmc> you set up another mapping to that physical page
20:25:25 <kmc> yeah you would do this anyway
20:25:47 <kmc> because x86 doesn't have bits for "ro for user, rw for kernel" afaik
20:25:56 <kmc> it just has "user" and "writable"
20:25:57 <Vorpal> <kmc> you have to make sure that user writes to that page will fault <-- just set the page protections for that?
20:26:25 <olsner> kmc: there's a flag for ignoring write protection entirely in kernel mode
20:26:29 <Vorpal> kmc, so you map that physical page into two different virtual addresses yes
20:26:46 <olsner> then again, linux relies on that stuff for security so probably that's useless
20:26:46 <kmc> olsner: oh yeah!
20:26:47 <kmc> good stuff
20:27:00 <kmc> i learned about that from the kernel exploitation book ;)
20:27:02 <Vorpal> olsner, pretty sure linux doesn't use that, since there is an option to write protect certain kernel structures in the kernel config
20:27:15 <Vorpal> you can turn it off in the debug section of the kernel config
20:27:20 <kmc> linux relies on it for several things
20:27:29 <Vorpal> kmc, it does? Then why that flag?
20:27:34 <kmc> for example read(2) should respect the page tables
20:27:35 <Vorpal> or does it switch back and forth?
20:27:44 <kmc> you should not be able to read into read-only memory
20:27:59 <kmc> so the writes within sys_read() or whatever should fault
20:28:02 <olsner> yeah, you should only read *out* of read-only memory
20:28:11 <kmc> you mean, write out of read-only memory ;)
20:28:12 <fizzie> Also I remember Linux/ARM dropped support for PTRACE_SINGLESTEP, because it used to work by using breakpoint-based emulation, and the kernel ARM instruction decoder was too broken (no Thumb-2 and not all instructions anyway) to figure out where to put the breakpoint always.
20:28:30 -!- asiekierka has quit (Remote host closed the connection).
20:28:30 <kmc> the pagefault handler has a table of places in the kernel code where a fault means some sensible error condition rather than a kernel bug
20:28:47 <kmc> specifically, you can annotate any instruction in the kernel with "if this instruction faults, jump to here"
20:28:47 <fizzie> (Apparently there's no hardware-assisted direct single-step feature on ARM.)
20:29:13 <fizzie> (And not too many people were actually using it.)
20:29:22 <kmc> so the kernel honoring user memory mapping really has two parts
20:29:36 <kmc> one is the address check, "is it above 0xc0000000" or whatever
20:29:37 <Vorpal> fizzie, I guess gdb can emulate it using breakpoints
20:29:48 <olsner> that whole approach to kernel/user memory access seems horrible
20:29:51 <kmc> the other is handling faults on reads/writes to userspace
20:29:54 <kmc> olsner: yes it is
20:30:15 <olsner> I guess it was performant enough, and doing the checks manually is also pretty horrible
20:30:28 <kmc> this is what x86 segmentation was designed for!
20:30:30 <fizzie> Vorpal: Yes, apparently gdb "stepi" does it in userspace by doing ptrace PEEKTEXT to see where it should put a breakpoint, and handles the instruction decoding by itself.
20:30:40 <kmc> it's like ideal for this
20:30:45 <Vorpal> fizzie, btw did you know that if you have some inline asm in C with a loop inside and you try to step (to the next source line) it will take forever because what it does is repeatedly single step
20:30:59 <Vorpal> fizzie, on x86 that is
20:31:05 <kmc> but, linux doesn't use it because it's not portable
20:31:21 <kmc> PaX patches do use it though
20:31:38 <kmc> also, you can build a Linux kernel where userspace and kernelspace have different sets of page tables, but it's uncommon and has a performance penalty
20:32:23 <Vorpal> kmc, pax must be 32-bit only then?
20:33:02 <Vorpal> kmc, anyway the different page table thing, isn't that what is done for VT-x with the nested page table thing on nehalem (sp?) and later
20:33:46 <kmc> Vorpal: PaX has a number of features
20:33:59 <kmc> most of them don't depend on segmentation
20:34:13 <kmc> i was talking about the particular feature of "kernel can't read from userspace unless it knows it's doing so"
20:34:26 <kmc> which on i386 is implemented with segmentation
20:34:34 <kmc> and on amd64 they have a slower implementation using some page table voodoo
20:34:40 <kmc> which i don't understand in detail
20:35:11 <kmc> and yeah I hear that VT-x supports what amounts to tagged TLB, which is a welcome feature
20:35:24 <kmc> Vorpal: i don't know anything about the state of PaX on architectures other than x86-{32,64}
20:35:45 <Vorpal> kmc, my desktop should support it. it is sandy bridge. my laptop is core 2 duo though, so it can do VT-x, but not the nested page table
20:36:01 <Vorpal> is ARM a clean architecture or is it just as bad?
20:36:19 <olsner> I think the address space ID:s only come on some (higher-end? xeon?) cpus
20:36:25 <kmc> ARM is cleaner than x86
20:36:28 <kmc> there is less history, for one
20:36:33 <kmc> but it's not without its share of weirdness
20:36:40 * oerjan wonders if there is a zoidberg programming language http://www.reddit.com/r/programming/comments/vsstl/confessions_of_a_php_addict/c57efs1?context=2
20:36:49 <kmc> remember, the RISC philosophy is to push weirdness into the ISA, with the goal of making the implementation simpler
20:37:26 <Vorpal> kmc, well, but any amusing examples?
20:37:35 <kmc> ARM is sort of a "second generation RISC" in that the designers thought very carefully about the traditional drawbacks of RISC and tried to counteract them
20:37:47 <fizzie> olsner: I remember reading a sentence that sounded like that somewhat recently, too.
20:37:49 <kmc> Vorpal: well, for one, most ARM chips support two different ISAs
20:37:53 <kmc> ARM and Thumb
20:37:58 <kmc> and Thumb comes in two major versions too
20:38:03 <Vorpal> kmc, also a 64-bit ARM is in the works
20:38:07 <olsner> in any case, a reasonable fallback implementation is to just mask off the ASID part of cr3 and flush the TLB every time
20:38:11 <Vorpal> no product yet announced
20:38:17 <Vorpal> so that will add a third ISA
20:38:18 <kmc> ARM, Thumb, and Thumb-2 all have completely different ways of handling conditionals
20:38:39 <Vorpal> okay so it will add a fourth ISA then
20:38:45 <kmc> and you can call between ARM and Thumb{,-2} code
20:39:01 <kmc> the "am I in Thumb" bit is stored in the (ignored) LSB of the instruction pointer
20:39:04 <Vorpal> kmc, how do they handle conditionals? Isn't it just a case of checking a flag register and jumping based on that?
20:39:17 <kmc> which is nice, because it's saved and restored with calls
20:39:20 <kmc> but also a little wacky
20:39:27 <kmc> Vorpal: on ARM, *any* instruction can be made conditional
20:39:33 <kmc> this cuts down on the number of branches, hence pipeline stalls
20:39:41 <kmc> but any instruction :)
20:39:51 <kmc> in Thumb-1 you have conditional branches only
20:39:53 <Vorpal> kmc, fairly limited possible conditions though I guess?
20:39:58 <kmc> in Thumb-2 you have this even wackier thing
20:40:26 <kmc> you do your test or whatever, and then you issue a pseudoinstruction like IF or ITTF
20:40:32 <kmc> IF means "do the next instruction only if false"
20:40:40 <kmc> ITTF means "do the next 2 instructions if true, and the one after that if false"
20:40:46 <kmc> you can conditionalize 4 instructions this wya
20:40:49 <Vorpal> isn't that the same as variable length instructions
20:40:50 <olsner> x86 could've replaced its conditional jumps with conditional-execution prefixes
20:40:55 <kmc> Vorpal: sort of
20:41:04 <Vorpal> except the two instruction thingy...
20:41:06 <Vorpal> kmc, You said it stored if it was Thumb in the LSB, what about Thumb-1/Thumb-2? Or doesn't a CPU support both at the same time?
20:41:17 <kmc> Thumb-2 is a superset of Thumb-1, iirc
20:41:26 <Vorpal> also is there any overhead from the switching?
20:41:45 <kmc> Thumb-2 is supposed to be mostly a replacement for the original ARM ISA
20:41:57 <Vorpal> kmc, so you don't ever leave Thumb?
20:41:58 <kmc> whereas Thumb-1 is limited and it's expected that you call back into ARM routines for some things
20:42:06 <kmc> maybe a bit, for OS stuff. i don't know really
20:42:16 <Vorpal> kmc, what about the ARM64 stuff then?
20:42:17 <kmc> regarding "fairly limited possible conditions", i think it has the usual ones
20:42:18 <olsner> based on how common the ARM/Thumb cross-jumps are, I think they're supposedly mostly overhead free
20:42:20 <Vorpal> not released yet, but in the works
20:42:24 <kmc> no idea about ARM64
20:42:31 <Vorpal> kmc, iirc there wouldn't be a new Thumb variant for it
20:42:44 <kmc> no, they will probably try to design a single variable length encoding like Thumb-2 and stick to it
20:42:49 <Vorpal> maybe they just decided to go with a Thumb like 64-bit thingy
20:42:56 <olsner> they should call it Leg and use 64-bit long instructions
20:42:56 <kmc> and you don't need to support fast 64-to-32 calls the way you need to support Thumb-1 to ARM calls
20:43:06 <kmc> so it can be in a privileged flag bit
20:43:07 <kmc> olsner: hahaha
20:43:21 <Vorpal> kmc, Thumb-2 is variable length? What about Thumb-1 and ARM?
20:43:23 <kmc> Vorpal: another wacky thing about ARM is that there are multiple incompatible FPUs used with it
20:43:32 <kmc> ARM has 32-bit instructions
20:43:42 <kmc> both Thumb ISAs have some 16- and some 32-bit instructions
20:43:56 <kmc> one advantage of Thumb is, it executes much faster on embedded processors with only 16-bit data bus
20:44:13 <kmc> ARM isn't only for shiny smartphones, the cheapest ARM chips cost like $3
20:44:30 <kmc> there are many variants of ARM owing to its licensed nature
20:44:32 <Vorpal> that is in bulk though
20:44:46 <olsner> Vorpal: it's pretty nice that the instructions have all that space though, everything has a condition, and most instructions have three operands plus one operand register can have a shift offset for free
20:44:48 <Vorpal> anyway why the incompatible FPUs
20:45:04 <kmc> Vorpal: because they didn't specifiy one initially, and then different licensees integrated differet ones?
20:45:07 <kmc> i don't know really
20:45:08 <Vorpal> olsner, what about long jumps though?
20:45:12 <kmc> like 3DNow / MMX, but worse
20:45:21 <kmc> ARM does have a uniform way to talk to coprocessors, though
20:45:26 <kmc> there is a set of instructions reserved for that
20:45:31 <kmc> that's how you talk to the MMU too, iirc
20:45:32 <Vorpal> kmc, I hope the high end ARM does have a unified FPU?
20:45:33 <kmc> if you have one
20:45:33 <olsner> Vorpal: for jumping far, Leg is recommended instead of ARM
20:45:49 <kmc> Vorpal: yeah, there is now a standard SIMD instruction set too
20:46:13 <Vorpal> olsner, I meant when your jump target needs a 32-bit address, rather than something you can embed in a 32-bit address
20:46:18 <Vorpal> err 32-bit instruction*
20:46:34 <kmc> Vorpal: also, in addition to ARM and Thumb, there is another mode for hardware-assisted JVM
20:46:38 <kmc> though it is vestigial in recent chips
20:46:45 <Vorpal> kmc, riight? What mode is that
20:47:01 <Vorpal> what did it provide for JVM support then?
20:47:07 <kmc> and there's *another* mode called ThumbEE (Thumb Execution Environment)
20:47:21 <kmc> which is a variant of Thumb used for running managed code more efficiently
20:47:33 <olsner> Vorpal: load the address, then jump to it ... the usual thing with RISC and large immediate values, I guess
20:47:43 <kmc> "New features provided by ThumbEE include automatic null pointer checks on every load and store instruction, an instruction to perform an array bounds check, ..."
20:48:13 <kmc> Vorpal: they never published the specs you would need to make a JVM that takes advantage of Jazelle
20:48:15 <Vorpal> olsner, ah okay. I seem to remember AVR did have a long jump though, even though otherwise it was mostly RISC
20:48:33 <Vorpal> kmc, that sounds stupid
20:48:51 <kmc> "For the avoidance of doubt, distribution of products containing software code to exercise the BXJ instruction and enable the use of the ARM Jazelle architecture extension without [..] agreement from ARM is expressly forbidden"
20:48:58 <kmc> pretty shitty
20:49:03 <kmc> and it never really caught on, iirc
20:49:09 <kmc> ThumbEE is the less shitty replacement
20:49:09 <olsner> Vorpal: it implemented some java bytecodes directly in hardware, supposedly has something for array bounds checks and a way to describe some parts of how your heap looks so that the Jazelle thing can do it for you
20:49:41 <fizzie> Someone compiled Qt on N900 with -mfp=neon and had that Stellarium night-sky-browser app go from 10 fps to 60 fps.
20:49:53 <olsner> but I think for any recent implementation of the thing, all it does is read a byte and jump to the registered "unhandled instruction" handler
20:50:02 <Vorpal> fizzie, so why wasn't Qt compiled like that by default?
20:50:23 <fizzie> Or is that -mfpu=neon. Anyway, the one that makes it do autovectorization.
20:50:40 -!- azaq23 has joined.
20:50:41 <fizzie> Some option that contained the substring "neon" anyway.
20:50:49 -!- azaq23 has quit (Max SendQ exceeded).
20:50:57 <Vorpal> fizzie, so why wasn't it done like that by default
20:51:13 <Vorpal> fizzie, anyway Stellarium uses opengl right? So why not just use the GPU of the device
20:51:13 <fizzie> Might not have been so well-supported by GCC when it was originally compiled, or something.
20:51:27 <fizzie> It does use EGL, I believe, yes.
20:51:46 <Vorpal> please tell me there is a hardware GPU on that phone?
20:52:01 <fizzie> But that kind of depends on the software author offloading enough work there.
20:52:26 <olsner> and that you can do efficient communication between CPU and GPU to get useful work done
20:52:49 <Vorpal> olsner, well stellarium just need to provider a couple of shaders and a sky texture
20:53:03 <Vorpal> oh and update some coordinates for where the user is looking
20:53:08 <olsner> hmm, so what's Qt doing in there?
20:53:30 <fizzie> It does have a Qt UI. Anyway, I don't know the details; just saw the reported results.
20:53:49 <fizzie> Also I don't know how good the GPU is. It's the same OMAP 3430 SoC / PowerVR SGX 530 GPU / TMS320C64x DSP combo that was in many phones at that time.
20:53:52 <Vorpal> fizzie, have you recompiled it like that?
20:54:21 <fizzie> And no. I mean, I don't have Stellarium installed either. :p
20:54:27 <fizzie> I don't think I have many Qt apps on it.
20:55:28 <fizzie> Anyway, I haven't bothered to mess with the software very much. Haven't even installed the CSSU, the community-supplied "System Software Update" that they made now that Nokia's no longer interested.
20:56:31 <olsner> yay for abandoned platforms
20:56:35 <fizzie> The DSP is real fancy, though; I did get some TI docs and tools to maybe write some code for it, just haven't managed to actually.
20:56:47 <fizzie> It's a VLIWy thing, I've never really written code by hand for one.
20:56:56 <fizzie> Probably not a sensible thing to do either, but just for recreation.
20:57:05 <Vorpal> fizzie, what is it normally used for?
20:57:16 <fizzie> It does the usual, video/music decoding.
20:57:17 <Vorpal> and those are used for what? sound?
20:57:39 <fizzie> I think on later OMAP chips they've dropped the separate DSP core and just use the GPU. Possibly.
20:58:05 <fizzie> Oh, it does JPEG encoding for the camera app too.
20:58:10 <Vorpal> the arm echo system is confusing
20:58:18 <Vorpal> fizzie, ah you can get raw photos then? congrats
20:58:20 <fizzie> OMAP is TI's platform.
20:58:43 <fizzie> You can get raw images if you install the custom camera drivers, yes. The stock camera app doesn't do it.
20:58:43 <olsner> when used for music, the GPU could be called a Groove Processing Unit
20:59:02 <Vorpal> olsner, you are not oerjan
20:59:25 <fizzie> And the JPEG quality factor in the stock app is hardcoded for the DSP-driven encoder. If you want to change it, you have to also switch to a CPU encoder. So lazy.
20:59:29 <Vorpal> olsner, the terrible puns
21:00:27 <zzo38> How does the rules for ARM Jazelle to use BXJ work like that? Why is permission required?
21:00:44 <Vorpal> zzo38, looks like an NDA?
21:00:50 <olsner> I think it's because they want money for it
21:01:23 <olsner> or possibly they have licensed the java stuff from somewhere that requires licenses
21:01:33 <zzo38> Is there a version of ARM that does not have those instructions?
21:01:55 <Vorpal> kmc, looks from the wikipedia summary like ARM64 will be similar to ARM32. Which doesn't seem sensible to me
21:01:58 <olsner> yes, I think most versions don't support the extension at all
21:02:46 <fizzie> Vorpal: Correction: seems that even the latest OMAP generation (OMAP 5, not even out yet) has a discrete DSP. Well, they're Texas Instruments, I guess they felt like they had to. But they've certainly complicated the thing in other ways: "OMAP 5 SoC uses a dual-core ARM Cortex-A15 CPU with two additional Cortex-M4 cores to offload the A15s in less computionally intensive tasks to increase ...
21:02:52 <fizzie> ... power efficiency, two PowerVR SGX544MP graphics cores and a dedicated TI 2D BitBlt graphics accelerator, a multi-pipe display sub-system and a signal processor."
21:03:00 <kmc> anyway i do like the core ARM architecture
21:03:03 <kmc> conditional instructions are cool
21:03:16 <kmc> the instruction pointer is a general purpose register
21:03:21 <Vorpal> fizzie, nice. Is that as many cores as the PS2 yet?
21:03:49 <kmc> in addition to deciding which instructions are conditional
21:03:49 <olsner> hmm, so that's like 9 different cpu-like things in one SoC
21:03:57 <kmc> you can also decide which arithmetic instructions update the condition flags
21:04:10 <kmc> that's kind of necessary for it to work well
21:04:16 <olsner> or 6 different ones, plus three that are similar to three of those 6
21:04:17 <Vorpal> hm my phone has a Exynos 4212 Quad
21:04:21 <Vorpal> I should check the specs on that
21:04:45 <kmc> also there's a cool instruction which transfers any subset of the registers to or from memory
21:05:02 <kmc> which can be use for pushing/popping blocks of registers across a function call
21:05:05 <kmc> or just for bulk data transfers
21:05:44 <olsner> to make it better, those are the push and pop instructions, and can also be used to return from a function by pushing the link register and popping the program counter
21:06:14 <fizzie> kmc: If you like that, how about that FirePath? It's got conditional SIMD stuff, you can do "cmphib p0, r1, r2" to individually compare all bytes of r1/r2, store the results in predicate register p0, and then do a predicated "p0.movb r2, r1" to move only the ones for which the comparisons were true?
21:06:22 <fizzie> Also, it's designed by Sophie Wilson too.
21:06:24 <kmc> that's neat
21:06:48 <Vorpal> <kmc> also there's a cool instruction which transfers any subset of the registers to or from memory <-- how can you define any subset? A bitmask?
21:06:58 <fizzie> Sadly, there's very little material about it anywhere, Broadcom uses it in their DSLAMs and such but that's about it.
21:07:22 <Vorpal> kmc, that limits the number of registers you can have. ARM64 is going to have 32-bit instruction and 31 general purpose 64-bit registers
21:07:32 <Vorpal> don't think that is going to work if the bitmask is immediate
21:07:53 <Vorpal> and if it isn't the function to save registers seems kind of useless
21:07:54 <fizzie> (After buying Element 14, the folks that split out of Acorn.)
21:08:06 <kmc> another bit of ARM trivia: in the standard ABI, there's a register reserved for use by the *linker*
21:08:17 <olsner> Vorpal: it is possible that they will change one or two things in ARM64
21:08:23 <kmc> linking two functions might require the linker to emit some code, if the functions are sufficiently far apart
21:08:36 <Vorpal> olsner, yes they likely will
21:08:47 <fizzie> Well, MIPS has one register reserved for the assembler. It's just fair. :p
21:08:53 <Vorpal> olsner, it is going to be "mostly the same" as the 32-bit ARM ISA though it says
21:08:54 <fizzie> (Temporary in pseudo-ops.)
21:09:35 <fizzie> And two for the kernel. I wonder if/how Linux-on-MIPS uses those.
21:09:47 <kmc> program counter as a GPR also means you get PC-relative addressing in a uniform way for free
21:11:20 <Vorpal> btw, is it usual for the compasses in smartphones to be good? In the smartphones I used previously they were mostly crap. In my new phone it seems deadly accurate though...
21:16:57 <fizzie> No compass at all, so can't really comment first-hand.
21:17:33 <fizzie> Irrelated; the C54x DSP, which was the one of the platforms on the "DSP and audio processing" course, is not VLIW, but it has a couple of specific "do these two things in parallel" instructions. The syntax, though... I mean, here's a comb filter: http://sprunge.us/HZie -- the parallel syntax is that || thing, and the two lines are actually a single instruction.
21:19:07 <fizzie> It's very restricted which two instructions you can ||, I think there weren't more than three or four specific combinations.
21:19:52 <fizzie> And I think with additional restrictions on the available registers/addressing modes because they were running out of bits.
21:21:39 <fizzie> Also funny: http://sprunge.us/bGgA
21:21:54 <fizzie> The "useful.txt" lists which files are worth looking at. There were seven.
21:22:20 <fizzie> (It was a giant zip of documentation they gave us.)
21:23:08 <fizzie> And of course the documentation numbers don't have any sort of logic. Though I'm sure there's a list somewhere.
21:23:36 <fizzie> But e.g. spru131g.pdf, spru172c.pdf and spru302.pdf are volumes 1, 2 and 5 (the useful ones) of the C54x DSP Reference Manual.
21:24:38 <fizzie> I liked that course a whole lot, incidentally.
21:25:26 <fizzie> I mean, you got to write some assembly, that's always good fun. I think there were a total of two courses like that, including this one.
21:26:05 <fizzie> And also to play with unusual (from my viewpoint, anyway) hardware.
21:26:56 <fizzie> Though we did waste like three days wondering what was wrong in our serial communication thing before finding out the speaker cable I had "borrowed" for the purpose was actually broken, and worked/not-worked vaguely depending on the angle it was in.
21:27:09 <olsner> I'd like to write me some "GPU assembly" at some point
21:27:20 <Vorpal> fizzie, what about VHDL or Verilog?
21:27:47 <Vorpal> olsner, you can't really, the required information isn't really public
21:27:50 <fizzie> There's a bit of that available, but I didn't end up taking those courses. Probably would've been fun, but you can't do all.
21:28:32 <olsner> intel supposedly released complete documentation on their ivy bridge GPU, but probably none of that is applicable for other vendors
21:29:00 <fizzie> The DSP course was, incidentally, the one where we had that TI-86 driven control device I'm sure I've mentioned before.
21:29:03 <olsner> in the worst case it's just more x86 cpus
21:29:10 <kmc> fizzie: i don't think i heard about it
21:31:47 <fizzie> kmc: See, the task (for us) was to do some sort of an echo effect on the DSP, but the devel board only has like four buttons and four leds, so it doesn't do much IO. So we (well, one in our three-person group) wrote a TI-86 proggie to graphically show four slider controls that controlled the effect, and then communicated changes in those from the TI-86 link port to the board's serial port. (We ...
21:31:50 <Vorpal> olsner, that is intel GPU, not very useful :P
21:31:53 <fizzie> ... spent quite long trying to make the very programmable serial port hardware help us collect the bits, but didn't quite manage that; ended up with a software polling solution instead.)
21:32:54 <Vorpal> fizzie, you must have spent ages on that project
21:33:07 <fizzie> Vorpal: Probably a bit more than we should've. :p
21:33:33 <Vorpal> fizzie, best in class though?
21:33:34 <zzo38> What DSP can we use for audio and video which GNU C compiler or LLVM can compile into and which has free assemblers and emulators and is not too expensive?
21:33:59 <Vorpal> fizzie, was that the graph calc interface that looked weird?
21:34:04 <Vorpal> I remember you mentioning something like that
21:34:28 <fizzie> Vorpal: Well, the effect itself wasn't all that impressive, and I don't think everyone else in the class really appreciated the TI-86 control enough. But we had unarguably the best TI-86 control interface in class, at least.
21:34:47 <Vorpal> fizzie, I don't remember how it was weird though
21:35:24 <fizzie> Here's a collection of photos from our slides: http://users.ics.aalto.fi/htkallas/dsp-collage.png
21:35:27 <kmc> fizzie: cool
21:35:34 <fizzie> It had that whip image, at least.
21:35:44 <fizzie> And another whip-themed thing for when you pressed "send" on the calc.
21:36:14 <fizzie> (Due to the name of the course, "SPÄNK", "signaaliprosessorit ja äänenkäsittely", "DSPs and sound processing".)
21:36:40 <fizzie> Also I think the lecturer had some number of spanking-related puns.
21:39:57 <fizzie> (Clockwise from top-left: there's the Perl prototype for the actual effect; oscilloscope from some "broken wire" debugging sessions; TI's Code Composer Studio which must've crashed at least three dozen times, especially often when debugging on the live device; Audacity showing some simulated output; and in the middle the development board itself.)
21:40:12 <fizzie> Oh, right: it didn't even have four buttons, it had four DIP switches.
21:41:04 <fizzie> One of the other platforms were some sort of musician-oriented device, so it had actual turnable knobs and anything.
21:44:35 <fizzie> http://www.chameleon.synth.net/english/index.shtml <- that thing.
21:44:51 <fizzie> At least there's a link from the old course page to there, so it must be somehow related.
21:45:02 <fizzie> And it does say "24bit programmable audio dsp engine", so I suppose it's programmable.
21:45:43 <fizzie> Nothing, now; it was just an old course.
21:46:10 <fizzie> Chameleon has a Motorola DSP56k in it.
21:47:04 <fizzie> 24-bit words, how fancy. (The C54x has 16-bit words.)
21:48:21 <fizzie> (And the third device was a 32-bit floating-point SHARC from Analog Devices; technically even fancier.)
21:50:22 <fizzie> If I recall correctly, the platform for each group was allocated randomly, to guarantee an even split. (Limited amount of devices to test on.)
21:56:00 <Vorpal> so not the same platform for everyone?
21:56:36 <fizzie> No, I think there were about a dozen groups on the course, so that'd make about four groups for each of the three systems.
21:58:53 <fizzie> I see the C54x had MIPS-like branch delay slots, it'd run two (or one with an immediate) instructions after each branch before actually branching.
21:59:22 -!- Taneb has quit (Quit: Leaving).
21:59:34 <fizzie> (Got sidetracked reading our old code here.)
22:15:45 <Vorpal> fizzie, side tracked from what?
22:16:08 <Vorpal> fizzie, btw, an average day at work, what do you do apart from IRC? You seem to be available like 90% of the time
22:22:07 <Vorpal> I think he may be sleeping
22:22:40 <oerjan> ircing and sleeping, all in a day's work
22:23:35 -!- DHeadshot has quit (Ping timeout: 246 seconds).
22:23:52 <fizzie> Not quite, just away. Anyway, I don't think I generally talk the *whole* day, I just have the IRC client left open on the same screen as email.
22:23:59 <itidus21> i do the math (no pun intended) and decide that by doing absolutely nothing i am probably contributing to society
22:24:25 <Vorpal> itidus21, you have really low self esteem
22:24:57 <itidus21> well if the bad guys are contributing -7 -5 -22 -3.. then 0 is a lot
22:25:13 -!- DHeadshot has joined.
22:25:30 -!- boily has quit (Quit: WeeChat 0.3.8).
22:25:48 <Vorpal> also that way to measure it seems rather unusual
22:25:52 <Vorpal> what do you mean by it
22:26:19 <itidus21> > ((-7) + (-5) + (-22) + (-3) + 0 ) / 5
22:26:32 <itidus21> > ((-7) + (-5) + (-22) + (-3) ) / 4
22:26:38 <Vorpal> that seems pretty pessimistic
22:26:48 <Vorpal> such an outlook on your own contribution
22:27:48 <Vorpal> I'm pretty sure that is not a good model for contributing to a channel
22:28:10 <itidus21> i didn't just mean the channel
22:28:49 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
22:29:24 <itidus21> > ((-7) + (-5) + (-22) + (-3) + 1.85 ) / 5
22:29:32 <Vorpal> itidus21, even more pessimistic
22:29:37 <itidus21> things are getting better already
22:31:33 <Vorpal> itidus21, what if you actually make a positive contribution?
22:32:54 <itidus21> it is impossible by any means to avoid being in someone elses way some of the time
22:33:26 <itidus21> im kinda tired and sleepy, but i plan to visit the chemist
22:34:03 <lambdabot> Local time for itidus21 is Sat Jun 30 08:32:23
22:34:11 <quintopia> !bfjoust simple [>[(+)*10[-]](+)*15>[(+)*10[-]](-)*15]
22:34:14 <EgoBot> Score for quintopia_simple: 16.9
22:34:41 <itidus21> > ((-7) + (-5) + (-22) + (-3) + (1.85+5) + 16.9) / 6
22:36:53 <itidus21> Option 2, Depart Sat, 9:12 am, Arrive
22:40:32 <itidus21> i'll be happier when this trip is over
22:42:48 <quintopia> !bfjoust simple (>[>>(>(+)*20[-]++)*20](+)*15>[>>(>(+)*20[-]++)*20](-)*15)*15
22:42:50 <EgoBot> Score for quintopia_simple: 24.9
22:47:28 <quintopia> !bfjoust simple (>[>>(>(+)*35[-]++)*20](+)*15>[>>(>(+)*35[-]++)*20](-)*15)*15
22:47:31 <EgoBot> Score for quintopia_simple: 22.1
22:47:35 <quintopia> !bfjoust simple (>[>>(>(+)*20[-]++)*20](+)*15>[>>(>(+)*20[-]++)*20](-)*15)*15
22:47:38 <EgoBot> Score for quintopia_simple: 25.0
22:47:46 -!- MDude has quit (Ping timeout: 276 seconds).
22:52:31 <quintopia> !bfjoust simple (+)*10(>[>>(>(+)*20[-]++)*20](+)*15>[>>(>(+)*20[-]++)*20](-)*15)*15
22:52:33 <EgoBot> Score for quintopia_simple: 29.2
23:06:19 <zzo38> LLVM does now have !range which can specify range of values, somewhat like Pascal types can indicate ranges, although in this case it is done by values instead.
23:14:51 <EgoBot> Score for quintopia_a: 55.6
23:15:45 <EgoBot> Score for quintopia_a: 55.3
23:16:14 <EgoBot> Score for quintopia_a: 57.0
23:18:29 -!- MDoze has joined.
23:21:11 -!- edwardk has quit (Quit: Computer has gone to sleep.).
23:23:05 -!- MDude has joined.
23:26:07 -!- Vorpal has quit (Ping timeout: 276 seconds).
23:27:25 -!- MDoze has quit (Ping timeout: 276 seconds).
23:30:06 -!- oerjan has quit (Quit: Good night).