Pull to refresh
  • by relevance
  • by date
  • by rating

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

Abnormal programming *Debugging *

Мотивация


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

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

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

Website development *CSS *Google Chrome HTML *
Translation
Это реальная история, случившаяся с нашим сайтом во время празднования Дня Благодарения.

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

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

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

Wolfram Research corporate blog IT systems testing *Programming *Debugging *
Translation

Перевод поста Стивена Вольфрама (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 &]]
Читать дальше →
Total votes 14: ↑13 and ↓1 +12
Views 6.3K
Comments 3

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

uKit Group corporate blog JavaScript *System Analysis and Design *Facebook API *Twitter API *


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

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

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

Читать дальше →
Total votes 20: ↑20 and ↓0 +20
Views 6.9K
Comments 5

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

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



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

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


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

Console.mihai();

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

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

И тут за дело взялся Михай.
Читать дальше →
Total votes 119: ↑117 and ↓2 +115
Views 26K
Comments 13

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

Skillbox corporate blog Programming *Debugging *Studying in IT


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

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

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

DataArt corporate blog Development for iOS *Development of mobile applications *Mobile applications testing *
Tutorial


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

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

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

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

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

Skillbox corporate blog Programming *Debugging *Studying in IT


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

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

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

Skillbox corporate blog JavaScript *Programming *Debugging *Studying in IT
image

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

Давайте рассмотрим команды, которые действительно способны упростить жизнь любому программисту.
Читать дальше →
Total votes 60: ↑54 and ↓6 +48
Views 24K
Comments 11

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

Productivity Inside corporate blog Development Management *Studying in IT
Translation


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

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

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

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

Яндекс corporate blog Sport programming *Entertaining tasks Development of mobile applications *Development for Android *


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

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

Google Chrome Development for Windows *
Translation

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

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

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

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

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

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

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


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

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

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


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

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

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


Читать дальше →
Total votes 43: ↑42 and ↓1 +41
Views 8.6K
Comments 17

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

Open source *Python *Debugging *DevOps *
Sandbox

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

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

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

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

Вариант программы для отладки Python
Total votes 11: ↑7 and ↓4 +3
Views 6.1K
Comments 25

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

Нетология corporate blog Website development *JavaScript *Google Chrome Studying in IT
Translation

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

Читать далее
Total votes 10: ↑5 and ↓5 0
Views 7.1K
Comments 5