On occasion of our anniversary celebrations, we offered some cheese boards a while back. If you were late for that, though, no sweat! You’re just in time for another limited edition super special swag contest!

This is the bit where you go It’s about time, isn’t it?” To which I’ll reply with “well... yes, it is about time! How d’you guess?!?”

So, if you want one of these with our logo on it:

enter image description here

...then all you need to do is something in which time is the centerpiece! As happened last time around, puns are encouraged, obviously.

You can:

  • Build a time-machine (ok, it doesn’t need to be functional).
  • Write a song or a poem about time (hopefully, something a bit more cheerful than what Pink Floyd did).
  • List a few things you'd drop into a time capsule — either to be used as they usually are, or... to be sent to the past with your time-machine?
  • Write the story of a life-time.

...or anything else you can find the time to do... in time before the deadline. The top 25 entries, as calculated by net upvotes received (not aggregate score, down-voting won't help you win!) will receive this timely package. Whatever it is, you have to be able to submit it as an answer to this question. Links to videos are accepted, however they must be of your own creation and the video must remain available. If either stops being true, your submission will be removed. Also, any code or work of art produced must also be of your own creation.

So, as with the previous context, any format you can think of is allowed: text, images, crayons on newspaper, LEGO, popsicle sticks — as long as you make it temporal... or I guess intemporal or timeless stuff are also accepted...? Anyway, you get the gist!

The Rules

  1. You can post as many entries as you want in good faith as long as they are in line with our terms of service, acceptable use policy and code of conduct. This is also a reminder that all user-contributed content falls under our CC-BY-SA 3.0 license.

  2. Contest is open from 2018-11-27 to 2018-12-27, final entry must be received at or prior to 23:59:59 UTC on the last day. Contest will then be locked for historical reference.

  3. Employees are eligible.

  4. You must be a user in good standing on Meta Stack Exchange during the entirety of the contest, or your entry may be disqualified. Let's have some good, clean fun.

  5. Winners will be notified via email within 10 days of the contest closing. As we will be ordering these based on demand (they're not cheap!), you'll need to allow approximately 30 days for delivery. You'll need to provide us your shipping information privately, in accordance with our privacy policy.

  6. If you win but don't care for watches, we'll give you a selection of other items of approximate value. We want you to enjoy the prize.

  7. Void where contests are prohibited.

Get to it! Time is of the essence!

Special note for new Meta users

Due to a technical issue, any answer submitted by a new user will cause the question to be automatically protected. If you make a submission here, please consider one of the steps here to request unprotection, to prevent problems for the next new user.

If you'd like to submit an answer and the question is protected, you can follow one of the steps linked above to request unprotection. This contest is open to new users; the fact that it may be protected is purely due to the way the system is currently implemented.

This question has an open bounty worth +50 reputation from Shadow Wizard ending in 7 days.

One or more of the answers is exemplary and worthy of an additional bounty.

Consolation prize for answers that will not win but deserve something for the time spent on them. :)

  • 36
    Phew - posted just in time! – Tim Post Nov 27 at 16:23
  • 34
    entry to be completed in 6-8 weeks – Glorfindel Nov 27 at 16:27
  • 9
    @rene You could build a time machine out of socks if you really wanted to. – Tim Post Nov 27 at 16:31
  • 23
    I don't know if i have time for this... – Pikoh Nov 27 at 16:32
  • 64
    @TimPost Requesting a name change to Time Post. – Rand al'Thor Nov 27 at 16:32
  • 17
    Umm... watch your comments, y'all! – Shadow Wizard Nov 27 at 16:36
  • 18
    All these puns make me wanna clock someone – Erin B Nov 27 at 16:39
  • 7
    Can anyone do something with Jon Skeet's most upvoted answer? – Chair Nov 27 at 17:05
  • 10
    I don't know why this was not posted yet: winterbash2018.stackexchange.com – MEE Nov 27 at 18:04
  • 3
    If you think you can read this thread without coming across time puns, you're going to have a bad time. – Zach Saucier Nov 27 at 18:28
  • 2
    @TimPost by the way, do you have time to make a progress on HNQ matters? – gnat Nov 27 at 21:54
  • 45
    I find these contests very nice. However, the answers shoulds be displayed ramdonly, otherwise you are privileging those who got here first and those who have already received lots of votes, since I dont think everybody would check all pages to see what was sent...=( – carla Nov 28 at 1:19
  • 6
    I really don't have the time for this. – Dragonthoughts Nov 28 at 12:49
  • 5
    Clarified the post to explicitly call out for original stuff, @Mari-LouA; thought it was clear enough, but I guess making it outright explicit doesn't hurt :) – JNat Nov 28 at 14:09
  • 12
    The hours on the "swag" go 1, 1, 1, 4, 5, 6... That's a weird watch! – Cris Luengo Nov 29 at 7:06

130 Answers 130

There once was a site known as Meta,
a prestigious site, a trendsetter!
A place to win prizes
(which sort of disguises
its mission of making Stack better)!

One day in the year's festive season
(with little-to-no given reason)
Stack deigned to release
an upmarket timepiece
in exchange for a lyrical pleadin'.

Into the competition came fredley
whose limericks were considered quite deadly.
In one of his stanzas
his mind went bananas:
he could see his own future confusedly:

In his mind's eye he witnessed his fate
of fantastic watches, no, wait!
He got too distracted,
his code is impacted!
This isn't going to end great...

In the present he's back on S.O.:
his program's decided to throw
a horrible error,
he looks on with terror,
its message: Stack Overflow


Final Result

enter image description here enter image description here enter image description here

You can download both models (v1 and v2) on Thingiverse

Well, I finally found some time, used some of my (disappointing) skills in 3D design and made something for this contest.

And here it is:

enter image description here

It's a 3d model of Stack Overflow logo with a (somewhat)clock on top that would be (hopefully!) printable.

A view of it in Simplify3d:

enter image description here

I still haven't tried to print it, but i will and promise to edit and upload some pics here if it finally gets a decent printing :)

Two more things:

  • My initial thought was to make it functional by adding a clock kit on top. But I must first find one that meets my requirements, buy it, and change the design accordingly...

  • Upload it to Thingiverse so anyone may download and print it at home.

Both points heavily rely on me fighting my procrastination powers, so I wouldn't bet on me,but who knows... :)


Version 2.0, ready to accomodate an old clock I found at home.

enter image description here

Edit 2

Images of the first printed model. It's half the size the final model would be, and have some printing problems (should have printed it in another orientation) but makes a nice desktop piece :)

enter image description here

Name of the project by @JackNavaRow,thanks for the idea!

Well, considering the current season and that the theme is the passing of time, I think an Advent Calendar is most appropriate here. Run the attached snippet to see it.

var today = new Date();

    autoOpen : false, modal : true, show : "blind", hide : "blind"
$(".day").click(function() {
    if (today.getMonth() === 11 || today.getYear()> 2018){
      var clickedId = $(this).attr('id'); 
      if (today.getDate() >= Number(clickedId)){
      else {
    return false;

function fortuneCookie() {
  var fortunes = [
    "You will get a fortune cookie.",
    "You will vote for an answer about an advent calendar on meta.",
    "Error: 404 Fortune not found.",
    "You cannot grasp the true nature of the fortune cookie attack.",
    "This is not the fortune cookie you were looking for.",
    "One does not simply eat a fortune cookie",
    "I was a meta user like you some time ago but then I took a fortune cookie to the knee.",
    "The Parrot! Do not trust the Parrot!",
    "You will start watching a show about candy colored ponies.",
    "You will find true happiness if you share this answer link with 7 friends withing one hour."    

  var randomFortune = fortunes[Math.floor(Math.random() * fortunes.length)];

function claimCookie(){
  alert("Sorry, the Stack Exchange snippets sandbox security does not allow us to set cookies on the client :P.")

function closeUpdateDialog() {

function startEndlessUpdate(){
  var messages = [
    "Generating bugs...", 
    "Downloading MLP episodes...",
    "Configuring flux capacitor...",
    "Sealing user credentials...",
    "Removing Herobrine...",
    "Installing SharePoint...",
    "Hatching chickens eggs...",
    "Doing lame puns...",
    "Resting for a bit...",
    "Mapping dungeons...",
    "Spawing NPCs...",
    "Generating artifacts...",
    "Filling water buckets...",
    "Knitting hats...",
    "Formatting local disks...",
    "Collecting 200$ from passing start...",
    "Parsing HTML using RegEx...",
    "Summoning Cthulhu...",
    "Pinging Shog9...",
    "Asking Jon Skeet for the codez...",
    "Searching for unicorns...",
    "Asking to upvote swag contest submissions...",
    "Attempting to become the Pirate King...",
    "Catching all Pokémons...",
    "Synching clocks...",
    "Frammenting disk...",
    "Increasing ram usage...",
    "Reading some books...",
    "Loading cat pictures...",
    "Drawing red hand circles...",
    "Staring chat messages...",    
    "Collecting more hats...",
    "Configuring HDRR...",
    "Crafting Rings of Power...",
    "Waiting for planet alignment...",
    "Improving room feng-shui...",
    "Coloring picture books...",
    "Eating cotton candy...",
    "Baking cupcakes...",
    "Buying muffins...",
    "Making friends...",
    "Ranting for downvotes...",
    "Putting holes in swiss cheese...",
    "Raising the sun...",
    "Watering tomatoes...",
    "Opening worms cans...",
    "Increasing system entropy...",
    "Generating funny messages...",
    "Scolding Shadow Wizard for being uncouth...",
    "Computing question to the Life, Universe and Everything...",
    "Waiting for user to get bored...",
    "Writting letters to Princess Celestia...",
    "Learning friendship lessons...",
    "Making jokes no one will understand...",    

  setInterval(function switchUpdateMessage(){ 
    var randomMessage = messages[Math.floor(Math.random() * messages.length)];
    return switchUpdateMessage;
  }(), 3000);
  --transform: scale(0.5);

#calendar  {
  width: 35%;
  margin: auto;
  border: 1px solid black;

#calendar > div {
  display: flex;
  justify-content: space-evenly;
#calendar > div > div {
  width: 14%;
  text-align: center;
#calendar > div.header{
  background-color: red;
  color: white;
  font: 12px bold;
  height: 20px;
  border-bottom: 1px solid black;
  line-height: 20px;

  --background: green;

.day {
  height: 30px;
  line-height: 30px;  
  vertical-align: middle;
 background-image:  url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgdmlld0JveD0iMCAwIDE4IDE4IiBjbGFzcz0ic3ZnLWljb24iPjxwYXRoIGQ9Ik0xIDEzYzAgMS4xLjkgMiAyIDJoOHYzbDMtM2gxYTIgMiAwIDAgMCAyLTJ2LTJIMXYyek0xNSAxSDNhMiAyIDAgMCAwLTIgMnYyaDE2VjNhMiAyIDAgMCAwLTItMnpNMSA2aDE2djRIMVY2eiIgc3R5bGU9ImZpbGw6bGlnaHRncmF5Ij48L3BhdGg+PC9zdmc+");
  background-repeat: no-repeat;
  background-size: 25px;
  background-position: center; 
  font-size: 15px;
  font-weight: bold;

.theLegendaryFreeHandDrawnCircleOfLegends {

background-size: 100% 100%;
  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEcAAABCCAIAAACKH1z7AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAL0SURBVGhD7Zm/bhQxEId5EDpSQRW661KRKqlCBVVSkSqiQRRIFDwCBRIFPRI9okE0UR4gokFUUEUiYUMCR/hz/FYenWDO6/GMvQ4Gf5pqds/jb+313novzP5FmlU9NKt6aFb10KzqoVnVQ7OqhySrn113evfe0WTlw8UlMXAaTv7+5i39eEwsVioZFoeXrnx++IgaGg2L1cntO6yv5sClQWs/3r2npjOhtsJAHV6+yjqXJZzh1+cvqFICaqsvj5+w3mQPXLXEAVRbHV+/wToRjn4EtnewSBjmbe92cECFNaitTu8/YLVjAtcCvz17+erjyjV2KBy4KIZB01nhpupW11jhyKAm/mT69Jm4lh4tT7DkojT9JgKFVYoSgloZ5mx3r39gLE/YD10c39yk8yKItYLSp61brFJ8YECooQgwgN5lNn55lK3g433m4nmK+4RO8oEVwt1FuPzhMxf5tv96Uaxb36DDErLV0Nql7agWiGHWsaJ0TEK28k4G1YxKgdWlrIRsxdpFwHPsgZrDSlNWQm1luElSYNUpKyFYYamwtZsLW/WQlfcBRcdKYasessKCzhpVPQqzwDpAWYmQFVv9+gfU7h4dK8XvHUBQViJkxVosuUjMYX2grITCirJlsfWhWZ0Htj40q/PA1of/3upke8e2N5IC6wNlJUJWeOyyRm17IymwDlBWImTl3STDSyQdLgKrTlmJkBVe0RdfGTGAJechq05ZiZAV8L5mu829MrDSlJUQrByLN1iZDzaA1aWsRJTV0A1WYCqyopSViLLCyHh3WJEce9BYRcpKRFkB78rhot8unk7pvNywWpSViLUCWDmG9v671bWRZiMrRFkJhZVjaLsYs3GMPx+sCmUl1FYgMGh5/3yYd7gsVo5ufYOVdIF8lhHzfq+gYxJ2q6GFcbyI3+GyWwGIab8dpkT8DleS1Rztx2JDYF5QsQjyWI09aNrN/TxWDu9f4cTA2mPYWs1p9ffQrOqhWdVDs6qHZlULs9kvgpwKtSKN7Z0AAAAASUVORK5CYII=");

.flex-row {
  display: flex;
  justify-content: flex-start;

.flex-button-row {
  display: flex;
  justify-content: space-between;

  font-size: 6px;

  background-color: gold;

text-align: center;

  font-size: small;
  font-style: italic;

  border: 4px double white;
  padding: 10px 5px;
  background-color: black;
  height: 52px;

.legendaryItem {
  background-color: black;
  border: 4px double white;
  padding: 5px;
  flex-grow: 1;

.legendaryItem > .name{
  font-style: bold;
  color: #ff8000;
  margin: 5px 0 0 0;
.legendaryItem > .rarity{
  font-style: italic;
  color: gold;
  margin: 2px 0 0 0;
.legendaryItem > .description{
  color: white;
  margin: 5px 0 0 0;
  font-size: 14px;
.legendaryItem >.flavorText{
  color: yellow;
  margin: 5px 0 0 0;
  font-size: 12px;
  font-style: italic;
.legendaryItem > .sellingPrice{
  color: white;
  font-size: 14px;
  margin: 10px 0 0 0;

  color: black;
  background: rgb(211,211,211);
  border: 2px ridge black;
  font-size: 10px;

.updateInfoArea {
  display: flex;
  justify-content: flex-start;
  flex-direction: column;
  align-items: center;
.updateInfoArea > #updateMessage{
  font-size: small;
  font-style: italic;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
  <link rel="stylesheet" href="/resources/demos/style.css">
  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js"></script>
<div class="wrapper">
  <section id="calendar">
    <div class="header">
      <div class="dayLabel">Mon</div>
      <div class="dayLabel">Tue</div>
      <div class="dayLabel">Wed</div>
      <div class="dayLabel">Thu</div>
      <div class="dayLabel">Fri</div>
      <div class="dayLabel">Sat</div>
      <div class="dayLabel">Sun</div>
    <div class="dayRow">
      <div class="emptyDay"> </div>
      <div class="emptyDay"> </div>
      <div class="emptyDay"> </div>
      <div class="emptyDay"> </div>
      <div class="emptyDay"> </div>
      <div id="1" class="day">1</div>
      <div id="2" class="day">2</div>
    <div class="dayRow">
      <div id="3" class="day">3</div>
      <div id="4" class="day">4</div>
      <div id="5" class="day">5</div>
      <div id="6" class="day">6</div>
      <div id="7" class="day">7</div>
      <div id="8" class="day">8</div>
      <div id="9" class="day">9</div>
    <div class="dayRow">
      <div id="10" class="day">10</div>
      <div id="11" class="day">11</div>
      <div id="12" class="day">12</div>
      <div id="13" class="day">13</div>
      <div id="14" class="day">14</div>
      <div id="15" class="day">15</div>
      <div id="16" class="day">16</div>
    <div class="dayRow">
      <div id="17" class="day">17</div>
      <div id="18" class="day">18</div>
      <div id="19" class="day">19</div>
      <div id="20" class="day">20</div>
      <div id="21" class="day">21</div>
      <div id="22" class="day">22</div>
      <div id="23" class="day">23</div>
    <div class="dayRow">
      <div id="24" class="day">24</div>
      <div id="25" class="day">25</div>
      <div class="emptyDay"> </div>
      <div class="emptyDay"> </div>
      <div class="emptyDay"> </div>
      <div class="emptyDay"> </div>
      <div class="emptyDay"> </div>

<div class="dialog day1" title="Sat, Dec 1st">
  <p>Today you get a free cookie! Click <a href="#" onclick="claimCookie()">here</a> to claim it.</p>
<div class="dialog day2" title="Sun, Dec 2nd">
  <img src="https://i.stack.imgur.com/WqfqL.png" />
<div class="dialog day3" title="Mon, Dec 3rd">
  <p>I had prepared some cupcakes, but I forgot today is also Twilight birthday, so she gets them instead. Sorry, try again tomorrow.</p>
  <div class="flex-row">
   <img src="https://i.stack.imgur.com/a4SzT.png" />
   <div style="padding-left: 10px">
      If that's any comfort, they were hay-flavored.
<div class="dialog day4" title="Tue, Dec 4th">
  <img src="https://i.stack.imgur.com/ktpag.gif" />
<div class="dialog day5" title="Wed, Dec 5th">
  <p>Congratulation! You just won some <marquee>FREE REP</marquee>To claim it please compile <a href="https://meta.stackexchange.com/questions/ask">this request form</a> with the required info. Your rep will be delivered in 6 to 8 time units.*</p>
<p class="extraSmallText">* Waring: may result in negative free rep in some not-null probability cases</p>
<div class="dialog day6" title="Thu, Dec 6th">
  <p>Today is <a href="https://www.daysoftheyear.com/days/miners-day/">"Miners' Day</a>. To celebrate it, we are currently using your cpu to extract some <a href="https://meta.stackexchange.com/questions/227363/what-are-stack-overflow-unicoins">Unicoins</a> from the depths of Stack Exchange salt mines. Please, stand by while we finish and do not turn out your pc.</p>
<div class="dialog day7" title="Fri, Dec 7th">
    <a href="https://www.google.it/maps/@40.7087193,-74.0068885,3a,75y,313.51h,79.36t/data=!3m7!1e1!3m5!1sAF1QipPkI6vTyjgKR-q5RmtXFX5hLwQJ_58ja3SrdGDC!2e10!3e11!7i13312!8i6656" target="_blank"><img style="width:100%" src="https://i.stack.imgur.com/Xj2EC.jpg" title="Nope, you won't get the chocolate bar, we alredy ate it."/></a>
    <div class="center" style="font-size: 12px">Please, click the ticket to claim it (if that doesn't work, open the link in a new tab)</div>
<div class="dialog day8" title="Sat, Dec 8th">
  <p>Today prize contained personaly identificable informations and has been removed in compliance with the new G.D.P.R European laws.</p>
<div class="dialog day9" title="Sun, Dec 9th" style="font-size: 13px;">
  <div class="flex-row">
    <img src="https://i.stack.imgur.com/KFtJZ.png" style="height: 60px; padding-top: 20px;" />
    <div style="padding-left: 10px">
      <p>You just got a cheap bootleg plastic replica of Tim's Lost Keys. It is a shame they aren't the real ones, though.</p>
  <p>Legends tell that someday an Hero of Light will came and claim the lost keys, putting an end to the dark reign of the <a href="https://meta.stackexchange.com/a/288240/171199">Unjustified Downvote Lord</a>.</p>
<div class="dialog day10" title="Mon, Dec 10th">
  <div class="flex-row">
    <div  class="itemImage">
      <img src="https://i.stack.imgur.com/62eCw.gif" style="height: 50px;"/>
    <div style="margin-left: 5px" class="legendaryItem">
      <h5 class="name">Ring Of The Annoying Bird</h5>
      <h6 class="rarity">Item level 9001</h6>
      <div class="description">
        <div>Binds when picked up</div>
        <div style="margin-top: 5px">+75% to agro generation</div>
        <div style="color: lightgreen">Equip: Persuasion +20 (25 at level 9999)</div>
      <div class="flavorText">"Sometimes a quick rant is the fastest way to get things done."</div>
      <div class="sellingPrice">Sell price: 10 <span style="color: gold">●</span> 18 <span style="color: silver">●</span></div>
<div class="dialog day11" title="Tue, Dec 11th">
  <p>Today, you get free hats. Why are you here? <a href="https://winterbash2018.stackexchange.com/">Go hunting now!</a>.</p>
<div class="dialog day12" title="Wed, Dec 12th"  style="background-image: url('https://i.stack.imgur.com/cuWpp.png'); background-size: cover;">
   <div class="flex-row" style="height: 200px">
    <img src="https://i.stack.imgur.com/D2GtJ.png" style="height: 70px; padding-top: 20px;" />
    <div style="padding-left: 10px">
      <p class="smithSpeech">𝕱𝖎𝖓𝖆𝖑𝖑𝖞 𝖙𝖍𝖊𝖊 𝖍𝖆𝖘'𝖙 𝖈𝖔𝖒𝖊𝖙𝖍, 𝕬𝖛𝖆𝖙𝖆𝖗. 𝕴 𝖍𝖆𝖘'𝖙 𝖇𝖊𝖊𝖓 𝖜𝖆𝖎𝖙𝖎𝖓𝖌 𝖍'𝖗𝖊 𝖆𝖑𝖑 𝖉𝖆𝖞! 𝖎 𝖓𝖊𝖊𝖉𝖊𝖙𝖍 𝖙𝖔 𝖌𝖎𝖛𝖊𝖙𝖍 𝖙𝖍𝖊𝖊 𝖆 𝖛𝖎𝖙𝖆𝖑 𝖈𝖑𝖚𝖊 𝖋'𝖗 𝖙𝖍𝖞 𝖖𝖚𝖊𝖘𝖙. 𝕿𝖔 𝖋𝖎𝖓𝖉𝖊𝖙𝖍 𝖙𝖍𝖊 𝖑𝖊𝖌𝖊𝖓𝖉𝖆𝖗𝖞  𝕮𝖔𝖘𝖒𝖎𝖈 𝕭𝖗𝖆𝖎𝖓 𝖈𝖔𝖝𝖈𝖔𝖒𝖇 𝖙𝖍𝖊𝖊 𝖘𝖍𝖆𝖑𝖑 𝖓𝖊𝖊𝖉𝖊𝖙𝖍 𝖙𝖔 𝖆𝖈𝖖𝖚𝖎𝖗𝖊𝖙𝖍 𝖆 𝖓𝖎𝖈𝖊 𝖆𝖓𝖘𝖜'𝖗 𝖇𝖆𝖉𝖌𝖊</p>
<div class="dialog day13" title="Thu, Dec 13th">
  <div class="flex-row">
    <img src="https://i.stack.imgur.com/C1BVJ.png" style="height: 60px; padding-top: 20px;" />
    <div style="padding-left: 10px">
      <p>You got a piece of moldy cheese. Only 47.577.295 lefthover cheese slices from the last swag event to ditch off now.</p>
<div class="dialog day14" title="Fri, Dec 14th">
  <div class="flex-row">
   <img src="https://i.stack.imgur.com/Vqahd.png" />
   <div style="padding-left: 10px" class="song">
      <p>On the first day of Christmas your true network sent to you</p>
<p>A <a href="https://meta.stackexchange.com/users/369802/tinkeringbell">parrot</a> in a pear tree.</p>
<div class="dialog day15" title="Sat, Dec 15th">
  <div class="flex-row">
    <img src="https://i.stack.imgur.com/LZgfP.png" style="height: 60px; padding-top: 20px;" onclick="fortuneCookie()" />
    <div style="padding-left: 10px">
      <p>A fortune cookie! You should click it an see what is inside!</p>
<div class="dialog day16" title="Sun, Dec 16th year 214">
   <div class="flex-row">
    <img src="https://i.stack.imgur.com/ZzZMn.jpg" style="height: 60px; padding-top: 20px;" onclick="fortuneCookie()" />
    <div style="padding-left: 10px; font-size: 10px;">
    To the attention of ALL CITIZENS. This calendar entry is currently placed at Security Clearance ULTRAVIOLET. Reading any part of this notice without appropiate security clearance is considered treason. Please proceed directly to your nearest available Termination Booth. Thank you for your cooperation. Have a nice daycycle!
<div class="dialog day17" title="Mon, Dec 17th">
  <p>In order to see this day calendar item, you need to update your Swag Advent Calendar app to a never version.</p>
  <div class="flex-button-row"><button onclick="startEndlessUpdate()">Update</button><a href="#" onclick="closeUpdateDialog()">Remind me later</a></div>
<div class="dialog day18" title="Tue, Dec 18th">
  <p>Not yet.</p>
<div class="dialog day19" title="Wed, Dec 19th">
  <p>Not yet.</p>
<div class="dialog day20" title="Thu, Dec 20th">
  <p>Not yet.</p>
<div class="dialog day21" title="Fri, Dec 21st">
  <p>Not yet.</p>
<div class="dialog day22" title="Sat, Dec 22th">
  <p>Not yet.</p>
<div class="dialog day23" title="Sun, Dec 23st">
  <p>Not yet.</p>
<div class="dialog day24" title="mon, Dec 24th">
  <p>Not yet.</p>
<div class="dialog day25" title="Tue, Dec 25th">
  <p>Not yet.</p>

<div class="dialog notEvenDecember" title="A message from Yoda">
  <p>The path to December long is. Patience have you must.</p>

<div class="dialog notYet" title="A cheater is You">
  <p>Thou are not future enough to use this. Yet.</p>

<div class="dialog endlessUpdate" title="Wasting your time...">
  <p>The application is currently updating. Please do not turn of your connection or disconnect your pc.</p>
  <div class="updateInfoArea">
    <div id="updateMessage">foobar</div>
    <div style="width: 100%"><progress style="width: 100%"></progress></div>

Note: As expected from a real advent calendar, you will be able to open only cells up to the current date. Also, please notice that you should wait till Dec, 1st to be able to open the first "window". You could also cheat and look at the code, if you want to ruin your fun...

And since some asked me in the chat, let's add some explanations too:

Dec, 1st:

Giving out free cookies is a common internet meme. The joke here is that I was planning to give out an actual javascript cookie instead.

Dec, 2nd:

Free hand circles are a meme on the Meta site. This year Winter Bash event even features a Free Hand Circle hat!

Dec, 3rd:

Just an MLP based joke, since many fans of the show consider this day Twilight birthday (that based on the airing date of an old episode of the show).

Dec, 4th

A simple joke based on the original Super Mario Bros Nes game. At the end of each world, a Toad would tell you that "The princess is in another castle". As expected, it quickly became a meme.

Dec, 5th

One of the lames jokes. Not only I use the forbidden tag, I also claim that to get free rep points... you will have to post a question on the site. And the free votes may be negative, too.

Dec, 6th

Just a reference to miners day, and the recent trends of malware using the victim CPU/GPU to mine cryptocurrencies.

Dec, 7th

A reference to Charlie and the Chocolate Factory, with Shog9 playing the role of Willy Wonka. The virtual tour idea came to me after remembering some user on chat posting the link to the SE Google Maps Office Tour some years ago.

  • +1 for the idea, -1 for requiring patience – DCOPTimDowd Nov 29 at 17:10
  • 1
    @DCOPTimDowd well... You basically get a joke (and I hope a little smile) for 25 days, starting on Dec, 1st... so... More days, more fun? – SPArchaeologist Dec 3 at 13:52

What about an animated history of StackOverflow? Link: https://bfontaine.net/so.gif

This is a gif showing the evolution of SO’s front page from the beginning to nowadays. I made it using Selenium, Python, Imagemagick and of course the awesome Internet Archive project. There’s roughly 5 weeks between frames except for some fetch errors (e.g. no CSS) I removed.

The code uses the WayBack Machine’s API to fetch snapshots URLs then opens them in Headless Chrome using Selenium and take a screenshot of each one of them.

Update: I wrote a blog post explaining how I made the gif.

Update: also made one for Google and one for Twitter.

Here's a stopwatch . . . for traveling near a black hole.

As you come closer and closer to a massive body, time slows down. Anyone who's seen Interstellar may recall how drastic time dilation can be near, say, a black hole. So I made a stopwatch (based on one written in Python 3 by Jorgen Cederberg) that ticks at different speeds, representing an observer at a certain distance from a black hole.

You can pick the mass of the black hole, as well as the distance to it. Those are given in solar masses and astronomical units, respectively. Enter your chosen values, click the two "Set" buttons, and you're ready to go! As an example, if you set the mass to 15 solar masses (like the black hole in Cygnus X-1) and set the distance to 0.0000004 astronomical units, time should pass slower by approximately a factor of 2.

Error handling to be added soon, because picking distances less than the Schwarzschild radius will obviously break the program. Other improvements to come, too, hopefully. Let me know if there are any absurd bugs.

from tkinter import *
import time
import numpy as np

G = 6.674*10**(-11) #Newton's gravitational constant, SI units
c = 3*10**(8)       #Speed of light, m/s
m = 2*10**(30)      #Solar mass, kg
au = 1.5*10**(11)   #Astronomical unit, meters

class StopWatch(Frame):                                                    
    def __init__(self, parent):
        Frame.__init__(self, parent)
        self.parent = parent
        self.frame = Frame(self.parent)
        self._start = 0.0        
        self._elapsedtime = 0.0
        self._running = 0
        self.masses = IntVar()
        self.masses.set(0) # solar masses
        self.distance = IntVar()
        self.distance.set(4*10**(7)) # in astronomical units
        self.timestr = StringVar()

        self.start = Button(self.parent, text='Start', command=self.Start)
        self.start.grid(row=2,column=1, sticky=E+W+N+S)
        self.stop = Button(self.parent, text='Stop', command=self.Stop)
        self.stop.grid(row=2,column=2, sticky=E+W+N+S)
        self.reset = Button(self.parent, text='Reset', command=self.Reset)
        self.reset.grid(row=2,column=3, sticky=E+W+N+S)
        self.quit = Button(self.parent, text='Quit', command=root.destroy)
        self.quit.grid(row=2,column=4, sticky=E+W+N+S)
        self.mass_label = Button(self.parent, text='Set mass of black hole:', command=self.ChangeMass)
        self.mass = Entry(self.parent)
        self.dist_label = Button(self.parent, text='Set distance to black hole:', command=self.ChangeDistance)
        self.dist = Entry(self.parent)

    def factor(self):
        """The time dilation factor at a given distance from the black hole"""
        if self.distance.get() == 0:
            r = 4*10**(-7)
            r = float(self.distance.get())
        return np.sqrt(1-2*G*m*float(self.masses.get())/(au*r*c**2))

    def makeWidgets(self):                         
        """Set up the stopwatch."""
        self.l = Label(self.parent, textvariable=self.timestr)

    def _update(self): 
        """Update the displayed time."""
        self._elapsedtime = time.time() - self._start
        self._timer = self.after(50, self._update)

    def _setTime(self, elap):
        """Set the time string to Minutes:Seconds:Hundreths."""
        elap = elap*self.factor()
        minutes = int(elap/60)
        seconds = int(elap - minutes*60.0)
        hseconds = int((elap - minutes*60.0 - seconds)*100)                
        self.timestr.set('%02d:%02d:%02d' % (minutes, seconds, hseconds))

    def Start(self):                                                     
        """Start the stopwatch, if not running."""
        if not self._running:            
            self._start = time.time() - self._elapsedtime
            self._running = 1        

    def Stop(self):                                    
        """Stop the stopwatch, if running."""
        if self._running:
            self._elapsedtime = time.time() - self._start
            self._running = 0

    def Reset(self):                                  
        """Reset the stopwatch."""
        self._start = time.time()         
        self._elapsedtime = 0.0    

    def ChangeMass(self):
        """Set the mass to the value inputted by the user."""

    def ChangeDistance(self):
        """Set the distance to the black hole to the value inputted by the user."""

root = Tk()
app = StopWatch(root)
  • Forgive me for asking what must seem a stupid question but why isn't there a run code snippet? I only see the code, not a stopwatch. – Mari-Lou A Dec 6 at 23:12
  • @Mari-LouA As far as I'm aware, Python isn't supported by Stack Snippets. – HDE 226868 Dec 7 at 2:25
  • Well, what can I do to see your timepiece? Is there a website I can use instead? – Mari-Lou A Dec 7 at 7:44
  • @Mari-LouA I'm not sure what your options are; I'll look into it. – HDE 226868 Dec 7 at 17:47
  • If you're interested in winning the prize, you had better hurry. Time waits for no man...I don't think I am the only person who cannot see your entry; even a screenshot would be helpful. – Mari-Lou A Dec 10 at 8:18

I hung up my clock on the wall. However, the clock then suffered a tragic malfunction, causing odd things to happen to time...

To fix this, I set out to build a replacement clock... or at least the shape of one. However, due to the odd time... things ended up a little strange. Here, it's probably best if you watch for yourself (links to YouTube when you click on the image):

YouTube link

I am very bad at video editing, so... blame me for bad things. Apparently, having a great camera doesn't stop you from videoing badly. All shot on my GoPro HERO7 black.

watch time go faster*:

watch -n 0.1 --precise date '+%Y-%m-%d\ %T.%N'

*(New! Improved accuracy thanks to @DennisWilliamson! :)

  • add --precise – Dennis Williamson Nov 28 at 22:02
  • @DennisWilliamson I read the manpage about --precise but I can't visually see the difference. Can you see a difference? – tudor Nov 29 at 0:57
  • You're likely to see the hundredths digit change very infrequently with --precise in this particular use. See also this abuse of watch. – Dennis Williamson Nov 29 at 1:06
  • 1
    Ah! Now I understand. The current explanation in the manpage is very confusing. This should be in the manpage instead: --precise: Normally, watch runs the command *after* interval seconds. This option makes each start of the command begin *on* the interval if possible. (based on the link you sent). – tudor Nov 29 at 1:09
  • Downvoting in a friendly competition? Really? That's not very nice. :( – tudor Dec 7 at 21:16

One of the big problems with time travel is navigation. Even the very best time machines do not have the precision of a good Swiss timepiece. After you land you can, at best, know when you are within 6-8 weeks -- and within 6-8 decades is more likely. Those entry-level time machines you get at Target? 6-8 centuries -- you're better off staying at home until you can afford the proper tools!

Time travel is inherently uncertain -- so how do you know when you are? We had a question on Worldbuilding abut this, which I later wrote about in our blog, Universe Factory. Sure, everybody says "use the stars", but do you know how to do that? Have you ever used a sextant and a set of star charts? Or are you going to hope for radio signals and that your laptop battery holds out long enough for you to map the sky? (For long-distance time travel, by the way, you might be able to use the moon. I learn all kinds of neat things on Worldbuilding.)

One thing's for sure, though: even small errors can be very dangerous, depending on when you're traveling to. A song by Three Weird Sisters, based on a book by Connie Willis, illustrates this well; here's an amateur recording of me performing it at a science-fiction convention.

  • 2
    So this is what 1254 looks like? – Redwolf Programs Nov 27 at 23:36
  • 2
    "One of the big problems with time travel is navigation..." I thought you were going to make this whole thing a joke about how left-nav is the missing key to making time travel possible. – scohe001 Nov 28 at 22:38
  • @scohe001 oh, that would have been good! I was focused more on the when and the 6-8 somethings and missed that opportunity. – Monica Cellio Nov 29 at 1:31

Four years and nine months ago (Feb, 2014), I posted something about time in Code Golf (link). It was an answer to a challenge for creating an analogue clock program (I am the author of the question too).

This is yet more timely because it happened a few years ago and is not bought back via the time-machine.

And, timely it used Java 8, which was the newest version at the time and it also bought new features to the language, some of them that I used.

I'll quote it here entirely:

Java 8

I made a clock that changes its colors accordingly to the hour of day, showing local time. As the time passes, it will slowly change it colors, using brighter colors at day and darker colors at night.

The window is resizable and the clock will resize automatically to whatever size you choose.

Further, if the user adjusts the system clock or if a daylight time change happens, the clock will automatically reflect that.

There are two forms to run it:

  1. Running the ClockDemo file, i.e. java clock.ClockDemo. This will open a window and you will see the clock there.

  2. Running the ClockSave file, i.e. java clock.ClockSave filename width height [HH:mm:ss]. This will just save the clock in a PNG file with the given file name, width and height. The clock will be draw with the given time, or if that is omitted, with current time. For example, if you run it as java clock.ClockSave clock.png 600 500 12:38:24 it will save the clock in a 600x500 image in a clock.png file and the clock will be showing 12:38:24 AM. Use hours in the 00-23 interval.

Here are some screenshots and generated files:

00:36:50 AM:

00:36 AM

02:38:51 AM:

02:39 AM

06:42:13 AM:

06:42 AM

11:15:28 AM:

11:15 AM

05:02:37 PM:


07:11:30 PM:


09:29:34 PM:


I separated the source in five different files in a package called clock.


package clock;

import java.awt.EventQueue;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;

public class ClockDemo {
    public static void main(String[] args) {

    private static void runIt() {
        final JFrame j = new JFrame();
        final JClock clock = new JClock(new CoolPaint());

        j.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {

        j.setBounds(20, 20, 600, 500);


package clock;

import java.io.IOException;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;

public class ClockSave {
    public static void main(String[] args) {

        // Too much arguments.
        if (args.length < 3 || args.length > 4) {
            System.out.println("Bad usage: Should be java clock.ClockSave filename width height [HH:mm:ss]");

        // Parse the image size.
        int h, w;
        try {
            w = Integer.parseInt(args[1]);
            h = Integer.parseInt(args[2]);
        } catch (NumberFormatException e) {
            System.out.println("Bad usage: Should be java clock.ClockSave filename width height [HH:mm:ss]");

        // Parse the intended time.
        LocalTime time;
        if (args.length == 4) {
            try {
                DateTimeFormatter df = DateTimeFormatter.ofPattern("HH:mm:ss");
                time = LocalTime.parse(args[3], df);
            } catch (DateTimeParseException e) {
                System.out.println("Bad usage: Should be java clock.ClockSave filename width height [HH:mm:ss]");
        } else {
            time = LocalTime.now();

        // Save to an image.
        try {
            new CoolPaint().saveClock(w, h, time, args[0]);
        } catch (IOException e) {
            System.out.println("Error on image output: " + e.getMessage());


package clock;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.time.LocalTime;
import java.time.temporal.ChronoField;
import javax.swing.JComponent;

public class JClock extends JComponent {
    private static final long serialVersionUID = 1L;

    private final CoolPaint paint;
    private final Object lock;
    private Thread updater;

    public JClock(CoolPaint paint) {
        this.paint = paint;
        this.lock = new Object();

    private void runClock() {
        int lastTime = -1;
        try {
            while (isRunning()) {
                int t = time();
                if (t != lastTime) {
                    lastTime = t;
        } catch (InterruptedException e) {
            // Do nothing, the thread will die naturally.

    private int time() {
        return LocalTime.now().get(ChronoField.SECOND_OF_DAY);

    private boolean isRunning() {
        synchronized (lock) {
            return updater == Thread.currentThread();

    public void start() {
        synchronized (lock) {
            if (updater != null) return;
            updater = new Thread(this::runClock);

    public void stop() {
        synchronized (lock) {
            updater = null;

    public void paintComponent(Graphics g) {
        paint.paintClock(getWidth(), getHeight(), time(), (Graphics2D) g);


package clock;

import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.time.LocalTime;
import java.time.temporal.ChronoField;
import javax.imageio.ImageIO;

public interface ClockPaint {

    public void paintClock(int width, int height, int seconds, Graphics2D g2);

    public default void paintClock(int width, int height, LocalTime time, Graphics2D g2) {
        paintClock(width, height, time.get(ChronoField.SECOND_OF_DAY), g2);

    public default void paintClock(int width, int height, Graphics2D g2) {
        paintClock(width, height, LocalTime.now(), g2);

    public default void saveClock(int width, int height, String fileName) throws IOException {
        saveClock(width, height, LocalTime.now(), fileName);

    public default void saveClock(int width, int height, LocalTime time, String fileName) throws IOException {
        saveClock(width, height, time.get(ChronoField.SECOND_OF_DAY), fileName);

    public default void saveClock(int width, int height, int seconds, String fileName) throws IOException {
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
        paintClock(width, height, seconds, (Graphics2D) image.getGraphics());
        String f = fileName.endsWith(".png") ? fileName : fileName + ".png";
        ImageIO.write(image, "png", new File(f));


package clock;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.GradientPaint;
import java.awt.Graphics2D;
import java.awt.RadialGradientPaint;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D;

public class CoolPaint implements ClockPaint {

    private static final int SECONDS_IN_MINUTE = 60;
    private static final int SECONDS_IN_HALF_HOUR = 30 * SECONDS_IN_MINUTE;
    private static final int SECONDS_IN_HOUR = 60 * SECONDS_IN_MINUTE;
    private static final int SECONDS_IN_12_HOURS = 12 * SECONDS_IN_HOUR;

    private static final int AM_0_00 = 0;
    private static final int AM_3_00 = 3 * SECONDS_IN_HOUR;
    private static final int AM_4_30 = 4 * SECONDS_IN_HOUR + SECONDS_IN_HALF_HOUR;
    private static final int AM_7_30 = 7 * SECONDS_IN_HOUR + SECONDS_IN_HALF_HOUR;
    private static final int AM_12_00 = 12 * SECONDS_IN_HOUR;
    private static final int PM_4_30 = 16 * SECONDS_IN_HOUR + SECONDS_IN_HALF_HOUR;
    private static final int PM_7_30 = 19 * SECONDS_IN_HOUR + SECONDS_IN_HALF_HOUR;
    private static final int PM_9_00 = 21 * SECONDS_IN_HOUR;
    private static final int PM_12_00 = 24 * SECONDS_IN_HOUR;

    private static final Color BLACK = new Color(0, 0, 0);
    private static final Color DARK_GRAY = new Color(32, 32, 32);
    private static final Color DARK_BLUE = new Color(0, 0, 128);
    private static final Color PURPLE = new Color(128, 0, 128);
    private static final Color CYAN = new Color(0, 255, 255);
    private static final Color YELLOW = new Color(225, 225, 0);
    private static final Color PALE_YELLOW = new Color(224, 224, 64);
    private static final Color RED = new Color(255, 0, 0);
    private static final Color GREEN = new Color(0, 255, 0);
    private static final Color LIGHT_BLUE = new Color(128, 128, 255);
    private static final Color SKY_CYAN = new Color(48, 224, 224);

    private static final Color[] COLOR_CYCLE = {

    private static final int RADIAL_PERIOD_LENGTH = PM_12_00 / COLOR_CYCLE.length;
    private static final String[] ROMAN = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII"};

    private static class Painter {
        private final int width;
        private final int height;
        private final int seconds;
        private final int radius;
        private final Graphics2D g2;
        private final int cx;
        private final int cy;
        private final int secondColorIndex;
        private final int secondsInPeriod;
        private final Color pointersAndNumbersColor;

        public Painter(int width, int height, int seconds, Graphics2D g2) {
            this.width = width;
            this.height = height;
            this.seconds = seconds;
            this.radius = Math.min(width / 2, height / 2);
            this.cx = width / 2;
            this.cy = height / 2;
            this.g2 = g2;
            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            this.secondColorIndex = seconds / RADIAL_PERIOD_LENGTH;
            this.secondsInPeriod = seconds % RADIAL_PERIOD_LENGTH;

            int startIndex = (secondColorIndex + COLOR_CYCLE.length + 5) % COLOR_CYCLE.length;
            int endIndex = (secondColorIndex + COLOR_CYCLE.length + 6) % COLOR_CYCLE.length;
            Color color1 = COLOR_CYCLE[startIndex];
            Color color2 = COLOR_CYCLE[endIndex];
            this.pointersAndNumbersColor = mixColors(color1, color2, 0, RADIAL_PERIOD_LENGTH, secondsInPeriod);

        private int mixColorComponent(int startComponent, int endComponent, double position) {
            int difference = endComponent - startComponent;
            return startComponent + (int) (difference * position);

        private Color mixColors(Color startColor, Color endColor, int startTime, int endTime, int currentTime) {
            double normalized = (currentTime - startTime) / (double) (endTime - startTime);
            return new Color(
                    mixColorComponent(startColor.getRed(), endColor.getRed(), normalized),
                    mixColorComponent(startColor.getGreen(), endColor.getGreen(), normalized),
                    mixColorComponent(startColor.getBlue(), endColor.getBlue(), normalized));

        private Color upperBackgroundColor() {
            if (seconds < 0) throw new IllegalArgumentException();
            if (seconds <= AM_3_00) return BLACK;
            if (seconds <= AM_4_30) return mixColors(BLACK, DARK_BLUE, AM_3_00, AM_4_30, seconds);
            if (seconds <= AM_7_30) return mixColors(DARK_BLUE, CYAN, AM_4_30, AM_7_30, seconds);
            if (seconds <= AM_12_00) return CYAN;
            if (seconds <= PM_4_30) return CYAN;
            if (seconds <= PM_7_30) return mixColors(CYAN, DARK_BLUE, PM_4_30, PM_7_30, seconds);
            if (seconds <= PM_9_00) return mixColors(DARK_BLUE, BLACK, PM_7_30, PM_9_00, seconds);
            if (seconds <= PM_12_00) return BLACK;
            throw new IllegalArgumentException();

        private Color lowerBackgroundColor() {
            if (seconds < 0) throw new IllegalArgumentException();
            if (seconds <= AM_3_00) return mixColors(BLACK, DARK_BLUE, AM_0_00, AM_3_00, seconds);
            if (seconds <= AM_4_30) return mixColors(DARK_BLUE, PURPLE, AM_3_00, AM_4_30, seconds);
            if (seconds <= AM_7_30) return mixColors(PURPLE, YELLOW, AM_4_30, AM_7_30, seconds);
            if (seconds <= AM_12_00) return mixColors(YELLOW, CYAN, AM_7_30, AM_12_00, seconds);
            if (seconds <= PM_4_30) return mixColors(CYAN, YELLOW, AM_12_00, PM_4_30, seconds);
            if (seconds <= PM_7_30) return mixColors(YELLOW, PURPLE, PM_4_30, PM_7_30, seconds);
            if (seconds <= PM_9_00) return mixColors(PURPLE, DARK_BLUE, PM_7_30, PM_9_00, seconds);
            if (seconds <= PM_12_00) return mixColors(DARK_BLUE, BLACK, PM_9_00, PM_12_00, seconds);
            throw new IllegalArgumentException();

        private void paintBackground() {
            Point2D p1 = new Point2D.Double(width / 2, 0);
            Point2D p2 = new Point2D.Double(width / 2, height);
            g2.setPaint(new GradientPaint(p1, upperBackgroundColor(), p2, lowerBackgroundColor()));
            g2.fillRect(0, 0, width, height);

        private RadialGradientPaint colorOnCycle(Point2D center, float radius) {
            Color baseColor1 = COLOR_CYCLE[(secondColorIndex + COLOR_CYCLE.length - 1) % COLOR_CYCLE.length];
            Color baseColor2 = COLOR_CYCLE[secondColorIndex];
            Color baseColor3 = COLOR_CYCLE[(secondColorIndex + COLOR_CYCLE.length + 1) % COLOR_CYCLE.length];
            Color baseColor4 = COLOR_CYCLE[(secondColorIndex + COLOR_CYCLE.length + 2) % COLOR_CYCLE.length];

            Color start = mixColors(baseColor1, baseColor2, 0, RADIAL_PERIOD_LENGTH, secondsInPeriod);
            Color end = mixColors(baseColor3, baseColor4, 0, RADIAL_PERIOD_LENGTH, secondsInPeriod);
            float index2 = (RADIAL_PERIOD_LENGTH - secondsInPeriod) / (float) RADIAL_PERIOD_LENGTH / 2;
            float index3 = 0.5f + index2;
            float[] positions = index3 == 1.0 ? new float[] {0.0f, index2, 1.0f}
                    : new float[] {0.0f, index2, index3, 1.0f};
            Color[] colors = index3 == 1.0 ? new Color[] {start, baseColor2, end}
                    : new Color[] {start, baseColor2, baseColor3, end};

            return new RadialGradientPaint(center, radius, positions, colors);

        private void paintClockArea() {
            Point2D center = new Point2D.Double(width / 2, height / 2);
            g2.setPaint(colorOnCycle(center, radius));
            g2.fillOval(width / 2 - radius, height / 2 - radius, radius * 2, radius * 2);

        private double pointerRevolutionsToRadians(double angle) {
            return Math.toRadians((450 + angle * -360) % 360.0);

        private void paintPointers() {
            double hAngle = pointerRevolutionsToRadians(seconds % SECONDS_IN_12_HOURS / (double) SECONDS_IN_12_HOURS);
            double mAngle = pointerRevolutionsToRadians(seconds % SECONDS_IN_HOUR / (double) SECONDS_IN_HOUR);
            double sAngle = pointerRevolutionsToRadians(seconds % SECONDS_IN_MINUTE / (double) SECONDS_IN_MINUTE);

            g2.setStroke(new BasicStroke(4.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
            g2.drawLine(cx, cy, (int) (cx + Math.cos(hAngle) * radius * 0.55), (int) (cy - Math.sin(hAngle) * radius * 0.55));
            g2.drawLine(cx, cy, (int) (cx + Math.cos(mAngle) * radius * 0.85), (int) (cy - Math.sin(mAngle) * radius * 0.85));
            g2.setStroke(new BasicStroke(1.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
            g2.drawLine(cx, cy, (int) (cx + Math.cos(sAngle) * radius * 0.85), (int) (cy - Math.sin(sAngle) * radius * 0.85));

        private void paintNumbers() {
            Font originalFont = g2.getFont();
            double amplification = (int) Math.max(radius * 0.08, originalFont.getSize()) / (double) originalFont.getSize();
            AffineTransform at0 = AffineTransform.getScaleInstance(amplification, amplification);
            Font amplifiedFont = originalFont.deriveFont(at0);
            FontMetrics fm = g2.getFontMetrics();

            for (int i = 1; i <= 12; i++) {
                double angle = pointerRevolutionsToRadians(i / 12.0);
                double textInclination = Math.toRadians(30 * i);
                AffineTransform at = AffineTransform.getRotateInstance(textInclination);
                at.scale(amplification, amplification);
                Font derivedFont = originalFont.deriveFont(at);
                int pixelsOffset = fm.stringWidth(ROMAN[i]) / 2;
                int xPlot = (int) (cx + Math.cos(angle) * radius * 0.9 - pixelsOffset * Math.cos(textInclination));
                int yPlot = (int) (cy - Math.sin(angle) * radius * 0.9 - pixelsOffset * Math.sin(textInclination));
                g2.drawString(ROMAN[i], xPlot, yPlot);

        private void paintDots() {
            for (int i = 1; i < 60; i++) {
                if (i % 5 == 0) continue;
                double angle = pointerRevolutionsToRadians(i / 60.0);
                g2.fillRect((int) (cx + Math.cos(angle) * radius * 0.9) - 1, (int) (cy - Math.sin(angle) * radius * 0.9) - 1, 3, 3);

        public void paintClock() {


    public void paintClock(int width, int height, int seconds, Graphics2D g2) {
        new Painter(width, height, seconds, g2).paintClock();

I thought I'd ask SE about this one like last time:

Guilty Panda

But when he couldn't help, I didn't have any second ideas...

So, a little bit about me, Stack Overflow, and time...

3rd top all-time datetime tag answerer, with over 700 questions answered


2nd top all-time timezone tag answerer, with over 1000 questions answered


• Helped author and/or curate the tag wikis for timezone, dst, datetime, and date

• Authored some of the top rated, canonical answers in this category, including:

• Outside of Stack Overflow:

But alas, when it boils down to why do I do all of these things, it's not for the fancy Internet points, or because I'm some kind of narcissist, but because of something Stack Overflow sums up quite nicely in my user profile:

Screenshot - Impact: 9.4m people reached

So, thank you, Stack Overflow.

Here's my freehand Time Machine:

Time Machine - Freehand

A song, you say. I don't do lyrics. ¯\_(ツ)_/¯

So I wrote a piano quintet instead.

Whodathunk that would so much time, I'd be way too late to the party.
But now that it's done I might as well post it anyway.

YouTube video thumbnail

MIDI synthesized with MuseScore. Sorry guys, but I definitely don't have anywhere enough time left to buy a cello and learn which way to hold it.

  • 2
    I almost thought you weren't going to do what I was expecting from the beginning, but patience paid off (2:43). :-) – Monica Cellio Dec 11 at 0:36

Argh! It's too late, a hundred particpants have submitted their entries before me. I think I should use a Time Machine and travel back in time and write something for the contest. Speaking of which, this reminds me of my good friend. (Not Josh, another one).

Once upon a time, there lived a fun-loving programmer who was very fond of vintage artifacts and antiques (For the time being, let's call him Tinker). He had a huge collection of antiques comprising gramophone records, wall clocks, jars, carpets, and needless to say, also watches. He collected a lot of them. He loved visiting antique exhibitions and he traveled to many places in search of them. Then one day, he came across an exhibition where vintage and antique watches from the late 19th century were being auctioned. He decided to participate and successfully bid for a pocketwatch complete with chain. It had a weak lume but something was engraved underneath. When observed keenly, the instructions "Handle with care. This side up" could be read. Those lines didn't make much sense for Tinker. However, he was happy with his antique pocketwatch.

One evening, Tinker was sitting in his basement (his usual workplace, also plays Mine craft on his phone, keeps his keys and loses) holding his pocket watch. Tinker's 4 year old kid came there jumping in joy (kids are always happy.). He came and sat in his father's lap, played He played with his father. In this process, he pulled out the pocket watch and started playing with it. Tinker was watching it. He was mindful of the caution written on it to handle with care but little one's butter fingers... the watch slipped out of his hands and fell down. Tinker was shocked. He guessed the watch would shatter into pieces given that it is a century old. BUT much to his surprise, there was not even a scratch on the watch. He picked it up on the floor. It's as good as new. He threw it down intentionally this time. No change. If keeping it safe is not handling with care, then what is!?

Tinker observed it with his new glasses. The watch had a coating of amorphous metal. How on Earth could a hundred year old watch made of It is a locket watch which can be opened into two halves. Under the clock, there's a tiny hidden chamber. There were some traces of letters. They were unclear when seen with glasses or magnifying glass. What to do next? Looked like some mystery puzzle for him. He watched some good old treasure hunt movies. When seen at specified angle under infrared glasses, tiny letters started appearing.

wend to a lodging whither thither art wild ducks and geese
Mice eating rotten cheese
Filled with dangerous bugs and (r)ants
Men like bots and robot like men
Teams of unicorns and ponies
taketh ten steps in a row
thee shalt reacheth a lodging whither everything overflow

Tinker called his colleague Josh (also my good friend) to help him crack the puzzle. Both set on an adventure. They thought hard what the place could be. They wandered in forests, places where fantasy creatures are believed to be seen. Finally, they reached a special place in the woods. It was a dense forest that moon light couldn't touch the ground. But in the middle of the forest, at a very specific place, they found a flowing stream forming a waterfall from a hill which finally leads to a large pond. This place alone seemed very special apart from the whole forest. It is believed that fantasy creatures visit the place in special times of the year. They reached the pond. Took ten steps towards the waterfall. Voila, it was a secret den. Waterfall and creepers were covering it. They entered the secret den and were eagerly waiting for something to happen.

During the dawn of the twilight,
at which hour the horologe is between 6-8
visage the travelling lamp and turn t right
thou shalt see a light
alloweth t glow and shine
doth not overturn, 'r thee shalt multiply into nine

This time the watch was with Josh. He did as directed. A glow came from the watch. After turning the watch, wormhole opened which sucked them into it. There was a slight overturn and they reached a different dimension R'lyeh. It had much advanced civilization and technology. Everything on that dimension is similar like us but the technology was advanced and people are named in differently. Things happening there affect us too. Time passed very slowly there. 1 day = 6-8 weeks (Unfortunately, our friends were not aware of it). Josh and Tinker visited Quack Overflow office and found out it was their anniversary. They saw different monuments in that dimension. After spending a couple of days there, they tried to turn the watch again and return back by taking help from citizens of R'lyeh. But that didn't work like before. When they checked, THERE WASN'T ONE JOSH BUT NINE. Tinker then understood the warning Handle with care on the watch. As the people there are named differently, Josh turned into Shog. There was only place for two to travel through the worm hole. If there was no overturn, the watch would take them back and forth in time. But this overturn made them go to other dimension. So, Shog the ninth and Tinker reached Earth safely and other Shogs were stuck in R'lyeh. The outlet opened in Josh Shog's Kitchen. Finally, they reached home safely. Both got new colourful diamonds along with that watch when they reached back home.

But that wasn't the end. The time on the Earth passed quickly than the dimension where both went. Hence, the tasks given to them went on as usual because changing past of someone will affect the future too and viceversa. People who remembered Josh started calling Shog9. The tasks given to Tinker like writing announcements and swag posts for anniversary were pending as usual. After waiting, that was taken up by another employee JNat. He reached his basement just in time and posted a comment under swag past as if nothing happened:

Phew - posted just in time!

So, I shall borrow this time turning watch from Tinker or Shog and go back into time. (Tinker still uses this watch to bring back his lost keys). Then write an answer to this question. See ya till then.

  • I don't understand what is meant by "It has a weak lume" Did you mean "It had a faint/worn out face" (clocks and watches have "faces")? – Mari-Lou A Dec 2 at 9:44
  • 2
    @Mari-LouA Lume is short for luminous fluorescent watches which glow in the dark. en.wikipedia.org/wiki/Lume Weaker lume means the numbers were not glowing when kept at dark. – Nog Shine Dec 2 at 9:47
  • 1
    @Mari-LouA No, I don't mind the edits. The lume was there on an antique watch because the makers of the antique traveled in time and put lume later. That is why there is amorphous metal coating on the watch. – Nog Shine Dec 3 at 8:01

A fiery sun rising, with a plane rising above

I took this soon after I first got my DSLR, and it has remained one of my favourite shots. It evokes a number of emotions each time I look it, and one of those is an awe of Time:

  • A fiery sun rising in a wreath of clouds; marking a new day: The passage of the sun is where all timekeeping started.
  • A puny little plane rising above it, ferrying around people in a rush: So many people worried about the passage of time.
  • Time's own tricks: While I stood mesmerized by the scene, time passed by. By the time I could take a decent shot, the plane was well to the side, whereas I would have liked to see that rising plane right above that rising sun.
  • A photo is an instant frozen in time. Ten years, twenty years, fifty years down the line, I would still like to look at my photos and take a trip back in time.
  • Above all: It reminds me that some of your favourite photos are not so much about skill or technique, but about being at the right time and the right place.
  • 1
    Great photograph, muru. I'm one of those people who is always taking pictures of sunrises, sunsets, full moons, etc. :D This one is so nice I want to try to paint it! – Bread Dec 2 at 13:07
  • 1
    @Bread if you do paint it, please do share! Those clouds around the sun would look so so beautiful when painted. – muru Dec 2 at 16:04

I think I'm still in time…
Voilà a rebus that shouldn't take too long to solve.

enter image description here

One hour later.... hmmm, maybe it's too cryptic.

The same answer but this time, it's homemade using my old trustworthy processor "Word" and a new pdf converter tool I found online.

enter image description here

I bethink p'rhaps t's timeth i provideth thee the answ'r

1. crack, cast, chef, crack
2. brace, stain, tie, lock
answer: Race against the clock

  • 3
    You should cross-post this on Puzzling. – Sonic the Inclusive Hedgehog Nov 29 at 13:36
  • In your first one, you should make it a little more obvious and not put it right along a cranial suture line. That just looks like the coronal suture to me. :) – JohnP Nov 30 at 18:27
  • @JohnP that is why I made the second one, a skull was a bit mean BUT I used it twice and there are clues that show the word had the letters "c", "r", "a" and ended in "K". More than that?? – Mari-Lou A Nov 30 at 18:32
  • @Mari-LouA yeah, I get it now. I was stuck trying to cram a K into cranial. :) – JohnP Nov 30 at 18:41

Once upon a time, on a n-sided1 polygon world held up by a stack of stacks balanced on the top of a great unicorn2, flying around in outer space...

Chris: They've been at this for weeks now! Surely they must be finished whatever it is they're doing? What are they doing, anyway?

A Tinkering Bell: Sssh Chris, the Conjuring Magicians have finished redesigning a spell to go back in time for some reason - they didn't tell me what they'd use it for, but they just finished 24 and 52 seconds ago and they're now casting it, so we'll find out soon

Chris: Wait a moment, 24 and 52 seconds ago, how does that work?

The Journeyman Geek: Who knows? It's probably... Oh wait, they've vanished... Just days after leaving us to take care of this place. Ah.

Exactly 365.25 years earlier, in a hot dessert:

Shog the ninth: Tim! It's all your fault again. I told you, you said 'dessert' when you should have said 'desert'. sighs at the typical-ness of the situation Y'know, this reminds me of the time when I was a young lad...

interrupting Tim: Yes, that's right, it's always my fault. Maybe if you got some sand when it said 'something yellow' instead of some custard, we'd be over there, next to that massive pyramid, where we wanted to be, instead of next to this river of, well, custard.

Catija: Don't worry, it's only a narrow river of custard - we can run over.

after wasting more time, the group successfully runs across the river of custard

Grace: OK, that wasn't too bad now, was it? All we need to do now is touch the topstone...

Grace reaches out to point towards the tiny shiny metal tip of the pyramid. In doing so, everything stretches, then rotates *with a BOOM and flash of eniratco3


Jon: Oh dear, this wasn't supposed to happen, we must have done something else wrong. Maybe we were supposed to skydive towards the pyramid?


Robert: ?


Present day, in a (presently) relatively unfashionable arm of the Milky Way, on a planet called Earth:

Robert, reading a letter: 'Don't travel back in time, it's not worth it.' signed Robert, 2028. What a strange letter. They've even managed to forge my signature.

1. for all n < 86400

2. Postulated to be of the species unicornis galactica

3. Unlike octarine, eniratco is a very visible colour. Unfortunately, no-one has ever been able to determine anything about it, except that it exists4

4. In theory, at certain times, at least

This is my second answer. This time I thought I'd take a minute to output a few graphs showing what time of the month/day/hour/minute people post the most on Stack Overflow.

Month of the year1:

By Month

Animated by month per year

Day of the month:2

enter image description here

Day of the week:3

enter image description here

Hour of the day:4

enter image description here

Minute of the hour:5

enter image description here

Second of the minute:6

enter image description here

If we take the highest points from all the graphs, we get March 19th at 2:59:08 PM on a Wednesday, which would next occur in 2020. If we take the lowest points, we get December 31st at 2:07:35 AM on a Sunday, which would next occur in 2023.

You can run this query for any Stack Exchange site you wish here: Simply change MONTH to whatever date/time part you wish.

SELECT DATENAME(MONTH, posts.CreationDate) AS [Month], COUNT(*) AS ct
  FROM posts
  --WHERE OwnerUserId = ##UserId##
  GROUP BY DATENAME(MONTH, posts.CreationDate)
  ORDER BY DATENAME(MONTH, posts.CreationDate) ASC

Remove the -- before the WHERE if you want to see how your stats compare.

1 I left out 2008 and 2018 in the animated version since there are not 12 months of data available.

2 I would expect the 31st to have less, but why the 1st?

3 It looks like some Stack Overflow users take a break on the week-ends.

4 Who would have known - people still sleep at night; though I'm not sure why we should see this much difference due to time zones.

5 I can't think of any very logical reason why people post less right after the hour strikes and somewhat after the half-hour either - perhaps they feel it is time to get back to work?

6 This just looks messy - I guess it's what one should expect? It's a variation of less than 1%, so we probably can't infer too much.

7 You can blame the jQuery usage on the Data Stack Exchange team.

Time Thyme


  • Clever. You could expand, Rosemary in thyme. – James Nov 30 at 19:28

And Now for Something Completely Different

Here is my entry for this timely event. It's a simple poem-style riddle. Of course, the answer should be quite obvious in this context. Nevertheless, I hope you'll enjoy it!

Can you find all the puns and double meanings?

The one I obey, my dear commander
Keep on running I will not slander
For I know you will follow my lead
Call me in if you are in need

If one commands the other will follow
That's the deal, one has to swallow
Either way, I rely on you
We kiss goodnight and start anew

Mighty Dictator of all places
followed by all human races
Watch over all the new born lives
earn the fruit of fertile strifes

Endless love, you never disclaim
nor would you repel and never blame
Unbribable Protector, punish me
and I will follow tacitly


Take your time

you don’t need that watch – when you can ask stackoverflow what time it is

  • And it's not TB because the number of disctinct time in a day are well define! Just a question you want 5 or 6 significant figures for tenth of second? Do we have to handle timezone? Leap second? – Drag and Drop Dec 7 at 7:26


Recently I got this car. Yah, it's a 3rd Gen Camaro. Here's a picture of it:

enter image description here

It's red and sporty. Well, not so sporty right now, 'cause there's no engine in it. It's in various stages of disrepair around the garage. I mean, here's the rods and pistons:

enter image description here

And then there's the heads:

enter image description here

Over in the back is the block:

enter image description here

And the rest of the jumbled mess is out in front of the car itself:

enter image description here

There's still one part I need in order to get it put all together:

enter image description here

Yah, that's right ... a Flux Capacitor. I've been waiting for-EVA for O'Reilly's to get it back in stock ... it's been on back order since ... well, since McFly had a Delorean! Yah, the cat's out of the bag ... I'm makin' me a Mulletmobile Time Machine ... you all are jealous now!

Yah, I still need to figure out the whole deal with my car not being stainless steel, but I'll get it ...

  • 4
    Just 3D-print the flux capacitor... – Zaid Nov 29 at 6:42

It's about time I wished Stack Overflow a Happy 10th Birthday!

It's pretty timely that this contest has appeared. I had just enough time to put this together, because I'm salaried and I don't have to punch a timecard. Otherwise my timer surely would have gone off by now.

Stack Overflow, with its glittering uptime, has helped countless people, daytime or nighttime -- anytime. It's been a real timesaver. Someone has a question, and usually, in a wibbly wobbly timey wimey way, it gets answered.

Don't get too sentimental -- it's the users that time and again contribute that make Stack Overflow what it is.

Time Magazine Honors Stack Overflow's 10 Years

Now I'm going back to watching the java tag.

To His Coy Asker

with apologies to Andrew Marvell

Had we but world enough and time,
This coyness, asker, were no crime.
I would sit down, and think which Y
Thou meanst, and pass my editing eye.
Thou by the Indian Ganges’ side
Shouldst rubies find, then by the tide
Of downvotes wouldst complain. I would
Defend you e'en before the flood,
And you'd refuse — you're no milquetoast —
To edit or improve your post.
My tries to glean your intent 'd grow
Vaster than empires and more slow;
An hundred years should go to raise
The quality of turn of phrase;
Two hundred to adorn each clause
With comma, colon, other pause.
An age at least to every part,
And the last age should show your heart.
For, asker, you deserve this state,
Nor would I care at lower rate.

But at my back I always hear
Closers, deleters, hurrying near;
And yonder all before us lie
Deserts of vast /dev/nullity.
Thy question shall no more be found;
Nor, in its marble vault, shall sound
My emendations; then worms shall try
That long-preserved inclarity,
And your quaint honour turn to dust,
And all my efforts into rust;
The bitbucket's a gracious host,
But none, I think, do there read posts.

Now therefore, while the youthful hue
Sits on thy post like morning dew,
And while thy willing soul transpires
At every pore with instant fires,
Now improve your post while you may,
And now, like querying bird of prey,
Rather at once thy time devour
Than languish in his slow-chapped power.
Or, better, ask it first of all
So it for edits has no call,
And thus avoid voters' rough strife
And Stack Exchange's excising knife:
Thus, though we cannot make our sun
Stand still, yet we will make him run.

Your mission should you choose to accept it is to name that movie. There is no time limit, and this message will not self destruct. Two words, separated by the line break.

Starting out obvious:

It passes, flies, crawls. First letter.
Balding chronologist that was a friend to the Great. 9th letter.
Rode the winged horse. 6th letter.
Born out of war, but a bit of a boar. 8th letter.
Bit of a drunk but always the life of the party. 5th letter.

Harold met Harald at Stamford and one man got emasculated. 6th letter.
Was he the old woman or was he the fly? It's Poetic Prose. 4th letter.
Fourth in line of land settled six by six. 6th letter.
The younger of Brother vs Brother. 4th letter.
Mayan midwife. 1st letter.
Chaotic but chromatic saltwater. 5th letter.
Patricide, complex relationship with his mother, first letter of his famous answer.

From that to this is a short leap.

_ _ _ _ / _ _ _ _ _ _ _

Time flies! Let us not forget what brought us this contest in the first place — Stack Overflow's 10th Anniversary!

It's about time for Stack Overflow to be named TIME Magazine's Person Website of the Year!

So, introducing Stack Overflow's TIME cover ...


  • 1
    No free-hand underline? – DCOPTimDowd Nov 29 at 17:12

time to win some swag
hundred people got here first
now need time machine

  • 1
    Made it short since ain`t nobody got time to read all these answers >.< – carla Nov 28 at 1:55

Time Exchange

enter image description here

The clocks shown here represent my top SE sites and my routine and how they help.

enter image description here

10:00 is programming time. StackOverflow

14:00 is meeting time. Interpersonal Skills SE

16:00 is (in the code) puzzles-solving time. Puzzling SE

20:00 is movie time. Movies & TV

A long time ago (6 years), I was dreaming to see the StackOverflow way to do Questions and Answers in my mother tongue, which is Spanish.

I found Area51 and went to propose it.

enter image description here

It took a very long time to get enough Spanish speakers to read things in English and fulfill the site requirements to see it start rolling.

enter image description here

Now it is not only alive and going well. It's the time the people can write programming questions and answers for Spanish speakers and the time to contribute and benefit from the huge knowledge base StackOverflow is called to be in any language.

enter image description here enter image description here

For a single moment in time, C++ had no questions for me to worry about:

C++ tag page with 0 questions returned

Alas, the moment was fleeting and all of the questions returned.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .