« first day (445 days earlier)      last day (3580 days later) » 

11:00 AM
sure thing, that's why I put it up ;)
 
Now if others would look at my old questions :P
 
1
Q: More German overengineering™ - Class mappings and factories

Vogel612Goals: So the plan was simple: Provide a factory to instantiate implementations of a certain interface (ModelConverter<T>), depending on what model-class you want to convert. The approach is relatively straightforward: statically map model-classes to ModelConverter implementations use that ma...

 
You what?
> If any of these steps fail, fail hard, because the application relies on the ModelConverter instances.
Something is missing :p
I won't recommend any Java 7 features, will be harder to review, can I recommend Java 8 features though?
 
@skiwi: You should start writing good commit messages so you won't have to change your habits once it is necessary
also: they are written for the future and you don't know what the future holds so you should just assume they are pure gold by then
 
I know hwo to write them and I do so with github for example, but the environment just doesn't lend itself for writing proper messages
Can't even branch with SVN :/
 
11:10 AM
1
Q: Chat using commands code

paritoshI have learning python was trying to make chat system which run by command , this is my first attempt to write the code . is this make sense or just a wrong usage of classes so there is a user class which will contains the users of chat and message is used to send the messages and count the leng...

 
codereview.stackexchange.com/questions/57771/my-first-console-application
Since my ugly exams are over.
I'm back to C#.
0
Q: My first console application

Hassan Althafusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Problems { class Program { static int FindFactor(Int64 UserInput) { int LargestFactor = 0; Int64 Number = UserInput; ...

 
Hm, saving my last vote for something special
 
@skiwi implicitly no. "Tied to java 6"
 
Whoever voted me, thanks!
 
would be nice if we could migrate that though..
 
11:16 AM
@Vogel612 I know :P
 
1
Q: My first console application

Hassan Althafusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Problems { class Program { static int FindFactor(Int64 UserInput) { int LargestFactor = 0; Int64 Number = UserInput; ...

 
@skiwi given the case we migrate (what I don't believe, because we could rewrite from scratch and be faster), I'd ask another question ;)
 
@Nobody Well, I am starting to close in on the silver badge.
 
@nhgrif: You can't earn that vote by being close to a badge. I need to set the requirements high enough to have a very limited (but non empty) set of candidates
 
Wait, what are we voting on?
Are you talking about upvotes or something else?
 
He's talking about his last bullet for today.
@skiwi roundabout half of mine..
 
I am Number 6 there Skiwi
79 votes baby.
 
lol I am in the first row for the month FWIW...
 
@nhgrif: Well I might as well give a downvote but given my track record that is more than unlikely and it is only 1/5th as "valuable" as an answer upvote
 
1
Q: Multiple loops versus multiple stringbuilders

PeteI've come across the following piece of code in a Razor view <table class="key-left"> <tr> <td>Company</td> @foreach (Customer c in Model.SelectedInstallers) { <td>@c.Name</td> } </tr> <tr class="even"> <td>Address</td> @for...

 
11:23 AM
If you're talking about simple upvotes on questions/answers, I wasn't suggesting that my closeness to a badge was good enough criteria. What I was suggesting was that I have 70+ Objective-C answers, which I feel are all fit enough for an upvote, and I know you haven't voted on all of them.
And from my perspective, I'm less than 70 upvotes away from the badge, so if each of them got just one upvote, I'd have the badge.
 
nhgrif lol.
 
But if I have an answer (or question) worthy of a downvote, I'd prefer you do that actually, provided you leave some feedback and give me an opportunity to turn the downvote into an upvote.
 
Might help yah. ;)
 
@nhgrif: I mostly avoid objective-c because I cannot read it and therefore not decide if a review is good or not
 
@Pimgd it is discouraged to use language-tags in titles. The most popular tag used will be added to the title (for google) either way.
 
11:26 AM
nhgrf how did you learn Swift so fast
 
@nhgrif: Then I'd rather prefer giving only the feedback, because I would surely forget to reverse my vote when you changed your post
 
@Marc-Andre 221 little dinosaurs on the wall
 
I'd remind you. ;)
 
@Vogel612 that for Stackexchange in general, or just for code review?
 
Guys, is reviewing for C# Active?
 
11:28 AM
@HassanAlthaf Go to my profile. Look at the languages I have some experience in. Objective-C is the one I know best. But the point here is there's a list of languages I know (at least somewhat), and adding a new one isn't that big of a deal.
 
@Pimgd SE in general.
 
Especially when the supporting library is identical to Objective-C, so the difference is mostly syntax.
 
nhgrif
Its hardly been a couple of months lols
 
So?
I'm not a master at Swift.
 
11:29 AM
nhgrif, do you agree about the fact that apple calls 'swift' the 'future' of Apple?
 
Well, it's certainly not the past.
 
Obviously.
Objective-C or Swift?
Which one do ya like
If I had a Mac, I'd go learn Objective-C.
 
They both have their strengths and weaknesses.
 
But unfortunately, I don't have a Mac.
I do have it on Virtual Box, but it's massively laggy.
 
Swift is still in beta, so many of the proposed strengths simply don't exist yet.
 
11:31 AM
Is there any way to code in Objective-C
On Windows?
 
Yes, but I don't know how, and you can't use the Foundation stuff or the Cocoa stuff.
It'd be like coding VB without .NET, or C# without .NET.
You wouldn't really learn the language.
 
Why lol?
Is it hard?
 
No... but you wouldn't have the frameworks and such that make modern Objective-C what it is.
 
I obv dont like Swift.
If I had a chance, objective-c all the way.
 
@Nobody Can you read C? Do you know OOP?
What's wrong with Swift?
 
11:33 AM
Cos its new?
It may have a potential of failing.
 
That's not a very good reason to not like something--particular something that has the entire support of Apple.
 
Apple sucks anyway.
 
@nhgrif: Yes and yes, but somehow most of your posts look more like brainfuck with variable names than C to me
3
 
lol...
Well, if you know C and know OOP, there's only one thing left to know.
someInstance.someMethod(someArgument); in most languages looks like this in ObjC: [someInstance someMethod:someArgument];`
 
@Nobody As a "brainfuck developer", I really have to say: LOL
 
11:36 AM
@nhgrif A bit LISPish
 
If you have multiple arguments: [someInstance someMethodWithArgA: a argumentB:b];
 
that looks creepy
2
 
And technically, this is perfectly valid: [someInstance someMethod:a :b];
You can have unnamed parameters.
You just can't have unnamed parameters in a CR post without my spending an entire answer on it.
But other dot-notation parenthesis-having languages have named parameters.
In Swift: someInstance.someMethod(argA: a, argB: b);
And Swifts not the only one, but I don't remember the others.
Once you get over the square bracket notation and named parameters, it's C + OOP.
Except that we prefer our methods and variables have verbose names.
Anyway, I'm headed to work.
 
@SimonAndréForsberg You might need to explain in a little bit more detail why that is funny.
 
@nhgrif and that if someone changes the argument's name, the code breaks, you gotta find a way to get over that too
 
11:39 AM
0
Q: NodeJS framework looking for feedback

jasper199069Recently I released a framework for NodeJS called Raddish. Now after version 2.0 I am looking for feedback from other developers for documentation as well as code wise. You can find the github repository here: https://github.com/JaspervRijbroek/raddish The npm module is here: http://npmjs.org/pa...

 
thoughts of coldfusion still haunt me whenever someone mentions named parameters
shudder
 
@Nobody >>++++++++[<+++++++++>-]<+.>++++++[<+++++++>-]<+.>+++++++[<----------->-]<.>+++++++[<++++‌​+++++++>-]<-.>+++++++[<------------>-]<+.>+++++[<+++++++>-]<-.>++++++<++++++++>-]<.-----------------.+++++++‌​+.+++++.--------.+++++++++++++++.>+++<------>-]<.++++++++.>++++++++[<--------->-]<--.
 
[tag:>>++++++++[] nope
@SimonAndrĂ©Forsberg >>++++++++[<+++++++++>-]<+.>++++++[<+++++++>-]<+.>+++++++[<----------->-]<.>+++++++[<++++‌​‌​+++++++>-]<-.>+++++++[<------------>-]<+.>+++++[<+++++++>-]<-.>++++++<++++++++>-]<.-----------------.+++++‌​++‌​+.+++++.--------.+++++++++++++++.>+++<------>-]<.++++++++.>++++++++[<--------->-]<--.
 
@skiwi [tag:>>++++++++[]] Your Brainfuck didn't compile! (And now results in an inf-loop)
Not that Brainfuck actually compiles, but well... you know what I mean
 
Brainfuck will fuck your brain.
 
11:44 AM
@SimonAndréForsberg: Not a very dense encryption
also: BIt's ?
 
NOOOOO @Vogel612
You didn't change Right to Permission
 
@Vogel612 This () should be a valid tag for CR
 
@Nobody B? I didn't write a B? (at the start)
Did I just make a whole lot of Brainfuck typos?
 
@skiwi sorry that I didn't get to renaming ~9 Classes and 2 xhtml views, as well as 3 Constants yet...
 
hehe :p
 
11:51 AM
@SimonAndréForsberg: Okay, the start is It's and then comes the endless loop with BIt's
 
I'm disappoint.
@SimonAndréForsberg Are you working on @Vogel612's question?
 
@Nobody I think I made some mistakes when copying the code. It was supposed to say "It's Brainfuck!"
@skiwi nope
 
It's quite a big chunk, I'm not sure if I'll go and review this, though I do spot some points already
 
0
Q: how can I reduce this code to the minimum possible

Luiz K.I have an API with the following code class API::V1::ReceptionController < API::V1::APIController before_filter :ensure_document_exists def produto jid = ProdutoWorker.perform_async params[:document] render json: {jid: jid}, :status => 200 end def cl...

 
@CaptainObvious looks like it could use a shot at a factory for ruby...
 
11:56 AM
Guys, syntax for an array in C#?
 
Does Ruby have a concept of method references?
I don't even know what a ProdutoWorker is :/
 
T[] name = new T[int length];
@skiwi i figured it was italian...
assuming produto --> product --> productworker.
 
I more meant with respect to its concept
like a class, variable, method, etc
 
i think it's a class....
 
0
Q: PHP interview test

Aleksandar AndrijevicI got a PHP developer interview test to solve for a company.I didn't get the job but I would like to know where I was wrong. Did I understand the test completely? Thank you. /** * Create an Animal Choir simulator * * The task constraints are: * * There must be 3 different choir member anima...

 
12:00 PM
But all have perform_async so they all extend Worker?
 
I think there is no Worker..
this looks like some pretty heavy duck typing to me..
 
I'm tempted to VTC for unclear
But I'm no Ruby expert, so I won't cast that vote
 
Guys, how to find the count of how many elements are there in an array?
 
@HassanAlthaf Have you read C# tutorials?
 
Monking @all!
 
12:03 PM
@skiwi yes.
 
This is frustrating, I know a solution, but I don't know the language
@HassanAlthaf And that concept didn't come up in the tutorials?
 
@skiwi Don't write code and post a conceptual answer, stating they could learn something from implementing it on their own.
3
Whilst seemingly protecting your status as a good programmer =D
 
@Pimgd You fit right in around here.
 
Is that a good or a bad thing?
 
I'm not sure. Your call.
=)
 
12:06 PM
Guys, in my WPF Program
public partial class MainWindow : Window
{
int[] numbersArray = new int[10];
int[] operatorsArray = new int[9];

int storageVariable;
int numbersCount;
int operatorsCount;
After that I typed in
int numbersCount = numbersArray.Count;
And it gives an array.
*error
 
I think you bring up a good point though @Pimgd. You don't necessarily need to know a language intimately to give good conceptual advice.
 
0
A: how can I reduce this code to the minimum possible

skiwiI'm not familiar with Ruby, so I will write a no-code answer here, discussing what you could change. I am assuming that ProdutoWorker, etc. all extend a Worker class, where extending is an OOP-definition here. Then you should make a method that takes the Worker as input, and then calls somethin...

 
@HassanAlthaf sorry, but what IDE do you use??
 
VS2013
 
@HassanAlthaf I'd expect an array to have some kind of length attribute in any language
 
12:08 PM
Arrays have a Length ;)
 
skiwi I did.
 
Monking!
 
But for my calculator program
 
usually you should get a nice idea by just adding the dot and pressing Ctrl+Space
 
Does Ruby use ducks everywhere?
 
12:08 PM
Monking @Mat'sMug btw.
 
Skiwi
It doesnt let me store the count of how many elements are there in the array.
So if there are 10, it should stop inflating.
 
btw, no offense @ckuhn203 concerning the duck typing ;)
2
 
@Vogel612 LOL. None taken.
 
@HassanAlthaf this sounds a lot like your attempt to solve a problem is misguided..
 
@Vogel612 I have created an App for Calc before.
 
12:10 PM
So, I broke 3k while I was sleeping. Thanks @Santa!
 
But it could do only 1 sum
like 1 + 1
but, this time i want to be able to do
1+1x5-2/2
 
@Hassan arrays have a Length; collections have a Count.
 
keep in mind Length = Count+1
 
It gives me this error now:
A field initializer can not
reference the non-static field
 
12:11 PM
lol just paste it,.
 
method or property
how?
it highlights it in red.
 
You said you read a C# tutorial, did you also read a proper C# tutorial?
4
 
Ctrl + C, Ctrl + V
 
Wait, I took a screenshot.
Skiwi, I cant find some good WPF tuts
 
I'm trying to learn a bit about Ruby, and I am only the trusting the official documentation/tutorial here and not some random site.
 
12:13 PM
I've learned to only trust the compiler
 
0
Q: Validate multiple regexes without a for loop in Javascript

Nate KerkhofsFor a project, I need to validate a VAT number against the correct algorithm. I found a library for this at http://www.braemoor.co.uk/software/vat.shtml (freeware, so I should be able to reuse it) that I'm grateful exists. However, I feel like it could be improved upon in a few ways, but I'm not ...

 
I would want to trust the JLS when learning about Java, but too bad it's some hundred pages long. (JLS = Java Language Specification)
 
@HassanAlthaf sounds like you could use a constant and use that constant in both your array size declaration, as well as your variable
 
What do you mean>
 
I mean, setting both to 10 by hand works
 
12:16 PM
I didnt get it.
 
if you can do this
int[] intArray = new int[10];
int arrayLength = 10;
Then you can also do this
const int ARRAY_SIZE = 10;
int[] intArray = new int[ARRAY_SIZE];
int arrayLength = ARRAY_SIZE;
or am I forgetting something?
const might be a different keyword, depending on language
 
I want the variable.
 
additionally, why do you even need something like -
 
To identify the length of the Array
 
Isn't there an intArray.Length property?
 
12:18 PM
Like how many elements
 
oh
The error is saying "don't use this outside of a function"
so don't use it outside of a function
 
@CaptainObvious Borderline off-topic. Not his code, but he has been working on it. I'm not sure about that one.
 
I know it blabs something about "static context", but that's basically "not in a function" or "in a static function"
 
I guess it falls under "Code that you maintain".
 
Pimgd
Do you know PHP?
 
12:21 PM
@Vogel612 Creating arrays of generic types, are we?
 
What is the C# way of doing this:
$var = count($array);
 
@SimonAndréForsberg where?
 
@HassanAlthaf kinda? I can read the syntax, but don't poke me with library functions
 
23 mins ago, by Vogel612
T[] name = new T[int length];
 
12:22 PM
@SimonAndréForsberg syntax demonstration
 
apparently, array.Length
 
@Pimgd just that you can't use $ in a variable name...
 
haha, they claim Ruby is more elegant as other languages
@names.each do |name|
  puts "Hello #{name}!"
end
names.forEach(System.out::println), beat ya Ruby!
 
ohk.
ewwww ruby is so ugly.
C++ is better
cout << "Hello ", cout << name;
 
12:23 PM
@skiwi It all depends on what you think is more elegant, I suppose.
 
oh wait, nevermind.
 
Ruby is ducktyped, I think I'll need to stay away from it.
 
@skiwi
@names.each {|name| puts "Hello #{name}!"}
 
What about C# @skiwi
Ducktyped>
 
@Vogel612 In Java you can :)
 
12:24 PM
@skiwi: You forgot about the Hello and the !?
 
Ducktyped?
 
@Nobody Can't change it anymore now
But well
 
@HassanAlthaf Looks like a duck, quacks like a duck, it's a duck.
 
@HassanAlthaf WRONG!!! Don't use import namespace std;!
 
What.
 
12:25 PM
names.forEach(name -> System.out.println("Hello " + name + "!"));
 
@HassanAlthaf std:cout << "Hello", std::cout<<name;
 
The only benefit of Ruby I'm seeing is the string definition.
 
someone forgot the buzzer for "wrong answer!"
3
 
@HassanAlthaf: And chain the operators properly: `std::cout << "Hello " << name << "!\n";
 
@Pimgd A FizzBuzzer?
 
12:26 PM
ok cool.
 
@ckuhn203 depends. Does it extend Buzzer?
 
hahahaha
 
@Pimgd no it's just a Consumer<Integer>
 
@Vogel612 I'm too lazy for a full review, but BrokenCodeException is just really an IllegalStateException
 
@skiwi ?? wat?
 
12:28 PM
What does BrokenCodeException tell me?
 
sorry how would you handle code-time errors in "constructor calls" then?
 
@skiwi There is merit to BrokenCodeException. It tells you that whatever happened is due to developer error
 
Use IllegalArgumentException if the arguments of a method are incorrect, use IllegalStateException if something internal to the class is screwed up
 
IllegalStateException could imply there has been a race condition
 
@skiwi the state depends on the runtime...
the problem does not exist in Runtime though..
In fact there should be a third type of Exceptions..
 
12:29 PM
I must disagree with this for example:
        private ClassMapping(final Class<?> modelClass, final Class<?> clazz) {
            if (modelClass == null || clazz == null) {
                throw new BrokenCodeException(
                        "Cannot create a mapping without modelClass and converterClass");
            }

            this.modelClass = modelClass;
            this.converterClass = clazz;
        }
 
That looked weird to me
 
Nothing is "missing" here, you just supplied null as variables and that is your error
 
Exception, RuntimeException and ProgrammerException
 
but then I realized the constructor could only be called by defining an enum value
and all was clever and well
 
there is no variables...
nobody but the enum element declarators can invoke the constructor (taken aside Reflection)
 
12:30 PM
modelClass and clazz are variables/parameters
 
@Vogel612 That's using namespace std;
 
@SimonAndréForsberg oh the mixup..
 
@SimonAndréForsberg oh no, now we need a wrong "wrong answer" buzzer
 
If you can't recover form exceptions and don't want them to be checked, you should just wrap them in a RuntimeException imo and be done with it... Then outside of your program logic you should write a piece of code that catches all exceptions and logs them
 
@skiwi What's wrong with a simple RuntimeException?
 
12:32 PM
@SimonAndréForsberg it's about BrokenCodeException here....
 
@SimonAndréForsberg If there is more meaningful details you can give about broken code, then you should give them.
 
which actually extends RuntimeException
 
I'm tempted now to create my own version of this in Java 8, then convert it to Java 6 and then do a review based upon that
 
What if the exception stated "please go to this file on your computer and email it to <address> so we can fix our broken code"?
Then it'd be a BrokenCodeException that can be acted upon
 
@Pimgd that's not a good idea to be rolling out....
 
12:33 PM
@Vogel612 Well that's good, but it does feel like you don't need to create another RuntimeException, can't you use one that already exists?
 
@Pimgd Then the BrokenCodeException should have those things (file/email) as attributes, and then you could use it yes :))
And then you could call BrokenCodeUtils.handleBrokenCodeException(brokenCodeEx);
 
@SimonAndréForsberg I just wanted to keep non-handlable LogLevel.ERROR exceptions separate from non-handlable LogLevel.FATAL in class design.
 
0
Q: Website parsing optimizations: cleaner way to deal with special cases and improving data transfer between classes

MahirI have a DiningHall class that has the 3 properties: openingTime, closingTime, and nextMealOpeningTime, and I need to set these NSDate properties from the data from this website. Each DiningHall object corresponds to a particular meal. For example, there is a separate "De Neve" dining hall objec...

 
And this should for always stay hypothetical :p
 
@skiwi why exactly do you want a utility class for that again?
these exceptions are not handlable and not ignorable by definition
 
12:36 PM
I need to take my leave or my day will have been very unproductive. See you all later.
4
 
I'm supposed to be working too =/
 
Hi guys. :)
 
wb @HassanAlthaf
 
Oh wait but it was okay since
 
fanx.
I'm working on a C# WPF Calculator.
Almost done.
 
12:38 PM
when you got it working, make it as beautiful as you can and post it for a ripping review ;)
 
Then we'll lovingly shoot it to bits again
 
@rolfl FizzBuzz in PostgreSQL is not bad at all if it is well implemented.
0
A: Tired of FizzBuzz yet?

200_successProliferation of tables Database schemas should not be designed such that you need to create more tables to accommodate more data. The same principle applies here. Instead of separate tables Fizz, Buzz, Woof, Ping, and Plop, you should have a single NoiseDefs table. A classic unparameterized ...

 
Pushing elements to an array is like this right guys?
numbersArray.add(Convert.ToInt16(Number));
 
Why do you need to convert a number to Int16 to add it to a numbersArray?
one of the names in that statement could be chosen better
 
@Vogel612 I've removed .
 
12:43 PM
Pimgd cos Number variable is a string
 
it still feels wrong though
probably because of a lack of context
 
it is wrong..
you cannot .add to an array..
you're using a List-type...
 
@Vogel612 Not handalable and not ignorable? What?
 
@skiwi well there's strictly speaking 3 ways of dealing with an exception
handle, bubble or hide
 
Is this still a valid concern,
12
Q: Do not prematurely accept answers

codesparkleWith the voting debate going on, I'd like to make a related point: Please do not prematurely accept answers. As much as I love getting the tick mark, it is a signal that tells the community that a question is adequately answered. It also tells everyone that the reputation reward for the bes...

 
12:49 PM
assuming root level we cannot bubble anymore
 
or can I just accept the answer to my question (after 1 hour already)
 
May want to add a fourth option to it
 
--> handle / hide (or ignore)
 
You can really handle an exception and solve it, or you can "handle" an exception by logging it
@Pimgd It's really an old post, I wouldn't say that post is applicable anymore.
 
the problem is, that as I stated the application depends on the factory. that option is out of the race...
 
12:50 PM
@200_success I was considering adding an answer about those separate tables myself, but I don't know nowhere near as much SQL as you do. Excellent answer.
 
I tend to personally wait with accepting answers for a bit though, as you get more views and more votes then.
 
We can't just silently log de-facto fatal exceptions....
 
@Vogel612 I think I'm really just going to rewrite it and let you doublecheck to see if I have a clue about what is going on
 
I also agree that it is not as bad if it is well implemented (Heck, if it's possible to do in Brainfuck...)
 
@Vogel612 May I ask, why not?
Logging does not mean that they should not be fixed
 
12:52 PM
@Pimgd If you accept an answer, you will be less likely to get more answers.
 
@skiwi but the characteristic of this exception is, that it's not really making sense to try and cover up the leaking abstraction that happens in the data-representation.
 
But usually I do not handle RuntimeExceptions, I let the program die
 
the application could in fact terminate right then and there...
 
@Pimgd I guess so. Mostly from new users though. I saw a guy accept an answer within 15 minutes of posting his question the other day.
 
@Vogel612 I might understand you now
 
12:53 PM
so what is the difference between the BrokenCodeException and RuntimeException then?
 
Your BrokenCodeException is a way to indicate that?
 
exactly
 
@Vogel612 Are you catching your BrokenCodeException?
 
it's actually a MarkerException only..
 
And your outer-shell does say a System.exit(0) if ex instanceof BrokenCodeException, and else logs the RTE?
 
12:54 PM
@skiwi for the JEE application there is no outer shell..
i would catch the BrokenCodeException separately..
 
If you are, than it should extend Exception I think. If you are not, then I don't understand why you don't do new RuntimeException.
 
Then why do you need to differentiate between a BCE and a regular RTE?
 
external libraries?
 
because there is some RTE's in my project that are in fact handlable.
 
@Vogel612 That's not really a good design :(
You'll forget about handling them if they're unchecked
 
12:56 PM
@skiwi how would you make it better??
 
Make those exceptions then checked
If you can handle them
 
I'm with @skiwi on this one.
 
so you mean I should catch them where they occur and wrap them in a CustomException extends Exception?
 
Though I personally tend to actually leave them unchecked because of lambda-limitations :/ Which is a bit ugly
 
Good morning everyone!
 
12:57 PM
@Marc-Andre Morning! :)
 
@Vogel612 If you want to absolutely handle them, then yes
Though it is hard to tell in your case without knowing the whole application layout, which would require a bunch of fancy diagrams and tens of pages of documentation, which is not really what you probably were planning to do ;)
 
@Vogel612 Or it might be the case that me and @skiwi are being overly-pedantic here.
 

« first day (445 days earlier)      last day (3580 days later) »