Лента любопытного хомячка WebHamster.ru https://webhamster.ru WebHamster.ru - собираем информацию по крупицам Sat, 20 Jan 2018 22:00:07 +0300 Sat, 20 Jan 2018 22:00:07 +0300 Copyright 2010, Sergey M. Stepanov xintrea@gmail.com ruТонкости консольного перекодирования видео через ffmpegИногда мне приходится заниматься домашним видео. Для записи используется камера Sony Handycam CX-130. Её формат файлов *.MTS очень нестандартный. Не каждая программа его понимает, тем более под Linux. И я долгое время не мог толком с ним работать.

 

В конечном итоге я вник в тонкости перекодирования через консольную утилиту ffmpeg, и научился быстро и безошибочно управляться с перекодированием этих файлов в другие форматы. Недавно я нашел время, чтобы написать подробную статью о самых важных моментах, с которыми можно столкнуться при работе с файлами *.MTS. Вот она:

 

 

Тонкости кодирования видео в бытовых видеокамерах.
Соотношение сторон кадра, размер пикселя, PAR, SAR, DAR

 

 

Данная статья будет полезна каждому, кто раньше не смог подступиться к проприетарным форматам видеозаписи.

 

]]>
https://webhamster.ru/site/page/index/main/news/452Sun, 17 Dec 2017 23:07:39 +0300
MyTetra: я понял всю боль. (Любителям GTK, пользователям 64 бит посвящается)До недавнего времени я жил в своем уютненьком 32-битном мирке под Линуксом, вел там разработку PIM-менеджера MyTetra, и меня все устраивало. В конце концов, фреймверк Qt, на котором написана MyTetra - вполне себе кросс-платформенный. Тестированием, кроме как в KDE4 в 32-х битном Debian и в Windows 7 32/64 бит, я не занимался.

 

Но вот недавно я переехал на Debian 9 с архитектурой x86-64. Да, пакетов KDE4 в этом Дебиане уже нет. Майнтейнеры дистрибутива предлагают кушать KDE5. Поставил я эту пятую версию, и продержался на ней целых три дня. Теперь я точно знаю, что KDE скатился в сраное гуано. Версия 4 уже была малоюзабельным поделием, но я ее как-то докрутил, и даже сделал свою олд-стайловую тему Redmond-125, в общем, смог заставить себя пользоваться. Но пятая версия - это апофеоз глюков и странных дизайнерских решений. Кажется, что авторы KDE вообще забыли про то, что Desktop Enviroment - это повседневный инструмент, который должен четко и быстро работать, а не глючить и залипать на отрисовке. Вместо этого авторы KDE5 пилят какие-то свистоперделки, совершенно забив на базовую функциональность.

 

 

 

 

Помятуя, что один мой товарищ без ума от Linux Mint и MATE, я решил поставить эту MATE. И вроде бы все устраивало, но ровно до тех пор, пока я не запустил свою MyTetra. Пользоваться в GTK-окружении Qt-программой оказалось практически невозможным. Почему? А вот почему:

 

1. Разлезлась верстка элементов управления. Фирменные GTK-шные широченные отступы между кнопками превратили насыщенный интерфейс MyTetra в какую-то странную программу, у которой очень мало места непосредственно для текстовой информации. Не помогали даже кнопки сворачивания-разворачивания тулбаров - места для текста все равно осталось катастрофически мало. Большие вертикальные отступы в списках и дереве заставили меня раза в три больше крутить колесиком, чтобы добраться до нужного элемента. Это кошмар. Попытка подобрать GTK-тему ни к чему не привела: тем в MATE и GNOME дохренищща, но нет ни одной компактной. Точнее, попытки создать компактную тему есть, но они все недоделанные. То цвета сливаются, то границ не видно, то шрифты слипаются, и это все на обычных GTK-приложениях, о Qt я вообще не говорю.

 

2. В GTK-среде почему-то по-умолчанию активной кнопкой считается кнопка Cancel, а не ОК. В результате все мои моторные навыки не позволяли мне совершать основные действия с клавиатуры. Например, при создании записи можно нажать Ctrl+Enter, и запись будет записана. Записана она будет в Qt-based средах. А в GTK-based будет нажата отмена, и все что пользователь успел напечатать - улетучится. Мне говорили об этом пользователи, но я не мог толком понять при каких условиях это происходит. И вот, пожалуйста, - условием является запуск в GTK среде. В принципе, в исходниках исправляется это быстро, но сам факт...

 

3. По неизвестным мне причинам в MyTetra не отрисовываются надписи в центре области поиска. Специально для версии 1.42 я сделал несколько надписей, которые в зависимости от ситуации должны помогать пользоватлю понимать, как проходит поиск. В GTK эти надписи просто не отображаются. Это обычные QLabel, и что может глючить - ума не приложу.

 

Далее проблемы, обнаруженные в 64-битной сборке.

 

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

 

5. Встроенный менеджер закачки, который используется для закачки картинок в текст и при прикреплении файлов из интернета, не качает данные с HTTPS-сайтов. Я сначала подумал, что виной тому просроченные сертификаты на сайтах, но нет: на 64-х битах используемые мной стандартные Network-объекты Qt тупят при работе с Secure-протоколом. На 32-х битах такой проблемы нет.

 

6. Запомненные координаты окна при каждом запуске съежжают на несколько пикселей. Тут надо разбираться, почему так. Видимо, это какое-то проявление новых оконных менеджеров, ведь раньше у меня такого не было ни в Linux, ни в Windows.

 

7. Ну, и как вишенка на торте, стандартный скрипт запуска MyTetra, не может запустить программу в 64-х битной среде. Проблема возникает в момент, когда запуск происходит не из каталога, где лежит скрипт запуска и бинарник. Например, при запуске с ярлыка. Пользователи мне об этом говорили, но я не мог поверить, что такая платформонезависимая вещь, как исполнение bash-скрипта, может отличаться для разных архитектур. Тем не менее, это так.

 

Отказаться от 64-х бит, в принципе, невозможно, да и ненужно. А вот от GTK я отказался с радостью, установив среду LxQt. Да, она немного глючноватая, да, в ней иногда пропадает рабочая панель в моменты, когда GTK-based софт пытается быстро переключить свои окна. Но по своей концепции это очень вменяемый проект, и я ему желаю всяческого дальнейшего развития.

 

 

 

 

А что же MyTetra? Ближайшая цель - это исправление косяков, которые вылезли в 64-х битах. Проблемы, возникающие в GTK-среде я тоже смогу скомпенсировать в Qt-коде, во всяком случае надеюсь на это. Плюс еще надо исправить несколько бажиков, которые проявились в версии 1.42.

 

Поэтому следующий выпуск MyTetra будет багфикс-релизом, это уже решено. Кроме того, новый релиз будет только под платформу x86-64, так как все последние версии Qt под Linux (и версия 5.9.x в том числе) давно уже выпускаются только в режиме 64-х бит.

 

Всем удачи, следите за новостями.

 

]]>
https://webhamster.ru/site/page/index/main/news/451Thu, 14 Dec 2017 18:28:52 +0300
Первоначальная настройка MariaDB: получаем доступ из сторонней панели управленияРаньше жизнь была как-то попроще. Была OpenSource база данных MySql, потихоньку писалась и развивалась. Потом появились злые капиталисты, забрали себе MySql и сказали: а теперь вам, дорогие нищеброды достается форк вашего творения. Только не вздумайте его называть MySql, а то засудим! Сообщество почесало голову, и назвало форк MariaDB.

 

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

 

Недавно я перешел на новый 64-х битный Debian 9, и снова столкнулся с трудностями при развертывании MySql/MariaDB базы данных. Базу данных я планировал использовать для развертывания App Advanced приложения из стандартной поставки Yii 2. Проблема оказалась в том, что невозможно было подключиться к серверу БД даже зная пароль SQL-пользователя root. Трудности я вмеру своей криворукости преодолел, о чем написал статью:

 

 

Задание пароля SQL-пользователя root для MariaDB (MySQL) в Debian 9

 

 

О проблеме подключения к новой дефолтной настройке MariaDB в рунете очень мало материалов. Надеюсь, кому-нибудь эта статья поможет сберечь время и потратить его на более продуктивные вещи.


]]>
https://webhamster.ru/site/page/index/main/news/450Wed, 13 Dec 2017 18:37:19 +0300
Открыты исходники игры MoveNoid - арканоида с бесконтактным управлениемВысокие технологии все плотнее входят в нашу жизнь. А компьютерное зрение уже давно не является чем-то непостижимым. Качество современной бытовой компьютерной техники уже позволяет делать "на коленке" то, что раньше можно было реализовать только на специализированных устройствах.

 

MoveNoid - это игра по типу классического арканоида, в которой управление битой (ракеткой) происходит с помощью графической метки. Для захвата изображения используется обычная web-камера. Метка изготавливается из куска картона с помощью лазерного принтера или черного фломастера. Особенность данного арканоида в том, что бита свободно перемещается по экрану и может наклоняться на любой угол (даже перевернуться вверх-ногами). Это вносит новые возможности в механику игры, которую  можно развивать дальше.

 

 

 

 

Код написан мною с использованием библиотеки компьютерного зрения OpenCV. Для симуляции физики полета мяча использутся физический движок Box2D. Чтобы разработка была проста и приятна, используется C++ фреймверк Qt. Код распространяется под лицензиями GPL v.3 и BSD.

 

Для того, чтобы быстро составить представление, что собой представляет игра, я записал небольшое видео:

 

 

 

 

На сайте WebHamster.Ru для игры создана официальная страничка:

 

 

Официальная страничка MoveNoid

 

 

В настоящий момент код игры прост и не обвешан сложными абстракциями. Самое время подключиться к разработке и сделать один из пунктов Плана развития игры. Кто там не знал чем заняться? Вот вам реальный проект: весело и познавательно.

 

А я пошел отдыхать :)

 

]]>
https://webhamster.ru/site/page/index/main/news/448Sun, 03 Dec 2017 22:31:25 +0300
Как я настраивал программный регулятор громкости для звуковой карты E-mu Tracker Pre USB в LinuxНаконец-то у меня дошли руки донастроить свой домашний компьютер с операционной системой Linux Debian. Одной из нерешенных проблем было то, что не работал регулятор громкости для внешней звуковой корточки E-mu Tracker Pre USB. Вот она, красавица:

 

 

 

 

В течении года я периодически возвращался к решению этой проблемы, но разобраться до недавнего времени не мог. Задача оказалась нетривиальной. Да и в рунете практически нет специалистов, которые бы знали что и как надо делать. В общем, путем проб, ошибок и чтения ангнлонета я потихоньку нащупал метод настройки программного регулятора. И я очень рад, что он наконец привел к нужному результату. По итогам изысканий я написал следующую статью:

 

 

Как заставить работать программный регулятор громкости

для звуковой карты E-mu Tracker Pre USB в Linux

 

 

Да, это было трудно. И я надеюсь, что информация в статье поможет владельцам карточек E-mu разобраться, как можно произвести донастройку карточки в звуковой подсистеме Linux. Если, конечно, разработчики снова что-нибудь не поменяют.

 

]]>
https://webhamster.ru/site/page/index/main/news/446Thu, 09 Nov 2017 17:39:23 +0300
Как купить правильный строительный уровеньНедавно у меня появилось побольше свободного времени, и я решил заняться ремонтом. А когда делаешь ремонт, обязательно нужно иметь в хозяйстве хороший строительный уровень.

 

Раньше у меня был старый советский уровень в деревянном корпусе с утопленной колбой, в котором разглядеть пузырек почти невозможно. Одна риска сбита, горизонталь весьма условная, в общем, полный фарш. И я озаботился приобретением нового уровня.

 

Но перед тем как пойти в магазин я обчитался статьями в Интернете, и составил себе некое представление о современных реалиях рынка строительных уровней. И правильно сделал! Какой только чуши я не услышал от продавцов. Если бы я не знал заранее, что мне нужно, обязательно купил бы задорого какое-то кривое поделие и дальше мучался бы с ним. В общем, знание - сила. Поэтому я написал небольшую статью, в которой даю выжимку из того, что нужно знать про уровни:

 

 

Как выбрать уровень. Как выставить уровень в горизонталь (юстировка)

 

 

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

 

]]>
https://webhamster.ru/site/page/index/main/news/445Sat, 07 Oct 2017 12:42:18 +0300
Ретроспективное удаление спама в самодельной гостевой книгеПроблема спама в гостевых книгах в интернете существует очень давно. Когда-то радикальным средством борьбы со спамом на короткое время стали всевозможные защитные картинки - капчи. Но и они перестали давать должный результат - боты быстро научились перенаправлять картинки на порносайты, где их разгадывали страждущие до клубники, затем был период ипользования дешевой человечьей силы индусов по нольцелыххрендесятых цента за картинку, а потом программы распознавания, особенно специально заточенные, научились распознавать сильно зашумленные капчи не хуже человека. Блочить спам по IP теперь практически невозможно - спамеры закупают за копейки милионные пулы рандомных IP адресов, так что каждое новое сообщение будет приходить с разных айпишников.

 

В настоящее время бороться со спамом можно только комплексными мерами. Необходимо создать несколько слоев защиты: надо прикрутить капчу; написать несколько фильтров грубой аналитики, которые будут отсеивать сообщения с явными признаками спама; надо сделать хотя бы примитивный учет поведенческих факторов с привязкой к IP адресам, чтобы отсеивать мамкиных спамеров; надо сделать проверки по международным антиспамовым базам, например сделать защиту от спама с помощью stopforumspam.com.

 

По моим наблюдениям, последний пункт - самое мощное средство борьбы, но и оно работает неэффективно, если на сайт натравливается новая рекламная кампания, которая еще не успела набрать отрицательную статистику на ресурсах типа stopforumspam.com. И тут необходимо городить еще один слой защиты гостевой книги, который я называю "ретроспективное удаление спама".

 

Идея очень проста: проверять добавляемые сообщения нужно не только в момент добавления, но и периодически уже после того, как они появились в гостевой. Да, возможно спам-сообщения будут некоторое время висеть в гостевой, пока stopforumspam.com не накопит статистику, но как только это будет сделано (а делается это за пару часов), спам-сообщения будут автоматически удалены.

 

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

 

 

// Ретроспективное удаление спама - проверяются уже имеющиеся записи гостевой
private function retrospectSpamCheck()
{
  $days=3; // Чтобы снизить нагрузку на базу,

           // проверяются только записи, добавленные

           // в указанное последнее количество дней

  $edgeTime=time()-$days*3600*24;

  $this->db->select('id, name, email, ip');
  $this->db->where('time >', $edgeTime);
  $query=$this->db->get('guest_book');
  $messages=$query->result_array();

  foreach($messages as $message) {
    if($this->isSpam($message['name'],

                     $message['email'],

                     $message['ip'])) {
      $this->db->where('id', $message['id']);
      $this->db->delete('guest_book');
    }
  }
}

 

// Определение наличия спама через stopforumspam.com

function isSpam($name, $email, $ip)
{
  try
  {
    $data = unserialize( file_get_contents(

            'http://www.stopforumspam.com/api?&email='.

            urlencode($email).

            '&username='.urlencode($name).
            '&ip='.urlencode($ip).
            '&f=serial'));

    // Если сервис StopForumSpam не отвечает
    if($data===false)
      return false;

    if( isset($data['email']['appears']) and

        isset($data['email']['confidence']) )
      if($data['email']['appears']!=0 and

         $data['email']['confidence']>=70)
           return true; // Email в базе спаммеров

    if( isset($data['ip']['appears']) and

        isset($data['ip']['confidence']) )
      if($data['ip']['appears']!=0 and

         $data['ip']['confidence']>=70)
           return true; // IP в базе спаммеров

    return false;
  }
  catch (Exception $e)
  {
   return false;
  }
}

 

 

Конечно, здесь есть место для оптимизации, например, вместо нескольких вызовов delete в цикле, можно сначала собрать ID записей гостевой книги, а потом удалить их одним SQL-запросом. И спам через stopforumspam.com можно детектить по другим признакам, а так же учесть, что вместо нескольких запросов API stopforumspam.com поддерживает кумулятивные запросы.

 

Теперь спама в гостевой как не бывало. Считаю, что это очень простой и эффективный метод борьбы. Пользуйтесь на здоровье.

 

]]>
https://webhamster.ru/site/page/index/main/news/444Tue, 12 Sep 2017 17:05:50 +0300
Офигительное объяснение основ грамматики английского языкаНедавно наткнулся в Youtube на одно очень хорошее видео с очень неудачным названием "АНГЛИЙСКИЙ С НУЛЯ (Четкое понимание за 50мин)". Название неудачное потому, что видеороликов с подобным заголовком в ютубе просто миллионы. И доверия такое название не вызывает.

 

А у меня как раз проблема с грамматикой английского - я не могу толком запомнить весь этот набор правил хотя бы для шести английских времен (настоящее-прошедшее-будущее в simple и continues). Не могу толком запомнить потому, что не люблю запоминать безсистемно. А я видел, что некая система есть, но она всегда мне подавалась декларативно. Мои попытки вытянуть понимание из учителей ни к чему не приводили - они и сами, похоже, тупо зазубрили правила образования времен без понимания сути происходящего. Максимум, что я мог вытянуть, это невнятное объяснение про то что "окончание "s" перебегает вот сюда". А почему сюда а не туда - это тайна покрытая мраком.

 

И я тыкнул на это видео с мыслью "Ну давай, послушаю об основах грамматики в сотый раз, может что еще пойму, хотя особенно не надеюсь". Так вот оказалось, что этот неизвестный чувак с ником База Английского, который не называет своего имени (и я до сих пор не знаю как его зовут), разложил основы грамматики по полочкам так, как не могли все мои учителя за мои дважды процедшие курсы на уровень Elementary. Вот этот перец:

 

 

 

 

Самое главное, что он объясняет не только основы английского, но и основы лингвистики. В частности, он дает самое точное и правильное понимание термина "инфинитив" - что это такое, зачем оно вообще нужно, и какую роль инфинитив играет в английском языке. Уже только за это его надо в жопу расцеловать.

 

Вообще, по грамматике английского языка есть еще хорошее видео от Надежды Счастливой, о котором я упоминаю в своей коллекции методических материалов по практике освоени я английского. Эта дама тоже умеет объяснять, но у нее бОльший объем, и в этом видео она предметно рассматривает сразу 12 времен английского по методике "торт английской реальности".

 

Всем изучающим английский я очень рекомендую эти видеоуроки к просмотру.

 

]]>
https://webhamster.ru/site/page/index/main/news/443Fri, 01 Sep 2017 21:24:35 +0300
Подключение к удаленному Git-репозитарию через SOCKS5-proxyМногие люди в IT-среде давно уже привыкли к наличию прямого доступа в интернет, и о временах повального использования провайдерами PROXY-серверов вспоминают с большой долей иронии. А некоторые даже не застали этих замечательных решений, популярных на заре интернета. Но не так дела обстоят в корпоративном секторе: борьба за мифическую безопасность порождает странные корпоративные требования. Благодаря им, привычная работа разработчика в сети Интернет становится невозможной, и человеку приходятся искать самые нетривиальные пути обхода результатов бурной фантазии эффективных менеджеров.

 

Ситуация: вы находитесь в сети с заблокированным NAT, корпоративный Proxy пускает только на отраслевые сайты по белому списку, и в этом списке GitHub.com, конечно, не значится. Вам нужно заполучить доступ ко всему интернету и еще заставить работать Git. Причем нужно это сделать так, чтобы без ввода логина-пароля никаких подключений не создавалось, а при установке соединения на рабочем компьютере небыло признаков подключения к интернету (чтобы работал только специально отведенный для Интернета браузер и консольный git). Понятно, что в такой ситуации шансов заполучить Интернет практически нет.

 

Но вам повезло: у вас чудом появился SSH-доступ к Linux-машине, на которой есть человеческий Интернет. Как организовать скрытый доступ к всемирной паутине? Самый простой способ - сделать между рабочей станцией и Linux-машиной VPN-соединение. Но при установке такого соединения Интернет появится во всех браузерах и всех программах, а не только в специально сконфигурированных. А это палевно.

 

Поэтому нужно извращаться более тонко, например через SOKCS5-proxy, который умеет создавать консоль Putty, заворачивая траффик в SSH. Заставить браузер FireFox работать через эту конфигурацию достаточно просто. А вот о том, как можно настроить возможность работы Git через SOCKS5-proxy с удаленным репозитарием на GitHub, информации в интернете практически нет. Поэтому я написал памятку о том, как настраивать доступ Git к внешнему миру в таких сложных условиях:

 

 

Как сделать подключение к репозитарию Git через Socks Proxy

в условиях отсутствия DNS

 

 

Надеюсь, кому-нибудь поможет. А вообще я никому не рекомендую работать в конторах с такими жесткими требованиями к блокировке Интернета. Вы мгновенно окажетесь в каменном веке, и станете терять свою квалификацию. А оно вам надо?

 

]]>
https://webhamster.ru/site/page/index/main/news/442Fri, 25 Aug 2017 16:32:45 +0300
Как рассчитать стоимость транзакции в платежной системе БиткоинЯ редко пользуюсь денежными переводами через Биткоин. И за изменениями в этой криптовалюте слежу от случая к случаю. Поэтому плохо ориентируюсь в стоимости транзакций Биткоина. Казалось бы, еще вчера транзакции были бесплатными или с символической стоимостью, а теперь для получения комиссии, меньшей чем у банков, нужно переводить сумму не менне чем полтыщи долларов. И ситуация каждый день меняется.

 

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

 

Как рассчитать стоимость отчислений за транзакцию в сети Bitcoin

 

И на последок хочу напомнить: берегите свои биткоиины и соблюдайте правила информационной гигиены. У биткоина есть все шансы стать золотом цифрового финтеха.

 

]]>
https://webhamster.ru/site/page/index/main/news/441Fri, 25 Aug 2017 08:48:25 +0300