zHz00 Untitled

суббота, 17 декабря 2016
23:30 Ну что, как поплавали?
Видел в метро на эскалаторе мужика в водолазной маске. Ехал вверх.

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

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

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

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

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

URL
четверг, 15 декабря 2016
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.

(спойлеры)

@темы: Игры

URL
среда, 14 декабря 2016
23:58 Езжай за этой машиной
Я опоздал на автобус. Но за ним шёл другой. Он мне не подходил, но часть маршрута у него совпадала. И, кроме того, он шёл позже, чем должен был идти по расписанию. То есть, опаздывал сам.

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

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

URL
вторник, 13 декабря 2016
23:51 Untitled [459]
Самый надёжный способ сохранить пароль в тайне -- это забыть его.

@темы: Мысли

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

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

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

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

URL
воскресенье, 11 декабря 2016
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 подставить нельзя.

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

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

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

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

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

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

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

URL
четверг, 08 декабря 2016
23:44 Untitled [457]
...у него был чёрный пояс по радиоэлектронной борьбе.

@темы: Викторика, Мысли

URL
среда, 07 декабря 2016
22:37 Untitled [456]
Если на вопрос, почему ты туда-то и туда-то не придёшь, ответ "не хочу" собеседник не принимает или начинает допытываться "почему не хочешь", можно сказать, что у тебя на это время назначен приём у психиатра.

@темы: Лайфхак, Тухлые идеи

URL
вторник, 06 декабря 2016
23:58 Первый -- шаг вперёд, и в рай
Удивительную вещь встретил. Передаю в функцию указатель на экземпляр структуры, а приходит вместо исходных значений -- мусор.

Смотрю, адреса в памяти совпадают, т.к. указатель передался правильно. Смотрю значения в памяти -- не меняются. Так почему же я передаю одни значения, а получаю другие?

Значит, они по-разному интерпретируются! Но структура одна же. Я включил её определение в .h файле в два .c файла -- в главный файл и в файл с определением функции, которую я вызываю.

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

Короче говоря, дело было в выравнивании данных в памяти. В главном файле где-то в начале (или в одном из заголовков) было установлено #pragma pack(2), а во втором файле -- #pragma pack(4). И уже ПОСЛЕ этого был включен мой заголовочный файл и описанием структуры. В итоге главный файл думал, что выравнивать поля надо по 2 байта на переменную, а второй файл, что по четыре! Т.е. структуры имели одинаковое имя, но были несовместимы двоично! Я непосредственно перед описанием структуры в заголовочном файле поставил #pragma pack(4) и всё стало зашибись.

(пример, иллюстрирующий #pragma pack для тех, кто не в курсе)

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

URL
понедельник, 05 декабря 2016
23:29 Как убить Владыку Теней в Remixed Pixel Dungeon
(развернуть список моих статей по Pixel Dungeon и форкам)

Надо было сделать одну статью по новому Ремиксу и описать в нём трёх боссов -- этого, Королеву Пауков и Лича, но этот босс достоин отдельной статьи.

(как убить Владыку Теней)

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

URL
воскресенье, 04 декабря 2016
23:59 Коктейль
Еду с челом на машине.

Он: О, -10. Как раз незамерзайка на -10 замёрзла.
Я: А зачем же ты налил на -10?
Он: Да я купил на -20, вот понемногу доливаю в эту...

Я:
.
.
.

@темы: Случай из жизни, Автомобили

URL
суббота, 03 декабря 2016
23:54 ? // Эпос о Гильгамеше
Чем-то привлекают произведения из глубины веков. Данное произведение -- не самое древнее сохранившееся, но одно из самых древних. Глубже почти некуда. Написано клинописью на глиняных табличках. И бесполезно представлять себе на месте Гильгамеша одноимённого гражданина из, скажем, Fate/Stay Night, одетого в средневековый доспех. Потому что в те ещё годы даже с простыми шлемами была напряжёнка. А было это в районе 3 тысячелетия до н.э.

Основная проблема данного произведения в том, что оно плохо сохранилось. И тут я пою хвалебную песню т.н. "эпическим повторам", когда одни и те же отрывки повторяются в тексте многократно, поэтому когда на табличке невозможно прочитать слово -- или кусок таблички вообще отвалился -- по дублированным местам можно восстановить, что там было. В том числе, отрывок жалобы Гильгамеша на страх смерти в 10 табличке повторяется трижды (или даже больше), но ни разу не сохранился целиком. Однако сопоставление позволяет восстановить текст почти целиком. Несмотря на это, на текущий момент учёные "собрали" где-то 2/3 текста (это страниц 80 стихами в одну колонку). Но сборка продолжается. Некоторые места известны только в пересказе.

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

Главная трудность при чтении -- непонятность некоторых моментов без пояснения переводчика. Когда их прочитаешь -- становится понятно, что, к примеру, в 12 таблице Энкиду спустился в преисподнию за барабанными палочками, будучи живым ещё. А пока не прочитал, думал, что его Гильгамеш наставляет перед смертью (12 таблица вообще выбивается из основного повествования). И хотя в данном эпизоде вариантов нет, в некоторых других я думал, а не ДОДУМАЛ ли переводчик СМЫСЛ? Например, одна из самых главных мыслей произведения, это то, что Гильгамеш в конце отступился от своей цели. Но в тексте она помечена курсивом (т.е. является интерполяцией). И если почти все остальные интерполяции либо неважны с точки зрения смысла, либо восстанавливаются по повторениям/контексту, то откуда взялось именно такое восстановление, непонятно.

Хотя г-н Дьяконов, переводчик, пишет, что это типа гениальное произведение, об'единяющее известные мифы в слитный сюжет, чтобы показать главную философскую идею (о человеческой смертности), у меня было ощущение неровности повествования. Тем не менее, некоторые эпизоды весьма впечатляют. Во-первых, это первая таблица, о том, как некоего Энкиду, доисторического Маугли, выманили из общества диких животных при помощи обнажённой женщины, а потом приучили его к культуре (доисторической, но всё равно культуре). Во-вторых, это история с небесным быком. Её я, пожалуй, перескажу подробнее.

Иштар: Гильгамеш, давай жениться!
Гильгамеш: Неее. Ты всех своих предыдущих любовников кого сгубила, кого что, а теперь ещё и за меня возьмёшься?
Иштар: Папа, он меня обижает! Сделай мне быка, который бы его убил!
Ану: От тебе бык и отстань от меня уже.
Иштар: Теперь ты у меня попляшешь, Гильгамеш!
Гильгамеш: Энкиду, пошли мочить быка.
Энкиду: ок.
*мочат быка*
Энкиду: Эй, Иштар, мы твоего быка замочили! Я бы с тобой то же самое сделал, если бы мог добраться...
Иштар: Папа, папа!


Иштар -- девка ещё та.

@темы: Книги

URL
пятница, 02 декабря 2016
23:56 Untitled [455]
Романтические углеводороды.

@темы: Викторика

URL
четверг, 01 декабря 2016
23:56 Рука-мобильник
Проспал будильник.

Но уже через 15 минут раздался телефонный звонок на городской телефон. Я поднял трубку.

Я: Алло.
Телефон: ...
Я: Алло.
Телефон: ...
Я: Алло...
Телефон: ...
Я: ...
Телефон: Goodbye... (незнакомый женский голос с хорошим английским произношением)
(короткие гудки)

Так я не проспал работу...

@темы: Дзякиган, Звонки

URL
среда, 30 ноября 2016
23:59 О тетрисе в мю-торрент
Не все знают, что в мю-торренте есть тетрис. Про него я как-то писал. Рассказываю коллеге -- он не знал.

Заходит по удалёнке на свой домашний комп, жмёт t в окошке About -- ничего не происходит. Меняет раскладку -- то же.

Думаю, может в новых версиях это убрали?

Захожу по удалёнке на свой домашний комп, жму t в окне About -- ничего не происходит. Меняю раскладку -- то же. Но у меня точно версия, где тетрис есть. В чём дело?

ОКАЗАЛОСЬ, что только если раскладка на хостовом и удалённом компах совпадает -- тогда он запускается. У нас разные программы для подключения -- TeamViewer и TightVNC.

@темы: Программы

URL
вторник, 29 ноября 2016
23:58 MLG
Было время, когда я проходил Half Life 2 Episode 1. Это что-то вроде дополнения к Half Life 2, но представляло собой законченную короткую игру.

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

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

Я в него выстрелил.

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

Я ещё раз удивился остроумию разработчиков.

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

Впрочем, идея невидимости в играх применяется на самом деле. В Dark Souls 1 и в Lab14 есть невидимые мосты, а в Dark Souls 2 -- невидимые враги и лестницы.

@темы: Игры

URL
понедельник, 28 ноября 2016
23:36 Фейл-моногатари [05]
В прошивке контроллера написано выдавать сигнал на выход, а осциллограф этого не видит. Никак не мог понять, в чём дело.

Решил -- контроллер работает на частоте 200 МГц. Возможно, сигнал проскакивает так быстро, что осциллограф просто не срабатывает? (он работает в режиме single sequence: при появлении сигнала он начинает измерение данных, а потом показывает статичную картинку начиная с момента появления сигнала)

Думаю, надо для теста уменьшить частоту. Так, какие у нас ещё есть источники для тактовой частоты? О, тактовый генератор 32 кГц! Его и поставлю!

И заменил строчку:
REGISTERS->PERIPHERAL_CLOCK=9<<24;//основной кварцевый генератор; в 24-28 битах должна быть 9,
//остальные биты 0; << -- логический побитовый сдвиг влево.

На строчку:
REGISTERS->PERIPHERAL_CLOCK=1<<24;//генератор 32 кГц на RC-цепочке

Контроллер после этого прошился, но при попытке выполнить пару строк кода завис. И больше он теперь не прошивается!

@темы: Программирование, Фейлы, Борьба с техникой

URL