Дисклеймер

Внимание: в этом блоге могут описываться события, явления и факты при помощи ненормативной лексики.

Убедитесь, что Вы готовы к этому.


Показаны сообщения с ярлыком решение проблем. Показать все сообщения
Показаны сообщения с ярлыком решение проблем. Показать все сообщения

вторник, 30 июля 2019 г.

Несколько простых правил .htaccess

В очередной раз были замечены ошибки 404 в журнале моего сайта. Это не удивляет, поскольку ссылки периодически записываются с ошибками, туда добавляются различные символы и т.п.

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

В моём примере это веб-сервер Apache 2.4 (и 2.2), потому правки вносятся в файл .htaccess

1. Ошибки с %C2%A0 на конце URL

Причина: умные люди говорят, что это WISIWYG-редакторы нередко добавляют   куда не следует, а потому мы и получаем такие ошибки.

Решение:
RewriteRule ^(.*)\xC2\xA0/?$ /$1 [L,R=301]

Правило выше удаляет %C2%A0 на конце ссылок. Т.е. URL вида site.com/path%C2%A0 преобразуется в site.com/path.

2. %20 (пробелы) в URL

Причина: обычная опечатка или проблемы при форматировании, репостах-перепостах.

Решение:
RewriteRule ^(.*)\x20(.*)/?$ /$1$2 [L,R=301]

Это правило удаляет пробел или %20 из любой его части. Таким образом, URL вида site.com/pa%20th (site.com/pa th) и site.com/path%20 (site.com/path - с пробелом на конце) будут преобразовываться в site.com/path
 
3. Ошибки с %23 в URL

Причина: знак # в пути кодируется в %23, что иногда (из-за проблем с кодировками?) не отрабатывает как положено и приводит к ошибкам 404.

Решение:
RewriteRule ^(.*)\x23(.*) /$1#$2 [L,NE,R=301]
Эта строка переписывает ссылки вида site.com/path%23anchor на site.com/path#anchor


Примечание: NE - флаг NoEscape. Нужен для того, чтобы символ # не преобразовывался в %23 обратно (кстати, этот же пример как раз приведён в документации).

Также можно сделать переадресацию при такой ошибке не на якорь (anchor) в содержании страницы, а просто открывать стандартным образом. Для этого нужно удалить из правила следующее: ^(.*)\x23(.*) /$1#$2 [L,NE,R=301].
Таким образом, получится RewriteRule ^(.*)\x23 /$1 [L,R=301]
В этом случае ссылка site.com/path%23anchor будет переадресовывать на site.com/path.

Ну и, разумеется, возможно, это не самые изящные решения, но у меня всё работает как положено на разных хостингах с apache 2.4.10 и 2.2.15.

среда, 28 декабря 2016 г.

Как я в ДНС мышку возвращал


История с хэппи-эндом, без мата и экстремизма.

Дисклеймер: защита прав потребителей — не моя специализация, у меня совсем другая сфера права (IP), поэтому прошу оценивать пост как просто историю из жизни одного человека (да, юрист тоже человек).

Купил я, значит, взамен служившей мне много лет Bloody V5, внезапно утратившей способность скроллить, мышку Steel Series Rival 100. Брал по принципу «по описанию вроде характеристики норм, много кто пользует, значит и мне сойдёт» и решил приобрести такую по пути из суда в ближайшем салоне сети «ДНС». В магазине особо не исследуешь, показалась мелковатой, но больше размерами моделей от Steel Series в наличии не было. Покупать временную мышку А4 или Logitech (читать — «выкидывать деньги на ветер до покупки комфортной мышки») желание не было. А работать нужно.

Примечание: большая часть моего рабочего времени — работа с документами, их составление, редактирование, анализ и т. п., поэтому комфорт во время работы для меня очень важен.

При покупке обратил внимание на небольшие царапинки на тефлоновых ножках, но внимания особого не придал. Ножки ("скейты") — расходник же по большому счёту. Коробка была открытой, мало ли кто по столу пошаркал проверить работу мыши, вот и царапки.

Дома попробовал пользоваться мышой и сразу понял, что не моё: надо побольше для моих рук и моего хвата (полной ладонью — palm grip). Потому решил воспользоваться правом, предусмотренным ст. 25 ЗоЗПП, а именно, правом на обмен не бывшего в употреблении товара, сохранившего товарный вид, бирки и т. п., не подошедшего по фасону / размеру / цвету / габаритам / комплектации. Мышка дома пробовалась на коврике QcK от Steel Series, и учитывая моё общее аккуратное отношение к вещам, следов эксплуатации не прибавилось совсем. Т.е. их всех видимых следов использования — уже упомянутые выше царапинки на ножках.



Относимость мышки к технически сложным товарам (ТСТ) согласно «Перечню непродовольственных товаров надлежащего качества, не подлежащих возврату или обмену на аналогичный товар других размера, формы, габарита, фасона, расцветки или комплектации» пока опускаем. Да и ранее я менял уже мышки в «ДНС», никто на ножки пристально не смотрел.

Использовать мышку я прекратил, и "пофиксил" скролл у старой мыши Bloody v5 пассатижами - стало трудно крутить, но хотя бы работало).

Соответственно, затем созвонился с сотрудником магазина, объяснил ситуацию, мне сказали «да, окей, обменяем на другую модель с доплатой вообще без проблем». Но когда я явился для обмена, оказалось, что не всё так просто. Управляющий магазина сослался на царапины на ножках (которые, напоминаю, были с самого начала) и сказал, что «товарный вид утрачен, мышь была в употреблении, обмен по 25-й статье сделать не можем». Продавец, продавший мне эту мышку, присутствовавший при этом диалоге, добавил: «я Вам эту мышь продавал, никаких там царапин не было». Разумеется, мне никто не поверил, что я видел царапинки и всё равно купил мышь.

При мне при этом открыли другую коробку (которую привезли взамен купленной мной модели, т. к. их нечасто берут по словам продавцов) и показали мышь без царапин на ножках. Мои замечания о том, что открывается новая мышь в запечатанной коробке, и что в наборе присутствует Quick Start Guide (которого у меня не было) остались без внимания. В общем, мне пожелали удачи.

Кто-то может бы и остановился на этом, но мне стало немного обидно, и я решил это так не оставлять.

суббота, 20 февраля 2016 г.

CS:GO и ошибка Could not find required OpenGL entry point 'glGetError'!

Решил, значит, зайти в Counter-Strike Global Offensive, чтобы посмотреть демо из Overwatch и причаститься к наказанию адептов WH, AIMbot и прочей нечисти, заодно и отдохнуть от работы.

Разумеется, перезагружаться в Windows для такой цели не стоит, поэтому спокойно запускаю Steam для Linux, жму на кнопку запуска,

и вот незадача - вылезает бессовестное окошко с заголовком:

Could not find required OpenGL entry point 'glGetError'! Either your video card is unsupported, or your OpenGL driver needs to be updated.


При попытке запустить скрипта CS:GO напрямую, получаю вот такое:

ivan@pc ~ $ /SteamLibrary/steamapps/common/Counter-Strike Global Offensive/csgo.sh
SDL video target is 'x11'
SDL failed to create GL compatibility profile (whichProfile=0!
PROBLEM: You appear to have OpenGL 0.0.0, but we need at least 2.0.0!
Could not find required OpenGL entry point 'glGetError'! Either your video card is unsupported, or your OpenGL driver needs to be updated
/SteamLibrary/steamapps/common/Counter-Strike Global Offensive/csgo.sh: line 57: 17727 Ошибка сегментирования                   ${DEBUGGER} "${GAMEROOT}"/${GAMEEXE} "$@
Что странно - другие установленные игры (Portal 2, The Long Dark) запускаются беспрекословно. В "Сведениях о системе" Steam (в разделе "Справка") указано, в частности:
Версия драйвера:  4.5.0 NVIDIA 361.28
Версия OpenGL: 4.5
Т.е. Steam-таки в курсе версии OpenGL.
Оказывается, разработчики Nvidia добавили GLVND в драйверах версии 361.28, что и приводит к такому сюрпризу, поскольку в CS:GO для Linux Valve тоже что-то намутили.

Следовательно, нужно как-то нивелировать это нововведение.
И одним из способов (самым простым) будет добавление в опции запуска игры (правый клик по игре в библиотеке Steam - Свойства - Установить параметры запуска) вот такую строку:

__GLVND_DISALLOW_PATCHING=1 %command%

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

среда, 10 февраля 2016 г.

Возвращаем работоспособность кардиопередатчику Suunto Dual Comfort

Проблема: не работает или работает крайне нестабильно кардиоремень с HRM (Heart Rate Monitor) от Suunto.

Проблема не новая, с ней сталкивается, судя по отзывам на Amazon, едва ли не каждый второй пользователь кардиодевайсов от Suunto. Большинство решает ситуацию заменой кардиоремня по гарантии, но через несколько месяцев многих снова ждёт сюрприз.

Вот и я после 8 месяцев обладания Suunto Quest был обрадован таким поворотом.

Симптомы: 
  • не выполняется поиск HRM устройства с сообщением "check belt";
  • не выполняется сопряжение (pairing) HRM устройства с сообщением "belt not found";
  • кардиопередатчик определяется часами, но показания пульса на экране часов не отображаются, вместо этого показываются две плоские линии (или два дефиса, если угодно).
Варианты решения от Suunto:
  • перед сопряжением и/или поиском HRM убедиться, что электроды (чёрные овальные элементы на внутренней стороне ремня) намочены;
  • заменить батарейки в HRM и часах;
  • для "сброса" HRM вставить элемент питания "наоборот" (поменять полярность) на 10-15 секунд, затем установить в корректное положение;
  • перевыполнить сопряжение (включить функцию можно так: удерживать Next несколько секунд, пролистать меню с помощью Start/Stop до раздела Pairing, нажать Next, выбрать Belt, нажать Next, ожидать чуда);
  • перевыполнить сопряжение, при этом до финального нажатия Next извлечь батарейку из HRM, а после нажатия Next установить обратно элемент питания в кардиопередатчик и снова ждать чуда; пробовать несколько раз, заново запуская сопряжение, если часы рапортовали "belt not found" вместо "paired".
Лично мне по каким-то причинам ничего из описанных официальных советов не помогло.

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

Поэтому на помощь приходят народные методы (на свой страх и риск, разумеется):
  • протереть металлические контакты ватной палочкой, смоченной в спирте или спиртовом растворе;
  • крайне аккуратно иголкой или иным твёрдым и острым предметом (меня выручил мой крокодил) поцарапать плоские металлические контакты на ремне в точках их соприкосновения с контактами модуля HRM.
"Страх" и "риск", разумеется, минимальны при условии наличия хотя бы минимального разума у оператора острого предмета и спиртового раствора: не нужно использовать здоровенный топор для крохотных царапок, и заливать спиртом сам кардиомодуль тоже не следует.

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

Такое вот буквально минутное решение вопроса после полуторачасовых попыток выполнить (не слишком-то и полезные, в общем-то) советы от ТП Suunto в хренадцатый раз. Да, это бетонный блок в их огород.

четверг, 10 декабря 2015 г.

Ваш компьютер блокирует систему VAC [Виноват CCleaner]

Почти каждый игрок в Counter Strike: Global Offensive сталкивался с тем, что в какой-то момент его выбрасывает из игры с сообщением в духе "Ваш компьютер блокирует систему VAC. Вы не можете играть на защищенных серверах" или "An issue with your computer is blocking the VAC system. You cannot play on secure servers".

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

Конкретно в моём случае камнем преткновения была программа CCleaner.
Да, даже с отключённым мониторингом системы, в выключенном состоянии CCleaner умудрялся портить жизнь людям, которые искали проблему, проверяя и перепроверяя настройки и даже переустанавливая Windows. Я тоже много чего перепробовал, но не помогло. А потом удалил CCleaner - проблема ушла.

Когда на днях заново зачем-то поставил CCleaner (долго не мог вспомнить, зачем же удалил эту программу) сразу снова столкнулся с этой ошибкой. Снова удалил - опять играю без проблем.
Такие дела.

среда, 9 июля 2014 г.

Как я избавился от тиринга (KDE, Nvidia)

Многих интересует решение вопроса с тирингом (screen tearing) в ОС, основанных на ядре Linux. Что такое тиринг? Это когда "рвётся изображение". Это не беда какой-то отдельной аппаратной или программной платформы. Стоит отключить вертикальную синхронизацию в игре на Windows - и tearing тут как тут. 
У кого-то при использовании GNU/Linux его нет и не было, у кого-то периодически пропадает, некоторые его просто не замечают. Иногда тиринг пропадает при работе в полноэкранном режиме, при этом присутствуя в оконном.
Причины кроются в видеодрайверах, настройках менеджера окон, X-сервера и, возможно, в самом железе (имеется в виду не только видеокарта, но и монитор).
Не так давно у меня появился удивительно мерзкий тиринг, который натурально мешал смотреть видео, включая полноэкранные режимы, где тиринга у меня никогда не было.
И я решил, что хватит это терпеть и стал искать решения. Делюсь тем, что нашёл.

Вариант 1:
После многочасовых попыток решить проблему, на горизонте нарисовалось первое решение.
Для этого нужно внести изменения в файл /etc/X11/xorg.conf, добавив в секцию Screen строку:
Option "metamodes" "nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"
У меня получилось вот так:
Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option "metamodes" "nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection
Если blogger разобьёт выделенное жирным на 2 строки - не поддавайтесь на провокацию, всё выделенное жирным должно быть в Вашем xorg.conf одной строкой.
Кроме того, вместо nvidia-auto-select можно вручную вписать разрешение и частоту обновления. Например, вот так:
Option         "metamodes" "1920x1080_120 +0+0 { ForceFullCompositionPipeline = On }"

После этого нужно сохранить изменения в файле и перезапустить X-сервер. Но можно и "просто" перезагрузить компьютер (я так и делал).

Для полноты картины моих настроек:
  • в настройках Nvidia X Server в разделе OpenGL у меня отключён "Sync to VBlank";
  • в настройках эффектов KDE движок - OpenGL 3.1, графическая система Qt - растровая, предотвращение разрывов (Vsync) - полная перерисовка.
Совершенно нет уверенности в том, что сами по себе данные настройки повлияли в моём случае. Реально помогло лишь включение режима ForceFullCompositionPipeline, о чём написано выше. Тиринг пропал, его просто нет (или я его не вижу, что, в принципе, одно и то же). Стоит убрать строку из xorg.conf - и он возвращается независимо от того, какие опции Nvidia X Server или эффектов KDE.

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

Но я на слово верить не захотел и проверил через Unigine Valley. Ключевые компоненты - i5-2500K @ 4.4 GHz и GTX 760.

С включенной опцией получил такой результат:
 
Unigine Valley - Тест с ForceFullCompositionPipeline = On
Текстом:
FPS: 35.0
Score: 1465
Min FPS: 22.5
Max FPS: 59.6
А вот результат того же бенчмарка с выключенной опцией:
 
Unigine Valley - Тест без ForceFullCompositionPipeline
 Текстом:
FPS: 35.1
Score: 1470
Min FPS: 21.5
Max FPS: 60.1
Возможно, для кого-то потеря 0.5 от максимального FPS и 0.1 от среднего - это страшно, но по моему скромному мнению, не только лишь все, мало кто может это заметить своими глазами.
Вроде бы всё достаточно понятно.

Вариант 2:
Создать файл /etc/profile.d/antitearing.sh
В который необходимо добавить строку 

export __GL_YIELD="USLEEP"
Сделать его исполняемым через 
chmod +x /etc/profile.d/antitearing.sh

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

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

P.S. если помогло (или не помогло), просьба указать об этом в комментариях, упомянув DE, драйвер и железо. А то заметка людьми читается, а вот есть ли результат у читателей - неизвестно :-(

воскресенье, 5 декабря 2010 г.

Решение проблемы с /usr/lib/cups/filter/hpcups failed

Случилось мне переустанавливать ArchLinux на своём десктопе. Всё настроил, но возникла странная проблема: не настраивается CUPS для печати.

Вспоминаю, что при настройке через hp-setup получил строку:
error: Python gobject/dbus may be not installed
Проверил зависимости, установил отсутствовавший почему-то пакет dbus-python. Но не помогло. При попытке что-то напечатать получал сообщение:
/usr/lib/cups/filter/hpcups failed
Само собой, такое меня не устраивало, принтер-то нужен.
Оказалось всё весьма прозаично. HPLIP требовала бинарник python в /usr/bin/python, а там не было ничего. Даже линка. Вот и возмущался CUPS и HPLIP.

Решаем:
1. создаём линк. поскольку у меня в /usr/bin/ нашёлся бинарник python2.7, то:
ln -s /usr/bin/python2.7 /usr/bin/python
2. сносим старые настройки CUPS к чёртовой бабушке вместе с его директорией:
rm -r /etc/cups
3. переустанавливаем CUPS, чтобы он создал новые, чистенькие настройки. ну, и HPLIP - чисто на всякий. в разных дистрибутивах это выглядит, само собой, по-разному. а в ArchLinux это так:
pacman -S cups hplip
4. перезапускаем демон CUPS. опять же, его расположение дистроспецифично. в ArchLinux, например:
/etc/rc.d/cups restart
в gentoo, например, такое же действие будет выглядеть как /etc/init.d/cupsd restart.

5. заново настраиваем принтер. я люблю это делать в терминале, просто нажимая Enter в диалогах, поэтому добавляю ключик -i, чтобы не было графического интерфейса. это нужно и в случае, если нет qt. смотрится это так:
hp-setup -i
Ну и вот, всё работает.
Правда, в моём случае, приходилось осуществлять ещё одно действие, во избежание ошибки /usr/lib/cups/backend/hp failed

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

понедельник, 15 ноября 2010 г.

Решение проблемы с /usr/lib/cups/backend/hp failed

Имеется у меня МФУ Hewlett-Packard LaserJet M1005 MFP. Работал исправно со своими hplip-дровами в archlinux. Но, случилась беда - неожиданно отказался печатать. В веб-интерфейсе CUPS меня ждала надпись, что принтер приостановлен и задание в очереди со статусом "/usr/lib/cups/backend/hp failed". Поиски решения, загрузки-перезагрузки, проверки, переустановки hplip, другие драйверы ничего не дали. Обратился на линуксфорум и поискал аналогичные проблемы на официальном форуме archlinux - ничего мне подходящего. Поставил рядом "стабильный" дебиан - и там то же самое. Поставил ubuntu 9.10 - всё работает. Долго потрошил интернет - ничего путного не нашёл.

Не помню где, но видел мысль в очень давних мэйлинг-листах англоязычных, что, возможно, сей баг связан с разрешениями / правилами udev. Я - человек от заумных слов далёкий. Решил попробовать дать права "принтеру". А где у нас принтер? В usb!
Недолго думая, в консоли:
lsusb
получаю среди прочего строчку:

Bus 001 Device 002: ID 03f0:3b17 Hewlett-Packard LaserJet M1005 MFP
отлично, вот он где. теперь нужно дать права на этот адресок (от рута пишем):
chmod 777 /dev/bus/usb/001/002
захожу в веб-интерфейс капса, перевожу принтер из состояния "приостановлен" в рабочее посредством пункта "возобновить печать". перезапускаю задание...
Ура, печатается! Дело за малым - настроить исполнение этой команды при загрузке (не писать же каждый раз перед печатью, если перезагружалась система)
Вписываю её в /etc/rc.local и сохраняю изменённый файл.

Всё, проблема решена :)
Надеюсь, кому-нибудь это поможет, т.к. сам в своё время прибил много времени на поиск и решение оной - с арча уходить не хотелось, а без рабочей печати не совсем удобно. Держать систему рядом или в виртуалке только для печати - совсем не хотелось.