Это устройство для шлифовки дерева. Теоретически круг можно поставить, но там нужна в два раза большая скорость вращения диска (до 32 м/с на рабочем участке).
Бюджет — уже не помню точно, но не более 30-40 долларов за все (фанера + порезка на ЧПУ, двигатель, электрика, краска, наждачная бумага и т.п.).
Спасибо за статью, за грамотно и подробно преподнесенную информацию, скриншоты.
Сейчас разрабатываю бекэнд на PHP и фронтэнд на Angular 2 (5) — иду практически тем же путем, что и описанный в статье. Осознание того, что кто-то уже прошел подобным путем — помогает и поддерживает.
Для решения задания можно было использовать готовые фрэймворки, что сводило само решение задания к 10 минутам.
Извините за вопрос.
Но можно поинтересоваться, какой фреймворк/пакет файлов/веб-приложение позволяет реализовать полностью или частично описанные в задаче требования?
Сделал ряд доработок по интерфейсу:
1) Фокус автоматически ставится в поле ввода (после загрузки страницы).
2) Добавил на гл. страницу форму с случайными словами, в которые можно поиграть, перейдя одним кликом по кнопке.
3) Описание отгаданного слова в игре теперь выводится в модальном окне (без перезагрузки страницы).
4) Почищена база слов (от глаголов, прилагательных, наречий, союзов и т.п.)
5) Добавлен функционал «Получить подсказку».
6) Разные мелкие правки текстов, описаний, подсказок, заголовков и т.п.
Переделал систему по предложенной вами схеме (ищем слово в индексе из 65000 слов словаря). Теперь все летает!
Запрос из 20-ти символов выполняется с следующими результатами:
Память: 12.02 megabytes
Время: 0.500537 сек.
Сам запрос:
SELECT v.vocabulary_id, v.vocab
FROM vocabulary v
LEFT JOIN vector vkt ON v.vocabulary_id = vkt.id
WHERE `vkt`.`ye` = 0 AND `vkt`.`y` = 0 AND `vkt`.`kh` = 0 AND `vkt`.`ts` = 0 AND `vkt`.`ch` = 0 AND `vkt`.`sh` = 0 AND `vkt`.`shch` = 0 AND `vkt`.`mgk` = 0 AND `vkt`.`yi` = 0 AND `vkt`.`tvd` = 0 AND `vkt`.`ee` = 0 AND `vkt`.`yu` = 0 AND `vkt`.`ya` = 0
Т.е. все буквы, которых нет в слове включаем в запрос через отрицание, а в результате получаем множества, которые состоят из нужных нам букв.
Структура таблицы vector:
CREATE TABLE `vector` (
`id` int(11) NOT NULL,
`a` tinyint(1) NOT NULL DEFAULT '0',
`b` tinyint(1) NOT NULL DEFAULT '0',
`v` tinyint(1) NOT NULL DEFAULT '0',
`g` tinyint(1) NOT NULL DEFAULT '0',
`d` tinyint(1) NOT NULL DEFAULT '0',
`e` tinyint(1) NOT NULL DEFAULT '0',
`ye` tinyint(1) NOT NULL DEFAULT '0',
`zh` tinyint(1) NOT NULL DEFAULT '0',
`z` tinyint(1) NOT NULL DEFAULT '0',
`i` tinyint(1) NOT NULL DEFAULT '0',
`y` tinyint(1) NOT NULL DEFAULT '0',
`k` tinyint(1) NOT NULL DEFAULT '0',
`l` tinyint(1) NOT NULL DEFAULT '0',
`m` tinyint(1) NOT NULL DEFAULT '0',
`n` tinyint(1) NOT NULL DEFAULT '0',
`o` tinyint(1) NOT NULL DEFAULT '0',
`p` tinyint(1) NOT NULL DEFAULT '0',
`r` tinyint(1) NOT NULL DEFAULT '0',
`s` tinyint(1) NOT NULL DEFAULT '0',
`t` tinyint(1) NOT NULL DEFAULT '0',
`u` tinyint(1) NOT NULL DEFAULT '0',
`f` tinyint(1) NOT NULL DEFAULT '0',
`kh` tinyint(1) NOT NULL DEFAULT '0',
`ts` tinyint(1) NOT NULL DEFAULT '0',
`ch` tinyint(1) NOT NULL DEFAULT '0',
`sh` tinyint(1) NOT NULL DEFAULT '0',
`shch` tinyint(1) NOT NULL DEFAULT '0',
`mgk` tinyint(1) NOT NULL DEFAULT '0',
`yi` tinyint(1) NOT NULL DEFAULT '0',
`tvd` tinyint(1) NOT NULL DEFAULT '0',
`ee` tinyint(1) NOT NULL DEFAULT '0',
`yu` tinyint(1) NOT NULL DEFAULT '0',
`ya` tinyint(1) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
На React JS написан отдельный сайт: js.combination.cf
Но там функционал обрезанный (по сравнению с полной версией api.combination.cf/web), есть ряд особенностей связанных с хостингом (локально работает — на хостинге «нет»).
Разрабатывать удобный, современный и функциональный UI — мне этому ещё учиться и учиться. Пока в приоритете бекэнд (60-70% усилий), на фронтенд — оставшиеся 30-40%.
Спасибо за идеи.
Над пользовательским интерфейсом ещё работать и работать.
Ещё одна интересная фишка (увидел её в аналогичных сервисах): «получить подсказку».
Т.е. при нажатии на кнопку выводится в модальном окне толкование одного или нескольких неразгаданных слов.
Да, конечно. Когда наберется достаточная статистика и пропарсятся все доступные словари (например, сейчас в базе не хватает современных слов, вошедших в язык за последнее десятилетие) — можно будет «ручками» или автоматически пройтись по словам, откорректировать их.
Это именно то, что я искал.
О таком направлении я не думал вообще.
Спасибо вам огромное за идею и участие!
Буду пробовать реализовать подобный алгоритм.
Сейчас алгоритм работает следующим образом:
1) Генерируются блоки комбинаций (размер блока: 50000-100000 слов) (66% времени на итерацию).
2) Этот блок проверяется на наличие в словаре (34% времени на итерацию).
Далее цикл повторяется…
Сама сложная задача (как это я вижу сейчас) — сгенерировать эти самые 4.1804 E+18 комбинаций (за разумное время и минимально возможными ресурсами процессора).
А как их проверить — можно будет потом уже придумать (алгоритм составить или закешировать).
А если на Си (или ином языке программирования, каком?) написать перебор комбинаций, быстрее будет работать? Насколько быстрее, нежели на PHP? Не сталкивался с такими задачами раньше, хочется посоветоваться.
Все равно, потребуется сравнить 65000 слов и 4.1804 E+18 вариантов.
Базу из 65000 слов можно полностью закешировать.
Задача разлагается на две подзадачи:
1) Сгенерировать 4.1804 E+18 комбинаций.
2) Проверить сгенерированные комбинации в словаре из 65000 слов.
Вопрос: Как можно обработать 4,180,411,311,071,440,000 комбинаций за 1-4 секунды? И по всем этим словосочетаниям сделать поиск по словарю?
Конечно, вопросы сложные и нетривиальные, простых ответов не будет. Но, возможно, хотя бы получится узнать направления того куда «смотреть», что «копать»…
Бюджет — уже не помню точно, но не более 30-40 долларов за все (фанера + порезка на ЧПУ, двигатель, электрика, краска, наждачная бумага и т.п.).
Сейчас разрабатываю бекэнд на PHP и фронтэнд на Angular 2 (5) — иду практически тем же путем, что и описанный в статье. Осознание того, что кто-то уже прошел подобным путем — помогает и поддерживает.
Извините за вопрос.
Но можно поинтересоваться, какой фреймворк/пакет файлов/веб-приложение позволяет реализовать полностью или частично описанные в задаче требования?
1) Фокус автоматически ставится в поле ввода (после загрузки страницы).
2) Добавил на гл. страницу форму с случайными словами, в которые можно поиграть, перейдя одним кликом по кнопке.
3) Описание отгаданного слова в игре теперь выводится в модальном окне (без перезагрузки страницы).
4) Почищена база слов (от глаголов, прилагательных, наречий, союзов и т.п.)
5) Добавлен функционал «Получить подсказку».
6) Разные мелкие правки текстов, описаний, подсказок, заголовков и т.п.
Запрос из 20-ти символов выполняется с следующими результатами:
Память: 12.02 megabytes
Время: 0.500537 сек.
Сам запрос:
Т.е. все буквы, которых нет в слове включаем в запрос через отрицание, а в результате получаем множества, которые состоят из нужных нам букв.
Структура таблицы vector:
Но там функционал обрезанный (по сравнению с полной версией api.combination.cf/web), есть ряд особенностей связанных с хостингом (локально работает — на хостинге «нет»).
Разрабатывать удобный, современный и функциональный UI — мне этому ещё учиться и учиться. Пока в приоритете бекэнд (60-70% усилий), на фронтенд — оставшиеся 30-40%.
www.knigitxt.com/category/diction/1
www.speakrus.ru/dict
Над пользовательским интерфейсом ещё работать и работать.
Ещё одна интересная фишка (увидел её в аналогичных сервисах): «получить подсказку».
Т.е. при нажатии на кнопку выводится в модальном окне толкование одного или нескольких неразгаданных слов.
О таком направлении я не думал вообще.
Спасибо вам огромное за идею и участие!
Буду пробовать реализовать подобный алгоритм.
1) Генерируются блоки комбинаций (размер блока: 50000-100000 слов) (66% времени на итерацию).
2) Этот блок проверяется на наличие в словаре (34% времени на итерацию).
Далее цикл повторяется…
Т.е. оптимизировать надо и первый шаг и второй.
А как их проверить — можно будет потом уже придумать (алгоритм составить или закешировать).
А если на Си (или ином языке программирования, каком?) написать перебор комбинаций, быстрее будет работать? Насколько быстрее, нежели на PHP? Не сталкивался с такими задачами раньше, хочется посоветоваться.
Базу из 65000 слов можно полностью закешировать.
Задача разлагается на две подзадачи:
1) Сгенерировать 4.1804 E+18 комбинаций.
2) Проверить сгенерированные комбинации в словаре из 65000 слов.
1) поискслов.рф/anagram/search?query=абвгдежзиклмнорпстуф
Найдено: 155 страниц слов (размещения с повторениями).
Время ответа сервера: менее одной секунды на страницу.
2) wordhelp.ru/comb/абвгдежзиклмнорпстуф
Найдено: 9736 слов.
Время ответа сервера: 4 секунды.
Вопрос: Как можно обработать 4,180,411,311,071,440,000 комбинаций за 1-4 секунды? И по всем этим словосочетаниям сделать поиск по словарю?
Конечно, вопросы сложные и нетривиальные, простых ответов не будет. Но, возможно, хотя бы получится узнать направления того куда «смотреть», что «копать»…