tag:blogger.com,1999:blog-43393761769264919892024-03-12T19:51:17.711-07:00Just for FunEduard Horiachhttp://www.blogger.com/profile/18427931313130603364noreply@blogger.comBlogger13125tag:blogger.com,1999:blog-4339376176926491989.post-81967490366778355322017-01-07T05:12:00.000-08:002017-01-07T05:12:11.465-08:00 Парсинг книги в Safari books<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
Прежде чем показать как можно спарсить книгу с Safari books , просто предупрежу что это не очень правильно " не я такой , жизнь такая ".<br />
Если вам понравилась какая нибудь книга в Safari books и у вас нет средств ее купить , то в таком случае ее можно прочесть за 10 дней если получиться. Потому что такой триальный период на Safari books. Если же нет возможности прочесть книгу за 10 дней ее можно спарсить с помощью руби. Вот пример программы в 21 строку как это можно сделать.<br />
<br /></div>
<br />
<script src="https://gist.github.com/edlvj/9aab67185c17d623c55d6086fbc0ade8.js"></script><br /></div>
Eduard Horiachhttp://www.blogger.com/profile/18427931313130603364noreply@blogger.com0tag:blogger.com,1999:blog-4339376176926491989.post-30253482365456215222016-06-20T12:09:00.001-07:002016-06-20T12:09:24.718-07:00Кратко о SaSS<div dir="ltr" style="text-align: left;" trbidi="on">
Закончив курс Sass на <a href="https://www.codecademy.com/">codeacademy.</a><br />
Я решил сделать простое описание возможностей Sass с примерами.<br />
<br />
<b>Типы данных Sass</b><br />
<i>Strings</i><br />
<i>Lists</i><br />
<i>Maps</i><br />
<i>Colors</i><br />
<br />
<b>Логические операции</b><br />
<br />
<i>добавление +</i><br />
<i>вычитание -</i><br />
<i>умножение *</i><br />
<i>деление /</i><br />
<i>модуль от числа %.</i><br />
<br />
Пример:<br />
<i>$width: 250px;</i><br />
<i><br />
</i> <i>height: $width/6;</i><br />
<i>line-height: $width/6;</i><br />
<br />
<br />
<a name='more'></a><br /><br />
<b>Подключение библиотек</b><br />
<i>@import 'reset';</i><br />
<br />
<br />
<b>Вложенность (Nesting)</b><br />
<i><br /></i>
<i>nav {</i><br />
<i>ul {</i><br />
<i>margin: 0;</i><br />
<i>padding: 0;</i><br />
<i>list-style: none;</i><br />
<i>}</i><br />
<br />
<b>Наследование (Extend)</b><br />
<br />
<i>.message {</i><br />
<i>border: 1px solid #ccc;</i><br />
<i>padding: 10px;</i><br />
<i>color: #333;</i><br />
<i>}</i><br />
<i><br /></i>
<i>.success {</i><br />
<i>@extend .message;</i><br />
<i>border-color: green;</i><br />
<i>}</i><br />
<br />
<br />
<b>Применение Mixins</b><br />
<br />
<i>@mixin border-radius($radius) {</i><br />
<i>-webkit-border-radius: $radius;</i><br />
<i>-moz-border-radius: $radius;</i><br />
<i>-ms-border-radius: $radius;</i><br />
<i>border-radius: $radius;</i><br />
<i>}</i><br />
<i><br />
</i> <i>.box { @include border-radius(10px); }</i><br />
<br />
<b>Использование операторов</b><br />
<b><br />
</b> <b>Оператор each</b><br />
<i><br />
</i> <i>$list: (orange, purple, teal);</i><br />
<i><br />
</i> <i>@each $item in $list {</i><br />
<i>.#{$item} {</i><br />
<i>background: $item;</i><br />
<i>}</i><br />
<i>}</i><br />
<b><br />
</b> <b>Оператор for</b><br />
<br />
<i>$total: 10; //Number of .ray divs in our html</i><br />
<i>$step: 360deg / $total; //Used to compute the hue based on color-wheel</i><br />
<i><br />
</i> <i>.ray {</i><br />
<i>height: 30px;</i><br />
<i>}</i><br />
<i><br />
</i> <i>//Add your for-loop here:</i><br />
<i>@for $i from 1 through $total {</i><br />
<i>.ray:nth-child(#{$i}){</i><br />
<i>background: adjust-hue(blue, $i * $step);</i><br />
<i>}</i><br />
<i>}</i><br />
<br />
<b>Оператор if</b><br />
<i>@mixin deck($suite) {</i><br />
<i>@if($suite == hearts || $suite == spades){</i><br />
<i>color: blue;</i><br />
<i>}</i><br />
<i>@else-if($suite == clovers || $suite == diamonds){</i><br />
<i>color: red;</i><br />
<i>}</i><br />
<i>@else{</i><br />
<i>//some rule</i><br />
<i>}</i><br />
<i>}</i><br />
<br />
<br />
<br />
<br />
<br /></div>
Eduard Horiachhttp://www.blogger.com/profile/18427931313130603364noreply@blogger.com0tag:blogger.com,1999:blog-4339376176926491989.post-54322340044863289622016-06-19T04:47:00.001-07:002016-06-19T04:49:59.205-07:00Обработка xml с помощью AngularJS<div dir="ltr" style="text-align: left;" trbidi="on">
Для обработки xml в angularJs доступны 2 библиотеки на <a href="https://github.com/johngeorgewright/angular-xml" target="_blank">Angular-xml</a> и <a href="https://github.com/abdmob/x2js" target="_blank">x2js</a>. В этом примере я покажу как можно быстро вывести xml feed у себя на сайте. Пример нашего<a href="https://gist.github.com/edlvj/2e1af474368ce911b2d984b34d179713" target="_blank"> xml файла.</a><br />
<div>
<br />
<br /></div>
<div>
Давайте установим эти две библиотеки с помощью bower. Создадим bower.json и внесем эти данные.</div>
<br />
<script src="https://gist.github.com/edlvj/ce0610b55ecaf30ed815216c1548f3d3.js"></script><br />
<div>
<br /></div>
<div>
<br />
<a name='more'></a>И теперь введем в консоль bower install</div>
<div>
<br />
Создадим новый файл products.js и подключим наши модуль , а также создадим контроллер ProductCtrl через который мы будем обрабатывать наш xml файл.<br />
<br />
<script src="https://gist.github.com/edlvj/4668005b493536d17b0b7b0bde6d922d.js"></script><br />
<br />
Подключим все js библиотеки и выведем содержимое xml файла. Также я подключил стили <a href="http://materializecss.com/" target="_blank">materilize</a> для более красивого оформления.<br />
<br />
<script src="https://gist.github.com/edlvj/bdfe6f78ed9b779257d6874a748e4c0e.js"></script></div>
<div>
<br />
И вот наш результат :<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4qnai2fvlLJ3jO4KHw3yZV386dJ1YRYbFNXYiRkofaokh3Iphj2oDM70OMhQZBV5l8HpZtUQ2lqfarxU0jWpfG-6uBbMngqJGlDWXJgp9ZIN90iuN_KjKgjf5djsbOBuhcBduhspWW328/s1600/Screenshot_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="258" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4qnai2fvlLJ3jO4KHw3yZV386dJ1YRYbFNXYiRkofaokh3Iphj2oDM70OMhQZBV5l8HpZtUQ2lqfarxU0jWpfG-6uBbMngqJGlDWXJgp9ZIN90iuN_KjKgjf5djsbOBuhcBduhspWW328/s400/Screenshot_1.png" width="400" /></a></div>
<br /></div>
</div>
Eduard Horiachhttp://www.blogger.com/profile/18427931313130603364noreply@blogger.com0tag:blogger.com,1999:blog-4339376176926491989.post-77105113551509638862016-06-01T01:45:00.000-07:002016-06-19T04:51:27.351-07:00Используем Wit.ai для создания умного Messanger bot <div dir="ltr" style="text-align: left;" trbidi="on">
<br />
Если вы захотите создать бота для Messanger, у вас не будет удобных команд и клавиатур как в Телеграм. В таком случае вам прийдеться определять на заранее определенные сообщения созданные вручную ответы или воспользоваться <a href="http://wit.io/">wit.ai</a> для того что бы можно было определять сущность в контексте сообщений и создавать алгоритм разговора.<br />
<br />
Wit.ai это открытая и бесплатная платформа которая помогает создавать приложения для распознавания голоса и текста. С помощью этой платформ можно определить контекст или семантику введенного и сказанного предложения. Wit предоставляет API и Панель управления для общей настройки диалогов и сущностей.<br />
<br />
<a name='more'></a><br /><br />
После того как вы создадите аккаунт на Wit и новый проект. Вам будет доступна панель с разделом<br />
<b>Inbox</b> - сюда будут приходить запросы от ваших пользователей<br />
<b>Understanding</b> - раздел где определены сущности , а также способ их распознавания и ключевые слова по которым сущности могут определяться. В Wit каждый раз при новом запросе , ваш бот будет сам себя тренировать и добавлять ключевые слова к ваши сущностным.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIWbkeqsrazX7yrHRqiPvnm5ZwJhBVTSMhkOiaJq4XOG4RJQyCmiYlUNKaW2EjdqpOY0gjyn9qMs3VaOE3nsKvoDZ_pcpQ6ysbZMcQrQcUkxNRYskfPqNn-cDJM-Mb2eqbhDU6tn0ZkLWC/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIWbkeqsrazX7yrHRqiPvnm5ZwJhBVTSMhkOiaJq4XOG4RJQyCmiYlUNKaW2EjdqpOY0gjyn9qMs3VaOE3nsKvoDZ_pcpQ6ysbZMcQrQcUkxNRYskfPqNn-cDJM-Mb2eqbhDU6tn0ZkLWC/s400/1.png" width="400" /></a></div>
<b>Stories</b> - здесь хранятся наши алгоритмы разговоров, последовательность в которой будут вызваться сущности и наши функции. Чем больше stories тем лучше наш бот будет распознавать сущности.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYSsahGgoUB5_mAbkE9t87E3_vydEPTPTVYgSzF72iLAJlWgzn257gPkwPYVhucUC0KXCORC0RBYHvlM5nYvrxyAuZHXm9oL4GvVq5Q7TC3rTqTQlACalW88sMTOYNji5PlUQSPn5ZIMUA/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="175" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYSsahGgoUB5_mAbkE9t87E3_vydEPTPTVYgSzF72iLAJlWgzn257gPkwPYVhucUC0KXCORC0RBYHvlM5nYvrxyAuZHXm9oL4GvVq5Q7TC3rTqTQlACalW88sMTOYNji5PlUQSPn5ZIMUA/s400/2.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Создав cсущности и <span style="text-align: left;">stories можно приступать к разработке. В моем примере я буду использовать node.js.</span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="text-align: left;"><br />
</span></div>
<div class="separator" style="clear: both; text-align: left;">
Загрузим нужные нам npm пакеты в package.json и загрузим их с помощью npm install.</div>
<div class="separator" style="clear: both; text-align: left;">
<script src="https://gist.github.com/edlvj/49c2dd420e1ec01a4dd89b8833da2fb1.js"></script><br /></div>
<br />
<br />
Подключим нужные нам пакеты и теперь наш бот сможет отвечать на наши сообщения по заранее определенному алгоритму.<br />
<script src="https://gist.github.com/edlvj/698a35db5f753ef278f41b2922fc5106.js"></script><br />
<br />
Результат после того как я подключил API еще одно сервиса для поиска товаров и создания заказов.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiaMvijzWkO7ZvbVYwulCmorE5QY-MrIg872fFKpImmYpVjvMoayNEUwSaaHgY4M5AFvjL8Xo2qAj6RPvJDw-Jdpw86yUglkIMgHX9Fl_kaxk-3XHX9vnWB_D0lnIVje3NM0HbVfTThgAh/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiaMvijzWkO7ZvbVYwulCmorE5QY-MrIg872fFKpImmYpVjvMoayNEUwSaaHgY4M5AFvjL8Xo2qAj6RPvJDw-Jdpw86yUglkIMgHX9Fl_kaxk-3XHX9vnWB_D0lnIVje3NM0HbVfTThgAh/s400/3.png" width="400" /></a></div>
<br />
<br /></div>
Eduard Horiachhttp://www.blogger.com/profile/18427931313130603364noreply@blogger.com1tag:blogger.com,1999:blog-4339376176926491989.post-57143037515298224622016-05-29T04:30:00.003-07:002016-05-29T04:33:39.475-07:00Создаем API Wrapper в Node js<div dir="ltr" style="text-align: left;" trbidi="on">
Если вам нужно использовать API в NodeJS одно из сервисов и не хочется каждый раз писать один и тот же запрос только с разными параметрами много раз. В этом случае лучше написать отдельный пакет, как это сделать можно прочитать в этом посте.<br />
Для примера мы возьмем <a href="http://www.eway.in.ua/api" target="_blank">EasyWay API</a>. Это сервис для отслеживания актуальных данных о маршрутах и маршрутках доступный в нескольких странах.<br />
<br />
Писать наш пакет буду в c9.io. Но вы можете выбрать любой другой вариант в котором есть возможность создавать и выполнять NodeJS проекты.<br />
<br />
Создадим package.json и заполним нужными данными.<br />
<br />
<i>{</i><br />
<i> "name": "node_eway",</i><br />
<i> "version": "0.0.1",</i><br />
<i> "description": "Api Wraper for Eway.",</i><br />
<i> "main": "index.js",</i><br />
<i> "repository": "",</i><br />
<i> "author": "Edik Goryach <gorachedik96@gmail.com>",</i><br />
<i> "dependencies": {</i><br />
<i> "urlencode": "latest",</i><br />
<i> "request": "latest"</i><br />
<i> }</i><br />
<i>}</i><br />
<i><br />
</i> Теперь подключим наши пакеты и создадим конструктор для нашего обьекта в index.js<br />
<br />
<i>var request = require('request');</i><br />
<i>var urlencode = require('urlencode');</i><br />
<i><br />
</i> <i>const APIURL = 'https://api.eway.in.ua/?';</i><br />
<i><br />
</i> <i>//создание объекта</i><br />
<i>var Eway = function (login, pass) {</i><br />
<i>this.login = login;</i><br />
<i>this.pass = pass;</i><br />
<i>} </i><br />
<br />
Напишем первый метод для нашего объекта:<br />
<br />
<i>Eway.prototype.get = function (method, params, callback){</i><br />
<i> request({</i><br />
<i> method: 'GET',</i><br />
<i> url: APIURL + 'login=' + this.login +'&password=' + this.pass + '&function=' + method +'&' + params,</i><br />
<i> headers: {</i><br />
<i> 'Content-Type': 'application/json',</i><br />
<i> }</i><br />
<i>}, function (err, response, body) {</i><br />
<i> if (err) {</i><br />
<i> callback('err');</i><br />
<i> return console.error('Error:', err);</i><br />
<i> }</i><br />
<i><br />
</i> <i> callback(JSON.parse(body))</i><br />
<i>});</i><br />
<i>}</i><br />
<br />
Создадим test.js и попробуем вызвать конструктор и наш метод<br />
<i>//подключаем index.js</i><br />
<i>var Eway = require('./index.js');</i><br />
<i><br /></i>
<i>var EwayLib = new Lafka('Your login', 'Your pass');</i><br />
<i><br /></i>
<i>EwayLib.get('cities.GetRoutesList', 'city=lviv', function(data) {</i><br />
<i> console.log(data);</i><br />
<i> return data;</i><br />
<i>});</i><br />
<i><br /></i>
Вот таким способом можно организовать обертку для Api с помощью callback.</div>
Eduard Horiachhttp://www.blogger.com/profile/18427931313130603364noreply@blogger.com0tag:blogger.com,1999:blog-4339376176926491989.post-5853385292150565372016-05-22T08:59:00.002-07:002016-06-19T04:51:07.931-07:00Deep Learning для чат ботов (Часть 1)<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
Чат ботов также называют диалоговыми агентами или диалоговые системами, сейчас это очень горячая тема. Microsoft сделала <a href="http://www.bloomberg.com/features/2016-microsoft-future-ai-chatbots/" target="_blank">большую ставку</a> на чат ботов, и после этого такие компании как <span style="background-color: white; color: #404040; font-family: "source sans pro" , "arial" , sans-serif; font-size: 16px; line-height: 24px;">Facebook (M), Apple (Siri), Google, WeChat, and Slack</span>. Это новая волна стартапов попытается изменить для пользователей взаимодействие с сервисами с помощью построения пользовательских приложений подобных <a href="https://operator.com/" target="_blank">Operator</a> и <a href="http://x.ai/">x.ai</a>, бот платформами как <a href="https://chatfuel.com/" target="_blank">Chatfuel</a>, и бот библиотеками как <a href="http://howdy.ai/botkit/">Howdy’s Botkit</a>. Также Microsoft недавно предоставила свой Бот фреймворк.<br />
<br />
Многие компании хотят разработать бота который может поддерживать естественный разговор ничем не отличающийся от человеческого, и это требует использование Нейронных сетей и техник машиного обучения для того что бы это было возможно. Но со всей этой шумихой вокруг ИИ иногда трудно различить правду от вымысла.<br />
<br />
В этих частях я хочу рассказать о некоторых методах Машинного обучения которые используют для построения диалоговых агентов, начиная от текущей ситуации, что возможно , и что остается почти невозможным пока что на данный момент. Этот пост предоставит вступление, и даст информацию о реализации идеи в следующих постах.<br />
<br />
СИСТЕМАТИКА МОДЕЛЕЙ<br />
<br />
Поисково ориентированная vs. Генеративная модель<br />
<br />
Поисково ориентированную модель (проще) используют как хранилище стандартных ответов часть которых эвристика которая выбирает ответ на основе введенного текста и его контекста. Эвристикой может быть простое выражение на основе некоторых заданных правил, или как совокупность классификаторов Машиного Обучения. Эти системы не генерируют новый текст, они только выбирают ответ из определенных значений.<br />
<br />
Генеративная модель (сложнее) не полагается на предопределенные ответы. Эта модель генерирует новые ответы с нуля. Генеративная модель обычного базируется на методах Машинного Обучения, но вместо перевода из одного языка к другому, она переводит из ввода в вывод(ответ).<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfW_SvwyvrZB-lgiXhMuSh4lPwLyEj-Sf_HMdYZ6-lD3HgbagNu4StcVPbSVAV2sqUVDMLjQUJs1Jq7G1RR23AuTyGn6mUKXtbRUS_Zi5Eour1XjgboFlflrltHtrsJhhoIDcxy_Me82Rk/s1600/nct-seq2seq.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="96" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfW_SvwyvrZB-lgiXhMuSh4lPwLyEj-Sf_HMdYZ6-lD3HgbagNu4StcVPbSVAV2sqUVDMLjQUJs1Jq7G1RR23AuTyGn6mUKXtbRUS_Zi5Eour1XjgboFlflrltHtrsJhhoIDcxy_Me82Rk/s320/nct-seq2seq.png" width="320" /></a></div>
<br />
<br />
<br />
Обе модели имеют очевидные плюсы и минусы. Благодаря хранилищу вручную созданных ответов , поисковая модель не будет делать грамматических ошибок. Однако они могут быть неспособны справляться с неизвестными случаями для которых нет подходящих предопределенных ответов. По некоторым причинам , эти модели не могут ссылаться на пред идущие контекстные информационные сущности такие как имена упомянутые раньше в диалоге. Генеративная модель "умнее". Она может ссылаться назад к сущностям при вводе и давать понятие того о чем говорят люди. Хотя , эта модель сложно подается обучению, она вероятней всего будет делать грамматические ошибки(особенно при длинным предложениях ), и как правило нуждается в большом количестве тренировочной информации.<br />
<br />
<a name='more'></a><br /><br />
Методы Машиного обучения могут быть использованы для обоих поисково ориентированной и генеративной модели. Но исследования движутся в сторону генеративной модели. Архитектура Машинного обучения подобна <a href="http://arxiv.org/abs/1409.3215" target="_blank">Последовательности в Последовательности</a> которая уникально подходит для генерации текста и исследователи надеются добиться быстрого прогресса в этой области. Однако, мы еще на ранних стадиях построения генеративной модели которые работают уже достаточно хорошо. Системы производства наше время подобны к поисково ориентированной модели.<br />
<br />
Длинные vs. короткие Диалоги<br />
<br />
Длинные диалоги более сложны для автоматизации. Одна из сторон из спектра это Короткие тестовые разговоры (легче) где цель это создать один ответ на один ввод . Для примера, вы должны получить конкретный вопрос от пользователя и ответить с соответствующим ответом.<br />
При этом используя длинные диалоги (сложнее) когда вам приходиться идти через множество слов и нужно хранить суть того что было сказано. Пользователи поддерживают диалоги обычно длинными диалогами с различными вопросами.<br />
<br />
Открытая область vs. Закрытая область<br />
В открытой области (сложнее) установка пользователем разговора может быть начата где угодно. При этом у нас не будет четкой определенной цели и намерения. Диалоги в социальных сайтах таких как Twitter and Reddit обычно имеют Открытую область - они могут продолжаться в любом из направлений. Существует Бесконечное число тем и фактов которые определяют количество мировых знаний которые являются обязательными для создания разумных ответов , делая это сложной проблемой.В Закрытой области(легче) установить пространство возможных вводов и выводов являющими отчасти ограниченными потому что система пытается достигнуть определенных целей. Техническая поддержка пользователей или Торговые ассистенты пример проблем в закрытой области. Эти системы не нуждаются в способности говорить о политике, им просто нужно как можно более эффективно выполнять свою конкретную задачу. Конечно, пользователи могут продолжать начинать разговор в любом месте , но системе не нужно обрабатывать все эти случаи - и пользователи предлагают что об этом.<br />
<br />
ОБЩИЕ ПРОБЛЕМЫ<br />
Есть некоторые очевидные и не столь очевидные проблемы при создании диалоговых агентов, большинство из которых являются активными в области исследований.<br />
<br />
ВКЛЮЧЕНИЕ КОНТЕКСТА<br />
<br />
Давая умные ответы системе нужно объединять как <i>языковой контекст</i> так и <i>физический контекст</i>. В длинных разговорах люди могут следит за тем что они написали и за тем какая информация была получена. Это пример лингвистического контекста. Большинство подходов это встраивание диалога в вектор, но делая это с длинными диалогами возникают сложности.<br />
Эксперименты в <a href="http://arxiv.org/abs/1507.04808" target="_blank">построении непрерывной цепи диалоговых систем используя генеративно иерархической нейронной модели</a> и <a href="http://arxiv.org/abs/1510.08565" target="_blank">Предупреждения для Нейронных сетей Диалоговых Моделей</a> продолжают эту тему. Также, возможно, потребуется включить другие виды контекстных данных, такие как дата и время, месторасположение или информация о пользователе.<br />
<br />
ОПРЕДЕЛЕНИЕ ЛИЧНОСТИ<br />
<br />
Когда создается ответ агент должен предоставить последовательный ответ для семантической индентификации ввода. Для примера , когда вы получаете ответ на ответ "How old are you?" и "What is your age". Это может звучать просто, но включение такого фиксированного знания или "личности" в модели является одной из проблем исследовании. Много систем изучают как создавать лингвистично правдоподобные ответы, но у них нет навыков для создания семантических последовательностей. Обычно это бывает потому что они обучены на большом количестве данных полученной от разных пользователей. Модели подобны данной в <a href="http://a%20persona-based%20neural%20conversation%20model/" target="_blank">Личностно базовой нейронной диалоговой системы</a> создают первые шаги на пути явного моделирования личности.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6vCzrP_n_3BhSQ8tuoswoHrkUEIcL4TVaZIBNFZdUSbFVk0ndmUte0y88gd11ubsjPPYwdq33e6QE5jF7PVF9tvOVe_4osk85JQH4ih1QXuy0TaUcUWcNXd71hUVSBnNM0dEuPS-eU4HP/s1600/Screen-Shot-2016-04-04-at-6.36.59-PM-300x95.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6vCzrP_n_3BhSQ8tuoswoHrkUEIcL4TVaZIBNFZdUSbFVk0ndmUte0y88gd11ubsjPPYwdq33e6QE5jF7PVF9tvOVe_4osk85JQH4ih1QXuy0TaUcUWcNXd71hUVSBnNM0dEuPS-eU4HP/s1600/Screen-Shot-2016-04-04-at-6.36.59-PM-300x95.png" /></a></div>
<br />
ОПРЕДЕЛЕНИЕ МОДЕЛЕЙ<br />
<br />
Идеальный путь для оценивания диалогового агента заключается в измерении того? выполняет ли он свою задачу, например решил ли проблему клиентов, в данном диалоге. Но такие метки дорогостоящие для получения информации поскольку они требуют человеческого суждения и оценки. Иногда там нет четко определенной цели, как в случае с моделями открытой области.<br />
Общие показатели, такие как <a href="https://en.wikipedia.org/wiki/BLEU" target="_blank">BLEU</a>, которые используются для машинного перевода и основаны на соответствия текста не очень хорошо подходят, потому что разумные ответы могут содержать совершенно разные слова или фразы. На самом деле, в том, <a href="http://arxiv.org/abs/1603.08023" target="_blank">как не нужно оценивать вашу диалоговую систему: эмпирическое исследование по оценке неконтролируемой Метрики для диалог</a>а исследователей Generation Response считают, что ни один из наиболее часто используемых показателей на самом дело тоже контролируются человеческим суждением.<br />
<br />
ПОНЯТИЯ И РАЗНООБРАЗИЕ<br />
<br />
Общей проблемой генеративных систем является то, что они, как правило, производят общие ответы, такие как "Это здорово!" Или "я не знаю", для работы для большого количества входных случаев. На ранних версиях Google Smart , как правило, отвечал: "Я люблю тебя" это могло быть что угодно. Это отчасти является результатом того, как обучаются эти системы, как с точки зрения данных, так и с точки зрения фактических учебных целей / алгоритмов.<br />
<a href="http://arxiv.org/abs/1510.03055" target="_blank">Некоторые исследователи пытались искусственно поощрять разнообразие с помощью различных целевых функций.</a> Тем не менее, люди, как правило, производят ответы, которые являются специфическими для ввода и несут некоторую семантику. Поскольку генеративные системы (и в частности, системы открытой области) не обучены иметь конкретные мысли и намерения у них нет такого рода разнообразия.<br />
<br />
Насколько хорошо это действительно работает?<br />
<br />
Принимая во внимание все острые края исследования в данный момент, где мы сейчас, и насколько хорошо эти системы на самом деле работают? Давайте снова рассмотрим нашу систематику. Для Поисково ориентированной модели с открытой областью это очевидно не возможно потому что вы никогда не наберете вручную всех заготовленных ответов покрывающих все возможные случаи в разговоре. Генеративно ориентированная модель<br />
с открытой областью это уже почти ИИ потому что нужно покрывать все сценарии в беседе.Мы еще далеки от этого (но исследователи уже движутся в этом направлении).<br />
<br />
СПИСОК ДЛЯ ПРОЧТЕНИЯ<br />
<br />
<ul style="text-align: left;">
<li>Neural Responding Machine for Short-Text Conversation (2015-03)</li>
<li>A Neural Conversational Model (2015-06)</li>
<li>A Neural Network Approach to Context-Sensitive Generation of Conversational Responses (2015-06)</li>
<li>The Ubuntu Dialogue Corpus: A Large Dataset for Research in Unstructured Multi-Turn Dialogue Systems (2015-06)</li>
<li>Building End-To-End Dialogue Systems Using Generative Hierarchical Neural Network Models (2015-07)</li>
<li>A Diversity-Promoting Objective Function for Neural Conversation Models (2015-10)</li>
<li>Attention with Intention for a Neural Network Conversation Model (2015-10)</li>
<li>Improved Deep Learning Baselines for Ubuntu Corpus Dialogs (2015-10)</li>
<li>A Survey of Available Corpora for Building Data-Driven Dialogue Systems (2015-12)</li>
<li>Incorporating Copying Mechanism in Sequence-to-Sequence Learning (2016-03)</li>
<li>A Persona-Based Neural Conversation Model (2016-03)</li>
<li>How NOT To Evaluate Your Dialogue System: An Empirical Study of Unsupervised Evaluation Metrics for Dialogue Response Generation (2016-03)</li>
</ul>
<br />
<br />
Оригинальная статья : <a href="http://www.wildml.com/2016/04/deep-learning-for-chatbots-part-1-introduction/">http://www.wildml.com/2016/04/deep-learning-for-chatbots-part-1-introduction/</a><br />
<br /></div>
Eduard Horiachhttp://www.blogger.com/profile/18427931313130603364noreply@blogger.com0tag:blogger.com,1999:blog-4339376176926491989.post-60672378791482341262016-03-27T13:53:00.000-07:002016-06-19T04:50:58.198-07:00Руководство по Firebase: создаем приложения с помощью Firebase<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSxHgEtZf3Xm1rKFF_b4IMT4zyHxORtMpTXUKIpifb9WEihaSWfx5dTVi0sTYcDveU0Ff9ZbHXWumC5-pgalZFwXmRi4wTs5CgmMqvRgw548BmQMme4NTLINdykS-ANoATPFEXnhG4Oxsm/s1600/ayzT4WB.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="179" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSxHgEtZf3Xm1rKFF_b4IMT4zyHxORtMpTXUKIpifb9WEihaSWfx5dTVi0sTYcDveU0Ff9ZbHXWumC5-pgalZFwXmRi4wTs5CgmMqvRgw548BmQMme4NTLINdykS-ANoATPFEXnhG4Oxsm/s320/ayzT4WB.jpg" width="320" /></a></div>
<br />
Firebase это базы данных в режиме реального времени с которой вы можете передавать данные непосредственно с клиента. Когда вы сохраняете JSON данные на Firebase, изменения отправляются мгновенно для всех клиентов, веб и мобильных устройств, который запросил их. С встроенным статическим файл хостингом, пользовательским управлением и правилами безопасности, Firebase поможет вам построить современные приложения быстрее, чем когда-либо.<br />
<br />
Это руководство поможет вам понять некоторые из ключевых концепций Firebase и его API. Мы создадим простой инструмент в режиме реального времени для аналитики , который будет отображать метрики нашего сайта и то что наши посетители просматривали в реальном времени. Весь наш код на JavaScript будет работать только в веб-браузере, но Firebase поддерживает множество других языков и сред, в том числе Node.js, Objective-C (IOS / OS X), Java (Android). Она также обеспечивает REST API, так что вы можете читать и записывать данные с любого сервера, даже если у вас нет официальной поддержки SDK. Мы будем использовать JQuery для обновления DOM в нашей аналитической инструментальной панели.<br />
<br />
<a name='more'></a><br /><br />
<b>Концепции Firebase</b><br />
<br />
Firebase использует модель, управляемую событиями, чтобы уведомить нас об изменениях в наших данных, а также предоставить данные, когда они впервые приходят. Вы должны быть знакомы с событийно - ориентированным программированием, если вы использовали Node.js раньше, мы еще раз рассмотрим это , поскольку эта методология существенно отличается от традиционной модели запрос-ответ(<span style="background-color: white; color: #4d4d57; font-family: "open sans" , "century gothic"; font-size: 16px; line-height: 26px;">request-reply</span>) , которую большинство приложений используют в наше время. В модели запрос-ответ, ваше приложение отправляет данные за пределы на ваш сервер. Сервер может взаимодействовать с SQL (или NoSQL) базами данных и, возможно, даже внешним API, прежде чем ответить на ваш клиент с запрошенными данными . После того, как ответ получен, обмен на этом заканчиваеться. Клиентское приложение всегда знает, когда он будет получать новые данные, потому что оно всегда должен явно запросить его, прежде чем что-либо будет получено.<br />
<br />
Немного о Событийно-ориентированном программировании<br />
Когда мы используем события, чтобы получить наши данные, наши обработчики не просто вызываются один раз после ответа сервера. Вместо этого они могут быть вызваны несколько раз, чтобы отправить нам данные в первый раз, а затем каждый раз, когда изменяються наши данные. Давайте посмотрим на упрощенный пример:<br />
<br />
<pre>function logVisitorCount (snapshot) {
console.log('There are currently ', snapshot.val(), ' visitors on the site');
}
totalVisitors.on('value', logVisitorCount);
</pre>
<br />
<br />
<i>totalVisitors</i> представляет собой ссылку Firebase, также слушатель для события для <i>'value' </i>используя метод<i> on</i> для передачи обратного вызова(callback) <i>logVisitorCount</i>.<br />
API Firebase JavaScript будет вызывать нашу функцию <i>logVisitorCount</i> каждый раз, когда <i>'value' </i>расположенное в <i>totalVisitors </i>будет изменяться<i> </i>.<br />
В своей сути, БД Firebase это просто большой объект в формате JSON. Где нет таблиц. Где нет даже аналогов коллекций и документов из MongoDB.<br />
Вы можете организовать данные как вам угодно, изменять схему в любое время, и делать вложенные объекты и значения так глубоко, как вы хотите. Это становится чрезвычайно ценно, когда вы моделируете приложения. Вот схема которую мы будем использовать для нашего приложения аналитики, в том числе данные выборки:<br />
<br />
<pre>{
"totalVisitors": 5,
"activeVisitors": {
"-IKo28nwJLH0Nc5XeFmj": {
"path": "/",
"arrivedAt": 1413392152630,
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 </pre>
<pre>(KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36"
}
},
"pastVisitors": {
"-INOQPH-aV_psbk3ZXEX": {
"path": "/",
"arrivedAt": 1413392151219,
"leftAt": 1413392155419,
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36</pre>
<pre>(KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36"
}
}
}
</pre>
Вы заметили, что значения ключей для <i>activeVisitors</i> и pastVisitors имеют длинные рандомизированные имена.<br />
Это потому, что Firebase не может использовать традиционные массивы с числовыми ключами или же мы би создали колизии<br />
отменим присвоение. Взгляните на простой пример:<br />
<pre>//ref = ['Foo'];
ref.push ('bar');</pre>
В то же время, другой клиент вызывает<br />
<pre>ref.push('baz');
</pre>
Что случилось? Если мы будем использовать традиционные массивы JavaScript с помощью числовых ключей,<br />
оба клиенты будут пытаются записать данные в ref[1]. Тот, кто получает доступ к серверу последним тот перезапишет данные,<br />
полученные ранее. Мы, же конечно, не хотим этого. Вместо того чтобы использовать массивы, коллекции упорядоченных данных в<br />
Firebase представлены объектами с автоматически сгенерированных ключей, которые выглядят как "-IKo28nwJLH0Nc5XeFmj".<br />
Эти ключи генерируются автоматически и кодируют как временную метку так и уникальный ID клиента.<br />
Таким образом, несколько клиентов могут записывать данные одновременно с коллизиями и<br />
ваши данные будут по-прежнему будут возвращены в порядке.<br />
<br />
<b>Начало работы</b><br />
Что начать работать с Firebase нужно создать учетную запись. План "Hacker" на сайте бесплатен для 50 подключений к бд, 100 Мб для хранения и 5 Гб для трафика. При создании первой базы данных, вам будет предоставлен Forge, это веб-интерфейс Firebase для просмотра и редактирования данных, а также изменения параметров базы данных.<br />
<br />
Мы собираемся создать два основных компонента: код для передачи наших данных аналитики к Firebase и простой панели управления, чтобы потом прочитать наши данные. Наш проект будет выглядеть следующим образом:<br />
<pre>analytics.js
dashboard.js
dashboard.html
sample-page/
index.html
</pre>
<br />
<b>Запись в Firebase</b><br />
<br />
Когда пользователь открывает нашу страницу, мы хотим, сохранить время посещения, узнать адрес откуда он пришел, и user agent в нашем списке активных посетителей.<br />
Нам нужно создать ссылку на нашу коллекцию <i>activeusers</i>, прежде чем мы сможем сохранить их. Чтобы создать новую Firebase ссылку, мы сделаем следующее:<br />
<br />
<pre>var analytics = new Firebase('https://airpair-analytics-tutorial.firebaseio.com/');</pre>
<br />
Вы можете скопировать и вставить путь непосредственно из Firebase Forge.<br />
Мы могли бы создать ссылку непосредственно для наших <i>activeusers</i>, как здесь:<br />
<br />
<pre>var activeUsers = new Firebase('https://airpair-analytics-tutorial.firebaseio.com/activeUsers');</pre>
<br />
Так как мы хотим записывать данные и других местах в нашей базе, <br />
мы будем использовать метод child вместо того, чтобы сохранить нашу корневую ссылку, но и ссылки на данные <i>activeusers</i> :<br />
<pre>var analytics = new Firebase('https://airpair-analytics-tutorial.firebaseio.com/');
var activeVisitors = analytics.child('activeVisitors');
</pre>
<br />
Теперь мы можем отправлять наши данные о пользователях, когда они приходят, используя метод push:<br />
<br />
<pre>activeVisitors.push({
path: window.location.pathname,
arrivedAt: Firebase.ServerValue.TIMESTAMP,
userAgent: navigator.userAgent
});
</pre>
<br />
Вы заметили, что вместо Date.now(), мы используем Firebase.ServerValue.TIMESTAMP в arrivedAt для создания метки времени.<br />
Это значение будет заменено Firebase, когда он получает данные с меткой времени с сервера.<br />
Таким образом, даже если часы всех наших клиентов установлены неправильно, наши данные будут всегда <br />
находиться в правильном порядке.<br />
<br />
<b>Установка analytics.js</b><br />
<br />
Переход к sample-page/index.html, давайте добавим теги сценария мы должны записать данные в Firebase до конца тега <body> нашего документа:<br />
<pre></pre>
<br />
</body><br />
<br />
<script src="https://cdn.firebase.com/js/client/1.1.1/firebase.js"></script><br />
<script src="../analytics.js"></script><br />
<br />
Теперь мы можем открыть нашу страницу в браузере рядом с Firebase Forge и смотреть на данные посетителей которые будут записаны на Firebase каждый раз мы обновляем страницу.<br />
<b><br />
</b> <b>Чтение из Firebase</b><br />
Теперь, когда мы сделали скрипт аналитики , который можна встраивать на нашем сайте, мы можем начать отображать некоторые данные, которые мы собрали в реальном времени. Сначала мы создадим наш файл dashboard.html с некоторыми пустыми элементами, которые мы можем начать заполнять с нашими данными. Наш HTML будет выглядеть следующим образом:<br />
<br />
<br />
<section><br />
Total Visitors: <span id="total-visitors"></span><br />
</section><br />
<section><br />
Active Visitors<br />
<ul id="active-visitors"></ul><br />
</section><br />
<section><br />
Past Visitors<br />
<ul id="past-visitors"></ul><br />
</section><br />
<script src="https://cdn.firebase.com/js/client/1.1.1/firebase.js"></script><br />
<script src="https://code.jquery.com/jquery-2.1.1.js"></script><br />
<script src="./dashboard.js"></script><br />
<br />
Обновление значений<br />
Привязка данных(data binding) как в Angular или Backbone тоже здесь используеться.<br />
Для простоты, мы будем управлять нашими элементами DOM вручную в этом руководстве. Мы используем JQuery для удобства. Сейчас мы будем работать в dashboard.js .<br />
<br />
Давайте сначала обновим общее число посетителей , что бы представляло только одно значение.<br />
$(document).on('ready', function () {<br />
var $totalVisitors = $('#total-visitors');<br />
analytics.child('totalVisitors').on('value', function (snapshot) {<br />
$totalVisitors.text(snapshot.val());<br />
});<br />
});<br />
<br />
<b>Работа с запросами</b><br />
Если вы привыкли к SQL, вы можете быть удивлены, как здесь фильтруются данные. У вас нет такой же гибкости, что и при работе с SQL, где есть условия выборки , но Firebase предусматривает несколько методов для ограничения получаемых данных. Мы рассмотрим их очень кратко, но знайте, что запросы в Firebase может быть довольно мощным, если вы уммете их использовать .<br />
<br />
Даже если наш сайт не особенно популярен, мы, вероятно, не хотим, чтобы отображался каждый последний визит ,когда мы открываем нашу панель. Если вы смотрели на ваши данные просмотров в Forge, вы заметите, что он вывел данные от новых до последних, даже если мы отображаем данные в обратном порядке на нашей приборной панели. Давайте покажем только 3 последних визитов в нашем массиве посещений.<br />
<br />
var pastVisitors = analytics.child('pastVisitors').endAt().limit(3);<br />
pastVisitors.on('child_added', function (snapshot) {<br />
// ...<br />
});<br />
<br />
Вы заметите, что для этого требуется лишь небольшое изменение в одной строке кода.<br />
Мы вызовем,<i> endAt ()</i> на что бы сообщить Firebase что мы хотим выполнить наш запрос в конце нашего набора данных, затем вызовем limit(3), чтобы ограничить наш запрос до 3 записей.<br />
<br />
<br /></div>
Eduard Horiachhttp://www.blogger.com/profile/18427931313130603364noreply@blogger.com2tag:blogger.com,1999:blog-4339376176926491989.post-54514533416735866352016-03-24T14:19:00.002-07:002016-06-19T04:50:45.936-07:00Представление Графовых баз данных (Перевод)<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt;">
<br /></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: right;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 14px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br />
</span></div>
<div style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;">
<i>Перевод 12 главы книги NoSQL for Mere Mortals by Dan Sullivan.</i><br />
<br /></div>
</div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 14px; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Темы затроннутые в этой главе</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-indent: 36pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 14px; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Критерии Конструирования для Графовых баз данных</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-indent: 36pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 14px; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Графы и Сетевые модели</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-indent: 36pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 14px; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Преимущества Графовых Баз Данных</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 14px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">В этой главе, вы изучите о специализированных типах баз данных ,такие как графовые базы данных. Графовая БД основана на одном из разделов математики, этот раздел известен как теория графов. Технические методы в этом разделе математики очень полезны для анализа соединений и связей между сущностями. Дальше мы увидим что эти методы весьма полезны во многих областях управления данными.</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Что такое Граф?</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Граф представляет собой математический объект, который состоит из двух частей: вершин и ребер.Вершины иногда называют узлами; тем не менее, в этой главе мы избегаем использования этого термина, чтобы предотвратить путаницу, поскольку термин узел также относиться к кластерам серверов.</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Вершины представляют собой вещи. Это может быть что угодно , включая:</span></div>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: white; color: #252525; font-family: Arial; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Города</span></div>
</li>
<li dir="ltr" style="background-color: white; color: #252525; font-family: Arial; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Сотрудников компании</span></div>
</li>
<li dir="ltr" style="background-color: white; color: #252525; font-family: Arial; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Белки</span></div>
</li>
<li dir="ltr" style="background-color: white; color: #252525; font-family: Arial; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Электрические цепи</span></div>
</li>
<li dir="ltr" style="background-color: white; color: #252525; font-family: Arial; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Соединения в водопроводе</span></div>
</li>
<li dir="ltr" style="background-color: white; color: #252525; font-family: Arial; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Организмы в экосистеме</span></div>
</li>
<li dir="ltr" style="background-color: white; color: #252525; font-family: Arial; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Железнодорожные станции</span></div>
</li>
</ul>
<b style="font-weight: normal;"></b><br />
<a name='more'></a><b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Одна вещь, которая является общей для всех этих вещей в том, что они имеют отношения к другим вещам, часто в той же категории. Города связаны с другими городами дорогами. Сотрудники работают с другими сотрудниками.Белки взаимодействуют с другими белками.Электрические цепи связаны с другими электрическими цепями. Места соединения водопроводе подключены к другим соединениям. Организмы в экосистемах являются хищниками и добычей для других организмов. Железнодорожные станции связанны с другими станциями по железнодорожным путям.</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Связи или соединенния между объектами представлены ребрами.Это может показаться очевидным представлением для некоторых отношений, таких как дороги и железнодорожные пути между городами. Но, это так же может быть менее очевидным и в других случаях, на напримере белков и организмов в экосистеме. Гибкая природа вершин и ребер делает их идеальнимы для моделирования абстрактных и конкретных отношений между вещами.</span></div>
<b style="font-weight: normal;"><br />
<br />
<br />
<br />
<br />
<br />
</b><br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">На рисунке 12.1 показан простой граф с двумя вершинами и одним ребром.</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><img alt="trs_1.png" height="136" src="https://lh3.googleusercontent.com/yygtYkyKwiNjBxmjaI35VbRaSY3ZHS4UW38BHs8BRKTjm0MZKkim0Tdx_1ROtRAShR2ljTYYwqAH1iMI7ZBZKKWKDAo0KEVfVHsu3Gk4fBdmUwjBqmVWFi588wr0gSYprIR11_bR" style="-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);" width="550" /></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Рисунок 12.1 Простой граф с двумя вершинами и одним ребром.</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Некоторые отношения имеют долгосрочный характер (например, дороги между городами), в то время как другие являются краткосрочными (например, человек, передавающий бактериальную инфекцию другому человеку). Кроме того, некоторые из них физически очевидны, тогда как другие не имеют физического экземпляра.Например вы може увидеть водопровод, но отношение менеджер-сотрудник в бизнесе не имеет никакого физического представления.</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Графы и и сетевое моделирование</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">На первый взгляд, очевидно, что графы хорошо подходят для моделирования сетей.</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Тем не менее, может показаться, что сети являются специализированными системами и не обобщены в широком кругу проблем; это предположение неверно. Если вы думаете о сетях как о вещах и отношениям между этими вещами, вы увидете сети вокруг. Вот несколько примеров которые могут отобразить широту проблем, которые вы можете решать с помощью сетевого моделирования в виде графов.</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Моделирование географических местоположений</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Автомобильные дороги и железные пути имеют два различных свойства, которые интересуют нас: они предназначены, чтобы связьвать географические местоположения, и длиные промежутоки времени.</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Географические местоположения моделируются как вершины.Это могут быть города, поселки или пересечения автомобильных дорог.Вершины имеют свойства, такие как имена, широты и долготы.В случае больших и малых городов, они иммеют население и размер который измеряется в квадратных милях или километрах. Дороги и железные пути моделируются как ребера между двумя вершинами. Они также имеют свойства, это длина, год постройки дороги, и максимальная скорость.</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Автомобильные дороги можно смоделировать двумя способами. Дорога может быть одним ребром между двумя городами, в этом случае она моделирует дорожное движение в обоих направлениях. В качестве альтернативы, графическое представление может использовать два ребра, один для представления в каждом направлении (например, с востока на запад и с запада на восток). Какой же "правильный путь", для моделирования автодорог? Это зависит от многих вещей.</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Если ваша цель состоит в том, чтобы смоделировать расстояние и приблизительное время поездки между городами, то одного ребра будет достаточно. Если же вы заинтересованы в более подробном описании автомобильных дорог, таких как направление, количество полос, текущих строительных площадок и мест дорожно-транспортных происшествий, использование двух ребер является лучшим вариантом для этой задачи.При использовании двух ребер между городами, мы можем указать, в каком направлении движеться дорожный трафик. Для этого используеться тип ребра, известнный как направленное ребро (рис 12.2).</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><img alt="trs_2.png" height="274" src="https://lh5.googleusercontent.com/6kj9PXikt2tAkLVdDEIjW1MWT-75MaPksUlrDh2YUt64RQ6dpZHtRXVfbxFiIoCJ6At24AXbRhYRdi56vP7Dn5sL_rtKzOkl6s5vYzjgsDEMsU9lG7Hm67SRQG7x4j-od7nYbqf9" style="-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);" width="558" /></span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Рисунок 12.2 Автомобильные дороги между городами смоделированны как вершины и ребра.</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Моделирование инфекционных заболеваний</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Инфекционные заболевания могут передаваться от человека к человеку. Например, человек кашляет в руку после чего бактерии и вирусы оставляют на его руке.Когда этот человек пожимает руку кого-то другого, то есть шанс, что вирус передается другому человеку, который со временем может стать зараженными. Распространение инфекционных заболеваний легко моделируется с помощью графов.</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Вершины представляют собой людей, в то время как ребра представляют собой взаимодействие между людьми, рукопожатие или стояние в непосредственной близости.</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Обе вершины и ребра имеют свойства, которые помогают представлять путь распространения болезни (рис 12.3).</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><img alt="Screenshot_1.png" height="476" src="https://lh5.googleusercontent.com/ex4ydTECU4ILKYRLRL58GsdNkVXQfheK-Z2t0wn5G09gLApB8awkwHjKfTSooxbfYl9ryfHHz9Xw884B8HgmZZCqij62yIRbAwtRBR6SWLldAM4y6NPdc5ry7WJkCr3ZwwQ_L0xJ" style="-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);" width="533" /></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Рисунок 12.3 Распространение гриппа и других инфекционных заболеваний смоделированные в виде графов.</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Люди имеют свойства, такие как возраст и вес. В случае модели инфекционного заболевания, наиболее важным свойством является статус инфекции, которая может быть</span></div>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: white; color: #252525; font-family: Arial; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Не инфицированный в данный момент,и никогда не был инфицирован</span></div>
</li>
<li dir="ltr" style="background-color: white; color: #252525; font-family: Arial; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Не инфицированный в данный момент,но был инфицирован в прошлом</span></div>
</li>
<li dir="ltr" style="background-color: white; color: #252525; font-family: Arial; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Инфицирован в данный момент</span></div>
</li>
<li dir="ltr" style="background-color: white; color: #252525; font-family: Arial; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Имеет имунитет</span></div>
</li>
</ul>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Необходимо следить за этими свойствами поскольку они влияют на вероятность инфицирования:</span></div>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: white; color: #252525; font-family: Arial; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Если вы не заражены и никогда не были, у вас есть умеренно высокая вероятность инфицирования при контакте с инфицированным человеком.</span></div>
</li>
<li dir="ltr" style="background-color: white; color: #252525; font-family: Arial; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Если вы не заражены, но были заражены в прошлом, вы, вероятно, приобрели некоторый иммунитет к инфекционным заболеваниям. Это означает, что у вас есть низкая вероятность заражения при контакте с инфицированным человеком.</span></div>
</li>
<li dir="ltr" style="background-color: white; color: #252525; font-family: Arial; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Если вы инфицированы и вступили в контакт с другим инфицированным человеком, вы оба остаетесь зараженными. Без изменений.</span></div>
</li>
<li dir="ltr" style="background-color: white; color: #252525; font-family: Arial; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Если у вас есть иммунитет, либо из-за врожденного иммунитета или медицинской иммунизации, то вы не заразитесь при контакте с другим инфицированным человеком.</span></div>
</li>
</ul>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Состояние графа инфекционной болезни будет часто меняться в виде взаимодействия людей; некоторые люди будут становиться зараженными в то время как другие будут восстанавливаться после болезни. Как видите, это отличается от железных и автомобильных дорог, в тоже время мы остаемся неизменными в использовании терминов - узлов и ребер.</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Свойства городов и автодорог могут меняться в изменении населения и возникающих автомобильных аварий. Изменения графа инфекционных болезней, зависит от того как люди взаимодействуют между собой, и,с какой частой и быстротой это происходит.</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Ребра или в нашем случае, взаимодействие между людьми - это свойства.Например, существует вероятность того, что кто-то будет передавать болезнь другому человеку, пожимая руку. Данное взаимодействие имеет более высокую скорость передачи болезни , чем двое людей, стоящих в непосредственной близосте не касаясь друг друга. Некоторые возбудители требуют физического контакта для распространения болезни, в то время как другие воздушно-капельные заболевания могут передавать без непосредственного контакта.Эти виды свойств, которые будут связаны с ребрами.</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Графы можно использовать более чем для моделирования железных дорог и передачи </span><span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">инфиционных </span><span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">заболеваний. Иногда бывает так что нет потока или связи между вершинами объектов.</span><span style="background-color: white; color: red; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Вместо этого, некоторые отношения графовых моделей между вещами, могут храниться через время. </span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Моделирование абстрактных и конкретных сущностей</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Графы хорошо подходят для моделирования абстрактных отношений, как часть - отношения.</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Например, штат Орегон является частью Соединенных Штатов, и провинция Квебек является частью Канады.Город Портленд находится в штате Орегон, и город Монреаль расположен в Квебеке. Такого рода иерархические отношения моделируется с помощью специального типа графа, известное как дерево.</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Дерево имеет специальную вершину которую называют корнем. Корень является вершиной иерархии. На рисунке 12.4 показано два дерева, один для Соединенных Штатов и один для Канады. Оба показывают взаимосвязь между национальными, региональными и местными государственными органами.</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><img alt="tnst_5.png" height="260" src="https://lh3.googleusercontent.com/efyCzZOQrv9xEiULO41tEMtsl3w1niwQc2KxZ-GmSmv54w9EfzXrSVZF_EfjkUPR66ZPHHEa96DjYMorbnnoFJhPKcIeAcD11SOm7-3G9BkAUnJ9qI9-WDI75Tp0MNtO1EIDo7d1" style="-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);" width="556" /></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Рисунок 12.4 Иерархические государственные структуры, смоделированные в виде графов.</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Обратите внимание на то, что все узлы подключены только к одной вершине. Верхняя вершина называется родительской вершиной, а нижние вершины называются дочерными. Родительские вершины могут иметь несколько дочерних вершин.</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Деревья также используют для моделирования иерархических отношений, для организационных схем,как часть - отношения, например на частях автомобиля, как показано на рисунке 12.5.</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><img alt="trns_6.png" height="515" src="https://lh5.googleusercontent.com/ol48eh9O3SykrtAwzzzYv2ZWonPCg2Mxo1qCapcMPRFztSa46ScQvfKkZ4kD9BwPJDHwUhiDr7_RZZv_75ddNriXUj1s3YJ08vB3sftYT-risDWfamFuyZlW4KocgC5kG3XTqcjn" style="-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);" width="602" /></span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Рисунок 12.5 Часть-отношения, для частей автомобиля, смоделированы с помощью графа.</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Примеры до сих пор были сосредоточены на потоках или отношениях между сущностями одного и того же типа, таких как города и правительства; графы могут также моделировать отношения между различными типами структур.</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Моделирование социальных медиа</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Сайты социальных сетей, как Facebook и LinkedIn позволяют пользователям взаимодействовать и общаться друг с другом в Интернете. Они расширили способ общения людей, вводя новые способы взаимодействия, такие как кнопка "Нравиться". Это позволяет быстро и легко показать что вам нравится или оценить чужую запись.</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Социальный медиа "Нравиться" может быть смоделирована в качестве связующего звена между человеком и записью. Вершинами в этом случае будут люди и посты. Стоит отметить, не все вершины и ребра должны быть одного и того же типа; может быть сочетание различных типов в одном графе.</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Рисунок 12.6 Показывает пример графа людям-нрявяться-записи . Вы заметите,что в отличие от многих других графов, у этого есть специальное свойство. Ребра движуться только от людей к записям; где нет ребер между людьми и между записями. Этот особый тип графа, называемый как двудольный граф, используют для моделирования отношений между различными типами сущностей.</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><img alt="trsl_7.png" height="264" src="https://lh3.googleusercontent.com/f5DpBB5K91zJ-x7djXFH50gQPiusj_Vmq3_KThwwYdb6JVO1My9-qsYoNVbtLCLP95JUKK4nPtrts5Qn0GgP3r5MgCBsxKQNKI9XorrSPYjm8aCDhu5JKfFhyLhFpl9nYJ41_cqf" style="-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);" width="583" /></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Рисунок 12.6 Записи из социальных медия и “Нравиться” смоделированые с помощью графа.</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Как показывают эти примеры, графы способны моделировать широкий спектр сущностей и отношений. Очевидный вопрос, скорее всего приходит вам на ум: Какие хорошие примеры использования для графовых БД?</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Преимущества Графовых Баз Данных</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Графовые БД показывают явные отношения между субъектами. Вершины представляют собой объекты, связаны или соединены ребрами. В реляционных базах данных, соединения не представлены в виде ссылок. Вместо этого две сущности имеют общее значение атрибута, который выступает в качестве ключа.</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Быстрые запросы с помощью избеганий объединений</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #252525; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Чтобы найти соединения или ссылки в реляционной базе данных, необходимо выполнить операцию которая называется обьединением.</span><span style="background-color: white; color: red; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Объединение смотрит и выбирает вверхние значения из одной таблицы в другой таблице.</span><span style="background-color: white; color: red; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Например, на рисунке 12.7, таблица студентов содержит список имен стундентов и их идентификаторов. Индификаторы студентов также используються в таблице Заявок, чтобы указать,на каком курсе обучается студент.</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><img alt="trns_8.png" height="223" src="https://lh4.googleusercontent.com/6gWR46Wl0vStvohy3r5GHDngKSxbA8PGsDh5gKedHhurGXdXqivjQ_lMPS92Xug5TYUWM548Dw8ZhgYu88Y2jKQwb2Oaiyr--JSIvb5xvrEuhtQ3mn8QFHzL4peO1lA9pKMdF4jc" style="-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);" width="578" /></span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Рисунок 12.7 Представление отношения студент - курсы в реляционной базе данных.</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">В другом варианте, вы можете представлять отношения между студентом, используя графы, как показано на рисунке 12.8.Ребра между студентами и курсами предостовляют пользователю быстрые запросы ко всем курсам включая студентов записанных в них. </span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: white; color: blue; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><img alt="Screenshot_3.png" height="281" src="https://lh5.googleusercontent.com/3-d4CsBQRmZ0OYKQqwI-f_quOVekCPAqRv8ZP3-QYw9-CUXtuEdP2elt9oKzhxZ9jJ8H1mg5KOzcsNzUZXVbKX2AqZ2-L1nD4vrQCVzad2Xn4N51vfLFl25D_emsKFqHdRbgZ2oY" style="-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);" width="602" /></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Рисунок 12.8 представление отношения студент - курс в виде графовой БД.</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Пример инфикционных заболеваний показывает намного значительней как графы помогают не использовать обьединенний. Рисунок 12.9 показывет реляционную таблицу с информацией о людях и их состояние инфекции. Он также показывает таблицу с указанием взаимодействий между людьми.</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><img alt="tnst_1.png" height="365" src="https://lh4.googleusercontent.com/QsJx8JNHhakQYr8ssmsW_DLy0uLntSISvqXigRTMxdnNs1a6E6RzokKv8ADTT-_nLRKwpKpclCnh7Bqq6qGFesmAbpMqcLJ692W1jm2YY3x39UQQenbUequa06lO-TniHNZC4H0z" style="-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);" width="559" /></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Рисунок 12.9 Нахождение Нолевого пациента при исследовании инфекционных заболеваний.</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Во время эпидемии, это помогает понять кто являеться источником эпидемии или первого человека, зараженног этой болезнью. Предположим, что вы знаете, что Пациент А был заражен пациентом B, и пациент B был заражен пациентом C, и так далее. Если вам нужно будет начать с Пациента А, требуеться выполнить объединение, чтобы найти что он был заражен Пациентом Б. Затем вам нужно будет сделать запрос к таблице, чтобы выяснить что Пациент С имеет ли</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">инфицированного Пациента B. Этот процесс будет продолжаться до тех пор вы не нашли человека, который не был заражен кто-нибудь другой (то есть, Нулевой Пациент, или же индекс в эпидемиологической терминологии).</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Совет</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">В графовой базе данных вместо выполения обьединения, используйте ребра от вершины к вершине. Это гораздо проще и делает быстрее операции.</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Игры с графами</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Графы даже пробрались в сферу популярных развлечений. Возьмите например настольную игру </span><span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Pandemic</span><span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> от Z-Man Games. В Pandemic, игроки выполняют совместную работу что бы подавить и уничтожить четыре различных инфекционных заболевания, представленных цветными пластиковыми блоками.Игровое поле отображает многочисленные крупные города по всему миру, и каждый город имеет от двух до шести линий, соединяющих его с другим городом. Каждая линия представляет собой путь для передачи данного заболевания.В ходе игры, игроки используют уникальные полномочия, возложенные на них в начале игры, удалить цветные блоки с доски.</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Как вы можете видеть,гемплей Pandemic происходит внутри графовой модели. Города выступают в роли вершин, в то время как линии служат в качестве ребер. Можно также приписать некоторые свойства для вершин и ребер. Например, каждый город имеет определенное количество линий, соединяющих его с другими городами, а также статус инфекции, представленный количеством цветных блоков в городе. В этом случае свойства ребер являются более абстрактными. Они содержат себе или не содержат линии соединяющие два инфицированных города, два не инфицированих города, или один инфицированый и один не инфицированный</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Упрощенное Моделирование</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Работа с графовыми БД может упростить процесс моделирования.При работе с реляционными базами данных, обычно начинают моделировать основные объекты в вашей области. В случае социальных медиа, это могут быть люди и записи. В случае инфекционных заболеваний, основным объектом являються всего лишь люди. Когда вы начинаете моделировать информацию о взаимодействии, это может быть сложным. Например, в области социальных медиа, многим людях может, нравиться запись так и запись может нравиться многим людям.</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Это называеться отношение многие ко многим, которое смоделируеться как другая таблица, как показано на рисунке 12.10.</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><img alt="Screenshot_1.png" height="231" src="https://lh6.googleusercontent.com/4FD7ECMSrRDFMvdcKj9lTs3aHR8Mw0Ci3QKu35iuRw_AD0zTSOvCjxz7kkct24A65FAbN28ROrrHcTYwCX8M0YfnJ9Swb3XUMN4Vs402cZTlyF6sEqQB6adYVY8kMSjRhIfps8u9" style="-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);" width="577" /></span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Рисунок 12.10 Моделирование отношения многие ко многим в реляционной базе данных.</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">В графовой БД, нет необходимости создавать таблицы для моделирования отношения многие-ко-многим; вместо этого, они подробно смоделированы с помощью ребер.</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Множественые отношения между сущностями</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Использование нескольких типов ребер позволяет разработчикам базы данных легко моделировать различные отношения между объектами. Это особенно полезно при моделировании вариантов транспортировки между объектами.Например, транспортная компания,которая возможно захочет, рассмотреть автомобильные, железнодорожные и воздушные перевозки между городами (смтр. рисунок 12.11). Каждый из них имеет различные свойства, такие как время доставки, стоимости и государственные регулирования.</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><img alt="LH1hLHt8dHI.jpg" height="236" src="https://lh4.googleusercontent.com/aVnJXCdByNjX2u9yC_J9bknQQWbM6T5HrW-Dh8YBnW8FCelhWppvFuNrFla50ve-ydyFlMOfJvta-r2rSeBkZ4o7hy9ZNq8Wd0K1PIE3my6-UJYgdjxRYfcxiFq2Uf25Ay6qrhYC" style="-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);" width="593" /></span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Рисунок 12.11 Моделирование множестенных типов отношений в графовой БД.</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Множественные отношения могут быть смоделированы в реляционных базах данных, но они являются более определенными и легко понимаемы, при использовании графовой базы данных.</span></div>
<b style="font-weight: normal;"><br />
</b> <br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Выводы</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: black; font-family: "arial"; font-size: 13.333333333333332px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Взаимодействия и отношения между сущностями стали обычным делом. Теория графов обеспечивает прочную основу для построения графовых баз данных и анализа отношений между сущностями. В качестве примеров в этой главе показывают, что сила теории графов может быть применена к широкому кругу проблем. В следующей главе появляються дополнительные термины и понятия, которые будут полезны для анализа данных графа.</span></div>
<br /></div>
Eduard Horiachhttp://www.blogger.com/profile/18427931313130603364noreply@blogger.com0tag:blogger.com,1999:blog-4339376176926491989.post-30816307543414210802016-03-16T12:47:00.003-07:002016-03-16T12:56:59.363-07:00Об Periscope Api<div dir="ltr" style="text-align: left;" trbidi="on">
Начнем с того что в сейчас Periscope Api закрыт для пользователей, и существуют только неофициальные сборки на Github, которые требуют ключи <span style="background-color: white; color: #222426; font-family: "arial" , "helvetica neue" , "helvetica" , sans-serif; font-size: 15px; line-height: 19.5px;"> (<i>consumer_key</i> и </span><i style="color: #222426; font-family: arial, 'helvetica neue', helvetica, sans-serif; font-size: 15px; line-height: 19.5px;">consumer</i><span style="background-color: white; color: #222426; font-family: "arial" , "helvetica neue" , "helvetica" , sans-serif; font-size: 15px; line-height: 19.5px;"><i>_secret</i>) </span>,для выполнения запросов к Api. Уже доступны примеры на <a href="https://github.com/aliosmanyuksel/periscopr-api">php</a> и <a href="https://github.com/gabrielg/periscope_api">ruby</a> для работы с Periscope Api но без нужных нам ключей.<br />
<br />
Самый интересный пример это OpenPeriscope, который выполняется браузером как стороннее приложение. В этом примере тоже нет нужного нам ключа, автор предлагает нам сделать реверс-инжиниринг приложения periscope или украсть его с Dev Twitter.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioTKyl3ZypzbToIyge5KKS3dpPFM0j8_c_5FhgcBXpeq9HN5oL2-5s7Aulq6m0B_-U1pPGFkeWq6YCALuaHbzNE3VPh56EZtBB2n520FQebKAgckoxGOV1s6thK_nDHQ23LDT72Ckb8f1y/s1600/Screenshot_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="54" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioTKyl3ZypzbToIyge5KKS3dpPFM0j8_c_5FhgcBXpeq9HN5oL2-5s7Aulq6m0B_-U1pPGFkeWq6YCALuaHbzNE3VPh56EZtBB2n520FQebKAgckoxGOV1s6thK_nDHQ23LDT72Ckb8f1y/s320/Screenshot_1.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
Также автор предоставляет нам хорошую <a href="http://static.pmmlabs.ru/OpenPeriscope/">документацию</a>.<br />
<div>
<br />
Если вы уже имеете ключ, вам все равно потребуются авторизация через <span style="background-color: white; color: #222426; font-family: "arial" , "helvetica neue" , "helvetica" , sans-serif; font-size: 15px; line-height: 19.5px;">Twitter.</span><br />
<div>
<span style="color: #222426; font-family: "arial" , "helvetica neue" , "helvetica" , sans-serif;"><span style="font-size: 15px; line-height: 19.5px;"><br />
</span></span></div>
<div>
<span style="color: #222426; font-family: "arial" , "helvetica neue" , "helvetica" , sans-serif;"><span style="font-size: 15px; line-height: 19.5px;">Вот 5 основных шагов для авторизации в Periscope с помощью Твиттера.</span></span></div>
<div>
<span style="color: #222426; font-family: "arial" , "helvetica neue" , "helvetica" , sans-serif;"><span style="font-size: 15px; line-height: 19.5px;">1. Сделать Запрос и получить </span></span><span style="background-color: white; color: #222426; font-family: "arial" , "helvetica neue" , "helvetica" , sans-serif; font-size: 15px; line-height: 19.5px;">OAuth токен через </span><a href="https://api.twitter.com/oauth/request_token" rel="nofollow" style="background-color: white; border: 0px; color: #005999; cursor: pointer; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 15px; line-height: 19.5px; margin: 0px; padding: 0px; text-decoration: none;">https://api.twitter.com/oauth/request_token</a></div>
<div>
2. Перенаправить пользователя на <a href="https://api.twitter.com/oauth/authorize?oauth_token=[oauth_token]" rel="nofollow" style="background-color: white; border: 0px; color: #005999; cursor: pointer; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 15px; line-height: 19.5px; margin: 0px; padding: 0px; text-decoration: none;">https://api.twitter.com/oauth/authorize?oauth_token=[oauth_token]</a></div>
<div>
3. Подождать пока пользователь авторизируеться и получит <i>oauth_token</i> и <i>oauth_verifier</i> от перенаправленной страницы</div>
<div>
4.После этого сделать запрос к <a href="https://api.twitter.com/oauth/access_token?oauth_verifier=[oauth_verifier]" rel="nofollow" style="background-color: white; border: 0px; color: #005999; cursor: pointer; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 15px; line-height: 19.5px; margin: 0px; padding: 0px; text-decoration: none;">https://api.twitter.com/oauth/access_token?oauth_verifier=[oauth_verifier]</a> что бы получить <i>oauth_token, oauth_token_secret, user_id </i>и<i> user_name</i></div>
<div>
<div>
5. Отправить запрос к <a href="https://api.periscope.tv/api/v2/loginTwitter" rel="nofollow" style="background-color: white; border: 0px; color: #005999; cursor: pointer; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 15px; line-height: 19.5px; margin: 0px; padding: 0px; text-decoration: none;">https://api.periscope.tv/api/v2/loginTwitter</a></div>
<div>
<pre>{
"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"
}</pre>
</div>
</div>
</div>
<div>
6. Сохранить значение куки после последнего запроса и вставлять в разные запросы к Periscope Api .</div>
<div>
<br /></div>
<div>
Запросы на 1 и 4 шаге нужно использовать правильные Authorization заголовки(header) которые содержат в себе <i style="color: #222426; font-family: arial, 'helvetica neue', helvetica, sans-serif; font-size: 15px; line-height: 19.5px;"><i>consumer</i>_key</i><span style="background-color: white; color: #222426; font-family: "arial" , "helvetica neue" , "helvetica" , sans-serif; font-size: 15px; line-height: 19.5px;"> и </span><i style="color: #222426; font-family: arial, 'helvetica neue', helvetica, sans-serif; font-size: 15px; line-height: 19.5px;"><i>consumer</i>_secret </i><span style="background-color: white; color: #222426; font-family: "arial" , "helvetica neue" , "helvetica" , sans-serif; font-size: 15px; line-height: 19.5px;">Periscope приложения.</span><br />
<br />
Customer_key был получен в первых шагах(если <span style="background-color: white; color: #212121; font-family: inherit; font-size: 16px; line-height: 24px; white-space: pre-wrap;">вы можете обойти сертификат </span>) то customer_secret никогда не покидает ваше устройство и вы не можете его получить простым перехватом трафика.<br />
<br /></div>
<div>
Я не имею нужного ключа , если вам каким нибудь способом удалось его получить напишите пожалуйста мне.</div>
<div>
<br />
В моей ситуации есть одна альтернатива это получение фида из твитера о новых трансляциях на сайт с помощь парсинга. Уже даже существую примеры на GitHub.<br />
Вот один из них на <a href="https://github.com/peterbrowse/Up-Periscope">node.js</a>.</div>
<div>
<br /></div>
<div>
<br /></div>
</div>
Eduard Horiachhttp://www.blogger.com/profile/18427931313130603364noreply@blogger.com1tag:blogger.com,1999:blog-4339376176926491989.post-7464594021065490642016-03-07T00:56:00.001-08:002016-03-07T09:39:48.944-08:00Удобный хостинг сайтов html, css и js на google drive<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="-webkit-font-smoothing: antialiased; background-color: white; border: 0px; box-sizing: border-box; color: #444444; font-family: 'ARS Maquette', 'Helvetica Neue', sans-serif; font-size: 15px; font-stretch: inherit; line-height: 1.6; margin-bottom: 1.25em; outline: none; padding: 0px; text-rendering: optimizeLegibility; vertical-align: baseline; zoom: 1;">
В <a href="http://lifehacker.ru/2012/12/09/kak-ispolzovat-google-drive-dlya-khostinga-sajjtov/">этой</a> статье описано как располагать и хостить сайты на google drive. Если вам понадобиться использовать эту функцию в google drive<span style="line-height: 1.6;"> много раз , процесс создания ссылки можно с легкость автоматизировать .</span></div>
<div style="-webkit-font-smoothing: antialiased; background-color: white; border: 0px; box-sizing: border-box; color: #444444; font-family: 'ARS Maquette', 'Helvetica Neue', sans-serif; font-size: 15px; font-stretch: inherit; line-height: 1.6; margin-bottom: 1.25em; outline: none; padding: 0px; text-rendering: optimizeLegibility; vertical-align: baseline; zoom: 1;">
Код состоит из 6 строк на javascript. Конечно лучше было бы использовать регулярные выражения, но этом метод <span style="color: #0086b3; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 12px; line-height: 16.8px; white-space: pre;">substring</span><span style="line-height: 1.6;">() мне показался проще.</span></div>
<div style="-webkit-font-smoothing: antialiased; background-color: white; border: 0px; box-sizing: border-box; font-stretch: inherit; margin-bottom: 1.25em; outline: none; padding: 0px; text-rendering: optimizeLegibility; vertical-align: baseline; zoom: 1;">
<script src="https://gist.github.com/edlvj/e4dc68bd3033605bbae8.js"></script><br /></div>
</div>
Eduard Horiachhttp://www.blogger.com/profile/18427931313130603364noreply@blogger.com0tag:blogger.com,1999:blog-4339376176926491989.post-8594318726690715172016-02-23T06:10:00.000-08:002016-03-07T09:45:50.391-08:00Вывод параметров в html с помощью res.render (Node.js)<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
Обычно с помощь res.render используют Jade файлы, но если вам не нужно писать много шаблонов, можно воcпользоваться обычным html.<br />
Первое что нужно сделать это установить модуль ejs (это наш шаблонизатор).<br />
<br />
1) Установка ejs –<br />
<pre class="brush:xml">npm install ejs
</pre>
2) Инициализируем наш шаблонизатор в файле app.js как ejs<br />
<pre class="brush:xml">app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
</pre>
<br />
3)Теперь вызываем метод res.render с файлом шаблоном и параметрами, которые мы хотим передать:<br />
<pre class="brush:xml">exports.index = function(req, res){
res.render('index', { title: 'ejs' });
};
</pre>
<br />
4)Теперь в нашем html файле выводим параметры которые мы передали<br />
<pre class="brush:xml"><h3>
Welcome to <%= title %>!</h3>
</pre>
<br />
И не забудьте объявить папку с статическими файлами где находятся файлы доступной для http запросов</div>
<br />
<pre class="brush:xml">app.use('/client', express.static(__dirname + '/client'));
</pre>
</div>
Eduard Horiachhttp://www.blogger.com/profile/18427931313130603364noreply@blogger.com0tag:blogger.com,1999:blog-4339376176926491989.post-64800114029518349572016-02-19T08:55:00.001-08:002016-02-19T08:56:13.409-08:00Генерация ruby кода из uml модели<div dir="ltr" style="text-align: left;" trbidi="on">
Недавно нашел очень удобный и простой интернет сервис для генерации кода из uml модели.<br />
На этом сайте также можно генерировать код для таких языков программирования как Php, Java, C++ и даже для Sql. В моем случае мне нужно было генерировать код для Ruby. <a href="http://cruise.eecs.uottawa.ca/umpleonline/umple.php">Ссылка на сервис.</a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFbYvQ_-nZwyXJ2j4WMjWm0VaNCd1tvU4y7Ez_-fdvcsA935-ZTgqXyEINXTAdxbI2Ixs9soFaXy9-rkNNE2UIdkiFnBBfQTunlRS9zqwTGvmtoPLy7iB9ujXveMEFsKfeLmDF-MHQROoc/s1600/Screenshot_3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="205" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFbYvQ_-nZwyXJ2j4WMjWm0VaNCd1tvU4y7Ez_-fdvcsA935-ZTgqXyEINXTAdxbI2Ixs9soFaXy9-rkNNE2UIdkiFnBBfQTunlRS9zqwTGvmtoPLy7iB9ujXveMEFsKfeLmDF-MHQROoc/s400/Screenshot_3.png" width="400" /></a></div>
<br />
<br /></div>
Eduard Horiachhttp://www.blogger.com/profile/18427931313130603364noreply@blogger.com0tag:blogger.com,1999:blog-4339376176926491989.post-3277212851182902722016-02-19T08:27:00.000-08:002016-02-19T08:32:23.694-08:00Модульное тестирование в Ruby<div dir="ltr" style="text-align: left;" trbidi="on"><div style="text-align: left;">Однажды во время учебы по одному из предметов было задание создать модульный тест для двух методов calculate() и input().<br />
<br />
Среди всех языков программирования мой выбор на Ruby со своей простотой и возможностями. Еще один плюс что не нужно устанавливать дополнительные фреймворки так и программы для модульного тестирования на ruby. Сам модуль тестирования встроен в ruby и подключается строкой<br />
<br />
<pre class="brush:xml">require "test/unit"</pre><br />
<br />
И так я написал класс и три метода которые я буду тестировать.</div><pre class="brush:xml">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
</pre>А вот это собственно и есть модуль где мы тестируем наши методы. <br />
<pre class="brush:xml">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
</pre>Я использовал лишь один метод для тестирования модуля это assert_equal() , этот метод сравнивает два значения и определяет правильно идет расчет в модуле или нет. <br />
<div style="text-align: left;">Вот результат выполнения данного тестирования:</div><div style="text-align: left;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc-a_DdwDji-Ji4aXPfu01tdlfHh7VNlnndXfeSfzZ6-H6DRSjFe2Ga3OYD4_U-oPTooSl57d5Sf0NdV1PEfKwLlmA9K8RDzQnJfkqpmFLaNyouuvao-_cRd-1eP2JvXjiCncPSr4Vp4Pv/s1600/Screenshot_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="80" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc-a_DdwDji-Ji4aXPfu01tdlfHh7VNlnndXfeSfzZ6-H6DRSjFe2Ga3OYD4_U-oPTooSl57d5Sf0NdV1PEfKwLlmA9K8RDzQnJfkqpmFLaNyouuvao-_cRd-1eP2JvXjiCncPSr4Vp4Pv/s320/Screenshot_1.png" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: left;">Что бы прочитать полную документацию про м<span style="font-family: "times new roman"; text-align: center; white-space: normal;">одульное тестирование в Ruby перейдите по этой <a href="http://ruby-doc.org/stdlib-1.8.7/libdoc/test/unit/rdoc/Test/Unit.html">ссылке</a></span></div><div style="text-align: left;"></div><div dir="ltr" style="text-align: left;" trbidi="on"></div></div>Eduard Horiachhttp://www.blogger.com/profile/18427931313130603364noreply@blogger.com0