• Простой векторный графический редактор?

    Vlad_IT
    @Vlad_IT
    Front-end разработчик
    Ну, если бы на все задачи можно было найти точные инструкции, было бы скучно.
    Пробуйте написать начиная с малого, например:
    1) Создайте холст, просто объект, который будет помещать в себя фигуры. Это будет некий viewport.
    2) Сделайте скролл этого холста мышкой, во все стороны.
    3) Сделайте возможность динамически добавлять объекты на холст, сначала определите базовый объект, например прямоугольник или линию. Легче на этом моменте сразу определить интерфейс IShape, таким образом дальше будет легче унифицировать все объекты при добавлении их на холст, да и холст ничего не должен знать об этих объектах, только об интерфейсе.
    4) Сделайте drag&drop добавленных объектов, чтобы их можно было тащить.
    5) Добавьте зум, это не простой шаг, тут нужно многое учитывать, особенно часто на этой задаче ломается позиционирование drag&drop объектов.
    6) Сделайте трансформатор объектов, который будет изменять их размер (для прямоугольников и.т.д.), менять точки (для линий), вращать и.т.д.
    7) Сделайте редактор свойств, через который будете назначать атрибуты вашим объектам, такие как цвет заливки, цвет рамки, ширина рамки, непрозрачность и.т.д.
    8) Добавляйте потихоньку различные объекты. Можете подглядывать в другие редакторы, например inkscape.
    9) Реализуйте сохранение и загрузку холста. Тут лучше не изобретать свой формат данных, а использовать открытый, например svg.
    10) Буфер обмена. Тут либо свой формат в бинарник, либо тот же самый svg в текстовом виде (что куда лучше, так сделано в фигме).
    11) Отменить/вернуть - важная штука, и на первый взгляд простая. Но простая она только в том случае, если запоминать шаги путем снимка всех текущих объектов, но этот способ плохой. По нормальному нужно при любой операции над объектами на холсте делать снимок изменений. Например подвинули кубик на 10px влево, и записали в память значение
    { id: 'id кубика', x: -10 }
    и потом при нажатии отмена, будете просто делать обратную операцию, добавлять эти 10px. Тут у вас возникнут сложность с операцией "возврат", но думаю, если вы дошли до этого шага, упорство у вас уже есть. Пригодятся паттерны: command и memento
    12) Ну, тут уже по мелочи, различные киллер фичи, новые объекты, свойства, различные меню и.т.д.
    Ответ написан
    1 комментарий
  • Как из БД динамично получать новые записи?

    @nrgian
    Я бы с MQ сделал
    Ответ написан
    Комментировать
  • Как найти угол между двумя векторами на канве?

    Beshere
    @Beshere
    Разработчик
    cos(alfa) = (a * b) / (|a| * |b|)

    Вектора, надеюсь умножать умеете.
    Ответ написан
    3 комментария
  • От какой ветки нужно ветвить фиче-бранчи для разработки?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Поделитесь опытом, какой способ вы используете для своей разработки?
    Лично мы используем такой способ:
    1. Есть мастер ветка, туда попадает только полностью оттестированный код (обратите внимание - не в конце какого-то спринта; не после того, как на горе рак свистнет; а после прохождения всех этапов тестирования)
    2. Есть dev-ветка, ею заведует старший разработчик и по мере необходимости "подливает" туда фиче-ветки.
    3. Есть много фич-веток, в которых работают отдельно взятые личности, при этом откуда они будут брать кодовую базу для доработки - их личная трагедия. Если при слиянии возникают конфликты - есть старший разработчик, если ему что-то непонятно - есть авторы кода, которых можно позвать и спросить "какого тут происходит?".

    Лучшая формула работы, из моего личного опыта - это "думать головой", а не слепо следовать какому-то набору правил.
    Ответ написан
    Комментировать
  • Как mysql может забивать swap, если есть свободная память?

    @neol
    https://habr.com/company/flant/blog/348324/ довольно подробно описывает как и почему.
    Ответ написан
    Комментировать
  • Почему ssd диск загружен на 100% на vps, debian, hetzner, atop?

    insiki
    @insiki
    broken pipe
    смотрите, что у вас из системных/юзерных скриптов запускается по ночам
    mlocate например
    Ответ написан
    Комментировать
  • Как хранить данные о заказах, товары в которых могут быть удалены?

    удаление позиции заменить сменой статуса на Не активна и никуда не удалять

    Правильное решение

    P.S. Не очень(совсем не) подходящая задача для нереляционной БД.
    Ответ написан
    3 комментария
  • Какие утилиты использовать для расследования загрузки сервера на centos?

    @arakchi
    На мой взгляд, самый простой вариант без настройки разных систем составных мониторинга (zabbix and etc) это atop. По умолчанию, он даёт статистику за 10 минутный интервал, но это можно изменить. Учитывая, что у Вас CentOS не забудьте добавить его в автостарт (он автоматом туда не добавляется). По крайней мере ответить на вопрос "какой процесс нагружает" он часто поможет и укажет в какую сторону копать.
    К сожалению, если выяснится что это какой нибудь apache, mysql, php Вам всё равно крайне желательно будет застать сам процесс в момент нагрузки и смотреть, что он непосредственно делает, собирая о нём информацию всякими strace, lsof или более специфичными инструментами. Так же полезно будет настроить для него расширенное логирование.
    Как правильно заметил alfss, общения с логами, скорее всего, не избежать. Редко они даже дают понять и без мониторинга, в чём проблема. Однако их анализ трудоёмок и не всегда приводит к результатам, особенно если не знать, что искать и как логи выглядят обычно (когда сбоев нет).
    Ответ написан
    Комментировать
  • Несколько раз в сутки зависают все сайты на сервере. Помогает только init 6. В чем может быть проблема?

    DMGarikk
    @DMGarikk
    Lead Software Developer
    переустанавливайте сервер с нуля
    если вы не знаете как и откуда попал вирус, смысла искать неисправности в работе апача нет, ваша система уже полностью скомпрометирована
    Ответ написан
    6 комментариев
  • Как контролировать версии файлов веб проекта?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    Да, бывают. Называется git. Это то, что ваши программисты скорее всего использовали.

    Но это их инструмент, а не ваш. Вы не знаете, что они там меняли, и изменения могут быть несовместимы с вашим дата-сетом (кэш-серверами, как редис, базой данных, .env файлом и так далее) на продакшене, поэтому откатывать какие-то изменения без участия программиста - очень опасно.

    Ваша проблема в том, что программисты не пишут тесты и не тестируют сами, у вас нету тестеров и нету staging'а (сервера, на который попадают все изменения для тестировия сразу до продакшена). Вам нужно менять workflow.
    Ответ написан
    Комментировать
  • Как расшифровать лог mongodb?

    @c0va23
    Backend-разработчик
    В логе есть вполне понятное сообщение:
    2017-10-10T13:07:06.147+0000 F - [conn53] out of memory.
    Ответ написан
    Комментировать
  • Как выполнить одну функцию после завершения другой?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Вот вам вариант с промисами:
    function first(){
    	return new Promise(next=>{
    		setTimeout( function(){
    			console.log(1);
    			next('привет');
    		}, 1000 );
    	});
    }
    function second(txt){
    	console.log('После first получили:', txt);
    	console.log(2);
    }
    
    first().then(second); //Сначала first, затем second

    Теорию по промисам можно почитать здесь: https://learn.javascript.ru/promise

    Соответственно, ваш вариант с промисами будет примерно такой:
    spoiler
    function first(e){
    	console.log('start',e);
    	return new Promise(next=>{
    		console.log('promise');
    		setTimeout( function(){
    			console.log('main code... ' + Math.random());
    			next(e);
    		}, 2000 );
    	});
    }
    function second(e){
    	console.log('end '+e);
    }
    
    var arr = ['element_0', 'element_1', 'element_2', 'element_3', 'element_4'];
    
    arr.forEach(e=>first(e).then(second));
    Обратите внимание, что вся суть и работа в итоге записывается в одну строчку в конце. И получается очень красиво и логично. А весь код до этого - чисто подготовка и объявления.
    Ответ написан
    Комментировать
  • Как правильно развернуть net core веб приложение?

    @q2digger
    никого не трогаю, починяю примус
    оно точно вешается на внешний интерфейс, а не на localhost ?
    как локально открываете?
    Ответ написан
    2 комментария
  • ORB дескрипторы как найти похожие изображения?

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

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

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

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

    что с этим можно делать - зависит от того, что вам нужно.

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

    ещё можно попробовать переписать подбор матрицы так, чтобы он не рассматривал вырожденные варианты. я этим занимался давно (в 11-12 годах), orb дескрипторов тогда ещё не было (у меня были surf-sift), но вот этот подбор гомографии рансаком мне нормальных результатов никогда не выдавал - оно постоянно пыталось вывернуть картинку наизнанку (матчить внутренние углы вместо внешних). помнится, я пытался подпереть костылём чтобы оно не ставило отрицательные коэффициенты в матрицы, но там всё сложно сделано было (кажется, оно несколько алгоритмов поддерживает кроме рансака и логика размазана по слоям как попало). в общем, так и не доделал - до того, как это заработало, я для своей конкретной задачи придумал упрощённый способ верификации взаиморасположения признаков без этих матриц. да и по производительности мне рансаковский перебор проекций не подходил.

    поэтому, последнее предложение: попробуйте обойтись без этой гомографии. хотя, для ваших картинок, по-моему, основные простые варианты не подойдут.
    Ответ написан
    1 комментарий
  • Есть ли программа для ограничения процессора при превышении температуры?

    Zoominger
    @Zoominger Куратор тега Железо
    System Integrator
    Врубить режим максимального энергосбережения, причём в настройках плана электропитания выставить процессору принудительно режим энергосбережения.
    Ответ написан
    2 комментария
  • Как рассчитать раcпределение оперативной памяти для веб-сервера?

    opium
    @opium
    Просто люблю качественно работать
    А чем ты собрался делить то?
    Все что надо само поделит память
    Ответ написан
    2 комментария
  • Как перенести проект с XE3 на Rio?

    tsklab
    @tsklab
    Здесь отвечаю на вопросы.
    • Установить Embarcadero Delphi 10.3 Rio.
    • Установить DevExpress version 18.1.7.
    • Устранить ошибки и предупреждения.
    Ответ написан
    Комментировать
  • Как обосновать выбор ЯП (в частности для бэка)?

    Sanes
    @Sanes
    Популярность и доступность среды для хостинга.
    Ответ написан
    Комментировать
  • Брутфорс SSH, что делать?

    Kalombyr
    @Kalombyr
    Поставить fail2ban ?
    Сменить порт ?
    Настроить port knocking?
    Ответ написан
    2 комментария