- 5 лучших программ для базы знаний
- 5 лучших программ для базы знаний
- Какое программное обеспечение для базы знаний лучше всего?
- База знаний для WoT 10.6.0
- База данных для Android. Интегрируем SQLite быстро, без регистрации и СМС
- Содержание статьи
- Приложение или браузер
- Кешируем всё
- Сериализация и JSON
- Xakep #217. Сценарий для взлома
- CRUD и DAO
- SQLiteOpenHelper
- Построение запросов
- Вставка изображений
- Безопасный Select
- Robolectric
- Outro
5 лучших программ для базы знаний
База знаний используется для обмена знаний и управления. Основная цель наличия базы знаний — предоставить как вашим клиентам, так и вашей команде наиболее подробную информацию о ваших продуктах / услугах и ответить на все их общие вопросы. Поэтому их часто называют порталами самообслуживания.
В зависимости от основного варианта использования базы знаний могут быть общедоступными и доступными для всех или частными. Частные обычно создаются для внутреннего использования внутри команды.
Теперь, как именно можно использовать базу знаний? И каковы преимущества его наличия? Вот лишь некоторые из преимуществ, которые вы получаете, выбирая лучшее программное обеспечение для управления знаниями:
Доступность 24/7. В отличие от службы поддержки клиентов, база знаний всегда доступна, когда вашим клиентам нужна помощь.
Снижение нагрузки на представителей службы поддержки клиентов. Если клиенты могут найти решения самостоятельно, им не нужно будет связываться с вашей командой, верно?
Более быстрая поддержка клиентов. Агенты службы поддержки могут использовать статьи базы знаний во время общения с клиентами — отправлять всю статью или соответствующие выдержки в ответ на общие вопросы.
Вся информация в одном месте. Подробная документация может помочь вам быстрее принять на работу новых сотрудников и держать всех в курсе ваших продуктов / услуг.
Дополнительные органические посещения. Контент базы знаний может ранжироваться в Google и приносить дополнительный органический трафик с высокими намерениями.
Автоматизация обслуживания клиентов. Вы можете использовать интеллектуальные предложения базы знаний, чтобы автоматически отвечать на вопросы клиентов на ходу.
Есть несколько обязательных функций, которые должен иметь любой инструмент для управления знаниями:
Удобный текстовый редактор с возможностью вставлять изображения, образцы кода видео, а также отмечать важные части специальными примечаниями, предупреждениями или советами.
Категории, разделы, папки. Важно организовать все статьи в своей базе знаний удобным и понятным способом с помощью категорий и разделов.
Отчеты. Возможность отслеживать эффективность ваших статей с точки зрения просмотров и полезности имеет решающее значение.
Многоязычный контент. клиенты хотят найти ответы на своем родном языке, поэтому вы сможете перевести свою систему управления знаниями на разные языки.
Возможности настройки. Если вы хотите, чтобы ваша база знаний выглядела как неотъемлемая часть вашего веб-сайта, вы должны иметь возможность настроить ее, используя цвета вашего бренда, логотип, изображения заголовков, ссылки, CSS и даже свой собственный домен.
Функция поиска, чтобы ваши посетители могли легко найти любую информацию, которая им нужна, без необходимости просматривать все статьи.
Есть некоторые дополнительные функции программного обеспечения для обмена знаниями, которые могут упростить совместную работу над статьями. Например, обнаружение столкновений немедленно предупреждает вас, когда кто-то редактирует статьи базы знаний одновременно с вами. Более того, администраторы могут добавлять членов команды с разными ролями доступа — владельцев, администраторов, редакторов, составителей черновиков, читателей.
Многие пользователи программного обеспечения для управления знаниями ценят возможность указывать разные уровни доступа для своих статей. По сути, эта функция позволяет им выбирать, делать свою базу знаний общедоступной или нет.
5 лучших программ для базы знаний
Подходит для компаний, начиная от малого бизнеса и заканчивая крупными компаниями. Простая в использовании, отличные функции администратора.
Активная и эффективная служба поддержки, единый вход.
Простой и функциональный редактор WYSIWYG.
Отличная альтернатива более дорогостоящему программному обеспечению службы поддержки.
Пробный бесплатный период 30 дней.
Хороший выбор для малых предприятий, которым требуется программное обеспечение для управления знаниями только для внутреннего использования.
Ограниченная настройка внешнего вида.
Удобные шаблоны для разных задач и целей.
Может оказаться дорогим для больших команд.
Они предоставляют программное обеспечение, предназначенное для компаний с большими командами.
Имеет простой интерфейс и удобный текстовый редактор.
Многоязычность, единый вход.
Функциональная настройка внешнего вида.
HelpJuice предлагает мощную аналитику базы знаний — эффективность статей в различных числах и графиках, поисковые запросы, используемые людьми, активность авторов.
Дороговато для малого бизнеса.
Бесплатный пробный период 14 дней.
Подходит для малого бизнеса и крупных компаний.
Ограниченные возможности настройки.
Однако его отчеты довольно просты по сравнению с другим программным обеспечением для управления знаниями. Вы можете просто проверить, сколько просмотров у каждой статьи и оценили ли ее ваши клиенты как полезную или бесполезную.
Простой редактор WYSIWYG со всеми необходимыми функциями форматирования и стилизации.
Интуитивно понятный интерфейс.
Эффективная система поддержки клиентов.
Не подходит для внутренних баз знаний.
Предлагает современный и красивый дизайн баз знаний.
Какое программное обеспечение для базы знаний лучше всего?
Теперь, когда у вас есть более широкое представление о программном обеспечении для баз знаний, вам может быть интересно, какой вариант лучше всего подходит для вашего бизнеса.
Если у вас бизнес уровня предприятия, вам следует подумать об инвестировании в такое программное обеспечение, как KBPublisher или Helpjuice. К ним относятся более простое управление и расширенные функции, необходимые для запуска баз знаний для обслуживания тысяч клиентов и облегчения работы больших команд.
В заключение, вам решать, что лучше для вашего бизнеса. Обязательно изучите все варианты, прежде чем соглашаться на программное обеспечение для создания своей базы знаний.
Источник
База знаний для WoT 10.6.0
База знаний по World of Tanks — развернутая информация по танкам всех наций, характеристикам ходовых, радиостанций, двигателей, башен и орудий, совместимости дополнительного оборудования и расходных материалов. Включает в себя данные о премиумных и подарочных танках.
Информация о игровых картах, боевых достижениях, умениях и навыках экипажа.
Также имеется возможность сравнивать два и более танка в любых комплектациях.
Данные основаны на игре версии 0.9.3 серверов RU-региона.
Приложение не требует доступа в Интернет — работает вне сети.
Требуемые разрешения безопасности необходимы для функционирования рекламы.
Источник
База данных для Android. Интегрируем SQLite быстро, без регистрации и СМС
Содержание статьи
Приложение или браузер
Мобильные приложения становятся логичным развитием интернет-сайтов. В целом они эффективней используют ресурсы устройства, да и возможностей по работе с данными тут больше. Часто веб-разработчики сталкиваются с естественными ограничениями мобильных устройств — отсутствием флеша, тормозами страницы из-за перегруженности и другими. И никто не будет спорить, что работать с картами или почтой удобней в нативных программах, а не в браузере.
Использование базы данных поможет сохранить все необходимые пользователю данные, и это очень круто. Все возможности приложения будут доступны, даже если пользователь уедет в тайгу, где интернета никогда и не было. Когда-то давно, целых полтора года назад, наш журнал уже делал обзор способов сохранения данных в Android, но база данных заслуживает отдельной статьи.
Кешируем всё
В Android из коробки база данных присутствует в виде библиотеки SQLite, которую даже не нужно как-то подключать или запрашивать на нее разрешение у пользователя. Чтобы понять, насколько она полезна, напишем полноценное приложение, которое будет загружать данные из интернета и кешировать их, а затем выдавать их в любых условиях: в дождь, мороз и дисконнект.
SQLite — легковесный фреймворк, который, с одной стороны, дает по максимуму использовать возможности SQL, с другой — бережно относится к ресурсам устройства. Его недостатки малокритичны для мобильной разработки: к примеру, нет индексов для LIKE-запросов и есть лимиты на размер базы данных.
Сериализация и JSON
Самое время поговорить о контенте: в принципе, нам абсолютно неважно, что кешировать. Тем не менее хранить в БД все подряд не стоит: если это будут какие-то разовые записи или отметки о состоянии Activity, лучше использовать SharedPreferences. Как и во «взрослых» системах, база данных предназначена для сохранения большого объема структурированной информации: каталога товаров, списка задач, новостных блоков и так далее.
Грамотные люди передаваемые по сети данные сначала сериализуют — то есть конвертируют в некую последовательность байтов. Существует несколько способов сериализации, каждый из которых хорош по-своему. Несколько лет назад был популярен формат XML, но в условиях больших объемов конвертеры XML довольно сильно грузят процессор, что критично для мобильных устройств.
На смену XML пришел формат JSON, который, пожалуй, уже стал стандартом. Он не только прост в парсинге, но и удобен для веб-разработчиков: например, он легко разбирается с помощью JavaScript. Формат JSON довольно прост и легко читается как приложениями, так и просто глазами. Для примера я взял список пользователей с несколькими параметрами — имя, описание, собственный идентификатор и картинка-аватар.
Рис. 1. Как парсить JSON
Xakep #217. Сценарий для взлома
Такой массив данных довольно легко раскладывается в Java-объект. Создать класс с нужным содержанием можно руками или воспользоваться конвертерами, которые ищутся по запросу json to java. Такой конвертер самостоятельно разберет поля и добавит аннотации с указанием полей.
Загрузив JSON в приложение, его нужно будет разложить по полям в подготовленный Java-объект. Для этого тоже есть готовые решения. Мне нравятся библиотека Retrofit и конвертер Gson Converter, о которых мы не раз писали. Если нет каких-то экзотических требований к сетевым запросам — Retrofit тебе однозначно подойдет.
CRUD и DAO
Принцип построения таблиц и связей между ними ничем не отличается от классического SQL. Под созданный JSON я решил выделить две таблицы: в одной будет вся текстовая информация, а в другой набор изображений. Выделять изображения в отдельную таблицу есть смысл для экономии памяти — несколько пользователей могут иметь одинаковые аватарки, тогда их не придется дублировать.
Рис. 2. Схема базы данных
При работе с БД удобно пользоваться несколькими паттернами, которые помогают не изобретать велосипеды и при этом реализовать всё, что нужно. Базовый набор запросов содержится в акрониме CRUD — create, read, update и delete . А еще в ООП есть свои шаблоны кода, которые тоже придуманы не зря. Все CRUD-запросы рекомендуется реализовать через паттерн DAO — data access object . Он подразумевает под собой создание интерфейса, в котором будут обозначены необходимые методы.
Конечно, сейчас в нашей программе этот интерфейс выглядит излишним, но в будущем может выручить: абстрактные классы и интерфейсы помогают не забыть, какая именно функциональность требуется в проекте.
SQLiteOpenHelper
Язык SQL-запросов ближе к процедурному программированию, чем к ООП, поэтому для работы с БД в Android создан отдельный класс SQLiteOpenHelper . Он позволяет общаться с базой данных на привычном для Java-разработчика языке методов и классов. Как обычно, создаем свой объект, дополняя его необходимыми данными — названием и версией БД.
При генерации SQL-запросов нужно будет постоянно указывать названия таблиц и полей. Чтобы свести к минимуму вероятность опечаток, удобно использовать строковые константы, превратив названия полей в переменные.
И хотя принципы работы с БД максимально приближены к логике ООП-разработки, от синтаксиса SQL никуда не денешься. Если у тебя есть пробелы в знаниях — почитай какой-нибудь мануал для начинающих. В большинстве случаев базовых знаний будет достаточно.
Класс SQLiteOpenHelper требует обязательного переопределения методов, используемых при инициализации, — методов создания, открытия и обновления базы данных. В onCreate необходимо задать команды для создания таблиц внутри базы данных, он будет вызван системой самостоятельно при первоначальной инициализации базы данных.
Поскольку структура базы может меняться, нужно реализовать метод onUpgrade, который будет стирать созданное ранее.
Построение запросов
Как ты уже обратил внимание, все запросы строились через явный SQL-синтаксис, обрабатываемый методом execSQL. Он позволяет выполнить любую SQL-команду, кроме тех, что возвращают какие-либо значения. Но на практике этот метод используется только для базовой инициализации БД, для остальных случаев есть вызовы удобнее. Самый популярный способ получить данные — воспользоваться методом rawQuery. Он позволяет напрямую обратиться к базе данных, забив в аргумент классический SQL-запрос.
На выходе будет выборка в формате Cursor, который создан специально для работы с базой данных. Это своеобразный массив, данные из которого можно читать разными способами, мне нравится вариант с организацией цикла.
Официальная документация рекомендует не забывать освобождать ресурсы после прочтения всех необходимых данных, иначе будет утекать память. С другой стороны, если данные могут потребоваться еще раз, есть смысл Cursor не трогать — легче прочитать данные из памяти, чем сделать запрос в базу данных.
Как видишь, получить данные из базы несложно, но сначала их нужно как-то туда занести. Для добавления в базу данных существует специальный метод. Он работает как SQL-вызов UPDATE , который ничего не проверяет, а просто заносит в таблицу новые данные.
Перед добавлением данные нужно подготовить — указать, в какие именно поля вставлять значения. Это будет связка «имя поля — значение», доступная в виде класса ContentValues .
Тебе не нужно указывать значения полей при вызове метода, что, несомненно, упрощает построение запроса.
Вставка изображений
Файлы в Android можно хранить по-разному, если они не слишком большие, то даже внутри SQLite . Тип поля Blob позволяет внести в него массив байтов, для этого воспользуемся классом ByteArrayOutputStream как промежуточным звеном.
В Android есть встроенные методы для загрузки данных из сети, Retrofit можно и не привлекать.
Через BitmapFactory можно загрузить данные из сети, получив Bitmap -изображение, а дальше уже массив байтов можно отправлять в базу данных, используя уже знакомый ContentValues .
Безопасный Select
Все запросы, которые мы только что строили, идут напрямую в базу, без какой-либо предварительной валидации. Это прекрасная возможность для SQL-инъекции — злоумышленник легко может подставить нужные параметры и выполнить совершенно другой запрос. Это популярная атака, и немало материалов по ней ты найдешь в нашем журнале. Конечно, можно самому написать парсер, который будет выискивать «неправильные» символы и по максимуму фильтровать запросы. Но это очень спорный костыль, который и не факт, что поможет.
К счастью, это проблему можно решить с помощью штатных способов. В Android есть билдер SQLiteQueryBuilder , который самостоятельно сгенерирует запрос, валидируя поступающие параметры.
С его помощью легко строить как простые запросы из одной таблицы, так и более сложные, с фильтрацией и объединением. Такой случай и разберем — в базе две таблицы, и, чтобы получить все данные по пользователю, нужно их сначала скомпоновать. Для этого подойдет способ LEFT OUTER JOIN , который позволяет объединять таблицы, выбирая данные по совпадающим полям.
Билдер принимает данные порционно, что позволяет системе проверять их на корректность. Метод setTables задает набор таблиц, из которых будет построена выборка, — это может быть как одна таблица, так и объединение нескольких.
Сам запрос строится с помощью buildQuery — ему указываются параметры выборки, а конструктор уже самостоятельно строит SELECT -запрос. Использование таких параметризированных запросов существенно снижает возможность SQL-инъекции.
Готовность к любым запросам — еще один плюс такого подхода. Конструктор позволяет на лету подставлять любые критерии, формируя выборку по желанию пользователя. Такого очень сложно добиться, используя rawQuery .
Robolectric
Скажу честно, правильные SQL-запросы получаются у меня не всегда с первого раза. Конечно, если каждый день работаешь с крупными базами данных, подобных проблем не будет, но такие люди редко пишут Android-приложения. Наверняка ты уже задался вопросом, как же проверять корректность всех этих SELECT , UPDATE и сложных объединений таблиц. Если ты никогда раньше не писал тесты, то сейчас поймешь, насколько это может быть удобно: они позволяют сверить ожидаемый результат с тем, что получилось в результате SQL-запроса.
В мире Android очень много инструментов для тестирования Java-кода. Сейчас мы воспользуемся фреймворком Robolectric — он позволяет прогонять код прямо на рабочей станции без использования эмуляторов и реальных устройств. Эта библиотека подключается, как и любая другая, через Gradle.
Все тесты должны лежать в папке src/test , каких-то дополнительных ограничений нет. Для проверки базы данных я создал отдельный файл с именем DBTesting . Системе нужно указать, чем именно запускается тест, делается это с помощью аннотаций.
Как правило, перед запуском теста нужно подготовить входные данные и объявить зависимые блоки кода. Делается это в методе setUp со специальной аннотацией Before .
Тестирование начинается с инициализации объектов — в частности, класс DummySQLite создает экземпляр базы данных. Дефолтный конструктор требует контекст приложения, которого по факту не будет — приложение запустится только частично, и контекст нужно эмулировать. Для этого в Robolectric есть класс ShadowApplication .
Еще в методе setUp можно подготовить экземпляр класса ContactJson , который будет загружаться в базу данных. Поскольку Retrofit мы тестировать не будем, инициализируем объект самостоятельно.
Набор данных готов, теперь можно писать и сами тесты. Для начала неплохо бы проверить, что база принимает на вход данные. Каждый тест — это обычный метод, но со специальной аннотацией Test .
Метод, добавляющий данные, ничего не возвращает, а значит, выполнится с ошибкой, только если будут ошибки в синтаксисе SQL. Такой тест малоинформативен, интереснее проверять методы, использующие SELECT -запрос.
Наверняка ты уже писал свои тесты, только результаты приходилось проверять глазами, сравнивая выдаваемый результат с желаемым. Здесь такое повышенное внимание не нужно — есть класс Assert, созданный для сравнительного анализа результатов вычислений.
Типов сравнений более чем достаточно. К примеру, мы знаем, что изображение должно быть, но размер в точности до байта нам неизвестен. Тогда будет достаточно проверить, что выгружаемое изображение больше эталонного значения.
Внутри каждого теста может быть несколько таких проверок, ограничений нет. Результат их работы вполне нагляден: если тест пройден полностью, он будет подсвечен зеленым, пройден частично — оранжевым. Красный цвет означает ошибку, выскочившую в коде проверяемых методов.
Рис. 3. Результаты тестов
Часто разработчики пользуются лог-сообщениями, которые в обычной ситуации выводит Logcat . Здесь они по умолчанию не выводятся, но их можно перехватить с помощью ShadowLog .
Покрывать созданные методы тестами полезно для выявления косяков, которые могут выскочить уже на стадии релиза. Некоторые разработчики даже сначала пишут тесты, а только потом исходный код проверяемых методов — этот модный прием называется TDD, Test-driven development. А при работе с базами данных они вообще незаменимы: все тесты логически изолированы, можно вносить данные без каких-либо опасений, они никогда не попадут в «настоящие» таблицы.
Outro
Каждый из нас сталкивался с программами, которые пренебрегают кешированием, вновь и вновь подгружая данные из сети. Уверен, ты такие писать теперь не будешь :). Мне осталось только добавить, что работать с базой лучше в отдельном потоке, в этом поможет RxJava или просто AsyncTask . Созданный сегодня проект можно нагрузить чем угодно, используя этот код как шаблон для своих проектов. Чтобы лучше понять логику работы с SQLite, скачай с нашего сайта полные исходники используемых классов и тестов Robolectric. Если останутся какие-то вопросы, пиши в комментарии — постараюсь ответить. Удачи!
Источник