
23:32
Слон в удаве
Garbage collector: проснулся -- убери планету.
Комментарии (1)
23:59
::
Сегодня внезапно узнал, что оператор "::" в Си++ называют "разрешение области видимости", в то время как я всегда называл его "расширение области видимости". Пишут и так и так. По-английски -- scope resolution operator. "Расширение" -- совершенно понятный перевод, т.к. подходит по смысла. А "разрешение" это прямой перевод слова "resolution". Как же правильно? И почему?
Комментарии (2)
23:53
Профдеформация
Видел сегодня в магазине мужика с огромным амперсандом (&) на футболке. "Демон", -- подумал я
Комментарии (6)
22:37
Untitled [368]
1: Налей мне сока.
2: А бутылка ещё не вскрыта.
1: Но оттуда уже отпито, я вижу!
3: Это я оттуда налил непорочно.
2: А бутылка ещё не вскрыта.
1: Но оттуда уже отпито, я вижу!
3: Это я оттуда налил непорочно.
Комментарии (3)
Я: Ну давай, отвечай.
Студент надевает чёрные очки.
Я: Что, в покер играешь?
Он: Нет.
Я: Ты блефуешь.
Студент надевает чёрные очки.
Я: Что, в покер играешь?
Он: Нет.
Я: Ты блефуешь.
Комментарии (3)
Устройство не хотело работать. Звоним российскому представительству изготовителя.
Оказывается, что единственный специалист по устройству -- в командировке. И это уже не первый раз, когда устройства каких-либо фирм не работают, а единственный специалист по ним -- в командировке. Но нам дали его телефон.
Я ему звоню, обрисовываю ситуацию. Он говорит, что в командировке и не может оттуда подключиться к нам по удалёнке и посмотреть, в чём дело. А нам срочно-срочно.
Он говорит -- а давайте я свяжусь с головным представительством, может они помогут? А головное представительство, вы будете смеяться -- в Словении.
Перезванивает через 20 минут и говорит -- вы знаете, я дико извиняюсь. Но в Словении сегодня -- национальный праздник (в этом месте я заржал) и там никого нет. И завтра не будет. Ближайшее время -- в понедельник. А тогда уже и я из командировки приеду и смогу сам посмотреть.
Короче говоря, любые попытки получить помощь потерпели крах.
И мы внезапно сумели настроить его самостоятельно.
Оказывается, что единственный специалист по устройству -- в командировке. И это уже не первый раз, когда устройства каких-либо фирм не работают, а единственный специалист по ним -- в командировке. Но нам дали его телефон.
Я ему звоню, обрисовываю ситуацию. Он говорит, что в командировке и не может оттуда подключиться к нам по удалёнке и посмотреть, в чём дело. А нам срочно-срочно.
Он говорит -- а давайте я свяжусь с головным представительством, может они помогут? А головное представительство, вы будете смеяться -- в Словении.
Перезванивает через 20 минут и говорит -- вы знаете, я дико извиняюсь. Но в Словении сегодня -- национальный праздник (в этом месте я заржал) и там никого нет. И завтра не будет. Ближайшее время -- в понедельник. А тогда уже и я из командировки приеду и смогу сам посмотреть.
Короче говоря, любые попытки получить помощь потерпели крах.
И мы внезапно сумели настроить его самостоятельно.
Смотрю -- на ладони правой руки -- волдырь. Мозоль натёр!
Но никак не могу понять, как мне это удалось. В голову лезет только одно очевидное предположение.
К вечеру вспомнил. Вчера я в столовой ел печень, которая подавалась большим куском. И его надо было резать столовым ножом -- такой, с серрейтором, который не режет, а пилит. Но печень была очень, очень твёрдая. Резалась (пилилась) с трудом. Нужно было прилагать очень большие усилия. Короче говоря, руку я натёр столовым прибором.
Я засмеялся, когда понял это.
Но никак не могу понять, как мне это удалось. В голову лезет только одно очевидное предположение.
К вечеру вспомнил. Вчера я в столовой ел печень, которая подавалась большим куском. И его надо было резать столовым ножом -- такой, с серрейтором, который не режет, а пилит. Но печень была очень, очень твёрдая. Резалась (пилилась) с трудом. Нужно было прилагать очень большие усилия. Короче говоря, руку я натёр столовым прибором.
Я засмеялся, когда понял это.
Комментарии (5)
23:53
Коммунизм
Да, пронаблюдал любопытный эффект, о котором лучше знать ещё до того, как вы его обнаружите самостоятельно.
Я имею ввиду удалённый доступ к чужим компьютерам через программы типа TeamViewer, VNC, radmin и проч.
Как знает большая часть пользователей данных систем (а мы пользуемся ими по работе), буферы обмена обоих компьютеров связываются. Если что-либо вы копируете на основном, то это попадает в буфер целевого и наоборот.
А теперь внимание --
1) Если вы подключены к нескольким компам сразу, то то, что вы копируете на одном, сразу попадает на все.
2) Если вы подключены к одному компу вдвоём, втроём и т.п., то то, что вы копируете у себя, тоже сразу оказывается у всех.
Т.е. буфер обмена становится общим на всех участников.
Возможно, это происходит не всегда, но я наблюдал это при нескольких комбинациях программ и схем подключения.
Это очень опасно -- кто-то может узнать то, что ему знать не положено. Будьте внимательны и осторожны, копируя что угодно в буфер обмена, если при удалённом подключении участников (целевых компьютеров, либо операторов) в сумме больше, чем два. Да и даже если два, возможны приколы, если кто-нибудь будет подглядывать за целевым компьютером, но тут уже ничего не поделаешь.
Я имею ввиду удалённый доступ к чужим компьютерам через программы типа TeamViewer, VNC, radmin и проч.
Как знает большая часть пользователей данных систем (а мы пользуемся ими по работе), буферы обмена обоих компьютеров связываются. Если что-либо вы копируете на основном, то это попадает в буфер целевого и наоборот.
А теперь внимание --
1) Если вы подключены к нескольким компам сразу, то то, что вы копируете на одном, сразу попадает на все.
2) Если вы подключены к одному компу вдвоём, втроём и т.п., то то, что вы копируете у себя, тоже сразу оказывается у всех.
Т.е. буфер обмена становится общим на всех участников.
Возможно, это происходит не всегда, но я наблюдал это при нескольких комбинациях программ и схем подключения.
Это очень опасно -- кто-то может узнать то, что ему знать не положено. Будьте внимательны и осторожны, копируя что угодно в буфер обмена, если при удалённом подключении участников (целевых компьютеров, либо операторов) в сумме больше, чем два. Да и даже если два, возможны приколы, если кто-нибудь будет подглядывать за целевым компьютером, но тут уже ничего не поделаешь.
Комментарии (4)
23:53
Свиноматка
Хуже всего, если баг в программе то проявляется, то нет, по непонятному расписанию.
Практика показывает, что в таких случаях баг чаще всего вызван многопоточностью. То есть, когда несколько частей программы выполняются одновременно. Многопоточность -- действительно сложная тема со множеством подводных камней.
Если вы обнаружили подобный баг, то следует проверить следующее:
1) Что доступ к внешним устройствам есть только у одного потока. Если есть сомнения, следует сделать специальную функцию доступа к нему, которая будет работать через взаимоисключение (т.е. мьютекс, критическая секция и пр.). Весь доступ к устройству должен осуществляться через неё.
2) Что доступ к внутренним ресурсам (особенно, к памяти) размером больше ширины шины данных тоже сделан через взаимоисключения (см. примечание ниже).
3) И, наконец, что вы не применяете многопоточно библиотеки, которые для этого не предназначены. Если предназначены, обычно стоит пометка в документации -- thread-safe. Одна из таких библиотек, которая не предназначена -- VCL (C++ Builder, Delphi). Когда-то я не знал, что она не поддерживает многопоточность и менял, к примеру, надписи на кнопках из разных потоков. Это приводило к совершенно невообразимым глюкам.
Внимание. Примечание к п.2. На некоторых процессорах доступ к невыровненным данным выполняется в несколько тактов. Выровненными считаются данные, расположенные по адресам, равным n*ширина шины данных, где n -- целое неотрицательное число. Т.е. если ваша переменная размером 4 байта расположена по адресу 13, то её считывание на 32-битном процессоре может происходит следующим образом: процессор считывает байты 12-15, сохраняет во временный регистр, потом 16-19, сохраняет в другой регистр, сдвигает 12-15 влево на 8 бит, записывает старшие 24 бита в старшие 24 бита целевого регистра, потом сдгвигает 16-19 вправо на 24 бита, записывает младшие 8 бит в младшие 8 бит целевого регистра. Данный алгоритм является примером, фактическая реализация может быть иной. За это время потоки могли переключиться уже несколько раз. Будьте осторожны. Если же адрес переменной изначально был 12, то всё проходит в 1 такт.
Практика показывает, что в таких случаях баг чаще всего вызван многопоточностью. То есть, когда несколько частей программы выполняются одновременно. Многопоточность -- действительно сложная тема со множеством подводных камней.
Если вы обнаружили подобный баг, то следует проверить следующее:
1) Что доступ к внешним устройствам есть только у одного потока. Если есть сомнения, следует сделать специальную функцию доступа к нему, которая будет работать через взаимоисключение (т.е. мьютекс, критическая секция и пр.). Весь доступ к устройству должен осуществляться через неё.
2) Что доступ к внутренним ресурсам (особенно, к памяти) размером больше ширины шины данных тоже сделан через взаимоисключения (см. примечание ниже).
3) И, наконец, что вы не применяете многопоточно библиотеки, которые для этого не предназначены. Если предназначены, обычно стоит пометка в документации -- thread-safe. Одна из таких библиотек, которая не предназначена -- VCL (C++ Builder, Delphi). Когда-то я не знал, что она не поддерживает многопоточность и менял, к примеру, надписи на кнопках из разных потоков. Это приводило к совершенно невообразимым глюкам.
Внимание. Примечание к п.2. На некоторых процессорах доступ к невыровненным данным выполняется в несколько тактов. Выровненными считаются данные, расположенные по адресам, равным n*ширина шины данных, где n -- целое неотрицательное число. Т.е. если ваша переменная размером 4 байта расположена по адресу 13, то её считывание на 32-битном процессоре может происходит следующим образом: процессор считывает байты 12-15, сохраняет во временный регистр, потом 16-19, сохраняет в другой регистр, сдвигает 12-15 влево на 8 бит, записывает старшие 24 бита в старшие 24 бита целевого регистра, потом сдгвигает 16-19 вправо на 24 бита, записывает младшие 8 бит в младшие 8 бит целевого регистра. Данный алгоритм является примером, фактическая реализация может быть иной. За это время потоки могли переключиться уже несколько раз. Будьте осторожны. Если же адрес переменной изначально был 12, то всё проходит в 1 такт.
Комментарии (8)
Специализированные магазины -- вещь особенная. Как они держатся и не прогорают, порой не очень понятно. Но, видимо, достаточно сайта в интернете, чтобы их находили. Тем более, в Москве.
Надо было мне по надобности зайти в такой магазин. Инструкция, как дойти, была.
Дохожу я, а там стоит избушка. Натуральная. Хотя двухэтажная. И стоит она на территории храма. Чтобы попасть в магазин, надо обойти дом вокруг и зайти сзади. Там есть чёрный ход. Над входом никаких вывесок нет. Заходишь, поднимаешься на второй этаж. Там только бумажка кривенько на стене наклеена, что я на верном пути.
Было слабое ощущение, что я захожу в притон.
А кроме магазина там ещё был клуб той же направленности, что и магазин. И вот из этого клуба шёл шум людей. Смех, разговоры. Я захожу, а там -- 10 или 15 человек. В малюсенькой комнатке. Вот тогда ощущение притона стало сильнее.
Если бы магазин находился в подвале -- аналогия была бы полной.
Надо было мне по надобности зайти в такой магазин. Инструкция, как дойти, была.
Дохожу я, а там стоит избушка. Натуральная. Хотя двухэтажная. И стоит она на территории храма. Чтобы попасть в магазин, надо обойти дом вокруг и зайти сзади. Там есть чёрный ход. Над входом никаких вывесок нет. Заходишь, поднимаешься на второй этаж. Там только бумажка кривенько на стене наклеена, что я на верном пути.
Было слабое ощущение, что я захожу в притон.
А кроме магазина там ещё был клуб той же направленности, что и магазин. И вот из этого клуба шёл шум людей. Смех, разговоры. Я захожу, а там -- 10 или 15 человек. В малюсенькой комнатке. Вот тогда ощущение притона стало сильнее.
Если бы магазин находился в подвале -- аналогия была бы полной.
Комментарии (3)
В связи с историей про трубу, стал читать Википедию про разные виды резьб. Ну, резьба M -- это всем известно, метрическая. В детстве у меня был металлический конструктор, поэтому я с 6 лет знаю, что такое M3 и M4.
Резьба G -- трубная, дюймовая. Поскольку мы собирали водопровод, про неё я тоже знаю. Трубы у нас с резьбой G 1/2 (внутренний диаметр трубы -- пол-дюйма).
Так, постойте-постойте. А это что такое? Резьба E? Эдисона круглая?.. Применяется в электропатронах... Что-то знакомое. E27.
Да. Именно. Я давно знал, что стандартные лампочки называются E27. И ещё есть E14. Самые распространённые. Но я думал, что это просто обозначение названия цоколя. А это -- название ЕГО РЕЗЬБЫ. Резьба на лампочке E27 -- это E27.
Резьба G -- трубная, дюймовая. Поскольку мы собирали водопровод, про неё я тоже знаю. Трубы у нас с резьбой G 1/2 (внутренний диаметр трубы -- пол-дюйма).
Так, постойте-постойте. А это что такое? Резьба E? Эдисона круглая?.. Применяется в электропатронах... Что-то знакомое. E27.
Да. Именно. Я давно знал, что стандартные лампочки называются E27. И ещё есть E14. Самые распространённые. Но я думал, что это просто обозначение названия цоколя. А это -- название ЕГО РЕЗЬБЫ. Резьба на лампочке E27 -- это E27.
В NetHack я обычно хожу с драконом, хотя бы одним. Получить дракона легко, но долго, если есть ловушка полиморфа и сопротивление магии (magic resistance). Однако драконы, как и любые другие питомцы в NetHack, себя не жалеют. И даже встретив минотавра, бьют его до чьей-либо смерти. Иногда -- своей.
К счастью, если в арсенале есть wand of undead turning, любое животное можно воскресить, если оно оставило труп. А драконы оставляют труп всегда.
Но что делать, если дракона убили над лавой? Мне стало любопытно и я запустил wizard-mode.
1. Если труп упал в лаву, логично предположить, что он находится там, на дне. Однако если в воду при определённых обстоятельствах можно залезть и труп достать, то в лаву залезть нельзя -- сгоришь. Но лаву можно заморозить. Что же получится? Лёд?
2. Нет. Получится обычный пол. И под этим полом покоится труп дракона. Как же его достать? Выкопать яму киркой.
3. Яму выкопал. И внутри -- та-дам! действительно нашёлся труп дракона. Это любопытно, т.к. когда труп падал, было сообщение, типа, "труп дракона сгорает". Выкопанный труп действительно можно воскресить.
4. Однако, если рядом с выкапываемым куском пола есть хотя бы один квадрат с лавой, лава может залиться в выкопанную яму и сжечь игрока. Значит, надо заморозить столько лавы, чтобы все клетки вокруг клетки с трупом дракона были твёрдой землёй.
5. Стоп. Если я смогу выстрелить вандой в труп, находящийся в яме, почему я не могу выстрелить в труп, находящийся в лаве?))) Дракон -- существо летающее, поэтому после воскрешения он должен быть сразу над водой. Пробую. Делаю ещё кусок лавы, кидаю туда труп дракона. Отхожу, стреляю вандой и... та-дам! Труп дракона, воскресая, всплывает на поверхность и взлетает!
The yellow dragon snarls.
tl;dr -- если ваш питомец 100% оставил труп, но тот утонул в воде или в лаве, воскресить питомца можно, не доставая трупа (хотя если он не летает, то он умрёт опять -- тогда надо следовать пунктам 1-4; с водой всё то же самое, если морозить воду, будет лёд, если копать лёд киркой, будет яма).
Да, если пет не летает, то:
а) он вряд ли вообще умрёт над водой/лавой;
б) хотя он и утонет следующим ходом, но один ход у вас будет. Вы можете выстрелить в него, к примеру, вандой телепортации, пока он ещё не утонул.
К счастью, если в арсенале есть wand of undead turning, любое животное можно воскресить, если оно оставило труп. А драконы оставляют труп всегда.
Но что делать, если дракона убили над лавой? Мне стало любопытно и я запустил wizard-mode.
1. Если труп упал в лаву, логично предположить, что он находится там, на дне. Однако если в воду при определённых обстоятельствах можно залезть и труп достать, то в лаву залезть нельзя -- сгоришь. Но лаву можно заморозить. Что же получится? Лёд?
2. Нет. Получится обычный пол. И под этим полом покоится труп дракона. Как же его достать? Выкопать яму киркой.
3. Яму выкопал. И внутри -- та-дам! действительно нашёлся труп дракона. Это любопытно, т.к. когда труп падал, было сообщение, типа, "труп дракона сгорает". Выкопанный труп действительно можно воскресить.
4. Однако, если рядом с выкапываемым куском пола есть хотя бы один квадрат с лавой, лава может залиться в выкопанную яму и сжечь игрока. Значит, надо заморозить столько лавы, чтобы все клетки вокруг клетки с трупом дракона были твёрдой землёй.
5. Стоп. Если я смогу выстрелить вандой в труп, находящийся в яме, почему я не могу выстрелить в труп, находящийся в лаве?))) Дракон -- существо летающее, поэтому после воскрешения он должен быть сразу над водой. Пробую. Делаю ещё кусок лавы, кидаю туда труп дракона. Отхожу, стреляю вандой и... та-дам! Труп дракона, воскресая, всплывает на поверхность и взлетает!
The yellow dragon snarls.
tl;dr -- если ваш питомец 100% оставил труп, но тот утонул в воде или в лаве, воскресить питомца можно, не доставая трупа (хотя если он не летает, то он умрёт опять -- тогда надо следовать пунктам 1-4; с водой всё то же самое, если морозить воду, будет лёд, если копать лёд киркой, будет яма).
Да, если пет не летает, то:
а) он вряд ли вообще умрёт над водой/лавой;
б) хотя он и утонет следующим ходом, но один ход у вас будет. Вы можете выстрелить в него, к примеру, вандой телепортации, пока он ещё не утонул.
Комментарии (2)
23:58
Партизан
На самом деле в среде опытных сисадимнов такой случай наверняка встречался.
Пришёл на работу, включил компьютер, интернета нет. У всех есть. Стал разбираться. У меня адрес -- 192.168.8.XX. А у остальных -- 192.168.0.XX. Понятно, да? У нас в сети появился новый DHCP сервер, конкурент основного)))))). Смена власти!
Я иду на Default Gateway (192.168.8.1), попадаю на страницу, которая просит ввести пароль. И сообщает -- "ASUS WL-520G". Ну лол. И ещё говорит, что типа, WAN кабель к роутеру не подключён. Т.е. какой-то умник подключил роутер LAN-раз'ёмом в нашу сеть. И новый DHCP сервер раздаёт адреса к себе и не даёт интернет (в последнем он не виноват, т.к. интернета у него и нету).
Я переподключаю сетевой кабель и всё начинает работать (во второй раз повезло получить адрес от правильного, главного роутера).
На следующий день ситуация повторяется.
Я иду к тому, кто у нас близок по должности к сетевому администратору, и ему всё это рассказываю. Он говорит -- "А, вот в чём дело! То-то ко мне приходили, говорили, интернет не работает. Я переткнул кабель и заработал."
Теперь надо вычислить, где засада. Ходить по всему зданию и проверять комнаты неинтересно. И тут я думаю! Опа! Это же беспроводной роутер! Можно посмотреть, какой у WiFi SSID и ходить с ведроидом и смотреть, где сигнал сильнее!)))))))
Но как узнать SSID?
Я думаю, что раз граждане не догадались, что будет, если включить роутер LAN-раз'ёмом в основную сеть и не настроить правильно, то они могли и пароль администратора оставить по-умолчанию. И я оказался прав. Логин/пароль был стандартный для ASUS -- admin/admin.
Но походить по зданию с ведроидом так и не удалось. Потому что SSID у роутера были -- "ROOM702"!
Мы идём в эту комнату и там он реально находится!
Какая нестабильная вещь -- сети. Хрен с горы поднимает свой DHCP-сервер и всё рушится.
Пришёл на работу, включил компьютер, интернета нет. У всех есть. Стал разбираться. У меня адрес -- 192.168.8.XX. А у остальных -- 192.168.0.XX. Понятно, да? У нас в сети появился новый DHCP сервер, конкурент основного)))))). Смена власти!
Я иду на Default Gateway (192.168.8.1), попадаю на страницу, которая просит ввести пароль. И сообщает -- "ASUS WL-520G". Ну лол. И ещё говорит, что типа, WAN кабель к роутеру не подключён. Т.е. какой-то умник подключил роутер LAN-раз'ёмом в нашу сеть. И новый DHCP сервер раздаёт адреса к себе и не даёт интернет (в последнем он не виноват, т.к. интернета у него и нету).
Я переподключаю сетевой кабель и всё начинает работать (во второй раз повезло получить адрес от правильного, главного роутера).
На следующий день ситуация повторяется.
Я иду к тому, кто у нас близок по должности к сетевому администратору, и ему всё это рассказываю. Он говорит -- "А, вот в чём дело! То-то ко мне приходили, говорили, интернет не работает. Я переткнул кабель и заработал."
Теперь надо вычислить, где засада. Ходить по всему зданию и проверять комнаты неинтересно. И тут я думаю! Опа! Это же беспроводной роутер! Можно посмотреть, какой у WiFi SSID и ходить с ведроидом и смотреть, где сигнал сильнее!)))))))
Но как узнать SSID?
Я думаю, что раз граждане не догадались, что будет, если включить роутер LAN-раз'ёмом в основную сеть и не настроить правильно, то они могли и пароль администратора оставить по-умолчанию. И я оказался прав. Логин/пароль был стандартный для ASUS -- admin/admin.
Но походить по зданию с ведроидом так и не удалось. Потому что SSID у роутера были -- "ROOM702"!
Мы идём в эту комнату и там он реально находится!
Какая нестабильная вещь -- сети. Хрен с горы поднимает свой DHCP-сервер и всё рушится.
Комментарии (1)
23:49
Да всю правду доложи
Если вы компьютерщик, не девушка, и вам надо посмотреть в труднодоступное место, то вместо зеркальца всегда можно использовать компакт-диск! Я очень удивился, когда при мне так сделали, но это был вин.
Камера в телефоне подходит плохо, потому что у неё обычно проблемы со светочувствительностью и разрешением.
Камера в телефоне подходит плохо, потому что у неё обычно проблемы со светочувствительностью и разрешением.
23:46
Союз нерушимый
Что бы такого ещё запретить?
Вот я предлагаю запретить использовать в рекламе музыку, которая написана не специально для неё. Почему?
1. Музыка вам надоест и вы больше уже не сможете её нормально слушать отдельно от рекламы.
2. Музыка будет прочно ассоциироваться с рекламой, особенно, если вы её не слышали до рекламы, а потом услышали.
Речь идёт, конечно, не про однократный просмотр (прослушивание) рекламы, а про многократный, т.к. ролики часто повторяются.
Вариант "не смотреть рекламу" не подходит, т.к. не всегда есть возможность увернуться от пассивного прослушивания телевизора.
Вот я предлагаю запретить использовать в рекламе музыку, которая написана не специально для неё. Почему?
1. Музыка вам надоест и вы больше уже не сможете её нормально слушать отдельно от рекламы.
2. Музыка будет прочно ассоциироваться с рекламой, особенно, если вы её не слышали до рекламы, а потом услышали.
Речь идёт, конечно, не про однократный просмотр (прослушивание) рекламы, а про многократный, т.к. ролики часто повторяются.
Вариант "не смотреть рекламу" не подходит, т.к. не всегда есть возможность увернуться от пассивного прослушивания телевизора.
Комментарии (1)
23:58
const
Чтобы выяснить, по какой ветви алгоритма идти дальше, программа смотрит старший байт числа, получаемого из dll-ки и проверяет, равен он 1 (...01) или 2 (...10).
Число несёт две функции -- старший байт зависит только от версии библиотеки, а младший зависит от ряда обстоятельств.
Раньше всё работало, потому что число было фиксированным. Но потом я сделал, что младшие разряды принимают различные значения (так надо было сделать изначально, фиксированное значение было заглушкой).
После усовершенствования всё перестало работать, потому что старший байт не оказывался равен ни 1, ни 2. Стал разбираться.
Сначала оказалось, что я просто забыл его установить. Установил:
a|=0x0200;
(хотя значение младших и должно было меняться, старший байт зависел только от версии dll-ки, так что константа тут -- ок).
Не работает. Сделал вывод числа. Он мне показал, что старший байт равен -1.
Как?
Короче говоря, проверка значения a осуществлялась ещё до его инициализации из файла настроек, а значение по умолчанию (в конструкторе) было у него -1.
a=-1;
a|=0x200;//a==-1
Почему? Отрицательные числа представляются в дополнительном коде. Не вдаваясь в подробности, скажу, что минус единица выглядит как 0xFFFF. Поэтому поразрядное "или" с чем угодно даст ту же минус единицу.
Осталось понять, почему проверка тоже даёт минус единицу.
Чтобы проверить старший байт, в программе число сдвигается на 8 бит вправо. Если сдвиг арифметический, то должно остаться -1, что и происходит.
a>>=8; //a==-1
Почему должна остаться -1? Тут надо сказать, что сдвиг бывает арифметический и логический. Логический просто сдвигает разряды как есть. В случае логического получилось бы 0xFFFF>>8==0x00FF (каждая шестнадцатеричная цифра -- 4 бита). Арифметический же не трогает старший, знаковый бит (у отрицательных чисел он равен единице). И при сдвиге дублирует его слева, т.е. при арифметическом сдвиге четырёхразрядного двоичного числа 1011 получается 1101. Старший бит не трогаем, второй дублирует старший, первый это бывший второй, нулевой это бывший первый, ну а бывший нулевой пропал.
Тут становится понятно, что арифметический сдвиг вправо числа 0xFFFF на любое число разрядов так и оставит это число неизменным.
Поскольку проверка старшего байта и должна была производиться до инициализации с использованием файла настроек, я решил эту проблему, установив в конструкторе значение 255 (0x00FF) для числа, что вернуло нормальное поведение поразрядного "или" и сдвига.
Число несёт две функции -- старший байт зависит только от версии библиотеки, а младший зависит от ряда обстоятельств.
Раньше всё работало, потому что число было фиксированным. Но потом я сделал, что младшие разряды принимают различные значения (так надо было сделать изначально, фиксированное значение было заглушкой).
После усовершенствования всё перестало работать, потому что старший байт не оказывался равен ни 1, ни 2. Стал разбираться.
Сначала оказалось, что я просто забыл его установить. Установил:
a|=0x0200;
(хотя значение младших и должно было меняться, старший байт зависел только от версии dll-ки, так что константа тут -- ок).
Не работает. Сделал вывод числа. Он мне показал, что старший байт равен -1.
Как?
Короче говоря, проверка значения a осуществлялась ещё до его инициализации из файла настроек, а значение по умолчанию (в конструкторе) было у него -1.
a=-1;
a|=0x200;//a==-1
Почему? Отрицательные числа представляются в дополнительном коде. Не вдаваясь в подробности, скажу, что минус единица выглядит как 0xFFFF. Поэтому поразрядное "или" с чем угодно даст ту же минус единицу.
Осталось понять, почему проверка тоже даёт минус единицу.
Чтобы проверить старший байт, в программе число сдвигается на 8 бит вправо. Если сдвиг арифметический, то должно остаться -1, что и происходит.
a>>=8; //a==-1
Почему должна остаться -1? Тут надо сказать, что сдвиг бывает арифметический и логический. Логический просто сдвигает разряды как есть. В случае логического получилось бы 0xFFFF>>8==0x00FF (каждая шестнадцатеричная цифра -- 4 бита). Арифметический же не трогает старший, знаковый бит (у отрицательных чисел он равен единице). И при сдвиге дублирует его слева, т.е. при арифметическом сдвиге четырёхразрядного двоичного числа 1011 получается 1101. Старший бит не трогаем, второй дублирует старший, первый это бывший второй, нулевой это бывший первый, ну а бывший нулевой пропал.
Тут становится понятно, что арифметический сдвиг вправо числа 0xFFFF на любое число разрядов так и оставит это число неизменным.
Поскольку проверка старшего байта и должна была производиться до инициализации с использованием файла настроек, я решил эту проблему, установив в конструкторе значение 255 (0x00FF) для числа, что вернуло нормальное поведение поразрядного "или" и сдвига.
Комментарии (8)
23:59
1234
В 90-е годы были популярны кодовые замки с нажатием клавиш, механические. И клавиши на них затирались и можно было понять, какой код.
Вижу, поставили на одной двери такой. Код -- 38.
А был в метро, там тоже на одной двери такой. Код -- тоже 38.
Это что, код по умолчанию?
Вижу, поставили на одной двери такой. Код -- 38.
А был в метро, там тоже на одной двери такой. Код -- тоже 38.
Это что, код по умолчанию?
Комментарии (4)
22:34
Чёрный квадрат
Всегда должно быть понятно то, что нарисовано на иконке. И это должно вызывать ассоциацию с тем, что иконка делает. Но лично у меня порой возникает проблема распознавания -- я вижу иконку, но неправильно понимаю, что на ней нарисовано. Я знаю, что она значит, поэтому даже не задумываюсь, почему её значение не совпадает с тем, что я вижу. Один из самых чудовищных примеров этого -- иконка "Панель управления" из Windows 9x. Вот она:

Вроде понятно, что тут нарисованы отвёртка и молоток.
Однако я долго думал, что это некое животное, похожее на кошку, у которого одна нога синяя, а другая красная. Попробуйте его увидеть.
При этом вопроса "Почему на значке "Панели управления" нарисована кошка?" у меня не возникало.

Вроде понятно, что тут нарисованы отвёртка и молоток.
Однако я долго думал, что это некое животное, похожее на кошку, у которого одна нога синяя, а другая красная. Попробуйте его увидеть.
При этом вопроса "Почему на значке "Панели управления" нарисована кошка?" у меня не возникало.
Комментарии (5)
23:58
Ума не надо
Нарезали с папой резьбу на водопроводной трубе G 1/2 на даче.
Сломали нарезную машинку. Конкретно -- развалилась на части (!) чугунная основа у плашки. Плашка вот такая. До этого мы пользовались обычной плоской, но она уже затупилась, поэтому купили целый набор для нарезки.
Идём в ближайшие стройматериалы, говорим -- есть плашки?
Нам говорят -- есть только набор. И показывают набор. точно такой же, как у нас.
Мы -- мы один такой только что сломали.
Сломали нарезную машинку. Конкретно -- развалилась на части (!) чугунная основа у плашки. Плашка вот такая. До этого мы пользовались обычной плоской, но она уже затупилась, поэтому купили целый набор для нарезки.
Идём в ближайшие стройматериалы, говорим -- есть плашки?
Нам говорят -- есть только набор. И показывают набор. точно такой же, как у нас.
Мы -- мы один такой только что сломали.
Комментарии (2)
Некий специалист взял у нас на поверку два датчика. Когда он их вернул -- они не работали. Специалистов по данным датчикам всего два, при этом как только он нам датчик вернул, один из специалистов уехал в отпуск, а другой -- в командировку.
Поскольку в российском отделении предприятия-изготовителя нам ничего ответить не смогли (и сказали что добраться ни до одного из специалистов возможности сейчас нет), мы позвонили в иностранное представительство. Главное. А нам говорят -- "А кстати говоря ваш специалист из России в командировке-то -- тут, у нас. Сейчас мы вам его дадим". И дали.
От нас не скроешься!
Поскольку в российском отделении предприятия-изготовителя нам ничего ответить не смогли (и сказали что добраться ни до одного из специалистов возможности сейчас нет), мы позвонили в иностранное представительство. Главное. А нам говорят -- "А кстати говоря ваш специалист из России в командировке-то -- тут, у нас. Сейчас мы вам его дадим". И дали.
От нас не скроешься!
Комментарии (4)