четверг, 30 января 2014 г.

SOLID,-DRY,-KISS,-YAGNI,-GRASP

Cool online book about linux

Еще инсайты о скрине

Убить сессию снаружи со всеми окнами:
screen -S screen -X quit
Или изнутри
Ctrl+a :remove

-X command  -- послать снаружи скрину специальную команду

Ctrl-D  -- kill tab in Ubuntu



You can do it in screen the terminal multiplexer.
  • To split vertically: ctrla then |.
  • To split horizontally: ctrla then S (uppercase one).
  • To unsplit all: ctrla then Q (uppercase one).
  • To unsplit one: ctrla then X (uppercase one).
  • To switch from one to the other: ctrla then tab
Note: After splitting, you need to go into the new region and start a new session via ctrla then cbefore you can use that area.
EDIT, basic screen usage:
  • New terminal: ctrla then c.
  • Next terminal: ctrla then space.
  • Previous terminal: ctrla then backspace.
  • N'th terminal ctrla then [n](works for n∈{0,1…9})
  • Switch between terminals using list: ctrla then " (useful when more than 10 terminals)
  • Send ctrla to the underlying terminal ctrla then a.

Расширенное создание/копирование файлов, со всеми правами и т.д.

Утилита для копирования файлов с установкой атрибутов

install --directory --mode=0755 --owner=root --group=root /etc/profile.d

Создали папку /etc/profile.d, собственник рут, група папки тоже рут, указаны также права чтения/записи/выполнения

http://linux.about.com/library/cmd/blcmdl1_install.htm

Мультистрочный записть в файл из консоли

Перетереть все что есть в файле(создать файл):
$ cat > /path/to/myfile << "EOF"
line1
line2
...
lineN
EOF

Добавить строки в конец файла:
$ cat >> /path/to/myfile << "EOF"
line1
line2
...
lineN
EOF

воскресенье, 26 января 2014 г.

MongoDB Updating: update and remove

Курсор

В монго также есть понятие курсора.
cur = db.people.find();null;//нал в конце обеспечивает, что выборка не начинается мгновенно
cur.hasNext();
cur.next();
while(cur.hasNext()) printjson(cur.next());

cur.limit(5);null;
cur.sort({name: -1});null;

limit, skip и sort могут быть применены только сразу после получения курсора. Их эффект срабатывает на стороне сервера, а не клиента, то есть по сети летит именно готовый результат ограничения и сортировки, а не все как есть, а потом на стороне клиента он обрезается.
Эти команды срабатывают только до момента когда курсор подвинулся (до вызова hasNext & next).

cur.sort().limit(5).skip(2);null;

db.scores.find({type: "exam"}).sort({score: -1}).skip(50).limit(20);

Доказательство того, что все происходит на стороне сервера, можно увидеть с помощью команды skip:
> cur.sort({ name: -1}).limit(3).skip(2); null;
> while (cur.hasNext()) printjson(cur.next());
{"id" : ...}
{"id" : ...}
{"id" : ...}


Если бы это выполнялось бы на клиенте, мы бы увидели один результат, мы же видим три - просто из сортировки были выкинуты первые два результата, предоставлены последующие три.

Counting

db.score.count({type: "exam"});

Редактирование

Апдейт в MongoDB делается только на одно поле, если селектору подходят много, то изменяется только первый документ/рекорд.

Обновление документа целиком

db.people.update(selector, exact_replasor);
Все документы прошедшие фильтрацию потеряют все свои поточные поля кроме _id и получать только те, которые находятся в exact_replasor.

Обновление $set

А так мы можем изменить только конкретные поля документа:
exact_replasor = {
  $set: {
     age: 31
  }
};

exact_replasor = {
  $inc: {
     age: 1
  }
};

Upsets 

- директива, которая при установленном флаге в тру, создает новую запись и обеспечивает ее указанными для обновления свойствами, если ни одна запись не подошла селектору, если же подошла, то изменяются существующие.
db.foo.update({username:'bar'}, {'$set':{'interests':['cat', 'dog']}}, {upsert: true} );
При этом в новосозданную запись вставляются также поля фильтра(селектора). Тоесть допустим у нас в коллекции не оказалось юзернейм с именем бар, тогда в коллекцию вставится следующая запись:
{ "_id" : ObjectId("507b78232e8dfde94c149949"), "interests" : [ "cat", "dog" ], "username" : "bar" }

Multi-update

Но все же возможно и заапдейтить несколько документов, для этого нужно указать директиву.
db.people.update({}, {'$set':{'title': 'Dr'}}, {multi: true} );
{} - под этот селектор подходят все документы.
Мульти редактирование не атомарно - в монго только один сред отвечает за изменения в базу, при мульти изменяется 10 записей и лок возвращается, что другие запросы на запись могли сработать и потом он продолжается и так пока все поля подошедшие под селектор не обновятся.
Эти паузы совуться йилдинг ( pausing is called yeilding).
Если нам нужна транзакционность, нам нужно ее организовывать на уровне приложения и работать через приложение.

Removing

.remove(selector) - удаляет один за одним подошедшие документы, если мы не указываем селектор, удаляются все, но опять же один за одним, при этом их метадата(индексы) может оставаться на диске. Тут таже история, что и мультиапдейт - по десять и делаются паузы для передачи котнроля другим правкам. Единственный способ удалить только некоторые документы из колекции.
.drop() - одним махом удаляет все документы коллекции, намного эффективнее по-элементного удаления. По-идее это атомарная операция. Этим способом мы не можем удалить только некоторые документы коллекции - метод не принимает селектор.

Удаление определенных полей в документах

db.people.update($selector, { $unset: {field1: 1, feld2: 1}});

Правка массивов

i-го элемента(в данном случае 3-го)
db.colect.update(selector, {$set: {"arrname.3": 5}})
Добавление в конец
db.colect.update(selector, {$push: {"arrname": 6}})
Удалить последних N
db.colect.update(selector, {$pop: {"arrname": N}})

Удалить первых N(за счет -N)
db.colect.update(selector, {$pop: {"arrname": -N}})

Удалить по значению
db.colect.update(selector, {$pull: {"arrname": "this_val_will_be_removed"}})

Удалить несколько $pullAll
Добавить, если только элемента нет в массиве - $addToSet

вторник, 21 января 2014 г.

Как понять что произошло с базой в результате последней команды

Для этого существует команда, которая выведет что произошло от применения предыдущей до нее команды. Если была ошибка, мы увидим конкретику:
db.runCommand({ getLastError : 1 });

Эта команда наверно самая полезная когда мы делаем апдейт с директивой апсерта, она даст нам понять был ли изменен существующий документ или создан новый.

воскресенье, 19 января 2014 г.

MongoDB выборка

CRUD      MongoDB       SQL
Create        Insert               Insert
Read           Find                Select
Update        Update           Update
Delete         Remove           Delete


Команды:
db - показать поточную базу.


db.people.{action}
db - key word
people - collection (like table in sql)


четверг, 16 января 2014 г.

Архиватор с шифрованием gpg. Как розархивировать.

$ gpg --output destination --decrypt sourcefile.gpg

среда, 15 января 2014 г.

Оценка использования дискового пространства

Вывести 10-ть самых тяжелых в системе:

# du -a / | sort -n -r | head -n 10


А вот пример для поточной директории

du -hsx * | sort -rh | head -10

  • du command -h option : display sizes in human readable format (e.g., 1K, 234M, 2G).
  • du command -s option : show only a total for each argument (summary; не углубляться и не расписывать все деревья поддиректорий).
  • du command -x option : skip directories on different file systems.
  • sort command -r option : reverse the result of comparisons.
  • sort command -h option : compare human readable numbers. This is GNU sort specific option only.
  • head command -10 OR -n 10 option : show the first 10 lines.

вторник, 14 января 2014 г.

oracle jdk installation ubuntu

http://askubuntu.com/questions/56104/how-can-i-install-sun-oracles-proprietary-java-6-7-jre-or-jdk

http://askubuntu.com/questions/56104/how-can-i-install-sun-oracles-proprietary-java-6-7-jre-or-jdk/68227#68227


Более автоматический способ (тоже есть среди приведенных выше):
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update

  • sudo apt-get install oracle-java6-installer
  • sudo apt-get install oracle-java7-installer
  • sudo apt-get install oracle-java8-installer

NB: These packages provide Oracle Java JDK, which includes Java JDK, JRE and the Java browser plugin. And the webupd8team/java PPA contains only these installers, which simply connect to Oracle Java download site and install the latest JDK.


Переключаться между версиями:
sudo update-java-alternatives -s java-7-oracle

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

source ~/.bashrc

Чтобы сразу применить изменения в ~/.bashrc, не перезапуская терминал -
$ source ~/.bashrc

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

Как перенаправить аутпут из консоли mysql в какой-нибудь файл?


mysql> tee ~/somefile.txt
Logging to file '~/somefile.txt'

mysql> select * from something where smth like "Special" \G
.....output to console which will be save in file as well.....

mysql>notee
Команда notee перестает аутпут выводить в файл