воскресенье, 18 декабря 2016 г.

Установка java, tomcat, postgresql на centOS 6.8


Недавно на работе нужно было настроить сервер на centOS для развертывания приложения, решил оставить инструкцию, вдруг еще пригодится. Прежде всего необходимо зайти под рутом, для это достаточно выполнить su в терминале и ввести пароль root, далее
1. устанавливаем Java от оракл:
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u60-b27/jdk-8u60-linux-x64.rpm"
Происхот скачивание, далее необходимо установить скачанный пакет:
yum localinstall jdk-8u60-linux-x64.rpm
После данных манипуляций, Java установится по пути:
/usr/java

и будет работать команда java -version, но данная установка не прописывает переменную JAVA_HOME, а она используется, например, tomcat'ом. Так что необходимо самим прописать данную переменную. Для этого переходим в /etc/profile.b/ и создаем sh файл, с любым названием, туда необходимо записать:
export JAVA_HOME=/usr/java/jdk1.8.0_60
export PATH=$PATH:$JAVA_HOME/bin
вот и все, переходим к установке томката 2. Создаем группу и пользователя и выкачиваем пакет:
groupadd tomcat
useradd -M -s /bin/nologin -g tomcat -d /opt/tomcat tomcat
wget http://apache-mirror.rbc.ru/pub/apache/tomcat/tomcat-8/v8.0.39/bin/apache-tomcat-8.0.39.tar.gz
mkdir /opt/tomcat
tar xvf apache-tomcat-8*tar.gz -C /opt/tomcat --strip-components=1
Раздаем права доступа:
cd /opt/tomcat
chgrp -R tomcat conf
chmod g+rwx conf
chmod g+r conf/*
chown -R tomcat webapps/ work/ temp/ logs/
Объявляем сервис
gedit /etc/init.d/tomcat8
с таким содержанием:
#!/bin/bash
#
# tomcat8
#
# chkconfig: - 80 20
#
### BEGIN INIT INFO
# Provides: tomcat8
# Required-Start: $network $syslog
# Required-Stop: $network $syslog
# Default-Start:
# Default-Stop:
# Description: Tomcat 8
# Short-Description: start and stop tomcat
### END INIT INFO

## Source function library.
#. /etc/rc.d/init.d/functions
export JAVA_HOME=/usr/java/default
export JAVA_OPTS="-Dfile.encoding=UTF-8 \
  -Dnet.sf.ehcache.skipUpdateCheck=true \
  -XX:+UseConcMarkSweepGC \
  -XX:+CMSClassUnloadingEnabled \
  -XX:+UseParNewGC \
  -XX:MaxPermSize=128m \
  -Xms512m -Xmx512m"
export PATH=$JAVA_HOME/bin:$PATH
TOMCAT_HOME=/opt/tomcat
TOMCAT_USER=tomcat
SHUTDOWN_WAIT=20

tomcat_pid() {
  echo `ps aux | grep org.apache.catalina.startup.Bootstrap | grep -v grep | awk '{ print $2 }'`
}

start() {
  pid=$(tomcat_pid)
  if [ -n "$pid" ] 
  then
    echo "Tomcat is already running (pid: $pid)"
  else
    # Start tomcat
    echo "Starting tomcat"
    ulimit -n 100000
    umask 007
    /bin/su -p -s /bin/sh $TOMCAT_USER $TOMCAT_HOME/bin/startup.sh
  fi


  return 0
}

stop() {
  pid=$(tomcat_pid)
  if [ -n "$pid" ]
  then
    echo "Stoping Tomcat"
    /bin/su -p -s /bin/sh $TOMCAT_USER $TOMCAT_HOME/bin/shutdown.sh

    let kwait=$SHUTDOWN_WAIT
    count=0;
    until [ `ps -p $pid | grep -c $pid` = '0' ] || [ $count -gt $kwait ]
    do
      echo -n -e "\nwaiting for processes to exit";
      sleep 1
      let count=$count+1;
    done

    if [ $count -gt $kwait ]; then
      echo -n -e "\nkilling processes which didn't stop after $SHUTDOWN_WAIT seconds"
      kill -9 $pid
    fi
  else
    echo "Tomcat is not running"
  fi
 
  return 0
}

case $1 in
start)
  start
;; 
stop)   
  stop
;; 
restart)
  stop
  start
;;
status)
  pid=$(tomcat_pid)
  if [ -n "$pid" ]
  then
    echo "Tomcat is running with pid: $pid"
  else
    echo "Tomcat is not running"
  fi
;; 
esac    
exit 0

Теперь можно запускать сервис томката командой service tomcat8 start 3 Postgresql Добавим репозиторий и скачаем устанощик:
rpm -Uvh http://yum.postgresql.org/9.5/redhat/rhel-6-x86_64/pgdg-redhat95-9.5-2.noarch.rpm
yum install postgresql95-server postgresql95
Далее необходимо инициализировать базу:
service postgresql-9.5 initdb
service postgresql-9.5 start
осталось только отредактировать pg_hba.conf добавив нужные ip, вот и все

понедельник, 5 декабря 2016 г.

Past Perfect Continuous

Используется:

  • для выражения длительного прошедшего действия, которое началась ранее другого прошедшего действия и еще продолжилось, в момент совершения последнего. Момент, в течение которого действие уже совершилось, обозначен словами: for three hours, for a month, for some time, since two o'clock, since she came, all day long, all his life. I had been waiting for him for three hours when he come. Когда он пришел, я прождал его три часа!
  • когда речь идет о длительном событии/действии, которое закончилось перед определенным событием/действием в прошлом. Период действия может быть как указан, так и нет. My brother looked so tired. I knew he had been working a lot.

Вопрос Утверждение Отрицание
Had + I, you, He, She, It, We, They + been + глагол+ing I, you, He, She, It, We, They + had been + глагол+ing I, you, He, She, It, We, They + had not been + глагол+ing

Past Perfect

Используется, когда:

  • действие завершилось до какого то момента в прошлом. Этот момент обозначен словами: by three o'clock, by Sunday, by then, by that time, by the end of the year. I had written a letter by the three o'clock.
  • мы говорим о действии, которое случилось раньше другого действия в прошлом. Для более раннего используется Past Perfect, для более позднего используется Past Simple. When she come to the station, the train had already gone.


Вопрос Утверждение Отрицание
Had + I,you, He, She, It, we, They + глагол+ed/3 форма
В вопросах со словом What может не быть существительного:
What had happend before you come.
I,you, He, She, It, we, They + had + глагол + ed/3 форма I,you, He, She, It, we, They + had not + глагол + ed/3 форма
Слово never используется вместо частицы not
I had never tried shrimps before I went to Thailand.

Present Perfect Continuous

Используется, когда говорим о действии:
  •  которое началось в прошлом, происходит сейчас и, возможно, будет продолжаться в будущем, важна продолжительность действия, я не результат, как в Present Perfect. I have already reading this newspaper for two hours. (Я читаю эту газету уже два часа).
  • которое закончилось только что или чуть раньше. Т.е. о каком то действии, которое началось в прошлом, продолжалось какое то время и только что закончилось. Результат действия, указывает на то, что действие только что закончилось. The grass is wet. It has been raining.
Важно знать, что в английском языке есть глаголы, которые не употребляются ни в каких временах группы Continuous. Это глаголы like, believe, think, love, want, belong, own, have и т.д. Обычно, это глаголы, которые обозначают состояния,  чувства, а так же действия, которые нельзя наблюдать. John has had his car for three years.


Вопрос Утверждение Отрицание
Have + I, we, you, they + been + глагол + ing
Has + He,She,It + been + глагол+ing
I, we, you, they + have been + глагол + ing
He, She, It + has been + глагол+ing
I,we, you, they + have not been +глагол + ing
He, She, It + has not been + глагол+ing

Present Perfect

Используется, чтобы рассказать:

  • о результате, т.е. действие произошло в прошлом, но актуально в настоящем. Хотя действие произошло в прошлом, его результат виден и выжен в настоящем. I have broken a cup.
  • о жизненном опыте, о действиях и событиях, которые когда-либо происходили в вашей жизни, о том что вы когда либо видели или слышали. I have been to London. (Я был в Лондоне)
  • о тех ситуациях, которые менялись в течение периода времени.  My German has really improved since I moved to German.
  • о достижениях человека или всего человечества. Our son has learned how to read.
  • о действиях, которые повторялись несколько раз в прошлом. I have tried to open the door several times.
  • о незавершенных действиях в прошлом. My brother hasn't washed all the plates yet.
Present Perfect используется с JUST, но не используется с JUST NOW, c ним используется Past Simple. Present Perfect используется с наречиями, которые указывают на то что период, когда произошло действие, еще не закончился: today, this year, this month, already, before, ever, never, lately, yet, since, for, so far.
Часто используется Present Perfect, если в предложении есть слова:
  • already
  • ever
  • never
  • lately
  • recently
  • yet
  • since
  • for 
  • so far


Вопрос Утверждение Отрицание
Have + I, we, you, the + глагол + ed/третья форма глагола
Has + He,She,It + глагол + ed/ третья форма
В вопросительных предложениях. со словами Who, What может не быть существительного:
What has happened to you
I, we, you, they + have + глагол+ed/третья форма глагола
He, She, It + has + глагол+ed/третья форма глагола
I, we, you, they + have not + глагол+ed/третья форма глагола
He, She, It + has not + глагол+ed/третья форма глагола
так же можно использовать слово never, оно ставится вместо частицы not:
I have never jumped on a parachute

вторник, 22 ноября 2016 г.

AngularJS ошибки новичка

Изменение DOM-дерева

Перестаньте изменять DOM-дерево в контроллере, с помощью JQuery. Серьезно. Это относится к добавлению, удалению элементов, получению их содержимого, скрытие и показывание элементов. Для этого используйте встроенные директивы или пишите свои, когда это необходимо. 
Если есть проблемы с избавлением от этой привычки - попробуйте удалить JQuery из проекта. Серьезно. У Angular есть свой сервис $hppt и другие директивы, которые заменяют JQuery.  Angular поставляется со своим JQLite, его возможности используются при написании директив, особенно привязка к событиям.

Попытка дублировать функционал, который уже существует

Есть большая верятность, что не только вашему приложению понадобился данный функционал. Есть некоторый функционал, который постоянно пытаются реализовать по своему.
ng-repeat, частенько дублируется. Программисты пытаются добавить элементы, полученные от сервера,  используя JQuery. Это плохо. Именно для этого создан ng-repeat. И он справляется с этим отлично. Сохраниете данные в массив в своем $scope и выведите в DOM с помощью ng-repeat.
ng-show, тоже часто дублируют. Показ и скрытие элементов по условиню используя JQuery, частый паттерн для других приложений, но у Angular  есть решение лучше. ng-hide или ng-show, скрытие или показ элемента по условию, основываясь на булиеновском заначении. Пример:
 <div ng-show="!loggedIn"><a href="#/login">Click here to log in</a></div>
Обратите внимание на похожий  ng-disabled. Так же на мощный ng-switch, он должен быть использован вместо повторяющихся ng-shows.
ng-class  - последний из большой тройки. Применение класса для элемента, в ручную используя JQuery, основываясь на условии. Конечно в Angular есть способ лучше. Можно передать в ng-class список именн классов, разделенных проблемлом и их условий, вот пример:
<div ng-class="{ errorClass: isError, warningClass: isWarning, okClass: !isError && !isWarning }">...</div>
в ng-class передается объект, в котором перечислены CSS имена классов и условия их применения. Будут использоваться только те кслассы, условие для которых получилось true.

$watch и $apply

Двунаправленное связывание данных - это основа Angular. Тем неменее это не магия и в некоторых ситуациях тебе необходимо подсказать фреймворку правильное направление.
Когда ты связываешь значение с элемнтом используя ng-mode, ng-repeat и другие Angular создает $watch над этим значением. Далее, когда значение в области видимости изменится, все $watch'ы, наблюдающие за данным элементом, выполнятся, и обновится все остальное. 
Иногда, чаще всего, когда ты создаешь свои директивы, необходимо объявить собственные $watch, над переменными в области видимости, позволяющие директиве реагировать на изменения.
С другой стороны, когда ты изменяешь значение в области видимости, но приложение не реагирует. Angular проверяет изменение переменных в области видимости после того, как код отработал, например когда срабатывает ng-click, то Angular проверит изменения и отреагирует. Тем не менее, код вне Angular, должен самостоятельно вызвать метод scope.$apply(), чтоб произвести обновление.  Обычно это требуется в обработчиках событий в кастомных директивах.

Использование ng-repeat с другими директивами

ng-repeat - наиболее полезная и одна из самых мощных директив в Angular. Однако преобразование  DOM является трудоемким процессом. Поэтому применение других директив (ng-show, ng-hide, ng-controlle и др) к тому же элементу, что и ng-repeat может привести к проблемам. Если необходимо применить директиву ко всему объекту ng-repeat, оберните его в родительский элемент и примените директиву к нему. Если необходимо применить директиву к каждому элементу - примените директиву к элементу с ng-repeat.

$rootScope существует, но может создать проблемы

Области видимости в Angular формируются иерархично, наследуясь от основной области видимости верхушки дерева. Обычно, это можно игнорировать, т.к. у каждого вью имеют контроллеры, у которых есть своя область видимости.
Изредка,  есть данные, которые необходимо сделать глобальными для всего приложения. Для этого можно проинжектить $rootScope и установить в значение в нем, как в других областях видимости. Поскольку области наследуются от корневой области, эти значения будут доступны  директивам, таким как ng-show так же как значения в локальной $scope.
Конечно, использовать глобальное состояние плохо, а потому стоит использовать $rootScope с умом, как вы бы (надеюсь) обращались с глобальными переменными в любом другом языке. В частности, не используйте их для кода, только в данных. Если будет желание вставить функцию на $rootScope, то почти всегда лучше поместить его в сервис, который может быть инжектирован где это необходимо, и легко протестирован. С другой стороны, не создавайте сервис, чья единственная цель хранение и возврат бита данных.

PS мой перевод данной статьи

среда, 16 ноября 2016 г.

Предлоги

Предлоги можно разделить на Предлоги Времени и Предлоги Места

Предлоги места

Предлоги места обозначают положение в пространстве и направление, отвечают на вопрос: где? Можно выделить следующие предлоги:
  • in -  внутри, в
  • on - на
  • at - у, за
  • across - через, по ту сторону
  • under - под
  • by - около, у
  • behind - за, позади
  • over - над
Употребление:
In: Предмет находится в пределах большого пространства или внутр огороженного пространства.
We're in Greece - Мы в Греции. (В пределах большого пространства)
She can sleep in my room. Она может спать в моей комнате. (Внутри комнаты)
My money was  in the car. Мои деньги были в машине. (Внутри машины)

At: Предмет находится в конкретном месте или вблизи чего-либо
Her car was at the airport. Ее машина была в аэропорту. (На территории аэропорта, но не в самом здании)
We'll meet at my aparment. Мы встретимся у моей квартиры. (У входа в квартиру, а не в ней)
My car is at the garage. Моя машина у гаража. (У входа в гараж, в не в нем)

On: Предмет находится на поверхности чего-либо.
His ring was on the floor. Его кольцо было на полу.
Your name was on the envelope. Твое имя было на конверте.
His picture was on the wall. Его картина была на стене.

Предлоги времени

Могут указывать на точное время, на начало или конец действия, на период времени.
In: употребляется, когда речь идет о долгом периоде времени.
  1. Год или месяц: in 1999, in May
  2. Время дня, года: in the autumn, in the morning
  3. Столетие или определенный период. in the stone age, in the 16th centure, in the future
  4. Что-то произойдет через некоторое время. in a few minutes, in an hour, in two days.
On: употребляется  с датами и днями недели.
on Monday, on 14th of August. 
At: употребляется, когда речь идет о коротком промежутке времени
  1. Время по часам. at 3 o'clock
  2. В короткие промежутки времени. at the moment, at breakfast

воскресенье, 13 ноября 2016 г.

Future Continuous

Используется, чтобы рассказать о:

  1.  Длительном действии в будущем, которое будет продолжаться некоторое время.(This time tomorrow I will be lying on the beatch.)
  2. Действии, которое гарантированно произойдет. (She will be studying at University in September.)


Вопрос Утверждение Отрицание
Will she be leaving next Friday? Will be + глагол c окончанием ing
We will be travelling.
I will not be travelling next winter.

Past Continuous

Используется:

  1. Если мы говорим о длительном действии, которое происходило в прошлом. (I was watching TV at 8 pm.)
  2. Говорим о длинно действии в прошлом, которое было прервано более коротким действием. (When she came, I was talking to my friend.)
  3. Мы говорим о двух действиях, которые происходили в прошлом одновременно.В этом случае чаще всего используется слово while. (Jane was slipping, while Robert was cooking lunch.)
  4. Мы употребляем наречие always/constantly, для того, чтобы выразить раздражение. (She was always talking. It was driving me crazy.)
Формы:
Вопрос Утверждение Отрицание
Was I listening to the music, when he came?
Were we discussing the plans?
I, he, she it + was + глагол с окончанием ing
you, we, they + were + глагол с окончанием ing
I was reading a book.
I, he, she it + was + not + глагол с окончанием ing
you, we, they + were + not + глагол с окончанием ing
I was not reading a book.

суббота, 12 ноября 2016 г.

Present Continuous


Используется:
  1. Для обозначения действий, которые происходят в данный момент (I am reading a book now. My sister is leaving with me right now).
  2. Для обозначения действий, которые развиваются в данный момент. (The climate is getting warmer.)
  3. Для обозначения будущих планов. (She is playing tennis on Sunday moning.)
  4. Для выражения недовольства с наречиями always, constantly. (You are always comming late)
  5. Со словами: now, at the moment, nowadays. (At the moment I am waiting for you.)
Формы:

Вопрос Утверждение Отрицание
Am I doing this right? Предмет + глагол to be + глагол+ing
I'm reading.
He(she, it) is reading
You are reading.
I am not writing a test right now.

Правила добавления окончания -ing:

  1. Если глагол заканчивается на -е, которая не читается, ее нужно убрать: receive-receiving.
  2. Если слово заканчивается на ударный слог -последняя буква удваивается. run-running, begin-beginning.
  3. В британском английском, удваивается буква L. cancel-cancelling
  4. Если глагол заканчивается на -ie, то окончание заменяется на -y.die-dying, tie-tying
  5. Если слово заканчивается на -c, то заменяется на -ck. panic-panicking

вторник, 8 ноября 2016 г.

@RestController vs. @Controller


Spring MVC и REST 

Spring - MVC фреймфорк, использующий аннотации, которые позволяют облегчить процесс создания RESTfull веб-сервиса. Основная разница между традиционным Spring MVC контроллером и RESTfull веб-сервис контроллером заключается в способе создания тела HTTP ответа. MVC контроллер опирается на технологию View, а RESTfull веб сервис контроллер  возвращает объект, который представляется в HTTP ответе  в виде JSON или XML. Для более подробного описания перейдите на эту ссылку.

Схема работы Spring MVC

  1. Клиент отправляет запрос к веб-сервису.
  2. Запрос перехватывается DispatcherServlet, который ищет Handler Mappings и соответствующий тип.
  3. Запрос обрабатывается контроллером и результат передается DispatcherServlet, а потом перенаправляется во view.

Использование @ResponseBody 

Когда вы используете аннотацию @ResponseBody для метода, Spring автоматически записывает результат в тело http ответа. Каждый метод в контроллере должен иметь данную аннотацию. Схема работы представлена на рисунке 1.
Рисунок 1.

Что происходит внутри

У Spring есть список HttpMessageConverters. HttpMessageConverter обязан конвертировать тело запроса к определенному классу и и класс к телу ответа, в зависимости от типа. Каждый раз, когда происходит запрос с аннотацией @ResponseBody, Spring ищет  среди всех HttpMessageConverters подходящий и использует его.

Пример

Рассмотрим POJO класс:

import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "Employee")
public class Employee {
    String name; 
    String email;
    public String getName() {
       return name;
    }
    public void setName(String name) {
      this.name = name;
    }
    public String getEmail() {
       return email;
    }
    public void setEmail(String email) {
      this.email = email;
    }
    public Employee() {
    } 
}
И класс с аннотацией @Controller:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.example.spring.model.Employee;
@Controller
@RequestMapping("employees")
public class EmployeeController {
    Employee employee = new Employee();
    @RequestMapping(value = "/{name}", method = RequestMethod.GET, produces = "application/json")
    public @ResponseBody Employee getEmployeeInJSON(@PathVariable String name) {
       employee.setName(name);
       employee.setEmail("employee1@genuitec.com");
    return employee; 
    }
    @RequestMapping(value = "/{name}.xml", method = RequestMethod.GET, produces = "application/xml")
    public @ResponseBody Employee getEmployeeInXML(@PathVariable String name) {
       employee.setName(name);
     employee.setEmail("employee1@genuitec.com");
       return employee; 
    }
}
В результате получим:
JSON: http://localhost:8080/SpringRestControllerExample/rest/employees/Bob

XML: http://localhost:8080/SpringRestControllerExample/rest/employees/Bob.xml

Использование аннотации @RestController

В Spring 4.0 была представлена аннотация @RestController. Применив ее к контроллеру добавляются аннотации @Controller, а так же @ResponseBody применяется ко всем методам. Подробнее можно почитать здесь. Схема работы на рисунке 2.
Рассмотрим этот же пример, но с новой аннотацией, POJO- класс не изменится, а контроллер примет следующий вид:

package com.example.spring.rest;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.example.spring.model.Employee;
@RestController
@RequestMapping("employees")
public class EmployeeController {
    Employee employee = new Employee();
    @RequestMapping(value = "/{name}", method = RequestMethod.GET, produces = "application/json")
    public Employee getEmployeeInJSON(@PathVariable String name) {
       employee.setName(name);
       employee.setEmail("employee1@genuitec.com");
       return employee;
    }
    @RequestMapping(value = "/{name}.xml", method = RequestMethod.GET, produces = "application/xml")
    public Employee getEmployeeInXML(@PathVariable String name) {
       employee.setName(name);
       employee.setEmail("employee1@genuitec.com");
    return employee; 
    } 
}
Заметьте, что не нужно добавлять @ResponseBody к каждому методу. Запустив приложение - получим тот же результат.

PS это мой  перевод данной статьи

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

Future Simple

Используется:

  1. Факты и утверждения о будущем. (It will be summer soon.)
  2. Решения, которые были приняты спонтанно, в момент разговора. (I will have some coffee and  my friend will have some tea, please)
  3. Предсказания или прогнозы, о том, что может произойти, обычно, используются следующие выражения: I think, I believe, I am sure (I think it will be sunny tomorrow.)
  4. Выражение стремлений, желаний, обещаний, предложений, угроз, просьб. (I promise I will help you to fix your car.)
  5. Используются слова: next week(year, etc), tomorrow, tonight, in two minutes(in a year, etc), soon.( I will see you tomorrow)
Формы:

Вопрос Утверждение Отрицание
When will she be there?
Shall I open window? (Shall используется, чтобы вежливо спросить о чем то. Shall только с I или We)
I will go home.
We will see you tomorrow
will not/won't
I won't (will not) buy tickets for you.

Past Simple

Используется:

  1. Когда говорим о событии, которое произошло в определенный момент в прошлом (Yesterday I lost my book)
  2. Если рассказывается о событии, которое началось и закончилось в прошлом. (The top teams practiced all year  to prepare for the bi event)
  3. Для описания действия в прошлом. (I visited me parents and talked to Pat)
  4. Для описания действий, которые повторялись в прошлом. (I went to school in Brooklyn)
  5. Со словами yesterday, last week, last month, to years ago, in 2000 (I lived in Spaine last year.)
К правильным глаголам в прошедшем времени добавляется -ed или -d
  • Если глагол заканчивается на -e, то к нему добавляется -d ( live - lived). 
  • Если глагол заканчивается на другую букву - добавляется -ed (watch - watched).
  • Если глагол заканчивается на согласную + y, то добавляется -ed и y заменяется на i (study - studies)
  • Так же есть неправильные глаголы, для них необходимо использовать вторую форму.


Вопрос Утверждение Отрицание
When did she find new friends I lived in Spaine last year. I went to school in Brooklyn. I didn't like onion when I was a child.

четверг, 3 ноября 2016 г.

Present Simple.


Используется:

  1. Для того, чтобы рассказать о действия, которые стали привычкой (I brush my teeth twice a day)
  2. Что бы рассказать о явлениях природы,неопровержимых фактах (Water freezes at zero degrees)
  3. Неважно, когда происходит действие, относительно момента высказывания (I don't eat discuits. I live in Russia)
  4. Если в предложении есть слова: Every day, Every... , Usually..., Always...,  Often.., on Monday (I often play basketball)
Форма

Вопрос Утверждение Отрицание
Does употребляется с hi, she, it
Do употребляется с I, you, we, they
Do you have a ball?
Why does he watch TV?
I leave alone
He leaves alone
She leaves alone
do not (don't) употребляется  I, You, We, They
does not (doesn't) He, She, It
I do not have a children
She does not have a children
Исключения:

  1. После He, she, it для слов оканчивающихся на: -o, -ch, -sh,-x,-s,-z добавляется -es
  2. Если глагол заканчивается на -y и перед ней стоит согласная, то y меняется на -i и добавляется -es (try - tries)
  3. Если глагол заканчивается на -y и перед ней стоит гласная, то добавляется -s (say - says)

AngularJs ng-option

Пользователю часто предоставляется выбор одно значения из многих, для этого удобно использовать   тэг <select>, все бы хорошо, но, логично, что то что мы показываем пользователю напрямую не может уйти в бэкэнд, для этого этого нам пригодится директива ng-option:

<select ng-model="dsInfo.settings.dataBaseType"
                  ng-options="type.value as type.name for type in dataBaseTypes"
                  required="true"/>

Что же тут происходит?!


  1. in работает, как директива  в ng-repeat
  2. for type - алиас, по которому можно будет обращаться к иттерируемому  объекту
  3. type.value будет устанавливать в модель, в данном случае dsInfo.settings.dataBaseType
  4. as type.name - то что будет показываться пользователю

суббота, 29 октября 2016 г.

Глагол to be Часть 2


В первой части было разобрано настоящее время, сейчас прошлое и будущее
Будущее:
Вопрос/Утверждение/Отрицание

Вопрос Утверждение Отрицание
Will you be busy? You will be busy You will not be busy
Will he be busy? He will be  busy He will not be busy
Will they be busy? They well be busy They will not be busy

Прошлое:
Вопрос Утверждение Отрицание
Were you busy? You were busy I were not busy
Was he  busy? He was  busy He was not busy
Were they busy? They were busy They were not busy

четверг, 27 октября 2016 г.

AngularJs ng-repeat

Рассмотрим директиву ngRepeat.
Это обычный итератор по списку,  пример:
<div ng-repeat="i in [1,2,3,4,5]">{{i}}</div>
Вывод будет следующий: 12345
У данной директивы есть набор свойств, к которым можно обратить в области видимости данной директивы(в примере выше - до тега </div> )
Параметр Описание
$index Порядковый номер элемента [0 - length-1]
$first Возвращает true если первый элемент
$last Возвращает true если последний элемент
$middle Возвращает true если не первый и не последний элемента
$even true если четный элемент
$odd trye если нечетное число

Очень удобно с помощью данной директивы строить таблицы:
<table>
        <tr  >
            <th />
            <th ng-repeat="dayOfWeek in scheduleResult.dayOfWeeks" >
                {{dayOfWeek}}</th>

        </tr>
        <tr ng-repeat="recordElement in scheduleResult.recordDates" >
            <td >{{recordElement.date|date:'HH:mm'}}</td>
            <td ng-repeat="empty in recordElement.empties track by $index" ng-class="classStyle(empty)"
                ng-click="addRecord($index, recordElement.date, 'block', empty, scheduleResult.recordDates.indexOf(recordElement) );">{{empty}}</td>



        </tr>
    </table>
В recordElement.empties хранится массив, состоящий из true или false, в этом случае приходится использовать перебор по индексу track by $index", иначе будет ошибка Error: [ngRepeat:dupes]

Глагол to be Часть 1

Глагол to be используется для замены глагола действия, в тех предложениях, где его нет (Он бездельник - He is loafer [lōfər] - Он есть бездельник ). Так же используется во временах Continuous (to be + глагол + ing)

Формы:
  1. I - am (I'm)
  2. He, She, It - is (He's)
  3. We, They, You - are (We're)
Вопрос/Утверждение/Отрицание

Вопрос Утверждение Отрицание
Are you busy? I am (I'm) busy I am not(I'm not) busy
Is he busy? He is (He's) busy He is not(he's not / He isn't) busy
Are they busy? They are (They're) busy They are not(They're not / They aren't) busy


среда, 26 октября 2016 г.

Добавить Jar-файл в локальный репозиторий Maven


Иногда приходится закидывать либы в локальный репозиторий, чтобы не искать решил сохранить код здесь:

mvn install:install-file -Dfile=<path-to-file>.jar -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=jar