Pull to refresh
136
0
Send message
да, только надо определиться с форматом хранения бинарных данных.
делал… Хотя на амазоне еще можно купить прекрасный C List Celebrity

Технический прогресс опережает социальный. Если посмотреть внимательно, то примерно лет на 100. Итогом 21 века станет большой скачок именно в социальном и интеллектуальном плане. И сегодняшние дни наши потомки будут воспринимать с теми же эмоциями, с какими мы воспринимаем средневековье.

Если не претворится в жизнь один из других равновероятных сценариев, основа которых опять же в дисбалансе социального и технического развития…
Предложение оптимизировать доставку единственного на весь сайт CSS-файла, 3.5 КБ в сжатом виде, выглядит странно.

Разбивать ассет и встраивать стили в документ, во-первых, глупо, потому как раздувается объем html (а на соседних страницах вы же сами даете советы по сокращению объема кода html), а во-вторых, статика — это как раз тот случай, когда яйца лучше хранить в одной корзине, особенно когда их немного.

Опять же, вы сами пишете: «если файл CSS слишком велик, после его встраивания PageSpeed Insights может вас предупредить, что верхняя часть страницы имеет слишком большой объем». В случае, например, с главной страницей Яндекса «42,8 КБ ответа необходимо для отображения верхней части страницы», но это убивает меньше попугаев, чем 10КБ внешнего css-файла.

Вопрос: учитывает ли ваш инструмент при оценке скорости события load и DOMContentLoaded? Я не нашел упоминания.

В целом инструмент хорош, но как и всегда, лучше использовать его вместе с другими подобными инструментами.
Теперь осталось решить задачу с профилями. Вроде есть id.tmtm.ru, а точка входа в каждый из ваших проектов разная. Сплошной копипастинг и надругание над DRY с точки зрения пользователя.
Тогда уж проще «скобки поменять» ))
[(not x % 3) * 'Fizz' + (not x % 5) * 'Buzz' or x for x in range(1, 101)]
Больше всего понравился вариант с генератором:

fizzbuzz = ((not x % 3) * 'Fizz' + (not x % 5) * 'Buzz' or x for x in range(1, 101))

for x in fizzbuzz:
    print(x)
Вот демонстрация ИИ — ov3y.github.io/2048-AI/
Вкратце, используется алгоритм минимакс с альфа-бета отсечением.
Исходный код — github.com/ov3y/2048-AI
Подробное объяснение работы от автора — stackoverflow.com/a/22389702/1056032
Если расширить понятие «товар» и рассматривать еще и услуги, то анализ целевой аудитории, методов продвижения товаров и услуг, а также потребительских свойств самих товаров и услуг приведет нас к некоему «рецепту» хорошей продажи, который больше всего похож на список смертных грехов, причем список этот хоть и варьируется от конфессии к конфессии, суть его одна для всех людей.

Единственное важное замечание — к этому списку я бы добавил еще 2: страх и глупость. Хотя глупость — скорее производная страха и лени.

Многие вещи, которые вы вокруг себя видите — это пирожки из одних и тех же ингридиентов, смешанных в разных пропорциях, направленные на удовлетворение ваших слабостей. Вся прелесть в том, что те, кто эти пирожки лепит, тоже имеют слабости и также удовлетворяют их такими же, в сущности, пирожками. Получается замкнутый круг.

А еще один мудрый дядя как-то сказал: «И что ты смотришь на сучок в глазе брата твоего, а бревна в твоем глазе не чувствуешь?»
respawn есть. Передавайте свой опыт детям.
между прочим, интересное дело.
Компания, которая занимается обучением в сфере веб-технологий, для аватарок 60х60 использует полноразмерные фотки и вообще не блещет.

Или я всё проспал и клиентская оптимизация сегодня никому не нужна?!
не поддавайтесь на провокации, избегайте условности, считайте всё в битах!
универсальная версия скрипта (работает с питоном 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())

Ни одного упоминания равиоли и лазаньи. Это возмутительно!
прошу прощения, не понял предыдущего оратора…
Вообще, чтобы понять, что происходит в этих странных сложениях и почему получаются такие результаты, нужно знать несколько моментов.
Первый: в js можно складывать только числа и строки. При сложении других типов данных происходит попытка конвертировать переменные или в число, или в строку.

Таким образом, сумма двух массивов — это конкатенация двух пустых строк, и это логично:
> [].toString()
""
> [] + []
""


Второе сложение действует аналогичным образом:
> a = {}
Object {}
> a.toString()
"[object Object]"
> [] + {}
"[object Object]"


Третье и четвертое сложения вводят в заблуждение. Казалось бы, от перемены мест слагаемых сумма не меняется, и мы пытаемся снова сложить объект с массивом, но интерпретатор js воспринимает первую пару фигурных скобок, как Code Block, и игнорирует его.

Остается +[]. Плюс в данном случае является унарным оператором и ведет себя эквивалентно Number([]).
Как ниже описал cyberface, получается, что 3-е и 4-е сложения эквивалентны соответственно:
> {} + []
0
> + []
0
> Number([])
0
> Number([].toString())
0
и
> {} + {}
NaN
> + {}
NaN
> Number({})
NaN
> Number({}.toString())
NaN
1
23 ...

Information

Rating
Does not participate
Registered
Activity