Рубрика «переводы» - 29

Буквально несколько часов назад на HTML5 Rocks появилась замечательная статья о текущем положении дел, касающихся загрузки скриптов на странице. Представляю вашему вниманию ее перевод. Поправки можете присылать в личные сообщения :)
Читать полностью »

TL;DR Чем ближе к реальности ваши тестовые данные, тем лучше. Попробуйте Gor — автоматическое перенаправление production трафика на тестовую площадку в реальном времени.

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

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

в 8:15, , рубрики: gdb, переводы, метки: ,

Перевод статьи Аллана О’Доннелла Learning C with GDB.

На фоне таких высокоуровневых языков, как Ruby, Scheme или Haskell, изучение C может оказаться настоящим испытанием. В придачу к преодолению высокоуровневых особенностей C, таких как ручное управление памятью и указатели, вы еще должны обходиться без REPL. Как только Вы привыкнете к исследующему программированию в REPL, иметь дело с циклом написал-скомпилировал-запустил будет для Вас небольшим разочарованием.

С недавнего времени, мне пришла в голову идея, что я мог бы использовать GDB как псевдо-REPL для C. Я немного поэкспериментировал, используя GDB как инструмент для изучения языка, а не просто отладки С, и это принесло мне много веселья.
Читать полностью »

С распространением распределенных систем управления версиями (DVCS), таких как Git и Mercutial, я все чаще вижу дискуссии на тему правильного использования ветвления(брэнч) и слияния(мердж), и о том, как это укладывается в идею непрерывной интеграции (CI). В данном вопросе есть определенная неясность, особенно когда речь заходит о feature branching (ветвь на функциональность) и ее соответствие идеям CI.

Основная идея feature branch заключается в создании нового брэнча когда вы начинаете работать над какой либо функциональностью. В DVCS вы делаете это в своем собственном репозитории, но те же принципы работают и в централизованных VCS.

Я проиллюстрирую свои мысли следующим рядом диаграмм. В них основная линия разработки (trunk) отмечена синим, и двое разработчиков, отмеченные зеленым и фиолетовым (Reverend Green и Professor Plum).

image

Читать полностью »

Невероятно и стыдно. Является ли это новым падением CAPTCHA, да к тому же для Белого дома? Позвольте мне объяснить.

Для того, чтобы подписать on-line петицию к Белому дому об обеспечении глобальной доступности книг для слепых, нужно зарегистрировать аккаунт. Проблема в том, что для этой регистрации обязательно нужно решить CAPTCHA, а её аудиоверсия не поддаётся расшифровки. Таким образом, слепые люди не могут подписать петицию, отстаивающую равноправие для слепых!
Читать полностью »

Здравствуйте.
Перед вами перевод статьи Дастина Кертиса (Dustin Curtis) «Yours vs. Mine», которую он опубликовал в собственном блоге. Сразу скажу, что перевод достаточно вольный: старался изложить понятно, в ущерб формальной точности. Статья не претендует на статус научного исследования, и содержит краткое резюме двух концепций взаимодействия с пользователем. Все ссылки на другие источники мои, как и замечания в скобках.

Об авторе: Дастин Кертис — UI/UX дизайнер, создатель блог-платформы Svbtle. Из известных его работ — редизайн сайта American Airlines. Подробней тут.

Мой vs Ваш

При разработке дизайна нового приложения довольно рано встает следующий вопрос. Как интерфейс должен называть пользовательские данные: «мои» или «ваши»? То есть, «мой профиль» или «ваши настройки»? Меня долго гложил этот вопрос. Так какой вариант правильный?

Читать полностью »

От переводчика. Предлагаю вашему вниманию статью Скотта Янга с одноименного блога. Я решил оставить термин «энерджи-менеджмент» без перевода, поскольку существенной мыслью автора является противопоставление его тайм-менеджменту.
Приятного чтения!

Моё первое знакомство с коллегой-блоггером по имени Phil Gerbyshak состоялось, когда я опубликовал весьма подробный комментарий о том, что воспринимаю энерджи-менеджмент (управление энергией) и тайм-менеджмент (управление временем) как независимые друг от друга вещи, обе из которых следует использовать полноценно. Я также дал понять, что склонен считать подход тайм-менеджмента превосходящим энерджи-менеджмент по части пиковой производительности.

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

К несчастью, в реальности это работает не совсем так. Хоть тщательная организация приоритетов и планирование времени производило ощутимый эффект, меня все еще грызло чувство, что мой реальный день никогда вполне не оправдывает те надежды, которые я возлагал на него предыдущей ночью. Казалось, какое-то особое влияние, какая-то сила, не поддающаяся осознанию, воздействует на мой предстоящий день. Сейчас я разобрался, что это была за сила. Это была энергия.
Читать полностью »

От переводчика: Хоть посыл статьи Ali Najaf, переведённой ниже, и носит слегка рекламный оттенок («оставьте криптографию нам, экспертам»), но описанные в ней примеры показались мне довольно интересными и заслуживающими внимания.
Кроме того, никогда не будет лишним повторить прописную истину: не придумывайте свою крипто-защиту. И эта статья отлично иллюстрирует почему.

Читать полностью »

Давно хотел написать на эту тему. Первым толчком послужила статья Miško Hevery "Static Methods are Death to Testability". Я написал ответную статью, но так и не опубликовал ее. А вот недавно увидел нечто, что можно назвать «Классо-Ориентированное Программирование». Это освежило мой интерес к теме и вот результат.

«Классо-Ориентированое Программирование» — это когда используются классы, состоящие только из статических методов и свойств, а экземпляр класса никогда не создается. В этой статье я буду говорить о том, что:

  • это не дает никаких преимуществ по сравнению с процедурным программированием
  • не стоит отказываться от объектов
  • наличие статических членов класса != смерть тестам

Хотя эта статья про PHP, концепции применимы и к другим языкам.
Читать полностью »

Большинство фанатов ООП одновременно являются и фанатами полиморфизма. Многие хорошие в других отношениях книги (например, «Рефакторинг» Фаулера) впадают в крайность, утверждая, что если вы используете проверки типов во время выполнения (такие как операция instanceof в Java), то вы, по всей вероятности, в душе злодейский злодей из тех, что пугают маленьких детей операторами switch.

Вообще говоря, я согласен с тем, что использование instanceof и его аналогов обычно является признаком недостаточных навыков ООП проектирования. Полиморфизм лучше проверок типов, он делает код гибче и понятнее. Однако, по крайней мере в одном случае, достаточно распространенном чтобы считаться паттерном сам по себе, вы просто не можете использовать полиморфизм. Я бы применил его с удовольствием, честно, и если вы знаете как это сделать – расскажите мне. Но не думаю что это возможно, особенно в статических языках типа Java или C++.

Определение полиморфизма

На тот случай если вы незнакомы с терминологией ООП, полиморфизм – это претенциозное обозначение для концепции позднего связывания. Позднее связывание – это претенциозное обозначение (вы обнаружите здесь паттерн если копнете глубже) для отсрочки решения о том какой метод будет вызван до начала выполнения программы. Когда и будет выполнена проверка соответствия объекта и сообщения (метода).

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

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

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js