Arm1.ru

Поиск по тэгу «javascript»

App Store Release Informer 1.1.0

Переписал своего бота на ES2015, плюс добавил тесты. Когда бот пишет о том, что вышла новая версия в App Store, то пишется и что нового в этой версии.

Исходники на GitHub.

comment comments

Простой console.log с выводом файла и номера строки в Node.js

Пока кодю на Node.js нужно постоянно что-то выводить в консоль. Например, ошибки. Но для большей информативности удобнее знать, где именно ошибка выводится. Тем более, что пока кодил под iOS такой удобный макрос всегда был под рукой, а с Node.js пришлось погуглить и поковыряться, т.к. многие примеры со Stack Overflow просто падали на последней версии Node.js 5.10.0. Падали из-за использования в них 
Error.captureStackTrace(err, arguments.callee), а сейчас уже нужно использовать NFE.

В итоге сделал то, что хотел. Оставлю тут как шпаргалку.

npm install colors --save

Файл logger.js:

'use strict';

let colors = require('colors');
colors.enabled = true;

exports.p = function logger(somethingForPrint) {
  somethingForPrint = somethingForPrint || '';
  const originalPrepareStackTrace = Error.prepareStackTrace;

  Error.prepareStackTrace = (error, stack) => { return stack; };

  let e = new Error;
  Error.captureStackTrace(e, logger);

  const stack = e.stack;
  const filename = stack[0].getFileName().split('/').reverse()[0];
  const trace = filename + ':' + stack[0].getLineNumber() + " " + colors.bold.black('%s') + "\n";

  Error.prepareStackTrace = originalPrepareStackTrace;

  console.log(trace, somethingForPrint);
};

Использовать:

const logger = require('../utils/logger');
logger.p('something happened');
// file.js:401 something happened

comment comments

Тестирование REST API с помощью Jasmine

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

Для тестов решил использовать Node.js и framework для тестирования Jasmine. Попутно прикрутил Gulp, чтобы в нём прогонять код через ESLint на предмет каких-то косяков и запускать тесты. 

npm init
npm install gulp -g
npm install jasmine -g
npm install request --save
jasmine init

Остальное на гитхабе: Пример-заготовка на Github.

comment comments

Бот для Telegram App Store Release Informer

Вынашивал тут идейку и наконец воплотил. У Apple есть REST API для поиска в iTunes. Я сделал бота для Telegram, который позволяет подписываться на обновления приложений. Когда выходит новая версия - он пишет тебе об этом в Telegram будь то личный чат или групповой. Будем теперь на работе оперативно все узнавать, когда новые версии наших приложений выходят в App Store. 

Писал на Node.js как умею. Главное - работает. Хотел сделять и для андроидщиков, но, оказывается, у Google Play нет API. Совсем O_O.

Попробовать бота: https://telegram.me/ReleaseInformerBot (при старте просто набрать /help)

Если кто-то захочет что-то дописать исходники на Github: https://github.com/makoni/ReleaseInformerBot

Правда, кроме Node.js там используется как база данный мой любимый CouchDB. Но, чтобы запустить его на Mac, просто качаешь бинарник и готово (ну, и БД + виды надо создать).

comment comments

Пара слов про Parse.com

Ковырял тут кое-что на Parse. В двух словах - штука очень крутая, есть крутые SDK для разных платформ, в том числе можно на Javascript юзать их как на фронт-энде, так и на бэкэнде. Можно прям у них в облаке написать на node.js его, даже можно Express подключить, если нужно. Но есть два но:

  1. Когда ты создаёшь отложенный push notification с расписанием - ты указываешь время отправки. Так вот через Javascript SDK он выставляет его по GMT и всё. Всем пуш будет отправлен по GMT вне зависимости от их часовой зоны, просто по расписанию. Указать, что ты хочешь отправить push всем, например, в 19:00 местного времени, чтобы клиент в любом часовом поясе получил сообщение в свои 19:00, в Javascript SDK ты не можешь. Этому багу уже 2 года. Вместо этого, тебе предлагается использовать из Javascript их REST API (sic!).
  2. Окей, ты используешь REST API, благо это можно из того же Javascript SDK удобно сделать, и всё работает как надо, пуши планируются по местному времени, но... В тексте заголовка из сообщения вырезаются все русские буквы. Во всех примерах в документации к REST API просят указать заголовок запроса "Content-Type: application/json", вот только этого мало, чтобы кириллица и прочие символы не из латиницы не вырезались, оказывается, нужно указать кодировку в заголовке: "Content-Type: application/json; charset=utf-8". Чёрт его знает, в какой кодировке они ожидают по умолчанию данные, выкатывая международный сервис, но тем не менее.

А в остальное, конечно, сервис очень классный.

comment comments

Select like a Boss для Safari

Проблема выделения текста внутри ссылки на движках Webkit/Blink уже существует давно. Лично для меня. Как-то я пропустил, что она может быть решена с помощью расширения для браузера. Нашёл такое расширение, называется Select like a Boss. Но оно только для Firefox, Opera (Blink) и Chrome. Т.к. на гитхабе были найдены исходники расширения для Chrome - я просто взял js-код и запаковал его в расширение для Safari. Теперь я счастлив и могу нормально выделять текст внутри ссылок :)

Исходники + ссылка на скачивание: github.

comment comments

funky-play 1.2

Обновил расширение для Safari. Теперь выводится 5 релизов на панели вместо 3. Ну и дизайн теперь в стиле Safari 8.

Исходники на Github.

Установить расширение.

comment comments

Расширение для Safari для Funkysouls.com

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

Надоело мне копипастить и я написал расширение для Safari (давно хотел освоить).

Расширение делает всего 2 вещи:

  1. Когда заходишь на Funkysouls - у каждого релиза добавляется 2 кнопки Play, как видно на скрине. Красная ведёт на поиск по исполнителю на Яндекс.Музыку, синяя ведёт на поиск по исполнителю в ВК. Не надо больше копипастить. 2 клика - и ты слушаешь.
  2. Разошёлся слегка, пока писал, и добавил панельку в браузер. Расширение дёргает раз в 5 минут RSS сайта и выводит на панельке 3 последних релиза. Можно отслеживать их не заходя на сайт, например. Естественно, если нажать на название релиза на панельке, откроется новая вкладка с его страницей на фанках.

При желании, можно взять код расширения из end.js и button.css, вставить его в Chrome в расширение Control Freak, например, и получить те же 2 кнопки Play в Chrome. В Firefox, думаю, тоже, через Greasemonkey.

Исходники на Github.

Установить расширение.

comment comments

HTML5 видео как фон страницы

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

Читать далее...

comment comments
local_offer html5 javascript css3 video

Скрипт для фиксирования блока при скролле

Давно хотел такую штуку сделать, чтобы при скролле страницы какой-то блок скроллился вместе со страницей до определённого момента, а потом прилипал. Сегодня нашёл такой плагин под названием jQuery Sticky Scroller

Скачать его можно тут.

Подключается он довольно просто:

var scroller = new StickyScroller("#menu",
{
start: 270,
end: 50800,
interval: 200,
range: 100,
margin: 0
});

Собственно, по названию параметро понятно, что когда скролл уходит за 270 пикселей от верхней границы страницы - элемент #menu фиксируется на странице, то есть получает свойство CSS "position: fixed;". Параметр end отвечает за нижнюю границу отслеживания скролла, на случай, если фиксированным эллемент должен быть не всегда. Параметр margin задаёт то - с каким отступом от верхней границы окна браузера будет находиться элемент. 

У плагина есть также несколько публичных методов, описывать их смысла не вижу, описание есть на странице плагина.

Примеры поведения такого блока: Яндекс.Музыка. Конкретно это плагин я применил на avrora-zal.ru, ну и пример с более сложным его использованием на сайте автора.

comment comments

Простой онлайн TimeStamp конвертер

По работе периодически приходится смотреть какие-то данные из базы. Время мы в основном храним в TimeStamp (кто не знает - это количество секунд, прошедших с сотворения мира Unix, то есть 1 января 1970 года).
По цифре вроде 1305233826 хрен поймёшь, что это за дата. Каждый раз писать в каком-нибудь скрипте конвертирование неудобно, поэтому сделал онлайн-конвертер. Показывает время в удобочитаемом виде.

Enjoy. Online TimeStamp Converter

comment comments