Как стать автором
Обновить

Реверс-инжинирим игру Hogs of War, часть 1

Ненормальное программирование *Отладка *

Мотивация


В связи с испорченным местными властями отпуском приходится занимать свое время чем-нибудь интересным. Например, подлечить старую игрушку, косяки которой не позволяют нормально поиграть на современных ОС, либо поменять несколько байтов для получения разных extra-возможностей just for fun. Подопытным будет игра из далекого 2000 года под названием Hogs of War. Если кто не знает, то это turn-based стратегия, где вам дается команда хрюшек, с помощью которых вы должны ни много ни мало, завоевать мир. В процессе игры в зависимости от результатов можно модифицировать каждую хрюшку, например повысив её в звании. В 2009 Atari объявила о продолжении игры в виде разработки HOW2, но по последним данным проект свернули из-за недостатка финансирования. Ничего приятного.

Цель этой части: исправление бага, при котором блокируется весь рабочий стол, если произошел appcrash по какой-либо причине и подготовка приложения для работы в экранном режиме для упрощения отладки.
Читать дальше →
Всего голосов 42: ↑32 и ↓10 +22
Просмотры 5.8K
Комментарии 19

Баг в CSS Chrome, разрушивший наш сайт

Разработка веб-сайтов *CSS *Google Chrome HTML *
Перевод
Это реальная история, случившаяся с нашим сайтом во время празднования Дня Благодарения.

Сайт перестал работать внезапно, ничего не предвещало такого оборота.

Поначалу я подумал, что проблема в нашем провайдере хостинга, потому что с ним уже случались проблемы ранее. Наш сайт уже трижды успевал «падать» по разным причинам, и это выглядело как типичная проблема с их стороны.
Читать дальше →
Всего голосов 50: ↑45 и ↓5 +40
Просмотры 68K
Комментарии 47

Поиск ошибок в облаке с научной точки зрения: нежданное приключение CEO

Блог компании Wolfram Research Тестирование IT-систем *Программирование *Отладка *
Перевод

Перевод поста Стивена Вольфрама (Stephen Wolfram) «Scientific Bug Hunting in the Cloud: An Unexpected CEO Adventure».
Выражаю огромную благодарность Кириллу Гузенко за помощь в переводе.


Wolfram Cloud должен быть совершенным


Wolfram Cloud в самом скором времени выйдет из стадии бета-тестирования, в данный момент я трачу очень много времени на то, чтобы сделать эту систему как можно лучше (и, стоит заметить, получается действительно здорово!). В основном я занимаюсь высокоуровневыми функциями и стратегией. Но мне нравится контролировать процесс на всех уровнях, ведь, как CEO, я полностью отвечаю за все, что происходит в моей компании. И вот в начале марта я оказался погруженным в то, о чём никак не мог догадываться ранее.

Собственно, вот о чем речь. Как серьезная производственная система, которую многие люди будут использовать в том числе и для бизнеса, Wolfram Cloud должен работать как можно быстрее. Показатели говорили о том, что скорость достаточно хороша, но чисто субъективно чувствовалось, что что-то не так. Иногда всё было действительно быстро, но иногда казалось, что все работает слишком медленно.

В нашей команде есть отличные программисты, однако шли месяцы, и какие-бы то ни было изменений не ощущалось. А тем временем мы успели выпустить Wolfram Data Drop (см. статью на Хабрахабре «Wolfram Data Drop — новый сервис Wolfram Research»). Так что я подумал, почему бы мне самому не провести несколько тестов, возможно, и собрать немного информации в наш новый Wolfram Data Drop?

Существенное преимущество Wolfram Language заключается в том, насколько он хорош для занятых людей: даже если у Вас есть время только чтобы напечатать всего несколько строк кода (см. статью на Хабрахабре "Компания Wolfram Research открыла сервис Tweet-a-Program: интересных программ на языке Wolfram Language, длина которых не превышает 140 символов"), Вы сможете получить что-то действительно полезное. И, в данном случае, мне достаточно было просмотреть три строчки кода, чтобы найти проблему.

Сперва я развернул web API для простой программы на Wolfram Language в Wolfram Cloud:

In[1]:= CloudDeploy[APIFunction[{}, 1 &]]
Читать дальше →
Всего голосов 14: ↑13 и ↓1 +12
Просмотры 6.3K
Комментарии 3

Over 9000: неочевидные сложности работы со счетчиками социальных кнопок (+ задачка)

Блог компании uKit Group JavaScript *Анализ и проектирование систем *Facebook API *Twitter API *


Одна из наиболее востребованных функций социальных кнопок «поделиться» — это счетчик совершенных действий. Малое число лайков и шеров может говорить* о «некачественности» материала; большие числа, наоборот, служат своего рода социальным доказательством и заставляют других делиться контентом.

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

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

Читать дальше →
Всего голосов 20: ↑20 и ↓0 +20
Просмотры 7K
Комментарии 5

11 советов, которые помогут сэкономить время при отладке программ

Блог компании PVS-Studio Программирование *Visual Studio *
Перевод
Программирование — это не только когда пишешь код, запускаешь его и удовлетворенно наблюдаешь за его безупречной работой, ведь зачастую он работает совсем не так, как мы рассчитываем! Возникает необходимость в эффективной отладке приложений, а это, оказывается, целое искусство! В данной статье я привожу свой собственный список советов, которые, как я надеюсь, помогут вам в отладке нативного кода.



Оригинальная статья была написана Bartlomiej Filipek и опубликована в его блоге.

Вспомогательные средства


Каждый программист должен знать, как запускать отладчик, устанавливать контрольные точки, возобновлять исполнение кода, выполнять вход и выход из функций (используя клавиатуру!). Вот несколько простейших советов по облегчению процесса отладки на основе базовых приемов.
Читать дальше →
Всего голосов 35: ↑31 и ↓4 +27
Просмотры 21K
Комментарии 4

Console.mihai();

Биографии гиков IT-компании
Разработчики из Mozilla почтили память одного из коллег, который внёс огромный вклад в разработку инструментов DevTools.

Румынский программист Михай Шукан (Mihai Șucan) исправил 1919 багов в Firefox. В середине 2010 года, когда он приступил к работе, код консоли представлял собой полную мешанину, которую никто вообще не хотел трогать, вспоминает Джо Уолкер (Joe Walker), один из координаторов проекта DevTools в Mozilla. Там были баги, на которые каждый смотрел и думал: чтобы всё грамотно исправить, потребуется пара недель. Лучше взять что-то другое. Такие баги оставляли кому-нибудь другому.

И тут за дело взялся Михай.
Читать дальше →
Всего голосов 119: ↑117 и ↓2 +115
Просмотры 26K
Комментарии 13

Улучшаем навыки отладки ПО — несколько советов

Блог компании Skillbox Программирование *Отладка *Учебный процесс в IT


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

Все мы пишем код, который иногда, к сожалению, отказывается работать. Это нормально, просто часть процесса разработки. Если программа выдает ошибку, иногда вы просто не знаете, что делать дальше и как ее исправить. Не переживайте — все проблемы решаются, а ошибки бывают даже у самых опытных кодеров.
Читать дальше →
Всего голосов 18: ↑14 и ↓4 +10
Просмотры 5.9K
Комментарии 3

iOS runtime mobile exploration with Objection, или Хакаем собственное приложение

Блог компании DataArt Разработка под iOS *Разработка мобильных приложений *Тестирование мобильных приложений *
Tutorial


Автор: Андрей Батутин, Senior iOS Developer, DataArt.

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

Иногда причиной были мои косяки. Иногда — моих коллег. А иногда — даже самого Apple Inc.

Но самые убийственные сценарии были связаны с багами, которые воспроизводились только на аппсторовских/релизных сборках. Ничто так не ставит в тупик и не заставляет выть перед макбуком, как невозможность подключить дебагер к собственному приложению и посмотреть, что же там происходит.
Читать дальше →
Всего голосов 17: ↑16 и ↓1 +15
Просмотры 5.8K
Комментарии 12

Пять простых правил отладки для начинающих программистов

Блог компании Skillbox Программирование *Отладка *Учебный процесс в IT


От переводчика: Джордж Алан Хеймел в своей статье делится собственным опытом и говорит о том, чем должен руководствоваться разработчик в процессе отладки.

Современный инструментарий разработчика весьма обширен, так что выбрать есть из чего — инструментов отладки. Многие из них автоматизированы, но, к сожалению, пустить дебагинг на самотек не получится — ручной работы все еще много. Иногда кажется, что проблемы просто не должно быть, это невозможно, все должно работать. Но не работает. Чтобы не тратить лишние нервные клетки и время, я вывел для себя простые правила отладки, которыми и пользуюсь. Думаю, кто-то может посчитать их спорными. Тем не менее, мне они помогают.
Читать дальше →
Всего голосов 19: ↑11 и ↓8 +3
Просмотры 14K
Комментарии 10

10 консольных команд, которые помогут дебажить JavaScript-код like a PRO

Блог компании Skillbox JavaScript *Программирование *Отладка *Учебный процесс в IT
image

Перевели статью Амита Соланки по отладке JavaScript-кода при помощи консольных команд. По словам автора, эти команды помогут значительно повысить производительность труда программиста при поиске багов и сэкономят кучу времени.

Давайте рассмотрим команды, которые действительно способны упростить жизнь любому программисту.
Читать дальше →
Всего голосов 60: ↑54 и ↓6 +48
Просмотры 25K
Комментарии 11

Не соглашайтесь разрабатывать то, чего не понимаете

Блог компании Productivity Inside Управление разработкой *Учебный процесс в IT
Перевод


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

Мысль, которую я хочу выразить, сводится к тому, что качество кода (и конечного продукта) тесно связано с тем, насколько люди, которые занимаются проектированием и пишут код, осознают, что именно они делают.

Вы, возможно, сейчас думаете: «Спасибо, кэп. Конечно, неплохо бы понимать, что вообще пишешь. Иначе с тем же успехом можно нанять группу обезьян, чтоб они молотили по произвольным клавишам, и на этом успокоиться». И вы совершенно правы. Соответственно, я принимаю как данность: вы осознаете, что иметь общее представление о том, что делаешь, необходимо. Это можно назвать нулевым уровнем понимания, и его мы не будем разбирать подробно. Подробно мы будем разбирать, что именно нужно понимать и как это сказывается на решениях, которые вы принимаете каждый день. Если бы я знал эти вещи заранее, это избавило бы меня от массы потраченного впустую времени и сомнительного кода.
Читать дальше →
Всего голосов 21: ↑19 и ↓2 +17
Просмотры 9.2K
Комментарии 25

Починить, хакнуть, раскопать. Решаем онлайн-квест Droid Mission

Блог компании Яндекс Спортивное программирование *Занимательные задачки Разработка мобильных приложений *Разработка под Android *


В прошлом году мы провели онлайн-квест для мобильных разработчиков — Droid Mission. В течение месяца участники должны были решить как можно больше задач в трёх направлениях: fix it! (поиск ошибок и исследование кода), hack it! (реверс-инжиниринг) и dig it! (изучение особенностей Android). Всего в квесте было 23 задачи — они очень похожи на те, с которыми сталкиваются специалисты по Android в реальной работе. В посте мы покажем все условия и правильные решения.
Читать дальше →
Всего голосов 13: ↑12 и ↓1 +11
Просмотры 4.9K
Комментарии 5

Об утечках GDI и о важности удачи

Google Chrome Разработка под Windows *
Перевод

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

6 июня, в тот же день, когда я осознал свою ошибку в интерпретации данных вылетов, баг был помечен как ReleaseBlock-Stable. Это означало, что мы не сможем выпустить новую версию Chrome для большинства пользователей, пока не разберёмся, что происходит.

Вылет происходит, потому что у нас заканчивались объекты GDI (Graphics Device Interface), но мы не знали, какого типа эти объекты GDI, диагностические данные не давали никаких подсказок о том, где возникает проблема, и мы не могли её воссоздать.

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

Какая ирония. Пока я искал изменения и исследовал отчёты о сбоях, пытаясь понять, что же могло заставлять процесс браузера Chrome вызывать утечку объектов GDI, количество объектов GDI в моём браузере неумолимо стремилось вверх, и к утру 8 июня превзошло волшебное число — 10 000. В этот момент одна из операций выделения памяти под объект GDI завершилась ошибкой и мы намеренно обрушили браузер. Это была невероятная удача.
Читать дальше →
Всего голосов 19: ↑18 и ↓1 +17
Просмотры 2.5K
Комментарии 1

Устранение бага в Factorio: не ошибается тот, кто ничего не делает

Разработка игр *Отладка *Дизайн игр *Игры и игровые консоли
Перевод
В недавних примечаниях к патчам была строка «Исправлена ошибка создания земли под игроком при создании земли в другом месте». Подробнее об этом можно прочитать здесь. Некоторых пользователей Reddit заинтересовало, как вообще мог возникнуть такой баг, они попросили объяснить более развёрнуто и даже предложили использовать эту информацию для нашего блога Factorio Friday Facts. Я подумал: «Да, если я потрачу время на написание этого текста, нам стоит взять его в FFF, чтобы никому другому не пришлось писать о чём-то другом».


Баг с созданием земли, отчёт о котором был отправлен после выпуска версии 0.18.21.

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

Переходы между тайлами… снова


В первые пару лет разработки Factorio вода отрисовывала вокруг тайлов земли переходные тайлы. Графика переходных тайлов занимала у тайлов земли слишком много пространства, поэтому было невозможно нарисовать один тайл земли, окружённый водой, как и мост шириной в один тайл, проходящий по воде. Кроме того, переходная графика сочеталась только тайлами травы. Для учёта этих ограничений генератор карт был дополнен этапом коррекции, цель которого заключалась в том, чтобы рельеф можно было отрисовывать без графических артефактов.
Всего голосов 16: ↑15 и ↓1 +14
Просмотры 9.2K
Комментарии 2

Как Иван ошибку в бэкенде локализовывал

Тестирование IT-систем **nix *Тестирование веб-сервисов *
В комментариях к одной из моих статей про базовые команды Linux shell для тестировщиков справедливо заметили, что в ней не было указано применение команд в процессе тестирования. Я подумал, что лучше поздно, чем никогда, поэтому решил рассказать историю Backend QA-инженера Вани, который столкнулся с неожиданным поведением сервиса и попытался разобраться, где именно случилась ошибка.


Читать дальше →
Всего голосов 43: ↑42 и ↓1 +41
Просмотры 8.8K
Комментарии 17

Многоконсольный вывод для Python

Open source *Python *Отладка *DevOps *
Из песочницы

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

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

Для этого используют обычный print() но по стандарту ограничен одной консолью, или loggin() но его нужно относительно дольше настраивать, чем проект console-debugger, по причине того что нужно указывать файл, стиль вывода даны в файл, рейтинг обработки, в ручную запускать слежение за файлом, в ручную закрывать слежение за файлом, когда вам больше не нужен обработчик.

Я понимаю плюсы лорнирования но они не подходят для дебаггинга ...

Вариант программы для отладки Python
Всего голосов 11: ↑7 и ↓4 +3
Просмотры 6.4K
Комментарии 25

9 фишек инструментов разработчика Chrome

Блог компании Нетология Разработка веб-сайтов *JavaScript *Google Chrome Учебный процесс в IT
Перевод

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

Читать далее
Всего голосов 10: ↑5 и ↓5 0
Просмотры 7.5K
Комментарии 5

Пишите плохой код и не стыдитесь этого

Блог компании Productivity Inside Учебный процесс в IT
Перевод
Писать хороший код я умею. Обычно это предполагает, что нужно потратить немного больше времени здесь и сейчас во имя некоего более совершенного миропорядка в будущем. Но здесь мы исходим из предпосылки, что нам известно, чего ждать от будущего. А в разработке будущее обычно прогнозируется с трудом.

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

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

Любые препятствия плохо влияют на продолжительность цикла. Они лишают меня возможности превращать неопределенность в определенность – а в этом и состоит суть обучения. Быстрое обучение формирует наиболее устойчивую ценность, оно выступает своего рода коэффициентом, на который умножается качество кода и архитектуры впоследствии. Есть такая поговорка «Писать значит переписывать», перелагая ее на код, можно сказать: «Писать код – значит проводить рефакторинг».

Исходя из этого, вот несколько причин, почему не нужно бояться писать паршивый код. Точнее сказать, почему не нужно бояться писать больше паршивого кода.
Читать дальше →
Всего голосов 28: ↑16 и ↓12 +4
Просмотры 9.1K
Комментарии 26

Видео докладов потока Big Data. Конференция BeeTech 2.0

Блог компании Beeline Казахстан Big Data *Машинное обучение *Конференции Искусственный интеллект

Привет! Мы продолжаем публиковать видео с конференции BeeTech 2.0.  Поток Engineering тут, Management тут

В этой статье я поделюсь выступлениями спикеров потока Big Data. Вот ссылка на весь поток, внутри статьи ссылки на каждое видео с его описанием + презентация спикера. 

Посмотреть видео
Всего голосов 7: ↑7 и ↓0 +7
Просмотры 609
Комментарии 0