« first day (128 days earlier)      last day (2439 days later) » 

13:12
In particular, people often write calculations with multiple steps in a lazy way... given a question like "Zara buys two gel pens costing £1.50 each and an eraser costing 80p. How much did she spend altogether?" The student might write something like
150x2=300+80=380
and I won't let them write that. I say, is 2 times 150 the same as 380? Your = is lying!
13:34
maybe we should use the polish notation
 
3 hours later…
16:25
what's that?
 
1 hour later…
17:45
could need some regex help, im actually using du -h --max-depth=1 | grep '^[0-9][0-9],[0-9]G' to find directories which have multiple GB data, problem is only how can I modify the regex so that it catches something like 10G and as well 2,1G ?
if you want the comma to be optional, put ? after the comma (are you asking a question about this?)
You want the command everything after it but before G to be optional, right?
'^[0-9]{1, 3}[,]*[0-9]*G'
well but that does not output anything
There's no need to have the comma by itself in a character class. Also, you don't want to match zero or more commas, but only zero or one, right?
there can be 1 or two numbers before the comma, the comma isnt there always, and there might be one number after the comma
@EliahKagan right
17:54
$ echo -e "10G\n2,1G\n21,6G" | grep -oE '[0-9],?[0-9]?,?[0-9]?G'
10G
2,1G
21,6G
If there can be one or two digits before the comma, you should write {1,2}, not {1,3}, right? It's not like python: the upper bound is included.
@EliahKagan yep could be even 100GB size stuff there
then it would be three numbers this is why i put {1,3 } there
Is your actual goal to match any sequence that contains digits, commas, and nothing else, followed by a G?
exact, and it has to be at the start of the line
^[0-9,]+G
If it's a BRE then + must be written: \+
17:56
$ du -h --max-depth=1
2,2G ./ubuntu-17.04
524M ./arch-linux
1,4G ./ubuntu-18.04
2,2G ./ubuntu-17.10
6,2G .
example directory
all i want is doing an in depht analysis of my storage drives which might be more entries like that and im going then with a max depth of 10 or such
over about 6 TB on data
and at the end i want a list with every directory wich is bigger than 1 gB
1 GB (G)
You always have whitespace between the size and the pathname. So really all you need is to check that the first column ends in G. I recommend against making the regex complicated, unless your goal is actually to check the input for syntactical correctness relative to whatever you consider the correct output format for du -h to be... in which case, you would have to make it much more complicated.
ok
in fact im a big noob in regex lol
the basic stuff i get, i always struggle over the multiples and nones
This is locale-sensitive anyway (because not all locales use , as the radix separator, for example, I would write "1.7" to mean one and seven tenths). I suggest against attempting to make it more general than necessary if that increases its complexity even slightly. Since the output of du is in columns, you might consider awk. But it can certainly be done--and easily, if I understand all your requirements correctly--with grep or sed.
Probably the whitespace is always spaces, but GNU grep makes it super-easy to match arbitrary whitespace if you use grep -E or grep -P, by providing \s to mean [[:space:]] when it appears outside a character class (and [:space:] when it appears inside a character class). Accordingly, \S is non-whitespace, which is what you would probably actually use here. You can use:
^\S+G
That matches one or more non-whitespace characters followed by a G. It's not a problem that the G is itself a non-whitespace character, because the regex engine backtracks automatically. \s and \S are not, if I recall correctly, part of the POSIX spec for EREs, but GNU grep supports them if you specify ERE by passing -E. (They are part of PCRE and PCRE2, and GNU grep also supports them with -P, as it must.)
18:08
ah O.k., now I can search through my games archives (downloaded game files from steam) which is in fact a majority of my used HDD space :) some directories i already emtied out and they only contain maps cheat-sheets and such, they shall rpevail :) this is why im searching for GB :)
@Zanna In Polish notation (a.k.a. prefix notation), connectives precede the terms they connect. We write = × 150 2 300 to mean what we more commonly write as 150 × 2 = 300, and we write = + 300 80 380 to mean what we more commonly write 300 + 80 = 380. We write K = × 150 2 300 = + 300 80 380 (where K means "and" to mean what we more commonly write 150 × 2 = 300 ∧ 300 + 80 = 380 (where means "and").
oh nice :)
Łukasiewicz used K originally but I think it's also pretty normal, nowadays, to write things like ∧ = × 150 2 300 = + 300 80 380. Notice that, when each connective has fixed arity -- i.e., you know, looking at the symbol, how many terms it takes -- you never need any parentheses with Polish notation. There is never any ambiguity about what is being connected to what.
When the arity of some connectives is not fixed (or not known), parentheses can be used around the entire sequence of the connective and the terms it connects (which is also the way they are used otherwise), though more commonly Polish notation would just not be used in such a situation.
$ sudo find /media/michael/ -type d -name '[Ss]pielearchiv' -exec du -h --max-depth=1 {} \; | grep -E '^\S+G'
takes a while to run :) but solves my problem
One of the reasons Polish notation is interesting is that it is what you get when you perform a pre-order traversal of an expression tree. Polish notation, and especially reverse Polish notation (where the connectives come after the terms, which is also ambiguous when each connective's arity is fixed, as each connective simply "consumes" the appropriate number of terms), are also simpler to parse--algorithmically speaking--than infix.
18:16
hmm find can search by size I think
might be, i mostly do folow my intuition here what forst comes to mind without hard thinking :)
The notation we typically use is often called infix notation, though really it contains a combination of infix notation and other notations. For example, it is common to write f(x, y).
the find is only there becauuse due to space problems i had to move stuff around and now what was first one single games-archive dir is not on multiple drives in same named directories
* also unambiguous when each connective's arity is fixed
see the -size test in man find
lots of options
18:24
will do
I'm clueless (I never learned anything about this)
Well, backtracking slightly: in Polish notation and reverse Polish notation, there is no need for connectives to have any precedence rules. Both the parentheses that you have to write and the ones that you don't are rendered unnecessary. People sometimes say that CPUs use Polish notation or reverse Polish notation in their machine languages, since it's common for opcodes to precede or follow all their operands...
...but this doesn't really capture what's neat about Polish notation, which is that complex expressions, by which I mean expressions where more than one connective is used, are automatically unambiguous. They are unambiguous so long as you know immediately, for each connective, how many terms it connects. So, for Polish notation (i.e., prefix notation), you then simply consume that many terms. When you are consuming a term and you encounter a connective, you recurse, consuming its terms.
that is indeed very cool
@EliahKagan yep thats a locale setting german data format uses , instead of .
so money format is xx,yy €
instead of xx.yy
1 million 500 thousand and 50/100 would be in German data format 1.500.000,50
US/English format would be 1,500,000.50
Are you familiar with expression trees? (You can be familiar with expression trees without knowing what pre-order traversal is, which is why I am asking.)
18:38
no...
So, first, a note on terminology. Are you familiar with the difference between free and bound variables?
no
Consider the sentence: Everything is less than 3.
That sentence is false, but it's a perfectly good sentence. So is: Everything is greater than zero and less than three.
To make this false sentence more formal, I can say: For all x, x > 0 and x < 3.
In the formula "x > 0 and x < 3" the variable x is a free variable.
However, in the formula, "for all x, x > 0 and x < 3" the variable x is a bound variable.
It is possible to have a formula in which some variables are free while others are bound.
Consider, for example, the formula: For all x, x > 0 an x < y.
In that formula, x is bound and y is free.
Does that make sense?
It is okay if it is not, as there are other ways this information can be conveyed, than what I have just written.
does it mean, if the variable is free, we've said what it is now, but elsewhere it could be something else?
No. When a variable is free in a formula, it means the formula does not say what it is.
So the formula "x > 0 and x < 3" does not say what the variable x is, so x is free. If we embed that in a bigger formula -- which precedes it by quantifying over x by saying something like "for all x" or "for some x" -- x becomes bound in the bigger formula. It is still, of course, free in the subformula.
A variable is said to be bound because it is bound to a quantifier. So "x" is bound to "for all x."
I do not ordinarily use these phrases myself, but have you heard the phrases "open sentence" and "closed sentence"?
18:55
hmm maybe, but I don't know what they are
Well, mentioning those phrases was possibly not very helpful then. Sorry. If you consider pronouns in English to be variables, then "She" is free in "She is happy" but bound in "As for Alice, she is happy." I apologize for my arguably poor use of notation above. When I say something like, "x is bound in formula F," I am really trying to mention x, not to use it, so it is better that I say, "'x' is bound in formula F."
that's ok, I understood that (the last part)
After all, it is not right to say that Alice is bound in "As for Alice, she is happy." Rather, "Alice" is bound in "As for Alice, she is happy."
So, similarly, "It" is free in "It is greater than zero and it is less than three."
Thus "x" is free in "x > 0 and x < y".
But "x" is bound in "For all x, x > 0 and x < 3."
but if I say, this number I'm thinking of, it's more than zero and it's less than three?
"It" is bound.
Formally, you might mean: "There is some number x such that I am thinking of x and x > 0 and x < 3."
Or you might mean also that x is unique, which that does not assert.
19:03
@Zanna but if I say, this number I'm thinking (for x) of, it's more than zero (x > 0) and it's less than three (x < 3)?
or exchange (for x) with (regarding x)
sorry me being so silent otherwise, just following this conversation i find it hightly interesting
Regarding what I recently said about "formally": More formally, since most systems consider "For x in S" to be a shorthand notation, you might mean, "There is some x, such that: x is a number, and I am thinking of x, and x > 0, and x < 3."
@Videonauth No a problem; lurking is fine. But your contributions are highly welcome!
so... does this only mean, that x already has a value, rather than that there could be x, and if there were, its value would be this, but there may or may not be such an x?
@EliahKagan :) just my granddad always told me if you not 100% sure what youre talking about, keep yer mouth shut and listen
@Zanna Which thing are you asking about, when you say "this"?
I'd never say anything at all if I followed that advice (unless I was talking about my own emotions or something)
@EliahKagan the boundness of x
19:08
@Zanna :)
So you are asking if a bound variable is one that has a value?
It is maybe bad translated from his German sentence
@Videonauth seems fine to me
He actually meant keep listening till you have at least the fundamentals down :)
he was actually great at explaining things, he worked for the US airforce as a middle man to German military forces
I think the formally best answer is that there is no formally precise notation of a variable having a value and that variables in quantification theory (which is what this is, but sometimes people say "variables in logic") are very different from variables in (most) computer programming. But that response is not really useful. Conceptually, when you quantify over a variable, it is as though you are trying out values for it.
Whether or not that makes it so that it even feels like the variable has a value depends on the situation. If I say "For some x, x > 0 and x < 10," does have a specific value? It is rather that there are some values for x that satisfy that formula and others that do not satisfy it.
My English examples were examples of substitution. Quantifiers let you substitute, in that you can verify that "For some x, x is awesome," is true if you find that "x is awesome" becomes a true sentence for some object whose name is substituted for x. (But of course, I have just defined "for some" in terms of "for some," haven't I?)
To actually formalize my English examples, they look like this: "For some x, x is Alice and x is happy."
19:15
@EliahKagan I don't think so... I said that, but I was expressing my thought badly. I mean, there's already and necessarily such an x (or perhaps certainly not an x, like "for no x, x is more than zero but less than three"). Like, I'm already thinking of this number
@EliahKagan Actually as you mentioned programming, is this closely tied to RAII?
To give a better English example than before, "All people who are awake are happy." That sentence is false but it is a perfectly good sentence. It says, "For all x: if x is a person and x is awake, then x is happy." In that formula, "x" is bound; specifically, it is bound to the "for all x" quantifier. However, in the formula "if x is a person and x is awake, then x is happy," the variable "x" is free.
because we haven't defined any people who are x?
or mentioned them
@Videonauth Well, I don't think variables in C++ are the same sort of things as variables in logic. They both involve scope; in C++, when an automatic variable (but not other kinds) goes out of scope, it is destroyed, and its destructor runs (though sometimes that is a trivial destructor). In C++, variables have scope. In quantification theory, quantifiers introduce scopes, but a formula can be well-formed even when it contains a free variable (one that is not in the scope of any quantifier).
@Zanna It's for all x, which means "for each thing, calling that thing x..."
@Videonauth So I would say that it is related but not "closely tied," though that is of course subjective.
ah o.k. makes sense. the picture I had in mind was kinda something like this int x; print x
where x is undefined
i.e. i would call that free
or unknown
19:25
@EliahKagan yes... but I mean, in the last part "if x is a person and x is awake, then x is happy,", we haven't mentioned any x that we are talking about...
@Videonauth I would not call that free: x represents a specific memory location, at that point. At least conceptually it represents a specific memory location; depending on the rest of the code, it may, of course, be optimized out, under the as-if rule. Which memory location it represents may vary; for example, stack-based implementations of C++ are common, and the block that introduces x may run with in stack frames starting in different places.
But I think the most important thing to recognize here (besides how variables in C++ and variables in quantification theory are not really the same thing) is that, in the sense of "defined" that is commonly used when discussing C++ and that is used in the C++ standards, you have actually defined x when you write int x; even though, at that point, it is undefined behavior to attempt to read its value.
The "undefined" in "undefined behavior" refers to what is defined for the nondeterministic parameterized abstract machine discussed in the C++ standards. (Similarly, "implementation defined" means that something relates to the parameters, and "unspecified" refers the nondeterminism. You should check at least one of the standards, though, since I don't have one in front of me. But I think this is right.)
An example of a variable declaration that is not a definition is:
extern int x;
But int x; inside a function body is a definition. You can use the variable, even with no other definition. For example, you can write &x = 3, and that is perfectly good C++. The One Definition Rule also applies; you may not write int x; again in the same scope, though you may write it in a subscope, in which case the outer x is shadowed in that subscope.
true so i was going astray here from the topic, sorry
* may run with stack frames starting in different places (not "with in")
@Videonauth That's sort of the entire point of the Island, so I think you're good. :)
The "original" topic, well, who knows! But the current logic discussion arose from topic of Polish notation for arithmetic.
@Zanna We're talking about everything. We're saying, it holds for each thing: if that thing is a person and that thing is awake, then that thing is happy.
Oh, sorry. I misunderstood. What I just said applies to the "for all x" part, and to the formula that contains it.
As you say, in the last part, the subformula "if x is a person and x is awake, then x is happy," we have not said what "x" stands for. Thus "x" is free in that part.
@Zanna Does that correction help? I misunderstood what formula you were asking about.
19:40
yes! it helps a lot
So, it's not that a variable is free or bound in general, but that it is free or bound in a particular formula.
In that example, "x" is free in the formula that is being quantified over, but it is bound in the bigger sentence that includes the quantifier that binds it.
You can have a formula where some variables are free and others are bound. "For some x, x > 0 and x < y." To make that into something that can reasonably be called true or false, you have to bind y as well.
ah! that is helpful
So, some people call formulas where all variables are bound "closed sentences" and formulas where some variable is free "open sentences." I usually don't use that terminology, but instead I call only formulas where all variables are bound "sentences."
Of course, in English, "He is happy," is a perfectly good sentence. So there is a reason some people use "sentence" to mean what I mean by "formula." Both conventions are common, or at least I have seen both.
ok...
Does this... not make sense?
So, in logic, at least as I have observed it to be used (and seen it defined), the word "object" usually means a specific thing (that can be talked about), and other uses tend to be regarded informal. So people say things like "3 is a mathematical object." In describing sentences in English and other languages, people will say things like "'He' is the subject in 'He is happy'" and "In 'He gave the cake to her,' 'he' is the subject, 'the cake' is a direct object, and 'her' is an indirect object."
These claims about English sentences are true; they also demonstrate that the terminology is somewhat different. If I say "3 is positive," we say "3" refers to an object. Informally, "3" is an object. We don't say "3" or 3 is the subject, except very informally and by analogy to the grammar of natural language.
19:55
@EliahKagan it seems to make sense fine. Since you are taking the trouble to explain something to me with the apparent goal that I should understand it, if I don't understand, I will keep on trying to demonstrate what I do and don't understand... When I said "ok...", which was unhelpful, I meant, ok, I get this aside about "open/closed sentences" and I think I get what you were saying about bound and free variables, so you can move on to the next bit if you like
Oh. I hadn't assumed that you did or did not understand. I had expected it might not make sense already, because the terminology typically used to talk about natural language is somewhat different. I had then (wrongly) taken your "ok..." as an indication that I should continue expounding. Moving on...
Going back to where I felt it important to talk about terminology, in order to say what an expression tree is: the words "expression" and "formula" have different meanings, which is why I felt it necessary to say something about terminology. What I was then going to say, if you had said that you were already familiar with free and bound variables, was that...
In the way I use "expression" and "formula," I consider an expression to be what denotes an object, or something that would denote an object if its free variables were bound; and I consider a formula to be what makes a claim, or something that would make a claim if its free variables were bound. I was then going to mention how some people mean by "sentence" what I mean by "formula." I was also going to mention that some people manage, somehow, to avoid the word "expression" altogether.
ok, I think you already used "formula" in enough examples here that it's clear what you mean by it in this context
So, in the way I use those terms, you can make expressions by attaching expressions to functions. For example, "2" and "3" are expressions, so "2 + 3" is one as well. There, "+" is a binary function symbol, in infix position, signifying addition. Similarly, "2" is an expression, so "2!" is an expression. There, "!" is a unary function symbol, in postfix position, signifying the factorial.
@Zanna Yeah, I'm already past that. The main purposes of what I am saying now is to clarify what I mean by expression and to clarify how different connectives are different.
@EliahKagan ...which is such a drastic thing to do to numbers that we use an exclamation mark for it :)
@Zanna It does increase faster than any exponential function. :)
20:07
but 2! is not very scary...
In this (typical) notation, parentheses are sometimes necessary, and when they aren't necessary, that is sometimes because of precedence rules. "2 + 3!" is a perfectly good expression, as is "(2 + 3)!" but they mean different things. In both cases, however, function symbols connect expressions to produce more complex expressions.
In contrast, predicates connect expressions to produce sentences. So when I say "(2 + 3)! > 100" that is a sentence because it has an expression on either side of the infix predicate ">".
And what I call sentential connectives, like "and," "or", and "not," connect sentences to produce more complex sentences. I call a sentence that is produced by attaching one or more (in some systems, zero or more) expressions to a predicate an atomic sentence or (I have seen this but it is less common) simple sentence, and a sentence that is produced by attaching one or more sentences with sentential connectives a compound sentence.
None of these conventions were originated by me, and all are commonly used, but they are not all universally used, which is why I am saying things like "I call" and which is why I had considered it necessary to expound at least somewhat on terminology even before knowing whether or not you were familiar with some of the ideas.
ok :)
So, except in systems where "2 < 3" is considered to name an actual object, rather than to assert a claim, I consider it somewhat harmful to call a sentence an "expression." However, that is the sense of "expression" that is used in the phrase "expression tree," if an expression tree is used to analyze and represent the information in a sentence rather than just an expression. And an expression tree can be used for this purpose. ...Here's a crudely drawn expression tree for 1 + 3 × 7:
        +
   1         ×
           3   7
ah ok, so those are the elements joined by the operators
I see the usefulness of this way of writing/drawing
@Zanna Yes, exactly.
To know which expression tree to write, I had to know that I should consider × to have precedence over +. Suppose, now, that I traverse the tree, in such a way as to write the symbol at its root, then traverse its left subtree according to the same rule, then traverse its right subtree according to the same rule. (This rule is recursive--at least as I just stated it--and is known as a "pre-order traversal." The "pre" is because I use the datum stored in the root before traversing subtrees.)
That preorder traversal is + 1 × 3 7. Suppose, now, that I have this tree instead, for 1 * 6 + 3 * 7:
           +
    *             *
1      6       3     7
The pre-order traversal of that tree is + * 1 6 * 3 7. Notice that the pre-order traversal of an expression tree is the expression in Polish notation.
20:19
I see that :)
So that's what I was talking about there, in characterizing some of the reasons Polish notation is useful and interesting. But was there anything else that I had said there that may still benefit from exposition‌​?
wow thanks so much for taking the time and effort to explain that! I totally see why Polish notation is useful and interesting in a way that I was not able to see before
If not... I have thoughts about how Polish notation might ameliorate that situation, though this does not necessarily mean that it would be useful for you to teach it to those students. (I don't have the details of what they are learning, their interests, their knowledge, etc.)
Also, as one final(?) terminological clarification, I should mention that some people use the word "predicate" to mean just unary predicates, and use "relation" for n-ary predicates where n > 1.
I have many kinds of students, and what they are learning and their interests vary widely. So all kinds of ways of explaining things will almost certainly be useful to me at some point. At the moment, I don't have many students, but the students I have are still very different from each other.
Apparently there is some keystroke that I can type in chat to erase the message I am working on without being able to undo the erasure!
20:34
O.O that sucks. Sorry for distracting.
That was not at all the cause. Instead, my message was too long, so I cut and pasted the second part of it elsewhere, then after doing that, lost the first part.
>_<
So it is common to write things like x < y < z. But < is a binary predicate, so under the rules articulated above, that cannot be correct, can it? But it is completely accepted in math--and even in a few programming languages, like Python, though not in most programming languages, where it is either ill-formed or means something altogether different that you usually don't want--to mean x < y and y < z. Similarly, one might say x = y = z.
that would be very inefficient
Well most programming languages do force you to be inefficient and to write things like x < y && y < z. Python lets you do x < y < z, though, and have the same meaning as x < y and y < z (Python uses and for boolean and), including the short-circuiting, where z does not even have to be evaluated, much less compared to y, if x < y was found itself to be false.
In math, the typical explanation of what is happening with stuff like x < y < z is that the y is participating in two sentences, and we mean the conjunction of those two sentences. It is thus a shorthand for x < y and y < z in the same way that x, y ∈ S is taken to mean x ∈ S and y ∈ S. ("And" is more often written but I'm usually avoiding that here, in part because I don't think MathJax works in this room and entering the Unicode character for it is inconvenient.)
20:43
what's ∈?
@Zanna Set membership. It is often read, "is in." More precisely, it could be read, "is a member of" or "is a member of the set" or (in some contexts) "is a member of the class." It should not be confused with "is a subset of," which is an altogether different binary predicate.
So, writing things like x < y < z is not that far off from what your students are doing when they wrongly write 150 × 2 = 300 + 80 = 380. There are a few ways to fix it. One, which is common in practice when calculating with a pencil and paper, is to use separate lines, and use indentation to indicate what is being stated to be equal to what.
sets have only just been added to the UK secondary curriculum. I never learned it in school, alas! I've encountered it through some of my students, and I think it seems awesome. I should probably try to teach myself this topic
150 × 2 = 300
         + 80 = 380
Or:
  150
×   2
= 300
+  80
= 380
@EliahKagan I usually demonstrate writing it like this
Though not standard notation, it is also unambiguous to write (150 × 2 = 300) + 80 = 380, provided that there not already any possibility that a sentence, or formula (in the sense described above), will be taken to be an expression.
20:57
@EliahKagan a ∈ S means a is an element of the set S; a ∉ S means a is not an element of S. (source)
Suppose you adopt the nonstandard "convention" that, when an equation appears in a context that would otherwise require an expression, the equation may be taken to refer to the object referred to by the expressions on either side of it. This should work fine, because those things are the same if the equation is true. You must, of course, maintain the usual precedence rule, which was less important to state before, that = has lower precedence than +.
(In general, with strict formal syntax rules that prohibit things like x < y < z, predicates automatically have lower precedence than function symbols, because if you apply a predicate, what you get is a sentence, which cannot be used as an expression, and thus cannot attach to a function symbol.)
actually had to look it up how it is called in English set theory and group theory is one of the math fundamentals
Similarly, though my understanding is that it does not accord with the standard conventions for Polish notation, it is also unambiguous to apply this notational extension to Polish notation, and what you get is unambiguous even without parentheses, provided that the usual criterion for Polish notation not to require parentheses--that the arity of each connective is fixed--still holds, which it does.
The nonstandard formula = + = × 150 2 300 80 380 in Polish notation is unambiguous, given the convention of allowing equations to be used to mean the thing that is equal. This resembles that somewhat, though it is fully general; the grouping doesn't have to all be at the end.
                               =
                      +            380
            =             80
     ×
150     2       300
hmm that's awesome
That's what it looks like as an (also nonstandard, but unambiguous) expression tree, whose pre-order traversal is that formula on our nonstandard Polish notation.
So I believe this is what @edwinksl was suggesting, in reply to that situation with your students using = in a nonstandard and ambiguous way by saying:
8 hours ago, by edwinksl
maybe we should use the polish notation
21:10
indeed. @edwinksl was right
* that formula in our...
understood
I actually started teaching math by accident. I trained to teach secondary science (specialising in physics). I started tutoring, and when you teach science people assume you can teach maths. I kept saying "well I don't really teach maths" but I kept getting asked to help with math homework too, or to help with sibling-of-student's math homework. People whose kids I helped with math told parents of other kids who wanted help with math to call me, and now I'm always helping with math!
even though I'm not very good at math :S
bed time here. Later folks. And thanks very much @EliahKagan for teaching me
@Zanna poor you, a friend of mine explicitly gives math tutoring sessions and even he always tells me he isn't good at math :D
Good night! Happy new year again! :)
Sleep well Zanna

« first day (128 days earlier)      last day (2439 days later) »