Рубрики
Без рубрики

Микроблог: добавление расчетного времени чтения в мои сообщения в блоге

Блоги, которые показывают предполагаемое время чтения, могут увеличить количество кликов более чем на 400%. С… Помечено микроблогом, java, программным обеспечением.

Микроблог (Серия из 4 частей)

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

Стопка

Как правило, HTML-шаблоны предназначены для получения пользовательских данных и объединения их с предопределенными шаблонами. Моя текущая настройка шаблонов сообщений в блоге – это одна Java-программа, которая использует синтаксис, подобный уценке, для вставки содержимого в предварительно написанный HTML-файл. Я не буду вдаваться в подробности слишком подробно, но достаточно сказать, что он восстанавливает как сообщения в блоге, так и любые внутренние ссылки — например, раздел “Рекомендуемые сообщения” внизу. Дайте мне знать в комментариях, если вы хотите увидеть пост о том, как я создал свою собственную систему шаблонов!

Помимо каждого сообщения в блоге, он также генерирует файл JSON, к которому подключается моя страница блога, чтобы показывать предварительные просмотры сообщений. Делая это, я могу эффективно создать чисто статический сайт, который будет таким же отзывчивым, как что-то вроде сайта WordPress. В целом, стек состоит из Java в качестве генератора сайтов и HTML, CSS и JavaScript в качестве интерфейсных технологий.

Получение фактических цифр

Расчет времени чтения предположительно довольно прост — просто возьмите количество слов в вашей статье и разделите на среднюю скорость чтения примерно 265 слов. Однако, когда дело доходит до блогов с кодом, это число может резко измениться. Если код очень плотный, даже несколько слов могут занять минуту или две. Однако чрезмерно подробный код можно просто просмотреть. Я решил, что просто буду считать код по строкам, присваивая эквивалент примерно 1 строке на слово.

Это может показаться очень небольшим, но помните, что в коде часто много строк, содержащих не более одного символа, а также, поскольку я стараюсь писать свой код так, чтобы он был читабельным и атомарным; то есть каждая строка должна быть короткой, приятной и понятной. Кроме того, я решил снизить целевую скорость с 265 до 200 исключительно потому, что число кажется намного приятнее. Почему не 250, спросите вы? Я не знаю. Произвольные числа в руке, формула для расчета времени чтения довольно проста:

      readingTime = (numWords + linesOfCode) / 200;

Код никогда не бывает таким простым, не так ли

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

Поскольку Java может возвращать только одно значение (исключая использование массивов для возврата нескольких), любая другая информация, которую необходимо вернуть, должна быть передана в качестве аргумента и изменена внутри внутренней функции. Однако/|it s в Java являются передаваемыми по значению (ну, технически все есть , но мы удобно игнорируем это). Это означает, что я не могу просто передать указатель на переменную количество слов и обновить ее внутри внутренней функции, как я мог бы сделать в C. Итак, мы застряли в колее — как нам выбраться?

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

      public String buildHTML(String filename) {
        // ...
        int[] wordCount = new int[1]; // pass by "reference"
        String content = buildContent(fileScanner, wordCount);

        readingTime = wordCount[0] / 200;

        // ...
      }

      public String buildContent(Scanner fileScanner, int[] wordCount) {
        // ...
        else if (lineArray[0].toUpperCase().equals("P")) {
          content += buildParagraph(lineArray[1], wordCount);
        } else if (lineArray[0].toUpperCase().equals("CODE")) {
           content += buildCode(fileScanner, wordCount);
        }

        // ...
      }

      public String buildParagraph(String pData, int[] wordCount) {
        // ...
        wordCount[0] += content.split(" ").length; // actually setting the data

        //...
      }

      public String buildCode(Scanner fileScanner, int[] wordCount) {
        // ...
        while (fileScanner.hasNextLine()) {
          wordCount[0]++; // one "word" per line

          // ...
        }

        // ...
      }

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

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

Как всегда, не забывайте следить за мной для получения большего контента, подобного этому. В настоящее время я пишу на dev.to и Средний , и ваша поддержка на любой платформе была бы очень признательна. У меня также есть членство настроено, где вы можете получить ранний предварительный просмотр статей и эксклюзивный доступ к целой куче ресурсов. Кроме того, если вам особенно понравился этот пост, подумайте о том, чтобы поддержать меня, купив мне кофе . До следующего раза!

Микроблог (Серия из 4 частей)

Оригинал: “https://dev.to/shaileshcodes/microblog-adding-estimated-reading-time-to-my-blog-posts-545i”