Метка «workaround»

Выборка из обновляемых материализированных представлений в PostgreSQL 9.3
Здравствуйте, читатели! Вы, вероятно, уже пощупали материализированные представления, появившиеся в PostgreSQL 9.3. Одним из недостатков есть то, что в процессе обновления представления используется эксклюзивная (ACCESS EXCLUSIVE) блокировка, делающая невозможным запросы к представлению. В PostgreSQL 9.4 планируется добавить возможность чтения из представления во время его обновления. Ну, а пока, в этой небольшой заметке, я хочу показать один из способов выхода из этого положения.
Читать полностью »

Добрый день.
Я около года работаю с Ruby и хотел бы написать о некоторых вещах, которых лично мне там часто не хватает, и которые я хотел бы видеть встроенными в язык. Пожалуй лишь пара из этих пунктов являются действительно серьезными недоработками, с остальными можно легко справиться подручными средствами.
Вроде бы недоработки и мелочь, но они ощутимо осложняют работу — приходится писать собственные библиотеки вспомогательных методов, которые и в гем не выделишь — уж больно маленькие, и без них некомфортно. А порой открываешь чужой код — и видишь там точно такие же вспомогательные функции как у тебя. Это как мне думается знак, что стандартная библиотека языка недоработана. Что же, будем надеяться, кто-нибудь из разработчиков прочтет текст и закоммитит патч. ;-)
Итак, начнем по порядку:

  • Перегрузка метода разными списками аргументов, как в C++
  • Отобразить хэш и получить из него другой хэш, а не массив
  • Преобразовать экземпляр класса в экземпляр его же собственного подкласса
  • Разные рюшечки

Читать полностью »

Случилось мне задание: проверить, есть ли XML-имя правильным. Что может быть проще? Смотрим стандарт, где четко описано, какими символами может имя начинатся, а какими — продолжаться, все просто и понятно:

[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
[5] Name ::= NameStartChar (NameChar)*

Практически готовое регулярное выражение, легкая обработка напильником Ctrl+H…

    public const string NameStartCharPattern = @":|[A-Z]|_|[a-z]|[u00C0-u00D6]|[u00D8-u00F6]|[u00F8-u02FF]|[u0370-u037D]|[u037F-u1FFF]|[u200C-u200D]|[u2070-u218F]|[u2C00-u2FEF]|[u3001-uD7FF]|[uF900-uFDCF]|[uFDF0-uFFFD]|[u10000-uEFFFF]";
    public const string NameCharPattern = NameStartCharPattern + @"|-|.|[0-9]|u00B7|[u0300-u036F]|[u203F-u2040]";
    public const string NamePattern = @"(?:" + NameStartCharPattern + @")(?:" + NameCharPattern + @")*";
* This source code was highlighted with Source Code Highlighter.

Пишем тест…

Assert.That(Regex.Match("1a", Patterns.NamePattern), Is.False);
* This source code was highlighted with Source Code Highlighter.

Чисто, просто, понятно… Упал! Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js