Для разных проектов у нас используются разные вижуал студии, от 2005 до 2017. Текущий проект сделан в 2005. Если то, что я опишу ниже, вы встречали в других версиях, сообщите, пожалуйста.
***
Когда первый класс включает в себя указатель на другой, а другой -- на первый, приходится пользоваться об'явлением класса "вперёд". А именно -- указать название класса вместо его настоящего об'явления (class CName1; ). Это должно работать как надо, но периодически возникают сбои, когда компилятор "не видит" второй класс. Обычно их удаётся победить, но сегодня я застрял.
Застрял до такой степени, что решил посмотреть, что выдаёт препроцессор. В настройках проекта можно задать "генерировать файлы препроцессора", что я и сделал. И о чудо -- модули по отдельности стали компилироваться, хотя раньше не компилировались! Это меня напрягло, поскольку мне не было смысла смотреть на результат препроцессора, если там всё хорошо. А когда всё плохо -- препроцессорных файлов нет.
Однако, полной сборки в таком режиме добиться не удалось. Компилятор сказал на этапе компоновки, что у него нет об'ектных файлов.
ОКАЗАЛОСЬ
что компиляция в режиме выдачи файлов после препроцессора не производится вовсе! После генерации i-файла компилятор с модулем больше ничего не делает. Поэтому и ошибок не возникало.
Я открыл один из препроцессорных файлов и стал искать упоминание нужного мне класса. Оно находилось, но слишком поздно. Я видел, что выше по тексту выше класс тоже упоминается. В общем в одно из наименований типа CName1 затесалась русская буква C. Когда я её исправил, всё заработало.
Когда я учился в институте, у нас по одному из предметов препод готовил презентации в Power Point и показывал их на проекторе. А экран был расположен над доской. Я обычно сидел в первых рядах, поэтому приходилось задирать голову. Так я обнаружил, что постоянно держать голову задранной -- неудобно. Шея болит и затекает. После этого я стал отсаживаться на пять рядов дальше -- тогда стало более-менее.
Перед сдачей установки нам сказали, что она должна выглядеть прилично -- ничего лишнего. Мы убрали все пустые пластиковые бутылки и фантики от сникерсов, а монитор поставили сверху на монтажный шкаф. Стол, за которым я работал, убрали тоже. Стало прилично. Но работать стало возможно только стоя, потому что сидя приходилось задирать голову. А я уже знал, что так работать нельзя.
Я подождал, пока уйдут представители заказчика, и поставил стол обратно.
Когда-то я писал, что обнаружил на парте нарисованный член с крыльями. Студент тогда предположил, что это "современный купидон".
Однако оказалось, что член с крыльями -- очень древняя штука. Сестра показала в "Страдающем средневековье" соответствующие изображения. Они относятся к XIV-XV векам!
Картинки я тут вывешивать, естественно, не буду, но их можно посмотреть либо в самой книге в разделе "святой Fuck" (с. 64 обоих изданий), либо, если вас устраивает пояснительный текст на неизвестном языке, тут (осторожно! члены с крыльями и не только).
Интеллектуальные поддавки с романтическим уклоном: кто симпатию проявил, тот и проиграл. Вот главные герои и сидят по углам, неровно дышат, но виду не подают, а пытаются устроить провокацию. С переменным успехом.
Что думаю
В начале была дикая ржака. К концу стало больше милых романтических моментов, а ржаки меньше. Хуже всего, когда сцена посвящена побочным персонажам. Большинство этих сцен просто скучные. Но потерпеть можно. Очень хорошо, что у главных героев имеется развитие, а точнее, изменение состояния (за кадром). В начале они не те, что в конце. Так что смотреть интересно везде.
Между главными героями на самом деле существует мезальянс. Парень хотя интеллектуально и крутой -- и по рангу в школьном совете выше девицы, всё равно происходит из бедной семьи. У них совершенно разный уровень жизни. Спасает ситуацию от развала только то, что персонажи взаимодействуют в очень ограниченной модели -- то есть, в школе.
Рисовка классная.
Рекомендации
Это романтическая комедия под необычным соусом. И романтика и комедия получились хорошими. Вот и рекомендация.
Меня временно вернули из командировки, поэтому я сразу побежал играть в NetHack (Junethack).
Ситуация. Играю за самурая. В шахтах нашёл седло -- очень редкий предмет. В Сокобане на меня напала лошадь. Я хотел сделать её мирной, кидая в неё мясо, но это не сработало (и, видимо, в 3.6.2 перестало работать совсем). Поэтому пришлось кидать в неё лишай. В результате она стала не мирной, а ручной. Ходит за мной. Седло есть, лошадь есть. Самурай -- хороший ездок на лошади.
Я надел на лошадь седло, а сам пошёл по делам. Потом на нас напали орки и нимфа. Я спрятался от них в магазине, а лошадь оставил расхлёбывать. Выхожу, собираюсь сесть на лошадь, а игра мне говорит, что лошадь не осёдлана. У меня появляются фантазии на тему того, что теперь седло растворяется, если на лошадь не сесть сразу. Или что лошадь скидывает седло. Облазил уровень -- седла не видно.
А потом нашёл труп напавшей нимфы. У неё было много вещей, но в том числе было и моё седло. То есть, пока лошадь сражалась с нимфой, нимфа УКРАЛА у неё седло. Да, нимфы в NetHack воруют постоянно, но я не мог себе представить, что седло с лошади можно украсть в принципе.
1. Пусть программа зависла. Она вела логи и видно, в какой момент она зависла. Более старшая управляющая программа тоже вела логи. Логи надо сопоставить. Но прежде, чем делать выводы, следует сверить часы! В моём случае разница составляла две минуты (разные компьютеры, единого сервера синхронизации времени нет, интернета в локалке нет). Это была критичная разница: примерно через две минуты после зависания я выключил программу. Если бы время было одинаковым, отчёт об ошибке старшей программы сигнализировал бы о том, что зависание было старшей программой определено ещё в момент зависания. А разница в две минуты означала, что старшая программа отреагировала не на зависание, а на то, что я младшую программу прибил.
2. Пусть у нас есть система реального времени: мы посылаем куда-то запросы, при этом гарантируется, что операция выполнится, скажем, за 10 мс. В этом случае, если надо провести несколько операций, можно просто подождать 10 мс, а потом слать следующий запрос. Оказалось, что лучше этого всё равно не делать. Если есть техническая возможность, надо сначала проверить, выполнилась ли предыдущая операция. Тут есть две причины. Первая -- операция могла закончиться с ошибкой, поэтому следующую пока слать нельзя. А вторая -- хотя изготовитель и гарантировал 10 мс, по факту в редких случаях может оказаться больше. Особенно если изготовитель -- я.
Сел в электричку. С местами туговато. А это была та самая ростовская электричка, где по два контролёра и два охранника. Я выбрал свободное место и сел на него. Один из охранников сидел от меня через проход. У нас состоялся такой разговор: Охранник: Тут занято. Я: Что? Охранник: Тут занято, идите сидеть в другой вагон! Я: Что? Почему? Охранник: В соседнем вагоне девушки лежат на трёх сиденьях сразу. Сгоняйте их и сидите там.
Я смотрю рядом с собой. Там ещё одно пустое место. А дальше чей-то бесхозный рюкзак.
Я: Это что, все три места в ряду заняты? Охранник: Да.
В этот момент за меня вступилась контролёр.
Контролёр: Сидите, мужчина, где сидите.
На этом разговор был закончен.
А потом я понял, в чём было дело. Контролёры и охранники заняли вместе двенадцать сидений -- четыре скамейки по три. Разложили там свои вещи и сидели там, когда у них был перерыв в работе. Но даже с таким подходом они могли обойтись всего шестью местами, а не двенадцатью!
Несколько раз видел/сталкивался с ситуацией, когда несёшь на кассу товар со скидкой, а её уже нет, просто "ценник ещё не обновили".
А сегодня я впервые увидел, как мужику продали пиво по скидке, которая только что появилась. Ценник тоже обновить не успели. Он не возражал, но взял ещё две бутылки.
Однажды я понял, что передачи в машине не обязательно переключать по очереди. Надо включать ту передачу, которая соответствует скорости (оборотам). И вверх, и вниз. Например, можно разогнаться побольше на первой, а потом сразу воткнуть третью. Я так иногда делаю при выезде из переулка на магистраль, когда надо как можно быстрее набрать скорость (на первой передаче машина лучше ускоряется). Может быть, это вредно для машины, не знаю.
И вот меня везёт такси -- и я понимаю, что водитель постоянно слишком долго едет на предыдущей передаче. А потом я замечаю, что он со второй сразу переключается на четвёртую!
-- Ой, а вы сразу второй на четвёртую переключаетесь? -- Ага. -- А в этом есть какой-то замысел? -- А третья передача не работает! Гонки на этой машине на спор устраивали -- и доломали.
Стрёмно, когда от ПО требуется надёжность. Особенно в момент тестирования в присутствии заказчика. А вдруг всё повиснет и сломается? Это тревожность.
Следующие тревожности ощущаются по-разному: 1. Я не знаю, остались баги в ПО или нет. (разумеется, остались) 2. Я знаю, что в ПО есть баг, знаю, как он проявляется, но не понимаю, какова его причина. 3. Я знаю, что в ПО есть баг, знаю, в чём причина, но ещё не исправил.