• ↓
  • ↑
  • ⇑
 
23:59 

640 килобайт хватит всем

Когда я учился на первом курсе, у нас был курс "Информатика". Там мы проходили Паскаль, который я ненавижу, и что-то ещё. И я, и ssvda его знали, поэтому мы решили сдавать экзамен досрочно.

Приходим к преподу. Рассказываем какие-то темы. Приводим примеры.

Потом препод говорит: Так, вам, я так понимаю, ближе Linux (показывает на ssvda), а вам (показывает на меня) -- DOS.

@темы: Случай из жизни

23:44 

А. и Б. Стругацкие // Страна багровых туч, Путь на Альматею, Стажёры

В современной космонавтике перспектив практически нет. Самое крупное достижение -- высадка на Луну. Она была произведена уже около 50 лет назад. И спустя всего лишь около 10 лет после начала космической эры.

Тут мы переходим к космической фантастике Стругацких.

Ох, давно я их не читал.

Есть писатели, у которых я прочитал всего 1-2 произведения, но я их уже люблю. Среди фантастов это, конечно же, Лем и Брэдбери. Среди не-фантастов это, вы будете смеяться, Достоевский. Стругацких я читал немного больше.

В "Стране багровых туч" в первую очередь удивительно то, что она была написана ещё до запуска первого спутника. Начало повествования выглядит довольно нудно и наивно. Хотя не так наивно, как фантастика Беляева. А потом начинается вторая часть. И вот тут книжка берёт за горло. Давно такого не было, чтобы после работы вместо сидения в интернете я сидел за книжкой, продолжая чтение в транспорте. Да я блин сам захотел стать космонавтом и колонизировать другие планеты. Что происходило с детьми в 60-е годы от этой книжки -- не представляю.

Тем не менее, один момент меня глубоко напряг. Когда они обсуждают, что они сделают с Венерой ради блага человечества. Обсуждают с гордостью. Как они вырубят леса. Вытравят зверей. И тому подобное. Это было антиэкологично. И неприятно для чтения. Полная противоположность Аватару.

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

Стажёры. В Стажёрах тема экологичности подаётся немного с другого бока. Кроме того, в данном произведении появляются философские и социально-фантастические нотки, характерные для других произведений Стругацких. Данное произведение состоит из 5-10 рассказиков об одном и том же длинном полёте Быкова. Тут меня поражает работа человеческой мысли. В нескольких местах люди оказываются перед ситуацией странной, непонятной. И начинают строить гипотезы о том, почему это происходит. Делать выводы. Вот этот процесс мышления показан весьма впечатляюще.

Все произведения об’единяют общие персонажи, в первую очередь это Быков и Юрковский. И разделяют эти произведения по внутреннему времени лет тридцать. Так что мы можем наблюдать персонажей в разные этапы их развития, пока персонажи наблюдают атмосферы разных планет.

Чёрт возьми, да я так впечатлился, что сел читать "Марсианина".

@темы: Книги

23:59 

Как не надо обрабатывать ошибки

Если у вас обработка ошибок сделана через коды ошибок, то должны соблюдаться следующие правила:
1а. Код, возвращаемый из каждой ветки управления, должен быть уникальным.
ЛИБО
1б. При выводе сообщения об ошибке должен указываться не только код, но и место возникновения ошибки (файл с исходным текстом, строка; в си/пхп для этого есть __FILE__, __LINE__, а в пхп ещё и __FUNCTION__).

2а. Сообщения об ошибках должны быть уникальными.
ЛИБО
2б. В сообщения должен быть включён код ошибки.

Я же встретил следующую вещь:
switch(nError)
{
//...
case 100:
case 101:
case 102:
AfxMessageBox("Разгерметизация скафандра!");
break;
//...
}


А ошибки 100, 101 и 102 выпадали из десяти разных мест.

После этого разработчикам становится понятно, в чём дело, но становится непонятно, куда копать.

@темы: Говнокод, Программирование

22:51 

Mininim (Advanced Prince of Persia Engine)

oitofelix.github.io/mininim/

Вышел он ещё в феврале (2016), в марте выпустили обновление с некоторыми багфиксами.

Плюс в том, что можно поиграть в оригинального Принца Персии на современных платформах без шаманства с DOSBox и прочим.

И я наконец поиграл.

Что для меня Принц Персии (v1.3)? Это почти детство. Играл я в него в 9-10 классе, это где-то 2004 год. Это было на уроках информатики, после того, как я доделывал задание на урок. Чтобы на втором уровне сделать прыжок с разбега, я звал своего одноклассника, который умел делать это лучше, чем я. Потом, правда, оказалось, что можно было сделать обычный прыжок и зацепиться. Пройти первую половину третьего уровня -- это было очень сложно, а первый враг на восьмом казался непобедимым. Играло полкласса. Большинство -- с читами. Без читов забирался я максимум до четвёртого-пятого.

Потом я догадался, как можно было пройти первый уровень, не бегая за 5 километров за мечом. И это сработало! И идея с тем, что со скелетом на третьем можно поменяться местами и свалить -- тоже сработала!

В общих чертах я помню все уровни (почему-то кроме девятого...), а первые три -- помню очень подробно. Номер уровня для меня имеет нарицательные свойства. То есть, это не третий уровень, это Третий уровень. И я сразу понимаю, что это за уровень.

Что же теперь?

Третий уровень прошёлся вообще без проблем (зато кучу проблем доставил пятый). Первый противник на восьмом оказался очень простым. Чаще я умирал от гильотин и шипов. Джаффар лёг с первого раза. Играл без читов, естественно. Но с сохранениями (в 1.3 они тоже были). В конце осталось 11 минут (из 60). В чём же причина того, что мне стало настолько проще играть?
Во-первых, я стал круче, лол.
Во-вторых, свою роль сыграло то, что я помнил уровни.
И в-третьих в данной модификации есть несколько элементов, которые существенно упрощают игру.

В чём же отличия данной версии от Prince of Persia for DOS 1.3?

1) Меч можно достать в любой момент (не по шифту, а по энтеру). Это делает проще некоторые места, где противник стоит близко к краю экрана, что затрудняет бой с ним, т.к. если просто зайти на экран, сразу умрёшь, не успев достать меч.
2) Противники сами приходят с соседних экранов, если вы рядом. Это делает игру немного другой, хотя не делает её однозначно проще или сложнее.
3) При прыжке вверх на месте Принц не сдвигается в сторону на 1 пиксель. Это делает возможным сбивание одноразовых плиток на потолке без спрыгивания вниз. Это сильно упрощает игру в двух или трёх местах.
4) Сложилось впечатление, что разных глитчей, когда можно зацепиться за плиту, за которую зацепиться по идее нельзя, а также можно попасть под незадевающие тебя шипы, стало больше. Это тоже немного меняет игру без однозначного упрощения/усложнения.
5) Нету Hall of Fame. После титров у меня стартовал заново двенадцатый уровень, причём почему-то первая половина (при этом чекпоинт в середине двенадцатого уровня есть!).
6) Нету чекпоинта в середине третьего уровня. В 2004 году это меня бы очень опечалило.
7) Ясное дело, нету проверки лицензионности, проводящейся путём выпивания поушнов с буквами из мануала.

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

P.S. Оказывается, слияние с тенью на двенадцатом уровне даёт дополнительную жизнь. Почему? Это та жизнь, которую тень выпила на пятом!

@темы: Игры

22:13 

Pixel Dungeon Remix: Королева Пауков, Лич, Некромант, Предметы Хаоса

(развернуть список моих статей по Pixel Dungeon и форкам)

Я не играл в пиксель дужеон ремикс года полтора (с версии 18.4). За это время в ремиксе всё некисло так изменилось. В целом стало чуть-чуть проще (в первую очередь из-за двукратного увеличения ресурсов в первой половине игры -- до Тэнгу) и гораздо интереснее. Ниже я опишу то, что обнаружил. Актуально на версию 25.5 бета.

Сначала смешные картиночки (кликабельно):




Вы видите главного героя?
А он есть.



Стенка на стенку.



Последний ход перед смертью.



А теперь -- барбекю.



Капли росы построились свиньёй.



О пользе кольца уклонения на +6.


Основные нововведения:
1. В дунжеоне есть три новые локации (и прямо сейчас идёт открытый бета-тест четвёртой, про неё пока не пишу).
а) Паучье гнездо начинается на 5 уровне. Ответвление. 5 уровней.
б) "Некрополь" начинается на 7 уровне. Ответвление. 5 уровней.
в) дунжеон продлевается на 5 уровней после Демон Холлз ("палаты демонов"? не помню как в русском перевели). Дальше идёт очень жестокое "Гнездо демонов". +1 магазин, +1 квест.
2. Три новых локации -- три новых босса! Королева пауков в паучьем гнезде, Лич в Некрополе. На 25 уровне вместо Йог-Дзевы тусуется Владыка Теней, а Йог-Дзева переехал на 31-й.
3. Новая комната -- "оружейная". Там много стрел, дротиков и прочего. И бочек. Бочки отдельная тема. По уровню распиханы, можно ограниченно их перемещать. Если кинуть в них чем угодно, взрываются и горят (когда я играю за Эльфа, для этих целей я больше всего люблю использовать Том Мастерства, т.к. он не горит). Можно их использовать тактически.
4. Предметы хаоса -- саморазвиваются и самодеградируют
5. Новый класс -- Некромант.
6. Питомцы. При помощи нескольких механизмов можно получить врага к себе в питомцы. Он будет сражаться за вас. Некромант может генерировать питомцев из ничего.
7. Уровни сложности -- лёгкий, обычный с сохранениями, обычный и эксперт.

(новые советы по новым боссам)

(новые локации)

(предметы Хаоса)

(некромант)

(о питомцах)

(об уровнях сложности)

@темы: Статьи, NetHack

23:53 

Добровольно-принудительно


Необязательная галочка, которую нельзя сбросить! И это не вижал студио экспресс.

@темы: Программирование, Программы

23:51 

Он первый начал!

Допустим, кто-нибудь накосячил. Серьёзно. Его вышестоящее руководство (или родители :D) начинают ругать. Что же он может сделать? Оправдываться, например. Или сказать:

-- Больше не повторится.

Это звучит хорошо. Убедительно.

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

@темы: Восприятие, Мысли

23:59 

Не туда, часть 4

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

Коллега по имени, допустим, Петя, задолбался. Говорит -- Ладно, я попозже зайду... и начал уходить. Уже полкомнаты прошёл!

Я решил над ним приколоться. Кричу ему -- Петя, Петя! Иди сюда скорее! (хотя смотреть было пока не на что)

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

У нас в отделе есть ещё один Петя.

Он как услышал, сразу прибежал: "Где, где?"

@темы: Случай из жизни

23:58 

Untitled [461]

Подумал, что сглаживание и сглаз -- однокоренные.

@темы: Восприятие, Мысли, Тухлые идеи

23:59 

Untitled [460]

Коллега сделал схему для подключения к микроконтроллеру. Со светодиодом. Подключаю -- светодиод сгорает.

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

Я поясняю: "горит" в смысле "burn", а не "light".


***

С мультиметром творятся удивительные чудеса. Он меряет напряжение в диапазоне от -3 до 3 вольт, а если подать 5 вольт (проверяется другим мультиметром), показывает ноль.

@темы: Случай из жизни, Электроника

23:59 

Кто все эти люди?

В Pixel Dungeon Remix добавили новый свиток -- свиток проклятья. Он проклинает все надетые на игрока вещи, так что тот не может их снять (зачарование, слава богу, с них не слетает).

В связи с этим я стал снимать с себя все вещи, прежде чем читать незнакомый свиток. Но об'ём инвентаря в Pixel Dungeon ограничен 24 предметами. 20 на обычные предметы и 4 -- на надетые. Если предмет снять, он попадает в обычные, а слот для надетого становится пустым.

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

Это оказался свиток телепортации!

И я оказался на другом конце уровня без брони и оружия...

@темы: NetHack

23:30 

Ну что, как поплавали?

Видел в метро на эскалаторе мужика в водолазной маске. Ехал вверх.

@темы: Случай из жизни, Общественный транспорт

23:58 

О лицензиях

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

Или не использовать библиотеки, которые под ней распространяются.

По-настоящему свободная лиценизя только одна. Public Domain.

@темы: Мысли, Программирование

23:52 

Life is Strange (2015)

Вчера я видела оленя...
(С) ГлаДОС из Портал 2

Our reports showed a massive anomaly
in the timespace continuum.
Timelines jumping left and right,
stopping and starting...
(C) Sans из Undertale


Это -- интерактивное кино. Детектив. С возможностью отмотки времени назад. Ничего особенного в этой возможности бы не было, если бы не два дополнения:
1) Положение главной героини в пространстве остаётся неизменным при перемотке,
2) Предметы, которые она добыла, остаются при ней.

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

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

Играю я за девушку со странным именем Максина. Изначально она у меня вызывала неприязнь. Это э... педовка? хипстерша? с ОБВМ и ТКП. На уроке трясущимися руками делает селфи на поляроид. Над ней ржут. Выходит на переменку, надевает наушники и отключается от общества. Социофобия. Но потом мне дают управление (хотя не настолько свободное, как я хотела бы) и дальше я уже сживаюсь с ней. Кроме того, она становится всё круче и круче, что может вызвать только положительное отношение.

"Вы полили цветы"
"У ваших действий будут последствия"

Вот тут я испугалась...

Данная игра вызвала у меня ассоциацию с целым рядом игр. Обычно ассоциации у меня возникают только с парой-тройкой, а тут целая куча: Farenheit, Silent Hill, Master Reboot, The Path, Ib (которую я прошла, но отзыв ещё не написала), Ever17 (!), To the Moon, Max Payne.

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

Авторам перед созданием игры следовало ознакомиться с таким жанром, как визуальные новеллы. Тогда бы игра могла получиться гораздо, гораздо круче. И уж что точно следовало им взять от визуальных новелл -- так это возможность проматывать ВСЕ кат-сцены, а не только уже виденные. Или сделать глобальное сохранение просмотренных кат-сцен, чтобы если начать новую игру, можно сразу было проматывать то, что видел в других играх.

А теперь о таком явлении, как фотография. Эта игра хорошо показывает, что надо ловить момент и ракурс, чтобы снять что-нибудь интересненькое, хотя фотографии Макс, в основном, меня не впечатляют. Я не фотограф. Но иногда я всё же вижу какие-то вещи, которые можно снять и будет круто. Но вижу я их очень редко и плохо. А даже если вижу, могу не сфоткать по каким-либо причинам (лень, холодно руки из карманов доставать). И тут, мне кажется, действительно надо ориентироваться на мистера Джефферсона, который сказал -- always take the shot.

(спойлеры)

@темы: Игры

23:58 

Езжай за этой машиной

Я опоздал на автобус. Но за ним шёл другой. Он мне не подходил, но часть маршрута у него совпадала. И, кроме того, он шёл позже, чем должен был идти по расписанию. То есть, опаздывал сам.

Я сел на него. Через 3 остановки он обогнал тот, на который я опоздал. Я вышел и пересел! Очень классное ощущение.

@темы: Общественный транспорт

23:51 

Untitled [459]

Самый надёжный способ сохранить пароль в тайне -- это забыть его.

@темы: Мысли

23:59 

Тупоконечники

Ошибка в документации. Написано, что устройство должно в качестве конца сообщения присылать сигнатуру 0xA5A4A3A2. И особо указано, что менять порядок байт запрещается!

Хорошо, что приведён пример пакета. В пакете указано:
байт 60: 0xA5
байт 61: 0xA4
байт 62: 0xA3
байт 63: 0xA2

Однако и устройство и контроллер используют обратный порядок байт (это известно по описанию некоторых команд). То есть, с обоих точек зрения это число 0xA2A3A4A5. А я думаю, почему это оно не реагирует.

@темы: Программирование

23:59 

Ещё про упаковку

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

Сначала несколько важных замечаний:
  • Встретил я указанную проблему в компиляторе GCC под ARM.
  • По документации результат #pragma pack распространяется на упаковку полей структуры, описание которой идёт сразу после директивы. То есть, по идее, значение упаковки не должно было переноситься на дальнейшие структуры. Однако оно переносилось.
  • #pragma pack -- микрософтовская штучка и была добавлена в GCC для совместимости. В компиляторах от микрософт она может работать несколько иначе. В GCC есть более мощный аналог -- __attribute__((packed(...)))


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

#pragma pack(push)
#pragma pack()
//#pragma pack(N)
struct A
{
//...
};
#pragma pack(pop)


pack(push) в начале сохранит, а pack(pop) в конце восстановит старое значение упаковки (вдруг оно будет кому-то нужно?).

pack() без параметров установит значение упаковки по-умолчанию, которое можно настроить перед началом компиляции (подробнее тут), что позволит гибко настраивать упаковку для различных архитектур. Если же нужна конкретная упаковка для данной структуры, можно написать #pragma pack (N), где вместо N должно стоять число 1, 2 или 4 (компиляторы микрософт для 64-битных систем также поддерживают 8 и 16). Идентификатор, сделанный через #define, вместо N подставить нельзя.

@темы: Программирование

22:57 

Untitled [458]

Обнаружил, что на множестве магазинов и иных учреждений появились таблички с надписью "2017". Удивительного тут мало, кроме того, что они почти все одинаковые. Красные с узорчиком. И кроме "2017" ничего не написано, типа все и так знают (а в некоторых местах написано). Когда об'явления о дне города были одинаковыми -- это было понятно. А про новый год что, тоже централизованно распространяют?

@темы: Наблюдения

23:56 

Пилат и Иешуа

Постоянно иду с обеда -- навстречу мне ходит женщина с ребёнком (ведёт его из школы?). В очках. Ребёнку лет 7-8. Женщина всегда идёт уткнувшись носом в землю, а иногда у неё в руках телефон, и тогда она идёт уткнувшись носом в него.

А ребёнок идёт в 10 шагах сзади и немного сбоку. Обычно тоже уткнувшись носом в землю.

А сегодня она вела его за ручку и разговаривала с ним!

@темы: Случай из жизни

Untitled

главная