• Шесть задачек для Front-End разработчика
    +4
    А нельзя прям на карте вбивать эти данные? Зачем нужно это лишнее ментальное соотношение данных?
  • Как найти работу с релокацией в Европу: практический гайд для IT-специалистов
    +4
    Точно. В Киеве упомянутых «проблем с метро» нет, но есть другие. Берлин якобы дешёвый, но и по зарплатам такой же. После налогов и аренды остаётся в 3 раза меньше денег чем сейчас у меня в Киеве, при этом цены на всё прочее там выше.
  • Как найти работу с релокацией в Европу: практический гайд для IT-специалистов
    +1
    Прежде чем куда-то валить, посмотрите на стоимость местной жизни хотя бы здесь www.numbeo.com/cost-of-living, посчитайте местные налоги, посмотрите условия и стоимость местного рынка жилья и так далее. Я, например, отказался от варианта переезда в Берлин именно по финансовой причине, хотя очень хотел. Зарплаты там небольшие и денег в net остаётся слишком мало для комфортной жизни.
  • 5 причин, почему вы должны забыть о Redux в приложениях на React
    0
    Ваше мнение о lostpebble.github.io/pullstate интересует
  • Наука логики в программировании
    +1
    «на момент её написания» — это вы очень точно подметили. Гегель популярен у нас из-за форсирования идей диалектического материализма в советстком пространстве. Но это не означает, что его идеи корректны и тем более конечны.
  • Наука логики в программировании
    +1
    Больше всего мне интересно, почему Гегель? Почему не Фреге? Почему не Рассел? Не Витгенштейн? Почему не любой из аналитической школы?
  • Rollup: уже можно собирать приложения
    0
  • 10 основных ошибок, совершаемых Django-разработчиками
    0
    На текущем проекте, в зависимости от приложения, Pyramid или aiohttp. На предыдущем была Tornado. В Pyramid и Tornado вьюхи в общем-то тоже на классах, но на самом деле это только точка входа для дальнейшей композиции функций. В aiohttp всё честно сразу :)
  • 10 основных ошибок, совершаемых Django-разработчиками
    0
    Я рисовал дерево наследования всех классов и миксеров Django как только CBV вообще появились. На более-менее простых проектах всё можно контролировать. На большом проекте и с большой командой контроль стремится к нулю. Я счастлив, что больше не приходится использовать ни CBV, ни Django в принципе.
  • 10 основных ошибок, совершаемых Django-разработчиками
    0
    Я ниже немного накинул на вентилятор.
  • 10 основных ошибок, совершаемых Django-разработчиками
    +7
    CBV — это худшее, что есть в Django. Совершенно дурацкое усложнение, которое на ровном месте ставит палки в колёса композиции логики, а исследовать поведение методов иногда совершенно нетривиально из-за необходимости ходить туда-сюда по всему дереву наследования и удерживать в голове весь контекст переопределения. В принципе, это общая проблема множественного наследования, но в Django идея возведена в абсолют. 100500 вьюх, базовых вьюх, миксинов… при том, что в любом случае приходится переопределять подавляющее большинство их методов. При разрастании кодовой базы это всё какой-то ад для поддержки и модификации.
  • Публикуем сайт в межпланетной файловой системе IPFS
    0
    Это чудесно, всё никак не попробую. А вы делали им pull request? Всё же хочется получить на выходе одну имплементацию-стандарт, а не кучу форков.
  • Upspin: новая глобальная файловая система от Google
    +1
    IPFS выглядит интересней, на самом деле
  • Как я научился кодить, создал веб-приложение и запустил его на Product Hunt за 2 месяца
    +5
    История изменений, возможность откатиться, залить код на какой-нибудь Гитхаб или Битбакет, вести учёт задач в Issues, сделать простой деплой на сервер… Это то, что сразу приходит в голову.
  • Публикуем сайт в межпланетной файловой системе IPFS
    0
    Читал другие ваши статьи, знаю, что вы тоже пробовали webtorrent+ipfs, поэтому наверняка сталкивались с теми же проблемами и может как-то удалось их обойти. Судя по всему, в этом клубе нас двое.
  • Публикуем сайт в межпланетной файловой системе IPFS
    0
    Спасибо за развёрнутый ответ.

    Я уже установил nginx в роли прокси, с кешированием. Мне это не особо помогло. Да и хочется быть ближе к основной идее — безсерверному ресурсу.

    IPFS с range-запросами работает хорошо. Только падает в итоге :) Клиент у меня сначала пытается достучаться к локальному демону, если его нет — то к шлюзу на моём инстансе. В целом всё оно работает. Но ощущение общей сырости не даёт покоя. Или я что-то делаю не так, или Go-имплементация далека от стабильной версии.

    Но если оставить в покое видео и стримить более лёгкий статический контент, то всё прекрасно. Что-то в этом есть.
  • Публикуем сайт в межпланетной файловой системе IPFS
    0
    Немного не по теме конкретно этой статьи, но есть вопрос по IPFS.

    Я сейчас экспериментирую со связкой IPFS+Webtorrent и мне не очень нравится результат. Напрягает падение самого демона IPFS при высокой частоте запросов к нему. Webtorrent-плеер играет видео через webseed, пока ты первый, кто смотрит его. Webseed-урл в торрент-файле указывает как раз на IPFS-хеш. Всё работает нормально только какое-то время, пока количество range-запросов к IPFS не упирается в какой-то непонятный мне потолок и демон падает. Перезапускается супервизиром, но этот downtime останавливает стрим, плеер получает 502 и ничего больше не работает, нужна перезагрузка страницы. Опытным путём выяснил, что демон очень жадный и хочет весь CPU на моём бедном микроинстансе. Я увеличил CPU/RAM дроплета, стало лучше. Но это пока клиент стримит только одно видео. Моя идея ещё и в том, чтобы webtorrent продолжал раздавать медиа-файл уже своими средствами, в фоне, после переключения воспроизведения на что-то другое. В итоге вопрос — сколько ж нужно IPFS-демону для нормальной жизни, если я уже дважды увеличивал инстанс и больше (по бюджету) не хочу? И вдогонку — есть ли какой-то список публичных шлюзов, чтобы я как-то балансировал нагрузку? Спасибо.
  • Библиотека f для функционального программирования в Питоне
    0
    Спасибо за библиотеку. Это набор функций, к которым всё равно так или иначе приходишь со временем, а у вас уже оформлено в пакет. Для себя утащил achain/ichain, comp и монады.

    Нельзя отвергать хорошие идеи и паттерны из других языков только потому, что они не соответствуют чувству прекрасного авторов Python.
  • Как мы впервые в Украине провели мероприятие по безопасности с размахом
    +3
    Круто (наверное). В рамках этичности — поправьте опечатку в заголовке: «по безопастности».
  • Snaql. Raw SQL в Python-проектах
    0
    Спасибо, что ответили за меня.
  • Snaql. Raw SQL в Python-проектах
    0
    Напишите развёрнутый пример, пожалуйста. Мне кажется я не до конца понял вашу мысль.
  • Snaql. Raw SQL в Python-проектах
    0
    Это решение и есть тупо SQL, просто вне Python-кода. Разделение сущностей и слабая связанность, все дела.
  • Snaql. Raw SQL в Python-проектах
    0
    Не люблю Mako именно за это. Слишком много свободы в шаблонах, этим часто злоупотребляют. Вплоть до того, что пихают туда половину бизнес-логики, а то и всю. Логика представления должна оставаться таковой.
  • Snaql. Raw SQL в Python-проектах
    0
    Ну это легко поправить. Опять же, в лоб.

    {% sql 'get_countries_by_conds', note='get countries by date conditions or ids' %}
        SELECT *
        FROM countries
        {% if ids %}
            WHERE id IN ({{ ids|join(', ') }})
        {% endif %}
        {% if date_from %}
            {% if ids %} AND {% endif %} WHERE creation_date >= {{ date_from }}
        {% endif %}
        {% if date_to %}
            {% if ids or date_from %} AND {% endif %} WHERE creation_date <= {{ date_to }}
        {% endif %}
        ORDER BY creation_date ASC
    {% endsql %}
    


    Я бы разнёс conditions по своим блокам.

    {% sql 'get_countries', note='get countries' %}
        SELECT *
        FROM countries
        {% if conditions %}
            {{ conditions|join(' AND ') }}
        {% endif %}
        ORDER BY creation_date ASC
    {% endsql %}
    


    {% sql 'cond_ids_in_countries' %}
        WHERE id IN ({{ ids|join(', ') }})
    {% endsql %}
    


    {% sql 'cond_date_from_countries' %}
        WHERE creation_date >= {{ date_from }}
    {% endsql %}
    


    {% sql 'cond_date_to_countries' %}
        WHERE creation_date <= {{ date_to }}
    {% endsql %}
    


    def get_countries(ids=None, date_from=None, date_to=None):
        sql_conditions = []
        if ids:
            cond = country_queries.cond_ids_in_countries(ids=ids)
            sql_conditions.append(cond)
        if date_from:
            cond = country_queries.cond_date_from_countries(date_from=date_from)
            sql_conditions.append(cond)
        if date_to:
            cond = country_queries.cond_date_to_countries(date_to=date_to)
            sql_conditions.append(cond)
    
        return country_queries.get_countries(conditions=sql_conditions)
    


    Ну как-то так. Мысль, думаю, уловили.
  • Snaql. Raw SQL в Python-проектах
    0
    Решение в лоб:

    {% sql 'get_countries_by_conds', note='get countries by date conditions or ids' %}
        SELECT *
        FROM countries
        {% if ids %}
            WHERE id IN ({{ ids|join(', ') }})
        {% endif %}
        {% if date_from %}
            AND WHERE creation_date >= {{ date_from }}
        {% endif %}
        {% if date_to %}
            AND WHERE creation_date <= {{ date_to }}
        {% endif %}
        ORDER BY creation_date ASC
    {% endsql %}
    


    def get_countries(ids=None, date_from=None, date_to=None):
        sql_context = {}
        if ids:
            sql_context['ids'] = ids
        if date_from:
            sql_context['date_from'] = date_from  # + date format 'YYYY-MM-DD'
        if date_to:
            sql_context['date_to'] = date_to  # + date format 'YYYY-MM-DD'
    
        return country_queries.get_countries_by_conds(**sql_context)
    
  • Django 1.9 получит новый дизайн админки
    +3
    Это не новый дизайн, это точно такая же админка с обновлёнными стилями.
  • Веб-приложение на Clojure. Часть 2
    0
    Спасибо за интересный цикл, надеюсь на продолжение.

    Что вы думаете о Luminus? (http://www.luminusweb.net/docs) По факту это просто рекомендованный набор библиотек и это упрощает поиски для людей, которые плохо знакомы с экосистемой Clojure (как я). С другой стороны, когда делаешь свои первые робкие шаги, на тебя наваливается куча всего нового и в этом случае, может, имеет смысл начать прям с нуля? То есть Ring, Compojure, Buddy по отдельности, Что посоветуете?
  • Автоматические миграции в Peewee
    0
    Как-то очень сложно. Что реально хочется видеть в питоне, так это простые инструменты вроде github.com/yogthos/migratus для миграций. А получается какой-то трешак, лишь бы к SQL не прикасаться.
  • Плюсы микросервисной архитектуры
    +1
    Недавно рассказывал и об этом тоже на ITWeekend в Киеве. Так как по теме, оставлю слайды speakerdeck.com/semirook/api-centric-web-development-with-tornado-or-the-great-refactoring-story
  • Плюсы микросервисной архитектуры
    +10
    Микросервисы — частный случай SOA. На самом деле такой же маркетологический buzzword как bigdata.
  • Быстрый фильтр каталога для интернет-магазинов на основе битмапов Redis
    0
    В простом случае достаточно поиграться с магическими константами :) Elastic из коробки много чего умеет и неплохо справляется.

        'query': {
            'fuzzy_like_this': {
                'fields': ["name", "brand"],
                'like_text': query,
                'fuzziness': '0.5',
                'prefix_length': '1'
            }
        }
    
  • Быстрый фильтр каталога для интернет-магазинов на основе битмапов Redis
    +3
    Делал сложные фильтры на много тысяч товаров с помощью Elasticsearch, заодно получил возможность полнотекстового поиска по названию, описанию и составу, учитывая опечатки.

    Ну а Postgres — это стандарт, зря вы так.
  • Эксперимент: тестирование приложений в ReactOS в прямом эфире
    0
  • Эксперимент: тестирование приложений в ReactOS в прямом эфире
    0
    Почему запись из-под Винды, а сама React в виртуалке? Это ж несерьёзно.
  • Проверка операционной системы Haiku (семейство BeOS) c помощью PVS-Studio. Часть 1
    0
    С солидным опозданием, но бета должна выйти весной-летом. Ритм у них упал, разработчики по контракту поразбегались, но надежда есть.
  • WebSocket RPC или как написать живое WEB приложение для браузера
    0
    Вы очень вовремя, спасибо за библиотеку. Прям сейчас ковыряю и со старта возникло несколько вопросов:

    1. Чтоб завести в require.js пришлось немного похачить wsrpc.js (не видел Q и работал в глобальной области видимости)

    2. С запросами к серверу всё понятно, а вот наоборот — не очень. В документации примера не нашёл, поэтому на данный момент всё, что я придумал — это делать запрос к серверу, который инициализирует PeriodicCallback, а на клиенте уже слушать ответы через addRoute. Можно как-то более изящно решить этот вопрос?

    Реализую свой stock board — ждите pull-реквестов :)
  • azexo
    +3
    piumosso разработал нечто схожее (http://futurecolors.ru/belonika/), можете пообщаться на счёт логики и производительности.
  • Python на страже кошелька
    +2
    Я даже не знаю что сказать про весь этот код. Если это одноразовый код, который никогда не увидит мир — ок, задача решена.
  • DevDocs: вся документация разработчика в одном месте, с быстрым и удобным интерфейсом
    –18
    Web-вариант Dash, точно. Ну ок, если у вас не мак.
  • Peewee – лёгкая, гибкая и очень быстрая ORM на Python
    0
    Исходники, да ещё и в одном модуле (ну кто так делает) меня смутили. Хотя не видел ещё ORM с нормальным кодом под капотом, везде макароны и магия.