• Как запустить задачи gulp из Nodejs при запуске своего приложения?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    есть (exec) но не стоит. Для автоматизации сборки и прочего существует масса других занятных технологий. папеты, ансиблы и т.д.

    blog.carbonfive.com/2014/06/02/node-js-in-production - например.
    Ответ написан
    Комментировать
  • Как в JavaScript определить где находится выполняемый скрипт?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    chrome debug tools

    Как можно выслеживать - если код добавляет что-то в DOM - можно отлавливать изменения оного и трекать кто меняет. Если кто-то свои обработчики лепит на какие-то события - это тоже можно посмотреть. Ну и консолька и дебагер помогут.
    Ответ написан
  • Как реализовать обрезку mp3-файла в приложении Android?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    https://code.google.com/p/mp3fenge/ - делает обрезания.

    длительность трека можно из метаданных выяснить, но обычно это делается перебором всех фреймов (в случае если это дело кодировано с переменным битрейтом). Задача довольно распространенная. Решений так же масса. Более того, в сети валяются схожите опенсурсные проектики, поищите.

    И сверху еще вопрос - как реализовать загрузку файла на сервер php.

    Если очень просто делаеть, POST запрос в multipart/form-data (файл в теле запроса кодированный в base64, примеров хватает). Но можно сделать и посложнее (отправна напрямую бинарных данных, можно по кускам), благо в PHP нету проблем с чтением тела запроса. Так что тут что придумаете.
    Ответ написан
    1 комментарий
  • Как декодировать mp3 в PCM ?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Подскажите пожалуйста, как его разобрать в импульсно-кодовую модуляцию?

    насколько я понял это она и есть, попробуйте так:
    System.out.println(Short.valueOf(next));
    Ответ написан
    Комментировать
  • Как всё-таки оптимально импортировать из XLS в PHP?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Разработчики по-моему слишком заморочились с поддержкой форматирования.

    а какой смысл тогда в библиотеке если оно не будет уметь основного?

    Можно сконвертить файлик в xlsx и потом уже работать с более шустрыми библиотеками или напрямую парсить xml с xpath.

    Если вам только данные вытащить нужно, можно вообще дампнуть в CVS.
    Ответ написан
    Комментировать
  • Как создать селекты с ajax подгрузкой в symfony?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    У вас есть возможность создать свой form type (аля ajax-select), сделать для него свой form view, дата трансформеры, да все что угодно. В чем проблема то?
    Ответ написан
  • Как установить единую временную зону для php и mysql при старте сайта?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    php.net/manual/en/function.date-default-timezone-s... + записать в конфиг и восстанавливать нужное значение при запуске.

    А еще лучше, потыкать штуки типа ansible, из web интерфейса генерить чисто файлы с переменнми и потом выполнять ансиблом провиженингн окружения.
    Ответ написан
    Комментировать
  • Каким образом можно перехватить ошибку при выполнение автоматического теста с использованием Codeception и обработать эту ошибку нужным образом?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    ошибка выполняется не в тест-раннере а в приложении. 99% что приложение запускается отдельно и влиять на него через Codeception вы никак не можете. Так что это нужно разруливать как-то на уровне приложения. Либо в случае ошибки из логов вытягивать что случилось. Последнее пожалуй лучший вариант.
    Ответ написан
    Комментировать
  • Как передать переменную из встроенного скрипта во внешний?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    <?php $isEdit = 'Yes'; ?>
    <script type="text/javascript">
        window.isEditJS = <?=json_encode($isEdit); ?>; // что бы небыло потом проблем с типами и кавычками
    </script>
    <script src='/isedit.js'></script>
    Ответ написан
    1 комментарий
  • Верстка на мобильном телефоне текст в некоторых местах большего размера почему?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    слишком много эмоций и нету ни картинки что бы увидеть проблему ни какой-либо другой информации. Может у вас там стили через медиа-запросы подключаются, может еще чего...
    Ответ написан
    Комментировать
  • Как можно реализовать такой функционал всплывающего окна?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    намекну:
    cookie-monster-your-edm.jpg
    Ответ написан
    Комментировать
  • Асинхронная многопоточность в PHP: для чего?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Все очень просто. Вот вам приблизительное значение таймингов доступа к данным:
    io-cost.png

    То есть запросив данные в сети мы тупо ждем. Долго ждем и ничего не делаем.

    В случае с curl (он же HTTP) мы можем соорудить очередь запросов и послать их одним махом и ждать пока завершится загрузка всех документов в очереди для обработки результатов. Если мы хотим забрать 10 документов, то без multi curl у нас ушло бы времени "среднее время получения документа" * 10. И это примерно. В случае же с мультикурлом мы получаем время обработки 10 запросов как время выполнения самого долгого запроса. Если представить что время запросов всегда одинаковое, получаем выйгрыш примерно в 10 раз.

    С сокетами веселее. Они бывают блокируемые (по умолчанию) и неблокируемые (выставляется опцией O_NONBLOCK). Для начала давайте определимся что такое чтение данных из сокетов и как нам это дело предоставляет операционная система. Упрощенно, когда мы создаем сокет, мы просто просим операционную систему предоставить оный. У каждого сокета есть буфер чтения и буфер записи. Если буфер записи полный - ОС начинает отправку данных пока буфер не опустеет (буфер записи нужен для организации проверки дошли ли пакеты и переотправки в случае чего, так же этот буфер замешан в выборе операционкой размеров пакетов и т.д. Это не особо важно в контексте вопроса). Когда данные приходят в сокет, сначала они помещаются в буфер чтения. Там они лежат пока их не попросят вернуть из кода. Так мы можем быть уверены в том, что данные не пропадут.

    Так вот... возьмем блокирующие сокеты и попробуем запросить 1024 байт данных из оного. Причем клиент в данный момент ничего не отправляет, буфер чтения пустой. И так допустим минут 10. Как только мы сделали запрос за данными, и оказалось что буфер чтения пустой, процесс выполнения блокируется пока не появятся данные.

    А теперь представим что проверять периодически наличие данных нам надо не в одном сокете а в десятке. Представим так же что 9 клиентов подключенных по нашим сокетам хорошие и присылают данные вовремя, а один не хороший и любит тупить по пол часа. Если бы мы пользовались блокирующими сокетами, то мы можем обрабатывать только одного клиента за раз. Причем если у него вдруг данных не оказалось - нам придется ждать, хотя в других сокетах уже вполне могли появиться данные какие для обработки. И если в случае с "хорошими" клиентами мы можем тратить на оных по пол секунды - секундочке, то наткнувшись на плохого клиента наш сервер замирает за те самые пол часа о которых мы договаривались. Сервер тупо ждет "плохого" клиента а хорошие в итоге не могут достучаться до сервера. Новых соединений мы так же не установим... короче все мертво.

    И тут на помощ к нам приходит опция O_NONBLOCK. В этом случае если у сокета пустой буфер чтения он сразу вернет выполнение не вернув нам ни капли данных не дожидаясь медлительных клиентов-тугодумов. В случае если буфер не пустой - все будет так же как и в случае с блокирующими сокетами - тупо вернет содержимое буфера и вернет управление. Так что мы можем в бесконечном цикле просто проверять по очереди все сокеты. В этом случае делей получения данных будет сведен к минимуму.

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

    Еще есть такая чудная штука, которую предоставляет операционная система как select или epol (в контексте php socket_select и stream_select). Данные функции позволяют нам скармливать массивы сокетов, за которыми вы следите (не сокетов, а их дескрипторов но не суть, и не один массив а три, массив дескрипторов что бы следить появились ли данные на чтение, записал ли сокет все и освободился ли буфер записи и третий отслеживает сокеты в которых произошли какие-то ошибки, например отвалилось соединение). Так же этой функции можно задавать таймаут, что очень удобно если мы сначала собираем данные с нескольких клиентов и если от них небыло вестей пару секунд, значит мы забрали все и можно начинать обработку.

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

    Но все что выше имеет смысл только с TCP/TLS, если бы у нас были UDP сокеты, то было бы еще веселее. Там нету никаких буферов. Не принял данные - потерял данные. Нету соединений. Нету блокировок. Есть только пакеты. Поэтому этот протокол используют (или используют как основу) для реализации реалтайм систем. Задержек нету, а если какой пает не дошел, велика вероятность что он уже не актуален. Правда если сеть не надежная и потери пакетов велики, то начинается боль и слезы и обычно все же для таких случаев дублируют все на TCP.
    Ответ написан
  • Как найти объект в массиве по свойству?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Вопервых индес будет 2 а не 3
    Во вторых так как данные у вас не отсортированы, сложность алгоритма поиска в любом случае будет O(N).
    В третьих если бы данные были отсортированы по этому ключу, можно было бы применить бинарный поиск у которого сложность будет O(1 +logN). Есть еще интерполяционный поиск со сложностью O(log(log(N)) но опять же работает только с отсортированными массивами.
    Ну и последнее, 100К+ элементов это не так много.

    Все три метода: jsfiddle.net/op1jxpsm/2 на массиве из 10 000 000 элементов
    Результаты:

    Хороший для тупого перебора случай, ищем 12415
    Basic search: average=0ms, min = 0ms, max = 2ms
    Binary search: average=0ms, min = 0ms, max = 0ms
    Interpolation search: average=0ms, min = 0ms, max = 0ms

    Средний для перебора случай, ищем 3451524:
    Basic search: average=64ms, min = 62ms, max = 67ms
    Binary search: average=0ms, min = 0ms, max = 0ms
    Interpolation search: average=0ms, min = 0ms, max = 0ms

    Плохой для перебора случай, ищем 9542417:
    Basic search: average=176ms, min = 158ms, max = 182ms
    Binary search: average=0ms, min = 0ms, max = 0ms
    Interpolation search: average=0ms, min = 0ms, max = 0ms
    Ответ написан
    Комментировать
  • В какие крупные компании можно устроиться JAVA программистом, и как?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    План успеха:

    1) Выучить Java и сопутствующие технологии
    2) Практика
    3) ???
    4) Успех
    Ответ написан
    Комментировать
  • Вопрос про флеш-приложение?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    технически да, сохраняете swf и радуетесь. Есть всякие swf декомпиляторы и прочие забавные вещи.
    Ответ написан
  • Как сделать проверку на регулярные выражения?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    пук как-то не салидно, надо фарт.

    <?php
    
    if ('POST' === $_SERVER['REQUEST_METHOD']) {
        if (!empty($_POST['maria']) || !preg_match('/^\d+$/', $_POST['maria'])) {
             $age = intval($_POST['maria']);
             if ($age > 200) {
                   echo "столько не живут!";
             }
        } else {
             echo "возрост не введен!";
        }
    }
    ?>
    <meta charset="utf-8">
    <form method="post">
        введите свой возраст: <input type="text" name="puk">
    <input type="submit" name="maria" value="кукушка">
    </form>
    Ответ написан
    Комментировать
  • Сравнение списков, как лучше организовать?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    циклы, запросы и все такое... Вы бы описали как сравниваете.
    Ответ написан
    4 комментария
  • Какую выбрать тему для дипломной работы?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    если брать PHP то вот какие вещи нужны народу:
    - замена морально устаревшему phing-у (есть robo как альтернатива, но мне лично не очень нравится). Можно провести хорошую исследовательскую работу и составить решение достойное нынешних дней.
    - фабрики фикстур (framework-independent с возможностью интеграции). На данный момент существует только phactory из достойных (еще есть PHPMachinist из достойных). Есть мысль запилить авторесолвинг блупринтов для этих библиотек что бы было проще интегрировать в проект и рулить фикстурами. Так же можно продумать более упрощенное API для быстрой разработки. И да, ключевой момент тут - производительность и возможность ресетить все добавления в базу (что бы уменьшить время прогона тестов).

    Собственно вот... это то чего мне не хватает. Остальное относится с корее к тех-процессам. Скажем я пока не знаю как наладить процесс автоматизированного деплоя с ansible + docker (какую роль должен вы полнять ансибл) но тут не думаю что вы поможете. Хотя у моего знакомого темой диплома была тулза для конвертации форматов контейнеров для различных облачных сервисов. Может можно подумать и в этом направлении.
    Ответ написан
    2 комментария
  • Что вы используете для минификации и конкантенации CSS и JS файлов?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    gulp + gulp-concat + gulp-sourcemap (для разработки) + gulp-strip-debug + gulp-uglify (последние два только для релиза).

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

    p.s. все то же самое есть под grunt просто мне gulp больше импонирует (конфиги гранта разрастаются как чума, они довольно тупые, приходится создавать промежуточные файлы, все все делают как хотят... короче не вижу смысла уже им пользоваться).

    p.p.s. использую этот стэк для сборки и разработки фронтэнда как в отдельных js проектах так и в контексте разработки под symfony (выкинул ассетик ибо бесит).
    Ответ написан