• Есть ли долговечное хранилище файлов?

    @uelkfr
    Облака дают гарантию примерно 99.9999999%, правда не знаю за какой период и прогрессивный или константный процент. Таким образом, если хранить две одинаковые копии, то обратные проценты умножаются (100% - (100% - 99.99999999%) * (100% - 99.99999999%)) минус скорость реагирования на порчу одной копии и создании дополнительной копии, некоторые облака предоставляют такую функциональность автоматически, например, российская разработка Acronis Cloud Backup (которые уже весь мозг проели своей тупой рекламой на хабре). Поэтому рекомендую посмотреть в сторону Amazon Glacier - будет гораздо дешевле и бренд более узнаваемый нежели Acronis. Не использовать аккаунт 10 лет не получится, потому что нужно будет платить за каждый GB каждый месяц.

    Если же планируется, что к данным будут очень редкие обращения, то лучший вариант это Verbatim DVD M-Disc или Verbatim DVD минус R. Если сравнивать с BluRay, мне почему-то кажется что DVD значительно надежнее (долговечнее).
    Ответ написан
  • Где найти экспертов для ранжирования сайтов?

    @uelkfr
    Вы хотите найти наборы тестовых данных для оценки качества поиска поисковой системы? Т.е. грубо говоря один тест - это связка "сырой контент html+css+js+images+еще-что-то допустим 500 страниц" + "входной поисковый запрос" => "идеальная поисковая выдача 10 результатов" (идеальная означает сортировка по релевантности). Например, Google и Яндекс имеют такие наборы, причем наборы постоянно улучшаются и имеют версии v1.0, v1.1, v1.2 и т.д. и даже возможно ветки. Иногда новая версия набора хуже оценивает качество поиска чем предыдущая, за что наверное авторы набора получают по башке от выше стоящего над департаментом руководства (извините за грубость, день просто сегодня такой :) ), но обычно каждая версия оценивает качество лучше чем предыдущая, а также оценивает новые фичи добавленные в поиск, например, Google со временем добавила фильмо-поиск и актеро-поиск.

    Насколько мне известно Google и Яндекс нанимают специалистов для создания данных наборов и такие специалисты называются асессорами:
    https://yandex.ru/jobs/vacancies/assessors/asessor/
    Совместо с учеными по лингвистике, морфологии, полнотекстовому поиску, ранжировнию по релевантности, прикладных математиков они создают такие наборы для нужд организации.

    Насчет возможности получения таких тестовых наборов без нанятия всех выше указанных специалистов я не слышал. (Хотя есть идейка как задешево создать один хороший тест (а может даже набор тестов), но поделится не могу.)
    Ответ написан
  • Можно ли писать server-side на нескольких языках одновременно?

    @uelkfr
    Однозначно микросервисы или агентно-ориентированные системы, с единым протоколом REST или RPC и любым транспортом HTTP или TCP (рекомендую HTTP). Для фронтовой части из ваших вариантов больше подойдет Python, для API-шных частей Go. Как говорил мой знакомый "учите протоколы, технологии, принципы и архитектуры, а не языки", не стоит любить один определенный набор языков, но и изучать все языки подряд тоже конечно не стоит.

    Технологии для агентно-ориентированных систем совместимых с Вашими языками скорее всего нет, поэтому придется писать самому, да и сложнее они, поэтому лучше микросервисы. Отличие агентно-ориентированных систем, то что обмен данными идет по принципу очереди, а не простые API-вызовы, также они более живучи (high-availability), там есть процедура избрания для каждой роли (election), контроль здоровья и перезапуск на основе контроля здоровья и эскалирования ошибок. Например, DNS - это микросервис, а Consul - это уже агентно-ориентированная система.
    Ответ написан
  • Как настроить виртуальный браузер (Selenium) на PHP?

    @uelkfr
    Если не выводится никаких сообщений об ошибке после запуска

    java -Dwebdriver.chrome.driver=chromedriver -jar selenium-server-standalone-2.48.2.jar

    в другом SSH-окне проверьте что он запустился

    sudo netstat -tlnp | grep 127.0.0.1:4444

    Попробуйте заменить localhost на 127.0.0.1, т.к. вроде на современных системах localhost означает ::1, есть подозрение что с ipv6 бывают проблемы.

    Также попробуйте добавить флаги для анализа ошибки:
    java -Dwebdriver.chrome.driver=chromedriver -Dwebdriver.chrome.args="--logging-level=3" -jar selenium-server-standalone-2.48.2.jar --verbose
    Ответ написан
  • Владение какой технологией/ЯП в США имеет наибольший шанс на получение хорошей работы?

    @uelkfr
    Я думаю так:
    1) JavaScript - высокая востребованность и зарплата
    2) Java - высокая зарплата, средняя востребованность
    3) C/C++ - высокая зарплата, не подходит для молодежи, низкая востребованность
    4) перспективно Scala, Closure, Rust
    5) в США наверное Objective C и Swift популярны

    По технологиям:
    1) Web Backend (centos, ubuntu, debian, Docker, Docker Swarm/Kubernetes, ansible, systemd, supervisor, nginx, haproxy, php5-fpm, nodejs, postgresql, mysql/mariadb/perconaserver, redis, cassandra, Consul, Ceph, ElasticSearch/Sphinx)
    2) Web Frontend (html6, web 3.0, css5, es8, nodejs, gulp, grunt, browserify, angularjs, react, flux/redux, mocha, selenium-webdriver, protractor)
    3) Android/iOS (менее перспективно BlackBerry, Sailfish OS, Ubuntu Touch)
    4) Databases (ext4, Ceph, Oracle, PostgreSQL, Cassandra, ElasticSearch/Sphinx)
    5) Big Data
    Ответ написан
  • Почему использование триггера в mysql/oracle/mssql ... в web-программирование (и не только) считается признаком говнокода?

    @uelkfr
    Они мешают локализации бизнес-логики внутри вашего приложения. Т.е. бизнес-логика разделяется на две части и на два языка программирования. Рассмотрим каждый из недостатков по отдельности.

    1. Бизнес логика разделяется на две части. Этот недостаток особенно проявляется при использовании веб-фреймворков и в частности паттерна ORM. В паттерне ORM при создании, обновлении, удалении объекта через шину событий вызываются обработчики события, в них и пишется бизнес логика, а хранимые процедуры этого лишают. Хранимые процедуры дают оптимизацию и у программистов есть недостаток к преждевременной оптимизации, что может привезти к резкому усложнению архитектуры и кода.

    2. Бизнес-логика пишется на двух языках программирования. Во-первых нужно знать, хорошо знать, два языка. Во-вторых, нужно вводить Coding Style Standarts еще для одного языка. В-третьих, языки хранимых процедур (T-SQL, PLSQL и т.п.) не очень подходят для написания сложной бизнес-логики, а современные требования к бизнес-логике как раз требуют софистики. Вообщем код получается запутанным, нечитаемым, сложно модифицируемым и т.д.

    Я признаю только триггеры, только util-триггеры. Например, триггер запрещающий удаление записей в определенной таблице, это можно сделать с помощью прав, но лучше дополнительно защитить триггером который будет распространятся глобально на всех пользователей. Второй пример, это триггер подсчета количества записей в таблице, как известно COUNT(*) на больших таблицах обходит весь индекс по PRIMARY KEY, а вообще большие таблицы зло - лучше сразу шардить.

    P.S. На опыте скажу сталкивался с системой КИС УЗ Модус, разработчик отказался разрабатывать сервер и запил всю бизнес логику на T-SQL и вызывал их из клиентского десктопного приложения. Вообщем печальная была система.
    Ответ написан
  • В чем преимущество phantomjs перед selenium?

    @uelkfr
    PhantomJS - полностью headless-браузер, не требует X11 Server или DXGI, таким образом потребляет меньше ресурсов и работает на порядок быстрее (но медленнее ZombieJS разумеется). Недостатками при этом являются отсутствие поддержки Flash, старая версия JavaScript-движка V8, старая версия Webkit - из последних двух причин следует, что отсутствует поддержка новых технологий HTML5 - из чего следует не все сайты работают корректно. В ZombieJS дела еще хуже, он вообще со многими сайтами не работает, т.е. для парсинга не подойдет, для тестирования может подойти, но готовтесь к тому что придется отлаживать сам ZombieJS.

    Selenium может работать как с полностью headless-браузерами PhantomJS, SlimerJS, TrifleJS, ZombieJS, так и с обычными браузерами Chrome, Firefox, Opera, Internet Explorer (последние потребляют очень много ресурсов и обычно поднимают Selenium-ферму). При этом используется единый протокол общения с браузерами JsonWireProtocol (Webdriver Protocol) через extension или через их управляющие модули (xul-runner). Таким образом, пишется один код не привязанный к конкретному браузеру, а тестируется в нескольких браузерах. Но конечно у каждого браузера есть свои особенности и Selenium их не покрывает, и поэтому все равно приходится под каждый браузер дописывать слой кода совместимости. Если же тесты простые: заполнить поля, отметить галочку, добавить файл, нажать на кнопку или ссылку тут, то Selenium подойдет.

    Грубо говоря на PhantomJS 99% сайтов будет работать как в Chrome, но 1% сайтов будут работать с ошибками. Но насколько я понимаю это лишь важно если вы пытаетесь scrape-ить один из сайтов попадающих в этот 1% :)

    Если ваша компания маленькая, то рекомендую легковесные технологии ZombieJS, PhantomJS, Mocha, если ваша компания крупная, есть большой штат сисадминов, тимлидов, архитектов, то рекомендую тяжеловесные масштабируемые технологии Docker, Vagrant, Selenium, Jenkis CI.
    Ответ написан