Tag: «javascript»
App Store Release Informer 1.1.0
Переписал своего бота на ES2015, плюс добавил тесты. Когда бот пишет о том, что вышла новая версия в App Store, то пишется и что нового в этой версии.
Простой 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
Тестирование 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 подключить, если нужно. Но есть два но:
- Когда ты создаёшь отложенный push notification с расписанием - ты указываешь время отправки. Так вот через Javascript SDK он выставляет его по GMT и всё. Всем пуш будет отправлен по GMT вне зависимости от их часовой зоны, просто по расписанию. Указать, что ты хочешь отправить push всем, например, в 19:00 местного времени, чтобы клиент в любом часовом поясе получил сообщение в свои 19:00, в Javascript SDK ты не можешь. Этому багу уже 2 года. Вместо этого, тебе предлагается использовать из Javascript их REST API (sic!).
- Окей, ты используешь REST API, благо это можно из того же Javascript SDK удобно сделать, и всё работает как надо, пуши планируются по местному времени, но... В тексте заголовка из сообщения вырезаются все русские буквы. Во всех примерах в документации к REST API просят указать заголовок запроса "Content-Type: application/json", вот только этого мало, чтобы кириллица и прочие символы не из латиницы не вырезались, оказывается, нужно указать кодировку в заголовке: "Content-Type: application/json; charset=utf-8". Чёрт его знает, в какой кодировке они ожидают по умолчанию данные, выкатывая международный сервис, но тем не менее.
А в остальное, конечно, сервис очень классный.
comment commentsSelect like a Boss для Safari
Проблема выделения текста внутри ссылки на движках Webkit/Blink уже существует давно. Лично для меня. Как-то я пропустил, что она может быть решена с помощью расширения для браузера. Нашёл такое расширение, называется Select like a Boss. Но оно только для Firefox, Opera (Blink) и Chrome. Т.к. на гитхабе были найдены исходники расширения для Chrome - я просто взял js-код и запаковал его в расширение для Safari. Теперь я счастлив и могу нормально выделять текст внутри ссылок :)
Исходники + ссылка на скачивание: github.
comment commentsfunky-play 1.2
Обновил расширение для Safari. Теперь выводится 5 релизов на панели вместо 3. Ну и дизайн теперь в стиле Safari 8.
comment commentsРасширение для Safari для Funkysouls.com
Я периодически захожу на Funkysouls в поисках новой музыки. Пролистываю несколько первых страниц, смотрю по тэгам - может ли мне это быть интересно, после чего копирую название исполнителя, иду в ВК или на Яндекс.Музыку, вставляю и слушаю там пару трэков. Если мне нравится - тогда только пробую заиметь альбом.
Надоело мне копипастить и я написал расширение для Safari (давно хотел освоить).
Расширение делает всего 2 вещи:
- Когда заходишь на Funkysouls - у каждого релиза добавляется 2 кнопки Play, как видно на скрине. Красная ведёт на поиск по исполнителю на Яндекс.Музыку, синяя ведёт на поиск по исполнителю в ВК. Не надо больше копипастить. 2 клика - и ты слушаешь.
- Разошёлся слегка, пока писал, и добавил панельку в браузер. Расширение дёргает раз в 5 минут RSS сайта и выводит на панельке 3 последних релиза. Можно отслеживать их не заходя на сайт, например. Естественно, если нажать на название релиза на панельке, откроется новая вкладка с его страницей на фанках.
При желании, можно взять код расширения из end.js и button.css, вставить его в Chrome в расширение Control Freak, например, и получить те же 2 кнопки Play в Chrome. В Firefox, думаю, тоже, через Greasemonkey.
comment commentsHTML5 видео как фон страницы
Делал недавно промо-страничку для сайта Дельфина, для книги стихов, которая скоро выйдет. После обсуждения, предложил сделать это в форме видео, чтобы было красивые анимации. По ходу дела кое какие нюансы вылезли.
comment commentsСкрипт для фиксирования блока при скролле
Давно хотел такую штуку сделать, чтобы при скролле страницы какой-то блок скроллился вместе со страницей до определённого момента, а потом прилипал. Сегодня нашёл такой плагин под названием 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