четверг, 1 октября 2015 г.

Суперсилы Chrome DevTools / Блог компании 2ГИС / Хабрахабр


Суперсилы Chrome DevTools



Я работаю в команде Онлайн. Мы делаем веб-версию справочника 2ГИС. Это долгоживущий активно развивающийся проект, в котором JavaScript используется как основной язык как на клиенте, так и на сервере.

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

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

Проблема


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

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

Отладка


Цена за скорость разработки — наличие багов. Этот класс задач требует быстрого реагирования, а значит и входа в контекст происходящего.

Неверный результат на выходе


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

Помимо стандартных брейкпоинтов на строчке кода, в DevTools (здесь и далее речь идет об инструментах браузера Google Chrome) есть возможность остановить выполнение по определенному событию.

DOM Breakpoint устанавливается на узел дерева в инспекторе. Остановиться можно при удалении этого элемента, изменении его поддерева или атрибутов (напомню, что style и class — это тоже атрибуты).



XHR Breakpoint устанавливается на весь документ и позволяет найти строчку кода, из которой посылается подпадающий под заданный паттерн запрос.



Эти брэйкпоинты отлично работают в связке с асинхронным режимом стэка вызовов (Async сall stack). Он не обрывается на асинхронных операциях и дает возможность, например, перейти из обработчика setTimeout к коду, который его установил. Таким образом, можно заглянуть намного дальше в историю и найти корни даже сложных багов.



Пример сценария:

1. Происходит непредвиденное изменение в DOM-дереве.
2. Поведение воспроизводится.
3. Устанавливаем нужный тип DOM-брэйкпоинта.
4. Включаем Async режим в отладчике.
5. Воспроизводим баг и путешествуем по истории вызовов, пока не найдем корни проблемы.

Неправильное внутреннее представление


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

Предположим, что состояние — это глобальный объект. Тогда для слежки за ним можно использовать следующий код:
var watchMe = {};    Object.observe(watchMe, function() {      debugger;  });    watchMe.foo = 'bar'; // Выполнение остановится  


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

var watchMe = {};    Object.observe(watchMe, function(options) {      options.forEach(function(option) {          var groupName = option.name + ' changed';          console.groupCollapsed(groupName);          console.log('Old value: ', option.oldValue);          console.log('New value: ', option.object[option.name]);          console.groupEnd(groupName);          });  });  


Этот пример будет выводить консоль Chrome компактные группы логов при изменении свойств объекта. Кода теперь намного больше, и каждый раз писать его по памяти не удобно. Поэтому можно сохранить его как сниппет и запускать по необходимости.



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

Сценарий использования:

1. Если наблюдаемый объект глобальный, то просто запускаем на нем сниппет.
2. Если объект доступен только в локальной области видимости, добавляем нужный код в приложение на время отладки.

Исследование


Работа программиста не ограничивается исправлением багов. Для добавления новой функциональности важно понимание работы приложения в целом на сложных сценариях.

Console как источник знаний


Консоль в DevTools — это не только способ быстро выполнить небольшой скрипт. Она обладает мощным API, реализующим недоступные в языке удобные функции и связки с другими инструментами DevTools.

Например, чтобы вывести в консоль DOM-элемент, не обязательно использовать сложные селекторы. Вместо этого в рамках консоли реализован стэк выделенных в инспекторе элементов. Доступ к нему происходит через команду $N, где N — отступ от конца стэка. Таким образом, обращение к $0 в консоли вернет последний выбранный в инспекторе DOM-узел, $1 — предпоследний и так далее.

Использовать эту возможность удобно в связке с функциями над DOM-узлами:

— monitorEvents(object) — следит за событиями элемента;
— getEventListeners(object) — выводит в консоль список обработчиков событий элемента, из которого можно перейти к коду функции.

Вырисовывается простой сценарий:

1. Выделяем элементы в инспекторе.
2. Вызываем в консоли нужную команду, аргументом передаем $0.
3. Радуемся, как дети.

Многие разработчики удаляют из кода console.log() сразу по окончании отладки. Но некоторая ключевая функциональность требует постоянного логирования. В результате каждый разработчик сначала пишет отладочный код, а потом его удаляет.

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

// Конфиг UglifyJS  global_defs: {      DEBUG: false  }    // Где-то в коде приложения  if (DEBUG) {      console.log('Что-то важное');  }  


В примере выше DEBUG не просто будет равен false после сборки. UglifyJS поймет, что условие никогда не выполнится, и просто удалит его из кода.

Теперь можно использовать более сложные возможности вывода в консоль для разных типов данных. В примере с отладкой состояния вывод будет более компактным за счет console.groupCollapsed. Это используется в нашем проекте для отслеживания изменения URL:



Для массивов хорошо подходит console.table. Полный список вариантов оформления вывода находится здесь.

С высоты птичьего полета


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

Одна из долгожданных фич — отображение стэков вызовов прямо в диаграмме событий. По сути это объединяет классический Timeline с отчетом CPU Profiler. Такая диаграмма дает понимание, как приложение работает в динамике: последовательности вызовов, общее время выполнения функций, точки взаимодействия JavaScript с DOM. Даже когда необходимости в оптимизации нет, его можно использовать для изучения внутреннего устройства проекта.



Если интересен конкретный участок логики приложения, а событий в отчете слишком много, можно воспользоваться console.time. Помимо замера времени выполнения этот метод добавляет метку в Timeline.



Пример использования:

1. Записываем пользовательский сценарий.
2. Изучаем стэки вызовов.
3. По необходимости переходим к конкретной строчке кода прямо из Timeline.
4. Если информации слишком много, оборачиваем интересующий код в console.time и console.timeEnd.
5. Повторяем до полного понимания логики происходящего.

Заключение


При работе над большими проектами имеет смысл инвестировать время в удобство разработки. Часы, потраченные на изучение и адаптацию инструментов, экономят дни отладки и дают лучшее понимание работы проекта.

В этой статье описана только малая часть возможностей Chrome Developer Tools. В работе над 2ГИС Онлайн у нас возникают и более экзотические задачи, требующие постоянного изучения новых средств разработки. Более подробно об этих инструментах, а также о производительности приложений на JavaScript, я рассказывал на конференции FrontTalks.                    

Хитрости Chrome DevTools / Хабрахабр


Хитрости Chrome DevTools



Илья Григорик из компании Google собрал подборку малоизвестных функций Chrome DevTools, которые можно использовать для оптимизации производительности. Илья также упоминает несколько сторонних плагинов и библиотек, полезных для разработчика, и многочисленные другие хитрости: например, возможность дебаггинга iOS-приложений или кода, исполняемого на подключённом Android-устройстве.                    

среда, 30 сентября 2015 г.

Изменение или удаление платежной информации для идентификатора Apple ID в iTunes Store - Служба поддержки Apple


Изменение или удаление платежной информации для идентификатора Apple ID в iTunes Store

Apple ID — это персональная учетная запись, которую можно использовать для доступа к таким службам Apple, как App Store, iTunes Store, iCloud, iMessage, интернет-магазин Apple Online Store, FaceTime и многие другие. При изменении данных кредитной карты или адреса плательщика в iTunes Store вы также обновляете информацию для других служб, использующих ваш идентификатор Apple ID, таких как App Store и iCloud.

Использование устройства iPhone, iPad или iPod touch

  1. На экране «Домой» нажмите значок «Настройки».
  2. Выберите пункт «iTunes Store, App Store».
  3. Выберите свой идентификатор Apple ID. 
  4. Выберите пункт «Просмотреть Apple ID». Может потребоваться выполнить вход.
  5. Выберите пункт «Платежная информация». Если используется Семейный доступ, платежная информация может не отображаться. Выберите «Семейный доступ», чтобы просмотреть идентификатор Apple ID организатора семьи.
  6. Измените или удалите имеющуюся информацию. Чтобы удалить способ оплаты, выберите «Нет».
    Узнайте, что делать, если параметр «Нет» отсутствует или его невозможно выбрать. 
  7. Нажмите кнопку «Готово».

После изменения платежной информации iTunes Store временно блокирует на счету кредитной карты плату за авторизацию, чтобы проверить обновленные данные учетной записи.

понедельник, 28 сентября 2015 г.

Режим инкогнито в Chrome нарушает приватность пользователя | Threatpost | Новости информационной безопасности

РЕЖИМ ИНКОГНИТО В CHROME НАРУШАЕТ ПРИВАТНОСТЬ ПОЛЬЗОВАТЕЛЯ

Android-версия браузера Chrome в режиме инкогнито хранит данные о посещенных пользователем страницах, сообщает Softpedia.

Баг был найден пользователем Reddit с ником notarower. Свое открытие он сделал случайно, пытаясь временно отключить JavaScript в своем браузере.

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

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

В конце концов он сумел уничтожить записи, но только после того, как перешел на информационную страницу Android's App для Chrome и проделал там эту операцию. К сожалению, такой способ стирает вообще все настройки браузера (логины, куки, избранное). Однако, когда notarower на чистом браузере запустил режим инкогнито, он подтвердил свою теорию, что браузер и в этом режиме сохраняет некоторые сайты в историю.

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

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

К слову, в конце сентября в Chrome был выявлен еще один серьезный баг — в новой версии была обнаружена программная ошибка, приводящая к краху приложения при вводе определенных URL. Даже удержание курсора мыши над адресом на веб-странице или переход по ссылке из стороннего приложения способны вызвать закрытие всего браузера либо активной вкладки. Этот баг провоцирует фатальное исключение (SIGTRAP), а не обычную ошибку доступа к памяти, которая вызывается с помощью переполнения буфера, повреждения динамической области или схожими проблемами.



Sent from my iPhone

Чему научиться: 10 навыков, которые может освоить каждый - Лайфхакер


Чему научиться: 10 навыков, которые может освоить каждый

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

Сколько раз в различных обстоятельствах вы говорили себе: «Как было бы здорово, если бы я умел…» Но потом жизнь текла по привычному руслу, и вы забывали о своём желании приобрести полезный навык.

С огромным количеством знаний, которые доступны нам онлайн каждый день, единственная причина, почему вы до сих пор этого не сделали, — не задумывались об этом серьёзно. Может, пора это сделать?

10. Починить что-нибудь дома

Конечно, чтобы починить что-нибудь дома, не нужно каких-то особых умений — можно просто вызывать специалиста, и всё будет готово. Но в этом нет ни изобретательности, ни мастерства, ни тем более интереса.

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

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

Где этому научиться? Миллионы роликов на YouTube и Videojug к вашим услугам. Там вы найдёте множество видео о том, как отремонтировать что-то в доме или во дворе, как починить что-то из сантехники и электрики.

Для сложного ремонта вам по-прежнему нужен будет профессионал, но какие-то небольшие манипуляции вы вполне сможете сделать самостоятельно. В любом случае вы поймёте, что у вас всегда есть выбор — звать мастера или пытаться сделать самому.

9. Развить творческие навыки: рисование, иллюстрирование, фотография

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

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

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

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

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

Главное — уделяйте освоению выбранного навыка от 15 до 30 минут в день. Что бы вы ни решили изучать: рисование, создание иллюстраций в программе, фотографии, скульптуры из гамбургеров, разбейте изучение на много мелких частей и прорабатывайте каждую из этих частей каждый день.

Это отличный способ расслабиться и отдохнуть в конце дня, а часы вашей практики будут медленно, но верно прибавляться.

8. Научиться самообороне

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

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

7. Прокачаться в дизайне и развить чувство стиля

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

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

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

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

А вот статьи для тех, кто хочет обучиться веб-дизайну: как воздействовать через цвет и где учиться веб-дизайну онлайн.

6. Освоить любой предмет, который вы пропустили в университете

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

Что здорово в таком обучении — вас побуждает только своя мотивация. Никаких экзаменов, зачётов и нервов. Вы учитесь столько, столько хотите, а в награду просто становитесь немного умнее. Вот 50 ресурсов для бесплатного образования — там вы сможете найти множество полезных предметов.

5. Создавать и переделывать «железо»

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

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

Лучший способ обучиться этому — начать проект и познавать все премудрости в процессе работы над ним. Если вы не знаете, с чего начать, посмотрите здесь.

4. Играть на инструменте

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

3. Готовить как шеф-повар

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

Пробуйте разные рецепты, развивайте «шестое чувство блюда», подписывайтесь на кулинарные YouTube- каналы и просто получайте удовольствие от приготовления.

Я, например, люблю приложение «Афиша-Еда» — там очень много новых рецептов, которые можно сохранять себе. Притом не обязательно готовить чётко по рецепту, можно фантазировать, добавлять другие ингредиенты и пропускать то, чего нет в ближайшем магазине.

2. Выучить иностранный язык

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

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

1. Сделать сайт, создать приложение или просто научиться кодить

Для тех, кто никогда не занимался программированием, но всегда хотел попробовать, есть множество полезных ресурсов. Вот 30 сайтов для желающих научиться кодить с нуля. Здесь есть и сайты с платными курсами и учителями, и ресурсы для бесплатного изучения разных языков программирования.

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

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

А какие навыки хотите освоить вы?

понедельник, 21 сентября 2015 г.

Я учусь программировать: 5 игровых подходов к коду — Look At Me — MAG — поток «Блог Антона Мухатаева»


Я учусь программировать: 5 игровых подходов к коду

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

fbvkpn

Всё больше людей вокруг говорят, что хотят научиться программировать, но ничего для этого не делают. Я понимаю их. Сначала всегда трудно, а в случае с программированием тем более. На первых порах, когда видишь перед собой на экране вал непонятного кода, хочется сразу всё закрыть и заняться чем-нибудь ещё. Но последние 5–10 лет обучение коду не стояло на месте, и сейчас первые шаги делать намного проще: можно даже не браться за конкретный язык, а начать с азов мышления, законов и общих понятий программирования. В этом помогают обучающие игры и простые интерактивные курсы по разработке игр — их сейчас полно. Я отобрал лучшие из тех, что встречал, но наверняка какие-то упустил, поэтому смело делитесь ссылками в комментариях.

CodeCombat

Играть

fbvkpn

Отличная многопользовательская веб-игра. Как и остальные в этом списке, рассчитана на детей и подростков, но подойдёт и взрослым, которые ничего не понимают в коде.

Hopscotch

Играть

fbvkpn

Заход с другой стороны, основанный на обучающем языке Scratch и блоковом подходе. Вы разрабатываете свои версии популярных игр и тем самым познаёте основы программирования.

Game Maven

Играть

fbvkpn

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

Robozzle

Играть

fbvkpn

Игра учит мыслить алгоритмически: вы пишите для робота программу, которая помогает ему решить пазл.

The Doctor and the Dalek

Играть

fbvkpn

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

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