Skip to Content

Что такое Elm? Часть 1 — основы

Elm — это функциональный язык, компилируемый в JavaScript. Данная статья является кратким введением в Elm, она поможет быстро вникнуть в суть и начать писать код на Elm. Ключевыми фичами языка являются:

  • Отсутствие ошибок в рантайме. В отличие от JavaScript, код, написанный на Elm, не выдает рантайм ошибок. Elm использует выведение типов для обнаружения проблем во время компиляции и выдает дружелюбные подсказки. Таким образом, ошибки никогда не доходят до конечного пользователя. В NoRedInk написано 36 тысяч строк на Elm, и за год промышленной эксплуатации код ни разу не упал в рантайме.
  • Высокая производительность. Elm использует собственную реализацию виртуальной DOM, ориентированную на простоту и скорость. Все значения в Elm иммутабельны, и бенчмарки показывают, что это выгодно сказывается на генерации действительно быстрого JavaScript кода:

Читать далее

Заметки по ускорению Angular-приложений

angularjs_logo-svg

Другие статьи по AngularJS:

AngularJS — один из популярных JS-фреймворков. В его основе — шаблонизация и 2-way data binding. В Angular-приложениях поддерживается модульность, из коробки работает клиентский роутинг.

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

Существует множество способов оптимизации приложений Angular. Здесь я попробую перечислить самые популярные их этих способов и сравнить их.

Читать далее

Как быстро построить круговую диаграмму на CSS и JavaScript

Для front-end разработчика существует огромное количество способов, которыми можно построить круговую диаграмму —  разнообразные библиотеки, плагины, потрясающие возможности SVG графики и т.д. Однако стоит, пожалуй, рассмотреть и самый простой способ создания «пирожкового» чарта, который может быть полезен, когда задача поставлена максимально просто и нет необходимости или возможности использовать дополнительные инструменты. Далее речь пойдёт о примере такой реализации.

Читать далее

Логирование запросов Mondrian (в том числе в JasperServer)

Логирование запросов в Mondrian

Mondrian преобразует MDX-запросы в SQL. Если во время отладки стоит целью проверить правильно ли строится запрос, то самым быстрым решением будет включить логирование MDX- и SQL- запросов в самом mondrian.

Читать далее

Проксирование вызовов функций без побочных эффектов в JavaScript

Иногда требуется изменить поведение библиотечного объекта. К примеру, мы хотим, чтобы даты, которые мы получаем с сервера в формате ISO, выводились в интерфейсе в определенном формате. Хорошей идеей будет инкапсулировать эту логику, чтобы каждый раз не заглядывать в таблицу форматов и не писать moment().format('DD.MM.YYYY'). Во первых, тут правильно будет включить локаль moment.locale('ru') , но даже в этом случае нужно будет писать moment().format('L'). Естественно, форматов вывода в проекте будет много. Мне не нравится так называемый паттерн «хелпер», потому что он рано или поздно превратится в свалку всего и вся с кучей зависимостей. Мы сделаем обертку, но не простую, а в точности повторяющую API moment.js и добавляющую в него свои фишки. Делается это просто:  (надеюсь, вы используете underscore?)

App.moment = _.wrap(moment, function (moment) {
    var internalMoment = moment.apply(window, _.toArray(arguments).slice(1));
    internalMoment.formatLocal = _.partial(internalMoment.format, 'L');
    return internalMoment;
});

Вуаля. Теперь можно делать так:

var formatted = App.moment('2005-08-09T18:31:42').formatLocal();
console.log(formatted); // 09.08.2005

Как это работает

Сам moment является фабричным методом, который создает объект даты (но не типа Date, а собственный). Метод _.wrap создает новую функцию, в которой первым аргументом является оборачиваемая функция. Это позволяет нам писать код либо до, либо после ее собственного вызова. Таким образом сначала создается нормальный объект moment, а потом он расширяется. _.toArray(arguments).slice(1)  нужно для того, чтобы пользователь мог работать с методом, как если бы он работал с ним без обертки, мы просто выкидываем лишний аргумент, а остальные передаются моменту. Кстати, о методе _.partial. В нашем примере он создает новый метод formatLocale, замыкая в нем параметр ‘L’ и вызывая стандартный метод format. То есть, вызов App.moment().formatLocal()  эквивалентен moment().format(‘L’. Это называется частичное применение.

Плагин Mark New Posts для WordPress

Выпущен очередной плагин для WordPress от компании TS Soft — Mark New Posts. Плагин предназначен для отметки новых записей в блоге, добавленных с момента последнего посещения пользователя.

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

В итоге был сделан новый плагин, который для каждой отдельной записи проверяет, действительно ли пользователь её видел. Более того, можно настроить плагин так, что записи, которые отображены в общем списке в неполном виде (с кнопкой «Читать далее»), будут отмечаться как прочитанные только после открытия полной версии.

Плагин Mark New Posts работает сразу после установки и активации. Никаких изменений в тему WordPress вносить не нужно.

Также плагин предоставляет две функции: mnp_is_new_post() и mnp_new_posts_count(), которые могут пригодиться разработчикам тем WordPress.

mark-new-posts-options

Страница настройки плагина

mark-new-posts-1

Маркер-кружок

mark-new-posts-2

Маркер-текст

mark-new-posts-3

Маркер-картинка

Плагин распространяется по лицензии MIT.

Страница плагина на WordPress.org

Однотипные операции с большим количеством строк в Sublime Text

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

В данных примерах мы рассмотрим многострочное выделение и выполнение однотипных операций в редакторе Sublime Text. Для выделения нескольких строк используются клавиатурные сокращения:
Windows: Ctrl+Alt+↑↓
Linux: Alt+Shift+↑↓

Пример № 1: Генерация unit-теста


Читать далее

Краткое руководство по созданию отчётов в JasperReports

JasperReports — это система построения отчётов для платформы Java от компании JasperSoft. Достоинства этой системы состоят, в частности, в возможности экспорта построенных отчётов во многие популярные форматы: HTML, PDF, RTF и др.

Эта статья является очень кратким руководством по составлению отчётов в системе JasperReports и работе с ними. Цель статьи в том, чтобы в нескольких словах дать ключ к пониманию основных возможностей системы и структуры отчётов.

Читать далее

Введение в NPM, Grunt и Bower для ASP.NET разработчиков

Visual Studio 2015 получила встроенную поддержку npm, grunt и bower, к тому же ASP.NET vNext проект использует именно эти технологии для управления зависимостями и сборкой фронтенда, что и послужило мотивацией для написания этой статьиНедостаток существующих статей на данную тематику — углубление в примеры использования Grunt и Bower и отсутствие информации по тому как это работает и почему, а главное при чем тут Node.js.

Введение

Мы рассмотрим все три новых инструмента, поддержка которых появилась в Visual Studio 2015. Если вы следите за тем что творит MS в последнее время с .NET, вы наверняка слышали об ASP.NET vNext. Новая студия хорошо с ним интегрирована и позволяет:

  •         Управлять frontend зависимостями через Bower
  •         Управлять сторонними инструментами через npm
  •         Запускать различные задачи через Grunt

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

Читать далее

Взаимное влияние SCM и других средств организации разработки

Конспект моего выступления на конференции Go# Moscow 2014 (TEAM LEADERS DAY):

Читать далее