Записи за месяц: July 2015

Windows 10 – первые впечатления

Загружается в полтора раза дольше. Работает чуть медленнее.
По умолчанию включен веб-сервер IIS, создаёт папку inetpub.
Установлен OneDrive, удалить нельзя. Ещё и в панели быстрого доступа в Explorer сидит.
Установлен OneNote, удалить нельзя.

При установке поудаляла без спросу приложения, которые ей показались ненужными. Например, Google Drive.
В панели быстрого доступа опять вылез неудаляемый Home Group, старые средства удаления не работают! Майкрософт победила и запихнула-таки его в рот пользователю. Можно убрать, отключив службу HomeGroup.

“Мой компьютер”, наконец-то нормально названный “Компьютер” в Windows 7, теперь стал “Этот компьютер”. Эти документы. Рисунки эти.

Иконка нарисована в стиле Малевича.

В моём компьютере сверху над дисками появилась группа “Папки”, куда впихнули Загрузки, Видео, Документы и всё прочее. Удалить нельзя.
Эти же папки вылазят над дисками в панели быстрого доступа. Если Мой компьютер развёрнут, то там Загрузки, Видео, Документы и вся прочая шелудень по два раза!

Раздел Favorites / Links в панели быстрого доступа называется “Панель быстрого доступа”. Распёрло, а переименовать нельзя.
Когда нажимаешь Win-E, то раньше открывался Мой компьютер, а теперь панель быстрого доступа! Хотя она и так слева есть.

В пуске больше нельзя сделать Pin to Start Menu. Это было очень удобно! Теперь там только часто используемые программы. Можно pin как тайл, но у тайлов нет выпадающего списка “последних документов”, что тоже было удобно.

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

Открыть по правой клавише Главное меню в проводнике больше нельзя. Править его из Пуска тоже нельзя.
Завершение работы раньше было удобно сделано так, что по нажатию кнопки компьютер выключается, а если надо, выпадает меню с дополнительными опциями. Всё сломали, теперь всегда выпадает меню.

Сама кнопка “Завершение работы” раньше была отнесена в сторону, теперь прямо между “Все приложения” и “Параметры”, чтобы всегда страшно было промазать.

Справа появилась панель уведомлений, у неё куча загадочных кнопок: “Подключиться”, “Примечание”, “Не беспокоить”, “Расположение”. Вопреки традициям винды, что на любую вещь можно навести мышь и вылезет подсказка, никаких подсказок нет.

Если нажать “Примечание”, открывается окно “Для этого вам придётся купить программу в интернете” с чем-то типа галочки “Делать так всегда” и единственной кнопкой “Да”, я точно не запомнил, я его крестиком закрыл.

Установился браузер Edge, но интернет эксплорер не удалился. О чём я мечтал больше, чем об Интернет Эксплорере? О двух Интернет Эксплорерах!

Обновления теперь всегда устанавливаются принудительно, предоставлен широкий выбор: Windows перезагрузится сама как только ей вздумается, потеряв все несохранённые изменения (по умолчанию) – или она может вас предупредить (не рекомендуется, потому, что зачем вам заранее огорчаться). Также в некоторых версиях можно “отложить установку обновлений”, что именно делает эта галочка – неизвестно. Снизу есть кнопка “Подробнее”, она открывает браузер с бингом. Типа, иди погугли.


Ошибка, Майкрософт. Ошибка!

В службах появилась новая порция неотключаемых служб с описаниями “Обеспечивает взаимодействие системных компонентов” и “Клиент протокола сервера обслуживания”. и “Клиент протокола сервера обслуживания”.
Кажется, в этот раз Майкрософт окончательно обленилась и уже даже не пытается притворяться, сочиняя тавтологию типа:
“Поддерживает подключение к серверу обслуживания и выполняет запросы на обслуживание при необходимости. При отключении этой службы программы, зависящие от клиента протокола сервера обслуживания могут перестать работать”.
Теперь новые службы выглядят так:
* CoreMessaging: Manages communication between system components.
* embeddedmode: embeddedmode
* Enterprise App Management Service: Enables enterprise app management.

Установила мне какую-то Karaoke Digital Mixer Service без описания. К-караоке? Поём и пляшем?

Новая панель управления, в системе их уже 4 вида: от 9x с иконками, от XP с панелью задач слева, от Windows 7 такая, где в центре настройки и вокруг всё белое, и от Windows 10 в андроидном стиле с меню слева.
Список установленных программ продублирован в последних двух (новый хуже).

При установке есть галочка “Повысить скорость работы”, которая означает “Отправлять отчёты, историю веб-сайтов, пароли, контакты и документы в Майкрософт” (если нажать “Подробнее”).

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

Обновление до Windows 10

Похоже, на обновлении до Windows 10 Майкрософт получит урок, который гласит “планируй, но дай упрямым сделать по-своему”. Они хотели раздавать обновление на компьютеры волнами, чтобы уменьшить нагрузку на сервера. Каждый компьютер обновится, когда придёт его время…

Разумеется, интернет ждать не захотел. В результате форумы бурлят людьми, которые:
1. Пытаются всеми правдами и неправдами заставить обновление запуститься сразу же.
2. При этом ковыряют кочергами в нутре системы, разбивая там тонкие лампы и куроча микросхемы.
3. Обновление как не ставилось, так и не ставится, а у некоторых уже и не поставится благодаря мудро удалённым файлам и не доведённым до конца сглючившим установкам, которые были запущены с переведёнными в будущее часами.
4. Люди бесятся, что Майкрософт сделала такое тупое обновление.
5. И мало того, каждый раз заново перезапускают скачивание, увеличивая нагрузку на сервера.

И волки голодные, и овец сожрали!
Надеюсь, посмотрев на это, они вернут в Windows 10 возможность отказаться от обновлений.

Летний сезон

Посмотрел два сериала, которые ждал – GATE и Shimoneta. Всё-таки, J.C.Staff знают, что делают. Разница огромна. У GATE отличный исходник, но экранизация в лучшем случае никакая, если не портит его. И сразу же видно, почему такое впечатление, на примере Shimoneta. Исходник Shimoneta… нормальный. Неглупый, но никаких crowning moment of awesomeness. Тем не менее, он исполнен в аниме отлично. Голоса, музыка, физиономии героев, выбор опенинга-эндинга, нарезка сцен – это всё сделано твёрдо в кассу. Всё-таки, что ни говори, попасть на экранизацию к J.C.Staff для ранобе большое везение.

А Гейт попал к каким-то аниматорам хентая, которые рисовать умеют, а леса за деревьями не видят. Единственная знакомая им нотка в манге была comic relief черта главного героя, что он отаку, ну вот её-то они и раздули на всю серию.

Ещё посмотрел (не досмотрел пока) Kekkai Sensen по манге от автора Тригана – в общем неплохо, но 12 серий явно мало, сюжет так и не успел начаться, отдельные рассказики какие-то. Из-за этого сериал не запоминающийся. Жалко, что не сделали сразу 26, тогда бы, как с Триганом, рассказики перешли в основной сюжет как раз вовремя. А так – персонажи харизматичные, Ясухиро-сенсей на пенсию ещё не вышел, это хорошо.

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

1. Пистолет всегда считается заряженым.
2. Всё, что похоже на пистолет, считается пистолетом.
3. Никогда не направляй пистолет на то, что не хочешь убить.
4. Снимай предохранитель только когда дуло смотрит на цель.
5. Клади палец на курок только когда дуло смотрит на цель.
6. Знай, что у твоей цели за спиной.
7. Стреляй несколько раз.

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

Solved: Delphi XE3 64-bit debugger fails to run

Symptoms:

Delphi XE3 sometimes fails to run 64-bit applications under a debugger. Code would compile, but the part where Delphi switches to debug layout never happens, Delphi just pops a message saying "Cannot run the debugger".

32-bit debugging continues to work normally, and so does "Run without debugging".

The funny part is that this happens irregularly. Sometimes the first attempt would succeed, and then the debugger would run all the time in all instances of Delphi. But if it fails the first time then it would always fail even if you restart Delphi.

I also noticed that the earlier I launch Delphi + debugger, the higher is the chance it would run (and then continue working). It seemed like there was something I was doing or the computer was doing sometime after boot that broke the debugger if I hadn't launched it yet.

Solution:

Stop the "Internet connection sharing" service and restart Delphi.

What might have contributed:

– Uninstalling older versions of Delphi on the same PC.
– Disabling Windows Firewall
– Disabling Windows Defender

(Diagnostics process)

Diagnostics process:

Looking at the successful and failed debugger launches with Process Monitor, in both cases Delphi runs a remote debugger. But on the successful run it's dbkw64_17_0.exe (64 bit) while failed runs spawn rmtdbg170.exe (32 bit). Both are Delphi debuggers, but I suspected that the second one is only supposed to be used for 32 bit debugging.

Further investigation showed that in both cases dbkw64_17_0.exe launches initially, but in the second case it terminates shortly afterwards. Delphi then tries to connect to it through TCP, unable to do so, and restarts it automatically. But the code that does the restart probably wasn't updated to 64 bit and launches 32-bit rmtdbg170.exe instead.

Anyway, the problem lies in the initial instance of dbkw64_17_0.exe terminating. Comparing Process Monitor logs, both successful and failed runs load the libraries and then work with winsock. Stack in the final calls indicates ws2_32.dll's socket() is running – the debugger is probably trying to open it's command socket for listening – after which failed instance abruptly terminates (Thread Exit, Process Exit). I figured socket() probably returns with an error.

Using rohitab's Api Monitor I tried to find out the error code, but this didn't work out. Api Monitor successfully traced all the calls until roughly WSAStartup(), but no further – the last bunch of calls just before the termination always got lost, perhaps the injected driver wasn't being able to send it back to the main app in time before the application terminated.

Then I opened dbkw64_17_0.exe for debugging in Visual Studio. I set a breakpoint to {,,ws2_32.dll}socket, caught the execution there and studied what happens step by step. Turns out, socket() was successful. It was followed by setsockopt call, also successful (to know which functions we were stepping into, I used VS's standard ability to load Windows DLL symbols from Microsoft servers). Then dbkw64_17_0.exe called bind() which failed.

My initial guess was that someone else occupied the port it needed. Checking bind() parameters at MSDN, I looked into RDX, RCX, R8, R9 registers which host parameters in x64 calls, namely the memory referenced by RCX, which kept the requested family and port number. It turned out to be 0xC0F3 but it was unoccupied.

I then traced the call to bind() and from the internal call to WSPBind() got the error code: 0x1D27, that is 10013 (WSAEACCES: Permission denied. An attempt was made to access a socket in a way forbidden by its access permissions).

This code has no single specific reason for it. From the internet it looks like it appears when some driver or network-related service misbehaves. I tried stopping network related services one by one, until finally bind() succeeded. The infringing service was "Internet connection sharing (ICS)". As long as I stop this service, the debugger launches normally, and so long as ICS is running, the debugger would not start.

The reason why sometimes the debugger would run and then run always, is probably that ICS hadn't yet been started or did not yet harm the network stack at the time. If the debugger run at that point, it would bind the socket, and for whatever reason binding at that port would then continue working later. But if the debugger was initially launched after the harm has been done, it wouldn't be able to bind to the port neither once nor at all.