• Действительно ли back-end разработка более консервативна, чем front-end?

    hrls
    @hrls
    Половина ответа в вопросе, но дьявол в мелочах.
    Действительно, для относительно продуктивной backend-разработки практически на любом языке программирования необходимо знать несколько базовых фреймворков и тулов, которые решают большинство задач. Это скелет ~90% приложений сложнее hello world. Хотя и этот скелет меняется и развивается, пусть и не так быстро как хотелось бы, как разнообразные отростки (не консервативность, но более долгий жизненный цикл). Суммарный вес технологий и инструментов не меньше, и уж точно не менее динамично изменяющийся, чем у frontend-разработчиков.
    Далее личный опыт на примере Java.
    Лет 7-8 тому достаточно было знать Spring, Struts, Hibernate да Apache Commons в довесок для разработки большинства решений. Ну и J2EE-стек для задач Enterprise-уровня.
    В году 2014 Spring, Hibernate все также в арсенале программиста, но появилась куча абсолютно новых вещей вроде AMPQ, Hadoop, Netty, Scala с функциональной парадигмой, мультиязычные окружения с Clojure/Groovy/JRuby; стали чаще встречаться альтернативные реализации популярных библиотек (например Guice / Guava); старые технологии вроде J2EE стали использоваться несколько реже. А одних только Key-Value хранилищ, кэшей и прочих NoSQL как грязи. Изменился даже сам подход к построению приложений – мало кто в 2005 слышал про asynchronous event-driven модели и отталкивался при проектировании от REST-стиля (собственно, там и корни frontend-девелопера как отдельной специализации). Про эволюцию систем сборок, VCS, бенчмарков и прочих "микро"-элементов можно расписывать не одну простыню.
    И да простят меня frontend-товарищи за, возможно, чванливый тон, но раскурить тонкости работы async IO в зависимости от ОС-специфики вроде epoll/kqueue или учитывать CAP-теорему при построении middleware-кэша это уровнем сложности повыше, чем новый CSS-препроцессор и CoffeeScript c очередным MVC / MVVM-фреймворком. Некоторые задачи, вроде синхронизации потоков, так и вообще лежат большей частью в области математики.
    Уверен, что и в frontend-разработке существуют задачи сложнее и интереснее поехавшей на пиксель верстки и обновления полей после парсинга JSON, но ИМХО backend-разработка ближе к системному программированию старой школы, в то время как frontend суть прикладное программирование с примесями дизайна.
    Frontend-инструментов больше, backend-инструменты сложнее.
    Ответ написан
    4 комментария
  • Как помешать декомпилировать клиентскую программу?

    xappymah
    @xappymah
    Возможно, вам стоит посмотреть на проект Excelsior JET.

    Он позволяет статически скомпилировать Java-приложение из байткода в оптимизированный нативный (машинный) код.
    Иными словами, на входе подаете свое Java-приложение, на выходе получаете бинарник, как если бы вы скомпилировали бы какой-нибудь сишный код.
    При этом, для работы скомпилированного приложения уже не нужны class-файлы (за исключением некоторых случаев), таким образом декомпилировать уже нечего.
    Конечно, бинарник можно дизассемблировать и понять логику каких-нибудь локальных кусков, но восстановить из этого исходный код - это непосильная задача.

    Собственно, прямых ссылок не буду давать, чтобы совсем не наглеть, учитывая, что я один из инженеров, работающих над этим проектом :)
    Вместо этого дам ссылку на доклад моего коллеги на JavaZone на тему JET'а и AOT-компиляции Java-приложений в целом:
    https://vimeo.com/181905276
    Ответ написан
    Комментировать
  • Как автоматически создать 100 папок и переместить в каждую по 10 картинок из общей папки?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    BASE=`pwd`/..
    for DIR in `seq 1 100` ; do
        mkdir "$BASE/$DIR" && { find -type f | head -n 10 | xargs -d"\n" -I{} mv {} "$BASE/$DIR" ; }
    done
    Ответ написан
    4 комментария
  • Как автоматизировать репост в VK?

    Noizefan
    @Noizefan
    Спалю свою интересную фишку: лайкаю посты в ленте, мой скрипт берёт каждые 10 секунд мои закладки и раз в час добавляет в паблик группы первую/все фотографии(-ю) лайкнутых постов в паблик.
    И, конечно, как же без этого, само собой прикрепляет к посту ссылку на источник :D
    Да-да, плохо, но так уж получилось что ВКонтакте лишь единицы генерируют исключительно уникальный контент, остальные только берут.

    Воровать налету - дорого и по времени разработки и по времени обслуживания такой технологии. Ведь нужно следить за пабликами из которых берёшь, модерировать хоть минимально посты от неадеквата и рекламы, и организовать всё так, чтобы посты чередовались из разных источников. ("спиши но не точно")
    Ответ написан
    2 комментария
  • Как правильно развернуть удостоверяющий центр?

    Laroux
    @Laroux
    Администратор Удостоверяющего центра
    Должен ли корневой сертификат (CompanyName Root CA) иметь ссылки на crl и ocsp?
    Ответ: Корневой самоподписанный сертификат не должен содержать ссылок на crl и ocsp

    А вот что касается любого (ну почти любого) подчиненного сертификата - в нем д.б. ссылка на crl. Ссылка на ocsp - опционально, по Вашему желанию или требованию информационной системы (ИС).
    Соответственно, как в сертификатах подчиненных УЦ (Проекта 1, Проекта 2, VPN и т.д.) обязательно должна быть ссылка на crl. Уже не говоря о клиентских сертификатах, выпущенных УЦами Проекта 1, Проекта 2, VPN и т.д.

    Ссылка на crl в сертификатах УЦов Проекта 1, Проекта 2, VPN и т.д. будет одна и та же и будет содержать список отзыва, выпускаемый Корневым УЦ. С помощтю этого СОС можно управлять сер-тами подчиненных УЦ.

    В сер-тах, выпускаемых УЦами Проекта 1, Проекта 2, VPN и т.д. будет содержаться ссылка на crl, соответствующий каждый определенному УЦ и управлять отзывом сер-тов клиентов можно с каждого подчиненного УЦ, на котором сер-т этого клиента был выпущен.

    Не совсем понятно, что означает фраза "получить доступ к CompanyName Project 2 CA по сер-ту, выпущенному на УЦ CompanyName Security CA".
    Судя по всему ответ "нет" - получить доступ к CompanyName Project 2 CA по сер-ту, выпущенному из под CompanyName Security CA, не получится.

    Что же касается ИС, в которых используются сертификаты, то реализация функции доверия этой ИС к сер-ту целиком и полностью ложится на плечи разработчика ИС и ее архитектуры.
    Самый простой способ ограничить использование сер-тов выпущенных только CompanyName Project 2 CA - это установить корневой сер-т CompanyName Project 2 CA в систему и проверять эту цепочку. При этом сер-т CompanyName Security CA в ИС должен отсутствовать
    Ответ написан
    4 комментария
  • Как показать когда была создана тема в поиске Google и Yandex?

    VasyaPertrov
    @VasyaPertrov
    Изготовление и безопастность сайтов. WP и др.
    Вот и вопрос, что нужно сделать чтобы на моем сайте такое было?

    На выбор или всё вместе:

    - Микроразметка
    - time HTML5
    <time class="entry-date published" datetime="2017-03-29T21:51:42+00:00">29.03.2017</time>

    -sitemap.xml
    Ответ написан
    Комментировать
  • Гаджет выводящий последние папки в win 7?

    tsklab
    @tsklab
    Здесь отвечаю на вопросы.
    FAR
    2442d5cdcb604368a7caca5ede68eb52.png
    Ответ написан
    Комментировать
  • Как в yii подключить отдельные стили на определенную страницу?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Так же как и всегда. Либо добавить стили в head
    //это во view
    $this->registerCss('
    body {background-color:#fff;}
    ');

    либо как файл.
    //это во view
    $this->registerCssFile('path/to/myfile');

    Если зависимостей много и их еще где-то в таком же наборе надо подключить, то можно создать AssetBundle, подробнее тут www.yiiframework.com/doc-2.0/guide-structure-asset...
    Как правило в самом view не подключают css и js, так как при правильной верстке все должно быть виджетами, а у виджетов есть свой метод подключения зависимостей. И если есть необходимость во view прописать какой-то css, то скорее всего это ошибка глобальная в структуре.
    Ответ написан
    1 комментарий
  • Как обновить страницу, которая формируется в php, при нажатии на кнопку?

    Steein
    @Steein
    Программист
    (function($)
    {
        $(document).ready(function()
        {
            $.ajaxSetup(
            {
                cache: false,
                beforeSend: function() {
                    $('#content').hide();
                    $('#loading').show();
                },
                complete: function() {
                    $('#loading').hide();
                    $('#content').show();
                },
                success: function() {
                    $('#loading').hide();
                    $('#content').show();
                }
            });
            var $container = $("#content");
            $container.load("file.php");
            var refreshId = setInterval(function()
            {
                $container.load('file.php');
            }, 9000);
        });
    })(jQuery);

    Авто-обновление файла через каждые 9c (Я вас правильно понял вам нужно чтобы php файл автоматически обновлялся?)
    Ответ написан
    9 комментариев
  • Какие есть аналоги base64 для картинок?

    Steein
    @Steein
    Программист
    Если правильно конвертировать в Base64 они все будут отображаться!

    $files = array_slice($argv, 1);
    foreach ($files as $file) {
       $picture = file_get_contents($file);
       $size = getimagesize($file);
       // base64 encode бинарные данные, а затем разбить его на фрагменты в соответствии с семантикой RFC 2045
       $base64 = chunk_split(base64_encode($picture));
       echo '<img src="data:' . $size['mime'] . ';base64,' . "\n" . $base64 . '" ' . $size[3] . ' />', "\n";
    }


    //Этот код из официального сайта PHP.NET

    function base64_encode_image ($filename=string,$filetype=string) {
        if ($filename) {
            $imgbinary = fread(fopen($filename, "r"), filesize($filename));
            return 'data:image/' . $filetype . ';base64,' . base64_encode($imgbinary);
        }
    }

    .logo {
        background: url("<?php echo base64_encode_image ('img/logo.png','png'); ?>") no-repeat right 5px;
    }

    <img src="<?php echo base64_encode_image ('img/logo.png','png'); ?>"/>
    Ответ написан
    2 комментария
  • Кто напомнит ресурс, который помогает строить предложения на английском?

    @raspier
    Java Developer
    Когда у меня возникает такое, я иду на Reverso Context
    Пишешь что хочешь сказать на русском, он ищет совпадения (я так понял, что в субтитрах и книгах). Я так формирую предложения для переписки.
    Ответ написан
    6 комментариев
  • Что надо понять в ООП?

    @Nwton
    Немного теории + практика + теория + практика + углубленная теория + практика + практика + практика.
    Ответ написан
    2 комментария
  • Что за isTrusted в событии on blur?

    Sanasol
    @Sanasol Куратор тега JavaScript
    нельзя просто так взять и загуглить ошибку
    это значит событие вызвано юзером, а не программно т.е. это не какой-то JS скрипт пытается trigger запустить и спарсить ваш сайт например.
    Ответ написан
    Комментировать
  • Как объяснить рядовому клиенту, что сайт, сделанный руками, а не на шаблоне, для него будет лучшим выбором?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    > Как вы, уважаемые коллеги, объясняете своим заказчикам, что проект, созданный командой разработчиков (UX-дизайнер, верстальщик, программист и т.д.) будет заведомо лучшим выбором, нежели, чем тот, который собран на коленках школьником вечером после уроков быстро/сердито/дешево?

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

    > "Как объяснить рядовому клиенту, что сайт, сделанный руками, а не на шаблоне, для него будет лучшим выбором?"

    Сперва убедитесь, что именно ВЫ понимаете, что хочет клиент. Например вы сможете с цифрами доказать, что сайт, созданный вами с нуля повысит продажи клиента на 10%, а сайт на шаблоне не повысит? Вы точно это сможете сделать? Если нет, то зачем клиенту знать какие кишки внутри сайта, если он выполняет свою бизнес задачу за минимальные деньги?

    > Рынок буквально переполнен дешевыми предложениями о создании сайтов (лендингов, интернет-магазинов и т.д.), которые созданы на универсальных шаблонах к WP/Joomla или конструкторах Wix/Lpgenerator/и т.д. Стоимость таких предложений довольно низкая. Рядовой клиент все чаще выбирает исполнителя по наименьшей цене.

    И правильно делает. Зачем для сайта-визитки среднестатистической компании что-то еще? Для ИХ БИЗНЕСА, этого ДОСТАТОЧНО, и понятно, что чем ниже цена, тем лучше клиенту. Для развозки пиццы покупают маленькие мотороллеры, а не крутые, вручную собранные харлеи. Потому что все это - инструменты, а не самоцель.
    Ответ написан
    3 комментария
  • Как объяснить рядовому клиенту, что сайт, сделанный руками, а не на шаблоне, для него будет лучшим выбором?

    @lubezniy
    А Ваша ли это целевая аудитория? Если у сайта будет посещаемость 10 человек в день, зачем заказчику оплачивать дорогой труд множества специалистов, когда такой сайт на коленке легко построит студент? Большие затраты на такие сайты просто не окупятся. Вот когда клиент поймёт, что "перерос" такие сайты, тогда уже ему и нужны будут подобные предложения. И, исходя из этого, и нужно ориентировать рекламу, ответы на вопросы и т. п. (слоганы вроде "задолбался - иди к нам будем долбаться вместе).
    Ответ написан
    Комментировать
  • Как следить за процессом работы потока в %?

    @Aves
    Можно сделать что-нибудь в таком роде:
    const stream = require('stream');
    const fs = require('fs');
    
    class PercentWatcher extends stream.Duplex {
      constructor(fd) {
        super();
        this.size = fs.fstatSync(fd).size;
        this.handled = 0;
      }
      _read() {}
      _write(chunk, encoding, callback) {
        this.push(chunk);
        this.handled += chunk.length;
        console.log(`\n\n${Math.round(this.handled / this.size * 100)}%\n\n`);
        callback();
      }
    }
    
    const fd = fs.openSync('file.txt', 'r');
    
    fs.createReadStream(null, {fd}).pipe(new PercentWatcher(fd)).pipe(process.stdout);
    Ответ написан
    2 комментария