Задать вопрос
  • Получить responseText из json файла?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    xhr.open('GET', '/static/printing/cityes.json', false);
    Ответ написан
    1 комментарий
  • Почему говорят, что postgress лучше для более-менее серьезного проекта чем что-либо иное?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега PostgreSQL
    Седой и строгий
    Этот вопрос на Тостере задают примерно раз в неделю и в Интернете полно сравнений. Например, это или это. Для меня лично самый главный косяк MySQL в том, что в 2018-м году он даже стандарт SQL 92-го года поддерживает не в полном объёме. Или вот косяк из недавнего вопроса - он не запускает триггер на действиях с внешними ключами. И таких косяков просто чудовщное количество. Как только выходишь за рамки чего-то сложнее select * from some_table, начинаешь материть разработчиков ежесекундно. И ещё один факт, мало влияющий на повседневную работу, но достойный упоминания - при проверке статическим анализатором кода нескольких популярных СУДБ, MySQL по количеству ошибок оказался на первом месте с существенным отрывом!
    Ответ написан
    11 комментариев
  • Jsoup не парсит нужную информацию, с чем это связанно?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Такой вопрос задают в среднем раз в неделю. А ведь достаточно заглянуть в исходный код страницы, чтобы понять ответ. Элемент
    <div class="article-stat__info article-stat__info_loaded">
    и все его дочерние элементы, включая количество просмотров, формируются javascript'ом, после загрузки страницы. Изначально этих данных в html нет. Так как Jsoup работает именно с исходными данными, полученными от сервера, а javascript не выполняет, он article-stat__count увидеть не сможет.
    Ответ написан
    6 комментариев
  • Что значит (func=lambda c: True)?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Декоратор @bot.callback_query_handler принимает в именованном аргументе func анонимную функцию, возвращающую True.
    Справочник можно найти, например, здесь.
    Ответ написан
    Комментировать
  • Зачем нужна репликация и на каких проектах она нужна?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Зачем нужна репликация в принципе?

    Во-первых, отказоустойчивость. Если у вас несколько реплик и один сервер сдох, приложение не обвалится с грохотом, а будет работать с оставшимися.
    Во-вторых, производительность. Или один сервак будет обрабатывать 1000 запросов в секунду или 3 по 330 - есть разница.

    Какие проекты требуют такого понятия как репликация?

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

    Что называется master, а что slave?

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

    отличия между master-slave и master-master?

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

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Есть только один способ более-менее адекватно оценить трудозатраты и как следствие стоимость какой-либо работы - иметь в штате специалиста в этой области. При отсутствии такого, в выборе фрилансера вообще не стоит ориентироваться на ценовой показатель, только на отзывы, а также количество и качество работ в портфолио. А то я сравнительно недавно своими глазами наблюдал, как пытаясь сэкономить 15 000 рублей, заказчик потерял 150 000.
    Ответ написан
    1 комментарий
  • Почему не сохраняется картинка?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    Мне иногда кажется, что такие вопросы - это троллинг!

    img = ImageArticle()
    img.article = Article.objects.get(pk=4)
    img.image=request.FILES['0']
    img.save()

    Если у вас действительно имя файлового поля в форме называется '0'.
    Ответ написан
    Комментировать
  • Что делать, если нет портфолио для резюме, но есть опыт?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    1506944600126889118.jpg
    Большинство моих заказчиков настаивали на NDA и готовы были за это платить, а я предпочитал субподряды, чтобы меньше общаться с клиентами и больше программировать. В результате в портфолио всего несколько проектов, слепленных на коленке за пару вечеров.

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

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Проблема в @Table(name = "User"). User - зарезервированное слово в PostgreSQL, вы не можете использовать его для названия таблицы или поля. Переименуйте в Users, например.
    Ответ написан
    1 комментарий
  • Как вы храните изображения при разработке/сопровождении сайта?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    В проекте должны быть отдельно статические ресурсы и отдельно медиа-файлы. Изображения относящиеся к первой категории, то есть являющиеся неотъемлемой частью дизайна, должны быть добавлены в репозиторий. А изображения относящиеся к контенту, не должны.
    Ответ написан
    Комментировать
  • Как передать объект через netty?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Кодеки, в том числе кодеры и декодеры, нужны как раз для того, чтобы преобразовывать данные поступающие в канал и выходящие из него. Можно всё это в одном обработчике делать, но разделение логики и следование принципам фреймворка облегчает отладку и сопровождение кода. Я не знаю, что такое Pocket, но в последних версиях кодеки используются так же, как и в предыдущих.

    Person.java
    import java.io.Serializable;
    
    public class Person implements Serializable {
        private final Long id;
        private String name;
    
        public Person(Long id, String name) {
            this.id = id;
            this.name = name;
        }
    
        public Long getId() {
            return id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        
        public String toString() {
            return getName();
        }
    }


    SimpleClient.java
    public class SimpleClient {
        public static void main(String[] args) throws Exception {
            EventLoopGroup group = new NioEventLoopGroup();
            try {
                new Bootstrap().group(group)
                               .channel(NioSocketChannel.class)
                               .handler(new ChannelInitializer<SocketChannel>() {
                                    @Override
                                    public void initChannel(SocketChannel socketChannel) {
                                        ChannelPipeline pipeline = socketChannel.pipeline();
                                        pipeline.addLast(new ObjectEncoder());
                                        pipeline.addLast(new ObjectDecoder(ClassResolvers.cacheDisabled(null)));
                                        pipeline.addLast(new ChannelInboundHandlerAdapter() {
                                            @Override
                                            public void channelActive(ChannelHandlerContext ctx) throws Exception {
                                                ctx.writeAndFlush(new Person(1L, "John"));
                                            }
    
                                            @Override
                                            public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
                                                Person person = (Person) msg;
                                                System.out.println(person);
                                            }
                                        });
                                    }
                                })
                                .connect("localhost", 8080)
                                .sync()
                                .channel()
                                .closeFuture()
                                .sync();
    
            } finally {
                group.shutdownGracefully();
            }
        }
    }


    SimpleServer.java
    public class SimpleServer {
        public static void main(String[] args) throws Exception {
            EventLoopGroup group = new NioEventLoopGroup();
            try {
                new ServerBootstrap().group(group)
                                     .channel(NioServerSocketChannel.class)
                                     .childHandler(new ChannelInitializer<SocketChannel>() {
                                        @Override
                                        public void initChannel(SocketChannel socketChannel) {
                                            ChannelPipeline pipeline = socketChannel.pipeline();
                                            pipeline.addLast(new ObjectEncoder());
                                            pipeline.addLast(new ObjectDecoder(ClassResolvers.cacheDisabled(null)));
                                            pipeline.addLast(new ChannelInboundHandlerAdapter() {
                                                @Override
                                                public void channelRead(ChannelHandlerContext ctx, Object msg) {
                                                    Person person = (Person) msg;
                                                    System.out.println(person);
    
                                                    person.setName("John Doe");
                                                    ctx.writeAndFlush(person)
                                                       .addListener(ChannelFutureListener.CLOSE);
                                                }
    
                                                @Override
                                                public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
                                                    cause.printStackTrace();
                                                    ctx.channel().close();
                                                }
                                            });
                                        }
                                     })
                                     .bind("localhost", 8080)
                                     .sync()
                                     .channel()
                                     .closeFuture()
                                     .syncUninterruptibly();
    
            } finally {
                group.shutdownGracefully();
            }
        }
    }
    Ответ написан
    Комментировать
  • С помощью чего лучше всего написать простой чат?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    Ну, с помощью Django Channels однозначно проще.
    Ответ написан
    Комментировать
  • Как устроены сложные фильтры в интернет магазинах?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Секрет в том, что эти запросы делаются не к базе. Это фасетный поиск, осуществляемый движком полнотекстового поиска, типа Sphinx или Elasticsearch.
    Ответ написан
    2 комментария
  • Как сделать выборку из базы суммируя значения поля по дням?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    select
      strftime('%d-%m-%Y', created_at) as creation_date,
      sum(value) as val
    from some_table
    group by creation_date;
    Ответ написан
    Комментировать
  • Где хранить view для главной страницы в Django?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    Не надо воспринимать рекомендации как нерушимые правила. Некоторые представления, относящиеся к общему для всего проекта функционалу, вполне можно хранить в корневом приложении.
    Ответ написан
    Комментировать
  • Какая верная стратегия обновления refresh_token'а для нескольких устройств?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    В нагрузке токена хранить идентификатор пользователя и идентификатор устройства. При получении запроса на обновление, проверять токен на валидность, доставать из него идентификаторы, искать в базе запись для этих идентификаторов и сравнивать полученный из базы токен с токеном от пользователя.
    Ответ написан
    4 комментария
  • Почему wildfly не работает на нужном мне порту?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Даже ведь русским языком написано "/opt/wildfly/standalone/log/server.log (Отказано в доступе)". Вы IDE запускаете под тем пользователем, у которого нет доступа к файлу /opt/wildfly/standalone/log/server.log.
    Ответ написан
  • Как переназначить форматирование?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Раз уж в тегах Python, а данные для вёрстки присылают в эксельках, то ваш путь к счастью - это освоение и применение xlrd + Jinja2.
    Ответ написан
  • Лучшие книги по Java, не переведенные на русский?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Charlie Hunt, Binu John - Java Performance
    Maurice Herlihy, Nir Shavit - The Art of Multiprocessor Programming
    Ответ написан
    Комментировать
  • Почему поле user-agent бывает пустым?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Во-первых, есть масса плагинов анонимизации к браузерам, которые этот заголовок скрывают, да и Chrome в режиме инкогнито, если мне не изменяет память. его не передаёт. Во-вторых, обращаться к сайту могут не только бразуеры, но и другие программы, которые могут и не устанавливать этот заголовок.
    Ответ написан
    Комментировать