https://github.com/Clashbuster/ruby-project-guidelines-seattle-web-102819

Что это?

Во-первых, это живой, дышащий, работающий словарь. Я поместил в этот словарь примерно 102 219 слов и 220 000 определений.

Если бы это была книга, то в ней было бы около 5525 страниц, содержащих примерно 2 750 000 слов.

Этот плохой мальчик содержит примерно 60% всех английских слов в обращении.

Но подождите, это еще не все! Это больше, чем просто словарь. Это созданный пользователями, поддерживаемый и редактируемый словарь. Пользователи могут входить в систему и редактировать существующие определения, а также предлагать свои собственные слова. Он также отслеживает данные пользователей.

Почему это должно существовать?

Это полезный инструмент, потому что разговорные языки динамически типизированы.

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

Многие факторы могут создать раскол в понимании. Интеллектуальные, культурные, социальные или географические различия являются главными виновниками.

Как программисты, мы должны понимать это больше, чем большинство.

Рассмотрим этот мысленный эксперимент:

«Я получил доступ к базе данных SQL, которая содержала множество отдельных экземпляров данных, хранившихся в виде объектов. Или это были хэши?»

Если бы вы сказали это каменщику, он бы не понял, о чем вы говорите, даже если вы используете слова, которые он уже слышал раньше. Слой знает, что объект — это вещь, как бейсбольный мяч, а экземпляр — это короткий промежуток времени.

Вы знаете, что означают объекты и экземпляры в контексте программирования, но непрофессионал этого не знает. Этот викисловарь дает возможность сохранить все эти дополнительные контексты. Это также позволяет изобретать новые контексты, и викисловарь может быстро меняться, чтобы отражать новые контексты.

Как это делается? + некоторая структурная информация о приложении

Это приложение с интерфейсом командной строки.

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

Различные экраны меню запрашивают базу данных, чтобы вернуть информацию на экран.

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

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

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

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

Некоторые проблемы, с которыми я столкнулся

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

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

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

Большинство высококлассных словарей (английский оксфорд, вебстеры, слова и т. д.) требуют, чтобы вы прошли через службу API, которая начинает взимать плату после 1000–2500 запросов. Кроме того, к большинству этих API можно было запрашивать только слово. Учитывая, что большинство функциональных словарей содержат не менее 60 000 слов с определениями, вы можете понять, почему эти варианты не подходили мне (студенту).

Мой инструктор помог мне найти словарь на Github, и я использовал их файлы для исходных данных. (ссылка для прозрачности) https://github.com/matthewreagan/WebstersEnglishDictionary

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

Вывод

Это был интересный проект, и я рад, что все работает. Я в восторге от того факта, что это приложение действительно полезно.

Я смог реализовать все, что хотел изначально, и это заняло всего около 3 дней благодаря активной записи.

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

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

Ваше здоровье.