понедельник, 20 июня 2016 г.

Кратко о SaSS

Закончив курс Sass на codeacademy.
Я решил сделать простое описание возможностей  Sass с примерами.

Типы данных Sass
Strings
Lists
Maps
Colors

Логические операции

добавление +
вычитание -
умножение *
деление /
модуль от числа %.

Пример:
$width: 250px;

height: $width/6;
line-height: $width/6;


воскресенье, 19 июня 2016 г.

Обработка xml с помощью AngularJS

Для обработки xml в angularJs доступны 2 библиотеки на Angular-xml и x2js. В этом примере я покажу как можно быстро вывести xml feed у себя на сайте. Пример нашего xml файла.


Давайте установим эти две библиотеки с помощью bower. Создадим bower.json и внесем эти данные.




среда, 1 июня 2016 г.

Используем Wit.ai для создания умного Messanger bot


Если вы захотите создать бота для  Messanger, у вас не будет удобных команд и клавиатур как в Телеграм. В таком случае вам прийдеться определять на заранее определенные сообщения созданные вручную ответы или воспользоваться wit.ai для того что бы можно было определять сущность в контексте сообщений и создавать алгоритм разговора.

Wit.ai это открытая и бесплатная платформа которая помогает создавать приложения для распознавания голоса и текста. С помощью этой платформ можно определить контекст или семантику введенного и сказанного предложения. Wit предоставляет API и Панель управления для общей настройки диалогов и сущностей.

воскресенье, 29 мая 2016 г.

Создаем API Wrapper в Node js

Если вам нужно использовать API в NodeJS одно из сервисов и не хочется каждый раз писать один и тот же запрос только с разными параметрами много раз. В этом случае лучше написать отдельный пакет, как это сделать можно прочитать в этом посте.
Для примера мы возьмем EasyWay API. Это сервис для отслеживания актуальных данных о маршрутах  и маршрутках доступный в нескольких странах.

Писать наш пакет буду в c9.io. Но вы можете выбрать любой другой вариант в котором есть возможность создавать и выполнять NodeJS проекты.

Создадим package.json и заполним нужными данными.

{
  "name": "node_eway",
  "version": "0.0.1",
  "description": "Api Wraper for Eway.",
  "main": "index.js",
  "repository": "",
  "author": "Edik Goryach <gorachedik96@gmail.com>",
  "dependencies": {
    "urlencode": "latest",
    "request": "latest"
  }
}

Теперь подключим наши пакеты и создадим конструктор для нашего обьекта в index.js

var request = require('request');
var urlencode = require('urlencode');

const APIURL = 'https://api.eway.in.ua/?';

//создание объекта
var Eway = function (login, pass) {
this.login = login;
this.pass = pass;


Напишем первый метод для нашего объекта:

Eway.prototype.get = function (method, params, callback){
  request({
  method: 'GET',
  url: APIURL + 'login=' + this.login +'&password=' + this.pass + '&function=' + method +'&'  + params,
  headers: {
    'Content-Type': 'application/json',
  }
}, function (err, response, body) {
   if (err) {
    callback('err');
    return console.error('Error:', err);
  }

  callback(JSON.parse(body))
});
}

Создадим test.js и попробуем вызвать конструктор и  наш метод
//подключаем index.js
var Eway = require('./index.js');

var EwayLib = new Lafka('Your login', 'Your pass');

EwayLib.get('cities.GetRoutesList', 'city=lviv', function(data) {
   console.log(data);
 return data;
});

Вот таким способом можно организовать обертку для Api  с помощью callback.

воскресенье, 22 мая 2016 г.

Deep Learning для чат ботов (Часть 1)


Чат ботов также называют диалоговыми агентами или диалоговые системами, сейчас это очень горячая тема. Microsoft сделала большую ставку на чат ботов, и после этого такие компании как Facebook (M), Apple (Siri), Google, WeChat, and Slack. Это новая волна стартапов попытается изменить для пользователей взаимодействие с сервисами с помощью построения пользовательских приложений подобных Operator и x.ai, бот платформами как Chatfuel, и бот библиотеками как Howdy’s Botkit. Также Microsoft недавно предоставила свой Бот фреймворк.

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

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

СИСТЕМАТИКА МОДЕЛЕЙ

Поисково ориентированная vs. Генеративная модель

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

Генеративная модель (сложнее) не полагается на предопределенные ответы. Эта модель генерирует новые ответы с нуля. Генеративная модель обычного базируется на методах Машинного Обучения, но вместо перевода из одного языка к другому, она переводит из ввода в вывод(ответ).



Обе модели имеют очевидные плюсы и минусы. Благодаря хранилищу вручную созданных ответов , поисковая модель не будет делать грамматических ошибок. Однако они могут быть неспособны справляться с неизвестными случаями для которых нет подходящих предопределенных ответов. По некоторым причинам , эти модели не могут ссылаться на пред идущие контекстные информационные сущности  такие как имена упомянутые раньше в диалоге. Генеративная модель "умнее". Она может ссылаться назад к сущностям при вводе и давать понятие того о чем говорят люди. Хотя , эта модель сложно подается обучению, она вероятней всего будет делать грамматические ошибки(особенно при длинным предложениях ), и как правило нуждается в большом количестве тренировочной информации.

воскресенье, 27 марта 2016 г.

Руководство по Firebase: создаем приложения с помощью Firebase



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

Это руководство поможет вам понять некоторые из ключевых концепций Firebase и его API. Мы  создадим простой инструмент в режиме реального времени для аналитики , который будет отображать метрики нашего сайта и то что наши посетители просматривали в реальном времени. Весь наш код на JavaScript будет работать только в веб-браузере, но Firebase поддерживает множество других языков и сред, в том числе Node.js, Objective-C (IOS / OS X), Java (Android). Она также обеспечивает REST API, так что вы можете читать и записывать данные с любого сервера, даже если у вас нет официальной поддержки SDK. Мы будем использовать JQuery для обновления DOM в нашей аналитической инструментальной панели.

четверг, 24 марта 2016 г.

Представление Графовых баз данных (Перевод)



Перевод 12 главы книги NoSQL for Mere Mortals by Dan Sullivan.

Темы затроннутые в этой главе
Критерии Конструирования для Графовых баз данных
Графы и Сетевые модели
Преимущества Графовых Баз Данных
В этой главе, вы изучите о специализированных типах баз данных ,такие как графовые базы данных. Графовая БД основана на одном из разделов математики, этот раздел известен как теория графов. Технические методы в этом разделе математики очень полезны для анализа соединений и связей между сущностями. Дальше мы увидим что эти методы весьма полезны во многих областях управления данными.


Что такое Граф?
Граф представляет собой математический объект, который состоит из двух частей: вершин и ребер.Вершины иногда называют узлами; тем не менее, в этой главе мы  избегаем использования  этого термина, чтобы предотвратить путаницу, поскольку термин узел также относиться к кластерам серверов.


Вершины представляют собой вещи. Это может быть что угодно , включая:
  • Города
  • Сотрудников компании
  • Белки
  • Электрические цепи
  • Соединения в водопроводе
  • Организмы в экосистеме
  • Железнодорожные станции

среда, 16 марта 2016 г.

Об Periscope Api

Начнем с того что в сейчас Periscope Api закрыт для пользователей, и существуют только неофициальные сборки на Github, которые требуют ключи  (consumer_key и consumer_secret,для выполнения запросов к Api. Уже доступны примеры на php и ruby для работы с  Periscope Api но без нужных нам ключей.

Самый интересный пример это OpenPeriscope, который выполняется браузером как стороннее приложение. В этом примере тоже нет нужного нам ключа,  автор предлагает нам сделать реверс-инжиниринг  приложения periscope или украсть его с Dev Twitter.



Также автор предоставляет нам хорошую документацию.

Если вы уже имеете  ключ,  вам все равно потребуются  авторизация через Twitter.

Вот 5 основных шагов для авторизации в Periscope с помощью Твиттера.
1. Сделать Запрос и получить OAuth токен через https://api.twitter.com/oauth/request_token
2. Перенаправить пользователя на https://api.twitter.com/oauth/authorize?oauth_token=[oauth_token]
3. Подождать пока пользователь авторизируеться и получит oauth_token и oauth_verifier от перенаправленной страницы
4.После этого сделать запрос к https://api.twitter.com/oauth/access_token?oauth_verifier=[oauth_verifier] что бы получить oauth_token, oauth_token_secret, user_id и user_name
5. Отправить запрос к https://api.periscope.tv/api/v2/loginTwitter
{
    "bundle_id": "com.bountylabs.periscope",
    "phone_number": "",
    "session_key": "oauth_token",
    "session_secret": "oauth_token_secret",
    "user_id": "user_id",
    "user_name": "user_name",
    "vendor_id": "81EA8A9B-2950-40CD-9365-40535404DDE4"
  }
6. Сохранить значение куки после последнего запроса и вставлять в разные  запросы к Periscope Api .

Запросы на 1 и 4 шаге нужно использовать правильные Authorization заголовки(header) которые содержат в себе consumer_key и consumer_secret  Periscope приложения.

Customer_key был получен в первых шагах(если вы можете обойти сертификат ) то customer_secret никогда не покидает ваше устройство и вы не можете его получить простым перехватом трафика.

Я не имею нужного ключа , если вам каким нибудь способом удалось его получить напишите пожалуйста мне.

В моей ситуации есть одна альтернатива это получение фида из твитера о новых трансляциях на сайт с помощь парсинга. Уже даже существую примеры на GitHub.
Вот один из них на node.js.


понедельник, 7 марта 2016 г.

Удобный хостинг сайтов html, css и js на google drive

В этой статье описано как располагать и хостить сайты на google drive. Если вам понадобиться использовать эту функцию в google drive много раз , процесс создания ссылки можно с легкость автоматизировать .
Код состоит из 6 строк на javascript. Конечно лучше было бы использовать регулярные выражения, но этом метод substring() мне показался проще.

вторник, 23 февраля 2016 г.

Вывод параметров в html с помощью res.render (Node.js)

Обычно с помощь res.render используют Jade файлы, но если вам не нужно писать много шаблонов, можно воcпользоваться обычным html.
Первое что нужно сделать это установить модуль ejs (это наш шаблонизатор).

1) Установка ejs –
npm install ejs
2) Инициализируем наш шаблонизатор в файле app.js как ejs
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');

3)Теперь вызываем метод res.render с файлом шаблоном и параметрами, которые мы хотим передать:
exports.index = function(req, res){
  res.render('index', { title: 'ejs' });
};

4)Теперь в нашем html файле выводим параметры которые мы передали

Welcome to <%= title %>!


И не забудьте объявить папку с статическими файлами где находятся файлы доступной для http запросов

app.use('/client', express.static(__dirname + '/client'));

пятница, 19 февраля 2016 г.

Генерация ruby кода из uml модели

Недавно нашел очень удобный и простой интернет сервис для генерации кода из uml модели.
На этом сайте также можно генерировать код для таких языков программирования как Php, Java, C++ и даже для Sql. В моем случае  мне нужно было генерировать код для Ruby. Ссылка на сервис.



Модульное тестирование в Ruby

Однажды во время учебы по одному из предметов было задание создать модульный тест для  двух методов calculate() и input().

Среди всех языков программирования мой выбор на Ruby со своей простотой и возможностями. Еще один плюс что не нужно устанавливать дополнительные фреймворки так и программы для модульного тестирования на ruby. Сам модуль тестирования встроен в ruby и подключается строкой

require "test/unit"


И так я написал класс и три метода которые я буду тестировать.
class SimpleNumber

  def initialize(x, acc)
  
  end

  def self.input(x,acc)
    @x = x.to_i
    @acc = acc.to_i
  end

  def self.calculate()
    ex =0 
    return @x if @x == -1
    
    for i in  1..@acc
    ex += (-1**i) * ((@x**i) / self.fact(i)) 
    end
    return ex
  end
  
  def self.fact(n)
  if n.to_i<= 1
    1
  else
    n.to_i * fact( n.to_i - 1 )
  end
  end

end
А вот это собственно и есть модуль где мы тестируем наши методы.
require_relative "simple_number"
require "test/unit"
 
class TestSimpleNumber < Test::Unit::TestCase

 
  def test_numbers
    
    SimpleNumber.input(10,6)
    assert_equal(-2863, SimpleNumber.calculate())
   
    SimpleNumber.input(10.0,6)
    assert_equal(-2863, SimpleNumber.calculate())
   
    SimpleNumber.input(100,100)
    assert_equal(-14154608721008799669375546308212763073288043, SimpleNumber.calculate())
   
  end
  
  def test_factorial
   
   assert_equal(1, SimpleNumber.fact(-1))
   assert_equal(120, SimpleNumber.fact(5.4))
   assert_equal(815915283247897734345611269596115894272000000000, SimpleNumber.fact(40))
  
  end
  
  def test_string 
   
   SimpleNumber.input("10",6)
   assert_equal(-2863, SimpleNumber.calculate())
   
   assert_equal(120, SimpleNumber.fact("5"))
    
  end
  

end
Я использовал лишь один метод для тестирования модуля это assert_equal() , этот метод сравнивает два значения и определяет правильно идет расчет в модуле или нет.
Вот результат выполнения данного тестирования:
Что бы прочитать полную документацию про модульное тестирование в Ruby перейдите по этой ссылке