Категория: Компьютеры

Заметки о программировании и на околокомпьютерные темы

Вложенные категории: Игры, Delphi

Windows 10 – допиливание напильником

Отключить IIS
Панель управления -> Удаление программ -> Включение и отключение компонентов Windows.
Почти ничего из списка не нужно. Важны оба .NET-фреймворка (без вложенных галочек), IE 11, Powershell (целиком), компоненты для работы с мультимедиа, поддержка SMB 1.0/CIFS, служба активации и службы печати (не все). Остальное по желанию, причём если что-то непонятно, как правило это вам не надо.

Открывать по умолчанию “Мой компьютер”, а не “Панель быстрого доступа”
Вид -> Параметры -> Открывать Проводник для: “Этот компьютер”.

Убрать библиотеки из панели навигации
Они и так убраны, но на всякий случай: Вид -> Параметры -> Вид -> Область навигации -> Показать библиотеки.
Или правой клавишей по панели навигации: “Показать библиотеки”.

Отключить OneDrive и убрать из панели навигации
Правой клавишей по иконке около часов – в настройках отключаем запуск с системой. Выходим.
gpedit.msc -> Конфигурация компьютера -> Административные шаблоны -> Компоненты Windows -> OneDrive. “Запретить использование OneDrive для хранения файлов”: “Включено”.
Перезагрузитесь. Если недостаточно, см. “как вообще убирать вещи из панели навигации”.
Тж. см. как удалить OneDrive навсегда.

Убрать HomeGroup из панели навигации
Отключить службы HomeGroup Provider и HomeGroup Client.
Если этого мало, переключить указанные ключи реестра:
How to Add or Remove Homegroup from Navigation Pane
How to disable HomeGroup feature

Как вообще убирать вещи из панели навигации
How to disable icons from Navigation Panel: ищете в реестре “IsPinnedToNamespaceTree”, смотрите, в каком это разделе. Найдя нужный раздел (HomeGroup, OneDrive и т.д.), IsPinned меняете на 0. Рядом в подразделе ShellFolder параметр Attributes, переключите 20-й бит: 1 = скрыть, 0 = показать.
Повторите эти же действия для всех подходящих результатов. Такие разделы могут быть в: HKEY_CLASSES_ROOT\CLSID, HKEY_CURRENT_USER\Software\Classes\CLSID\, а на 64-битной системе ещё в HKEY_CLASSES_ROOT\Wow6432Node\CLSID\ и HKEY_CURRENT_USER\Software\Classes\Wow6432Node\CLSID\.

Убрать папки в “Моём компьютере”
How to Remove the Folders from My Computer. В реестре ключ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\, поудалять лишнее.

Оверлей-иконки junctions/tortoishg/btsync и т.п. не видны
Это из-за того, что винда исторически поддерживает максимум 11 оверлей-иконок. OneDrive влез и вставил свои вперёд других. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers, удаляете всё, что касается One Drive (нужно стать владельцем этого ключа и его детей, и дать себе права на удаление).

Удалить ряд приложений по умолчанию (в т.ч. OneNote, 3D whatever)
Remove default Apps from Windows: открываете PowerShell под админом, Get-AppxPackage *OneNote* | Remove-AppxPackage.

Переименовать “Этот компьютер”
Включите иконку “Компьютера” на рабочем столе и переименуйте её. Это подействует в том числе и на название в адресной строке Проводника. Но не на тайл в Пуске. Чтобы переименовать тайл в Пуске, см. вопрос про тайлы.

Переименовать тайлы в Пуске, изменить им иконки
По большинству тайлов можно щёлкнуть правой клавишей и “Открыть расположение файла”. Обычно это подпапка “Главного меню”. Переименуйте соотв. ярлык и назначьте ему нужную иконку.
По “Этому компьютеру” так щёлкнуть нельзя, но иконка всё равно существует, лежит в AppData\Roaming\Microsoft\Windows\Start Menu\Programs\System Tools (папка “Служебные”).

Изменить пункты в Пуске
Параметры -> Персонализация -> Пуск -> “Выберите, какие папки будут отображаться”.

Секретное удобное меню в Пуске
Маленький сюрприз: щёлкните правой клавишей по “Пуску”. Видите, сколько всего полезного? Второй маленький сюрприз: AppData\Local\Microsoft\Windows\WinX – здесь в трёх группах лежат пункты этого меню, можно добавить свои.

Отключить перезагрузку без предупреждения
Пуск -> Параметры -> Обновления -> Дополнительно -> “Уведомлять о планировании перезагрузки”.

Отключить экран блокировки
Он красивый, но бесполезный и создаёт лишний шаг при логине:
gpedit.msc -> Конфигурация компьютера -> Административные шаблоны -> Панель управления -> Персонализация -> “Запрет отображения экрана блокировки”: “Включен”.
Lock Screen – Enable or Disable

Включить ввод Ctrl-Alt-Del
cmd -> control userpasswords2 -> Дополнительно -> “Требовать нажатия Ctrl-Alt-Delete”

Ещё пачка полезных советов.
И ещё пачка.
Как отключить Майкрософт следит за вами.

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

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

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

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

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.

Старые игры крупных фирм

Интересно находить связи между известными современными компаниями и старыми играми, которые те делали ещё будучи безымянными. Просто занятно, как современные конторы выросли из тех маленьких.

Например, Epic, которые сделали Unreal Tournament и теперь уже 16 лет выпускают продолжения и широко раскупаемые движки — это Epic Megagames, авторы старой-престарой задорной досовской аркады Jazz Jackrabit, которая была на всех дисках “1000 игр для IBM PC”.

Remedy, которые прославились Макс Пейном (а потом вторым), а сейчас снимают Алана Вейка и Квантум Брейк, давным-давно сделали отличные гонки с видом сверху Death Rally, тоже досовские, тоже с дисков “1000 игр”. Теперь их переиздали для мобильников и в трёхмерной версии, не знаю, такие же ли они увлекательные.

GSC Game World, авторы долгожданного в своё время Сталкера (подумать только, что уже 3 серии вышло и фирма успела развалиться). “Где-то я это название слышал”… Это то самое GSC Game World, которое было в “About” кривой, явно на коленке написаной виндовской переделки варкрафта-2 Warcraft 2000. В той версии, в которую я играл, в самой игре даже кампании не было, можно было только загружать карты через “Открыть файл”. GSC – это Grigorovich Sergey Constantinovich. Короче, Vasya Pupkin presents.

И само Близзард выросло из The Lost Vikings — в неё целое поколение играло. Тогда Близзард назывались Silicon & Synapse.

Вествуд уже почила, увы — сложно сказать, какие игры были у неё до известности, а какие принесли известность. Практически первая их игра, Dune 2, уже была крупной. Но Вествуд делала и милые квесты, например, “Кирандии”.

Третью часть Myst делала Presto Studios, которая до этого выпустила один из моих любимых квестов, The Journeyman Project (все три части).

Вот я уже шесть примеров вспомнил, ещё кто-нибудь знает?

Fry Cry

Недавно вышла GTA5, все скачали – и я скачал. Купил, поставил, поиграл 2 часа, на самом интересном месте где герои мстили тренеру по теннису экран вдруг покрылся радужной плесенью и сгорела видеокарта.
Обидно потому, что видеокарта у меня была неплохая, и ещё полтора-два годика до смены компьютера вполне протянула бы. Новые того же класса стоят 15-20 тысяч (дорого!), лишние FPS мне нафиг не нужны, а главное, сейчас все видеокарты пошли – ни в PCI Express, ни в Красную Армию, 28 см. в ширину и толщиной два с половиной слота. У меня там уже жёсткие диски начинаются, где у неё вентилятор стоит!

Все обычные танцы с бубном я выполнил – вытащил, счистил пыль, продул слот. Проверил, что вентилятор вращается, карта не перегревается. Драйверы удалил под корень и переустановил. Однако ничего не помогло.

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

Чтобы починить видеокарту, прожарьте её 15 минут в духовке на 180-200 градусах Цельсия.

В сети есть инструкции, как это делать. Почему это работает? Вот папа понял моментально. Друг знал, говорит, это дедовской метод (наверное, тоже бы догадался: он часто говорит, что электроника – это наука о контактах). Многие неполадки возникают от того, что какой-то контакт на плате рвётся — например, вики пишет, что после множества нагревов-остываний возникают микротрещины из-за того, что разные материалы при нагреве расширяются по-разному. А при высоких температурах припой плавится и понемногу расплывается, соединяя разрыв.

Такая починка, конечно, дело случая – легко спалить карту совсем. И дело может быть совсем не в контактах. И работать такая “прожаренная” карта будет сколько повезёт – в GTA на ней уже не поиграешь. Но если терять нечего, почему бы не попробовать.

Честно говоря, я ждал, что где-нибудь ошибусь и карта просто не заведётся вообще, уже даже в basic VGA режиме. Но я всё сделал достаточно аккуратно. Духовку разогрел, 5 минут пёк на 180, потом 5 минут повышал до 200, ещё 5 минут до 220 и ещё 2 минуты держал на этой температуре. Дал остыть, нанёс термопасту, приклеил обратно теплоотвод и кулер, вставил в компьютер, и… карта заработала.

Воу.

Google Code закрывается

Чему это учит? Привыкать к продуктам Гугл нельзя, даже к удобным. Больше я на эту удочку не попадусь, Google Hangouts, Plus – спасибо, кушайте сами.

Даже с Google Reader, с Jabber в чатах и с Google Code неудобно уходить, а все эти продукты строились на открытых технологиях – RSS, Jabber, SVN/Mercurial/Git/Markdown. По крайней мере, остаются сами RSS, логи чатов, контакты, исходный код, вики и багрепорты

Теперь представьте, если закроют Hangouts. Всё! Ищи друзей в других социальных сетях. Последние продукты Гугл все непрозрачные. Кому нужны такие сложности?

3 решения, которые лучше, чем то, что сделал гугл:

  • Поддерживать Google Code на плаву, не развивая. Одного-двух программистов хватит, чтобы чинить мелкие баги. Если проблема в спаме, ужесточить авторизацию / капчу.
  • Выделить Code в отдельную компанию и продать или пустить в свободное плавание.
  • Открыть исходный код движка и ввести функцию переброски проекта между хостерами.

Печальный выбор уходящих с Google Code:

  • GitHub — удобный, бесплатный, но нет поддержки Меркуриала.
  • BitBucket, которым больше нравятся деньги, чем опенсурс. И сайт неудобный — от авторов JIRA.
  • SourceForge, где можно смотреть рекламу и в закачки тебе подсунут малвари. Но зато у них открытый движок!

От чего ещё надо бы отказаться, пока гугл не прикрыл:

  • Tasks
  • Contacts
  • Окончательно уйти с гугловского джаббера.

Заголовок сообщения

Наверное, об этом тысячу раз писали, но заголовок веб-страницы должен выглядеть так:
Кто виноват и что делать? — блог Николая Чернышевского
Или даже проще:
Кто виноват и что делать?

Но не так:
Николай Чернышевский, философ, журналист и литературный критик — Личный журнал, интеллектуальные беседы каждую пятницу — Кто виноват и что делать?

Когда открыто несколько заметок, это превращается в:
[ Николай Черны… ] [ Николай Черны… ] [ Николай Черны… ] [ Николай Черны… ]

В закладках:
* Николай Чернышевский, философ, журналист и литературный кр…
* Николай Чернышевский, философ, журналист и литературный кр…
* Николай Чернышевский, философ, журналист и литературный кр…

Заголовок должен быть коротким.
Название конкретного материала всегда должно идти первым.
Если название ресурса добавляется, оно должно быть осмысленным, а не “…” и не “void”, как у некоторых.

Asus T101MT VGA cable replacement + pinout

Screen on my Asus EEE PC T101MT started behaving erratically, switching off and on as I turned and tilted the lid. I’ve dismantled the netbook and the problem was in the broken display cable. A couple of notes for anyone who cares:

  • Dismantling the body is not hard, this article explains it well. Be sure to note which screws go where.
  • To dismantle the lid, pull out the rubber caps glued around the display. There are screws underneath. After unscrewing them all, remove the lid cover. It’s stickied to the display, but no harm in tearing it off and no other way around.
  • Motherboard-to-display cable is FPD-Link (LVDS cable) + minor side load. Part number is 1422-00N6000, new ones can be bought on aliexpress for cheap. Promised 50 day free delivery is an upper bound; mine was delivered in 10 days.
  • There’s a hinge connecting the lid to the body with all the cables inside. It would seem that display cable is too big to go through it, but it can be done from its display connector side if you fold it in a particular way:
    (instruction pic)
  • The cable is 20 pins (motherboard) to 30 pins (display). There were pinouts for similar cables from other EEE PCs (1005pe, [1]). I’m posting the final one for T101MT here, checked with multimeter, just in case:

    (1422-00N6000 pinout)

    20 pin connector

    #Description
    13.3VDD
    2EDID eeprom power (3.3V)
    3EDID eeprom CLK
    4EDID eeprom DATA
    5VDD_EN (Active high, 3.3v)
    6VLED_EN (Active high, 3.3v)
    7GND
    8LVDS Channel 0 –
    9LVDS Channel 0 +
    10LVDS Channel 1 –
    11LVDS Channel 1 +
    12LVDS Channel 2 –
    13LVDS Channel 2 +
    14GND
    15LVDS Clock –
    16LVDS Clock +
    17GND
    18Backlight PWM ADJ
    19Led VCC (5V)
    20Led VCC (5V)

    30 pin connector
    Most similar connectors have the same pinout for the first 20 pins. The rest seems to be up to the model, GND if unused. “–” is no connection:

    #Description
    1GND
    23.3VDD
    33.3VDD
    4EDID eeprom power (3.3V)
    5Backlight PWM ADJ
    6EDID eeprom CLK
    7EDID eeprom DATA
    8LVDS Channel 0 –
    9LVDS Channel 0 +
    10GND
    11LVDS Channel 1 –
    12LVDS Channel 1 +
    13GND
    14LVDS Channel 2 –
    15LVDS Channel 2 +
    16GND
    17LVDS Clock –
    18LVDS Clock +
    19GND
    20
    21
    22GND
    23GND
    24Led VCC ( 5V )
    25Led VCC ( 5V )
    26Led VCC ( 5V )
    27
    28VDD_EN (Active high, 3.3v)
    29
    30VLED_EN (Active high, 3.3v)

Silent

Как правило, в консольных программах бывает настройка уровня подробности. Обычно она называется verbose. Иногда ещё бывает настройка quiet, которая отключает вывод большинства сообщений. Но редко поясняется, что именно будет выключено.

Предлагаю стандартную шкалу подробности вывода:
1. Silent. Программа не выводит ничего, даже в случае ошибки. Безмолвно завершается с кодом ошибки.
2. Quiet. Программа не выводит ничего, только сообщения об ошибке. Так принято по умолчанию делать в юниксе.
3. Normal. Программа сообщает, что она сейчас делает (из её функционала; например, программа, скачивающая файлы, может сообщать о начале закачки каждого файла).
4. Verbose. Программа объясняет, как она делает то, что делает. Например, “Подключаюсь к серверу… Запрашиваю файл… Файл найден, размер 1.5 мб. Создаю целевую директорию…” и т.п.
5. Debug. Программа вываливает все внутренние подробности происходящего, в том числе непонятные без исходного кода. По желанию и для удобства отладка может быть разделена по модулям (–debug=http), но подразумевает как минимум verbose в целом.

Мышка бежала, хвостиком махнула

На нетбуке с экраном 1024×600 почему-то стало разрешение 1024×768, т.е. часть экрана не видна.
Переустановил дрова видеокарты, не помогло.
Переустановил монитор, не помогло.
Перезагружался много раз, не помогло.
Жал на кнопку “сменить разрешение”, не помогло.
Копался в настройках драйвера, не помогло.

Переустановил дрова клавиатуры… помогло.