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

Если вы ищите информацию о программе с названием Logic Daemon, проверяющей формальную логику, её сайт logic.tamu.edu


 Instagram rss
    
Google Picasa Фото.Сайт EN

Мои резюме:

командная строка в Windows – минное поле

Отправлено 11 янв. 2016 г., 8:11 пользователем Anton Derbenev   [ обновлено 2 апр. 2016 г., 12:37 ]

У меня есть подозрение, что в недрах Microsoft есть специальная команда разработчиков, которая специально заботится, чтобы у всего, что связано с командной строкой Windows, были грабли, подводные камни и проблемы.

Примеры:
  1. %comspec% (cmd.exe) требует, чтобы все параметры после /C или /K были в кавычках. Наример, нельзя выполнить
     
    cmd.exe /C "%ProgramFiles%\notepad2\notepad2.exe" "%USERPROFILE%\Documents\test.txt"
    , надо
    cmd.exe /C ""%ProgramFiles%\notepad2\notepad2.exe" "%USERPROFILE%\Documents\test.txt""
    Что ещё хуже – cmd.exe маскирует этот косяк, и там, где "замечает" свой вызов, сам подставляет внешние кавычки (причём не всегда угадывает). Но остальные программы про это не в курсе! Например, это очень сильно мешает при использовании планировщика Windows.
  2. START "notepad.exe" – не работает. Работает 
    START "" "notepad.exe"
  3. "%windir%\System32\find.exe" /n "4" "test.txt" отдельно – работает.
    FOR /F "usebackq tokens=*" %%A IN (`"%windir%\System32\find.exe" /n "4" "test.txt"`) DO ECHO %%A – не работает. Работает
    FOR /F "usebackq tokens=*" %%A IN (`%windir%\System32\find.exe /n "4" "test.txt"`) DO ECHO %%A
  4. ECHO 123>test.txt – не работает.
    ECHO "123">test.txt – записывает "123" с кавычками.
    ECHO 123 >test.txt – с пробелом.
    Чтобы заработало без пробела, надо писать
    ECHO 12^3>test.txt
    или
    (ECHO 123)>test.txt
  5. ECHO – выводит ECHO is on.  или локализованную фразу (по русски – четыре длинных слова). Чтобы вывести пустую строку, надо писать
    ECHO.
    (с точкой слитно; также работает ECHO\, ECHO] и т.п.)
  6. Если внутри блока () будет комментарий со скобками, например, rem (проверка) , интерпретатор командной строки прочтёт закрывающую скобку как конец блока.
  7. FOR %%A in ("C:\test.file") DO ECHO %%A выводит C:\test.file независимо от наличия там test.file.
  8. Некоторые команды не меняют код ошибки ERRORLEVEL при вызове с неправильными параметрами командной строки. Самые назойливые примеры:
    1. NET SHARE (при этом NET USER – меняет)
    2. defrag.exe (на Win8 и выше его стоит запускать с ключом /O, на 7 этот ключ не поддерживается)
  9. До Windows Vista не было предустановленной переменной среды, в которой было бы указано расположение %USERPROFILE%\Local Settings\Application Data. В Vista добавили %LOCALAPPDATA%, но ещё добавили папку %USERPROFILE%\AppData\LocalLow, расположение которой снова не указано ни в какой переменной среды.
  10. Узнать hostname – нетривиальная задача. Есть переменная %COMPUTERNAME%, но там всегда в верхнем регистре и обрезано, если для NetBIOS оно "слишком длинное". Впрочем, его можно прочитать из реестра, только…
  11. При чтении ключей с помощью reg.exe проблемы начинаются, если в названии ключа есть пробелы, поскольку reg.exe никогда не выводит на экран только значение – оно выводится всегда после названия ключа и типа значения. Так что, чтобы, например, прочитать hostname, надо писать
    FOR /F "usebackq tokens=2*" %%I IN (`REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "Hostname"`) DO SET "Hostname=%%~J"
    но чтобы прочитать NV Hostname, надо писать уже
    FOR /F "usebackq tokens=3*" %%I IN (`REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "NV Hostname"`) DO SET "NVHostname=%%~J"
    Интересно, что reg.exe был уже в XP (в NT4 и 2000 он был в Resource Kit). Но XP'шная команда в выводе REG QUERY разделяет поля tab'ом (символ с кодом 8). Поскольку в названиях ключей tab'ов не бывает, такой вывод намного проще парсить (однако, от шапки всё равно никак не избавиться). Примерно так:
    FOR /F "usebackq tokens=2* delims=<tab>" %%I IN (`REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "Hostname"`) DO SET "Hostname=%%~J"
    указанный жирным курсивом 
    <tab> должен быть в тексте пакетного файла в виде одного символа с кодом 8, а не в виде треугольных скобок и букв. В таком случае число после tokens= не зависит от количества пробелов в названии ключа.
    Кстати, если читаете путь из реестра, молитесь, чтобы там не было международных символов. Обнаружить их в командной строке – нереально, а выдаются reg'ом они в кодировке ANSI (напоминаю, cmd.exe работает в OEM), поэтому при наличии не-ASCII символов, при попытке совершить chdir (или что угодно другое) пакетный файл будет поджидать облом.
  12. Копирование папок – эпичный пример фейла (или win'а команды из первого абзаца?). Типичная команда для копирования папки в Windows:
    xcopy s:\WindowsImageBackup r:\WindowsImageBackup /E /I /Q /G /H /R /K /O /Y /B /J
    смогли с первого раза посчитать количество ключей? Ну ок, наверное, не все они требуются. Вот необходимый минимум, чтобы xcopy не остановился где-нибудь посередине и не задал тупой вопрос, ожидая интерактивного ответа: /E /I /G /H /R /Y. Да, кстати, Вы использовали copy? Облом будет поджидать Вас незаметно :) Ключи copy указываются перед аргументами откуда и куда, xcopy – после аргументов.

запуск µTorrent без ругательств

Отправлено 18 сент. 2015 г., 0:00 пользователем Anton Derbenev

Выложил скрипт для запуска µTorrent и избавления от пары его ругательств насчёт обновлений.

PCI Latency Timer

Отправлено 7 мая 2015 г., 0:03 пользователем Anton Derbenev   [ обновлено 7 мая 2015 г., 0:06 ]

В BIOS Setup многих x86 систем есть параметр PCI Latency Timer.

Долгое время я устанавливал его на 128 тактов для всех систем,  в BIOS Setup которых заходил, поскольку субъективно это давало большую производительность при недостатке ресурсов.

PCI Latency Timer – это число тактов, которое устройство может занимать шину, прежде чем оно будет должно передать контроль за шиной другому устройству. Т.е. устройство может освободить шину и раньше, если она не нужна, но дольше удерживать не может.

Передача управления занимает время, так что, чем больше Latency Timer, тем выше ПСП и ниже нагрузка на процессор. Но чем меньше Latency Timer, тем ниже задержки.

Есть куча материала на эту тему, но в основном – пространные теоретические рассуждения, причём часто основанные на ошибочных догадках. Сегодня наткнулся на статью, которая, наконец-то, прояснила для меня, почему это давало большую производительность, и почему это не всегда полезно: https://www.mythtv.org/wiki/PCI_Latency

Вкратце:

  1. Не влияет на PCI-Express.
  2. Для большей части материнских плат по умолчанию Latency Timer – 32 такта, и это разумное значение. Оно устанавливается для всех устройств.
  3. Драйверы устройств (а в Linux – и setpci* в командной строке) могут менять это значение. Оно может быть разным для разных устройств. Контроллеры IDE/SATA/USB обычно остаются с задержкой, установленной в BIOS Setup.
  4. Проблемы начинаются, если два устройства обмениваются информацией, и у них разный Latency Timer. Устройство с большей задержкой будет ждать окончания передачи, пока устройство с короткой задержкой будет порциями заполнять буфер. Особенно заметно это при видеозахвате (у устройства видеозахвата Latency Timer будет увеличен драйвером, если он слишком маленький, а IDE контроллер останется с 32 тактами).
  5. Большая задержка может быть проблемой, например, работе со звуком: объём передаваемой информации небольшой, а низкие задержки важны. И у некоторых звуковых карт для уменьшения задержки можно уменьшить буфер до критически низких значений, например, 8 сэмплов. Устройства с большим Latency Timer будут слишком долго удерживать шину, и звуковая карта не будет успевать* отдавать данные при записи (будут пропуски) или получать при воспроизведении (будут паузы/щелчки/шум).

Запуск программы, требующей прав администратора, с ограниченными правами

Отправлено 29 мар. 2015 г., 3:31 пользователем Anton Derbenev

Авторы некоторых программ либо слишком наглые, либо не очень умные, и такие программы требуют прав администратора даже когда они (права) не сильно и нужны.

Например, софт некоторых видеорегистраторов, используемых в компании, где я работаю. Или вот RaidCall, который я недавно установил (но вообще не рекомендую, та ещё хрень).

Довольно долго я искал способ, как избавиться от запроса повышения привилегий (и пароля администратора, если текущий пользователь – не админ).

На superuser.com есть вопрос по этому поводу, но все дельные ответы указаны прямо в вопросе. Предлагается два варианта: либо менять манифест в файле (но тогда изменится контрольная сумма, а некоторые программы её проверяют), либо запускать через Process Explorer: Run as Limited User (только GUI). Ещё один вариант нашел на technet.microsoft.com – использовать psexec.exe -l. Это то же самое, что и запускать через Process Explorer, но не требует ручных действий (можно сделать ярлык). Ирония в том, что запуск процесса с органиченными правами *требует прав администратора*.

Собственно, последний вариант можно слегка облагородить: администратор делает задачу на запуск через psexec в планировщике, добавляет разрешение для пользователя, который будет её запускать (c:\Windows\System32\Tasks), а у пользователя просто создаётся ярлык для запуска этого задания (schtasks /run /tn название).

Но и этот вариант далеко не идеальный: если запускающий пользователь – не тот, от чьего имени запускается задание, он не увидит окна программы. А если бы увидел, программа будет работать с профилем того, от чьего имени запущена через планировщик. Тем не менее, он вполне подходит для случаев, когда администратор хотел бы запустить с органиченными правами программу, которая требует прав администратора.

Порядок действий для запуска RaidCall:

  1. Сделать задание в планировщике Допустим, оно будет в папке LogicDaemon и назваться RaidCall.
    1. Поставить галочку "Запуск с максимальными привилегиями"

    2. Действие – запуск psexec.exe с параметрами -l -d "C:\Program Files (x86)\RaidCall.RU\raidcall.exe"

  2. В ярлыке для запуска:
    %SystemRoot%\System32\schtasks.exe /Run /TN "LogicDaemon\RaidCall"

Скрипт для запуска UserBenchMark почти «без рук»

Отправлено 18 дек. 2014 г., 10:54 пользователем Anton Derbenev   [ обновлено 28 янв. 2015 г., 3:25 ]

Мне очень нравится UserBenchmark. И AutoHotkey :)

Не нравится мне в UserBenchmark то, что его надо либо скачивать и устанавливать, либо скачивать zip и вручную распаковывать, а после тестирования – удалять "следы" (он оставляет 100 мегабайтовые временные файлы, с помощью которых проверяет скорость работы жесткого диска/SSD/флэшек).

Чтобы вручную не скачивать и не распаковывать, а также автоматически удалять "следы" тестирования, я запилил скрипт.

В качестве бонуса скрипт отправляет ссылку на результаты через в мою гугл форму (Warning! Туда ещё и IP записывается), так что, если стесняетесь, или Вам жалко, закомментируйте (или удалите) в скрипте строчки с

TrayTip %TrayTipHeader%, Отправка ссылки на результаты в форму…
по
} Until success

Как сделать, чтобы данные отправлялись в Вашу форму (а не в мою) я расскажу, если хоть кто-нибудь проявит интерес и спросит об этом. А то у меня есть подозрение, что кроме меня этот бложек всё равно никто не читает :)

Календарь Google в Thunderbird работает, причём лучше, чем раньше!

Отправлено 17 окт. 2014 г., 10:00 пользователем Anton Derbenev   [ обновлено 17 окт. 2014 г., 10:01 ]

Для всех пользователей Thunderbird с Lightning и Provider for Google Calendar сегодня хорошие новости! Календарь работает, причём теперь поддерживает задачи, и, чтобы подписаться на календарь, больше не надо искать и копировать адрес ics, достаточно просто поставить галочки в списке :)


Аутентификация теперь работает через oauth2, и, если Вы используете двухфакторную, больше не надо создавать пароль приложения.


Но начиналось всё не так хорошо.

Во-первых, Google объявил, что с 17 ноября 2014 перестанет работать старая версия протокола авторизации, через которую, собственно, и работал Provider for Google Calendar. Разработчик дополнения начал ускоренно пилить новую версию, и в начале октября выложил готовый вариант 1.0 на addons.mozilla.org. Но, как оказалось, там полно ошибок (Provider-то был переписан для нового протокола с нуля!), и после вала негативных отзывов в тот же день разработчик удалил его с addons.mozilla.org.

Однако у некоторых, в том числе в нашей организации, он успел обновиться. На этом этапе у наших пользователей особых глюков не было, просто пришлось разобраться с новым окном входа. Зато у этих пользователей в календаре начали работать задачи! (вообщем, не всем оно надо, да и мы давно Google Tasks Sync используем, но всё равно).

Далее разработчик пару дней выпиливает основную массу ошибок, и выкладывает версию 1.0.1. Её уже скачивают Thunderbird’ы десяток тысяч пользователей, и начинается… у всех перестают работать календари.

Засада – в том, что для обращения к новому API Google (v3) требуется ключ разработчика, и Google ограничивает количество запросов в сутки, которые могут отправляться с помощью одного ключа. Так что утром несколько минут календарь может работать, и всё.

В течение 3-4 дней разраб вёл переговоры с Google (подробности не раскрываются), и всё это время пользователи бомбили официальную багзиллу. Разраб даже завёл специальный форум по Provider for Google Calendar, чтобы пользователи могли выпустить пар. А проблема-то не с Provider, который “ни у кого не работает”, а с ограничениями Google!

Вообщем, в конце концов удалось договориться, и сегодня Google то ли сильно расширил, то ли отменил квоту для этого дополнения, и все смогли вздохнуть свободно :)

P.S. Thunderbirthday конфликтует с новой версией Provider for Google Calendar, календари не добавляются. Чтобы добавить календарь, Thunderbirthday надо (временно) отключать.

Дэвид Дойч. Структура реальности

Отправлено 21 июн. 2014 г., 4:34 пользователем Anton Derbenev

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

Для тех, кто считает, что что-либо понимает в философии, физике, математике, биологии, информатике, книга окажется весьма интересной. Для остальных, возможно, тоже.

Основная суть – объяснение окружающего мира на основе квантовой физики, принципа Тьюринга, теории Дарвина и философии Поппера.

Но не надо спешить, ибо намного интереснее, когда она даёт объяснения вопросам, разрешить которые читатель безуспешно пытался годами :)


Рецензия на книгу «Умный Дизайн» Джеффа Джонсона («Designing with mind in mind», Jeff Johnson)

Отправлено 13 апр. 2014 г., 10:00 пользователем Anton Derbenev   [ обновлено 4 мая 2014 г., 2:57 ]

Как-то прочитал книгу, и написал отзыв, надеясь, что её оценят коллеги.
Но по факту, как я понял, прочитало её два человека.

В надежде, что труд не пропадёт зря, выкладываю сюда. Книга реально полезная, рекомендую! (всем, не только дизайнерам и около, см. http://kvisaz.livejournal.com/592772.html)
Открыть в Документах Google

WinRAR 5.0 круче 7-Zip

Отправлено 12 мар. 2014 г., 21:56 пользователем Anton Derbenev   [ обновлено 12 мар. 2014 г., 21:57 ]

Сравнение WinRAR 5.0 и 7-Zip
Делал архив ежемесячного бэкапа папки с документами компании.

Решил проверить, какой реальный результат показывает новый WinRAR 5.0 по сравнению с 7-Zip. Оказалось, WinRAR и заметно быстрее, и (в данном случае) сжимает сильнее!

Заметным фактором в данном случае, думаю, было то, что в папке много сканированных документов (PDF и JPEG), которые почти не сжимаются обычными алгоритмами, а у WinRAR в арсенале – дедупликация (т.е. все одинаковые файлы он сжимает один раз и записывает в архив как hardlink'и) и мультимедиа-сжатие.

Однако основной объём всё же составляли гигантские (100Мб) таблицы xls службы по работе с операторами, причём в них нет картинок – только текст, числа и формулы. Поэтому и коэффициент сжатия такой получился у обоих. Кроме того, поскольку архив ежемесячный, а из папки ничего не удаляется, там много дубликатов.

И ещё, я слегка подыграл 7-Zip'у: в отличие от WinRAR, он плохо сжимает уже сжатые данные (zip), и результирующий архив сильно меньше, если их предварительно распаковать и снова запаковать, но уже без сжатия (store). Так вот, все архивируемые od? файлы были таким способом перепакованы.

Ещё один (первый) RAR я сделал до перепаковки, результат – 1 623 835 434 байт (против 1 611 695 951 байт для перепакованных данных) – т.е. на 0.7% больше. 7-Zip же, при работе на распакованных данных, отстал на 7.7% (архив 7-Zip из перепакованных данных получился размером 1 735 865 084).

Время сжатия на моем ноутбуке 7-Zip-ом – около 20 часов, WinRAR справился за 8 часов.

P.S. Параметры обоих были выбраны максимальными, почти без тонкой настройки. 7-Zip – Ultra, LZMA, 64Гб словарь; WinRAR – Best, 128MB словарь. LZMA2 со 128Мб словарём для 7-Zip выбирать пробовал, но в этом случае за ~ 30 часов он сжал только четверть всего объема. Продолжать я не стал.
Параметры архивации WinRARПараметры сжатия 7-Zip

Скрипты для автоматической установки LibreOffice без лишних вопросов и мусора

Отправлено 30 янв. 2014 г., 8:11 пользователем Anton Derbenev   [ обновлено 30 янв. 2014 г., 8:15 ]

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

В архиве не только сами скрипты, но и тройка нужных дополнений, а также скрипт для скачивания четвертого.

1-10 of 55