Вам календарик 2014

    В этом году мой брат anatoly_rr не смог выложить новую версию своего календарика. Чтобы не нарушать традицию взял на себя ответственность и выложил за него:



    Добрые традиции — это здорово! Календарик!

    В карман (100×70мм):
    pdf, eps, ps, svg или png (1185×829, 300dpi)

    На стенку (A4):
    pdf, eps, ps, svg или png (3512×2483, 300dpi)

    Сделай сам:
    Генератор календариков (Python, CC-BY)



    Не забывайте про генератор календарей, который сделал Антон passerby!.

    С Новым годом!


    Поделиться публикацией
    Никаких подозрительных скриптов, только релевантные баннеры. Не релевантные? Пиши на: adv@tmtm.ru с темой «Полундра»

    Зачем оно вам?
    Реклама
    Комментарии 31
    • НЛО прилетело и опубликовало эту надпись здесь
      • 0
        Уже сделал себе додекаэдр
        • +3
          В заголовке не хватает интервала в unix time. В шестнадцатеричной форме, разумеется.

          То есть 0x7DE(0x52c32240 — 0x54a455bf)
          • +1
            Ждал этот пост в 12:00. С Новым годом!
            • +3
              Это сложная задача, поскольку полночей на Земле происходит за день из-за часовых поясов довольно много.
              • +2
                Ну вы поняли, о чем я.
                • 0
                  Я тоже ждал, я даже брату напомнил мол «где календарик.»,
            • 0
              Ура! Спасибо! С наступившим 7DE!
              Творческих успехов в новом году!
              • 0
                Что у меня не работает :(
                PNG и PDF файлы нулевого размера…
                • 0
                  Странно! Проверил, все должно отлично качаться.
                  • 0
                    Я пытался через генератор календаря сделать свой календарь и скачать.
                    А эти 16-ричные календарики в топике, да, качаются.
                  • +3
                    Сделал для вас зеркала:
                    Yandex.Disc
                    Mail.Cloud

                    Добра и удачи в Новом году!
                  • +1
                    Скажите, а нищебродам с лазерными принтерами полагается удобочитаемая ч/б версия?
                    • +5
                      Нищебродов с 3d-принтерами вообще обделили.
                      • +17
                        Версия для ч/б принтера :)
                      • 0
                        Можно взять python-скрипт и раскрасить календарь как хочется, в частности и под чб-принтер=)
                      • +1
                        Спасибо, повесил на стену. Будет повод наконец довести 16-ричный счёт до автоматизма :)
                        • +3
                          Вот версия на tikz: PDF.
                          Скрытый текст



                          Начальный код был очень простым, таким и остался: tikz.tex
                          Но пришлось влезть в библиотеку pgfcalendar и добавить туда своё представление чисел.

                          Генерация календаря на следующий год требует лишь перекомпиляции файла в новом году =) или небольшой модификации кода.
                          • 0
                            Нужно будет добавить выходные, их я упустил.
                          • 0
                            Ещё интересно было бы число в 36-ричном формате, чтоб одной «цифрой». Я такой формат уже лет 15 употребляю…
                            • 0
                              А почему не в 32-ичном? Как раз хватает же.
                            • +1
                              Прикольно было бы версию в SVG (с JS), которая использует текущий год…
                              • 0
                                Решил сгенерить себе. Скачал Python33 (при установке прописал путь к python.exe в PATH)
                                Запускаю его (в cmd просто указываю имя py файла)
                                d:\>svg_calendar.py File "D:\svg_calendar.py", line 187 print c.render() ^ SyntaxError: invalid syntax

                                ps: хочу сделать версию для белорусов
                                • +1
                                  на питоне 2.x работает.
                                  PS: а чем версия для белорусов будет отличатся?
                                  • +1
                                    с питоном 2.7 получилось
                                    разные праздники :)
                                    • 0
                                      вот версия скрипта для белорусов yadi.sk/d/xbx6OpPvFKXZv
                                      или заменить строку 77 на
                                      self.holidays = [ (1,1),(1,2),(1,6),(1,7),(3,8),(4,29),(4,30),(5,1),(5,9),(7,3),(7,4),(11,7),(12,25),(12,26)]
                                • +2
                                  универсальная версия скрипта (работает с питоном 3.3 и 2.7):
                                  Скрытый текст
                                  __author__ = "Anatoly Rr Burov (me@anatolyrr.ru)"
                                  __version__ = "2014"
                                  __date__ = "2014-12-31"
                                  __license__ = "CC-BY"
                                  
                                  
                                  from calendar import Calendar  # used in render_month
                                  
                                  
                                  class SvgCalendar:
                                  
                                      def __init__(self, year):
                                  
                                          self.year = year
                                  
                                          font = 'Consolas'
                                  
                                          self.style = {
                                              'units': 'mm',
                                  
                                              'width': 100,
                                              'height': 70,
                                  
                                              'border-color': '#ccc',
                                  
                                              'year-color': '#666666',
                                              'year-padding-top': 5,
                                              'year-padding-left': 2,
                                              'year-font-family': font,
                                              'year-font-size': 5,
                                  
                                              'month-width': 24,
                                              'month-height': 21,
                                  
                                              'day-width': 23.0 / 7.0,
                                              'day-height': 12.0 / 5.0,
                                  
                                              'month-margin-right': 0,
                                              'month-margin-bottom': 0,
                                  
                                              'month-font-family': font,
                                              'month-font-size': 3,
                                              'month-color': '#FF9525',
                                              'month-padding-top': 3,
                                  
                                              'month-offset-top': 5,
                                  
                                              'week-padding-top': 6,
                                              'week-font-family': font,
                                              'week-font-size': 1.5,
                                  
                                              'day-padding-top': 6,
                                              'day-font-family': font,
                                              'day-font-size': 2.5,
                                  
                                              'day-color': '#000000',
                                              'day-holiday-color': '#79B1D4',
                                  
                                              'week-color': '#999',
                                              'week-holiday-color': '#79B1D4',
                                          }
                                  
                                          self.year_name = "0x" + hex(year)[2:].upper()
                                          self.month_names = [
                                              '01', '02', '03', '04', '05', '06',
                                              '07', '08', '09', '0A', '0B', '0C']
                                          self.weekdays_names = ['001', '010', '011', '100', '101', '110', '111']
                                          # self.days_names = [ "%02x" % (i + 1) for i in range (32)]
                                          self.days_names = ["%02x" % (i + 1) for i in range(32)]
                                  
                                          # well, actually holidays depend on the production calendar
                                          self.holidays = []
                                          self.not_holidays = []
                                  
                                          if year == 2014:  # got dates for 2012
                                              # tuples (month, day)
                                              self.holidays = [(1, 1), (1, 2), (1, 3), (1, 4),
                                                               (1, 5), (1, 6), (1, 7), (1, 8),
                                                               (2, 23), (3, 8),
                                                               (5, 1), (5, 2), (5, 3), (5, 9), (5, 10),
                                                               (6, 12), (7, 4), (11, 4), ]
                                  
                                              self.holidays.append((4, 4))  # (4, 4) - Webmasters' Day
                                  
                                              # last Friday of July is Sysadmin's Day
                                              # Calculated for 2012 manually, have no time before publication to
                                              # implement general case
                                              self.holidays.append((7, 26))
                                  
                                              # self.not_holidays = [(3,11), (4, 28), (6, 9), (12, 29)]
                                  
                                              #  256th day of year is Programmers' Day
                                              # leap year, I didn't bother with %100 and %400 years, sorry ;) We
                                              # will not need them in the nearest 88 years anyway
                                              if year % 4 == 0:
                                                  self.holidays.append((9, 12))
                                              else:
                                                  self.holidays.append((9, 13))
                                  
                                      def is_holiday(self, month, day, day_of_week):
                                          if day_of_week in [5, 6]:
                                              return (month, day) not in self.not_holidays
                                          return (month, day) in self.holidays
                                  
                                      def render_day(self, x, y, month, day, day_of_week):
                                          svg = ''
                                          if self.is_holiday(month, day,  day_of_week):
                                              color = self.style['day-holiday-color']
                                          else:
                                              color = self.style['day-color']
                                          svg += ('<text x="%smm" y="%smm" font-family="%s" '
                                                  'font-size="%smm" fill="%s" text-anchor="middle">') % (
                                                      x + 0.5 * self.style['day-width'], y,
                                                      self.style['day-font-family'],
                                                      self.style['day-font-size'], color)
                                          svg += '%s' % self.days_names[day - 1]
                                          svg += '</text>'
                                          return svg
                                  
                                      def render_week(self, x, y):
                                          svg = ''
                                          svg += '<g>'
                                          for i in range(7):
                                              if i < 5:
                                                  color = self.style['week-color']
                                              else:
                                                  color = self.style['week-holiday-color']
                                              svg += ('<text x="%smm" y="%smm" font-family="%s" '
                                                      'font-size="%smm" text-anchor="middle" fill="%s">') % (
                                                          x + (i + 0.5) * self.style['day-width'], y,
                                                          self.style['week-font-family'],
                                                          self.style['week-font-size'], color)
                                              svg += '%s' % (self.weekdays_names[i])
                                              svg += '</text>'
                                          svg += '</g>'
                                          return svg
                                  
                                      def render_month(self, x, y, month_no):
                                          svg = ''
                                  
                                          svg += '<g>'
                                          svg += ('<text x="%smm" y="%smm" font-family="%s" '
                                                  'font-size="%smm" text-anchor="middle" fill="%s">') % (
                                                      x + self.style['month-width'] / 2,
                                                      y + self.style['month-padding-top'],
                                                      self.style['month-font-family'],
                                                      self.style['month-font-size'],
                                                      self.style['month-color']
                                                  )
                                          svg += '%s' % (self.month_names[month_no - 1])
                                          svg += '</text>'
                                          svg += self.render_week(x, y + self.style['week-padding-top'])
                                  
                                          day_of_week = -1  # will start from Monday
                                          week_no = 0
                                  
                                          c = Calendar(0)
                                          for day_no in c.itermonthdays(self.year, month_no):
                                  
                                              day_of_week = (day_of_week + 1) % 7
                                              if day_of_week == 0:
                                                  week_no += 1
                                  
                                              if day_no == 0:
                                                  continue  # month not yet started
                                  
                                              xx = x + self.style['day-width'] * (day_of_week)
                                              yy = y + \
                                                  self.style['day-padding-top'] + \
                                                  week_no * self.style['day-height']
                                  
                                              svg += self.render_day(xx, yy, month_no, day_no, day_of_week)
                                  
                                          svg += '</g>'
                                          return svg
                                  
                                      def render_year(self, x, y):
                                          svg = ''
                                          svg += '<g>'
                                          svg += ('<text x="%smm" y="%smm" font-family="%s" '
                                                  'font-size="%smm" text-anchor="middle" fill="%s">') % (
                                                      x + self.style['width'] / 2,
                                                      y + self.style['year-padding-top'],
                                                      self.style['year-font-family'],
                                                      self.style['year-font-size'],
                                                      self.style['year-color'])
                                          svg += self.year_name
                                          svg += '</text>'
                                          for i in range(12):
                                              xx = i % 4
                                              yy = i // 4
                                              svg += self.render_month(
                                                  x + xx * self.style['month-width'] +
                                                  xx * self.style['month-margin-right'],
                                                  y + self.style['month-offset-top'] +
                                                  yy * self.style['month-height'] +
                                                  yy * self.style['month-margin-bottom'],
                                                  i + 1
                                              )
                                          svg += '</g>'
                                          return svg
                                  
                                      def render(self):
                                          svg = ''
                                          svg += ('<?xml version="1.0" standalone="no"?>'
                                                  '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" '
                                                  '"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">'
                                                  '<svg width="%smm" height="%smm" version="1.1" '
                                                  'xmlns="http://www.w3.org/2000/svg"><desc>Calendar '
                                                  '2014</desc><g><rect x="0.25mm" y="0.25mm" '
                                                  'width="%smm" height="%smm" rx="2.5mm" fill="#fff" '
                                                  'stroke="%s" storke-width="0.5mm"/></g>') % (
                                                      self.style['width'], self.style['height'],
                                                      self.style['width'] - 0.75,
                                                      self.style['height'] - 0.75,
                                                      self.style['border-color'])
                                          svg += self.render_year(self.style['year-padding-left'], 0)
                                          svg += '</svg>'
                                          return svg
                                  
                                  
                                  import sys
                                  
                                  if __name__ == '__main__':
                                  
                                      c = SvgCalendar(2014)
                                  
                                      # normal, 100x70 mm
                                      if not 'a4' in sys.argv:
                                          print(c.render())
                                  
                                      # a4
                                      else:
                                          k = 3
                                          c.style.update({
                                              'units': 'mm',
                                  
                                              'border-color': '#fff',
                                  
                                              'width': 297,
                                              'height': 210,
                                  
                                              'year-padding-top': 6 * k,
                                              'year-padding-left': 2 * k,
                                              'year-font-size': 5 * k,
                                  
                                              'month-width': 21 * k,
                                              'month-height': 20 * k,
                                  
                                              'day-width': 22.0 * k / 7.0,
                                              'day-height': 10.0 * k / 5.0,
                                  
                                              'month-margin-right': 9,
                                              'month-margin-bottom': 1,
                                  
                                              'month-font-size': 3 * k,
                                              'month-padding-top': 5 * k,
                                  
                                              'month-offset-top': 6 * k,
                                  
                                              'week-padding-top': 9 * k,
                                              'week-font-size': 1.5 * k,
                                  
                                              'day-padding-top': 10 * k,
                                              'day-font-size': 2 * k,
                                          })
                                          print(c.render())
                                  
                                  
                                  • –1
                                    Этот календарик делал не программист а дизайнер
                                    Мне кажется или надо было начинать с 00 а не с 01
                                    А то так получается по 15 комбинаций
                                    • 0
                                      если делать с 0x00 то неудобно, например, первые дни месяца считать. 0x05 это будет шестое, а не пятое и т.п.
                                      • +1
                                        Но мы же не о удобности здесь говорим, для удобности было бы стандартно в 10-й системе
                                        А вроди бы как для программистов, а то что сделано это не тру

                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.