Ярлыки

.htaccess (4) тестирование (8) шаблоны проектирования (3) css (5) Debian (6) docker (2) Doctrine2 (6) Git (6) html (4) java (6) javascript (13) jquery (11) LFS (3) linux (23) mac os (4) mod_rewrite (2) MSSQL (4) MySQL (18) ORM Doctrine (17) patterns (3) PDO (3) perl (7) PHP (64) PHPUnit (8) Python (15) SEO (2) Silex (1) SimpleXML (1) SQL (14) ssh (4) Ubuntu (24) Yii1 (1) Zend Framework (19) ZendFramework2 (8)

пятница, 16 декабря 2016 г.

Структуры данных.

  1. Массив (Array) - тип или структура данных в виде набора компонентов (элементов массива), расположенных в памяти непосредственно друг за другом. При этом доступ к отдельным элементам массива осуществляется с помощью индексации, то есть через ссылку на массив с указанием номера (индекса) нужного элемента. За счёт этого, в отличие от списка, массив является структурой данных, пригодной для осуществления произвольного доступа к её ячейкам.
  2. Множество (Set) — тип и структура данных в информатике, является реализацией математического объекта множество. Данные типа множество позволяют хранить ограниченное число значений определённого типа без определённого порядка. Повторение значений, как правило, недопустимо.
  3. Список (List) — это абстрактный тип данных, представляющий собой упорядоченный набор значений, в котором некоторое значение может встречаться более одного раза. Экземпляр списка является компьютерной реализацией математического понятия конечной последовательности. Экземпляры значений, находящихся в списке, называются элементами списка (item, entry, element); если значение встречается несколько раз, каждое вхождение считается отдельным элементом. Термином список также называется несколько конкретных структур данных, применяющихся при реализации абстрактных списков, особенно связных списков.
  4. Ассоциативный массив (Associative array)

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

Docker. OSX connect to the host from container (xdebug, mysql).

1. I use Docker for Mac 1.12.1 and wasn't able connect to the host from within container by gateway ip:
# docker exec -it my_container bash
root@container:/# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         172.19.0.1      0.0.0.0         UG    0      0        0 eth0
172.19.0.0      *               255.255.0.0     U     0      0        0 eth0
# mysql -uroot -p -h172.19.0.1
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on '172.19.0.1' (111)
The only solution I found was create an alias to local network interface:
# sudo ifconfig lo0 alias 10.254.254.254
# ifconfig
lo0: flags=8049 mtu 16384
 options=1203
 inet 127.0.0.1 netmask 0xff000000
 inet6 ::1 prefixlen 128
 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
 inet 10.254.254.254 netmask 0xff000000
 nd6 options=201
...
2. The next step is grant access to the db for user on binded ip
# mysql -uroot -p
...
mysql> GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY '';
3. Next we need bind mysql address to 0.0.0.0 (any ip), so open /etc/my.cnf and add or edit string:
bind-address=0.0.0.0
restart server
4. You should be able to connect to you host db from within the container now:
# docker exec -it my_container bash
# mysql -uroot -p -h10.254.254.254
...
mysql>
yep!

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

Math. Отношения, рефлексивность, симметричность, транзитивность.

а) «x + у - нечетное число»
1. Рефлексивность.
Чтобы отношение было рефлексивным, необходимо, чтобы для любого x из Z выполнялось: «x+x - нечётное число». x+x = 2x. Любое целое число, умноженное на два, является чётным. Следовательно, отношение не рефлексивно, более того, оно является антирефлексивным.
2. Симметричность.
Чтобы отношение было симметричным, необходимо, чтобы для любых x,y, для которых выполняется «x + у - нечетное число», следовало, что «у + x - нечетное число». От перестановки мест слагаемых сумма не изменяется, следовательно, и чётность не изменяется. Отношение является симметричным.
3. Транзитивность.
Чтобы отношение было транзитивным, необходимо, чтобы для любых x,y,z, для которых выполняется «x + у - нечетное число» и «y + z - нечетное число», следовало, что «x + z - нечетное число».
Возьмём x=1, y=2, z=3:
x+y=1+2=3 нечётное,
y+z=2+3=5 нечётное,
x+z=1+3=4 чётное.
Следовательно, отношение не является транзитивным.

среда, 20 июля 2016 г.

Math.

Factorial:

n! = 1 * 2 * 3 ... (n-1) * n
n! = (n - 1)! * n
0! = 1

Exponentiation:

am * an = am + n
am : bn = a m - n
(am)n = am * n
(a * b)m = am * bm
(a : b)m = am : bm

пятница, 3 июня 2016 г.

Jenkins + Github auth with keys.

Generate keys on Jenkins server (without passphrase):
$ ssh-keygen
Try to connect Github via ssh:
$ ssh -T git@github.com
The authenticity of host 'github.com (207.97.227.239)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? yes
Hi username/reponame! You've successfully authenticated, but GitHub does not provide shell access.
Notice that you're asked to allow github's hostname to be added to your known_hosts file: without completing this step, you're doomed. Use Git protocol link in Jenkins config:
git@github.com:username/reponame.git

пятница, 13 мая 2016 г.

Docker. Commands.

# build container
$ docker build -t mysite .

# run container
$ docker run -p 8080:80 -d -v /Users/dan/site:/var/www/site mysite
# -v map host directory to container

# delete all containers
$ docker rm $(docker ps -a -q)

# delete all images
$ docker rmi $(docker images -q)

# stop all containers
$ docker stop $(docker ps -a -q)

# run container in interactive mode with tty
$ docker run -i -t ubuntu /bin/bash

# debug container
$ docker run --name instance.project.com project.com
$ docker exec -it instance.project.com /bin/bash

Git. List files with git diff-tree.

git diff-tree -r 393751f286f3153e8c2bee8adfd27b533788425f d0049f627ab57040c0c63c71472c199a417cea6b | cut -d$'\t' -f2

# cut -d$'\t' -f2  - cut output string by tabs and get second segment

# list files in last commit
git log --oneline | head -n1 | cut -d' ' -f1 | xargs git diff-tree --no-commit-id --name-only -r
# cut -d' ' -f1    - cut output string by delimiter in -d param and get segment by number in -f param
# head -n1         - get first string from the top of the output
# xargs            - pass previous output as args to the command
# or
git rev-parse HEAD | xargs git diff-tree --no-commit-id --name-only -r

# list all but not deleted
git diff --name-only --diff-filter=ACMRTUXB HEAD^..HEAD

суббота, 26 марта 2016 г.

Javascript. Inheritance.

/************************** Parent ***************************/
// constructor
function Animal(name) {
 this.name = name;
  this.speed = 0;
}

// parent methods in prototype
Animal.prototype = {
 run: function (speed) {
   this.speed += speed;
    console.log(this.name + " runs with speed " + this.speed);
    return this;
  },
  stop: function () {
   this.speed = 0;
    console.log(this.name + " stopped");
    return this;
  }
}
/************************** Parent ***************************/
/************************** Child ****************************/
// constructor
function Rabbit(name) {
 Animal.apply(this, arguments); // apply parent's constructor
}

// inheritance
Rabbit.prototype = Object.create(Animal.prototype);
// http://stackoverflow.com/questions/8453887/why-is-it-necessary-to-set-the-prototype-constructor
Rabbit.prototype.constructor = Rabbit;

// methods of child
Rabbit.prototype.jump = function () {
 this.speed++;
  console.log(this.name + " jumps");
  return this;
};

// method overriding
Rabbit.prototype.run = function (speed) {
 Animal.prototype.run.apply(this, arguments);
  this.jump();
  return this;
};
/************************** Child ****************************/

var rabbit = new Rabbit("Jack").run(10).stop();

console.log(rabbit instanceof Animal);
console.log(rabbit instanceof Rabbit);

вторник, 22 марта 2016 г.

PHP. Handle file_get_contents errors as Exception.

Below is the way to handle "file_get_contents" errors as ErrorExceptions:
set_error_handler(
    function ($errno, $errstr, $errfile, $errline) {
        throw new \ErrorException(
            $errstr, 0, $errno, $errfile, $errline
        );
    }
);

$contents = file_get_contents(
    $uri, false, $context
);

restore_error_handler();