• Антитеизм

    Оказывается, мое отношение к религии называется “Антитеизм”. Вот и хорошо, теперь можно просто ссылку кидать.

    ТЫЦ

    Цитата:

    Я не только считаю, что все религии — это версии одной и той же неправды, но и считаю, что влияние церквей и эффект от религиозной веры безусловно пагубен.

  • Питонячьи хитрости

    Расскажу о всяких хитростях Питона, с которыми сталкивался в работе. Долгое время записывал их на бумажку, а теперь решил скомпоновать. Думаю, будет любопытно опытным питонщикам. Сказанное ниже носит познавательный характер. Не призываю использовать в проде.

    Многоточие

    Неожиданно, при определенных условиях многоточие ... становится правильной лексемой! Внутри оператора [] многоточие вырождается в объект Ellipsis:

    >>> d = {(1, Ellipsis, 2): 42}
    >>> d[1, ..., 2]
    42
    

    Если переопределить метод __getitem__ и проверять аргументы на многоточие, можно добиться интересных результатов. Так работает библиотека hask. В ней с помощью многоточия определяются бесконечные списки:

    # бесконечный ленивый список от единицы
    List[1, ...]
    
    # ленивый список от 1 до 100
    List[1, ..., 100]
    
    # аналогично, но с шагом в 2
    List[1, 3, ...]
    

    В другом месте многоточие вызовет ошибку синтаксиса.

    Срезы в аргументах

    В оператор индекса [] можно передать синтаксис словаря: key: value, .... Тогда в методе __getitem__ мы получим кортеж объектов slice. Ключ и значение хранятся в полях .start и .stop. Выглядит так:

        def __getitem__(cls, slices):
    
            if isinstance(slices, tuple):
                slice_tuple = slices
            else:
                slice_tuple = (slices, )
    
            keys = (sl.start for sl in slice_tuple)
            vals = (sl.stop for sl in slice_tuple)
    
            return dict(zip(keys, vals))
    
    YourClass["foo": 42, "bar": "test"]
    >>> {"foo": 42, "bar": "test"}
    

    Деструктивный синтаксис

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

    Это объективный минус третьего Питона. Зачем лишать разработчиков удобной возможности? Я постоянно работаю с парами. Синтаксиса def action((key, val)): теперь будет не хватать.

    Погружение в словарь

    Предположим, есть вложенные словари, ответ какого-то микросервиса. Нужно взять поле из глубины. Структура ответа меняется. Часто разработчики пишут следующее:

    data.get('result', {}).get('user', {}).get('name', 'unknown')
    

    Минусы в том, что код плохо читается и созданы 2 лишних словаря. Аргументы вычисляются до шага в функцию, поэтому словари будут созданы даже когда ключи есть.

    Неочевидный минус, из-за которого придется чинить прод в пятницу, кроется в методе .get. Он возвращает дефолт только если ключа нет. А если ключ есть и равен None, то вернется None вне зависимости от того, что передано в дефолт.

    data = {"result": {"user": None}}
    data.get('result', {}).get('user', {}).get('name', 'unknown')
    >>> AttributeError: 'NoneType' object has no attribute 'get'
    

    В библиотеке f я предложил нормальный способ работы со вложенными словарями:

    f.ichain(data, 'result', 'user', 'name')
    >>> None
    

    Конечное приведение типов

    Приводить типы в конце каждой операции – здравая мысль. Идея в том, чтобы добавлять к концу вычислений кусочек ... or <default>, например:

    get_users_count() or 0
    >>> 0
    
    get_account_list(id) or []
    >>> []
    
    f.ichain(data, 'result', 'user', 'name') or 'dunno'
    >>> dunno
    

    Этот прием спасает злополучного None, который лезет изо всех щелей. Беда в том, что в скриптовых языках нет четких правил для пустых значений. Например, функция может отдать или пустой список, или None. Запомнить невозможно. Рано или поздно None провалится туда, где ожидают список или число.

    Решение – выводить типы самостоятельно. Поскольку оператор or ленив во всех языках, выражение справа не будет вычислено без необходимости. Следующий код:

    data = {"user": None}
    (data.get("user") or {}).get("name") or "dunno"
    >>> "dunno"
    

    вернет ожидаемый дефолт, даже когда ключ есть и равен None. При этом если в юзере лежат актуальные данные, пустой словарь не будет создан.

    Правые методы

    Еще одна особенность классов в Питоне – правые волшебные методы. Они начинаются с префикса r: __radd__, __rsub__ и т.д. Как следует из названия, эти методы вызываются для правого операнда в тех случаях, когда для левого операнда метод не определен.

    Другими словами, рассмотрим выражение a + b. Сперва Питон попытается сделать так: a.__add__(b). Если для a метод __add__ неопределен, будет предпринята другая попытка: b.__radd__(a). И если __radd__ тоже не определен для b, вылезет ошибка.

    Правые методы появились в третьей версии Питона. Попробуем реализовать следующее поведение: к списку добавляем число. Если прибавляем слева, число становится в начало списка. Если справа – в конец.

    class List(list):
    
        def __add__(self, other):
            if isinstance(other, list):
                return super(List, self).__add__(other)
            else:
                return self + [other]
    
        def __radd__(self, other):
            if isinstance(other, list):
                return other.__add__(self)
            else:
                return [other].__add__(self)
    
    >>> 99 + List([1, 2, 3])
    [99, 1, 2, 3]
    
    >>> List([1, 2, 3]) + 99
    [1, 2, 3, 99]
    

    Особенности среза в тройке

    Во втором Питоне у классов был особый метод __getslice__ для получения среза. В тройке его объединили с __getitem__. Теперь интерпретатор проверяет, что передано в __getitem__. Если написать foo[1:2], будет передан экземпляр класса slice, а если foo[1, 2] – кортеж.

    Этот пункт я привожу к тому, что переопределив метод __getitem__, мы по запаре можем сломать операцию среза. Приходится добавлять условие: если передан срез – вызывать предка, если нет – своя логика:

        def __getitem__(self, item):
            if isinstance(item, slice):
                return super(MyClass, self).__getitem__(item)
            else:
                ...
    
  • Настольный Линукс

    Пока Макбук на ремонте, вынужденно работаю в Убунте. Достал с антресолей старенький Леново x220i, скачал образ 16.04, поставил с флешки. I’m using Linux, woo-hoo!

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

    Ожидаемо, настольный Линкус по-прежнему уступает Маку. Удивляет, что многие из претензий могли бы быть исправлены уже сейчас. Разработчикам Убунты не нужно, как Джобсу, брить голову и идти в монахи. Достаточно поработать недельку в Маке, а потом сесть за собственное поделие.

    Первая претензия – ошибки при старте системы. Стоило поставить из пакетов стандартные утилиты вроде Гита, Емакса, dev-библиотек, как при загрузке вылазят диалоги “System Program Error”. Что случилось, как починить – не понятно. Число ошибок со временем растет. Была одна, стало две. У знакомого штук 12 выскакивало.

    Убунта не вывозит без частой перезагрузки. Работая на Маке, я не выключал его месяцами. 2-3 месяца непрерывной работы – обычное дело. Рекод был 5 месяцев, и все без перебоев.

    Убунта же сливается к концу недели. Например, теряет сеть. Все, нет соединений, ни фай-фая, ни провода. Только перезагрузка. Ставить сторонний менеджер сети я считаю моветоном. Это должно быть из коробки.

    Система забывает второй монитор. Настроил разрешение и позицию, через какое-то время втыкаешь кабель – и все как в первый раз. Справедливости ради, в Маке такое случалось, но крайне редко, а с обновлением до Эль Капитана пропало.

    Разработчики Убунты не имеют базовых понятий об интерфейсе. Тыкая на балон с нотификацией, я ожидаю увидеть окно с полной информацией. Но в Убунте принято просто показать балон, а как добраться до цели – твои проблемы.

    Наример, всплывает нотификашка – “Your software needs to be updated”. Ну, ок, обновляйся. Тыкаю в пузырь, он бледнеет, ничего не происходит. Я сам должен идти в дебри настроек и запускать апдейт. Заняться мне больше нечем, ага.

    Миллион мелких косяков со шрифтами и выравниванием. Когда вываливается дропдаун, его полотно в два раза больше, чем нужно на расположение опций. Студенческая поделка на Дельфи. Хотя вру, в Дельфи гуй был нормальный, там при всем желании нельзя было родить столь уродский дропдаун.

    Стандартными средствами нельзя переназначить капс. Пришлось выкачивать какой-то супер-твик-тулкит. В Маке – стандартная опция.

    Установщик пакетов – беда. Поставить пакет без трудностей можно только в терминале.

    Главный минус – потеря времени. На исправление каждого косяка нужно минимум 30 минут чтобы нагуглить рецепт, вспомнить забытую команду, поправить конфиг, перезагрузиться. Хотя вообще-то сел работать.

    Мак не идеален, но как настольная система для повседневных задач гораздо стабильней. Именно настольная, я делаю акцент. Потому что в серверном плане у Линукса нет конкурентов. Десктоп пилить и пилить еще.

    Убунтоводы, не спешите писать о недостатках Мака. Они есть, но о них в другом посте.

  • Книга "Цель"

    Ох, какую книгу я прочитал – обзавидуетесь! Книга-праздник. Так я называю книги, удовольствие от которых почти физическое. Рад представить:

    Цель. Процесс непрерывного улучшения

    The Goal Cover

    Это бизнес-роман. С таким жанром я столкнулся впервые и был приятно удивлен. Цель – это история об увлекательных тайнах бизнеса, оптимизации производства, финансовых делах. Все это проходит сквозь жизнь главного героя, который взвалил на себя нелегкую задачу в бизнесе. Одновременно он вынужден разобраться с личными и семейными проблемами.

    Алекс Рого, прообраз автора – директор завода в небольшом американском городке. Дела на заводе идут плохо: заказы просрочены, процесс неясен, нехватка материалов, задержки во всех рабочих центрах. Особо важные заказы приходится “протаскивать”: в буквальном смысле сопровождать каждую партию деталей по станкам, требовать экстренной перенастройки оборудования, набирать внеурочные смены.

    Из-за нервной обстановки нервы на пределе, рабочие допускают ошибки. Самый важный заказ не ушел в срок: механик неверно наладил станок. Много брака, станок уходит в ремонт. Счет за экстренный выезд наладчиков уводит прибыль от заказа в минус. Мастер, допустивший ошибку, увольняется из-за нервов и боязни вычета. У других рабочих нет квалификации для этого станка.

    И так каждую неделю. Алекс фактически живет на заводе, пытаясь разрулить трудности. Начинаются проблемы в семье.

    Дела идут плохо не только на заводе Алекса, но и во всем дивизионе. Алексу ставят ультиматум – если за 3 месяца не изменить ситуацию к лучшему, завод закроют.

    Для Алекса это катастрофа, провал, карьерная смерть. На новом рабочем месте ему предложат низкую должность. Если остаться в текущей фирме, не будет уважения. Алекс – надежда города, потому что завод дает тысячу рабочих мест, а с бюджетом у городка не густо.

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

    Ранее ученый-физик, Иона занимается оптимизацией процессов на производстве. Задав несколько вопросов, он быстрей Алекса понимает, в какой заднице завод. Иона дает несколько странных, с точки зрения Алекса, советов. Один из них звучит так – прежде чем мы начнем спасать завод, определи, в чем цель фирмы.

    Что дальше – не описать. Три напряженных месяца. Жизнь в жутком стрессе в ожидании провала. Разрыв с женой. Первые проблески надежды. Снова проблемы. Очередные наставления Ионы, взрывающие мозг. Успех. Новые трудности, дело безнадежно. Потом…

    Короче, надо читать самому. Книга рвет изрядное число шаблонов.

    • На предприятии обязательно есть то, что главный герой называет бутылочным горлышком. Это станок, сотрудник или узел, где мощность пропускного потока ограничена. Горлышко есть всегда. Нежелание его обнаружить – главная проблема на производстве.

    • Бутылочное горлышко отвечает за производительность предприятия в целом. Час, потерянный в горлышке, невозможно нагнать на следующих стадиях производства.

    • Горлышек может быть несколько. В общем случае, их наличие – норма и даже желаемый факт. Регулируя мощность горлышек, мы меняем производительность всего предприятия.

    • Обычный рабочий центр (или не-бутылочное горлышко) не должен работать свыше нормы, заданной рынком. Иначе бутылочное горлышко не сможет потребить потенциал не-горлышка, и возникнет избыточное производство.

    • Последний термин полностью звучит как “Материально-товарные ценности”. Это все, что было созданно в процесе производства. Высокое значение показателя говорит о проблемах со сбытом. Если ценности растут, значит, производство делает продукт, но его не покупают.

    • Предприятие, в котором все центры работают на полную мощность – неэффективно! Рано или поздно процесс упрется в бутылочные горлышки, которые не были заметны раньше.

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

    • Вот почему вредно нагружать работой людей и технику только за тем, чтобы не было простоев. Сотрудники поймут, что с головой у руководства не в порядке. В случае с техникой нельзя забывать амортизацию и Мерфи.

    • Ритм важнее темпа. Размеренность производства в приоритете перед скоростью конкретного рабочего центра. Выигрыш в час рабочего времени на обычном узле не несет выигрыша в целом.

    • По этой же причине могут оказаться ложными показатели эффективности на отдельных рабочих местах. Да, каждый справился на ура, но продукт выпустили с опозданием. Работа на выходных съела часть прибыли. Кто виноват?

    • В цепи событий возможны колебания. Ошибочно считать, что они нейтрализуют друг друга. Напротив, погрешности накапливаются и двигаются волнами. Волна значит бессонную ночь, задержки, увольнения.

    • Пример: рабочие последовательно обрабатывают детали, передают их друг другу. Эмпирически определена средняя выработка рабочего: N деталей в час. По факту он делает от (N - 5) до (N + 5) деталей в час. Можем предположить, что если первый случайно сделал (N - 2) деталей, то второй с такой же вероятностью сделает (N + 2), что сведет погрешность в ноль. На самом деле второй рабочий не сможет сделать (N + 2), потому что получит от первого только (N - 2). И все остальные сделают не больше (N - 2). Это значит, негативная погрешность распространяется до конца цепочки, а позитивная, даже если случится, будет поглащена негативной где-то внутри.

    • Этому существует математическое обоснование. Алекс провел игру с одноклассниками сына. Мальчики кидали кости и передавали спички (детали). Количество очков (обработанных деталей) распределилось строго по убыванию очереди. Хотя среднее число очков на кости было одинаковым для каждого мальчика (3.5), чем дальше он был в цепи, тем меньше спичек (деталей) мог переложить из своей тарелки (рабочего центра) следующему.

    • Чтобы решить проблемы в фирме, нужно четко понять, в чем ее цель. Незнание цели ведет к растрате ресурсов и ложным ожиданиям.

    • Ограничения носят блуждающий характер. Устранив ограничение, наивный руководитель откидывается в кресло до наступления нового завала. Мудрый руководитель умеет предсказать, где возникнет новое.

    • Использование ресурса не всегда ведет к достижению цели. Например, заставить рабочих таскать мешки из угла в угол только потому, что у них простой. Это повысит показатели эффективности (8 рабочих часов вместо 6), но не приведет к достижению цели.

    • Новинки технического прогресса приносят пользу фирме лишь при правильном их использовании. Так, формально новый роботизированный станок улучшил эффективность фирмы по всем статьям, но на деле лишь быстрей потащил ее на финансовое дно.

    • Намереваясь сделать очередной шаг, спросите себя, как он приблизит вас к цели. Например: добавляя эту фичу, мы улучшаем продукт, что расширит базу клиентов и принесет прибыль. Контр-пример: мы хотим заменить устаревший фреймворк на современный. Клиенты не почувствуют разницу, но разработчикам будет интересно.

    • Смотрите на любую вещь так, словно видете ее впервые. Оспаривайте выводы, которые следуют из “здравого смысла” или “общеизвестных фактов”. Это главная мысль книги.

    Самый классный эпизод – три главы про поход Алекса с сыном и одноклассниками в лес. Столько проблем и идей! Материал в этом месте особо плотный.

    Книгу дополняют интервью с автором и руководителями крупных фирм, внедривших его практики. Директор одного из заводов Дженерал Моторс рассказывает, что у него ушло 5 лет на одни только бутылочные горлышки.

    Теперь о том, какое отношение книга имеет к ай-ти. Я считаю, непосредственное. Группа программистов – не завод, но многие из идей автора верны для любой фирмы или просто группы людей. Что именно, полагаю, напишу отдельным постом.

    Пока читал книгу, вспоминал один крупный проект. Компания – гигант, деньги гребет лопатой. Команда не маленькая. Но – мы не успевали. Каждый релиз был мрак и боль. Внезапные баги, патчи на прод. Задержки, перенос релизов. И когда я пытался сказать, что это неправильно, отвечали – так у всех. Поиск виноватых напоминал ситуацию с заводом. Каждый в отдельности отработал отлично, закрыл таски в Джире. А релиз хромой и с опозданием на неделю.

    К счастью, я понял, что так не у всех. Нужно только пересмотреть ситуацию и пойти к цели маленькими шагами. Если у всех плохо, не значит, что должно быть и у вас. Герой автора это доказал. Ищите ограничения, смотрите на вещи под другим углом и не ведитесь на общепринятые догмы.

  • Как писать иностранные термины

    В комментариях на Хабре мне пишут, что, оказывается, я неправильно пишу зарубежные термины – кириллицей, а надо латиницей. Это называют “в привычной манере”. И добавляют: imho.

    С этой болезнью я борюсь давно и не удивляюсь прокаженным.

    Нет смысла спорить с человеком, который полагает, что писать “Google” вместо Гугл или “iPhone” вместо Айфон – правильно. Это означает серьезную брешь в самообразовании. Доказывать что-то бесполезно. Человек должен сам прийти к тому, что правильно будет Гугл, Айфон, Айпад, Гит, Джаваскрипт и так далее.

    Запомните следующий тезис:

    Не бывает слов, которые не переводятся

    То есть вообще не бывает. Понятно? Любое слово из английского, испанского или китайского можно взять и перевести.

    Помните начало нулевых? Тогда многие всерьез писали Internet или Web-site. Они думали, что эти слова не переводятся. А сегодня разве кто-то пишет Internet? Только тот, кто не имеет к нему отношения.

    Покажите мне человека, который пишет Pepsi вместо Пепси или Coca-Cola вместо Кока-Кола. Почему-то эти слова прекрасно переводятся.

    По аналогии, переводятся технические слова: названия инструментов, языков, паттернов. Кстати, мы же не пишем pattern, а просто фигачим транслитом. Примеров этому тысячи.

    Непривычно! – кричит хабраюзер, который всю жизнь довольствовался треш-переводами, где русских слов меньше, чем английских. Все сперва непривычно. Новый язык, браузер, телефон, переезд – непривычно. Секс в первый раз тоже непривычен.

    Несколько лет назад я участвовал в мероприятии по переводу документации системы Друпал. Знаете, такой мамонт на пы-хы-пе. Мой перевод не приняли по той причине, что термин URL, оказывается, не переводится!

    Админ с багом решил распространить баг на меня. В итоговой документации английских слов было поровну с русскими. Это назвали переводом и выбросили в сообщество.

    Кто сегодня в трезвом уме пишет URL? Пишут “ссылка”, “адрес”. Представьте:

    Миша, скинь URL на твой профиль в Skype?

    Видно же, что у человека рак мозга: четые раза переключал раскладку, набирал капсом или с шифтом. Как можно позволить себе такую неэффективность? Это только секретарше в госконторе простительно.

    Развитый человек смотрит на проблему перевода с недоумением. В математике, если нельзя вычислить значение функции от аргумента, должно быть этому обоснование. Например, нельзя посчитать a / x при x = 0. А почему слово нельзя перевести? Кто-то может внятно объяснить, не ссылаясь на привычки и “здравый смысл”?

    Особо одаренные пишут термин латиницей, а на хвост сажают русское окончание. Получаюся уродцы в духе:

    …расскажет о websocket-ах!

    …опубликовать в Facebook-е.

    …показать только свежие commit-ы?

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

    Кириллица для американца – все равно что иероглифы для русского. Как прочесть букву “р”? Это “эр” или “пэ”? Буква “м” – это наша, американская “эм” или что-то другое?

    Вот идет гопник в майке с надписью “Russia”. Кто-нибудь хоть раз видел, чтобы американцы печатали на одежде “США”?

    Разве бывает, чтобы слово “водка” американцы написали русскими буквами? Они пишут vodka. Если речь о машине “Камаз” – пишут Kamaz. Еще пишут Volga, matreshka, balalaika и так далее.

    Если смысл слова не ясен, все равно пишут транслитом, а в скобках или под сноской – значение. Вот реальный пример из учебника по английскому. Текст про первую женщину-космонавтку:

    Pilots named her Chaika (seagul in russian).

    Не “Чайка”, а “Chaika”.

    Я уж не говорю о том, что названия китайских или японских брендов никогда не пишут иероглифами.

    Вернемся к нашим баранам. Очередной горе-перевод:

    После раздумий он решил уйти из Google в Facebook.

    Вот подумай, переводчик, как читать эту фразу тем, кто не знаком с английским? Из Гогле? Из Гоогл? Из Гугле? В Фасбук? Фесбоок? А если чел переехал Китай и устроился в национальный поисковик 百度? Закорючками писать будешь?

    Поможем неуверенному переводчику. Google переводится и будет по-русски Гугл. Facebook, внезапно, тоже переводится и будет Фейсбук:

    После раздумий он решил уйти из Гугла в Фейсбук.

    Китайский вариант:

    После раздумий он решил уйти из Гугла в Байду.

    Еще раз: непереводимых слов нет. Да, вы не сможете написать “Фейсбук” на африканском наречии, где 3 звука и 2 жеста. Но по-русски сможете.

    Если все плохо и доводы вас не убедили, ситуацию все еще можно спасти. Почитайте, что пишут достойные люди по этому поводу:

  • Публикация на Хабре

    На главной Хабра висит моя статья о библиотеке f для функционального программирования в Питоне.

    Гитхаб проекта с документацией. Пакет в Pypi.

  • Плохая работа

    Бывает, когда что-то сделано плохо или не работает, я злюсь. Окружающие удивляются: ну подумаешь, не работает! Можно открыть в другом браузере, зайти позже, воспользоваться услугами конкурента. Я злюсь еще сильнее, потому что меня не поняли.

    Раздражает не факт того, что работа сделана плохо. Вот невидаль! Бесит, что плохая работа прошла полный цикл исполнения, согласования, приема и внедрения. И никто – ни один человек во всей цепочке – не сказал: ребят, мы же говно сделали, как этим пользоваться?

    Плохая работа повсюду. Сделали сайт – не открывается на Айпаде из-за говно-скриптов. Сделали скат возле лестницы – невозможно катить коляску. Парковочное место стоит впритык с тротуаром, машина загораживает проход. В анкете не хватает места. Бордюры там, где их быть не должно.

    И так далее.

    Причина плохой работы кроется в следующем. Исполнитель либо не пользуется своим продуктом, либо имеет халявный доступ к продукции фирмы. Оба фактора одинаково плохи. В результате изделие или услуга не находят точек соприкосновения с действительностью. Оно как бы есть, но люди пользуются обходными способами.

    Артемий Лебедев предложил оригинальный способ приема пандусов. Прораба сажают в инвалидную коляску и скатывают вниз. Скатился цел – работа принята. В противном случае прораб сам станет инвалидом. Но это предотвратит появление других опасных пандусов.

    Ничто так не развращает, как халявный доступ к продукту. Получая бесплатно своими же руками сделанное говно, исполнитель вздыхает – да, не очень, зато бесплатно.

    Максимальной привилегией, положенной сотруднику, должна быть обычная скидка в 10% от стоимости продукта. Ты делал – так купи! В фирмах, где действует это правило, производят классные вещи и услуги.

    В реальности картина должна быть такой. Если ты дизайнер и сделал бланк анкеты – распечатай и заполни сам. Сразу станет ясно, где много места, где мало. Сделал сайт – открой на медленной машине или на Айпаде. Если тормозит – переделывай. Сделал пандус – сел в инвалидную коляску и попробовал съехать. Не вышло – все разобрать и переделать. Убытки вычесть из зарплаты проектировщика.

    И так далее. Короткими словами – нужно только обязать исполнителя воспользоваться своим же продуктом.

    Очень советую прочитать “Сказку О Криворуких Ебланах”. Это именно то, что я хотел передать.

  • Причины отказа от ПДФ

    Еще год назад я был твердо уверен, что лучший формат для книг и статей – ПДФ. Только с покупкой электронной читалки я понял, как ошибался. Теперь качаю ПДФ лишь когда других вариантов не остается.

    Но дело не только в читалке. Немного подумав, я выделил весомые недостатки формата. Разберемся, что с ним не так.

    Формат ПДФ – потомок устаревшего языка Postscript, за изобретение которого инженеры Адоби получили очень престижную премию. Дело в том, в те времена не было единого правила, по которому принтер печатал документ.

    Postscript был декларативным языком с инструкциями, что и как печатать. Даже самый сложный дизайн стало возможным перевести в набор команд и отправить на принтер. Поскольку Postscript – это текст, программа, которая не могла выдать графический файл, сохраняла .ps-документ, составленный по шаблону.

    ПДФ расширил возможности Постскрипта. На текущий момент существует девятое поколение формата (1.9). Долгое время пользователям компьютеров и планшетов было необходимо ставить Adobe Reader, т.к. в системе не было встроенной программы.

    К счастью, времена изменились. Сегодня просмотреть ПДФ можно стандартной программой даже в Линуксе. Все браузеры умеют отображать документ как страничку.

    Основное достоинство ПДФ в том, что он хранит и растровую, и векторную графику одновременно. Это крайне полезно для макетов с текстом. Текст стараются хранить в векторе до самой последней стадии печатной обработки.

    Главный недостаток формата следует из его достоинства. ПДФ предназначен для печати, поэтому плохо влезает в небольшие экраны. Сжать можно только сам документ. Текст не может быть скомпанован динамически. Умные читалки вроде Киндла научились срезать пустые поля по краям документа, но это не приносит значимой пользы.

    ПДФ – бинарный формат. Документ плохо поддается машинной обработке. Огромные усилия вложены во всевозможные парсеры, анализаторы и утилиты, которые вытягивают из ПДФ данные в более дружелюбные форматы. Я лично участвовал в подобном мероприятии.

    На недостатках формата отдельные предприниматели строят бизнес. Фирма VeryPDF предоставляет клиентам автоматическое распознавание таблиц в ПДФ. Многие ПДФ-библиотеки для языков программирования либо платные, либо с несвободной лицензией.

    ПДФ – сложный формат с огромным легаси. Задача парсинга упирается в то, что на каждый случай, как обрабатывать тот или иной элемент, существует длинный case-оператор в зависимости от версии.

    В документ практически невозможно вставить какую-либо анимацию или медиа-контент. Гифка не воспроизводится. Видео – только с помощью плагина, который никто кроме Адоби не поддерживает.

    Однажды я ради интереса скачал демо-документ с трехмерной сценой какой-то детали. Он весил 170 Мб и при открытии 3 раза спросил про безопасность. А Гитхаб без проблем показывает в Хроме рендер моделей для 3Д-принтеров.

    Официальная программа Adobe Reader выродилась в жирного монстра, который регистрирует 2 службы, прописывается в автозагрузку, забит по самые уши лишними опциями.

    Поверх формата ПДФ фирма Адоби пыталась создать облачную платфрму для совместной работы с документами. Давно не узнавал, как идут дела, но на мой взгляд, не густо. Все же, наследие формата для этого не подходит.

    ПДФ это своего рода Флеш в плане безопасности. Массовые случаи заражений, утечек данных, зависаний компьютеров. Как вообще могло в прийти голову разрешить вложения .exe, .js, .vb файлов в ПДФ-документ?

    Что же предпочесть в итоге?

    На мой взгляд, лучший формат для текста и мультимедии – это дедушка ХТМЛ. Не потому, что внезапно он стал чем-то лучше. Браузеры и устройства стали показывать его очень хорошо. Анимация, видео, звук, интерактивные элементы, даже игры – все это поддерживает ХТМЛ. Текст компонуется автоматически.

    Если в документе исключительно теги заголовков и абзацев (h1..6 и p), то любой мобильный девайс покажет текст на ура.

    Мораль – упрощайте. Если устройство должно показывать текст, то лучший формат – это просто текст.

  • А всего-то о порно написал

    spike

    Озабоченные…

  • Порнография

    Преамбула

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

    На каждую статью писать пост глупо. Для закрепления материала подходит формат пересказа. Просто тезисы, опорные пункты, что показалось интересным.

    Последние пару месяцев читал две темы – монады и порно (что почти одно и то же). Сегодня расскажу о порнографии.

    Итак, порнография

    Читать про порно – совсем не то, что его смотреть. Это относится к любому продукту. Процесс часто выглядит не с самой лучшей стороны. Уважайте пользователей – не вытряхивайте на них процесс.

    Давным-давно я работал не телевидении и делал сюжет про какой-то хлебозавод. Не мог потом есть хлеб месяц. Черные станки, обгорелые лотки, толстые бабищи с немытыми руками. Фу.

    Никто в индустрии не ассоциирует порно с сексом. Все говорят – процесс, работа. Да, бывает удовольствие, но в целом – бизнес. Как в любом бизнесе, от обывателя скрыты детали, а напоказ выставлены мифы.

    Суммарный доход порноиндустрии превышает сумму доходов Гугла, Микрософта, Эпла и других айтишных гигантов. Общее время порно-роликов, просмотренных за год пользователями порно-тубов, в два раза больше времени существования человека на Земле.

    Система порноиндустрии очень сложна и включает разные должности. Актрисы и съемочная группа – малая вершина айсберга. Цепь, по которой проходит новая актриса от кастинга до съемок, очень длинна. Сюда входят агенты, рекрутеры, сопровождающие, гримеры, постановщики, врачи, психологи, пиарщики, технари, менеджеры. Единицы могут точно описать все процессы порноиндустрии.

    В основном девушки идут в порно, чтобы решить разовые финансовые проблемы. Их ловят на сказку, что съемки для западной аудитории, интернет большой, в родной стране никто не узнает. На деле, близкие узнают о съемках в среднем через полгода.

    Работает это так. Роликам с участием актрис из России и Украины проставляют теги “Russian Girls”. Когда пользователь из России заходит на очередной порно-туб, его распознают по айпи и показывают блок с российскими девочками, где он видит знакомое по универу лицо. Ссылка вбрасывается в группу Вконтакта. Прежде чем админы успеют удалить, девушку узнают.

    После деанонимизации большая часть уезжает на регулярные съемки.

    В России и Украине порно почти не снимают. Съемки носят любительский и полулегальный характер. В России стать режиссерем порнофильмов – своего рода мечта, китч. Неясно, что круче – снимать или сниматься. Единицы вроде Прянишникова или свернули бизнес, или ушли на западные рынки.

    Россия и Украина – валовые поставщики порноактрис. Девушки этих стран в тренде. На каждом порно-тубе тег или раздел “Russian Girls”, где нарочно слышна русская речь.

    Порно-сессия снимается в два этапа. Сначала фотосъемка, потом видео. Актеры проигрывают сюжет (если таковой есть) и раздеваются дважды. Я всегда думал, что оба типа съемок делаются за раз. Вот актеры двигаются, снимают видео, потом хлоп – замерли, щелкает фотоаппарат.

    Оказалось – нет. В принципе, логично, ведь для фото нужнен другой свет и ракурсы.

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

    Есть миф о том, что порно-фотографии долго фотошопят. Это неправда. Фотографий так много, что их только пропускают через пакетную обработку. Поэтому свет и ракурсы должны быть правильными сразу.

    По словам актрис, искусственная сперма по вкусу как зубная паста. О ней я читал забавные вещи. Ее делают из порошковой смеси J-Lube. Если добавить воды и нагреть в микроволновке, порошок станет удивительно липкой слизью. Его используют для совокупления скота (коней, лошадей) или в фильмах ужасов (чужой, гиганские насекомые).

    Для анальных сцен актрисы пользуются лидокоиновым спреем, чтобы снизить чувсвительность. Лидокаин раньше использовался как локальное обезболивающее в зубных клиниках.

    Перед началом съемок актеров фотографируют с паспортом и свежим номером местной газеты. Это доказывает, что фотография сделана не раньше даты, указанной на газете.

    В основном порнографию делают в Лос-Анджелесе и районах, например, Сан-Фернандо (та самая Силиконовая, а не Кремниевая долина), Канаде и Венгрии. Будапешт – единая точка сбора, куда переправляют девушек из стран бывшего СССР.

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

    Почти у всех актрис есть личная жинь, бойфренды. Чаще всего они знают, чем занимается их подружки. Одни не парятся по этому поводу – это бизнес, игра на камеру. Другие ставят условия – снимайся, но если начнем строить серьезные отношения, прекращай.

    Порнография от начала до конца – один сплошной обман.

Страница 31 из 52