zHz00 Untitled

вторник, 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
воскресенье, 27 ноября 2016
23:18 Untitled [454]
Сестра рассказывает сказку о трёх братьях из Гарри Поттера.

Сестра: И вот они построили мост, входят на него, тут перед ними появляется фигура в плаще...
Я: И говорит "ТЫ НЕ ПРОЙДЁШЬ!"

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

URL
суббота, 26 ноября 2016
22:48 Чёрный гроб на колёсиках
Много раз я видел в метро людей, катящих за собой специальный чемодан на маленьких колёсиках с выдвижной ручкой (ручка у чемодана, а не у колёсиков). Мне всегда казалось смешным то, как люди останавливаются перед лестницей, берут его за ручку (но не выдвижную, а другую) и несут по лестнице на руках.

Сегодня я встретил маму из поездки и получил шанс покатать такой чемодан самостоятельно. До этого я катал телеги только грузовые (советские), с диаметром колёс от 15 см (и загрузкой от 25 кг).

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

1. Опыт спуска и под'ёма грузовых телег по лестнице тут бесполезен. Из-за малого диаметра колёс сама сумка цепляет за ступеньки. Остаётся действительно только одно -- взять за ручку и нести.
2. Не только малый диаметр колёс, но и малое расстояние между ними делают бесполезным понатыканные всюду пандусы. Даже если бы расстояние между колёсами было больше на 10-15 см, воспользоваться пандусами не вышло бы всё равно, т.к. большинство пандусов -- с высокими бортиками (П-образный профиль), которые больше, чем расстояние от окружности колеса до поверхности сумки. Также малое расстояние между колёсами придаёт телеге просто божественную устойчивость -- резкий поворот или старт с места -- и телега заваливается на бок.
3. Дело ещё в малом расстоянии от окружности колеса до арки колеса. Я не разглядывал, сколько там, то эта щель забивается мгновенно -- уличной грязью, песком, рассыпанным коммунальщиками, и снегом. После этого тележка уже не катит. В прямом смысле.

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

@темы: Крик души, Наблюдения

URL
пятница, 25 ноября 2016
23:54 Собака Маруся
Мама говорит -- а пошли на выставку Рафаэля в Пушкинский. И мы все пошли.

Выставка была не очень интересная. Картин мало. Людей со значками черепашек-ниндзя замечено не было. Но две вещи поразили:
1. Этому, блин, куску бумаги, 500 лет!
2. А в 16 веке картины рисовали на доске.

Гораздо интереснее было изображение, обнаруженное мной в музейном киоске:


А ещё там же была выставка картин для слепых -- выпуклые репродукции. Стоим с сестрой, щупаем. Подходит девушка -- вы знаете, эта выставка для незрячих...
Я (смотрю на неё): Знаем.

А ещё там же была выставка "обстановка немецкого дома 18 века". И всякие бытовые предметы. Стоит туфля одна. Экспонат подписан. "Полупара туфель"! То есть это не просто туфля, это полупара, видите ли!

@темы: Выставки, Ая, Наблюдения

URL
четверг, 24 ноября 2016
23:55 Untitled [453]
К нам пришёл для переговоров гражданин из дружественной организации.

Коллега: Кофе будешь?
Гражданин: Нет. Я с детства кофе не пью...
Я: А до детства значит пил?
Гражданин: Да.

О_о

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

URL