Document​.evaluate()

Returns an XPathResult based on an XPath expression and other given parameters.

SyntaxSection

var xpathResult = document.evaluate(
  xpathExpression,
  contextNode,
  namespaceResolver,
  resultType,
  result
);
  • xpathExpression is a string representing the XPath to be evaluated.
  • contextNode specifies the context node for the query (see the XPath specification). It’s common to pass document as the context node.
  • namespaceResolver is a function that will be passed any namespace prefixes and should return a string representing the namespace URI associated with that prefix. It will be used to resolve prefixes within the XPath itself, so that they can be matched with the document. null is common for HTML documents or when no namespace prefixes are used.
  • resultType is an integer that corresponds to the type of result XPathResult to return. Use named constant properties, such as XPathResult.ANY_TYPE, of the XPathResult constructor, which correspond to integers from 0 to 9.
  • result is an existing XPathResult to use for the results. null is the most common and will create a new XPathResult

ExampleSection

var headings = document.evaluate("/html/body//h2", document, null, XPathResult.ANY_TYPE, null); 
/* Search the document for all h2 elements.  
 * The result will likely be an unordered node iterator. */
var thisHeading = headings.iterateNext(); 
var alertText = "Level 2 headings in this document are:\n";
while (thisHeading) {
  alertText += thisHeading.textContent + "\n";
  thisHeading = headings.iterateNext();
}
alert(alertText); // Alerts the text of all h2 elements

Note, in the above example, a more verbose XPath is preferred over common shortcuts such as //h2. Generally, more specific XPath selectors as in the above example usually gives a significant performance improvement, especially on very large documents. This is because the evaluation of the query spends does not waste time visiting unnecessary nodes. Using // is generally slow as it visits every node from the root and all subnodes looking for possible matches.

Further optimization can be achieved by careful use of the context parameter. For example, if you know the content you are looking for is somewhere inside the body tag, you can use this:

document.evaluate(".//h2", document.body, null, XPathResult.ANY_TYPE, null);

Notice in the above document.body has been used as the context instead of document so the XPath starts from the body element. (In this example, the "." is important to indicate that the querying should start from the context node, document.body. If the «.» was left out (leaving //h2) the query would start from the root node (html) which would be more wasteful.)

See Introduction to using XPath in JavaScript for more information.

NotesSection

  • XPath expressions can be evaluated on HTML and XML documents.
  • While using document.evaluate() works in FF2, in FF3 one must use someXMLDoc.evaluate() if evaluating against something other than the current document.

Result typesSection

(Merge with Template:XPathResultConstants?

These are supported values for the resultType parameter of the evaluate method:

Result TypeValueDescription
ANY_TYPE0Whatever type naturally results from the given expression.
NUMBER_TYPE1A result set containing a single number. Useful, for example, in an XPath expression using the count() function.
STRING_TYPE2A result set containing a single string.
BOOLEAN_TYPE3A result set containing a single boolean value. Useful, for example, an an XPath expression using the not() function.
UNORDERED_NODE_ITERATOR_TYPE4A result set containing all the nodes matching the expression. The nodes in the result set are not necessarily in the same order they appear in the document.
ORDERED_NODE_ITERATOR_TYPE5A result set containing all the nodes matching the expression. The nodes in the result set are in the same order they appear in the document.
UNORDERED_NODE_SNAPSHOT_TYPE6A result set containing snapshots of all the nodes matching the expression. The nodes in the result set are not necessarily in the same order they appear in the document.
ORDERED_NODE_SNAPSHOT_TYPE7A result set containing snapshots of all the nodes matching the expression. The nodes in the result set are in the same order they appear in the document.
ANY_UNORDERED_NODE_TYPE8A result set containing any single node that matches the expression. The node is not necessarily the first node in the document that matches the expression.
FIRST_ORDERED_NODE_TYPE9A result set containing the first node in the document that matches the expression.

Results of NODE_ITERATOR types contain references to nodes in the document. Modifying a node will invalidate the iterator. After modifying a node, attempting to iterate through the results will result in an error.

Results of NODE_SNAPSHOT types are snapshots, which are essentially lists of matched nodes. You can make changes to the document by altering snapshot nodes. Modifying the document doesn’t invalidate the snapshot; however, if the document is changed, the snapshot may not correspond to the current state of the document, since nodes may have moved, been changed, added, or removed.

Origin
https://developer.mozilla.org/en-US/docs/Web/API/Document/evaluate

Анекдот

Поспорили штурман и главный механик чья должность на корабле важнее. Короче решили поменяться местами. Штурман в машинное, а механик на мостик.
Проходит время… К штурману подбегает матрос и кричит — Греется опорный подшипник коленвала!!!
— Штурман репу почесал и пошел к механику, а тот над картами склонился и тоже затылок задумчиво чешет.
— Слышь, у тебя там какой то подшипник греется у коленвала…
— Механик не глядя — Не мудрено, второй час по суше идем…

Основные команды Git

Шпаргалка с основными командами для Git

Конфигурация

git config --global user.name "[name]" — установить имя, которое будет прикрепляться к коммиту.

git config --global user.email "[email address]" — установить email, который будет прикрепляться к коммиту.

git config --global color.ui auto — включить полезную подсветку командной строки.

git config --global push.default current — обновлять удаленную ветку с таким же именем, что и локальная, при пуше изменений (если не указано иного).

git config --global core.editor [editor] — установить редактор для редактирования сообщений коммита.

git config --global diff.tool [tool] — установить программу для разрешения конфликтов при слиянии.

Создание репозиториев

git init [project-name] — создать новый локальный репозиторий с заданным именем.

git clone [url] — загрузить проект и его полную историю изменений.

Работа с изменениями

git status — полный список изменений файлов, ожидающих коммита.

git status -s — краткий вид изменений.

git diff — показать изменения в файлах, которые еще не были добавлены в индекс коммита (staged).

git add [file] — сделать указанный файл готовым для коммита.

git add . — сделать все измененные файлы готовыми для коммита.

git add '*.txt' — добавить только файлы, соответствующие указанному выражению.

git add --patch filename — позволяет выбрать какие изменения из файла добавятся в коммит.

git diff --staged — показать что было добавленно в индекс с помощью git add, но еще не было закоммиченно.

git diff HEAD — показать что изменилось с последнего коммита.

git diff HEAD^ — показать что изменилось с предпоследнего коммита.

git diff [branch] — сравнить текущую ветку с заданной.

git difftool -d — то же самое, что и diff, но показывает изменения в заданной difftool.

git difftool -d master.. — показать изменения, сделанные в текущей ветке.

git diff --stat — показать статистику какие файлы были изменены и как.

git reset [file] — убрать файлы из индекса коммита (изменения не теряются).

git commit — записать изменения в репозиторий. для написания сообщения откроется назначенный редактор.

git commit -m "[descriptive message]" — записать изменения с заданным сообщением.

git commit --amend — добавить изменения к последнему коммиту.

Работа с ветками

git branch — список всех локальных веток в текущей директории.

git branch [branch-name] — создать новую ветку.

git checkout [branch-name] — переключиться на указанную ветку и обновить рабочую директорию.

git checkout -b <name> <remote>/<branch> — переключиться на удаленную ветку.

git checkout -- [filename] — вернуть файл в первоначальное состояние если он еще не был добавлен в индекс коммита.

git merge [branch] — соединить изменения в текущей ветке с изменениями из заданной.

git merge --no-ff [branch] — соединить ветки без режима “fast forwarding”.

git branch -a — посмотреть полный список локальных и удаленных веток.

git branch -d [branch] — удалить заданную ветку.

git branch -D [branch] — принудительно удалить заданную ветку, игнорируя ошибки.

git branch -m <oldname> <newname> — переименовать ветку.

Работа с файлами

git rm [file] — удалить файл из рабочей директории и добавить в индекс информацию об удалении.

git rm --cached [file] — удалить файл из репозитория, но сохранить его локально.

git mv [file-original] [file-renamed] — изменить имя файла и добавить в индекс коммита.

Отслеживание файлов

.gitignore — текстовый файл, в котором задаются правила для исключения файлов из репозитория. Например:

  • *.log
  • build/
  • temp-*

git ls-files --other --ignored --exclude-standard — список всех игнорируемых файлов.

Сохранение фрагментов

git stash — положить во временное хранилище все отслеживаемые файлы.

git stash pop — восстановить последние файлы, положенные во временное хранилище.

git stash list — список всех сохраненных изменений во временном хранилище.

git stash drop — удалить последние файлы, положенные во временное хранилище.

Просмотр истории

git log — список изменения текущей ветки.

git log --follow [file] — список изменения текущего файла, включая переименования.

git log --pretty=format:"%h %s" --graph — изменение вида отображения истории изменений.

git log --author='Name' --after={1.week.ago} --pretty=oneline --abbrev-commit — посмотреть над чем работал заданный пользователь последнюю неделю.

git log --no-merges master.. — посмотреть историю изменений только для текущей ветки.

git diff [file-branch]..[second-branch] — посмотреть различия между двумя заданными ветками.

git show [commit] — показать метадату и изменения в заданном коммите.

git show [branch]:[file] — посмотреть на файл в другой ветке, не переключаясь на неё.

Отмена коммитов

git reset — убрать изменения из индекса коммита, сами изменения останутся.

git reset [commit/tag] — отменить все коммиты после указанного коммита, изменения будут сохранены локально.

git reset --hard [commit] — принудительно вернутся к указанному коммиту, не сохраняя историю и изменения.

Синхронизация изменений

git fetch [remote] — загрузить всю историю с заданного удаленного репозитория.

git merge [remote]/[branch] — слить изменения локальной ветки и заданной удаленной.

git push — запушить текущую ветку в удаленную ветку.

git push [remote] [branch] — запушить ветку в указанный репозиторий и удаленную ветку.

git push [remote] :[branch] — в удаленном репозитории удалить заданную ветку.

git push -u origin master — если удаленная ветка не установлена как отслеживаемая, то сделать ее такой.

git pull — загрузить историю и изменения удаленной ветки и произвести слияние с текущей веткой.

git pull [remote][branch] — указать конкретную удаленную ветку для слияния.

git remote — посмотреть список доступных удаленных репозиториев.

git remote -v — посмотреть детальный список доступных удаленных репозиториев.

git remote add [remote][url] — добавить новый удаленный репозиторий.

Анекдот

Тестировщик заходит в бар и заказывает:

кружку пива,
2 кружки пива,
0 кружек пива,
999999999 кружек пива,
ящерицу в стакане,
–1 кружку пива,
qwertyuip кружек пива.

Первый реальный клиент заходит в бар и спрашивает, где туалет. Бар вспыхивает пламенем, все погибают.

Про гит

Две полезные ссылки про git: https://ohshitgit.com/ и https://git-scm.com/book/en/v2.

Третья полезная ссылка про гит https://github.com/k88hudson/git-flight-rules

Нужно выучить 2 команды: git rebase —interactive и git cherry-pick.) И гит — под абсолютным контролем независимо от неправильных действий выполненных до этого.)

После изучения git rebase придется учить git reflog. С другой стороны это одна из самых полезных команд.

Вот еще хорошая подборка идиом: https://github.com/k88hudson/git-flight-rules

WinAmp возвращается

Медиаплеер Winamp не обновлялся с декабря 2013 года. Теперь он станет мобильным приложением. Сейчас музыкальный проигрыватель принадлежит компании Radionomy Group из Нидерландов. В 2019 году они представят его новую версию. Это будет платформа, которая позволит прослушивать в одном месте все аудиофайлы: музыку с мобильного устройства и из облачных сервисов, подкасты, стриминговые радиостанции и плейлисты.

При запуске новой версии Winamp разработчики рассчитывают на «сильное сообщество», которое насчитывает до 100 миллионов пользователей в месяц, причем многие из них живут за пределами США. «Пользователи Winamp действительно повсюду. Огромное количество. У нас по-настоящему большое и сильное сообщество», — сказал Сабунджян. Последние годы именно пользователи поддерживали проект, выпуская неофициальные обновления для Winamp.

Планируется выпустить Winamp для iOS и Android. Оригинальный Winamp для компьютеров также будет обновлен. В сентябре в сети появилась версия 5.8, которая официально выйдет 18 октября. Она, в частности, решает проблему совместимости с компьютерами на базе Windows 10 и исправляет существующие ошибки. Также в этой версии стали бесплатными все функции, ранее доступные в платной версии Winamp Pro.

Java жрет память

Что делать, если приложение написанное на Java жрет много оперативки? Может быть это ваш случай:

(где-то на хабре была байка, что один опытный разработчик начинал все программы с похожей строчки, а когда начальство жаловались, что памяти не хватает и надо оптимизировать код, уменьшал в ней число ;)

static int a[1024*1024*1024/sizeof(int)];

Java, работа с датой

Форматирование даты.
Преобразование даты в строку по формату.
увеличение даты на дни, недели или часы.


Date dateNow;
dateNow = new Date();
SimpleDateFormat formatDate = new SimpleDateFormat("yyyyMMddHHmmssSSS");
SimpleDateFormat formatDate1 = new SimpleDateFormat("dd MM yyyy");
String newDeviceImei = formatDate.format(dateNow);
String startDate = formatDate1.format(dateNow);
Calendar c = Calendar.getInstance();
c.setTime(dateNow);
c.add(Calendar.DATE, 30);
Date currentDatePlus = c.getTime();
String endDate = formatDate1.format(currentDatePlus);
String deviceModel = "Apple iPhone 8";

Git, как переименовать ветку

Сначала переименовываем локальную ветку:

>git branch -m old_name new_name

Затем, если нужно переименовываем ветку на сервере:

>git push origin :old_name
>git push -u origin new_name

Обратите внимание
— первая команда это удаление старой ветки;
— вторая — это пуш новой ветки с «закреплением» -u = —set-upstream;
— можно объединить эти две команды в одну
>git push -u origin :old_name new_name