00:00:31 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:00:41 heh 00:02:17 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 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 why don't they make glasses with oleophobic coatings? 00:07:52 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 and speaking of that, why don't they make glasses out of Gorilla glass? 00:09:02 fizzie, right, that seems reasonable 00:11:05 I suppose their lens-making tools might not work on that? I don't really know how Gorilla glass works. 00:11:20 hm okay 00:11:29 the oleophobic coating should though 00:11:41 Or maybe they just assume people with glasses don't get hit so often. 00:12:02 :P 00:12:05 scratches though 00:12:08 that is the real issue 00:13:50 Apparently some folks at "Zenni Optical" do oleophobic coating on eyeglasses. (Didn't see any actual reviews on whether it works.) 00:14:02 heh 00:15:13 -!- VorpalPhone has joined. 00:16:18 fizzie: glasses with that would be amazing though 00:16:40 Do you have glasses 00:17:27 Yes. 00:18:01 I never seen any photos of you 00:18:53 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 All others are somewhat old. 00:19:32 -!- Vorpal has quit (Ping timeout: 246 seconds). 00:19:48 Anything goes 00:20:02 There's a dithered black-and-white one at http://zem.fi/img/namecard.png -- that's from 2004. 00:20:28 The hair... 00:20:38 Not what I imagined 00:20:46 I don't normally have the hair quite like that. 00:21:06 I was visiting a friend, whose girlfriend did that, if I recall correctly. 00:21:16 Long hair still? 00:22:01 Yes, but not braided like that, nor with a bowtie-like thing. 00:22:24 Couldn't tell it was braided 00:22:59 Why dithered black & white 00:24:11 I used it in a black-and-white-printed piece of paper at my (shared-)office door originally. 00:24:21 Ah 00:24:28 Also it's not quite as clear as the original, which is just a benefit. 00:25:14 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 Again someone else's fault. 00:25:47 Link! 00:25:57 I'm not sure I should. 00:26:39 Why not 00:27:31 I look silly in it. 00:27:50 Well, it's over a decade old, maybe I'm detached enough from it. 00:27:56 Also why does swype think "why" is eddy or edgy most puff the time 00:28:15 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:39 Amazing 00:28:40 -!- edwardk has joined. 00:28:57 Maybe they'll get that group photo up soon, then I can refer to it. (Except if it turns out horrible.) 00:28:58 Truly amazing 00:29:28 Especially if it is terrible 00:29:31 -!- edwardk has quit (Client Quit). 00:30:06 Anyway which research group was that 00:31:37 Speech group of the Information and Computer Science department of the School of Science of Aalto University. 00:31:55 And they do what? 00:32:09 Kind of long to spell out like that in an affiliation field. 00:32:23 Hah 00:32:24 Speech recognition and synthesis, for the most part. 00:32:38 Ah both of those 00:33:26 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:32 fizzie: what is your opinion on siri 00:33:34 I guess it goes a bit sideways. 00:34:03 Haven't talked to, can't really have an opinion. 00:34:09 Ah 00:35:05 Oh, it was "Centre of Excellence in Computational Inference Research". 00:35:16 Samsung's s voice is annoying. That is their siri clone 00:35:17 It's just called COIN most of the time. 00:35:43 (The Centre of Excellence thing is some sort of a funding-related nation-wide thing.) 00:36:00 (There's probably a dozen or two of them.) 00:36:22 Also that name is pretty pretentious 00:36:40 Excellence eh? 00:37:06 Well, the previous Centre of Excellence used to be AIRC, and then NN-something before that. 00:37:18 It's a fixed-term (five years?) thing. 00:37:43 Sure you live up to that, but everyone else? 00:38:05 Huh 00:38:24 I'm not even sure who of the department are "in" COIN. I *think* our group as a whole is. 00:38:45 It's not like it actually affected something that'd be visible on my level. 00:38:46 You mean the title is on a rotating schedule? 00:39:01 They nominate new ones as old ones end. 00:39:08 I see 00:39:14 (It's not an exclusive title.) 00:39:24 Hmm 00:39:34 And normally it has a bit different focus than the previous one. 00:39:57 I think this current one is in fact shared with University of Helsinki. 00:40:01 Oh what was the previous one? 00:40:10 Adative Informatics Research Centre. 00:40:16 Adaptive. 00:40:32 And the one before had Neural Networks in the name. 00:40:35 Ah that is what that stood for 00:42:05 "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 ... 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 ... 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 Someone good at writing funding applications has been doing their blurbs. 00:42:37 Since it says "we will", chances are it's quoted directly from the application docs. 00:42:55 Anyway, fancy buzzwords and all that. 00:43:11 Heh 00:43:24 i love the part where the acronym isn't even close to the word it indicates 00:43:50 COmputational INference, COIN. 00:43:57 ohhh 00:44:09 What is data driven biology 00:44:12 Suppose they wanted it pronounceable and memorable. 00:44:39 well thats extremely arbitrary :D 00:44:45 i like it 00:44:55 I'm no biologist. But Bayesians doing biology. Gene expression datasets feature heavily, I think. 00:45:20 Sounds scary 00:45:46 Bayesians I mean 00:46:15 Protein-protein interaction networks, too. (All I know about this is the abstracts in email ads of arranged talks.) 00:46:44 its roughly like saying, The Esoteric Programming Languages Wiki(ESPR) 00:46:54 itidus21: not as random as xml... should be eml 01:05:30 VorpalPhone, um... 01:05:52 That's not random, ex- as X is pretty common. 01:06:13 -!- ais523 has quit (Quit: rebooting, brb). 01:06:18 Yes but it is stupid all the same 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 itidus21, that's contrived because it leaves out half the words, though. 01:07:20 Also input method is pretty cool. I I'm trying out SwiftKey atm 01:07:30 The Finnish Centre of Excellence in Computational Inference Research (COIN) 01:07:56 Swype is kind of nice too though 01:08:15 OK, that is an example of TCY. 01:08:28 Tcy 01:08:36 What is that 01:08:45 Wait, no, I'll call it TICADRO 01:08:59 Um 01:09:17 TICROME 01:09:28 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:38:04 Yeah SwiftKey is awesome 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:13 Well, there was that yes 01:46:35 -!- ion has joined. 01:51:08 -!- Phantom_Hoover has quit (Read error: Connection reset by peer). 01:51:15 Hah 01:53:44 Swype beta is pretty good as well. Both it and swiftkey have their own advantages... 02:01:37 Swype is still in beta? 02:07:51 There is a beta version, much improved to the default on this phone 02:09:14 Sgeo: the default is just Samsung keyboard with swiping. I proper swupe 3 beta is better 02:09:56 Using SwiftKey atm though, and much faster with the thumbs 02:11:06 Skype is better with one hand or with an index finger (and holding in the other hand) 02:11:42 Err swype not skype 02:13:11 -!- TeruFSX has joined. 02:18:59 Night 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 20:37 edwardk: Do you know what I was writing about above? Maybe you know, nobody else responded and neither did you 03:37:53 zzo38: What a charming phrasing. :-) 03:39:17 hah 03:39:32 Oh, edwardk is in here too these days. 03:40:15 how else can i stalk kmc? 03:40:31 i drove him off the other day with too much talk of locally nameless syntax 03:40:51 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 but if you get too aggressive he clams up and goes quiet, or runs away 03:49:46 Well, /r/nostalgia thinks I'm a spammer 03:49:54 Because I linked to a song on modarchive 03:50:02 Sgeo: Wow. Spammer. 03:50:13 Or, well, that the link I submitted was spam 03:50:31 Because apparently it "takes me to some website to download something" 03:50:33 forall a. id :: a -> a 03:50:51 http://modarchive.org/module.php?36405 the link in question 03:51:16 Sgeo: SPAMMER 03:54:40 edwardk: So I was at this one category-theory-related meeting where they were drawing a bunch of diagrams and things. 03:55:08 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). 03:59:27 no 03:59:31 its a god awful book 03:59:41 even pierce says so 03:59:42 =P 04:01:15 Oh. 04:03:13 What's a good book? 04:05:31 -!- function has changed nick to variable. 04:11:52 categories for the working mathematician 04:11:56 there is another? 04:11:57 =) 04:12:20 that said, awodey is good, and lawvere and schanuel will drill drill drill the basics until you know sections/retracts cold 04:12:34 i also really like of all things serge lang's algebra 04:12:51 because he goes out of his way to set up the category theory construct as he defines the algebraic ones 04:13:14 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 how is crunchfuck supposed to work? 06:42:46 cat ignore_list.txt | ./crunchfuck 'startProgram' howManyPrograms 06:43:06 It then brute forces the next howManyPrograms starting from 'startProgram'. 06:43:23 while ignoring results for numbers on the ignore_list 06:43:36 (which is a newline seperated list of numbers followed by the text 'end') 06:44:53 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 because it won't get any shorter. 06:50:01 You can bruteforce on an i3 approx 16 ULONG_MAX ranges a night :) 06:50:27 checking the output is more time consuming :) 06:50:31 if you don't automate it. 06:50:34 ulong tea 06:51:26 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 i am amused by http://www.electrical-contractor.net/PC/EuroBS1363adapter.jpg 07:59:15 apparently if you buy import electronics in the UK this is often what you get 08:00:22 heh 08:04:31 -!- Vorpal has joined. 08:06:03 kmc: You find that amusing? 08:06:05 That's weird. 08:22:02 "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:24:56 The bootleg bridge. 08:29:46 Cuz bootlegz're mainstreamz? 08:31:11 The bootleg bridge, replaced by the bootleg sport tunnel. 08:31:24 -!- jix has quit (Ping timeout: 272 seconds). 08:31:43 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 This spam reads like something some kid would threaten 10:39:10 It's supposedly a letter from the FBI 10:39:26 "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 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 until you have been jailed and all your properties will be confiscated by the fbi." 10:39:50 " We would also send a letter to the company/agency that you are working for so that 10:39:50 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:39:50 " 10:41:08 http://pastie.org/4170733 10:41:21 Ok, I hate pastie. 10:41:25 Next pastebin? 10:42:29 -!- neutrino2000 has quit (Ping timeout: 248 seconds). 10:42:29 I've sort of lazily defaulted to sprunge. 10:43:00 I've gotten that one too. 10:43:05 Or at least one very much like it. 10:43:16 http://pastebin.com/f7Bi93pT 10:43:34 -!- oerjan has joined. 10:43:39 pastebin.com sucks 10:43:43 sprunge is really nice though 10:43:46 full of ads 10:43:54 kmc, ads? 10:44:00 there are ads on the internet? 10:44:05 (yay for adblock!) 10:44:19 * kmc rolls eyes 10:44:23 kmc, at least it linewraps 10:44:26 Sgeo: http://p.zem.fi/ikvv 10:44:31 Sgeo, that isn't a good thing 10:44:42 Linewrapping is just a |fmt|sprunge in place of |sprunge. 10:44:42 fizzie, spam? 10:44:53 Vorpal: Spam for a spam, that's the rule. 10:44:54 -!- Gregor has joined. 10:44:54 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 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 Apparently, Vorpal has me on ignore 10:45:17 kmc, ... 10:45:23 Sgeo, no? 10:45:36 Sgeo, I just connected to my bouncer 10:45:44 Ah. Read scrollup then 10:45:49 and for some reason scrollback replay is broken... 10:45:51 Oh 10:45:54 Read logs then 10:45:56 I have to investigate that later 10:46:01 and read logs for now yeah 10:46:34 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 I read some spam every now and then. 10:47:09 fizzie, mine's better. They're also offering me money, apparently. 10:47:31 I'm under investigation and being offered compensatory money 10:47:33 I think 10:47:33 there's spam on the internet? lolololol, i use spamblock and I will tell everyone about it whenever spam is mentioned 10:47:54 did you know I don't use Windows either? 10:47:59 and i don't own a TV 10:48:05 Vorpal, it's good to check Spam folder occasionally (just in case), but some spam caught my eye 10:48:31 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 ... to your personality --" 10:48:43 Sgeo, eh, gmail is pretty good at spam filtering 10:48:55 fizzie, oh, oops 10:49:24 Though to be honest, it's not exactly an offer, more of an aside. 10:52:28 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 does anyone actually fall for spam? 10:53:40 I can't see how they can make money out of it 10:53:40 -!- AnotherTest has joined. 10:53:50 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 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 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 if #2, ask a moderator to fix it. 11:02:06 (i hear.) 11:02:26 oerjan, #1 11:02:58 ah 11:05:04 yeah some people called me a spammer for posting links to my own blog on reddit 11:05:15 even though i was posting original content and my blog has no ads 11:05:47 substantial content too, not the usual "17 weird old tricks to make you a Real Programmer" 11:06:01 which constitutes the majority of /r/programming 11:08:29 wow, Dwarf Fortress has a randomly generated subtitle too 11:08:42 in addition to "Slaves to Armok: God of Blood: Chapter II: Dwarf Fortress" 11:09:17 (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 Adblock Plus is a memory hog 11:11:31 -!- asiekierka has joined. 11:14:35 -!- neutrino2000 has joined. 11:14:37 kmc: hey, reddit _thanks_ me for not using adblock. too bad i never click them except by accident. 11:15:44 (most of my ad clicking happens when i try to get a particularly crowded page into focus) 11:46:17 o.O 11:47:01 On UniversityOfReddit, sending a message that contains the words manhoodacademy or manhood101 is an instaban 11:47:51 As is attempting to make a course with either of those in the description, but that's not as alarming 11:48:14 what 11:48:33 https://github.com/ureddit/ureddit/commit/3161d6f1e6a2660914f511b027f8a9c090469c76 11:50:52 Ok, so apparently manhoodacademy and manhood101 are actually existing mysogenistic things 11:51:26 But even mentioning the word in a private message equating to a ban seems extreme 11:51:59 oerjan: one webpage i wrote that kept getting hits was just a rant 11:52:38 but TBH i haven't had a web presence(tm) for 6 years or more 11:53:22 itidus21: wait, was that in response to something i said? 11:54:05 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:54:20 (over a period of time) 11:54:23 okay 11:55:26 oerjan: Potatoes. 11:59:13 -!- boily has joined. 11:59:14 fizzie: apples. 11:59:40 You can compare them. 11:59:56 yes. just don't mix in any oranges. 12:01:33 "Potatoes" 8 letters, vegetable, requires cooking, grows underground. "apples" 6 letters, fruit, directly edible, grows on trees. 12:03:14 sadly i defined fruits and vegetables instead of apples and potatoes i think 12:03:27 * oerjan has eaten a potato raw before 12:03:48 yipe 12:04:09 it tastes rather stronger than the boiled variety 12:04:37 oerjan: wasn't it a little bit too starchy? 12:04:42 oerjan: with skin? 12:04:48 without skin :P 12:05:04 thats pretty wild 12:05:23 just don't eat the green parts >_< 12:05:33 i can't even bear the taste of potato which is 70% cooked 12:05:49 i'm not sure what "starchy" means, i think it was about the same consistency as a raw carrot or rutabaga 12:06:18 it was pretty long ago, anyway 12:08:20 kmc: i've eaten _boiled_ potatoes with skin, mind you. 12:09:18 it's traditional not to peel them when they are very fresh 12:09:50 same here. when you have "patates nouvelles" (new harvest potatoes), you don't peel them. 12:10:14 "nypoteter" in norwegian 12:12:27 -!- augur has quit (Remote host closed the connection). 12:12:53 -!- augur has joined. 12:15:49 this thar browser needs a killing 12:15:51 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 (They printed my full-page-150dpi-raster-image Gimp-produced PDFs just fine.) 12:16:32 (And these have just text for the most part.) 12:17:08 -!- augur has quit (Ping timeout: 240 seconds). 12:17:09 I suppose I'll try to print out from Acrobat Reader, maybe it'll do a better PS conversion or something. 12:17:26 yeah, i agree that skin-on is the way for mashed, baked, or even french fried potatos 12:17:30 just makes the texture more interesting 12:18:20 maybe SNCB is using everyone's printers to do distributed computation 12:18:25 or is distributing printer malware 12:18:56 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 Though the files are just 30 kilobytes or so. 12:19:12 i don't remember if PDF is capable of arbitrary computation 12:19:25 (other than the embedded Javascript feature, which the printer probably does not support) 12:19:37 iirc, Postscript is? 12:19:40 my vague conception is that PDF is like "PostScript in normal form" 12:19:52 yeah, postscript is a fairly general stack-based programming language 12:19:56 writing postscript by hand can be fun 12:20:08 I have a vague feeling that they may have deliberately broken some of the general programming features. 12:20:22 But I'm certain I'm not certain. 12:20:31 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:20:54 Neat 12:21:10 I should try implementing GoL in something at some point 12:21:21 But I'm not good at visual stuff 12:21:32 you mean graphical output? 12:21:36 Yeah 12:21:38 you can just print to the terminal, or output a PPM file 12:21:39 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:47 ppm file? 12:21:58 And also, there needs to be some sort of UI, even if console based 12:22:08 PPM is a super simple image format 12:22:08 I want the user to be able to look around a randomly seeded infinite board 12:22:13 "[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 kmc: these "new potatoes" are skin-on boiled, though. 12:22:16 http://netpbm.sourceforge.net/doc/ppm.html 12:22:28 Sgeo: oh, well if you actually want a GUI that's harder (but not that hard) 12:22:42 you can probably find like 10 Game of Life examples for any GUI framework you like 12:23:11 I'm not sure how I'm going to make tradeoffs 12:23:35 i coded a game of life thing that runs on a 128 × 48 red LED display 12:23:40 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 i made a few unusual design choices 12:24:05 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 Going to need to make my own laziness, with forgetting 12:24:14 both edges of the grid wrap to the opposite edge, but with reflection, so it's a projective plane 12:24:23 (or almost, because i didn't really do anything sensible at the corners) 12:24:47 also the way it keeps the display interesting is that occasionally it will spawn a glider in a random position 12:25:03 Hmm, easy constraint: Under no circumstances should the user be able to cause an inconsistency 12:25:12 Saying "Out of memory" is preferable 12:25:20 * oerjan printed a mandelbrot set with postscript once 12:25:31 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 i think IFS fractals are very easy in postscript 12:25:44 took a long time. and wasn't very good being only black and white. 12:25:44 Except to make a real ugly mess if someone prints this thing with a black-and-white printer, I suppose. 12:26:11 i wrote a TI-83 BASIC program to render a mandelbrot set in 4-level greyscale 12:26:15 it took about an hour 12:26:42 Hey, I think I wrote one too except for TI-86 and black-and-white. 12:27:04 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 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:16 Ah. 12:27:19 (this was on the 83+, the 83 might be too slow) 12:27:36 I have a feeling 86 would be also too slow since the saved images actually copy the data. 12:27:48 Normally you'd just flip the starting address of the display buffer. 12:28:30 Sadly, I don't think it has a POKE. 12:28:54 (Or a translates-to-'out' either.) 12:28:58 hmm, I wonder what format the TI-83+ uses for fractional numbers 12:30:12 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 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:03 weird 12:34:35 And if I recall correctly, the UI will only ever show up to 12 digits of the mantissa. 12:35:57 I got into an argument about this on an "introduction to computer architecture" (or something) course. 12:36:46 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 A bit weird since even IEEE-754 defindes the decimal32, decimal64 and decimal128 formats. 12:38:17 (Those aren't BCD, though.) 12:40:08 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 that just sounds stupid 12:40:18 for a calculator I mean 12:40:33 The Z80 does not exactly have an FPU. And those cost big bucks. 12:40:41 It's not like the calculation speed was all *that* important. 12:40:51 wow, why do they use them for calculators... 12:40:57 I guess the battery life? 12:41:06 my TI-83+ has exceptional battery life after all 12:41:53 It doesn't have hardware integer multiplication or division either, for that matter. 12:42:10 kmc, iirc you can put asm into basic programs on the 83+ 12:42:19 don't remember the details though 12:43:12 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 Doesn't have any sort of "inline ASM" though. 12:43:33 Or an assembler that'd do mnemonics. 12:43:40 So you have to be kind of masochistic. 12:44:10 (Unless it's a very short program.) 12:44:26 I guess you could use that to make a "POKE" program you could call. 12:44:38 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 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 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 anyway I think it was the GPU fan 12:46:53 I managed to get it to repeat by doing the same thing again and I observed all the other fan values 12:46:57 and none of those changed 12:47:05 trying to remember how to get the GPU fan speed atm 12:47:20 oh wait, could be PSU I guess 12:47:25 Well, that's nice; now I printed one of the 11 tickets from acroread, and it no longer accepts mouse clicks. 12:47:27 can't observe that speed 12:47:52 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 yeah i did write some small machine language programs, assembled by hand 12:48:25 anyway with the 83+ you can transfer programs from a computer 12:48:42 all of the TI graphing calculators have that ability 12:48:48 kmc, not the 86 iirc? 12:48:52 really? 12:48:58 not 100% sure 12:49:05 but I thought it lacked the link port completely 12:49:11 nope 12:49:12 might have been some other model 12:49:16 What? No, it has one. 12:49:21 oh okay 12:49:51 All the TI-8x's I know of do. Though the 85 had some awkwardness when it came to asm programs. 12:50:01 hm 12:50:07 I think you needed to be running a shell, you couldn't just invoke them from the normal thing. 12:50:08 So why not just make a program that goes under the APPS button. IIRC they run directly from flash or something? 12:50:10 Or something like that. 12:50:19 Vorpal: you can do that too 12:50:43 the TI-86 doesn't have that though 12:51:07 nor does the 85 or the 83 (non-plus) 12:51:12 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 so uh, not sure why that makes the GPU rev up 12:51:34 normal 3D rendered Trine 2 gameplay doesn't as far as I can tell 12:51:44 kmc, ah 12:52:04 they didn't have flash, just ROM and a small amount of RAM 12:52:15 Small?! It's 128 KB in TI-86. 12:52:21 That's like double the processor address space. 12:52:33 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 or whether you could load unsigned apps 12:52:55 They've bruteforced the system keys so you can flash in a custom OS, though. 12:53:05 yeah 12:54:19 there is an xkcd strip mocking TI for not upgrading their hardware 12:54:22 but as usual xkcd misses the point 12:54:40 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 let's make fun of people for not jumping on shiny new tech, while ignoring the actual application requirements 12:55:03 fizzie: what do you mean? most models don't sell with a link cable 12:55:14 Okay. I thought they might've made it a standard thing. 12:55:17 http://www.reddit.com/r/atheism/comments/vs5hw/you_guys_are_fucking_champions/ 12:55:25 some of the newer ones have a USB link cable built in 12:55:28 "/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 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:36 Think you were browsing some other /r/atheism, mate. 12:55:39 other than that, I'm 100% complete 12:55:50 afaik you can use the standard black link cable or grey link cable with the TI-86 12:56:26 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 Well, officially; you can also use something that costs $5 (in parts) that you make. 12:57:12 Oh 12:57:13 dear 12:57:17 Vorpal: sure, the 83+ is the low end calculator anyway 12:57:20 I have found the worst reddit post 12:57:24 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 Phantom_Hoover: doubtful 12:57:30 Though some standard 2.5mm plugs don't quite fit the link port. 12:57:32 kmc, http://www.reddit.com/r/atheism/comments/vs5hw/you_guys_are_fucking_champions/c578bj2 12:58:34 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 kmc, the TI-83+ has awesome battery time though 12:59:06 fizzie, so no USB converter? 12:59:26 Vorpal: yeah 12:59:33 I have a feeling it might not be so friendly to USB serial ports, right. 12:59:36 Though YMMV. 12:59:36 fizzie: yeah, with the grey cable you could connect directly to a modem 13:00:30 i used a grey link cable and a big stack of adapters to connect to a Ricochet modem 13:00:37 so i could log into my Linux machine wirelessly from my TI-83+ 13:00:47 that was pretty entertaining 13:01:16 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 The TI link protocol is kind of funny, anyway; it doesn't really have a set clock speed. 13:01:22 weird way to do it IMO 13:01:39 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 Vorpal: that's pretty common 13:02:01 kmc, yeah but why 13:02:01 saves space on the motherboard backplane itself 13:02:20 it's something most people don't use anyway 13:02:22 kmc, there is space left over there (which is pretty amazing given how many ports this thing has) 13:02:28 and maybe you can charge extra for the port 13:02:37 well I guess there is that yeah 13:02:51 well it's not just a matter of physical space, you also need to route the electrical connections to it 13:02:52 You can charge extra for spares after people invariably lose the one that comes in the motherboard box. 13:03:06 fizzie, there isn't one in the box though= 13:03:10 s/=/?/ 13:03:12 motherboards seem to use standard connector blocks with, like, one parallel port above 3 audio ports, or something 13:03:14 Ah. Well, in that case, especially. 13:03:27 if the standard block you need containing a serial port isn't cheaply available, you use the extra slot solution instead 13:03:31 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:42 why 13:03:51 i have a CNC laser cutter which is controlled via parallel port 13:03:58 heh 13:04:02 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 it's controlled via parallel port because it's the cheapest crappiest CNC laser cutter you can buy 13:04:04 are there USB converters for such? 13:04:14 and so they just have stepper motors wired up to a parallel port 13:04:22 oh 13:04:28 so not proper parallel protocol? 13:04:33 no definitely not 13:04:34 Parallel ports are probably the easiest to directly wire things to. 13:04:44 what about the voltages? 13:04:49 One of the DIY link cables does that. (The other model goes to serial port.) 13:04:49 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 I know serial has some crazy high voltages 13:05:02 Vorpal: what about them 13:05:18 kmc, does parallel ports have like 12 V or so too for the signal? 13:05:24 iirc that is what standard serial port has 13:05:37 either that or 5V 13:05:38 I think you get +5V out of the data lines, actually. 13:05:39 i remember reading a proposal that Beowulf clusters should connect the machines together with parallel port, in addition to gigabit ethernet 13:05:41 But I might misremember. 13:05:46 fizzie, pretty crazy high still 13:05:51 using the parallel port for extremely low latency communication 13:05:52 In the parallel port, that is.) 13:06:24 Vorpal: 5V is the standard TTL logic level 13:06:34 -!- augur has quit (Read error: Connection reset by peer). 13:06:36 right 13:06:45 * kmc prepares to stab someone who complains about "redundant" acronyms 13:06:48 what are the data line voltages in things like USB? 13:06:53 -!- augur has joined. 13:06:58 USB uses differential signaling 13:07:13 ah, right 13:07:17 RS-232 seems to require anything from 3 to 15 volts. (And -3V to -15V for the other bit.) 13:07:19 so extremely low then 13:07:32 not that low 13:07:36 oh? 13:07:55 thought you could get like less than 1 V with differential? 13:08:28 "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:40 that much, heh 13:08:42 Vorpal: just because you can doesn't mean they do it that way 13:08:47 i don't know what the other design considerations are 13:09:12 kmc, full speed? Is that USB 2.0 or USB 1.1? 13:09:16 I can't remember 13:09:30 low is USB 1.0, full USB 1.1 right? 13:09:36 yeah 13:09:42 and what is USB 2 then? fuller? 13:09:44 high speed 13:09:48 right 13:09:54 forgot what they called USB 3 as well 13:10:04 i mean USB 2.0 is a version of the spec, that supports all three speeds 13:10:08 afaik 13:10:12 well yes 13:10:15 what about USB 3 then? 13:10:17 but the fastest speed available in USB 2.0 is called "high speed" 13:10:18 dunno man 13:10:19 look it up 13:10:39 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 you can definitely get hard drive enclosures which support it 13:11:02 right, and that is about it I guess 13:11:18 kind of surprises me that my new fancy phone didn't do USB 3 13:11:27 maybe external monitors/video cards 13:11:29 I mean, it is Samsung's flagship model after all 13:11:36 or maybe manufacturers are skipping USB 3.0 for Thunderbolt 13:11:50 eh, has anyone except apple adopted that? 13:12:00 dude the entire PC industry is based on copying whatever Apple does 13:12:11 and they have a huge market share by themselves 13:12:19 well yes, but I thought they had some exclusive deal on thunderbolt? 13:12:23 they were the first to take the plunge with USB 13:12:34 the success of USB today is largely due to the iMac 13:12:39 I know 13:12:44 I had a first generation ibook 13:12:53 I still think I have that USB floppy drive somewhere XD 13:12:56 cause Apple had the guts and the customer loyalty to say "suck it, this is how shit connects now" 13:13:04 (because then you actually needed floppies still, and apple had dropped it) 13:13:08 yep 13:13:58 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 i have used this for both legitimate and prank purposes 13:15:16 kmc, USB ones? 13:15:23 no, network printers 13:16:03 ah 13:16:48 i was printer czar for the house where i lived in college 13:16:56 hm? 13:17:05 what do you mean with that? 13:17:15 meaning i was in charge of buying printer supplies, and yelling at people for printing too much 13:17:39 Vorpal: It's "SuperSpeed" for USB 3. (Really.) 13:17:43 heh 13:17:52 I don't know what they're going to go with USB 4. HyperSpeed? 13:17:53 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 in hopes that people would see it as they pick up their job and would feel guilty 13:18:13 which probably never happened 13:18:18 Anyway, I think low-speed and full-speed are both part of USB 1.0 already. 13:18:31 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 i think he eventually got banned from 8 different computer labs 13:19:34 I just printed 30 sheets, most of them in color. Now I feel guilty. 13:20:20 fizzie, at work or at home? 13:20:34 At work, since there's only a black-and-white laser at home. 13:20:39 ah 13:21:23 MIT has a new system, where you print to a single campus-wide virtual printer 13:21:29 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 and then you walk to a printer, scan your ID, and it prints the job there 13:22:16 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:23:37 we did that at my school 13:24:07 -!- oerjan has quit (Quit: leaving). 13:24:08 it's pretty convenient 13:24:35 it was somewhat controversial at MIT 13:24:40 oh yeah? 13:24:46 someone even vandalized a few of the stations 13:24:51 wow 13:24:58 i guess people don't want to wait around at the printer 13:25:10 I did reverse the protocol and find the password was symmetrically encrypted, and we had open wifi 13:25:33 the problem it solves is people who print big jobs (intentionally or by accident) and then don't pick them up 13:25:36 copumpkin: heh 13:25:38 yeah 13:26:04 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 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 this is why profs should accept assignments by emailed pdf :) 13:26:28 many did 13:26:37 but there are always the old-school profs :) 13:26:39 yeah 13:26:59 we would often pick one person who would print out and hand in everyone's assignments 13:27:10 so that everyone else could sleep through class after an all-nighter 13:27:13 not really healthy behavior... 13:28:09 lol 13:28:19 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 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 Don't you mean "add to the Visual SourceSafe library"? 13:38:39 -!- augur has joined. 13:39:22 isn't VSS a joke 13:39:26 i mean microsoft doesn't use it 13:40:14 That's just because they generously want to save all its powers to their customers. 13:40:52 Also I think it got discontinued and replaced by Team Foundation Something Or Other. 13:41:13 but does it have sharepoint integration =D 13:48:13 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 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 well at my school skipping classes was extremely common 13:50:19 huh 13:50:40 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 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 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 Anyway, people in general do skip lectures here, too. Not all, of course. 13:51:29 in many cases the lectures were pretty useless for getting the projects done 13:51:58 that said i and my friends skipped more classes than was probably advisable 13:52:28 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:33 bbl 13:52:44 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 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 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 s/parallel computation/distributed systems/, sorry. 13:55:14 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 fizzie, if the prof can't motivate himself to read the book, then why should the students? 13:55:50 Well, it was rumoured to be a good book. 13:56:00 then why wasn't he motivated 13:56:04 I feel the logic is flawed 13:56:15 Too busy, I'd say, based on who he was. 13:56:22 fair enough 13:56:40 He used to reply to student question emails at 03am during the Saturday/Sunday night. 13:56:49 riiight 13:57:05 A kind of a personality. :p 13:57:22 I guess you could say that 13:57:26 From the viewpoint of the students, I guess course credits are a powerful motivator too. 13:58:10 A hypercube is a nice shape. You can (obviously) reach everyone in at most log_2(N) hops. 13:58:25 fizzie, did he get burned out btw from working like that? 13:58:28 wouldn't surprise me 13:58:32 -!- Tod-Autojoined has changed nick to TodPunk. 13:58:41 Oh, he's still around. Was the head of the department for some time, too. 13:58:46 heh 14:08:53 -!- edwardk has joined. 14:13:16 -!- copumpkin has joined. 14:29:05 -!- MDoze has joined. 14:31:24 argh, NFC is badly designed. Why haven't they learnt anything from previous systems... 14:31:47 MITM is super easy with the right equipment apparently... 14:40:29 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:28 What? 14:42:51 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:43:48 sorry? 14:44:07 microsoft is more successful than ibm right? 14:44:12 And compilers... 14:44:16 I don't see what that has to do with near-feild communicaiton's vuilerability to man-in-the-middle attacks. 14:44:36 Or if there was any other related conversation before I joined. 14:44:48 MDoze, no it wasn't 14:44:52 -!- MDoze has changed nick to MDude. 14:46:27 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 I think IBM got less successfulll than Micrisoft because they allowed all those knockoffs of thier design. 14:47:05 im being extremely arbitrary and avoiding research or reality 14:47:18 Intel similarly is making bank, I think. 14:47:26 also the whole windows vs. OS/2 thing 14:47:58 Was OS/2 very backwards compatible? 14:48:06 not sure 14:48:12 its like.. decades of success in an industry can be toppled by these trivialities 14:48:15 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 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 hmm, theory: the number of assassination attempts Hitler survived is proof that time travel exists, yet is incapable of changing history 14:49:46 including some bad business decisions on IBMs part and some really good ones from MS 14:49:47 i'm calling it entropy ^_^ 14:49:50 unless I misremember 14:49:56 going back in time to kill Hitler is probably one of the most common uses for time machines 14:50:08 ais523, how many did he survive? 14:51:19 also I presume you meant hypothesis, not theory 14:51:49 itidus21, in the information theory sense? Or the physical sense? 14:52:20 Vorpal: not sure. just in the sense that they had to fail eventually 14:52:21 (and if the latter, how is thermodynamics related to this?) 14:52:33 itidus21, I don't think that is an existing sense of the word 14:53:09 maybe companies never have to fail 14:53:21 and it's all arbitrary 14:53:50 IBM is still around, though. 14:53:58 this is a good point 14:54:00 And even made that Jeopardy machine. 14:54:28 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 ok i think i'm working on the basis that the only way to say something novel is to lie 14:54:44 so no I don't think a company will inherently fail 14:57:21 so i get bored or restless and open the irc clickable bitmap. 14:57:28 what is that 14:57:34 its a bitmap you can click on! 14:57:46 gestures triumphantly 14:57:55 ... 14:58:22 and then, of all possible things i can say everything true has already been said, or is obvious 14:58:34 so i lie 14:59:10 i start inventing uses for words like entropy 14:59:41 mhm 15:00:01 and ridiculous ideas like that there is some law governing when businesses fail 15:00:21 and i use examples of successful businesses to show where businesses have failed 15:00:37 Ah, I was curious more about what you meant by indefinite positive feedback on intelligence. 15:00:52 well, the rich get richer... 15:00:58 and? 15:01:05 i was meaning the intelligent eventually stop getting more intelligent 15:02:06 but saying this is because of earthly mortality seems to be cheating 15:02:37 maybe a more realistic explanation is that people stagnate 15:02:55 but as i can see, it isn't a general rule 15:03:13 It could be a problem of sheer proccessing power, at least partly. 15:03:32 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 and then NFC was built on top of RFID... why? no idea 15:04:10 Because lazy, I would guess. 15:04:16 right 15:04:43 maybe it is the fact that money builds itself 15:04:49 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 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 MDude, now, if you instead use professional equipment you can get a range of a few meters against such a phone 15:05:10 opps 15:05:12 oops* 15:05:27 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 MDude, and the communications are unencrypted. Encryption is up to the application level 15:06:20 which is again fine for the original usage 15:06:45 (low power, possibly passive tags for logistics: you want something cheap and simple there. Yep) 15:08:08 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 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 its probably difficult to find motivation eventually 15:10:18 -!- Taneb has joined. 15:11:10 itidus21, this is all very interesting, but I don't think it really applies to NFC 15:11:11 I guess that what makes evil geniuses so smart, they've always got taking voer the world to look forward to. 15:11:14 Hello 15:11:30 *that's 15:11:43 Also hi Taneb. 15:11:48 -!- MoALTz_ has quit (Ping timeout: 250 seconds). 15:11:53 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:14 * copumpkin respects nobody 15:12:48 MDude: http://3.bp.blogspot.com/_0codWCfcAsc/SlX3Ck35_HI/AAAAAAAAAzc/Qi1tr_mH_3M/s400/pinky_brain_x_22.jpg 15:13:15 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:09 Taneb, to whom? 15:14:22 Vorpal, UCAS, and hence various universities in the UK 15:18:01 I'd like to make an RFID tag that uses the bulkiest, most anachronistic components possible that also aren't too expensive. 15:18:48 vaccuum tubes? 15:19:12 Taneb, UCAS being? 15:19:14 really awful 15:19:32 Vorpal, body that handles university applications in the UK 15:19:56 Taneb, why would you mention that to them? Isn't the only thing relevant for such applications your previous grades? 15:20:08 Nah, there's loads 15:20:16 In Sweden at least they only care about your grades 15:20:21 * copumpkin used UCAS many moons ago 15:20:27 Basically, I'm trying to demonstrate interest in the subject 15:20:36 (the subject being, maths and computer science) 15:21:22 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 and then they basically use that in a priority queue system 15:21:47 Yes, but seeing as I am neither in Sweden nor applying to a Swedish university, that isn't especially relevant 15:21:59 Taneb, I'm just surprised every country doesn't do it that way 15:22:15 Pretty much every country does it different 15:22:43 well I expected the exact details to vary (different scoring algorithms, different ranges and so on) but not the general concept 15:23:12 I believe the Netherlands lets everyone in, and decides a year later 15:23:18 heh 15:23:56 -!- zzo38 has joined. 15:24:20 copumpkin: since when are you in here? 15:24:22 (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 jix: I used to be in here a lot, and then forgot to rejoin when I redid my IRC client 15:24:53 and now I've started joining again 15:26:05 now I wonder if we've met here before without me realizing 15:26:30 :) 15:27:16 So, can I say I'm well respected in the esoteric programming community? 15:30:53 eys 15:30:57 -!- Guest34050 has changed nick to oklopol. 15:31:05 Thanks, oklopol 15:31:10 why does nnscript insist on renaming me guest 15:31:43 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 I think it would make more sense to say your work on esoteric languages is generally admired in the community. 15:32:08 Since you could be respected on a personal level witohut really making anything. 15:32:16 -!- oklodol has changed nick to okloblock. 15:32:17 like ESR! 15:32:21 *without 15:32:54 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 Nandypants, Numberwang, MIBBLLII, Fueue, Brook, Constatinople, Luigi, Real Fast Nora's Hair Salon 3: Shear Disaster Download 15:34:31 copumpkin: ah no, according to public logs you joined years after I was active a lot here 15:34:39 ah 15:35:01 I only joined last year :( 15:36:12 jix: still do much bitcoining? 15:36:39 You joined before I did, and thus "Forever ago". 15:36:42 copumpkin: I use them from time to time to transfer value 15:36:48 ah 15:37:02 didn't bitcoin drop in value some time back 15:37:04 like a lot 15:37:13 it moves a lot in general :) 15:37:14 but not much beyond that... but for that they do their job pretty well 15:37:23 it got inflated way beyond what was reasonable 15:37:29 and then the bubble burst 15:37:33 right 15:38:58 Taneb: Forever apparently being less than a month, according to the edit logs of our user pages. 15:39:19 :) 15:39:49 Should LLVM have an instruction to test addition/subtraction overflow? 15:40:34 zzo38, are you on the LLVM development committee? 15:40:56 zzo38 is on the everything committee 15:45:02 zzo38, isn't the usual solution that the CPU sets a flag in some flag register for that? 15:45:25 hm I wonder how that works on VLIW architectures... One flag register per concurrent instruction? 15:45:42 No I am not on the LLVM development committee. 15:46:03 zzo38, then would your opinion on this matter? It wouldn't affect LLVM development 15:46:03 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 Perhaps someone who is on LLVM can suggest it to them 15:47:21 in theory a backend could detect the instrucion sequence that tests for overflows and produce code that uses the flags 15:48:56 jix: Yes, like that, I mean 15:50:32 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 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 that would not require a change to the llvm instruction set 15:51:59 what does LLVM currently do for that bit of code? 15:52:24 and what does gcc do? 15:52:31 At least to me, I have found cases where I want to explicitly specify overflow test instruction 15:53:17 The optimizer could do the conversion from ((a + b) < b) to the tsof and tuof instructions 15:53:36 itidus21, "enterbrainfuck"? 15:53:40 I don't see that on the wiki 15:53:48 ah its on a userpage 15:53:53 link 15:53:56 http://esolangs.org/wiki/User:FireFly/Enterbrainfuck 15:54:07 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:10 so, i'll explain :-3 15:54:12 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 fizzie: O, OK. 15:54:43 enterbrain is a company that makes rpgmaker products. rpgmaker products contain a ruby scripting language. 15:56:18 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 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 used floor tiles as the data storage 15:56:56 That's it, I'm gonna make a brainfuck interpreter in Ren'Py 15:57:03 Taneb, what is that 15:57:14 btw I might fire up my old ibook and see if I still have that thing around 15:57:15 Visual novel creator with Python back-end 15:57:25 however, how did you take screenshots on macs? I don't remember 15:57:42 also... I don't currently have any surface to put the thing on 15:57:45 so scratch that 15:57:56 And I don't know how to use Ren'Py 15:58:21 anyway the size of it was limited due to the number of instructions you could execute per script event 15:58:29 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 so iirc it was like a 30x30 GOL world 15:59:41 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 and having destroyed the topic with my greedy post, i will back away 16:03:35 -!- ais523 has quit. 16:04:59 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 Perhaps the names can be ClassCodensity for the right version and ClassDensity for the left version. 16:07:38 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 First class classes? 16:08:56 It is possible using constraint kind, although it can be done even without constraint kind. 16:09:36 For ClassDensity, if c is Copeanoid then I would think you get a non-empty list comonad. 16:10:46 class Class (c :: * -> *) 16:11:32 data Monoid' :: Monoid m => m -> Monoid' m 16:11:43 I don't even know where I'm going with this 16:11:51 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 Now the (,) for constraints and the (,) for types is the same one 16:12:56 great 16:12:58 I need to learn agda again 16:13:07 since apparently I'm giving a 45 minute talk on it 16:13:14 (why did i do that) 16:14:14 not knowing agda should count as a good reason not to give a talk on it 16:14:35 data Restrict c x = Restrict { classOfRestrict :: !(c x), getRestrict :: x }; 16:14:42 but I guess you might not have been thinking right 16:17:37 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 It appears not to work so well. 16:29:53 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:46:03 Hello 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 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:06:42 gg"+yG Ctrl-V 18:06:56 woops 18:07:35 -!- azaq23 has quit (Quit: Leaving.). 18:10:49 sup 18:11:32 * olsner is copy-pasting 18:13:29 Everyone was co-py-pasting / those kids were fast as lightning. 18:13:38 s/one/body/ 18:13:39 :) 18:14:21 i wrote a program in BytePusher.. 18:14:51 when it really comes down to it i can't deny that it allows for some extremely small programs 18:14:56 In fact it was a little bit frightening / but they ^v'd with expert timing. 18:15:26 how do you pronounce ^v'd? 18:15:56 I don't know, but "pasted" didn't really flow either. 18:16:07 cutrollveed 18:16:17 k'veed. 18:16:40 Maybe "yanked". 18:16:54 yanked could work 18:17:03 and also the fact it's easy to program it directly into a hex editor 18:21:31 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 sounds like a fairly good translation 18:22:14 not that anyone cares what the song's text is about 18:24:58 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:25:22 cool 18:26:06 -!- zzo38 has joined. 18:26:20 it's fun seeing my native language[english] being hacked by translators 18:27:05 i can't really explain what it's like to only know english 18:27:29 how does it feel? please explain 18:27:35 I think LLVM has no unions, isn't it? 18:28:33 olsner: well, what some would call bad translations, is like seeing the language being used in new and fun ways 18:28:36 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 like that craze about all your base are belong to us 18:28:53 if LLVM has casts, unions could be a source language-only thing 18:29:36 and I'm pretty sure it does have casts, but no idea how it treats aliasing 18:29:44 LLVM does have casts but will any optimization or anything allow it to cause problems? 18:29:49 it's not just an act of mockery. theres a secret joy in witnessing so called engrish 18:29:56 And, yes, aliasing too 18:31:34 Advert for Snickers: people get annoyed when they're hungry, so eat, I guess? 18:31:39 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 nah its 4:30 am here.. i think i'm just flipping out 18:34:04 zzo38: i wrote a bytepusher program 18:35:05 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:15 i wrote it in hex 18:35:16 (Otherwise, just post the binaries.) 18:35:21 hmm 18:35:53 not sure what the best way to post a binary is.. 18:36:08 its very short though, like trivial 18:36:29 LLVM had an union type earlier, but indeed the latest language reference doc no longer does. Maybe they have a documented alternative somewhere. 18:36:46 ill see if i can find one 18:37:33 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 http://llvm.org/docs/LangRef.html#pointeraliasing 18:37:54 i think i found one 18:38:21 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 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 But if they say type-based aliasing is not done on arbitrary IR code, I guess casts are safe. 18:41:58 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 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 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 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 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 oerjan: It's famously bad, yes. 18:46:23 i may have mentioned this before 18:46:48 zzo38: i just wanted to say that i looked at bytepusher really :D 18:46:48 how can anyone ever "mean" to add something to the VSS library? 18:47:31 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 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:22 well 18:48:41 i find that when everyone hates a given technology without using it 18:48:47 and i start using it 18:48:50 it's not as bad as everyone says 18:48:53 itidus21: OK. Other programs were generated using C programs and Python programs, and one program I wrote in the PUSHEM assembler. 18:49:06 Vorpal: he might have been sarcastic, and you're the fool 18:49:41 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 olsner, he seemed honest, and the rest of the people nearby were equally fooled in that case. 18:49:57 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 fizzie, proper locking for that model sounds like hell 18:50:17 i was really impressed that you can do all that in 27 bytes 18:50:28 I have actually seen VSS in use (as in, seen the screen while someone was using it) 18:50:38 i don't think the guy who made it really knows what to do with it 18:50:39 olsner, okay, what did it look like? 18:50:54 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 I don't really remember that well, but some guy was building a custom UI for it in VB 18:51:01 fizzie, heh 18:51:11 olsner, ouch 18:51:56 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:12 s/epi/pro/ 18:52:15 was the client/server thing ever in VSS though, or is that new for team thingy? 18:52:26 olsner: In VSS, I believe. 18:52:55 fizzie, wait, what is so special about that instruction? 18:53:16 seems like a reasonable way as long as the stack grows down (which it does) 18:53:24 "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 Vorpal: the special part is the alignment, not the instruction being used, I think 18:53:47 Vorpal: There's nothing special about it. It is reasonable. 18:53:51 right 18:54:06 the alignment is kind of annoying though 18:54:15 I'm not sure the alignment is terribly special either. It was a random useless fact, is all. 18:54:21 !bfjoust areyoualive . 18:54:21 fizzie, what about 64-bit windows? 18:54:25 Well, at least mostly useless. 18:54:30 ​Score for quintopia_areyoualive: 8.3 18:54:34 iei 18:54:53 Vorpal: always 8-byte aligned, you can't push other quantities of bytes in long mode 18:54:56 Vorpal: That has bigger stack alignment by default. Though I don't recall if it's 8 or even 16. 18:55:19 I should say *at least* 8-byte 18:55:42 olsner: I actually believe you can push two. Not four, though. 18:55:44 zzo38: there is 1 problem i can see with it though. 18:55:59 (Not that anyone would push two.) 18:56:05 itidus21: What problem? 18:56:17 !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 ​Score for quintopia_brachiation: 41.7 18:56:21 fizzie: iirc a smaller immediate or memory operand gets zero-expanded to 64-bit 18:56:30 weird 18:56:33 and for registers, only 64-bit ones are allowed 18:57:21 !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 ​Score for quintopia_brachiation: 47.9 18:57:25 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 18:59:29 its so funny that he didn't 19:00:05 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 obviously it's wrong and I'm right! 19:01:08 Obviously. 19:01:14 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 maybe it was a design decision. after all it's his thing not mine. 19:01:32 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 or maybe just didn't occur to him 19:01:49 are there byte-size pushes? 19:02:00 Not at all. 19:02:11 Vorpal: always 8-byte aligned, you can't push other quantities of bytes in long mode <-- oh okay 19:02:23 Vorpal: it's being debated as you speak though 19:02:38 Well, I mean, there's PUSH imm8, but I think it's always pushed at least the 16 bits. 19:02:40 olsner, I thought you could puss eax and such sizes of registers still? 19:02:46 Vorpal: You can't. 19:03:18 hm anyway iirc modern compilers (gcc at least) tend to use mov relative %rsp rather than push or pop 19:03:23 that way you could do it 19:03:32 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 such as adding your whole stack frame size on entry of the function 19:03:46 olsner: There's no PUSH r8, just imm8. 19:03:58 olsner: And "If the source operand is an immediate and its size is less than the operand size, 19:04:01 a sign-extended value is pushed on the stack. If the source operand is a 19:04:04 segment register (16 bits) and the operand size is greater than 16 bits, a zero- 19:04:07 extended value is pushed on the stack. 19:04:14 (The operand size is listed to be 16, 32 or 64.) 19:04:44 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 (Pasting from the Intel PDF, from Evince, is just lousy with newlines.) 19:05:07 You can certainly perform a "one-byte push" by just dec rsp. 19:05:08 also I meant SUB not ADD 19:05:10 obviously 19:05:26 If you don't mind breaking most ABIs. 19:06:17 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 so then you could easily have say 2 4-byte values pushed 19:06:41 and just increment the stack frame by 8 rather than 2*8 19:06:58 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 but pushing immediates is silly 19:07:35 Actually I suppose imm32 would be sign-extended to 64, I just misread that on the first pass. 19:07:36 olsner, hm does it zero extend 16-bit registers too? 19:07:41 or just 32-bit ones? 19:07:50 They should use PUSH and POP if their effect matches what need to be done 19:07:51 Vorpal: you can zero-extend anything you want? 19:08:07 Also use AAA and so on if those work for the program done too 19:08:16 olsner, well obviously, I meant if you have garbage in a register and do mov %ax,whatever 19:08:24 AAA and some other old crap is not available in long mode 19:08:34 olsner, I know mov %eax,whatever will zero the upper 32 bits of %rax 19:08:41 but how will i do 64-bit BCD math?!?!? 19:08:41 olsner: Well, it would not compile those instructions in long mode, tghen. 19:08:56 Vorpal: That's kind of weird that you put the arguments the Intel way but add AT&T prefix %s. 19:09:02 Vorpal: no, word and byte-size operations work as before on the lower bits preserving the higher bits 19:09:07 fizzie, I like to be unusual! 19:09:33 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 Vorpal: also, you now have lower-byte/word registers for di, si, sp, bp that didn't use to have them 19:09:47 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 Vorpal: no, it leaves all 48 upper bits unaffected 19:10:05 fizzie, seriously though I haven't been doing x86 asm for ages. 19:10:25 fizzie, mostly AVR recently. And that is recently as in half a year ago 19:10:26 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 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:10:54 olsner, right 19:11:19 fizzie, as long as you don't use PUSH or POP for them that is 19:11:26 right? 19:11:44 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 So four times push ax should be okay. 19:12:06 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 er 80 bits? 19:12:30 isn't it? 19:12:33 iirc the 80 bit format is only used internally 19:12:37 ah okay 19:12:38 in FPU registers 19:12:43 You *can* store them, though. 19:12:46 so what does long double then use when written to memory? 19:12:46 Nobody often does. 19:12:55 "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 GCC writes the 80-bit long doubles as 12-byte or 16-byte objects depending on a flag. 19:13:32 zzo38, is that a BCD instruction? 19:13:40 Isn't long double just a double on x86-64? 19:13:44 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 (because fuck x87) 19:13:46 probably 19:13:47 -m96bit-long-double and -m128bit-long-double. 19:13:58 pikhq, 100% sure that isn't so. I got different results last time I checked 19:14:12 Vorpal: Well then. 19:14:15 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 pikhq, at least gcc compiled my use of long double into x87 instructions on 64-bit x86 Linux 19:14:41 Guess it is, then. 19:14:57 I somehow got the idea that x87 was entirely unavailable in long mode 19:14:59 pikhq, anyway my question concerned alignment of long double on the 32-bit windows stack 19:15:01 olsner: It isn't. 19:15:05 The AAM instruction does the reverse operation of AAD; it does division and modulo by immediate. 19:15:14 olsner: x87 is *entirely* available in long mode. 19:15:18 Vorpal: I'm thinking 16 bits. 19:15:24 fizzie, makes sense 19:15:26 olsner: And worse still, necessary for MMX to work. 19:15:43 (admittedly, you're not *that* likely to use it. Still.) 19:15:51 Vorpal: I mean, it could be 12, but they already align doubles to 8 for performance, so... 19:16:01 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 pikhq, I actually used it for one thing. Trying to remember what it was... 19:16:07 ... performance." 19:16:12 pikhq: oh, because of that mmx/fpu registers sharing registers thing? 19:16:17 olsner: Yup. 19:16:29 pikhq, does anyone use MMX on 64-bit though? 19:16:33 I thought it was all SSE 19:17:18 pikhq: that's fairly horrible 19:17:41 Vorpal: Because of SSE2, in practice SSE is an extension to MMX. 19:17:50 pikhq, different register set though 19:17:54 (some of the SSE2 opcodes are MMX opcodes extended to work on XMM registers) 19:17:58 ah 19:18:07 pikhq, no need to support the legacy registers in theory 19:18:11 I think the AAM and AAD instructions are useful even if you do not use BCD arithmetic. 19:18:22 Yes, but x86_64 was designed to be a *minimal* change to x86. 19:18:29 zzo38, IIRC they are gone on 64-bit x86 19:18:43 zzo38, and the opcodes converted into new prefixes or something 19:18:53 Vorpal: Yes, but I would think they would still work if not in 64-bit mode 19:18:58 pikhq, yet they dropped vm86 19:19:07 Vorpal: That's actually hard to do. 19:19:14 pikhq, hm? 19:19:20 actually, I think the BCD opcodes were left unassigned, just removed 19:19:29 If it was less work to keep something than remove it, they kept it. 19:19:35 pikhq, the CPU still has to be able to do that when running a 32-bit OS though 19:19:41 so the functionality is still there 19:19:58 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 olsner, what did they do with AAM and AAD then? 19:20:37 Vorpal: Yes, but to get it working under x86_64 you need to get segmentation working under x86_64. 19:20:46 aaah 19:21:03 VM86 is mostly just sticking segmentation on top of paging. 19:21:12 pikhq, but uh doesn't 64-bit still have some segment registers? IIRC one is used for something still 19:21:28 fs relative addressing iirc? 19:21:29 you can still set a base on %fs and %gs 19:21:31 might misremember 19:21:33 but the limits are not checked 19:21:40 Vorpal: Yes, but those are vestigial. 19:21:41 And the bases are set by writing some MSRs. 19:21:44 cs, ds, es, ss are all stuck to 0 base 19:21:48 kmc, what were those bases used for? 19:21:49 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 thread local storage iirc? 19:21:59 and the other one? 19:22:02 Vorpal: depends on the OS and library 19:22:08 kmc, linux, glibc 19:22:29 pretty sure %fs was used for TLS 19:22:45 Vorpal: Amusingly, you can still run 16-bit code when in long mode. 19:22:51 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 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:22:58 yeah 19:23:04 16-bit protected mode code just *barely* works. 19:23:12 pikhq, how 19:23:20 I don't know, I just know WINE does it. 19:23:26 it does? wow 19:23:26 Vorpal: %fs is used for TLS and stack-protector canary 19:23:41 i don't know if %gs is commonly used by anything in userspace 19:23:46 How else do you think it does Win16 on x86_64? :) 19:23:47 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 pikhq, it does that? nice 19:24:00 it's used by kernels thanks to the SWAPGS instruction 19:24:03 http://www.x86-64.org/pipermail/discuss/2000-October/001009.html 19:24:17 kmc, %fs is used for two things? huh 19:24:36 really, %fs is used for whatever you want to use it for :) 19:24:39 the stack protector canary value lives within the TLS block 19:24:40 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 zzo38: Thus DOSbox. 19:25:07 pikhq: Yes 19:25:07 i mean, the %fs base points to a libc internal structure, a different one per thread 19:25:09 Or dosemu... 19:25:12 which contains various stuff like the canary value 19:25:18 pikhq, not dosemu 19:25:20 and also contains pointers to reach the user-visible TLS variables 19:25:23 pikhq, it uses vm86 afaik 19:25:29 Vorpal: dosemu now has an 8086 emulator, because of x86_64. 19:25:31 ah 19:25:32 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:25:54 kmc, right 19:26:29 fizzie, well the kernel one is easy to understand given the SWAPGS instruction 19:26:34 that kmc mentioned 19:26:35 hm so in long mode, SYSCALL does not load %ss:%rsp? 19:26:49 "When using SYSCALL to implement system calls, no kernel stack exists at the OS entry point." 19:26:51 kmc, what is %ss? 19:27:03 but i'm pretty sure that's not true in 32-bit mode 19:27:05 Vorpal: stack segment 19:27:09 I guess it is irrelevant in long mode 19:27:19 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:27:48 kmc, ah 19:28:04 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 what happens when a 32-bit program running under a 64-bit OS does a SYSCALL? 19:28:29 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 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 Vorpal: and once on leaving... 19:29:26 kmc, well yes 19:29:34 and you have to make sure you got every exit path 19:29:40 but if you have clearly defined entry and exit points that shouldn't be an issue 19:30:03 kmc, that is just a question about proper design though 19:30:06 hm I'm wrong, it looks like SYSCALL doesn't load the stack pointer even in 32-bit mode 19:30:11 the instruction existed before amd64, you see 19:30:30 SYSENTER does load the stack pointer from a MSR, but doesn't save the instruction pointer 19:30:33 what a country 19:30:48 x86, what did you expect? 19:31:15 well they were invented by competing companies too 19:31:24 it's a bit like the NYC subway system 19:31:36 which was built by three competing entities 19:31:45 and then gradually unified 19:31:47 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 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 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 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 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 Since most code could then just avoid using it, thus avoiding saving and restoring it at all 19:36:54 also there was left shift and right shift on the model I worked with, but only one step at a time. 19:37:12 AVR chips are quite fun 19:37:23 Vorpal: Betcha "love" how x86 Linux has __kernel_vsyscall. 19:37:24 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 ... 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 pikhq, is that related to the vdso? 19:37:44 Vorpal: Yes. 19:37:46 i don't have much opinion about the AVR ISA, but the chips have neat peripherals 19:37:54 i guess all microcontrollers do, but this is the one i know best 19:38:00 pikhq, right, I know about it then. To select SYSENTER/SYSCALL/INT 19:38:02 It's the generic system call function in x86's VDSO. 19:38:03 Yes. 19:38:11 wait, hold on 19:38:17 vsyscall means something different 19:38:23 at least in some contexts, 19:38:24 I made up a 7-bit instruction set, where addresses are 14-bits 19:38:36 vsyscall means the "system calls" that actuall execute in userspace, like gettimeofday 19:38:39 fizzie, heh nice 19:38:49 kmc: Yes, but those don't go through __kernel_vsyscall at all. 19:39:01 kmc, they are in the same sort of general area of memory iirc 19:39:05 yeah... I'm not surprised they are inconsistent with terminology 19:39:06 fizzie: but arithmetic/logic doesn't make sense for left shifts 19:39:12 and they are done with vdso rather than vsyscall these days iirc 19:39:18 which iirc is slightly different 19:39:21 in current systems they are both in the vdso, afaik 19:39:22 __kernel_vsyscall does a *real* system call. 19:39:28 and only matters on 64-bit 19:39:34 GCC can compile to MMIX; when will they make LLVM compile to MMIX? 19:39:36 You actually have to special-case the userspace-only ones. 19:39:43 Vorpal: what only matters on 64-bit? 19:39:54 7fffbbeb0000-7fffbbeb1000 r-xp 00000000 00:00 0 [vdso] 19:39:55 ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] 19:39:59 Vorpal: VDSO is on all Linux archs. 19:40:00 from /proc/self/maps on 64-bit 19:40:04 olsner: Yes, but since the other three are called what they are, it kind of induces the name "logical left shift". 19:40:07 that last page is legacy though 19:40:10 In addition, can they make LLVM compile to Glulx? 19:40:12 vsyscall is like a deprecated alternative to vdso yes 19:40:17 kmc, exactly 19:40:28 kmc, and iirc only 64-bit had vsyscall as opposed to the vdso 19:40:32 ok 19:40:34 I'm pretty sure when glibc does a syscall it doesn't go through either of those. 19:40:34 unless I completely misremember 19:40:45 no 32-bit cat around to check with alas 19:40:46 shachaf: on amd64? yeah, it uses the SYSCALL instruction 19:40:48 It just uses a "syscall" instruction. 19:40:56 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 shachaf: Uh, *surely* it goes through VDSO for gettimeofday et al. 19:41:16 olsner: Basically. 19:41:21 olsner, vsyscall contains a userspace gettimeofday (legacy) iirc. While vdso contain the current user space one 19:41:26 pikhq: glibc does? 19:41:30 iirc vsyscall didn't scale and was a horrible hack 19:41:38 these days vsyscall doesn't contain the legacy gettimeofday, it just contains code to make a "real" gettimeofday syscall 19:41:40 but removing it would break statically linked applications 19:41:41 as a compatibility hack 19:41:43 shachaf: Also, on x86_64, __linux_vsyscall DNE anyways. 19:41:49 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 kmc, ah, it used to contain a user space one 19:42:00 they minimized the amount of code in the legacy vsyscall page, to reduce attack surface 19:42:03 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 (as syscall always exists, and it's always fast) 19:42:10 (specifically the amount of code in fixed locations, for ROP) 19:42:12 kmc, fair enough 19:42:33 pikhq, DNE? 19:42:34 Since much of glk.h functions are native instructions in Glulx 19:42:39 Vorpal: Does Not Exist 19:42:41 ah 19:42:45 kmc: Having a "syscall" in a fixed location seems like a pretty useful thing for ROP. 19:42:55 I really thought I used SLL in rfk86, but it does not seem to. :/ 19:43:14 what can you use it for? 19:43:21 To shift ones in. 19:43:24 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:29 fizzie: oh! I see! 19:43:32 shachaf, the syscall in question was only gettimeofday iirc? 19:43:33 whereas you do need one to find the vsyscalls for gettimeofday etc 19:43:47 Vorpal: What do you mean? 19:43:48 fizzie: but in other words, you have found no use for it? 19:44:02 shachaf, in the vsyscalls page 19:44:06 i don't know if i386 ever had that stuff at a fixed address as x86_64 does 19:44:09 I don't think it contained "syscall" 19:44:20 these days vsyscall doesn't contain the legacy gettimeofday, it just contains code to make a "real" gettimeofday syscall 19:44:20 Vorpal: But it does now, doesn't it? 19:44:24 shachaf, just the "fixed functionality" gettimeofday 19:44:31 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 shachaf, no, that is in the vdso 19:44:58 olsner: If you're collecting bits that come in one by one, serially, in a register, it could be nice. 19:45:00 Vorpal: Last time I looked at [vsyscall] it was mostly empty with a few syscall instructions. 19:45:04 ANd at a fixed address. 19:45:07 == shachaf 19:45:11 shachaf, yes... 19:45:16 i found the commit where they removed the interesting code in the vsyscall page 19:45:19 shachaf, read the bloody source for vsyscall 19:45:34 i think you two are confusing two things 19:45:43 "vsyscall" the legacy page mapped at ffffffffff600000 19:45:51 and "vsyscall" the idea of doing system calls in userspace 19:45:58 which these days is implemented not with that page, but with the vdso 19:46:09 hmm, why -600000? 19:46:14 beats me 19:46:24 Vorpal: I didn't "read the bloody source", but I did "dump the bloody page and disassemble it" 19:46:30 shachaf, right 19:46:30 probably a wild-ass guess as to how much space they wanted 19:46:51 they should've given it a 1GB page, just in case 19:47:04 fun fact: you can't write(1, 0xffffffffff600000, 4096) 19:47:21 If bytes were IPv6 addresses... 19:47:41 kmc, and? it is in the negative address space. User space shouldn't expect to be able to do anything there 19:47:47 write rejects all upper-half/negative addresses? 19:47:51 makes sense, I guess 19:47:52 olsner: yeah 19:48:04 Vorpal: well, you can read from that memory, and jump to it 19:48:06 Vorpal: But you can memcpy(buf, vsyscall); 19:48:19 shachaf, of course, because that doesn't go into the kernel 19:48:23 and this is how vsyscalls used to work 19:48:28 Vorpal: not "of course" 19:48:29 I know 19:48:33 the kernel sets up the page tables so that you can read that page 19:48:41 when ordinarily, you cannot read pages above the midpoint 19:48:46 kmc, well duh, of course you couldn't do it if it didn't do that 19:48:56 don't duh me 19:49:12 kmc, but it is "of course" since /proc/self/maps says you can read it 19:49:17 then of course you can memcpy it 19:49:20 Vorpal: I think kmc's point is that you can read from the page but not write(1, page); 19:49:32 shachaf, yes and not surprising really 19:49:53 !bfjoust a http://sprunge.us/hTYC 19:49:53 i'm glad you're such a genius that this fact does not give you a moment's pause 19:49:57 ​Score for quintopia_a: 57.1 19:50:05 and thanks for telling us all how smart you are 19:50:22 I think that's one of those things where if it's not surprising you aren't thinking properly about it 19:50:28 kmc, I didn't mean to offend you, nor did I intend to appear like a genius (I'm not) 19:50:30 if you can read it, of course you can write it to a file 19:51:18 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 i think that's what you get 19:51:31 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 because access_ok() is not particularly clever 19:51:36 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 it's not "the SYSCALL handler" it's the code for each individual system call 19:52:06 in fact that code has to exist in every device driver pretty much 19:52:23 pikhq, exactly, which is why it makes perfect sense 19:52:26 so if one driver forgets it (for example the Reliable Datagram Sockets implementation), you can use that driver to root the machine 19:52:31 thoracle 19:52:46 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 Vorpal: dude, I never said this fact was completely baffling, it makes sense, it's just slightly odd 19:53:17 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 olsner, well yes, but according to the ABI anything with MSB set is kernel. 19:53:30 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 anyway I think we're all repeating the same facts over and over at this point 19:53:40 kmc, well yes, that is true 19:53:52 (both that it is amusing and that we are repeating facts) 19:54:20 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 Let's get someone else in here to agree. 19:54:34 Vorpal: the whole discussion is also amusing in a way 19:54:36 > text "i agree with kmc" 19:54:37 i agree with kmc 19:54:42 pikhq: disagree 19:54:54 olsner, hm, be careful of going too meta 19:54:55 Perhaps by a metadata such as !owns 19:55:13 in which way can a variable belong to an instruction? 19:55:17 zzo38, huh? 19:55:34 I find it amusing how often [vdso]- or [vsyscall]-related discussions come up when kmc is around. 19:55:34 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 He doesn't even have to start them, the just happen. 19:55:44 shachaf, they do? 19:55:48 shachaf, that is strange 19:55:51 Yep. 19:55:51 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 fizzie: does it also say somewhere that conforming processes must use vsyscall? 19:56:13 it is a bit obnoxious that you can't use the VDSO vsyscalls without a dynamic linker 19:56:32 (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 (maybe not a whole dynamic linker; maybe you can get by with a simplistic ELF reader) 19:56:35 well, obviously it doesn't now that vdso is there but err, something 19:56:45 kmc, you could write your own code to parse the ELF structure of the VDSO surely? 19:56:52 well, it depends 19:56:58 are there dynamic relocations inside the VDSO? 19:56:59 kmc, since it doesn't have to be a full linker that shouldn't be /too/ hard 19:57:04 kmc: Linux is turning into Windows! 19:57:05 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 if so, you need to apply those relocations 19:57:13 hmm, where do you get the pointer to the vdso in the first place? 19:57:19 kmc, I don't think the vdso is writable from user space 19:57:22 olsner: ELF auxv 19:57:30 ah, ok 19:57:42 Vorpal: it's not a COW mapping like any other shared library? 19:57:45 but I guess you'll at least need to look up stuff in the symbol table, yuck 19:57:47 i think it is writable 19:57:51 olsner, Vorpal: Can you understand what I meant now, by a variable belonging to an instruction? 19:57:55 kmc: I tried to unmap or mprotect [vdso] and didn't manage it. 19:58:14 kmc: If it's writable and not COW then that's a pretty major vuln. 19:58:16 kmc, don't /think/ so. Since it contains some shared memory with the kernel, containing that time of day value 19:58:20 for the user space gettimeofday 19:58:29 i remember a mmap_min_addr bypass where you construct an executable where the only location for the VDSO is 0 19:58:38 lol 19:58:49 As far as I know there's no way to get rid of [vdso]/[vsyscall]. 19:58:57 speaking of which, I wish root could disable mmap_min_addr for a specific process, rather than for the whole system 19:59:07 can't you? 19:59:08 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 kmc, I have an emulator (ppc mac os classic emulator) that needs mmap_min_addr set to 0 to run 19:59:38 a better solution than switching it for the whole system would be nice 19:59:39 kmc: I tried! 19:59:51 what about the MMAP_PAGE_ZERO personality bit 19:59:54 That's what makes me think [vsyscall] would be ideal for a debugger to do syscalls with. 19:59:55 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 can you set that from userspace 20:00:00 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 kmc, yeah afaik the vdso is not writable and not COW 20:00:13 ok 20:00:15 look at the mapping: 7fff94549000-7fff9454a000 r-xp 00000000 00:00 0 [vdso] 20:00:18 not writabloe 20:00:20 writable* 20:00:20 sure, but can it be remapped 20:00:24 shachaf says no, but i haven't tried 20:00:41 kmc, why would it need to be remapped? Everything can be RIP relative 20:00:48 hm maybe not on 32-bit though? 20:00:51 not sure how that works 20:01:01 Vorpal: does not seem relevant 20:01:10 i meant, are you allowed to call mprotect() on it to add the write bit 20:01:18 kmc: I'd love to be wrong! 20:01:21 I would doubt it, try it 20:01:39 olsner: on i386 you get an auxv entry for the start of VDSO and another for the syscall entry point 20:01:41 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 An easier way to test than what I did would be to try to write to it from gdb. 20:02:04 Backends that cannot use this !owns metadata can ignore it. 20:02:24 olsner, Vorpal: Can you understand what I meant now, by a variable belonging to an instruction? <-- no 20:02:43 i think he means, if you write to that variable it changes the instruction 20:02:50 Vorpal: I did explain it though. 20:02:54 a variable where "reads" are actually load immediates scattered through the code 20:02:58 and "writes" change all those instructions 20:03:01 linux has or had a mechanism for this 20:03:07 zzo38, it made no sense though 20:03:36 zzo38, not sane basically 20:03:39 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 ptrace can in theory write to any memory in the process's address space, no matter what the protection. 20:03:56 I don't care if it is sane or not 20:03:57 It goes so far as to convert a SHARED mapping to a PRIVATE mapping. 20:04:00 shachaf: 7fff5fdc6000-7fff5fdc7000 rwxp 00000000 00:00 0 [vdso] 20:04:06 and i wrote over it, and read the data back out 20:04:06 linux has or had a mechanism for this <-- really? 20:04:11 Vorpal: yes, look up "immediate values" 20:04:12 kmc, wow 20:04:16 kmc, so then it is COW 20:04:21 yeah 20:04:22 kmc, does gettimeofday still work after that? 20:04:26 dunno 20:04:29 try it 20:04:41 i'm not sure where the variables it reads are stored 20:04:47 presumably they are in the upper half of memory 20:04:50 hm 20:04:51 and don't show up in /proc/self/maps 20:04:54 but are readable by userspace 20:05:06 kmc: Maybe I'm just thinking of [vsyscall], then. 20:05:07 kmc, I think they are static volatile variables in the vdso? 20:05:16 Or maybe I just got it wrong. I don't remember. 20:05:30 shachaf: yes, i wouldn't be surprised if vsyscall is permanently read only 20:05:38 having some RWX memory at a fixed address would be a serious security concern 20:05:49 #define gtod (&VVAR(vsyscall_gtod_data)) 20:05:53 not much help 20:05:58 if they are external to the vdso they can be anywhere 20:06:01 that was clock_gettime though 20:06:28 and the kernel can patch in the address or something 20:06:28 !bfjoust a http://sprunge.us/Pdfb 20:06:31 ​Score for quintopia_a: 56.8 20:06:45 hm so the variable is basically read until it doesn't change between two reads? 20:06:52 nice 20:07:25 bfjoust should be more like core wars. 20:07:31 ../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 why would you do that? in case there's a context switch just after you read it? 20:07:32 hrrm 20:07:46 olsner, because there are two fields 20:07:51 olsner, so you need to do it atomic 20:08:04 and yeah I guess there could be a context switch 20:08:16 in the middle of reading it 20:08:24 i,i cmpxchg16b 20:08:24 struct timeval { 20:08:24 time_t tv_sec; /* seconds */ 20:08:24 suseconds_t tv_usec; /* microseconds */ 20:08:24 }; 20:08:38 time_t is 64-bit, not sure about suseconds_t 20:08:55 for clock_gettime it is definitely two 64-bit values 20:09:01 Vorpal: ah the joy of linker scripts 20:09:01 kmc, hm you need a LOCK prefix 20:09:07 !bfjoust a http://sprunge.us/EiIc 20:09:10 ​Score for quintopia_a: 57.5 20:09:27 kmc, that one looks generated. No human would write that line 20:09:30 suseconds_t is 16-bit, so it only works for the first 65ms of a second 20:09:39 Vorpal: you would be surprised 20:09:52 kmc, no seriously, not on one line 20:10:16 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 kmc, also the second line of the file reads: " * Automatically generated C config: don't edit" 20:10:27 ah, -10*1024*1024, that's 0xffffffff600000 20:10:35 (You will get error messages if you do it wrong.) 20:10:35 olsner, on that specific kernel 20:10:39 olsner: Ten megs should be enough for everyone. 20:10:40 which I'm not even running atm 20:10:46 Linker scripts are the best, though. 20:10:53 olsner, wait, is that in the vsyscall page? 20:10:54 perhaps the simplest way is to use gdb to step into the vsyscall code 20:11:21 Vorpal: vsyscall_gtod_data was also a hint if the address wasn't enough 20:11:58 (gdb) disassemble clock_gettime 20:11:58 Dump of assembler code for function clock_gettime: 20:11:58 0x00007ffff7ffb8d0 20:11:59 the what? 20:12:03 that address 20:12:03 .bss ALIGN(4) (NOLOAD) : { . = . + 72; f = .; . = . + 4096; /* such a hack */ *(.bss) } (Okay, it wasn't on one line.) 20:12:14 oh maybe this kernel is too old 20:12:17 (gdb) break gettimeofday 20:12:18 Cannot access memory at address 0x7ffff7ffb9f0 20:12:19 it is ubuntu 10.04 20:12:31 kmc, try disassemble on it? 20:12:31 kmc: mprotect to make it writeable first? 20:12:37 ah right 20:13:01 also I thought glibc called the vdso. rather than you calling it directly 20:13:06 i thought there efb 20:13:12 efb? 20:13:44 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 Isn't there a version of 'bfjoust' where programs are actually in-memory and can modify each other? 20:13:57 anyway I don't have debug symbols for that page 20:14:00 this is painful 20:14:05 (speaking of gdb setting breakpoints by modifying code) 20:14:10 olsner, what happened? 20:14:16 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 Neither of these restrictions applies to macros. 20:14:27 Vorpal: the code ran, but set the variable to 0xcc instead of null 20:14:32 hah 20:14:39 mroman: FukYourBrane? 20:14:47 mroman: http://esolangs.org/wiki/FukYorBrane not so popular. 20:14:50 olsner, I thought gdb used hardware breakpoints as long as there were enough around to spare 20:15:11 it probably doesn't have access to set those 20:15:26 olsner, I thought ptrace provided that? 20:15:59 hbreak -- Set a hardware assisted breakpoint 20:16:07 olsner, guess it doesn't by default? 20:16:28 may or may not work I guess 20:16:39 I think you only have like 4 of them per cpu 20:16:42 @ping 20:16:43 pong 20:16:44 why not so popular? 20:16:54 I find that to be much better than bfjoust. 20:17:03 It's complicated 20:17:09 bfjoust is simple 20:17:13 @pung 20:17:13 olsner, well it works to break on _init in /bin/cat at least 20:17:13 pong 20:17:19 The data buffer for each of them is the opponent's program buffer. 20:17:20 ok 20:17:23 Actually I guess runtime subroutines probably could be nested, although there would still be the restriction against desynchronized subroutines. 20:17:23 that seems weird. 20:17:28 olsner, not per core? 20:17:44 Vorpal: "edit: fuck, beaten" 20:17:54 kmc, on what? 20:17:54 Is skype not working for anyone else? 20:17:56 FukYorBrane sucks. :) 20:18:03 i was going to say what you had just said 20:18:08 hah 20:18:22 olsner, also what about hyper threading here ;P 20:18:23 I mean to BF programs running in the SAME memory. 20:18:35 *two 20:18:40 Vorpal: There's some undocumented special features in the hardware breakpoint #0, it had some sort of data-conditional (with masks) thingamajik. 20:18:45 like 20:19:07 fizzie, undocumented eh? Anyway data-conditional aren't that uncommon. Quite useful sometimes 20:19:14 probably very limited since it is hw 20:19:16 but whatever 20:19:37 .....+[]1...........[->]2... 20:19:45 where 1 is where the cell pointer of program 1 points to 20:19:46 Yeah, it was something very limited. 20:19:53 and 2 where the cell pointer of program 2 points to. 20:20:02 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 Vorpal: *shrug* I did mean cpu==core, but there may be interesting conditionals of course 20:20:09 JTAG is awesome btw 20:20:13 kmc: Is [vdso] in kernel address space in 32-bit Linux but user address space in 64-bit Linux? 20:20:26 shachaf, I doubt that... 20:20:35 no, i think it's user mapped in both 20:20:39 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 f57fe000-f57ff000 r-xp 00000000 00:00 0 [vdso] 20:20:52 b7827000-b7828000 r-xp 00000000 00:00 0 [vdso] 20:21:04 shachaf: that must be on a 64-bit kernel? 20:21:20 shachaf, aren't both of those in the the same address space? Below the upper 1 GB on 32-bit that is 20:21:27 kmc: Hmm, I guess it is. 20:21:51 on a 64-bit kernel, 32-bit processes get the full 4GB 20:21:58 ah 20:21:59 nice 20:22:00 though, I don't know where the magic vsyscall variables go then! 20:22:11 kmc: No, it's a 32-bit kernel. 20:22:13 kmc, they aren't on 32-bit? That fixed page I mean 20:22:24 kmc, so what would it matter 20:22:25 10MB below 4GB perhaps? 20:22:32 shachaf: huh 20:22:45 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 shachaf: the rest of libraries are mapped around 0xb0000000? 20:22:57 kmc: Yep. 20:22:57 so that one of those pages happens to be empty apart from the shared variables 20:23:05 and then you just map that page in specially 20:23:09 kmc, sounds reasonable? 20:23:14 because iirc that is how it is done 20:23:22 not 100% sure though 20:23:29 well it's tricky though 20:23:40 you have to make sure that user writes to that page will fault 20:23:50 (either to implement COW or just abort, it's not really relevant) 20:24:03 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 COW sounds counter-productive on the page that contains the current time and things like that 20:24:11 but the page has to be readable from userspace and writable from kernel 20:24:22 olsner: sure, but maybe you should allow userspace to COW that page if they really want to 20:24:28 olsner: maybe it's the simplest default behavior, i don't know 20:24:44 oh, i think i know what 20:24:51 you set up another mapping to that physical page 20:25:25 yeah you would do this anyway 20:25:33 fizzie, heh 20:25:47 because x86 doesn't have bits for "ro for user, rw for kernel" afaik 20:25:56 it just has "user" and "writable" 20:25:57 you have to make sure that user writes to that page will fault <-- just set the page protections for that? 20:26:25 kmc: there's a flag for ignoring write protection entirely in kernel mode 20:26:29 kmc, so you map that physical page into two different virtual addresses yes 20:26:46 then again, linux relies on that stuff for security so probably that's useless 20:26:46 olsner: oh yeah! 20:26:47 good stuff 20:27:00 i learned about that from the kernel exploitation book ;) 20:27:02 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:05 on by default 20:27:15 you can turn it off in the debug section of the kernel config 20:27:20 linux relies on it for several things 20:27:29 kmc, it does? Then why that flag? 20:27:34 for example read(2) should respect the page tables 20:27:35 or does it switch back and forth? 20:27:44 you should not be able to read into read-only memory 20:27:46 (heh) 20:27:59 so the writes within sys_read() or whatever should fault 20:28:02 yeah, you should only read *out* of read-only memory 20:28:11 you mean, write out of read-only memory ;) 20:28:12 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 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 specifically, you can annotate any instruction in the kernel with "if this instruction faults, jump to here" 20:28:47 (Apparently there's no hardware-assisted direct single-step feature on ARM.) 20:29:13 (And not too many people were actually using it.) 20:29:22 so the kernel honoring user memory mapping really has two parts 20:29:36 one is the address check, "is it above 0xc0000000" or whatever 20:29:37 fizzie, I guess gdb can emulate it using breakpoints 20:29:48 that whole approach to kernel/user memory access seems horrible 20:29:51 the other is handling faults on reads/writes to userspace 20:29:54 olsner: yes it is 20:30:15 I guess it was performant enough, and doing the checks manually is also pretty horrible 20:30:28 this is what x86 segmentation was designed for! 20:30:30 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 it's like ideal for this 20:30:45 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 fizzie, on x86 that is 20:31:05 but, linux doesn't use it because it's not portable 20:31:07 or x86-64 actually 20:31:21 PaX patches do use it though 20:31:38 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 kmc, pax must be 32-bit only then? 20:33:02 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 Vorpal: PaX has a number of features 20:33:56 kmc, okay? 20:33:59 most of them don't depend on segmentation 20:34:02 ah 20:34:13 i was talking about the particular feature of "kernel can't read from userspace unless it knows it's doing so" 20:34:19 right 20:34:26 which on i386 is implemented with segmentation 20:34:34 and on amd64 they have a slower implementation using some page table voodoo 20:34:40 which i don't understand in detail 20:34:44 kmc, heh 20:34:56 kmc, and on ARM? 20:35:11 and yeah I hear that VT-x supports what amounts to tagged TLB, which is a welcome feature 20:35:24 Vorpal: i don't know anything about the state of PaX on architectures other than x86-{32,64} 20:35:45 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 is ARM a clean architecture or is it just as bad? 20:36:19 I think the address space ID:s only come on some (higher-end? xeon?) cpus 20:36:25 ARM is cleaner than x86 20:36:28 there is less history, for one 20:36:33 but it's not without its share of weirdness 20:36:37 right 20:36:38 such as? 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 remember, the RISC philosophy is to push weirdness into the ISA, with the goal of making the implementation simpler 20:36:55 olsner, really? Hm 20:37:26 kmc, well, but any amusing examples? 20:37:35 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 olsner: I remember reading a sentence that sounded like that somewhat recently, too. 20:37:49 Vorpal: well, for one, most ARM chips support two different ISAs 20:37:53 ARM and Thumb 20:37:57 well true 20:37:58 and Thumb comes in two major versions too 20:38:03 kmc, also a 64-bit ARM is in the works 20:38:07 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 no product yet announced 20:38:17 so that will add a third ISA 20:38:18 ARM, Thumb, and Thumb-2 all have completely different ways of handling conditionals 20:38:27 hah 20:38:39 okay so it will add a fourth ISA then 20:38:45 and you can call between ARM and Thumb{,-2} code 20:39:01 the "am I in Thumb" bit is stored in the (ignored) LSB of the instruction pointer 20:39:04 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 which is nice, because it's saved and restored with calls 20:39:20 but also a little wacky 20:39:27 Vorpal: on ARM, *any* instruction can be made conditional 20:39:33 oh, like CMOV 20:39:33 this cuts down on the number of branches, hence pipeline stalls 20:39:36 yeah 20:39:41 but any instruction :) 20:39:43 fair enough 20:39:51 in Thumb-1 you have conditional branches only 20:39:53 kmc, fairly limited possible conditions though I guess? 20:39:58 in Thumb-2 you have this even wackier thing 20:40:23 oh? 20:40:26 you do your test or whatever, and then you issue a pseudoinstruction like IF or ITTF 20:40:32 IF means "do the next instruction only if false" 20:40:36 heh 20:40:40 ITTF means "do the next 2 instructions if true, and the one after that if false" 20:40:46 you can conditionalize 4 instructions this wya 20:40:49 isn't that the same as variable length instructions 20:40:50 x86 could've replaced its conditional jumps with conditional-execution prefixes 20:40:53 with prefixes 20:40:55 Vorpal: sort of 20:41:04 except the two instruction thingy... 20:41:06 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 Thumb-2 is a superset of Thumb-1, iirc 20:41:23 ah 20:41:26 also is there any overhead from the switching? 20:41:29 dunno 20:41:45 Thumb-2 is supposed to be mostly a replacement for the original ARM ISA 20:41:57 kmc, so you don't ever leave Thumb? 20:41:58 whereas Thumb-1 is limited and it's expected that you call back into ARM routines for some things 20:42:01 yeah 20:42:04 right 20:42:06 maybe a bit, for OS stuff. i don't know really 20:42:16 kmc, what about the ARM64 stuff then? 20:42:17 regarding "fairly limited possible conditions", i think it has the usual ones 20:42:18 based on how common the ARM/Thumb cross-jumps are, I think they're supposedly mostly overhead free 20:42:20 not released yet, but in the works 20:42:24 no idea about ARM64 20:42:31 kmc, iirc there wouldn't be a new Thumb variant for it 20:42:44 no, they will probably try to design a single variable length encoding like Thumb-2 and stick to it 20:42:49 maybe they just decided to go with a Thumb like 64-bit thingy 20:42:56 they should call it Leg and use 64-bit long instructions 20:42:56 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 so it can be in a privileged flag bit 20:43:07 olsner: hahaha 20:43:21 kmc, Thumb-2 is variable length? What about Thumb-1 and ARM? 20:43:23 Vorpal: another wacky thing about ARM is that there are multiple incompatible FPUs used with it 20:43:32 ARM has 32-bit instructions 20:43:39 hah 20:43:42 both Thumb ISAs have some 16- and some 32-bit instructions 20:43:45 that is huge 20:43:56 one advantage of Thumb is, it executes much faster on embedded processors with only 16-bit data bus 20:44:01 heh 20:44:13 ARM isn't only for shiny smartphones, the cheapest ARM chips cost like $3 20:44:24 I know 20:44:30 there are many variants of ARM owing to its licensed nature 20:44:32 that is in bulk though 20:44:46 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 anyway why the incompatible FPUs 20:45:04 Vorpal: because they didn't specifiy one initially, and then different licensees integrated differet ones? 20:45:07 i don't know really 20:45:08 olsner, what about long jumps though? 20:45:12 like 3DNow / MMX, but worse 20:45:16 ah 20:45:21 ARM does have a uniform way to talk to coprocessors, though 20:45:26 there is a set of instructions reserved for that 20:45:31 that's how you talk to the MMU too, iirc 20:45:32 kmc, I hope the high end ARM does have a unified FPU? 20:45:33 if you have one 20:45:33 Vorpal: for jumping far, Leg is recommended instead of ARM 20:45:40 olsner, ... 20:45:49 Vorpal: yeah, there is now a standard SIMD instruction set too 20:45:50 NEON 20:46:13 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 err 32-bit instruction* 20:46:34 Vorpal: also, in addition to ARM and Thumb, there is another mode for hardware-assisted JVM 20:46:38 though it is vestigial in recent chips 20:46:45 kmc, riight? What mode is that 20:46:51 Jazelle 20:46:53 huh 20:47:01 what did it provide for JVM support then? 20:47:07 and there's *another* mode called ThumbEE (Thumb Execution Environment) 20:47:21 which is a variant of Thumb used for running managed code more efficiently 20:47:33 Vorpal: load the address, then jump to it ... the usual thing with RISC and large immediate values, I guess 20:47:43 "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 Vorpal: they never published the specs you would need to make a JVM that takes advantage of Jazelle 20:48:15 olsner, ah okay. I seem to remember AVR did have a long jump though, even though otherwise it was mostly RISC 20:48:33 kmc, that sounds stupid 20:48:51 "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:57 so yeah 20:48:58 pretty shitty 20:49:03 and it never really caught on, iirc 20:49:09 ThumbEE is the less shitty replacement 20:49:09 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:27 olsner, ah 20:49:41 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 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 fizzie, so why wasn't Qt compiled like that by default? 20:50:23 Or is that -mfpu=neon. Anyway, the one that makes it do autovectorization. 20:50:40 -!- azaq23 has joined. 20:50:41 Some option that contained the substring "neon" anyway. 20:50:49 -!- azaq23 has quit (Max SendQ exceeded). 20:50:57 fizzie, so why wasn't it done like that by default 20:51:13 fizzie, anyway Stellarium uses opengl right? So why not just use the GPU of the device 20:51:13 Might not have been so well-supported by GCC when it was originally compiled, or something. 20:51:16 to do the heavy work 20:51:27 It does use EGL, I believe, yes. 20:51:46 please tell me there is a hardware GPU on that phone? 20:51:49 Sure. 20:51:57 hm then what 20:52:01 But that kind of depends on the software author offloading enough work there. 20:52:06 right 20:52:26 and that you can do efficient communication between CPU and GPU to get useful work done 20:52:49 olsner, well stellarium just need to provider a couple of shaders and a sky texture 20:52:51 that is all really 20:53:03 oh and update some coordinates for where the user is looking 20:53:08 hmm, so what's Qt doing in there? 20:53:12 no idea 20:53:30 It does have a Qt UI. Anyway, I don't know the details; just saw the reported results. 20:53:36 right 20:53:49 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 fizzie, have you recompiled it like that? 20:54:13 Droid, I think. 20:54:21 And no. I mean, I don't have Stellarium installed either. :p 20:54:27 I don't think I have many Qt apps on it. 20:55:28 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:55:42 heh 20:56:31 yay for abandoned platforms 20:56:35 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 It's a VLIWy thing, I've never really written code by hand for one. 20:56:52 heh 20:56:56 Probably not a sensible thing to do either, but just for recreation. 20:56:57 nice 20:57:05 fizzie, what is it normally used for? 20:57:08 256-bit instructions. 20:57:16 It does the usual, video/music decoding. 20:57:17 and those are used for what? sound? 20:57:19 right 20:57:39 I think on later OMAP chips they've dropped the separate DSP core and just use the GPU. Possibly. 20:58:02 which brand is OMAP? 20:58:05 Oh, it does JPEG encoding for the camera app too. 20:58:10 the arm echo system is confusing 20:58:18 fizzie, ah you can get raw photos then? congrats 20:58:20 OMAP is TI's platform. 20:58:43 You can get raw images if you install the custom camera drivers, yes. The stock camera app doesn't do it. 20:58:43 when used for music, the GPU could be called a Groove Processing Unit 20:58:51 fizzie, fair enough 20:59:02 olsner, you are not oerjan 20:59:03 stop that 20:59:23 Vorpal: stop what? 20:59:25 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 olsner, the terrible puns 20:59:57 heh 21:00:27 How does the rules for ARM Jazelle to use BXJ work like that? Why is permission required? 21:00:44 zzo38, looks like an NDA? 21:00:50 I think it's because they want money for it 21:01:23 or possibly they have licensed the java stuff from somewhere that requires licenses 21:01:33 Is there a version of ARM that does not have those instructions? 21:01:55 kmc, looks from the wikipedia summary like ARM64 will be similar to ARM32. Which doesn't seem sensible to me 21:01:58 yes, I think most versions don't support the extension at all 21:02:46 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 ... 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 anyway i do like the core ARM architecture 21:03:03 conditional instructions are cool 21:03:16 the instruction pointer is a general purpose register 21:03:21 fizzie, nice. Is that as many cores as the PS2 yet? 21:03:37 oh also 21:03:49 in addition to deciding which instructions are conditional 21:03:49 hmm, so that's like 9 different cpu-like things in one SoC 21:03:57 you can also decide which arithmetic instructions update the condition flags 21:04:10 that's kind of necessary for it to work well 21:04:16 or 6 different ones, plus three that are similar to three of those 6 21:04:17 hm my phone has a Exynos 4212 Quad 21:04:21 I should check the specs on that 21:04:45 also there's a cool instruction which transfers any subset of the registers to or from memory 21:05:02 which can be use for pushing/popping blocks of registers across a function call 21:05:05 or just for bulk data transfers 21:05:44 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 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 Also, it's designed by Sophie Wilson too. 21:06:24 that's neat 21:06:48 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:52 yeah 21:06:58 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 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 don't think that is going to work if the bitmask is immediate 21:07:51 yeah 21:07:53 and if it isn't the function to save registers seems kind of useless 21:07:54 (After buying Element 14, the folks that split out of Acorn.) 21:08:06 another bit of ARM trivia: in the standard ABI, there's a register reserved for use by the *linker* 21:08:17 Vorpal: it is possible that they will change one or two things in ARM64 21:08:23 linking two functions might require the linker to emit some code, if the functions are sufficiently far apart 21:08:36 olsner, yes they likely will 21:08:47 Well, MIPS has one register reserved for the assembler. It's just fair. :p 21:08:53 olsner, it is going to be "mostly the same" as the 32-bit ARM ISA though it says 21:08:54 (Temporary in pseudo-ops.) 21:09:35 And two for the kernel. I wonder if/how Linux-on-MIPS uses those. 21:09:47 program counter as a GPR also means you get PC-relative addressing in a uniform way for free 21:11:20 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 No compass at all, so can't really comment first-hand. 21:17:33 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:18:41 fizzie, ouch 21:19:07 It's very restricted which two instructions you can ||, I think there weren't more than three or four specific combinations. 21:19:52 And I think with additional restrictions on the available registers/addressing modes because they were running out of bits. 21:21:14 heh 21:21:39 Also funny: http://sprunge.us/bGgA 21:21:54 The "useful.txt" lists which files are worth looking at. There were seven. 21:22:20 (It was a giant zip of documentation they gave us.) 21:22:59 heh 21:23:08 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 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:23:49 heh 21:24:38 I liked that course a whole lot, incidentally. 21:24:57 oh? 21:25:26 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 And also to play with unusual (from my viewpoint, anyway) hardware. 21:26:19 all good fun :) 21:26:56 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 I'd like to write me some "GPU assembly" at some point 21:27:10 heh 21:27:20 fizzie, what about VHDL or Verilog? 21:27:47 olsner, you can't really, the required information isn't really public 21:27:50 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:27:59 Vorpal: exactly 21:28:32 intel supposedly released complete documentation on their ivy bridge GPU, but probably none of that is applicable for other vendors 21:29:00 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 in the worst case it's just more x86 cpus 21:29:10 fizzie: i don't think i heard about it 21:31:47 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 olsner, that is intel GPU, not very useful :P 21:31:53 ... 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 fizzie, you must have spent ages on that project 21:33:07 Vorpal: Probably a bit more than we should've. :p 21:33:14 fizzie, right 21:33:33 fizzie, best in class though? 21:33:34 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 fizzie, was that the graph calc interface that looked weird? 21:34:04 I remember you mentioning something like that 21:34:28 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:32 Yes, it was that one. 21:34:47 fizzie, I don't remember how it was weird though 21:35:24 Here's a collection of photos from our slides: http://users.ics.aalto.fi/htkallas/dsp-collage.png 21:35:27 fizzie: cool 21:35:34 It had that whip image, at least. 21:35:44 And another whip-themed thing for when you pressed "send" on the calc. 21:36:12 hm right 21:36:14 that was it 21:36:14 (Due to the name of the course, "SPÄNK", "signaaliprosessorit ja äänenkäsittely", "DSPs and sound processing".) 21:36:23 riiight 21:36:40 Also I think the lecturer had some number of spanking-related puns. 21:39:15 riiight 21:39:57 (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 Oh, right: it didn't even have four buttons, it had four DIP switches. 21:41:04 One of the other platforms were some sort of musician-oriented device, so it had actual turnable knobs and anything. 21:43:40 heh 21:44:35 http://www.chameleon.synth.net/english/index.shtml <- that thing. 21:44:40 I think. 21:44:51 At least there's a link from the old course page to there, so it must be somehow related. 21:45:02 And it does say "24bit programmable audio dsp engine", so I suppose it's programmable. 21:45:30 What you DSPing 21:45:43 Nothing, now; it was just an old course. 21:45:49 k 21:46:10 Chameleon has a Motorola DSP56k in it. 21:47:04 24-bit words, how fancy. (The C54x has 16-bit words.) 21:48:21 (And the third device was a 32-bit floating-point SHARC from Analog Devices; technically even fancier.) 21:49:11 heh 21:50:22 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:55:53 ah 21:56:00 so not the same platform for everyone? 21:56:03 kind of sad 21:56:36 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 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 (Got sidetracked reading our old code here.) 22:15:45 fizzie, side tracked from what? 22:16:08 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:21:23 * itidus21 finds this question amusing. 22:22:07 I think he may be sleeping 22:22:40 ircing and sleeping, all in a day's work 22:23:02 quite 22:23:35 -!- DHeadshot has quit (Ping timeout: 246 seconds). 22:23:52 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 i do the math (no pun intended) and decide that by doing absolutely nothing i am probably contributing to society 22:24:03 fizzie, right 22:24:25 itidus21, you have really low self esteem 22:24:35 not healthy 22:24:57 well if the bad guys are contributing -7 -5 -22 -3.. then 0 is a lot 22:25:13 -!- DHeadshot has joined. 22:25:14 but i'm not a 0 22:25:19 some days i'm maybe a -2 22:25:30 -!- boily has quit (Quit: WeeChat 0.3.8). 22:25:32 oh comeon 22:25:37 come on* 22:25:48 also that way to measure it seems rather unusual 22:25:52 what do you mean by it 22:26:19 > ((-7) + (-5) + (-22) + (-3) + 0 ) / 5 22:26:20 -7.4 22:26:32 > ((-7) + (-5) + (-22) + (-3) ) / 4 22:26:33 -9.25 22:26:38 that seems pretty pessimistic 22:26:39 so i am doing 22:26:48 such an outlook on your own contribution 22:27:17 > (-7.4) + 9.25 22:27:18 1.8499999999999996 22:27:33 lol 22:27:48 I'm pretty sure that is not a good model for contributing to a channel 22:28:10 i didn't just mean the channel 22:28:25 but contributing to anything 22:28:49 -!- copumpkin has quit (Quit: Computer has gone to sleep.). 22:29:24 > ((-7) + (-5) + (-22) + (-3) + 1.85 ) / 5 22:29:26 -7.029999999999999 22:29:32 itidus21, even more pessimistic 22:29:37 things are getting better already 22:31:15 heh 22:31:33 itidus21, what if you actually make a positive contribution? 22:31:38 like +5 or something 22:32:54 it is impossible by any means to avoid being in someone elses way some of the time 22:33:05 but thats ok 22:33:26 im kinda tired and sleepy, but i plan to visit the chemist 22:33:57 ok she opens at 9am 22:34:02 @time 22:34:03 Local time for itidus21 is Sat Jun 30 08:32:23 22:34:11 !bfjoust simple [>[(+)*10[-]](+)*15>[(+)*10[-]](-)*15] 22:34:14 ​Score for quintopia_simple: 16.9 22:34:41 > ((-7) + (-5) + (-22) + (-3) + (1.85+5) + 16.9) / 6 22:34:42 -2.2083333333333335 22:36:53 Option 2, Depart Sat, 9:12 am, Arrive 22:36:53 Sat, 9:25 am, Duration 22:36:54 0h 13m 22:40:32 i'll be happier when this trip is over 22:42:48 !bfjoust simple (>[>>(>(+)*20[-]++)*20](+)*15>[>>(>(+)*20[-]++)*20](-)*15)*15 22:42:50 ​Score for quintopia_simple: 24.9 22:42:55 :P 22:47:28 !bfjoust simple (>[>>(>(+)*35[-]++)*20](+)*15>[>>(>(+)*35[-]++)*20](-)*15)*15 22:47:31 ​Score for quintopia_simple: 22.1 22:47:35 !bfjoust simple (>[>>(>(+)*20[-]++)*20](+)*15>[>>(>(+)*20[-]++)*20](-)*15)*15 22:47:38 ​Score for quintopia_simple: 25.0 22:47:46 -!- MDude has quit (Ping timeout: 276 seconds). 22:52:31 !bfjoust simple (+)*10(>[>>(>(+)*20[-]++)*20](+)*15>[>>(>(+)*20[-]++)*20](-)*15)*15 22:52:33 ​Score for quintopia_simple: 29.2 23:06:19 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:48 !bfjoust a http://sprunge.us/hKeD 23:14:51 ​Score for quintopia_a: 55.6 23:15:42 !bfjoust a http://sprunge.us/gWfG 23:15:45 ​Score for quintopia_a: 55.3 23:16:11 !bfjoust a http://sprunge.us/EiIc 23:16:14 ​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).