суббота, 1 марта 2014 г.

Final Exam?

Неа, выкладывать свои ответы я не буду т.к. вопросы ребята не меняют, и было бы не правильно выкинуть всем на показ ответы на финальный экзамен, да и на домашку я тоже зря выкидывал xD скажу только то, что я успешно сдал этот экзамен, 8/10) домашка у меня тоже на 84%, так что в скором времени надеюсь получить сертификат)

MongoDB. Homework 6.

Всем привет, долго я тут не писал, особо не было времени, да и ждал, пока закончатся on-line курсы MongoDB, так как негоже выкладывать ответы до того, как придут результаты)

Homework: Homework 6.1

Which of the following statements are true about MongoDB replication. Check all that apply.

пятница, 7 февраля 2014 г.

Язык XML

Что такое XML
   Сегодня XML может использоваться в любых приложениях, которым нужна структурированная информация - от сложных геоинформационных систем, с гигантскими объемами передаваемой информации до обычных "однокомпьютерных" программ, использующих этот язык для описания служебной информации. При внимательном взгляде на окружающий нас информационный мир можно выделить множество задач, связанных с созданием и обработкой структурированной информации, для решения которых может использоваться XML:

MongoDB. Homework 5.

Homework: Homework 5.1 (Hands On)

db.posts.aggregate([{$unwind:"$comments"},{$group:{_id:"$comments.author",count:{$sum:1}}},{$sort:{"count":-1}},{$limit:1},{"$project":{_id:0,'tag':"$_id","count":1}}])

Aggregation Fraemwork

Очень хорошую статью нашел на хабре, что существенно упростило работу, честно украденный пост вот от сюда.

Документация по новшествам расположена в соответствующем разделе официального сайта. Сначала давайте разберем то, как же это работает и какие конструкции MongoDB нам помогут. 

Итак, самая главная сложность в выборке данных из MongoDB это работа с массивами и данными, содержащимися внутри каких-то отдельных элементов. Да, мы можем их выбрать как и в SQL, но не можем агрегировать по ним непосредственно при выборке. Новый фреймвок представляет собой декларативный способ работы с такими данными, основываясь на цепочке специальных операторов (их всего 7 штук). Данные выборки передаются из выхода одного оператора на вход другого, совсем как в unix. Отчасти при помощи новых операторов можно повторить уже существующие. Пусть коллекция test — это коллекция для хранения данных о людях. Стандартная выборка:

среда, 5 февраля 2014 г.

MongoDB. Homework 4.

Homework: Homework 4.1


Suppose you have a collection with the following indexes:

Индексы

В самом начале мы видели коллекцию system.indexes, которая содержит информацию о всех индексах в нашей базе данных. Индексы в MongoDB работают схожим образом с индексами в реляционных базах данных: они ускоряют выборку и сортировку данных. Индексы создаются с помощью ensureIndex:

db.unicorns.ensureIndex({name: 1});
И уничтожаются с помощью dropIndex:
db.unicorns.dropIndex({name: 1});
Уникальный индекс может быть создан, если во втором параметре установить unique в true:
db.unicorns.ensureIndex({name: 1}, {unique: true});
Можно создавать индексы над вложенными полями (опять же, используя точечную нотацию), либо над массивами. Также можно создавать составные индексы:
db.unicorns.ensureIndex({name: 1, vampires: -1});
Порядок вашего индекса (1 для восходящего и -1 для нисходящего) не играет роли в случае с простым индексом, однако он может быть существенен при сортировке или лимитировании с применением составных индексов.

Моделирование данных

Давайте сменим тему и поговорим о более абстрактных концепциях MongoDB. Довольно просто объяснять новые термины и новый синтаксис. Гораздо сложнее говорить о моделировании в терминах новой парадигмы. Смысл в том, что большинство из нас привыкли пробовать любую новую технологию, моделируя реальные задачи. Мы поговорим об этом, но в конечном счете вы должны попрактиковаться и изучить реальный код.
Когда речь заходит о моделировании данных, то документ-ориентированные базы данных не настолько сильно отличаются от реляционных, как другие NoSQL-решения. Существующие различия не столь велики, однако это не уменьшает их важности.

MongoDB. Homework week 3.

Homework 3.1
Скачиваем файлик, импортим в монго и пишем код:

import java.net.UnknownHostException;
import java.util.Iterator;

import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;

вторник, 4 февраля 2014 г.

MongoDB. Homework week 2.

Homework 2.1
Итак, скачиваем предложный файл тут, импортируем его вот этой командой в наш mongo:
mongoimport -d students -c grades < grades.js
 После чего нам надо найти студента у которого самый маленький score среди тех, кто набрал больше 65 баллов. Пишем:
db.grades.find({type:"exam",score:{"$gte:65}}).sort({"score":1}).limit(3)
в итоге первая строчка с "_id" = 22.
Ответ: 22.

Homework 2.2
Наконец программирование, наконец Java!
Нам предлагают файл, скачанный тут изменить так, чтобы наименьшее поле с homework для каждого студента была удалено. Сделать это посредством Java, итак, приступим. Вот мой вариант решения:

понедельник, 3 февраля 2014 г.

CRUD operation in Java Driver.

Теперь рассмотрим эти же операции для Java:
insert(DBObject)
 Для добавления в коллекцию нужно создать объект BasicDBObject:
BasicDBObject doc = new BasicDBObject();
И, собственно добавление:
doc.put("username", "jyemin");
doc.put("birthDate", new Date(2345));
doc.put("programmer", true);
doc.put("age", 8);
doc.put("language", Arrays.asList("Java","C++"));
doc.put("address", new BasicDBObject("street", "20 Main").append("town","West").append("zip","56789"));

Quiz: Java Driver: Representing Documents

CRUD operation. 4 часть, надеюсь последняя.

Эту часть начнем с операциями над массивом, для начала создадим документ:
db.array.insert({_id:0, a:[1,2,3,4]})
Для изменения элемента используем функцию:
db.array.update({_id:0},{$set:{"a.2":5}})
после использования функции db.array.findOne():
{_id:0, a:[1,2,5,4]}
Для добавления нового элемента:
db.array.update({_id:0},{$push:{a:5}})
findOne: {_id:0, a:[1,2,5,4,6]}
Удаление элемента с конца:
db.array.update({_id:0},{$pop:{a:1}})
findOne: {_id:0, a:[1,2,5,4]}
Удаление элемента с начала:
db.array.update({_id:0},{$pop:{a:-1}})
findOne: {_id:0, a:[2,5,4]}
Добавление нескольких элементов в конец:
db.array.update({_id:0},{$pushAll:[7,8,9]})
findOne: {_id:0, a:[2,5,4,7,8,9]}
Удаление конкретного значения из массива:
db.array.update({_id:0},{$pull:5})
findOne: {_id:0, a:[2,4,7,8,9]}
Удаление нескольких элементов:
db.array.update({_id:0},{$pullAll:{a:[2,4,8]})
findOne: {_id:0, a:[7,9]}
Добавление в конец:
db.array.update({_id:0},{$addToSet{a:5})
findOne: {_id:0, a:[7,9,5]}
При повторе последнего действия несколько раз ничего не произойдет, добавляет значение только единожды!

воскресенье, 2 февраля 2014 г.

CRUD operation. Часть 3

Разберем немного действий с курсором.
db.people.find()
Как мы знаем, с помощью этой функции выводятся все документы существующие в people коллекции. Присвоим переменной cur значение этой функции:
 cur = db.people.find()
Теперь мы можем выполнять действия с курсором, например:
cur.hasNext() - проверяет, есть ли следующий элемент и возвращает true/false
cur.next() - возвращает текущий элемент и передвигает курсор на одно значение вперед.
cur.limit(5) - лимит на количество выводимых документов
cur.sort({name:-1}) - сортировка по name полю, по возрастанию
cur.sort({name:-1}).limit(3) - сортировка +  лимит
cur.sort({name:-1}).limit(3).skip(2) - сортировка +лимит, вывод начиная с 3 документа

Quiz: Querying, Cursors

Recall the documents in the scores collection:
{
 "_id" : ObjectId("50844162cb4cf4564b4694f8"),
 "student" : 0,
 "type" : "exam",
 "score" : 75
}
Write a query that retrieves exam documents, sorted by score in descending order, skipping the first 50 and showing only the next 20.

CRUD operation. Часть 2.

Продолжение темы CRUD в MongoDB. Постараюсь писать более форматировано)

Использование $or:
db.people.find({$or:[{name:{$regex:"e$"}},{age:{$exists:true}}]});
Происходит выборка документов, в которых поле name содержит "e" в конце строки или содержит поле age.

Quiz: Using $or

How would you find all documents in the scores collection where the score is less than 50 or greater than 90?
db.scores.find({$or:[{score:{$lt:50}},{score:{$gt:90}}]})

Использование $and:
db.people.find({$and:[{name:{$regex:"e$"}},{age:{$exists:true}}]});
Происходит выборка документов, в которых поле name содержит "e" в конце строки и присутствует поле age.

Quiz: Using $and

CRUD operation. Часть 1.

 CRUD операции(Create, Read, Update, Delete) - тут думаю не нужно вдаваться в подробности, скажу только то, что они имеют такую же смысловую нагрузку как и SQL базах данных, а по их названию можно догадаться, для чего они нужны. Лучше разберем их синтаксис.
Я уже вскользь затрагивал такие команды, как use db, show collections, db.collection.find(), db.collection.findOne(), сейчас  чуть подробнее разберу, для чего они нужны.

Итак:
mongod - запускаем наш MongoDB сервер.
mongo - наша оболочка, через которую мы будем производить все операции на начальном этапе.
use db - вместо db указываем любую базу данных с которой будем работать
show collections - показывает все существующие коллекции в нашей базе данных
db - показывает, в какой базе данных мы находимся
Еще можно сделать вот так:

суббота, 1 февраля 2014 г.

MongoDB. Homework week 1.

Вот мы и добрались до домашнего задания первой недели!
Homework 1.1
Нам предлагают установить mongoDB, скачать архив с файлами, распаковать и использовать mongorestore. После успешного выполнения этих действий, пишем:
mongo
use m101
db.hw1.findOne()
Барабанная дробь!

JSON

JSON (JavaScript Object Notation) - простой формат обмена данными, удобный для чтения и написания как человеком, так и компьютером. Он основан на подмножестве языка программирования JavaScript, определенного в стандарте ECMA-262 3rd Edition - December 1999. JSON - текстовый формат, полностью независимый от языка реализации, но он использует соглашения, знакомые программистам C-подобных языков, таких как C, C++, C#, Java, JavaScript, Perl, Python и многих других. Эти свойства делают JSON идеальным языком обмена данными.
  • Коллекция пар ключ/значение. В разных языках, эта концепция реализована как объект, запись, структура, словарь, хэш, именованный список или ассоциативный массив.
  • Упорядоченный список значений. В большинстве языков это реализовано как массив, вектор, список или последовательность.
Это универсальные структуры данных. Почти все современные языки программирования поддерживают их в какой-либо форме. Логично предположить, что формат данных, независимый от языка программирования, должен быть основан на этих структурах.

Spark: POST запросы

Если необходимо передать на веб-сервер большой объем данных, например, текст сообщения или файл, используют POST-запрос. В этом типе запроса параметры помещаются в тело HTTP-запроса, а размер передаваемых данных в байтах указывается в заголовке Content-Length:
POST /enter HTTP/1.1
<Различные заголовки>
Content-Length: 27
<Различные заголовки>

login=admin&password=qwerty
Таким образом, в URL передаваемые параметры не видны. Простым способом сформировать POST-запрос не получится, они в основном генерируются с помощью HTML-форм. Что же касается PHP, то для POST-параметров выделен глобальный массив $_POST, доступ к которому аналогичен массиву $_GET.

Spark: GET запросы

Сначала разберем, что такое GET запрос.
GET-запрос — это самый распространенный вид HTTP-запроса. При помощи него происходит запрос браузером любого файла веб-сервера. HTTP-запрос типа GET состоит только из HTTP-заголовков, тело у него отсутствует.
При помощи GET-запроса можно передать веб-серверу параметры — некоторую информацию. Например, если на сайте предусмотрена авторизация пользователей, то с помощью параметров можно передавать имя пользователя и пароль для проверки. Рассмотрим механизм передачи параметров с помощью GET-запроса.
В первой строке запроса после ключевого слова GET помещается путь к запрашиваемому документу. Если в пути встречается знак вопроса, то принято считать, что в этом месте путь заканчивается, а за ним начинаются GET-параметры этого запроса:
GET /examples/test.html?параметры HTTP/1.1
GET-параметр имеет формат имя_параметра=значение_параметра, сами параметры разделяются знаком &. Пример GET-запроса с двумя параметрами:
GET /enter?login=admin&password=qwerty HTTP/1.1

А теперь все вместе!

MongoDB, Freemarker, Spark.
Итак, осталось подытожить все, что я делал до этого.
Начнем с запуска MongoDB сервера(mongod), и самого Mongo shell(mongo). После чего пишем use test (test - название нашей базы данных) в окне с запущенным shell. Просмартиваем все коллекции командой show collections, выбираем любую, предположим у меня есть коллекция mecollection и добавляем один элемент командой db.mycollection.save({'name':'Dmitry'}). Теперь наша коллекция хранит одно значение name:Dmitry(одно значение, это если до этого ваша коллекция была пустая) Просмотреть элементы коллекции можно командой db.mycollection.find() или db.mycollection.findOne() вывод элемента, на котором стоит курсор.
 Теперь мы можем вернуться в eclipse(NetBeans или Intelij Idea, не знаю, что там у вас).

Использование Spring & Freemarker

Тут все довольно просто, нам нужно объединить 2 предыдущих  класса, вот что получится(файл hello.ftl оставляем прежним):
import freemarker.template.Configuration;
import freemarker.template.Template;
import spark.Request;
import spark.Response;
import spark.Route;
import spark.Spark;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
public class HelloWorldSparkFreemarkerStyle {
    public static void main(String[] args) {
        final Configuration configuration = new Configuration();
        configuration.setClassForTemplateLoading(
                HelloWorldSparkFreemarkerStyle.class, "/");
        Spark.get(new Route("/") {
            @Override
            public Object handle(final Request request,
                                 final Response response) {
                StringWriter writer = new StringWriter();
                try {
                    Template helloTemplate = configuration.getTemplate("hello.ftl");
                    Map<String, Object> helloMap = new HashMap<String, Object>();
                    helloMap.put("name", "Freemarker");
                    helloMap.put("word","MongoDB");
                    helloTemplate.process(helloMap, writer);
                } catch (Exception e) {
                    halt(500);
                    e.printStackTrace();
                }
                return writer;
            }
        });
    }
}

FreeMarker - еще одна полезная штука.

FreeMarker — компилирующий обработчик шаблонов, написанный на Java, один из инструментов, позволяющих отделить бизнес-логику и данные от представления в духе концепции Model-view-controller. Используется преимущественно при разработке web-приложений с использованием Java-сервлетов, также может использоваться для вывода текста в других случаях: генерация CSS, исходного кода Java и т. д. В отличие от JSP FreeMarker не является зависимым от архитектуры сервлета или от протокола HTTP. Таким образом шаблонизатор может использоваться не только в web-проектах. FreeMarker является свободным ПО.

Например, у нас есть код:
<html>
<body>
<p>Hello ${name}! You have the following messages:
<#list messages as m>
  <p><b>${m.from}:</b> ${m.body}</p>
</#list>
</body>
</html>

Spark for Java

Итак, краткий обзор Spark. Очень краткий, т.к. все, что я о нем знаю, это то, что Spark небольшой фреймворк для Java, с помощью которого можно создавать web- приложения, без развертывания какого либо сервера, то есть достаточно добавить в pom.xml файл dependency:
<dependency>
      <groupId>com.sparkjava</groupId>
      <artifactId>spark-core</artifactId>
      <version>1.1.1</version>
</dependency>

пятница, 31 января 2014 г.

Maven, POM и с чем их едят.

Apache Maven — фреймворк для автоматизации сборки проектов, специфицированных на XML-языке POM (англ. Project Object Model).
Слово maven происходит из языка Идиш и означает примерно «собиратель знания».
Maven, в отличие от другого сборщика проектов Apache Ant, обеспечивает декларативную, а не императивную сборку проекта. То есть, в файлах проекта pom.xml содержится его декларативное описание, а не отдельные команды. Все задачи по обработке файлов Maven выполняет через плагины.

Установка MongoDB

Я бы мог написать пошагово, как правильно ее устанавливать, но лучше один раз увидеть, чем сто раз прочитать.

Что такое Mongo DB?


Mongo DB — высокопроизводительная документо-ориентированная база данных. Особенности этой СУБД:
  • Документное хранилище, не требующее создания схем (таблиц)
  • Запросы в стиле JSON (очень удобно)
  • Широкий набор (атомарных) операций над данными (условный поиск, сложная вставка/обновление и т.п.)
  • Разные типы данных (поддержка массивов)
  • Поддержка индексов (B-Tree)
  • Автовосстановление, шардинг и репликация в коробке
  • Профилирование, хранение больших объектов, административный интерфейс, серверные функции, Map/Reduce и многое другое

Что такое NoSQL базы данных?

NoSQL (not only SQL), в информатике — термин, обозначающий ряд подходов, направленных на реализацию хранилищ баз данных, имеющих существенные отличия от моделей, используемых в традиционных реляционных СУБД с доступом к данным средствами языка SQL. Применяется к базам данных, в которых делается попытка решить проблемы масштабируемости и доступности за счёт атомарности и согласованности данных.
Вот что говорит Wikipedia про NoSQL. 

MongoDB education


Некоторое время назад, при изучении Java web мне посоветовали подучить NoSQL(что значит not only SQL) базы данных, так сказать для расширения кругозора, и предложили для изучения сайт https://education.mongodb.com, где я успешно зарегистрировался на курс "MongoDB for Java Developers" и ждал его начала. Старт курса удачно совпал с началом сессии, но задания я все таки успешно выполнял, сейчас идет 4 неделя курса. Описание я начну с 1-ой недели, для последующего повторения. Да, кстати, курс полностью на английском, лекции, задания, вопросы(так называемые quiz), что позволяет здорово подтянуть технический английский. При обучении предлагают создать небольшой блог с использованием MongoDB и небольшим функционалом, так что можно будет в свой project-лист записать очередной выполненный проект, хоть и не большой. Ах да, чуть не забыл, по завершению курса, при положительной оценке, а это 65+% вы получите сертификат об успешном завершении курса, что будет очередным плюсом при устройстве на работу. И так, начнем.

Охохо, вот и мой блог по программированию.

Собственно, что с подвигло меня заняться этой неблагодарной деятельностью?) При изучении Java возникали трудности с запоминанием некоторых вещей, в виду того, что они были просто не интересны и им не уделялось достаточно времени на повторение. Сейчас  для учебы и работы, ну и просто интереса ради, а может быть для лучшей усвояемости материала буду все конспектировать. Так что этот блог рассчитан не для широкой аудитории, а для меня любимого. Хотя, если кому либо он будет интересен, как говорится, u are welcome! Итак, на сегодня и на ближайшие 3 недели будет актуальны такие темы, как NoSQL базы данных, XML и XSLT ну и конечно же Java и ее технологии. Частенько информация будет наглым образом содрана с других сайтов и книг, текст может содержать ошибки, за что заранее извиняюсь перед теми, кто будет это читать.