Parrot 4.0.0 "Hyperstasis" | parrot.org | Log: irclog.perlgeek.de/parrot | #parrotsketch meeting Tuesday 19:30 UTC
Set by moderator on 18 January 2012.
dalek p: 2246b9d | jnthn++ | src/HLL/Grammar.pm:
Fix preclim handling in operator precedence parser to be consistent with STD's semantics.
00:09
kudo/stdinit: 4f23c1a | jnthn++ | src/Perl6/Actions.pm:
Fix assign_op calls.
00:10
p/bs: 19f1639 | moritz++ | / (2 files):
[bigint] fix detection of negative numbers from binary ops

This should fix RT #109740
00:17
p/bs: 2246b9d | jnthn++ | src/HLL/Grammar.pm:
Fix preclim handling in operator precedence parser to be consistent with STD's semantics.
p/bs: 239b54f | jnthn++ | / (6 files):
Merge branch 'master' into bs
00:33 tty234 joined 00:47 whiteknight joined
whiteknight good evening, #parrot 00:48
benabik o/ whiteknight
whiteknight hello benabik
01:08 woosley joined 01:39 woosley left 01:40 woosley joined
dalek sella/gh-pages: f008d11 | Whiteknight++ | index.md:
fix weird formatting issue. benabik++
01:56
03:59 Util joined 04:04 silug joined 04:10 zby_home_ joined 06:34 silug joined 06:36 Infinoid joined 07:40 he joined 08:06 mj41 joined
alvis msg NotFound if you have some time, please see git://gist.github.com/1778408.git 08:23
aloha OK. I'll deliver the message.
alvis msg NotFound i keep getting an error I'm unable to figure out. thanks.
aloha OK. I'll deliver the message.
alvis cotto: ping 08:24
08:26 lucian joined
he Found a bug introduced in parrot 3.9.0. See pubs.opengroup.org/onlinepubs/79087...leep.html, it disallows usleep >= 1000000 microseconds. ("... must be less than 1,000,000"). I'm on a platform which enforces this restriction. Ref. to diff follows. 08:30
There's a ">" which should be ">=". 08:31
nopaste "he" at 192.168.1.3 pasted "Fix for usleep(usecs > 1,000,000)" (13 lines) at nopaste.snit.ch/115884
he (and the comment should be "(usecs >= 1,000,000)", of course) 08:32
alvis cotto: ok, well, it's probably way too late. i'll try again tomorrow (at a more reasonable hour).
he Bah: TICKET_CREATE privileges missing for me (user heidnes) 09:02
sorear you seem to have missed the memo where we switched to github 09:03
trac is read-only for everyone
because we want new tickets to go in one place only
he The link "Report an issue" on www.parrot.org still points to trac. 09:05
sorear who can fix that?
he "not me!" :)
sorear (don't let the @ fool you, I'm mostly outside of the project) 09:06
alvis sorear & he: i'll poke around tomorrow evening and see if i can get things to point to right place. 09:22
make that, this evening. 09:23
09:28 lucian joined
alvis he: please use github.com/parrot/parrot/issues 09:31
msg moritz the release_manager_guide says I should ask "language project leaders," especially Rakudo, if there are any release blockers (to the 4.1.0 release). 09:38
aloha OK. I'll deliver the message.
alvis msg moritz are there? 09:39
aloha OK. I'll deliver the message.
he alvis: ok, logged in and will submit the 1-char bug.
seme is there some kind of issue with hg or git when checking things out with en_GB.UTF-8 as your locale setting? I checked out another project and it wouldn't build because of that weird << character
alvis he: thanks!
seme: you might ask dukeleto. he's a git guru. 09:42
seme thanks
alvis seme: so is Coke, btw.
alvis sleep() 09:45
aloha (parrot/parrot) Issues opened : 714 (Use of usleep in conflict with SUSv2 (fencepost error)) by he32 : github.com/parrot/parrot/issues/714 09:47
09:51 woosley left
moritz aloha: I'm not aware of any blockers, but it's been a few days since I've tested rakudo on parrot/master 09:51
erm sorry, meant alvis 10:09
10:35 particle joined 11:03 schmooster joined
he Hm, looks like that bug is a 3.9.0-only thing. 11:03
11:47 Hunger joined
dalek p/bs: ffeec9c | jnthn++ | src/6model/serialization.c:
Set SC on objects as we deserialize them.
12:17
p/bs: 7275a66 | jnthn++ | src/6model/serialization.c:
Serialize/deserialize v-table and method cache from STable.
p/bs: 2ea450f | jnthn++ | src/6model/serialization.c:
Introduce concept of a cloned code reference; this will be used when implementing closure serialization.
12:19 seme joined
seme hey guys... I'm hoping one of you can help... I've been trying to figure out this weird encoding issue I'm having... I checked out the code and haven't made any changes but when I look at the parrot squaak example I can see weird characters Ƃ and Ā« Ā»... very odd I looked into resetting my locale which is en_US.UTF-8 and looked at various git settings which may help with no success 12:21
any pointers would be greatly appreciated
dalek kudo/nom: 828e4d6 | moritz++ | src/core/Exception.pm:
allow numification of X::AdHoc

This is a bit questionable, but a spectest requires it In the end we might want to make X::Adhoc a wrapper around a payload, and only use the stringification for HLL interop.
12:24
12:47 jsut joined
dalek kudo/stdinit: 7b6cf5d | moritz++ | src/ (3 files):
Merge remote branch 'origin/has-self' into stdinit
13:32
kudo/stdinit: 48c50ff | moritz++ | tools/build/NQP_REVISION:
bump NQP revision to get preclim fix
13:58 Coke joined 14:00 mtk joined
seme is there an alternative for token infix:sym<-> for when your symbol includes < or > 14:29
PerlJam seme: texas quotes probably 14:30
seme what are they?
ooh don't search google for texas quotes ;) 14:31
PerlJam seme: texas quotes are << and >>, but perhaps guillemets work? («») 14:39
I'm not really sure anymore since I haven't played with things in a while. 14:40
seme: btw, you're talking about in NQP, right? 14:41
aye, guillemets work in nqp 14:46
random example: Perl6/Grammar.pm:2510: token infix:sym«<==» 14:47
particle github.com/perl6/nqp/blob/master/s...ar.pm#L691 14:48
14:57 PacoAir joined 15:09 tty234 joined
moritz now if you ever want to write an op that includes both > and Ā»... 15:32
masak just surround it with <<< >>> :) 15:33
15:44 Psyche^ joined
dalek p/bs: b06857a | jnthn++ | src/6model/reprs/P6opaque.c:
P6opaque should ensure its REPR data is calculated before any serialization of it takes place.
15:45
p/bs: f6f2e8a | jnthn++ | t/serialization/03-closures.t:
Add initial test for handling of cloned code refs (not testing outer handling yet, though - just very simple case of cloning).
p/bs: f31afe1 | jnthn++ | src/6model/serialization. (2 files):
Initial changes to add a closures table.
p/bs: 317ff89 | jnthn++ | src/6model/serialization. (2 files):
Start sketching out cloned code ref serializtion, in prep for really doing closure support.
p/bs: b81e767 | jnthn++ | src/6model/serialization.c:
Add initial code for deserializing a row from the closures table; this will eventually grow to be the full closure deserialization, but doing something much simpler for now.
p/bs: be303bd | jnthn++ | t/serialization/03-closures.t:
Update test case to actually really use the static code object.
p/bs: bf9b58e | jnthn++ | src/pmc/nqplexinfo.pmc:
Get NQPLexInfo to remember the Sub it is attached to.
p/bs: 664e87c | jnthn++ | src/6model/serialization.c:
Locate static code ref that a closure is based on, plus a few other fixes. First tests for cloned code objects now pass; this is the first pre-requisite for closure serialization done.
rrot/714/scheduler_bug: 418a184 | dukeleto++ | src/platform/generic/time.c:
Attempt to fix a fencepost error, original patch from he32++
15:57
PerlJam Where's Parrot's list of gsoc ideas? 15:58
(I'd like to include a link in an email to the local university CS club) 16:01
seme thanks guys... I'll have to take a look at that a little more
I actually thought that was an error in the encoding but it was intentional :) 16:02
16:03 benabik joined, trey joined 16:16 dmalcolm joined
dukeleto PerlJam: don't think we have one yet 16:26
PerlJam Bummer.
dukeleto PerlJam: we have some of github issues marked with "gci"
PerlJam: and I am sure our idea list from last year is on the wiki and still relevant
PerlJam: github.com/parrot/parrot/wiki/Goog...Task-Ideas 16:27
PerlJam: that is GCI, not GSOC, but many tasks could be in either
PerlJam: care to start a GSOC wiki page?
PerlJam My email to the cs club today was just to get them a little fired up. The next one I send will be when they can actually do something besides start a dialog with an open source community. 16:28
dukeleto: ENOTIME (or ... when I do have time I will have likely forgotten about gsoc because something else will be weighing on my mind) 16:29
dukeleto PerlJam: well, just tell the cs club people to come talk to us. I will leave it at that. 16:47
PerlJam will do
seme hey guys... is there a way to identify on what parrot is failing... I am getting the error "Invalid character in ASCII string" but I can't tell where to look 16:49
I can tell that it is occuring while it is processing the Grammar.pg file
dukeleto seme: inteeresting 16:59
seme: can you gist the full output of the command you are running and the full error?
seme sure one sec
dukeleto seme: along with OS info and parrot version
seme pastebin.com/bqAhXpCu 17:02
let me know if that is enough
I looked at the osutils file but my PIR understanding isn't that great yet... I couldn't devine from that what was happening 17:03
17:09 benabik joined
benabik o/ #parrot 17:12
dukeleto benabik: hola 17:16
seme: that error really sucks
seme he hee yeah 17:17
dukeleto seme: and pynie hasn't seen any love lately
seme I'm trying to learn and give it some ;)
dukeleto seme: thanks!
benabik: can you impart some wisdom on pastebin.com/bqAhXpCu ?
seme I've basically started rewriting it step by step with the intent of leanrning and recreating what is there
dukeleto seme: that sounds like a good learning exercise 17:18
seme hopefully that will enable me to work with it
dukeleto seme: part of the problem is that pynie is built on deprecated foundations
seme: PGE (parrot grammar engine) is somewhat elderly and not worked on anymore
seme well what would be a good example of how to write a language using a modern version of parrot?
dukeleto seme: the squaak tutorial 17:19
seme perhaps I can just start by following those practices and use the existing pynie and puffin as a guide
dukeleto seme: let me find a good link
seme ooh ok great. I went through that and I think I had a good idea of what was going on
dukeleto seme: there are old version of it around
seme there is a bit black magic going on around dealing with indentation... I'm trying to understand that right now
dukeleto seme: hmm. If squaak is too easy, maybe cardinal would be better suited to you: github.com/parrot/cardinal 17:20
seme: cardinal is ruby on parrot
seme: yes, i can't say that i understand all the indentation black magic
seme: a good policy is to "git blame" code and see who touched it last
seme: and then send an email to parrot-dev with questions and cc them if you can find their email
seme: you can find peoples contact info in the CREDITS file 17:21
seme thanks... I'm not sure I can write an intelligent question about it just yet... still have a lot of reading to do :) I hate asking until I've exhausted the docs and google :)
I'm thinking of going back and getting my masters... this is really the kind of thing that I love but I'm not sure if getting a degree would allow me to find work related to this kind of thing 17:23
dukeleto seme: sure, i understand that. It is a good way to learn. But don't be afraid to ask questions :)
seme: benabik is working on a grad degree on this stuff, he might be some help
iirc
seme: my degree was in math :)
seme benabik: any thoughts?
dukeleto can't find the new squaak tutorial 17:24
this doesn't bode well for outsiders trying to find our docs 17:25
seme I may have followed the older tutorial
coolnamehere.com/geekery/parrot/learn/ looks interesting
dukeleto seme: docs.parrot.org/parrot/latest/html/...orial.html 17:26
17:26 davidfetter joined
dukeleto seme: yes, that tutorial is good too. I help write some of it :) 17:26
davidfetter: wazzup, stranger?
davidfetter: still in PA?
davidfetter dukeleto, not atm. WFH so Sarah can use the car for appointments today 17:27
seme is it even possible for people to get paid working on this stuff?
dukeleto seme: define "this stuff"
seme language design/implementation, etc
davidfetter PTO tomorrow--need to bring $son to Milwaukee (the two-e one, not the two-i suburb of Portland) for obligatory showing-off this weekend
seme, just about anything you can imagine, someone gets paid to do :) 17:28
dukeleto seme: i got paid by The Perl Foundation to hack on a parrot grant. Wasn't a full time job, but I did get paid :)
seme: i would say that people who understand languages and compilers at a deep level shouldn't have a problem finding a job
seme he hee... yeah but as a career?
dukeleto: finding a job isn't a difficult issue.. but doign what you like well now that is a completely different thing 17:29
dukeleto seme: everybody is different. I am pretty sure my extensive involvement in parrot helped me get my current job
seme :-)
and if you get nothing else out of it, well I think you're swell ;) 17:30
davidfetter dukeleto, so i'm wondering about differential parse tree attacks
dukeleto seme: thanks!
davidfetter: GO ON....
seme: i try my best. Are you currently enrolled in any kind of university?
seme: if so, we want you in Google Summer of Code :)
seme dukeleto: no i graduated a long time ago... I've been working in finance but find it less than satisfying... 17:31
davidfetter well, according to meredith patterson, an old pg hand and security expert, finding where different implementations of a spec do different things is a "weaponizable" way to find 0-day exploits
so naturally, i thought of perl6
dukeleto davidfetter: interesting
davidfetter: so what is up with "parse tree attack"? Describe a simple parse tree attack 17:32
davidfetter: is this like a third cousin to hash table DOS?
davidfetter www.cs.dartmouth.edu/~sergey/langse...sec-tr.pdf
dukeleto We have developed a powerful technique to enhance code auditing and protocol analysis, known as the parse tree differential attack [8], wherein we give two different implementa- tions of the same specification identical state and input parameters, consider their decodings as concrete parse trees, and enumerate the differences between the trees. Deviations be- tween the trees indicate potential problems, 17:34
e.g. an area of implementor discretion due to specification ambiguity or an implementation mistake.
ok, i understand now 17:35
davidfetter: very interesting
davidfetter: yeah, perl 6 is like a playground for that kind of attack research
davidfetter that's what i get for a couple of decades' worth of hanging around with security geeks, even though i've never been one
dukeleto davidfetter: that attack relies on the ability to actually get a parse tree, though. But usually, that is possible 17:36
davidfetter yes, it is
dukeleto davidfetter: good thing we change the way our ASTs work frequently enough to keep those blackhats busy ;)
davidfetter heh 17:37
actually, i was thinking in terms of using perl6, etc., for this "weaponization."
the best defense is, in this case literally, a good offense. finding those attacks before the black hats have them makes you more secure, not less 17:38
dukeleto davidfetter: but how do you compare the parse trees of different perl 6 implementations? 17:39
davidfetter: they are not going to be in the same formate
format, rather
davidfetter not quite what i had in mind
dukeleto davidfetter: for instance, Niecza (perl 6 on mono) has a totally different AST than Rakudo, iirc
davidfetter: what did you have in mind?
davidfetter more like using p6 to find such attacks
dukeleto davidfetter: ah! Ok. I like it.
davidfetter: they *do* need a killer app already... 17:40
dukeleto ducks
davidfetter although of course if it can find likely attacks on itself, there's value to that, too
Coke in backscroll - my involvement in open source helped me get at least one of my jobs. 17:41
davidfetter has this awful feeling he's treading close to things that are UNDECIDEABLE
Coke (but I find I can do better financially if I work first, and do OS as a subset, or on the side.)
davidfetter seme, i haven't earned a nickel this century outside what i do around open source
benabik My ears are burning... 17:42
davidfetter seme, sometimes i work on proprietary software, but neither much nor often, and i'm frequently helping people open the source to stuff that was proprietary
dukeleto, does doing that kind of analysis fit with your understanding of what p6 is good at? 17:44
dukeleto davidfetter: sure, it sounds like something p6 would be good at
davidfetter aware that any turing-complete language can do any task that any other can, but there's a suitability question beyond that
dukeleto seme: any university student can take part in GSoC, so if you go back to school, you could get paid by google to hack on open source 17:45
seme: times surely have changed
seme: nobody was paying anybody to learn when I was in school...
davidfetter suspects that somewhat larger sums are available from google just by checking the job postings that include open source 17:46
seme, what have you been working on in open source lately?
dukeleto some parts of google are OSS-friendly, other parts, not so much
GSoC offsets all the non-OSS-friendly parts of google, or tries to, anyway
googlers have explained to me that google would like to opensource lots of stuff, but most of their code is so tightly coupled to their crazy infrastructure that it is not worth the effort 17:47
davidfetter dukeleto, an interesting slide deck on $subject: www.cosic.esat.kuleuven.be/publicat...lk-186.pdf
benabik dukeleto: It _looks_ like Parrot thinks there's a non-ASCII character in Grammar/Grammar.pg
dukeleto benabik: would you agree that that error message should die in a fire? 17:48
benabik: a line number would be nice...
benabik dukeleto: The line it's claiming the error is from is ifh.'encoding'(readall)
dukeleto: I think it's a from Parrot error, not a from PCT error.
dukeleto seme: take a look at tools/dev/dedeprecator.nqp 17:49
seme: it searches for deprecation code constructs. Running it on pynie might lead to some revelations
s/deprecation/deprecated/
seme: it uses github.com/parrot/parrot/blob/master/api.yaml 17:50
benabik dukeleto: It _looks_ like parrot thinks there's a byte >= 0x80 in Grammar/Grammar.pg, but I don't see it. 17:57
dukeleto Useless fact of the day: TLDR is also the Texas Department of Licensing and Regulation 18:01
benabik Oh. 18:02
dukeleto: PGE is expecting an ASCII file, but it's getting a UTF-8. --encoding=utf8 needs to be passed to PGE. 18:04
benabik has to do $work for a bit.. 18:05
18:07 dmalcolm joined
dukeleto seme: did you catch that? 18:13
seme: i think our default encoding changed since pynie was last updated 18:22
seme: PGE expects ascii by default, but i think the rest of parrot now defaults to utf8
benabik dukeleto: setup.pir: add after line 56: $P0['pir_pge_flags'] = '--encoding=utf8'
dukeleto benabik++ 18:23
benabik dukeleto: Untested, of course. :-D
As a random note: To find a range of characters by hex value in vim: "/[" <Ctrl-V> "x80-" <C-V> "xff]" <Enter> 18:26
18:32 lucian joined
dalek p/bs: e4f5e80 | jnthn++ | t/serialization/03-closures.t:
Add a failing test for closure serialization.
18:45
p/bs: 40269bf | jnthn++ | src/6model/serialization.c:
Add a column to the closures table for the outer context.
p/bs: 9bdbaa1 | jnthn++ | src/6model/serialization. (2 files):
Update serialize/deserialize code to set up for contexts table and data segment.
p/bs: 5ee3a41 | jnthn++ | t/serialization/03-closures.t:
Correct test count.
rrot: 0f1422c | jkeenan++ | src/hash.c:
[codingstd] Rebreak line to conform to linelength standard.
19:10
rrot: ad65ada | jkeenan++ | src/hash.c:
[codingstd] Rebreak line to avoid cuddled else.
rrot: 2cabfb6 | jkeenan++ | src/hash.c:
[codingstd] No space permitted before closing paren.
rrot: 118b706 | jkeenan++ | src/hash.c:
Revert "[codingstd] No space permitted before closing paren."

This reverts commit 2cabfb6815c86ed86056edabdff0b14cb804b302.
19:13 cogno joined 19:15 zby_home joined
ttbot Parrot 2cabfb68 i386-linux-thread-multi make error tt.taptinder.org/cmdinfo/67941 19:17
dukeleto ttbot lives! 19:22
msg jkeenan looks like your recent codingstd fixes broke the build 19:23
aloha OK. I'll deliver the message.
Coke seen ttbot? 19:25
aloha ttbot was last seen in #parrot 8 mins 25 seconds ago saying "Parrot 2cabfb68 i386-linux-thread-multi make error tt.taptinder.org/cmdinfo/67941". 19:26
Coke oh, there it is!
vanished in the dalekspew.
19:58 dmalcolm joined 20:06 lucian joined
seme why is the default for setup.pir to build the artifacts in the same directory as the primary code 20:55
nice plumage dies when you type help... 20:58
is plumage an active part of parrot any more?
Coke I believe fperrad was the main developer on that, non? 21:00
seme does parrot have a bug/issue site? 21:04
tadzik it uses github issues 21:05
seme ooh... I looked and only saw 5 closed issues so I didn't think it was being used
dalek rrot: f4f5025 | jkeenan++ | / (2 files):
'ARGMOD' not appropriate with 'const'; must use 'ARGIN'.
21:06
seme never mind... I see 21:07
was looking at the wrong repo
do you guys ever get together and talk about the future of parrot... I'd be interested in hearing more about what is going on and where the project is going... I have been reading the blogs but was hoping for more ;) 21:08
tadzik whiteknight++ has written some nice posts about it 21:10
NotFound seme: we are here together ;) 21:12
dalek rrot: 3bc818b | jkeenan++ | / (2 files):
[codingstd] No hard tabs.
21:13
NotFound msg alvis I can't reproduce your problem 21:25
aloha OK. I'll deliver the message.
Coke seme: i'd try to drum up interest in BOF again at YAPC.
benabik wishes he could go to YAPC::NA this year. 21:27
dukeleto benabik: it was a good time last year 21:32
dukeleto hasn't figured out if he can make it this year, yet 21:33
seme I've never gone... when/where is the next one... I only see conferences for 2011 on the yapc site
benabik dukeleto: Indeed it was. But this summer I'm probably moving, selling a house, and having a kid. Just no time..
dukeleto seme: japhb was the main dev of plumage, but he hasn't been around much lately. I hacked on plumage a bunch as well
benabik seme: yapc2012.us IIRC
dukeleto seme: we definitely want plumage to work, but it isn't hooked up to any continuous integration, YET
seme: so it might have a bit of bitrot 21:34
seme hrm... would be nice to get something like that going... anyone working on it?
NotFound I think the problem with --help was already informed somewhere.
dukeleto seme: i have plans to make another parrot developer summit happen, but that is currently a pipedream
seme: travis-ci.org/#/parrot/parrot 21:35
seme: that is a free CI system for open source projects
seme: i have parrot.git on there, but not the rest of the ecosystem, yet
seme: it is all controlled by this config file: github.com/parrot/parrot/blob/mast...travis.yml
benabik I keep pondering writing a "my ideal parrot" blog post. I think plumage should go on the list. Good modules make for a good VM. 21:37
seme he hee... there is a lot of knowledge out there about parrot... it would be nice if more of this were organized/maintained so new guys like me can get involved easily.... 21:38
benabik I should probably add a link to my cish "tutorial" to the wiki or something.
dukeleto seme: and adding a travis post-receive hook 21:39
seme: that is what parrot.github.com is supposed to be
seme: we want that to be a portal of useful docs
benabik And a tutorial based around using winxed would be nice too. :-
:-/
dukeleto benabik++ # winxed tutorial
i would prefer if all people brand new to Parrot saw Winxed first
that is our shiny shiny
dalek p/bs: 44d674d | jnthn++ | src/6model/serialization. (2 files):
First crack at one-level-deep closure serialization; survives, though not done deserialization yet.
21:40
benabik dukeleto: It shouldn't be too hard to do. I'm fairly sure that you could use NQP for a grammar and then winxed for everything else..
seme he hee... I tried walking through winxed but the docs didn't really help much so I just kept on with teh squaak tutorial :)
NotFound seme: winxed is not particularly intended to writing languages. 21:41
dukeleto NotFound: but it *is* great for writing libraries for Parrot :) 21:42
NotFound: and it *can* be used to write languages :)
NotFound dukeleto: of course... to write winxed, for example. 21:43
dukeleto mumbles about turtles all the way down...
seme well gents.. I will try to get back on in a bit to work on pynie :)
dukeleto seme: awesome! 21:44
seme: feel free to email parrot-dev questions. we don't bite :) 21:45
seme: and many smart people are on the list but don't do IRC
NotFound Pesky macros 21:49
dalek rrot: 06e7078 | NotFound++ | include/parrot/hash.h:
make parrot_hash_iterate_... usable like functions to decreeas dangling else and semicolon placing problems
22:00
p/bs: 0505b08 | jnthn++ | src/6model/serialization.c:
Don't attempt to serialize an outer that'll simply never work out.
23:16
p/bs: cf55512 | jnthn++ | src/6model/serialization.c:
Start to sketch out overall closure deserialization process.
p/bs: 3b9c867 | jnthn++ | src/6model/serialization.c:
First crack at closure deserialization. Passes one of the tests, fails another...something still a bit off.
p/bs: 84c2256 | jnthn++ | src/6model/serialization.c:
Fix a couple of silly thinkos; basic closure serialization tests now pass.
23:37 whiteknight joined
whiteknight good evening, #parrot 23:39
tadzik good evening 23:40
whiteknight hello tadzik, how are you doing tonight? 23:45
tadzik not bad. I have the One Last Exam tomorrow on 8 AM, and I'm now considering whether to go to sleep at all, or not