вторник, 29 января 2019 г.

Установка nginx

Почитал я хороший пост на eax.me про nginx и решил с ним поиграться. Хотя бы поставить на свою Ubuntu:)

У меня на сервере был запущен Apache - перед установкой nginx лучше его остановить:
sudo service apache2 stop

Далее - установка:
sudo apt-get install nginx

Запуск:
sudo service nginx start

Заходим на свой сервер через браузер - показывает страничку Apache. Это потому, что в /var/www остался файл index.html от Апача (говорят, он там даже после удаления Апача останется). Nginx кладет в ту же папку свой индекс, но с суффикосм nginx-ubuntu. Если его сделать index.html - браузер покажет ожидаемое "Welcome to nginx!"

При установке пользовался советами отсюда (необходимость остановки Апача перед установкой nginx) и отсюда (замена апачевского index.html). Там еще много информации, стоит почитать.

пятница, 25 января 2019 г.

Забавы с нейросетями в R

Решил поиграться с нейросетями. Поставил себе R-вский пакет neuralnet. Хороший материал нашел - "neuralnet: Train and Test Neural Networks Using R". Как-то пока не очень идет - работает медленно даже на самом простом наборе данных - два массива x и y по 100 элементов в каждом, y=3x. При использовании первых 95 элементов в качестве тренировочных данных и значении порога 0.001 остальные элементы предсказываются с ошибкой в третьем знаке после запятой. При уменьшении порога вообще нет сходимости. Скрытые слои - по схеме (2,1).

Без нормализации данных вообще ничего не работает, это надо иметь ввиду.

Кстати, вот здесь пишут, что зачастую более простые (в плане вычислений) методы, типа support vector machines (SVMs), дают результаты не хуже, чем нейросети.

Docker для начинающих

Хорошие руководства по Docker:


Выглядит все очень даже просто. Хотя после чтения поста на eax.me "Зачем нужен Docker и практика работы с ним" понимаешь, что Докер - не хухры-мухры...

ЕЩЕ. Добавлю ссылку на пост Как я приручал Docker из Блога ленивого программиста (хороший блог, жаль, что заброшенный).

Машобуч - улов статей

Решил я погрузиться в пучины модного нынче machine learning. Полез, понятное дело, в Интернет. И нашел там массу всего интересного.

Вот, например - можно ли машинно обучаться с помощью SQL? Обычно-то используют R и Python. Но вот некто Адам Праут считает, что нужно начинать с SQL - "Building a Machine Learning Application? Start with SQL". Адам считает, что современный SQL неплохо параллелится. А сочетание распределенного SQL хранилища с очередью сообщений (типа Kafka) и исполнительного движка типа Spark - вообще огонь.

Кстати, плюсы и минусы Spark хорошо разобраны в статье "Apache Spark — достоинства, недостатки, пожелания".

Внимательного прочтения заслуживает статья "Modeling and simulation in the big data era".

Появление больших данных заставляет разрабатывать распределенные алгоритмы машобуча. Об этом - в статье "Distributed Machine Learning Is The Answer To Scalability And Computation Requirements".

суббота, 19 января 2019 г.

Технические конференции

Поискал конференции об IT-технологиях (в Москве). Конференции есть, немало. Вот списочек найденного:

  1. Конференция PGConf.Russia 2019 (Экономический ф-т МГУ, 4–6 февраля в 09:00) - о PostGres
  2. Конференция «Технологии блокчейна 2019» 
  3. С++ Russia
Во всех этих мероприятиях один жирный минус - огромные взносы за участие. На PGConf, например, от 10 тыс руб. Взнос на  конференцию о блокчейне даже смотреть страшно, выделю только ключевые слова - Hyperledger Fabric, Ethereum, Exonum, R3 Corda, Ripple, «Мастерчейн», Quorum. На С++ преподавателям и студентам дается хорошая скидка, получается около 6 тысяч. Судя по описанию, конференция просто шикарная, с большим разнообразием мероприятий.

Так что вот - накопи денежек и окунись в мир высоких технологий.

четверг, 17 января 2019 г.

C++, тестирование: моки

Не так просто найти хороший материал по мокам и стабам (используются в юнит-тестировании). Либо что-то очень запутанное попадается, либо про Google Mock (а мне хочется посмотреть, как самому писать заглушки и объекты-имитации).

Наконец нашлось кое-что вразумительное. Статья Mock objects в блоге Clean C++. 

Моки в этой статье рассказываются на достаточно простом примере. Пусть имеется класс play_time, который показывает геймеру, сколько времени он просидел за игрой. Этот класс нужно протестировать - проверить, что он действительно показывает правильное время. Стратегия тут простая - запустили таймер в play_time, затем вызвали sleep() на несколько секунд, остановили таймер, прочитали время из play_time. 

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

Нормальные системные часы будут реализованы как класс system_clock, наследник клаcса second_clock. Для нормальной работы класса play_time в его конструктор нужно подсунуть именно system_clock.

А вот для тестирования создаются "поддельные" часы - класс mock_clock, которые тоже наследуются от second_clock (вот и появился мок). В подделке часы не тикают - их устанавливают вручную.

И схема тестирования теперь выглядит следующим образом. Создаем объект-таймер типа  play_time, в конструктор передаем часы-мок. Запускаем таймер, продвигаем "поддельные" часы вручную (просто делаем set_time), останавливаем таймер. Теперь можно проверять время. На этот раз обошлись без ожидания в течение реального промежутка времени.




среда, 9 января 2019 г.

В закладки: обзор по NoSQL

Попалась мне хорошая статья на портале jetinfo  Называется "СУБД NoSQL - сильные и слабые стороны".

Итак, плюсы NoSQL (в сравнении с реляционными СУБД). Это хорошая горизонтальная масштабируемость, бОльшая производительность на одном узле (за счет отказа от некоторых букв в ACID), надежная работа в условиях отказа узлов или сети, простота разработки и администрирования, различные модели данных (не нужны прослойки, отображающие реляционную модель на модель данных пользователя).

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

Есть также краткое описание MapReduce, обзор разновидностей СУБД, относящихся к NoSQL. Вобщем, хороший получился обзор, даёт достаточно целостную картину. Да и другие статьи на сайты достойны прочтения (в основном они про машинное обучение).  

суббота, 5 января 2019 г.

Виртуализация - основы


источник картинки: sputnik-georgia.com

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

Удобно сделать несколько виртуальных серверов, дав каждому свою роль - сервер БД, веб-сервер и т.д. Администрирование будет проще,  чем если у одного физического сервера будет несколько ролей.

Обо всём этом (и многом другом) написано в цикле статей Введение в виртуализацию (не первой свежести, конечно, 2012 год, но для новичка вполне подойдёт). Меня особенно обнадёжила фраза "Несмотря на кажущуюся сложность виртуальная машина (ВМ) представляет собой всего лишь папку с файлами". Стало не так страшно разбираться в этой теме.

И вот еще статья на Хабре, которая мне очень понравилась: Основные принципы виртуализации на пальцах. Примеры оптимизации расходов с помощью виртуализации, основные понятия темы, интересные факты (на 2015 год половина серверов в мире были виртуальными).

вторник, 1 января 2019 г.

Трудная дорога в облака

Я решил освоить облачные технологии. Уже сейчас понятно, насколько это непросто - нужно проработать множество тем, в которых не разбираюсь (виртуализация, например).

Первый вопрос, который встал передо мной - что выбрать, OpenStack или OpenNebula. И он решился буквально за полчаса гугления. OpenStack точно изучать не буду в ближайшем будущем. Слишком много отрицательных отзывов. Достаточно проглядеть названия текстов: Боль и страдания OpenStack (на Хакере), OpenStack или как не стоит делать проекты (видео лекции Бориса Павловича), Итак, вы решили развернуть OpenStack (статья на Хабре; в названии никакого негатива нет, но сам автор характеризует свой текст как "пост ненависти к OpenStack"). 

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

В общем, решил я остановиться на OpenNebula. Тоже open, тоже бесплатная платформа, но вроде бы попроще и попонятнее. Начну, пожалуй со статьи на Вике МГТУ им. Баумана.

Кстати, где-то там в недрах OpenNebula используется алгоритм консенсуса Raft. Об этом можно прочитать в посте Романа Богачева.