• Если не срабатывает свойство translate при css анимации в мобильном Safari

    То, что Safari стал для верстальщиков новым IE6 ни для кого не новость. Сегодня столкнулся с очередным багом, решение которого банально до невозможности, но отняло у меня час рабочего времени.

    Итак, имеем блок, который должен непрерывно плавать вверх-вниз. Сходу пишем стандартный для такой анимации код:

    .block {
    	animation-name: floating;
    	-webkit-animation-name: floating;
    	animation-duration: 3.0s;	
    	-webkit-animation-duration: 3.0s;
    	animation-iteration-count: infinite;
    	-webkit-animation-iteration-count: infinite;	
    	animation-timing-function: ease-in-out;	
    	-webkit-animation-timing-function: ease-in-out;
    }
    
    @keyframes floating {
    	0% {transform: translateY(0%);}
    	50% {transform: translateY(8%);}	
    	100% {transform: translateY(0%);}			
    }
    
    @-webkit-keyframes floating {
    	0% {-webkit-transform: translateY(0%);}
    	50% {-webkit-transform: translateY(8%); }	
    	100% {-webkit-transform: translateY(0%); }			
    }
    
    

    Тестируем и видим, что данный код работает во всех популярных браузерах, кроме мобильного Safari. Причём согласно спецификации он должен поддерживать этот код. Далее замечаем ещё одну особенность. Если перейти в другое приложение или по какой-то ссылке и вернуться назад, то анимация начинает работать. Очень странное поведение Safari. То есть сам код ему понятен, но при обновлении страницы анимация сразу не хочет проигрываться.

    Долгие поиски по различным форумам ни к чему не привели, поэтому решение было найдено методом «научного тыка».
    Читать дальше →
  • ROSA и ОСь репозитории CentOS 7

    Всем привет.

    Хочу с Вами поделиться информацией как к «российским» ОС прикрутить репозитории CentOS и заменить установленные пакеты.

    Всё началось, когда нашу организацию обязали перейти на «российское» ПО. В первую очередь начал искать серверные ОС. Как оказалось наши разработчики предлагают ОС на базе Linux, а в организации 100% windows платформа. Организация не маленькая, примерно 150 серверов только в одном округе.

    После изучения рынка «российских» ОС выбор пал на ROSA и ОСь. ROSA это платная ОС и стоит не маленьких денег, но так как не очень уж хочется платить за воздух я остановился на ОС ОСь. Далее начинается самое интересное далее. У ОСи добавлен репозиторий от РосТех и в версии пакетов добавлена как правило одна буква:

    1. Пакет от ОСи — openssh-6.6.1p1-33z3.el7.x86_64
    2. Стандартный пакет CentOS — openssh-6.6.1p1-33.el7.x86_64

    Первопроходцем должен быть AD на samba4, но тут возникает проблема. При установке зависимостей для samba4 yum не чего не может сделать с пакетами ОСи и соответственно пакеты не устанавливаются из-за неразрешнных зависимостей.

    Все действия я делал на ОС ОСь minimal.

    В общем решение этой проблемы следующее:

    1. Необходимо закоментировать существующие репозитории.
    2. Создать новый файл с CentOS'совскими репозиториями.

    vi /etc/yum.repos.d/centos7.repo

    Вот сам файл centos7.repo
    Читать дальше →
  • ЭВМ

    Россия, Иркутск, 1990 год, ДК «Юный техник»

    Каждый вечер мальчишки с нашего района собирались в ДК «Юный техник», который находился на первом этаже обычной пятиэтажки и слушали лекции Виктора Анатольевича, записывали самое важное и зарисовывали схемы, а после с пионерским рвением выпаивали резисторы и транзисторы со старых плат, и раскладывали их по специальным деревянным коробочкам. Все шло своим чередом, уже скоро мне, ученику первого класса, разрешат паять первые простенькие схемы.
    Читать дальше →
  • Торговые боты как биосистема

    Я написал своего бота для торгов на бирже bittrex через API с нуля. php+MySql. В части статей опишу сложности, с которыми столкнулся, как их решил, и что осталось нерешенным.

    2 бота реально торгуют. Еще 16 виртуально. В условиях без «катастроф» (типа валюта перестала существовать и теперь стоит 0, или биржа накрылась) и при той волатильности что есть сейчас — прибыль около 0,05-0,25% в день.
    Читать дальше →
  • Вывод иерархических данных DataObjects в DevExpress GridControl

    Понадобилось нам выводить данные в виде дерева.
    Причем, надо выводить не одно поле, а несколько. Поэтому стандартный TreeView подходит плохо.
    В программе использовался WPF и компоненты DevExpress. Там есть навороченный GridControl, предоставляющий в числе прочего просмотр данных в виде дерева. То есть на первый взгляд проблема на полчаса.

    Читать дальше →
  • Волшебный квадрат

    Приветствую! Хотел бы представить вам простенькую, но в то же время интересную задачку по программированию. Магический квадрат (волшебный квадрат) — это таблица заполненная числами таким образом, что сумма чисел в каждой строке, каждом столбце и на обеих диагоналях одинакова. Программка составлена на языке Python.



    # Создадим переменную равную наименьшему из 9-ти разрядного числа

    counter = 100000000

    Далее запускаем цикл пока не достигнем наибольшего 9-ти разрядного числа

    while counter < 999999999:
    # Разбиваем наще число на разряды
    p = [int(n) for n in str(counter)]
    
     #Теперь складываем отдельные цифры и присваиваем результат
     #переменным согласно расположению в таблице
     diagonal_1   = p[0] + p[4] + p[8]
     diagonal_2   = p[2] + p[4] + p[6]
     gorizontal_1 = p[0] + p[1] + p[2]
     gorizontal_2 = p[3] + p[4] + p[5]
     gorizontal_3 = p[6] + p[7] + p[8]
     vertical_1   = p[0] + p[3] + p[6]
     vertical_2   = p[1] + p[4] + p[7]
     vertical_3   = p[2] + p[5] + p[8]
    

    Завершающий этап: проверка всех вышеперечисленных переменных на равенство
    и вывод результатов на экран

    
    #Проверка на равенство
     if diagonal_1 == diagonal_2 and diagonal_1 == gorizontal_1 and diagonal_1 == vertical_1 and  gorizontal_1 == gorizontal_2 and gorizontal_1 == gorizontal_3 and vertical_1 == vertical_2 and vertical_1 == vertical_3 and vertical_1 == gorizontal_1 and vertical_1 == gorizontal_2 and vertical_1 == gorizontal_3:
    
      #Печать результатов
      print ( p[0], p[1], p[2] )
      print ( p[3], p[4], p[5] )
      print ( p[6], p[7], p[8] )
      print ( 'Счетчик равен: ', counter )
      print ('________________' )
    
     counter += 1
    
    Читать дальше →
  • Как я Scala учил

    Месяца назад я получил свою первую работу и стал стажер-разработчиком, наша команда использует язык Scala. Мне кажется, все начинающие разработчики в первый день потерянные. одновременно наваливается куча новых имен, технологий, каких-то правил, да и мало ли что еще, абсолютно все для тебя ново, это же первая работа. В моем же случае я еще и не знал языка, на котором буду программировать, до момента собеседования я даже никогда о нем не слышал. Итог: в первый день я был в полном ауте. Спросите как тогда я вообще получил эту работу? Я знал Java, на собеседовании мне сказали что джависту перейти на скалу будет достаточно легко и можно не переживать. Но видимо чуть-чуть попереживать все же стоило, потому что первое время перед собой я видел просто экраны, заполненные текстом, в которых сходу была ясна едва ли половина.

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

    final String str = "abc"; //Java

    val str = "abc" // Scala
    Читать дальше →
  • Охлаждение в бюджетном miditower или как опустить процессор ниже 30 градусов

    После очередной чистки системы (пылесосом) и смены термопасты (впервые с 2011 года) 45 нанометровый AMD Phenom II X6 1100T 3.3 GHz в простое грелся до 35 градусов, под нагрузкой до 60. Температура мостов на материнке (GA-880GA-UD3H AMD880G/SB850) была 38-45 градусов в простое, датчик общей температуры в корпусе около 37-39.

    Цифры вроде не критичные, более чем адекватные для такого техпроцесса, но захотелось их снизить. Благо вентиляторы сейчас не самые дорогие.



    Первые три температуры — корпус и мосты, далее скорости вентиляторов, ниже ядра процессора. Температура в простое до замены вентиляторов.

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

    Читать дальше →
  • Получение участников сообщества vk.com через REST API с помощью PHP

    На данный момент VK API уже имеет версию 5.68 и многие уже знакомы с его методом execute, который позволяет запускать последовательность других методов, сохраняя промежуточные результаты.

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

    Реализация на PHP


    Чтобы работать с API на PHP необходимо подключить библиотеку

    require_once('src/VK/VK.php');
    require_once('src/VK/VKException.php');
    

    Затем необходимо пройти авторизацию, для того, чтобы начать делать запросы к vk.com

    self::ex();
    public static function ex () {
            $attach = ORM::for_table('attach')->where('id', 1)->find_one(); // получение данных для авторизации из базы данных таблицы attach
            $vk_config = array(
                'app_id'        => $attach->app_id,
                'api_secret'    => $attach->api_secret,
                'access_token'  => $attach->access_token
            );
    
            $vk = new VK\VK($vk_config['app_id'], $vk_config['api_secret'], $vk_config['access_token']); // создание объекта с последующей авторизацией
    
    Читать дальше →
  • Spree 3 и Google Cloud Storage

    Привет Хабр!

    Столкнувшись с проблемой, готового решения найдено не было, в следствии чего приобрел опыт коим есть желание поделится.
    Дело в том что, разработчики оpen-source движка для интернет магазина (Spree), подружили его только с S3 (Amazon Cloud Storage).

    Но вы можете это исправить,
    Читать дальше →
  • Мониторинг состояния дисков на контроллерах adaptec через zabbix

    Добрый день. Возникла ситуация, когда выпал диск из raid массива. Пришло уведомление от Zabbix о том, что 1 диск выпал, но без пояснения, какой, не очень информативно, пришлось лезть на сервер и смотреть, какой же диск выпал.

    Небольшой скрипт на python который парсит вывод arcconf и сопоставляет диск в рейде с реальным диском(позиция на backplane).

    Читать дальше →
  • В поисках приложения для системного администратора



    Задача: найти приложение(я) которое могло бы немного упростить жизнь обычного системного администратора, почувствовать себя на некоторое время Индианой Джонсом на просторах Google Play. Естественно священный Грааль найти вряд ли получится, но почему бы не попробовать.

    До недавнего времени я использовал на своем android устройстве пожалуй только Speedtest.net для того чтоб замерить скорость интернета. Но время не стоит на месте и каждый день появляются какие-нибудь новые приложения. Давайте же на них посмотрим.
    Читать дальше →
  • Тестирование реализаций ELM327

    Когда речь заходит о диагностике автомобиля, первое, что приходит на ум, это сканер ELM327, подключаемый по интерфейсу OBD-II. Его можно без лишних трудностей заказать из-под небесной, выбрав нужный интерфейс (USB, Bluetooth, WiFi). Однако на данный момент довольно часто возникают ситуации, когда сканер "криво" работает, либо и вовсе нет. Причин может быть несколько: как "левая" аппаратная конструкция (сейчас под этим подразумеваются сканеры, не на основе PIC18*), так и программное обеспечение (например, указана версия 1.5, по факту ею не являющейся). Стало интересно разобраться, есть только один рабочий вариант по аппаратно-программной начинке, или же различные реализации заточены под разные задачи.

    Читать дальше →
  • nfdump export postgresql средствами php

    Для организации записи и хранения flow статистики v9 был выбран nfdump версии 1.6.13, сконфигурированный с параметром --nsel, что бы можно было учитывать IP адреса, через которые натируется серый ip.

    Была необходимость делать backup'ы файлов, но файлов было много, очень много и весило и размер суммарный этих файлов был большим.
    Решено было делать backup'ы в postgresql на другой сервер.
    Читать дальше →
  • Цикличный вывод или the loopout в php для MODX REVO

    Долго задавался вопросом, при разработке веб-приложений с выводом большого массива данных, о том, какой же способ вывода информации более производительный. Речь пойдет об HERE, ""."" или <?php ?> и именно при разработке сниппетов в MODX REVO. Долго пользовался конструкцией ?><?=?><?, а до этого простым echo ""; но недавно перешел на HERE и сегодня провел небольшой тест на производительность. Тест был максимально простой, и проводил я его для себя в работе с MODX REVO, по этому не претендую на достоверность результатов для других CMS/CMF.
    Читать дальше →
  • Парсер Авито на PHP

    Часто возникает необходимость парсинга Авито. Была статья на Хабре с парсером на перле. Но перл, не часто используемый язык. Решил поделиться актуальным на сегодня парсером Авито на PHP.

    Часто возникает необходимость парсинга Авито. Была статья на Хабре с парсером на перле. Но перл, не часто используемый язык. Решил поделиться актуальным на сегодня парсером Авито на PHP, который я использую в своем сервисе Глиса, отслеживающим новые объявления.

    Ниже приведен код функции, разбирающий html-код страницы результатов поиска мобильной версии Авито. На входе в функцию передается url страницы ($url), которую мы парсим и html-код данной страницы ($html). На выходе функция возвращает массив объявлений. Парсятся все основные данные, доступные в результатах поиска: номер объявления, url картинки, заголовок объявления, цена, дата выхода и ссылка на объявление.

    function getads_avito($url,$html)
    {	
        $pattern = "'<article.{0,10} class=\"(b-item js-catalog-item-enum |b-item js-catalog-item-enum item-highlight)\".{0,10} data-item-id=\"(?<avito_id>.{7,10})\".{1,1000}<span class=\"pseudo-img\"(?<imgsrc>.*?)<.{1,1000}<h3 class=\"item-header\">(?<title>.*?)</span>.*?</h3>(?<price>.*?)<div class=\"item-info\">(?<details>.*?)<div .*? info-text\">(?<data>.*?)</div>.*?<a href=\"(?<href>.*?)\"'si";               	
    	$titre=preg_match_all($pattern, $html, $ads) ;
    	unset($ads[0]);	
    	
    	$pattern2="' url\((?<imgsrc>.*?)\)'si";
    		
    	for ($i=0;$i<count($ads["price"]);$i++)
    	{
    		$ads["price"][$i]=preg_replace('/[^\d]+/', '',strip_tags($ads["price"][$i]));		
    		$ads["title"][$i]=trim(strip_tags($ads["title"][$i]));
    		
    		preg_match($pattern2, $ads["imgsrc"][$i], $ar) ;
    		$ads["imgsrc"][$i]=$ar["imgsrc"];	
    	}
    	return $ads;	
    }


    Пояснения по коду.

    Самый сложный момент — задать регулярное выражение в $pattern. Каждое объявление начинается с <article — по нему и начинаем парсинг.

    Отдельно сделан дополнительный паттерн.
    $pattern2="' url\((?<imgsrc>.*?)\)'si";

    Это нужно для корректной обработки объявлений без картинок.
    Далее в цикле очищаем некоторые данные:
    — оставляем в цене только цифры;
    — чистим от тегов заголовок;
    — выбираем url картинки.

    Думаю понятно откуда берется html-код страницы. Я использую для этого curl. Ну и с полученным массивом объявлений можно сделать все что угодно. Я пишу их в базу. Естественно проверив перед записью на предмет новизны. Ну и отсылаю уведомления на емайл и ботом в Телеграм информацию по новым объявлениям.
  • Web приложение на Java без фреймворков

    Привет!
    Меня зовут Евгений, я программирую на Java примерно 7 лет, и я хочу начать цикл уроков о том, как же можно жить и писать веб приложения на Java без фреймворков вроде Spring Framework, или Play Framework, и когда и почему это стоит делать. Цикл будет иметь имя iBoard, так как я буду показывать реальные примеры на продукте iBoard — доска объявлений. В уроке мы рассмотрим, как построить хорошую архитектуру для такого приложения, рассмотрим не стандартный стек для разработки такого приложения, и сравним, что же лучше, Java EE с фреймворками или Java SE с библиотеками.

    Хочу сказать сразу, я не заставляю кого-либо отказываться от фреймворков, и спорить что лучше. Обязательно осознайте это, что бы не разгорались холивары по поводу выбора технологий/фреймворков и т д.

    Почему без фреймворков?
    Давайте рассмотрим пример с Spring Framework.
    Для начала, давайте разберем, почему Spring Framework это плохо. Для начала, хочу сказать, что в целом Spring Framework достаточно хороший и не плохой фреймворк, но у него есть ряд недостатков, которые заставляют разработчиков писать плохой код. В большей части, это связано с тем, что большинство фреймворков пишутся под стандарты Java EE, что бы быть максимально совместимы с различными технологиями из этого стека. Но в реальном мире, Java EE Вам не нужен в принципе.
    Читать дальше →
  • Подготовка образа ВМ с Windows

    В этой статье я расскажу о создании образа ВМ с Windows Server, его развертывании и создании тестовой среды для работы с Windows Server.

    Я часто создаю ВМ с Windows для тестирования различных технологий. Со временем я частично автоматизировал этот процесс и хочу об этом расказать. Эта статья может быть интересна начинающим Windows администраторам. Затронуты будут следующие темы:
    1. Установка и базовая настройка Hyper-V в Windows 10
    2. Создание образа виртуальной машины
    3. Создание виртуальной машины из образа на базе разностного диска
    Читать дальше →
  • Реализация стеганографического алгоритма «замена LSB» на языке vb.net

    Доброго времени суток, уважаемые читатели! Несколько лет я изучаю стеганографию, и считаю, что неплохо реализовал метод LSB на vb.net в своём приложении, поэтому я хочу поделится с вами моими наработками.
    Читать дальше →