Category: it

Category was added automatically. Read all entries about "it".

Sova_2

JavaScript –> React

Начинаю открывать для себя #React. Открытия начались с установки окружения, которая представляет из себя 160 МБ и почти 27000 файлов. Зато теперь приколько писать целый компонент, не разрываясь между .html .css и .js

Осталось научить IDE понимать и активно дополнять синтаксис JSX и вообще, активно работать с React. Так-то ничего, мне даже начинает нравиться это все. Следующий шаг – научиться запускать свои веб-серверы и работать с файлами (чтение-запись).

#javascript #reactjs

Sova_2

Практический JavaScript – Анализ текстов

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

Бонусом сейчас – установка минимальной длины учитываемого слова.

// TODO:

до Нового года – сделать так, чтобы можно было задавать ключевые слова для поиска (первое и главное). Код для этого уже есть, но сейчас не включен в основную версию (если это можно называть версиями);
до Нового года же – научить тулзу считать схожесть слов с ключевыми словами (для ключевых слов – левое, сейчас пустое, поле), то есть, брать их за основу и искать последовательно похожие слова, а потом откидывать те, у которых схожесть менее, скажем 50%.

Сейчас тулза выводит результат в формате, удобном для сохранения в CSV. В будущем хочу научить ее формировать этот CSV самостоятельно.

До анализа контекстов я, скорее всего, эту штуку никогда не доведу, но для прикладных задач ее будет вполне достаточно. Ну, и прилепить к ней AmChart, конечно же. А, научив сохранять в локальные файлы, можно сделать анализ сходства текстов в первом приближении. Ну, и да, пока это чистый нативный #javascript ES5.

Sova_2

JavaScript – практический код 2

Немного перепилил генератор ссылочной части на идентификаторы авторов научных публикаций (написан на #javascript). Теперь не нужно делить на ORCID и ResearcheID. Достаточно вставить их последовательно ORCID > ResID для каждого автора (эту работу, похоже, автоматизировать нельзя, но, вероятно, можно научить скрипт последовательно забирать номера из файлов, хотя смысл не ясен, сотни номеров пока никто обрабатывать не собирается). Скрипт сам рассортирует номера, проверит их на правильность (в случае, если хотя бы один из номеров не соответствует требуемому формату, пользователь получит предупреждение с указанием номера или номеров, формат которых некорректен).

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

В // TODO: добавил, что в следующей, версии нужно сделать проверку на наличие парных идентификаторов.

В общем, не самая сложная, но работа сделана.

Sova_2

JavaScript – написал первый практический код

Сегодня потребовалось быстро формировать из научных ID ссылочные строки на них и делать строку для авторских данных. Минут за 15 накидал простую тулзу, которая список ORCID-ов и ResID превращает в набор ссылок и строчку. Получилось внешне не очень, зато все работает.

Теперь редакторам и корректорам не придется руками делать это все и получать массу ошибок в итоге.

Sova_2

JavaScript – решение задач – Счастливый билет

О счастливых билетах знают все. Кто-то их ест, кто-то считает это шляпой, кто-то решает задачи на #Javascript

Дано: значение типа number вида 123456.
Требуется: определить, является ли билет, номер которого дан, счастливым по способу «левая и правая половины». То есть, счастливым будет тот билет, у которого сумма первых трех цифр номера равна сумме последних трех цифр. Решение в спойлере:

[РЕШЕНИЕ]

  1. function isLucky(n) {

  2. var a = n

  3. .toString()

  4. .split("")

  5. .map(Number);

  6. var arr1 = a.slice(0, a.length / 2);

  7. var arr2 = a.slice(a.length / 2);

  8. var sum1 = arr1.reduce(function(sum, current) {

  9. return sum + current;

  10. }, 0);

  11. var sum2 = arr2.reduce(function(sum, current) {

  12. return sum + current;

  13. }, 0);

  14. //console.log(a);

  15. // console.log(arr1);

  16. // console.log(arr2);

  17. // console.log(sum1);

  18. // console.log(sum2);

  19. if (sum1 == sum2) {

  20. return true;

  21. } else {

  22. return false;

  23. }

  24. }

Заметьте, что в коде много закомментированных console.log(). Это промежуточные проверки, которые показывают, все ли я делаю правильно и что получается на промежуточных этапах. Формально решение всегда требует return, но мое решение до последнего выводит требуемый результат в console.log().

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

Sova_2

JavaScript – решение задач, продложение

Продолжаю решать задачи на Codesignal. Для меня они сложные. Но, как выяснилось, основная сложность заключается в правильном определении места, где нужно объявить нужную переменную. Причем, я уже, кажется, разобрался с const, let, var и неплохо ориентируюсь в том, где применяется каждая. Хотя по-началу было вообще непонятно, зачем такое разделение. Сейчас все гораздо понятнее. А на уровне порядка действий вообще все понятно. Вот, например, задача, которая попалась сегодня:

Дан массив из строк:

["a", "abc", "cbd", "zzzzzz", "a", "abcdef", "asasa", "aaaaaa"]

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

[Решение]

function allLongestStrings(inputArray)
  {
    var finalArr = []
    var lengths = []


      for (var i = 0; i < inputArray.length; i++)  
      {
        lengths.push (inputArray[i].length);
        var maxLength = Math.max(...lengths)
      }
       inputArray.forEach (function (item, i,)
      {
        if (inputArray[i].length == maxLength)
          {
          finalArr.push (inputArray[i]);
          }
      })
   console.log (finalArr);
};
 
allLongestStrings (["a", "abc", "cbd", "zzzzzz", "a", "abcdef", "asasa", "aaaaaa"]);




Насколько могу судить, это не самое изящное решение. Возвращается массив:

["zzzzzz", "abcdef", "aaaaaa"]

Что и требовалось. Задача решена. Интересно, что в моем случае основной проблемой является запоминание синтаксиса команд. Например, постоянно забываю и возвращаюсь в справочник MDN за синтаксисом команды добавления элемента в массив. Плохо это или хорошо, пока еще не знаю.

Ну, вот, примерно так все движется с #javascript . Параллельно по-немногу пытаю CSS и еще реже – React. Последний пока только на уровне понимания принципа работы и установки либов.

Sova_2

JavaScript – Новый год

После новогодних праздников и эстонских злоключений я снова сел за #JavaScript. И все еще бьюсь в него как рыба об лед. Пришло время поколотиться в массивы. После просмотра основ был запилен такой скрипт (так как я тренируюсь в CodePen, тут нет части, которая описывает элементы HTML):


  1. var array1 = ['ананас', 'апельсин','морковь','молоко','сыр','колбаса','рис','масло','гречка','картофель','курица','палтус',];

  2. var resFld = document.getElementById('result');

  3. var iterr = document.getElementById('iterration');

  4. var selItm = document.getElementById('selectItem');

  5. var indexNum = document.getElementById('indexnumber');



  6. array1.forEach(function(item, i) {

  7. iterr.innerHTML += i+1 + '. ' + item + '</br>' });


  8. indexNum.oninput = function(){

  9. if (indexNum.value < array1.length) {resFld.innerHTML = array1[indexNum.value];

  10. }

  11. else {

  12. resFld.innerHTML = ('В массиве нет элемента с таким номером,')

  13. + '</br>' + ('так как в массиве всего ') + '<b>' + array1.length + '</b>' + (' элементов')

  14. }

  15. };

Что же он делает? Он создает массив (пока его приходится создавать руками, но у меня есть план на этот счет), попутно выводит его в виде списка в элемент <р id="iterration"> с номерами (не с номерами элементов в массиве, а с номерами списка, то есть, не с "0", а с "1" (для этого значение номера элемента i увеличивается на единицу в i + 1). После этого из поля ввода <inрut id="indexnumber"> забирается введенное значение и в элемент <р id="result"> выводится соответствующий элемент массива, если введенный номер не больше количества элементов массива.

Если же значение поля <inрut id="indexnumber"> больше, чем количество элементов в массиве, в <p id="result"> выводится сообщение, что «В массиве нет элемента с таким номером, так как в массиве всего Х элементов» (Х – количество элементов массива).

Скрипт бесполезен чуть менее, чем полностью. Но он спланирован и написан полностью самостоятельно, не по какому-то уроку. Теперь нужно выяснить, как добавлять в массив значения поля <inрut> и других элементов.

Такие дела, товарищи.

Sova_2

JavaScript для детей

Да, да, для меня. Я никогда (от слова «совсем») не имел дела с языками программирования после школы, где моя эпическая программа была на писана на Basic. Теперь, на склоне лет, пришло время этот пробел частично закрыть. Второй день моих страданий в JavaScript принесли следующее:


  1. var randomNumber = Math.floor(Math.random() * 1000);

  2. var randPole = document.getElementById('pole');

  3. var randBtn = document.getElementById('randNum');

  4. var alertFld = document.getElementById('Alerts');


  5. randBtn.innerHTML = randomNumber;

  6. if (randomNumber > 100)

  7. alertFld.innerHTML = randomNumber * 2;

Код генерирует случайное число от 0 до 1000, выводит его в элемент "button" и, если результат больше 100, умножает его на 2 и выводит результат умножения в "p". Все.
Собственно, я даже не очень понимаю, зачем мне это, но я буду долбиться головой в стену до тех пор, пока или голова не сломается, или стенка.

Sova_2

LaTeX – формулы

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


overleaf-1-01.png

Набор такого уравнения в Microsoft Equation занимает минут пять или шесть. А в LaTeX оно выглядит так:



$$z_{i+1} = z_i - \frac{p(z_i)}{p'(z_i)} = z_i - \frac{z_{i}^{3} - 1}{3z_{i}^{2}}$$

Причем, символы $ ставить нужно только при выключении формулы. Подсветка кода делается здесь.

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



overleaf-1-02.png

В LaTeX эта длинная формула записывается так:

$$\lambda = \lim_{N\to\infty} \sum_{n-1}^{N} \log\bigg|\frac{dx_{n+1}}{dx_n}\bigg|
= \lim_{N\to\infty}\frac{1}{N} \sum_{n=1}^{N}\log|r_n (1-2x_n)$$


Далее все просто компилируется и на выходе получается PDF-документ, пригодный для дальнейшей работы. Но при дальнейшем освоении LaTeX можно отказаться и от нее, формтируя весь документ непосредственно в LaTeX-редакторе, тем более, что сейчас есть сервисы, предоставляюще возможность компиляции «налету». Есть некоторая проблема со шрифтами, которые будет использовать компилятор, но оффлайн-редакторы решают эту проблему достаточно просто.

Shegorath

Houdini

Houdini Demo Reel 2013

Компания SideFX продолжает работать над своим революционным пакетом Houdini.
В настоящий момент эта программа является мировым лидером в области процедурной анимации и симуляции. Инструменты, созданные разработчиками, дают огромную свободу специалистам по спецэффектам, когда дело доходит до динамики и реалистичной симуляции. В то же время от пользователя не требуется глубокого знания внешних и внутренних языков программирования, что необходимо, если попытаться создать что-то подобное в других программах (3dsmax, Maya и т. д.), либо потребуются дополнительные программы. Houdini предлагает революционную среду визуального программирования и создания целых программных модулей, обращаться с которыми настолько легко, что это больше напоминает игру.
Houdini давно и прочно закрепился во всех профессиональных студиях, которые создают спецэффекты для кино и телевидения. Наверное, они обошлись бы и без него, но с Houdini работа становится намного проще и быстрее. Ведь именно SideFX предлагает самые передовые инструменты и алгоритмы, благодаря которым на экране становятся возможными настоящие чудеса.