« first day (2575 days earlier)      last day (2268 days later) » 

12:10 AM
ello!
 
12:25 AM
@Dennis hey if you don't mind, can you t ell me how many times I have been kicked from TNB?
 
So I have this idea for a variation of brainfuck
Its brainfuck but you put circles on an image instead of symbols on a file
I call it braincuck
 
wat
 
Jan 2 '17 at 5:49, by Mego
> A friendly message from The Name of All that is Good and Holy: Hello! This is The Name of All that is Good and Holy. Before you think of making your own extension to this language, here's another idea for you to consider: Don't! For the love of me, please don't make another derivative of this language! Unless you have something truly new to contribute, it's been done a million times before and will probably make it worse than the original.
 
/joke
I am not being serious
Just an excuse to learn pillow
 
Oh god, that library
 
12:34 AM
yeah
me and caird are working on an actually unique esolang
if he finished with exams already
poor timing i guessd
 
Don't rush him!
 
Yeah i know
I just told him to work when he wants to
Im just waiting
Doing other stuff
 
12:52 AM
@Christopher I don't think there's a definitive record, but I could double check how many times it's been mentioned
 
@DJMcMayhem sure
 
@Christopher You have been kicked at least 12 times (maybe more idk)
 
dang
 
1:23 AM
rest in peace chat record
@ATaco did you take down a-ta.co? :(
or is that not even the link
 
1:34 AM
@Christopher From TNB alone, 20 times.
 
@dennis thanks! and wow O_O
is there a time reset on creating rooms?
 
@HyperNeutrino ?
 
@HyperNeutrino it crashes, it’s back up
Rip My month up time though
 
1:52 AM
@Zacharý talking about christopher's chat record (because so many keks)
@ATaco oh ok i see. yay back up \o/
I have tacoscripts now \o/
 
tacoscript only script
 
Also gradscript
 
also why are you asking for your kick stats to be posted publicly o_O :p
 
We were wondering earlier about who had the record for the most kicks from TNB, and if that happened to be Christopher.
 
yay now have gradscript \o/ codegolf.SE.com no longer looks boring :D
 
1:59 AM
i don't use gradscript :P
 
I never got around to installing it until like right now and I was fine using PPCG without it :p I just prefer it with gradscript
not at school though. At school the blocked links cause gradscript to make the front page look even worse
 
@HyperNeutrino Could be worse: they could block github.
 
Yep
 
:c don't make me think about the possibilities of what they could block *shudders*
 
2:12 AM
But my github.io page's unblocked: I HAVE A MONOPOLY!
 
ecks dee
 
@Zacharý Happened at my school too
 
@Pavel Check multiple user pages. You might get lucky. The original 2048's been blocked forever
 
github.io is fine
github.com is not
 
._.
The opposite SHOULD be true
Our school blocks both
 
um... ew
 
Classes (of any form) in Jagony... fun
System.Types.Class.Declare(System.MainClass).Chain(System.MainClass.PublicVisib‌​ility.DeclareStaticMethod(System.MainClass.MainMethod)) ...
Verbosity ain't got nothin' on Jagony
 
  Java
+  agony
---------
  Jagony
 
Exactement
Crap, wrong room
Java-ava+agony, actually
 
2:43 AM
Does it make more sense for gcd Infinity <value> to be NaN, 1, or <value>?
 
What are you using gcd for?
 
Anonymous
NaN
 
Anonymous
gcd Inf N isn't a meaningful mathematical concept
 
Yeah, either that or Infinity
 
Infinity really doesn't make sense
 
2:48 AM
How do you best recommend making a property of an object a function in python? The object in question is NOT a class,
 
What do you mean "The object in question is NOT a class"?
 
I only said that because sup lim_{x->infinity} gcd(x,Infinity) = Infinity
@WheatWizard It's an instance of a class,
 
So you can just make a def to give the class a function property?
 
class JagonyObject:
	def __init__(self, val = None):
		self.__dict__["_val"] = val
	def __getattr__(self, name):
		if name[0] == "_":
			return self.__dict__[name]
		else:
			if not(name in self.__dict__.keys()):
				self.__dict__[name] = JagonyObject()
			return self.__dict__[name]
	def __setattr__(self, name, val):
		self.__dict__[name] = val
	def __repr__(self):
		return "JagonyObject("+str(self._val)+")"

System = JagonyObject()
System.Types.Class
That's the code I have. I want System.Types.Class.Declare to be a function.
 
Anonymous
System.Types.Class.Declare = lambda whatever: something
 
2:54 AM
Well you would have to define the Types attribute wouldn't you?
 
What if I need something that a lambda can't do.
 
Anonymous
@WheatWizard Because of the way that he has defined the __getattr__ method, missing attributes are automatically added
 
@Zacharý Define a function, def foo, then System.Types.Class.Declare = foo
 
Oh I see
 
Anonymous
@Zacharý Then write a full function and assign System.Types.Class.Declare = foo
 
Anonymous
2:55 AM
Functions are first-class objects in Python
 
Ninja'd
 
I was just wondering if there was an easier way to do that.
I knew I could do that
 
Anonymous
That is the easy way
 
I don't know how that could be easier
 
Anonymous
Define a function, assign the attribute. Easy as pie with very low standards and inhibitions.
 
2:57 AM
I mean something like def System.Types.Class.Declare or something
 
Anonymous
No, that's not possible
 
I know.
 
Why does python even have def, why don't they just use =. I feel like it would make things cleaner
 
Anonymous
The name of a function must be a valid identifier (docs.python.org/3/reference/lexical_analysis.html#identifiers)
 
Is there a way to get something like tio.run/##K6gsycjPM/7/… to work
 
Anonymous
3:01 AM
@Pavel Move the return outside of the exec :P
 
Anonymous
Serious answer: no. exec runs in its own stack frame
 
# I had this idea:
lambda foo:exec('''
# I'm a lambda with multiple statements!
print(42)
exit(1)
''')
 
There is nothing wrong with that
 
I'm going to have SOOOO many nested functions
SO many
 
Are you using combining diacritics?
 
Probably, I stole it from reddit
 
Anonymous
@WheatWizard That looks suspiciously similar to a certain PLQ2 answer :P
 
Yeah, you should probably ... NOPE. Not making a pun, there's a penguin
 
3:08 AM
looks like i'm gonna need to mix my own painting order sorting algorithm rather than just changing the comparator functions
 
3:18 AM
Halp.
I have an object and python doesn't want to modify it in a function
 
Send codez?
 
Nvm
I forgot to write .PublicVisibility
Huzzah! Public static properties now work!
(For Jagony)
 
@Mego PLQ2?
 
Programming Language QUiz 2
 
Anonymous
@Zacharý You should enforce that only one Undefined object is created via the singleton pattern, or make all comparisons between Undefineds true
 
3:41 AM
What do you mean by the singleton pattern?
 
Anonymous
Singleton pattern makes sure that only one instance of a class ever exists
 
Example?
 
You can have a list of expressions.
(but that can't assign anyway, it's an expression)
 
3:59 AM
Users won't generate a new undefined. Crap. I probably should change it to _undefined
 
4:10 AM
Can't decide if a NaN literal, or an Inf literal would be more useful. Or whether I need to have a sign on my infinity, and if so, how I would deal with the hassle of imaginary and directed complex infinities.
At the moment I just have Rational / Imaginary / Complex / Infinite / Zero / NaN, which works nicely
 
Anonymous
@Οurous Just do what IEEE does
 
@Mego IEEE has a standard for complex number representation?
 
@Οurous Which language is this?
 
Anonymous
@Οurous Not directly, but just a pair of numbers (either rect or polar) is sufficient to represent a complex number
 
Anonymous
Mainly I was commenting on the signed infinity and NaN bits
 
4:17 AM
 
What language is it in?
(written in)
 
@Mego I think it'll actually work pretty well if I just denote +Real, -Real, +Imag, -Imag, and Complex infinities
@Zacharý Clean
 
hahahahahahahahahahahahahaha. I Get it
 
@Οurous QUATERNIONS /s
 
OCTONIONS
 
4:28 AM
@Οurous Those commit messages, tho.
 
Same
Guess he's COMMITTED to not having good commit messages (I'll stop, Mego)
 
Anonymous
I thought my commit messages were bad
 
Speaking of bad naming: my friend's text adventure has variables named num, somenum, randnum, othernum, and wierdnum/weirdnum
 
@Zacharý >:(
 
Yeah. I'm working on it with him. I just fix his bugs
 
4:34 AM
if you're not going to use variable names you can at least make them letters
 
@DLosc I promise it'll have good commit messages once it actually does anything :P
 
@Οurous Yeah, I can't complain too much. I have decent commit messages but an almost total lack of documentation.
 
@DestructibleLemon That's what I do. And probably a lot of codegolfers
 
@Zacharý I remember those days. I vaguely recall a QBasic program where I had a label named bell for some reason, and then I needed to add a second label that also made sense to be called bell. So I named it belle--after the Beauty and the Beast character. I thought that was clever. :P
 
Anonymous
When in doubt, add more adjectives
 
4:41 AM
somenum is never going to be an acceptable variable name unless it's like some sort of demo program
@DLosc my typical program has like 4 comments
 
When in doubt, use a NamingConventionWhichIsPainfullyLongToTypeButIsCompletelyUnambiguous
 
Anonymous
Comments are unnecessary unless you're doing something super unexpected. Just write self-documenting code
 
yeah i can't do that either
 
@Zacharý Eugh, that's the worst
 
my comments usually tend to be the unnecessary ones
 
Anonymous
4:43 AM
At least people have mostly moved on from Hungarian notation
 
unles u hav teh aydee-ee
 
i don't know maths notation very well so one of my variable names is includes_y_hypotenuse
 
Anonymous
@DestructibleLemon ...what?
 
the reason the name is confusing is because i was confused to come up with a name
includes_y_hypotenuse = (y_vector**2+(math.cos(xz_plane_angle-camera_yaw)*xz_hypotenuse)**2)**.5
 
Anonymous
Well, if it's any consolation, I'm now confused too
 
4:47 AM
basically, it's the hypotenuse of the difference in height between the camera and the object to be drawn, and the distance from the camera plane and the plane containung the object
it is an orthographic related thing, btw
 
Camera What is this for?
 
the orange lines are the planes, the first one being the ortho-camera plane, the second one being the plane with the object on it, the distance being the x component of the hypotenuse
 
Oh god, optics
I hate optics
HATE
THEM
 
it's not as bad as perspective i guess
 
Anonymous
wrong keyboard
 
4:55 AM
@Mego ??
 
Anonymous
5:05 AM
@Zacharý I have two keyboards, hooked up to different computers. I typed on the wrong one
 
Ah
Thought you meant keyboard mode
Βεψαθσε Ι`μ κνοςν το δο τηατ
^ Comme ça
 
ʃometimes ɪ accidentally switch to the keyboard ɪ put together for typing ɪnternational honetic ælphabet letters. θhat's particularly problematic when typing passwords.
(Also, apparently, I didn't give it a binding for capital P.)
 
Anonymous
@DLosc P binding should be stuck-out-tongue emoji
 
That's not IPA...
 
I heard IPA, what did I miss.
What is this "honetic"?
:p
 
5:16 AM
There really isn't another IPA glyph based on p, it appears. Just the ejective pʼ which uses a diacritic.
 
I no what the IPA is, you said "honetic"
Bind it to latin phi?
 
Because my IPA keyboard doesn't have a binding for capital P. So when I typed "International Phonetic Alphabet," it came out as "ɪnternational honetic ælphabet."
@Zacharý That's bound to f, because of the similar sound.
 
Just bind it to the newest IPA symbol: the v with the tail
 
This thing? ⱱ
 
Jes
Do you already have a binding for it?
 
5:21 AM
I think that the painting order sorting might make for a decent code golf problem
 
@Zacharý Not at all. Labiodental flap, that's an unusual concept.
My keyboard isn't really intended as a general-use IPA keyboard, I just put in the glyphs I used for my conlangs.
 
You conlang too? o.O
 
Yep! Infrequently of late, though.
 
Wow. Never thought I'd meet a conlanger on PPCG
 
@Zacharý hello
 
5:25 AM
You as well? Did I open the door to more conlangers?
 
I'm not surprised. It's not altogether unlike inventing programming languages, if you think about it.
 
@HyperNeutrino But it is a contributor :D
 
S'ést bõn
 
I just got an idea for a new esoteric language with the memory model based off Pascal‘s pyramid
 
.._..
 
5:30 AM
so the painting order thing works like this: if a cylinder is above another cylinder (and the camera is pointing down), draw that cylinder after the lower cylinder, no matter what. other than that, if a cylinder is in front of another cylinder, draw that cylinder later than the farther cylinder
i would simplify it to not include camera angles at all
 
@Zacharý Va ɂiga ladetu ba sika ga, nasuɂavi!
(You who speak a strange language--peace to you!)
 
5:47 AM
@Mr.Xcoder I suppose probably it is :P
 
@HyperNeutrino Oh hey--is that open for people to join now?
 
6:03 AM
I want to join the conlang.SE but I can't join Area 51 D:
 
alright, so, anyone have experience with sorting algorithm making thingies?
 
@betseg Well, I just joined, so I think it's in public beta now. :D
 
> Warning: this site is currently in private beta for at least 10 more days.
 
if its private why did i get to view it
 
6:20 AM
@HyperNeutrino Yeah that and string parsing => launch time: > 24 hours :P
 
7:08 AM
@betseg At any rate, you should be able to visit the site's chat room.
 
7:45 AM
All I can see is pattern-matching against infinities. It's consuming my mind.
 
8:00 AM
Not sure why I'm awake right now.
 
8:57 AM
0
A: Sandbox for Proposed Challenges

Kevin CruijssenSandbox questions: I have the feeling I explained it more complex than it could have been, but I'm not sure how to formulate it differently. Anyone any suggestions, or is it clear enough as is? Any title suggestions? Any test case suggestions? TODO: title code-golfpermutationsnumberarray-m...

 
 
2 hours later…
11:03 AM
Hullo everyone !
I don't understand the following thing while learning C++: As float is only 4 byte and have precision of around 6~9 digits, when I type this:
std::cout << std::setprecision(16); // show 16 digits
    float f = 3.33333333333333333333333333333333333333f;
    std::cout << f << std::endl;
why does it output 3.333333333333334 ?
Also, how std::setprecision works ?
 
so, if i were to store 800 lists of object references, if each were 1000 long, would that be memory intensive or something?
(in python)
 
11:27 AM
Doesn't it bother you when you reduce byte count too soon and is not registered in the edit history? :-) — Luis Mendo 12 hours ago
@LuisMendo that's a good thing for me ;-)
 
11:47 AM
@DLosc Not that strange. It's a fusion of French and Englsih
@HyperNeutrino QUÈ ÇAT ÉST OÙN CHOÞĨNG?! (THAT'S A THING?!)
@AlexKChen IDK
 
@DLosc that has nothing to do with the actual site itself; the beta is private possibly because there is some confidential stuff in there the rest shouldn't see
and no, that site has a very long private beta now
 
C++ again...?
 
@Zacharý what language is that?
 
Bacause compilers are overly smart and use FP registers internally for performance reasons.
@AlexKChen
What do you mean by how does it work? You knew how to use it already.
@DestructibleLemon Of course it takes the amount of memory it should take. What do you mean?
... The mobile site hates keyboard shortcut. (known bug?)
 
12:15 PM
> Thanks for upgrading to our unlimited data plan. As a welcome gift, you'll get unlimited data for the next 31 days.
14
 
@AlexKChen No repro.
 
22 bytes.
 
@user202729 10 bytes
 
12:53 PM
@EriktheOutgolfer The "good" thing (cheaty) is when that allows you to outgolf someone back in time
 
@LuisMendo I never thought about it that way!
the "good thing" for me is non-cheaty, and is simply less revisions i.e. shorter history
in fact, I would have added a note if somebody outgolfed me and this happened, as to be fair
because as we all know cheats are not fun
in the same way, I could take advantage of somebody posting a 5-byte answer in the same language as me seconds after I post my 20-byte answer, just copy+paste the 5-byte one and claim it as my own
 
Anonymous
1:17 PM
@user202729 sum
 
@DLosc I think it's still in Private Beta.
I (think I) can invite you if you want to join.
 
@Mego I don't think so...
it isn't supposed to take a [Num]
 
^ ((+).).(+) is shortest
 
Anonymous
Yeah I was being facetious :P
 
1:34 PM
in Jelly, if you use on a dyad (e.g. ), where do the arguments come from?
 
it maps through the left argument, and the right argument used each time is just the right argument you give it
 
/var contains a file system with errors, check forced.
/var: Inodes that were part of a corrupted orphan linked list found.
/var: UNEXPECTED INCONSISTENCY: RUN fsck MANUALLY
Well then ... someone on the server team is going to have a rough morning.
 
1:54 PM
excellent, that saves 2 bytes, thanks!
 
for example 1,2,3,4,5 ,€ 1 will return [[1, 1], [2, 1], [3, 1], [4, 1], [5, 1]]
 
2:11 PM
@EriktheOutgolfer The infamous "ninja-edit" :-)
The ninja edit strikes again. :P — Dennis ♦ Jul 1 '16 at 16:27
 
@LuisMendo I know what that is, but I didn't ever think of doing it in practice, that would be very evil
 
Of course. I just happens, not something you really want. And it's more of a funny thing than anything
 
s/ns/ned to accidentally do it/
 
@EriktheOutgolfer happeed?
 
Question for all: If you are designing a general purpose golfing language, and you could add as many constants as you wanted, what constants would you add that are not something you'd immediately think of (Like the ABCs or Pi being things you'd think of immediately)
 
2:19 PM
eh, let me think a bit to answer
 
Anonymous
@moonheart08 ln(2)
 
@moonheart08 What comes to mind: calendar-related things (weekdays, months, number of days in each month), coin and bill values in common currencies, list of English words (if it doesn't slow things down when not used), lists of country/state/capital names and abbreviations.
 
@Mego How would ln(2) be useful? Just curious.
 
Anonymous
@moonheart08 If you need to save bytes for other things, it means you don't need log_2(x)
 
ln(2)/half-life?
 
2:24 PM
@moonheart08 is the lang mathematically oriented? If so, I'd probably add most of these
 
Anonymous
Also any sort of doubling growth (like half life, as H.PWiz said)
 
> any sort of doubling growth
 
Anonymous
@J.Sallé Oh E-M constant would be nice
 
I'm not a mathmatician. What's half-life? :P (If you say the game.)
 
eh, that's a bit stretching the definition of "you could add as many constants as you wanted"
 
Anonymous
2:25 PM
@moonheart08 In atomic physics, the average time for half of a radioactive sample to decay
 
it implies you're immortal
 
Oh, that context
I assumed you ment a diffrent context of half-life. I know what atomic halflife is, even if only barely (I read the book "Elements" :P)
 
Saw a car with license plate 2288FF on the way to uni today... surprise surprise, the car was exactly #2288FF
10
 
It's generalized to other rates as well
 
Well, thanks. As someone who's trying to make a mathematical golfing language for fun, knowing what constants to use helps :P
Now to add a bunch more types of loops to the extended loops extension set.
 
2:28 PM
Although ln(2) seems redundant if you have ln and 2
 
@H.PWiz well, if you can add the constant to the lang to make it a 1-byter, why not?
 
It'd be a 2-byter even then
so just having a ln function and 2 is best
 
In that case, yeah
 
(Constants are put into their own little section)
 
Make some function that returns the roots of a given polynomial, and maybe also have a list of constants that are solutions to simple polynomials. Phi for example is the solution to a simple polynomial.
 
2:30 PM
β
Extension function set 2. (Default: Constants 1)
γ
Extension function set 3. (Default: Constants 2)
at 256 functions per set
(Language is Jelly based, so everything in the constants libraries are nilads)
Now i just need to decide on a default library for the 8th extension set and i'll be good. (I'm putting in 8 of them, and a flag you can feed the interpreter to change what set you'll get, or just set that at runtime)
I'll say this: Python has a really well done number system
So i'm just going to copy that to allow infinite precision numbers
 
Python doesn't have infinite precision by default...
 
Why is the deadfish question not closed as a duplicate anymore?
 
Huh. (I don't know python :p I'm just making assumptions based on how things like Jelly works)
 
4
A: Is my question a duplicate even though it doesn't impose a requirement that the original one did?

Mr. XcoderYes, it is a duplicate Since I am the one who “hammer”-closed it as a duplicate, I feel like I am morally obligated to explain my reasoning here. Because your challenge is merely a subset of the other challenge, I think they cannot be considered different challenges — although the answers are no...

 
RIP language design chatroom. It's dead and i had a question
 
2:49 PM
@moonheart08 that's too bad :( you could just ask it here, doesn't seem like there's a lot of conversation going on right now
 
I'm making a jelly like language with 8 extension sets that add new functions. I'm trying to decide which sets should be defaults, but i'm stuck on the 8th one. Here's the current defaults:
α
Extension function set 1. (Default: Extended Loops)
β
Extension function set 2. (Default: Constants 1)
γ
Extension function set 3. (Default: Constants 2)
δ
Extension function set 4. (Default: UTF Strings)
ε
Extension function set 5. (Default: Advanced Math)
ζ
Extension function set 6. (Default: Extended Variables)
 
Maybe geometry?
or some other field of math that has widespread uses
 
@moonheart08 are these things 256-function sets where you just use e.g. α followed by another byte, or do you use them once and they change a number of single-byte functions, etc.
 
They are followed by another byte
 
For code-golf, both geometry and discrete mathematics could be useful.
 
2:54 PM
I think geometry, trig, etc. would fall into advanced math?
there won't be any shortage of available functions
 
^ Advanced math is suppost to contain that, and making an Advanced Math 2 isn't an issue
There is literally zero shortage of constants
 
maybe date/time stuff? those could probably fall into Constants though, that's what 05AB1E does
 
what sorts of arrays / matrix operations do you plan on having?
you could have a bunch of data structures: sets, maps, queues, stacks, etc.
 
@PhiNotPi Multidimensional matrix operations. The base math functions (addition, subtraction, multiplication, division, square root, power, etc) are overloaded to perform matrix operations
As the language has no true "string" type (UTF8 Strings set provides functions for better string manipulation), stuff like Append is also just matrix operations
 
well great
I realized that Proton's internal object representation isn't maintainable enough
 
3:05 PM
rip
 
so I have to rewrite the entire interpreter to accommodate new changes yay
 
@moonheart08 I a "matrix" a list of lists, or a distinct type?
 
List of Lists, but multiple operations will happily treat it distinctly
 
So you have distinct operations for matrix multiplication and vectorized multiplication?
 
It's based on the detected type. If it's two matrixes (list of lists), it does matrix operations, or it does vectorized if it's a flat list. The language is predictably typed, so typing can be figured out during parsing
[[1,2],[3,4]] + [4,3,2,1]
I forgot about mixed case, leme muse on that :P
What do you guys thing that should do? It's addition, not append.
 
3:11 PM
[[5, 6], [6, 7], 2, 1] (Normal Vectorize)
or [[5, 5], [5, 5]] (Flatten, add, reshape to left)
 
which one does jelly do? :P
 
I think a normal vectorize would be best. I can throw a dedicated Flatten, add, reshape to left in a library.
 
what the heck did jelly just do. I can't make sense of that :P
oh i see
it went through and did normal vector mathematics on each sublist
 
Husk does [[5,5],[7,7]], but you need to vectorize explicitly.
 
3:14 PM
[[5, 5, 2, 1], [7, 7, 2, 1]] or [[5,5],[7,7]] are also possibilities
 
[[1, 2], [3, 4]] + [4, 3, 2, 1] == [[1, 2] + [4, 3, 2, 1], [3, 4] + [4, 3, 2, 1]] == [[5, 5, 2, 1]. [7, 7, 2, 1]]
 
The only spots it can't figure out the type at parse time is when a string is coerced into a type
 
Jellyfish gives [[5,6],[6,7]], but Jellyfish is silly anyway.
 
Is this length behaviour sane?
L
Matrix: Dimensions of matrix formatted in a List
List: Length of list
 
Is a 2-D list a matrix in your lang or are they different types?
 
3:24 PM
That could be inconvenient if you have, say, a list of subsequences, and you want to compute its length.
 
I would probably prefer Length to always return an int and have something else to get dimensions
 
Mk.
 
@Zgarb Phigs gives the same thing.
 
3:47 PM
@MagicOctopusUrn Why'd you abandon your falling zeros challenge? I rather liked it.
 
4:06 PM
0
Q: Minimally sort a list into a matrix

AdmBorkBorkGiven an unsorted list of unique strictly positive integers, minimally sort it into a 2D matrix. The output matrix is not necessarily square, but the input is guaranteed to form a non-jagged output matrix. "Minimally sort" here means the following: Sort the list in ascending order. Compact the...

 
4:48 PM
@AdmBorkBork You may take it for sure, I forgot we already had "falling letters" and also it didn't specify what to do when there were 0's above blank space.
 
hey @HyperNeutrino did you have to use the beginning of file in any parser of yours? modgrammar has BOL, EOL, and EOF but doesn't have BOF :P
 

« first day (2575 days earlier)      last day (2268 days later) »