Регулярные выражения в расчетах ядерной трансмутации

Введение

Процессы ядерных превращений (трансмутаций) в веществе, происходящие под воздействием нейтронного облучения, представляются особенно важными при выборе материалов, которые используют в качестве конструкционных для широкого круга узлов и устройств ядерных реакторов различного типа. Ядерные трансмутации приводят к изменению химического и изотопного состава, происходит накопление радиоактивных и стабильных продуктов, содержание которых определяет времена безопасной эксплуатации устройств в ядерно–энергетических установках с точки зрения как радиационной, так и функциональной [1, 2].

Моделирование ядерного процесса в виде линейной системы обыкновенных дифференциальных уравнений приводит к задаче дискретной оптимизации схемы нуклидных превращений эвристическими алгоритмами из методов дискретной глобальной и локальной оптимизации с элементами математической теории принятия решений и теории искусственного интеллекта [3,4,5].

В качестве инструментального средства пользователя разработана под Windows XP УНИВЕРСАЛЬНАЯ ПРОГРАММА МЕТРОЛОГА (УПМ). Настоящая версия УПМ предназначена для проведения расчётов эффектов ядерной трансмутации, повреждающей дозы в конструкционных материалах при реакторном облучении с использованием данных БД нейтронно-физических характеристик, химического состава материала и схем нуклидных превращений.

Объём нейтронно-физических данных в созданной для УПМ БД занимает 1,1 Мб. Состоит из 162 записей по энергетическим спектрам нейтронов измеренных или рассчитанных для различных точек и конфигураций исследовательских реакторов. Данные по химическому составу конструкционных материалов составлены на основе реально используемых в облучательных устройствах, в конструкторских элементах исследовательских реакторов (чехлы экранных сборок, оболочки тепловыделяющих элементов и т.д.). Данные по разветвлённым блочным схемам нуклидных превращений обновляются на основе проводимых расчётов ядерной трансмутации.
В расчётах ядерной трансмутации и в основе обработки текстов с результатами расчётов приложение широко использует регулярные выражения. Регулярные выражения предоставляют мощный, гибкий и эффективный метод обработки текста. Обширные возможности сопоставления шаблонов, предоставляемые регулярными выражениями, позволяют быстро анализировать большие объемы текста, проверять текст на соответствие определенным заранее шаблонам (например, формату интегрированных библиотек оценённых ядерных данных по сечениям реакций взаимодействия нейтронов с ядрами атомов ADL-3[6], FENDL-2.0[7], ENDF/B-VII.0[8], и JEFF-3.1.1[9] ), извлекать, изменять, заменять или удалять подстроки текста, а также добавлять извлеченные строки в коллекцию для формирования отчетов.

Для создания научной программы использовались возможности класса System.Text.RegularExpressions.Regex в среде разработки Microsoft VISUAL STUDIO .NET.

Применение регулярных выражений в УПМ

Общие сведения об УПМ

Универсальная программа метеоролога – это приложение с графическим интерфейсом пользователя предполагает псевдо/реально-мультизадачный режим выполнения. Программа разработана по принципу модульного проектирования, содержит пакет утилит PREPRO 2007[11] и ряд самостоятельных подпрограмм в виде dll-файлов динамической библиотеки, exe-файлов. Интерфейсная часть УПМ и алгоритмы расчётных процедур написаны на языке VISUAL C++ .NET в среде разработки Microsoft VISUAL STUDIO .NET[12, 13]. Структура БД создана средствами управления базами данных MS SQL Server.2000[14]. В настоящее время тестируется на экспериментальных данных для подтверждения адекватности расчётов и определения поправок.

Пакет утилит PREPRO 2007 используется для предварительной обработки ядерных данных в формате ENDF/B. Это — модульный набор компьютерных кодов, каждый из которых читает и записывает оценённые ядерные данные в формате ENDF. Каждый код исполняет одну или несколько независимых операций над данными. Предварительная обработка ENDF форматированных данных необходима для последующего использования в приложениях. Утилиты пакета PREPRO 2007 являются независимыми и совместимыми с современными операционными системами любого типа компьютера от большого универсального компьютера до маленьких персональных компьютеров, таких как IBM-PC и Power MAC.

Общие сведения о регулярных выражениях[15]

Понятие регулярного языка играет важнейшую роль в современной информатике – причём как в теоретических, так и практических её разделах. Регулярные языки являются важным классом формальных языков. Формальные языки классифицируются в соответствии с типами грамматик, которыми они задаются. Сложность языка определяется его типом. Наиболее сложные — языки с фразовой структурой (сюда можно отнести естественные языки), далее — контекстно-зависимые языки, контекстно-свободные языки и самые простые — регулярные языки.

Удобный и компактный способ конечного описания формального языка — регулярные выражения, — который находит практическое применение во многих компьютерных приложениях, таких как текстовые редакторы, интерпретаторы командной строки и автоматические генераторы лексических анализаторов, информационно-поисковые системы.

Краткие сведения о формате ENDF/B-6

ENDF/B-6 является международным форматом для хранения оцененных ядерных данных (см. приложение 1). Однажды подготовленные в формате ENDF наборы оцененных данных могут преобразовываться в формы, пригодные для тестирования и непосредственных приложений с помощью обрабатывающих программ. Разработаны обрабатывающие программы, которые получают усредненные по группам сечения из библиотеки ENDF для использования в нейтронных расчетах. Эти программы выполняют такие функции как восстановление детального хода сечений по параметрам резонансов, Доплеровское уширение резонансных линий, усреднение по заданным энергетическим группам, и/или перевод в специальные интерфейсные форматы.

Описательная информация даётся в виде серии карточных образов, каждая карта содержит в себе до 66 символов Холлерита [16].
Последняя оценка стандартов была выполнена в 2005 году и в настоящее время включена только в оценку ENDF/B-VII.

Примеры регулярных выражений из УПМ

Подстроки

Класс System.Text.RegularExpressions.Regex [17,18] представляет обработчик регулярных выражений .NET Framework. Объект типа Regex инициализирем передачей строки в конструктор (см. выделенную строку листинга). Тривиальным случаем регулярного выражения является строка, состоящая из одного символа алфавита регулярного языка. Например, "=", "-", "\\n", "\\t". Приведенный ниже пример из УПМ иллюстрирует процесс поиска подстроки «CROSS» в другой строке:

DirectoryInfo* di = new DirectoryInfo(Environment::CurrentDirectory); DirectoryInfo* fi[] = di->GetDirectories(); String* l_strContents; Regex* myDirectory = new Regex(S"CROSS"); for(int i=0;i<fi->Length; i++) { 	l_strContents=String::Copy(fi->GetValue(i)->ToString()); 	if(myDirectory->IsMatch(l_strContents)) break; } 

Метод IsMatch() указывает, обнаружено ли в указанной входной строке соответствие. Приведённый образец поиска относится к простым регулярным выражениям, так как это уровня строчных методов. Приведу примеры других подстрок для организации поиска в строках (см. таб.1).

Таблица 1.
Фрагменты листинга Подстроки

Regex* myEqual = new Regex(S"\\n"); String* sim[]=myEqual->Split(l_strContents);	"\\n" Regex* FirstRegex = new Regex(S"->"); if(FirstRegex->IsMatch(words)){…}	"->" Regex* myOneRegex = new Regex(S"ppm"); if(!myOneRegex->IsMatch(m_ptrLVMaterial->get_Items()-> get_Item(MaterialIndex)->get_SubItems()->get_Item(j)-> get_Text()->ToString())){…}	"ppm" 

Во фрагментах листингов можно встретить применение метода Split(). Метод разделяет входную строку в позициях, которые определяются сопоставлением регулярного выражения. Реализации образцов строк «SKALE», «Chart», «8457» аналогичны. Рассмотрю теперь более сложные образцы для поиска.

Классы символов

Класс символов определяет набор символов, один из которых может возникнуть в строке ввода, чтобы поиск соответствия выполнился успешно. Данный список символов можно задать по отдельности [группа_ символов], где группа_символов — это список отдельных символов, или/и как диапазон [пер-вый_символ — последний_символ], где первый_символ — это символ, с которого начинается диапазон, а последний_символ — это символ, которым заканчивается диапазон.

Классы символов состоят из языковых элементов, примеры перечислены в следующей таблице (таб.2). Класс символов соответствует какому-либо одному набору символов.

Для проверки действительного числа с плавающей точкой УПМ использует регулярное выражение вида: "$[0-9][.]?[0-9]+[eE]?[-+]?[0-9]-$", где знак? имеет смысл «0 или 1», знак + имеет смысл «один или несколько», знак — имеет смысл «0 или более»
Вот в таком виде использовала регулярные выражения для проверки нуклидов.

"[\\w]+[-]{1}[\\d]+[mM]?[\\d]?"
"[0-9]{1,3}-[A-Za-z\\s]{2}-[0-9\\s]{3}[MNO]{0,1}"

Здесь знак перехода \w указывает на любой из символов, составляющих слово, такой как буква, цифра или символ подчеркивания. Предполагаем, что нуклид состоит из одного или двух символов, разделенных одним дефисом, после чего следуют символы десятичных цифр, за которыми может быть знак изомерности данного нуклида в виде символа m или M в первом случае (соответствует формату ENDF/B6 диалект INT для ADL-3), или символа M или N или O во втором случае (соответствует формату ENDF/B-6 для остальных библиотек), да-лее могут следовать символы десятичных цифр, которые указывают на номер уровня изомерности нуклида.
В соответствии с первым определением корректными будут нуклиды: He-4, Co-60, Co-60m, Zn-61m2, Zn-61m3. В соответствии со вторым определением регулярного выражения корректными будут нуклиды: 2-He- 4, 27-Co- 60, 27-Co- 60M, 30-Zn- 61N, 30-Zn- 61O.

Таблица 2.

Регулярные выражения с классами символов
"[ \\b\\n\\t\\r]+"
"[\\d\\.\\w-+]+[\\s\\t]{1}"
"[\\w]+[-]{1}[\\d]+[mM]?[\\d]?"
"[0-9]{1}\\.[0-9]+[-+]{1}[0-9]+"
"[=\\s]+"
"$(?<=\b|v0|=)[\\d\\.+-\\w]{8}[\\s\\t]{1}"
"(?<=\b|~0|=)[\\d\\.+-\\w]{8}[\\s\\t]{1}$"
"[M,m]?"
"$[0-9][.]?[0-9]+[eE]?[-+]?[0-9]-$"
"[\\s\\b\\t]+"
"[\\d\\.\\w-+]+"

Конструкции группирования

Конструкции группирования отображают части выражений с помощью регулярных выражений и обычно захватывают части строки во входной строке. Конструкции группирования состоят из языковых элементов.

Следующая конструкция группирования захватывает соответствующую часть выражения: (часть_выражения), где часть_выражения — это любой допустимый шаблон регулярного выражения. Записывает, что использование скобок нумеруется автоматически слева направо, основываясь на порядке открывающих скобок в регулярном выражении, начиная с 1. Захват с номером 0 – это текст, соответствующий всему шаблону регулярного выражения.

Ранее уже была описана конструкция для проверки действительного числа с плавающей точкой. Покажу второй вариант.

"([\\d\\.\\w-+]+[\\s\\t]{1})"

Образец регулярного выражения захватывает соответствующую часть выражения [\\d\\.\\w-+]+[\\s\\t]{1}, где класс символов [\\d\\.\\w-+] позволяет проверять одно или более стандартных десятичных цифр с возможным вхождением символа экспоненты и знака порядка числа, а класс символов [\\s\\t], позволяет проверять строго один символ пробела или табуляции.

Здесь используется конструкция группирования, так как в обрабатываемом тексте каждая строка представлена двумя действительными значениями, между которыми встречается символ пробела, либо символ табуляции. Значения двумерного массива для описания нейтронного спектра обрабатываются и используются при составлении рабочих файлов пакета утилит PREPRO 2007[11] для предварительной обработки ядерных данных в формате ENDF/B-6. Текстовый формат рабочего файла GROUPIE.LST представлен в виде фрагмента ниже (см. приложение 2).

Перечислим примеры реализованных конструкций группирования в УПМ (см.таб.3).

Таблица 3.

Регулярные выражения с конструкциями группирования
"([ \\b\\n\\t\\r]+)"
"([\\w]+[-]{1}[\\d]+[mM]?[\\d]?)"
"([\\d\\.\\w-+]+[\\s\\t]{1})"
"( \\b)"
"(\\n)"
"(\\t)"
"( )"
"([\\d\\.\\w-+]+)"
"(\\d+)"
"([A-Z,a-z, А-Я, а-я,0-9,\\-,,]+)"
"(\\.\\w+)"
"(\\w+[-\\.]+\\d+)"
"(\\w+[-\\.]?\\d*\\w?[-+]?\\d*)"
"([\\w-]+)$"
"([ \\d]{3}-[ \\w]{2}-[ \\d]{3})"

ЗАКЛЮЧЕНИЕ

Демонстрация некоторых регулярных выражений УПМ показывает гибкие возможности манипулирования произвольным текстовым форматом, предоставляемые инструментарием регулярных выражений. Регулярные выражения позволили реализовать быстрый анализ текста и поиска определенных шаблонов символов, для извлечения, редактирования, замены или удаления текстовых подстрок, а также для добавления извлеченных строк в коллекцию при создании отчета. Особенность эффективного применения регулярных выражений, в отличие от строковых типов, наглядна в реализации к ENDF/B-6 формату оценённых ядерных данных при использовании интегрированных библиотек, таких как ADL-3, FENDL-2.0, ENDF/B-VII.0, JEFF-3.1.1.

Список литературы

1. Конструкционные материалы ядерных реакторов. Часть 2: Структура, свойства, назначение / Под ред. Н.М.Бескоровайного. М.: Атомиздат, 1977, 256 с.
2. Solonin M.I., Chernov V.M., Gorokhov V.A., et al. Present Status and Future Prospect of the Russian Program for Fusion Low-activation Materials // J. Nucl. Ma-ter. 283-287. 2000. 1468-1472.
3. Markina N.V., Shimansky G.A. TRANS_MU computer code for computation of transmutant formation kinetics in advanced structural materials for fusion reactors //Journal of nuclear materials, 271-272, 1999, p.30-34.
4. Белозёрова А.Р., Шиманский Г.А. Оптимизация схемы расчёта трансмутации методом ветвей и границ //Сборник рефератов семинара “Физическое моде-лирование изменения свойств реакторных материалов в номинальных и аварийных условиях”, Димитровград, 5-6 апреля 2004. Димитровград: ФГУП ГНЦ РФ НИИАР, 2005. С.75-77.
5. Белозёрова А.Р., Мельников Б.Ф. Применение комплекса эвристик в задаче составления схемы нуклидных превращений //Сборник трудов Второй Всероссийской научной конференции «Методы и средства обработки информации», Москва, 5-7 октября 2005. Москва: Московский государственный университет им М.В.Ломоносова, 2005. С.208-214.
6. Грудзевич О.Т., Зеленецкий А.В., Игнатюк А.В., Пащенко А.Б. Библиотека ядерно-физических данных для расчётов активации и трансмутации //Атомная энергия, 1994 г., т. 76, вып.2., С. 124-130.
7. International Atomic Energy Agency (http://www.iaea.org/), Division of Physical and Chemical Sciences, Nuclear Data Section, A-1400 AUSTRIA, CD ROM Edition, Request 2378.01, FENDL-2, May 1998 Version, www-nds.iaea.org/fendl/index.html
8. www.nndc.bnl.gov/exfor/endf00.jsp Nuclear Data Sheets, Volume 112, Issue 12, December 2011, Pages 2887–2996, Special Issue on ENDF/B-VII.1 Library
9. www.nea.fr/dbforms/data/eva/evatapes/jeff_31/ J-Ch Sublet, A J Koning1, R A Forrest, J Kopecky The JEFF-3.0/A Neutron Activation File — EAF-2003 into ENDF-6 format, JEFDOC-982, CEA Cadarache, DEN/DER/SPRC 13108 Saint Paul Lez Durance, France, November 2003, p.34.
10. Richard B. Firestone, Table of Isotopes, Office of Energy Research, Office of High Energy and Nuclear Physics, Nuclear Physics Division of the US Department of Energy under contract DE-AC03-76SF00098, subcontract LBL no. 4573810, CD ROM Edition, Version 1.0, March, 1996.
11. www-nds.iaea.org/ndspub/endf/prepro2007/ PREPRO 2007, ENDF/B Pre-processing Codes (ENDF/B-VII Tested) Owned, Maintained and Distributed by The Nuclear Data Section International Atomic Energy Agency P.O. Box 100 A-1400, Vi-enna, Austria
12. Торстеинсон П., Оберг Р. Архитектура .NET и программирование на Visual C++ /Пер. с англ. — М.: Издательский дом «Вильямc», 2002.
13. Саранг П.Г., Корера А., Фрейзер С., Джентайл С., Кумар Н., Маклин С., Ро-бинсон С. Visual C++ .NET: Пособие для разработчиков C++ /Пер. с англ. — М.: Издательство «ЛОРИ», 2003.
14. Артёмов Д.В. Microsoft SQL Server 2000. Новейшие технологии. — М.: Из-дательско-торговый дом «Русская Редакция», 2001.
15. Мельников Б.Ф. Недетерминированные конечные автоматы//Монография. Тольятти, ТГУ, 2009.
16. chernykh.net/content/view/71/127/ Кит С. Рид-Грин История переписи населения в США и обработки ее данных / В мире науки, 1989, N 4. С. 70-76.
17. msdn.microsoft.com/ru-ru/library/system.text.regularexpressions.regex.aspx 2012 Microsoft
18. П.Бекер Регулярные выражения /Журнал для профессионалов. Программирование на C/C++. ООО «Инфопресс», 2006, №10(34). С. 1-7.

Приложение 1

Файл данных по распадам радионуклидов “decay-ENDF-VII0.endf"

…………………первые 53 строки файла вырезаны…………………………
1.001000+3 9.991673-1 -1 0 0 1 2 1451 1
0.000000+0 0.000000+0 0 0 0 6 2 1451 2
0.000000+0 0.000000+0 0 0 4 7 2 1451 3
0.000000+0 0.000000+0 0 0 16 2 2 1451 4
1-H — 1 BNL EVAL-NOV05 A.A. Sonzogni (from NWC) 2 1451 5
/ENSDF/ DIST-DEC06 2 1451 6
—-ENDF/B-VII MATERIAL 2 2 1451 7
——RADIOACTIVE DECAY DATA 2 1451 8
——ENDF-6 FORMAT 2 1451 9
*********************** Begin Description *********************** 2 1451 10
** ENDF/B-VII RADIOACTIVE DECAY DATA FILE ** 2 1451 11
** Produced at the BNL from the Nuclear Wallet Cards database ** 2 1451 12
** Author: J.K. Tuli ** 2 1451 13
** Translated into ENDF format by A.A. Sonzogni, November 2005 ** 2 1451 14
***************************************************************** 2 1451 15
Parent Excitation Energy: 0.0000 2 1451 16
Parent Spin & Parity: 1/2+ 2 1451 17
Parent half-life: STABLE 2 1451 18
Abundance: 99.985% 1 2 1451 19
************************ End Description ************************ 2 1451 20
1 451 22 0 2 1451 21
8 457 5 0 2 1451 22
0.000000+0 0.000000+0 0 0 0 0 2 1 099999
0.000000+0 0.000000+0 0 0 0 0 2 0 0 0
1.001000+3 9.991673-1 0 0 1 0 2 8457 1
0.000000+0 0.000000+0 0 0 6 0 2 8457 2
0.000000+0 0.000000+0 0.000000+0 0.000000+0 0.000000+0 0.000000+0 2 8457 3
5.000000-1 1.000000+0 0 0 6 0 2 8457 4
0.000000+0 0.000000+0 0.000000+0 0.000000+0 0.000000+0 0.000000+0 2 8457 5
0.000000+0 0.000000+0 0 0 0 0 2 8 099999
…………………остальные 450532 строки файла вырезаны…………………………

Приложение 2

Рабочий файл GROUPIE.LST

Multi-Band Library Identification
— Groupie Test Run
— MAT/MF/MT Ranges
— Minimum Maximum
MAT MF MT MAT MF MT
— 1 1 1 9999 99 999
— Group Energy Boundaries
— Energy-eV Energy-eV Energy-eV Energy-eV Energy-eV Energy-eV
— .100000000 .105000000 .110000000 .115000000 .120000000 .127500000
.135000000 .142500000 .150000000 .160000000 .170000000 .180000000
.190000000 .200000000 .210000000 .220000000 .230000000 .240000000
.255000000 .270000000 .280000000 .300000000 .320000000 .340000000
.360000000 .380000000 .400000000 .425000000 .450000000 .475000000
.500000000 .525000000 .550000000 .575000000 .600000000 .630000000
.660000000 .690000000 .720000000 .760000000 .800000000 .840000000
.880000000 .920000000 .960000000 1.00000000 1.05000000 1.10000000
…………………эта часть файла вырезана…………………………
16300000.0 16400000.0 16500000.0 16600000.0 16700000.0 16800000.0
16900000.0 17000000.0 17100000.0 17200000.0 17300000.0 17400000.0
17500000.0 17600000.0 17700000.0 17800000.0 17900000.0 18000000.0
18100000.0 18200000.0 18300000.0 18400000.0 18500000.0 18600000.0
18700000.0 18800000.0 18900000.0 19000000.0
— ENDF/B Tape Label

ссылка на оригинал статьи http://habrahabr.ru/post/188448/

Полезности Mercurial

Думаю, почти все читающие знают, что такое Mercurial — это распределённая система контроля версий, для исходного кода и других (преимущественно текстовых) файлов. Многие ей пользуются, и знают основные команды, как то удаление/добавление файлов, создание коммита и отправка локальных изменений в другие репозитории. Однако, Mercurial имеет множество не столь известных функций и команд, которые часто достаточно полезны и удобны. Некоторые из них можно использовать сразу после установки по-умолчанию, некоторые нужно включить в настройках, а для других может потребоваться скачать дополнительное расширение.

Краткий список того, о чём пойдёт речь в статье:

  • hg serve (hgweb) — встроенный веб-сервер
  • расширения pager, progress и color
  • hg [c]record — выбор отдельных изменений для коммита
  • revsets и filesets — поиск коммитов и файлов с запросами любой сложности
  • hg evolve — Changeset Evolution или же «изменяемая история»

logo

hg serve (hgweb)

В стандартную поставку Mercurial входит веб-сервер, который позволяет быстро просмотреть репозиторий с удобным интерфейсом в любом браузере — для этого достаточно, находясь в папке с репозиторием, выполнить hg serve, и зайти на localhost:8000 (стандартный порт — 8000). Так можно просматривать почти всю информацию, которая доступна через обычный интерфейс командной строки. При этом с другого компьютера по сети можно использовать hg clone с адресом запущенного hgweb для клонирования.

Конечно, было бы странно, если бы веб-сервер можно было использовать только для этого — и это не так. Hgweb можно настроить так, чтобы он обрабатывал сразу несколько репозиториев, например из одной папки, а также поставить перед ним nginx или другой сервер (вариантов коммуникации хватает — обычный http через порт, или к примеру wcgi). Тонкости конфигурации рассмотрены в частности в официальной вики Mercurial. Важная функция, которой иногда не хватает в hgweb — авторизация пользователей и права на чтение/запись — также может быть реализована установкой и настройкой дополнительного frontend сервера. Например, я использую для этого обычную http-авторизацию в nginx, который запрещает любой неавторизованный доступ к приватным репозиториям, а также push в публичные.

Что касается внешнего вида, то в комплекте поставляется несколько тем на выбор, по-умолчанию используется «paper».

Примеры: selenic.com/hg — официальный репозиторий, hg.python.org — репозитории Python, hg.aplavin.ru — мои (в основном) репозитории.

Расширения pager, progress, color

Эти расширения входят в установку Mercurial, и для использования достаточно включить их в настройках. Для этого нужно добавить в файл ~/.hgrc секцию расширений:

[extensions] pager =  progress =  color =  

(да, после знаков равенства ничего нет). Эти расширения делают работу с CLI-интерфейсом несколько более удобной: выводы многих команд становятся цветными, во время длительных операций выводится прогрессбар, а длинные простыни команд вроде hg log можно прокручивать — они открываются в стандартном pager’e (обычно это less). К сожалению, страницы помощи (hg help) открываются как и раньше, и для их удобного просмотра нужно вручную дописывать | less. Эти расширения не включены по-умолчанию, как говорит автор Mercurial, из-за иногда встречающихся неожиданных проблем с ними, в частности на Windows.

hg [c]record

Часто после долгого редактирования исходников бывает удобнее разбить внесённые изменения на несколько коммитов, а не делать один большой. В стандартной поставке Mercurial для этого есть расширение record, которое достаточно просто включить в настройках для использования. После этого собственно для выбора изменений нужно будет выполнить hg record и в текстовом интерфейсе выбрать нужные части.

Однако, это расширение не очень удобное и подходит только для эпизодических правок. Если вы пользуетесь такой функцией чаще, лучше скачать и подключить другое расширение, не из стандартного комплекта: crecord. Оно предоставляет достаточно удобный для использования псевдографический интерфейс (пример от его автора: image). Конечно, есть и полностью графические утилиты для этого (мне, например, понравилась qct, написанная на Qt), но для простых правок прямо «на месте» в консоли crecord вполне удобен.

revsets

Mercurial использует язык запросов, который можно использовать для сколь угодно сложных критериев поиска коммитов, причём он поддерживается во всех командах, которые работают с коммитами (а скоро будет и в hgweb). Например, почти «классический» пример — есть некоторый коммит, в котором исправлен баг, и нужно найти релизы в которые этот багфикс попал. Предполагая, что для задания релизов используются теги (все проекты, которые видел, так и делают), такой запрос можно сформулировать как 'tag() and descendants(x)' или 'tag() and x::' (где x — идентификатор коммита). То есть, если выполнить hg log 'tag() and x::', мы увидим все искомые релизы. Подробная информация о синтаксисе и всех имеющихся функциях — hg help revsets или на официальном сайте.

filesets

Filesets представляет собой также язык запросов, аналогичный revsets, но для задания файлов (для соответствующих команд, которые работают с файлами). Используется он почти аналогично, только в начале нужно добавлять set:, чтобы не было путаницы с обычными именами файлов. Что касается поддерживаемых функций, то они также есть в стадартной помощи: hg help filesets.

Changeset Evolution

Расширение evolve — экспериментальное, которое сейчас разрабатывает (в основном) один из членов команды Mercurial. Оно экспериментальное из-за пока ещё окончательно не решённых вопросов с UI и производительностью в некоторых случаях, а не из-за недостатка стабильности (вообще говоря, часть кода, связанного с его функциями, находится в самом Mercurial, но не работает по-умолчанию). В частности, это расширение используется в самом официальном репозитории Mercurial.

Changeset Evolution при подключение не только добавляет новые команды, но и изменяет поведение стандартных (и из других расширений) — тех, которые каким-либо образом редактируют историю: commit --amend, rebase, histedit и некоторые другие. При использовании evolve никакие коммиты полностью не удаляются из репозитория (за исключением команды strip, предназначенной как раз для полного удаления, которое всё же может пригодиться). Любое редактирование истории просто помечает более ненужные коммиты как удалённые (точнее, устаревшие — obsolete), а новые коммиты — как заменившие их. Таким образом, всегда можно найти любую версию изменения, которая когда-то раньше существовала.

Также, из дополнительных получаемых «плюшек» — возможность редактирования изменений, уже отправленных в публичный репозиторий. Причём те, кто имеет его локальную копию, при загрузке новых изменений также получат информацию об удалённых (устаревших) коммитах и их локальных репозитории так же изменятся (при условии, конечно, что у них тоже включено это расширение). Без evolve такого достить нельзя.

Заключение

Вообще, в Mercurial есть и другие «продвинутые» возможности, но в этой статье я постарался описать те из них, которые могут пригодиться многим пользователям, и которыми люди не пользуются часто из-за незнания. Также хотелось бы добавить, что в Mercurial очень строгая политика обратной совместимости — все вносимые изменения не затрагивают имеющуюся функциональность, а добавляют новую. Очень старая версия на сервере может работать с новым клиентом, и наоборот (разумеется, неподдерживаемые в старой версии функции работать не будут). Такая серьёзная обратная совместимость касается всех команд и функций, видимых пользователю, то есть внутреннее API может меняться (но без весомых причин этого тоже не делают).

Сам я использую Mercurial на базовом уровне уже несколько лет, а в этом году участвую в Google Summer of Code с проектом улучшения hgweb. Попутно, общаясь с разработчиками, узнал и начал использовать в частности описанные в этой статье функции.

ссылка на оригинал статьи http://habrahabr.ru/post/188418/

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

22 июля этого года в Российской Газете опубликован проект приказа «Об утверждении минимальных ставок вознаграждения, а также порядка сбора, распределения и выплаты вознаграждения за отдельные виды использования произведений и фонограмм, опубликованных в коммерческих целях».

И вроде бы ничего страшного, раз воспроизведение в коммерческих целях, оно должно облагаться налогом. Кстати, если вы в своей машине включили любимый трек и его услышали окружающие — это коммерческая цель.

И так, вот ссылка на проект приказа согласно которому теперь предлагается платить за каждый квадратный метр незаконно озвученной вами музыки. Позволю себе процитировать некоторые положения планируемого закона:

Плательщиками авторского вознаграждения за публичное исполнение/публичный показ произведений являются физические лица (в том числе индивидуальные предприниматели) или юридические лица, независимо от организационно-правовой формы, а также иные субъекты гражданского права (Российская Федерация, субъект Российской Федерации или муниципальное образование), организующие публичное исполнение/публичный показ произведения в живом исполнении или с помощью технических средств в месте, открытом для свободного посещения, или в месте, где присутствует значительное число лиц, не принадлежащих к обычному кругу семьи, то есть лицо, которое берет на себя инициативу и ответственность за проведение исполнения/публичного показа.

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

Т.е. по сути абсолютно не важно, берете ли вы деньги за прослушивание музыки в клубе или включили на полную у подъезда в 3 часа ночи «О боже, какой мужчина!» на своей даче жарите шашлыки под Трофима. Если соседи услышат, то вы нарушаете закон. Кстати, не обязательно соседи, а любой тот, кто «не принадлежит к обычному кругу семьи». Великолепно, правда?

Напоследок оставлю еще и ссылку на комментарии Владислава Куликова в которых более полно описаны все прелести законопроекта.

Интересно, этот новый проект снова придуман для отвлечения от чего-то действительно важного или Михалкову не хватает на остров?

ссылка на оригинал статьи http://habrahabr.ru/post/188522/

А вы специалист в какой-то одной IT-области или универсал, который занимается всем. Я из второй категории…

Всем не профессионалам в какой-либо одной области IT-универсалам посвящается данный текст.
История такая: я работаю на довольно неплохой должности (руководитель IT-отдела) и даже имею в подчинении трех несколько человек. Сама фирма не IT направленности. Занимаемся мы розничными, оптовыми и интернет продажами. А также являемся сервисным центром нескольких известных марок. В компании есть несколько веб-ресурсов, в том числе несколько интернет-магазинов, пара из которых имеют очень даже неплохой оборот. Вот этим всем хозяйством мне и приходится заправлять. Плюс реклама, полиграфия, баннеры, сео и т.д. Моя зарплата меня тоже вполне устраивает. Скажем, гораздо выше средней по СПб. В данный момент меня в моей работе все устраивает за исключением одного: отсутствие опыта работы в профильной компании (в профильной среде).

На написание данного текста побудил вот этот топик habrahabr.ru/qa/11462/, в котором в одном из комментариев сказаны очень точные слова. Слова, которые заставляют задуматься и посмотреть на свое положение с другой стороны. Если кратко, то смысл примерно таков: в своей компании ты царь и бог. Ты самый умный, самый продвинутый, самый айтишный. Но как только ты станешь не нужен своей компании (скажем, она закроется), ты станешь не нужен НИКОМУ. В профильных фирмах заинтересованы, чтобы ты развивался. В профильных фирмах, работая в коллективе специалистов, ты быстрее и эффективнее развиваешься как профессионал. А в непрофильной организации руководство может даже не вдаваться в подробности чем ты занимаешься и как, главное чтобы работало. Почему я эту ситуацию проецирую на себя? Потому что начинал свой путь я с этакого универсала. Клепал сайты: сам дизайнил, сам верстал, сам программировал. И в принципе этим и продолжаю заниматься по сей день, вот уже несколько лет. Мной были созданы веб-проекты нашей фирмы. Мной же постоянно развиваются, поддерживаются и продвигаются. Параллельно занимался полиграфией, разработкой баннеров, сео и т.д. Потом когда рук на все стало не хватать, попросил руководство нанять помощника. Так в фирме появился сео-оптимизатор и контент-менеджер. Со временем пришел еще человек и т.д. Я же в свою очередь вроде как стал их руководителем. Стал больше заниматься программированием (php) и меньше всем остальным. Хотя как и прежде делаю дизайн, верстаю. Изучил и начал применять jQuery. Увлекся веб-аналитикой, юзабилити и тестированием. Уже второй год бьюсь над вопросами повышения конверсии и пр. Изучаю и применяю адаптивный дизайн и т.д. Т.е. стараюсь впитывать новые тенденции и технологии. Хожу на семинары. Короче говоря, продолжаю прокачивать те или иные свои навыки, в том числе и изначальные свои навыки: дизайн, программирование, верстка и т.д. Даже флешки могу делать и писать Action Script. НО не развиваюсь целенаправленно в каком-то одном направлении. Этот шанс уже давно упущен. Если бы несколько лет назад я решил бы стать программистом или дизайнером, то может быть сейчас из этого что путного и вышло бы. Но этого не произошло. Я продолжил развиваться как универсал.
Все так же в качестве фрилансера продолжаю клепать сайты на своем движке, своей верстке, своем дизайне. Скажем, всего умею понемногу. Но профи посмотрит мой php-код и скажет «говнокод». Профессиональный дизайнер посмотрит мой дизайн и скажет «посредственный уровень» (хотя, как мне кажется, и по признанию многих, некоторые работы очень даже ничего). Опытный верстальщик посмотрит верстку и скажет «верстка вроде чистенькая, но не идеал» и т.д.
И вот начал я задумываться, а что если я захочу сменить работу или не дай бог моя фирма захочет со мной по какой-либо причине расстаться. Смогу ли я найти себе работу? И не так чтобы это была низкооплачиваемая работа начинающего веб-дизайнера или php-программиста. Мой возраст, семейное положение и нынешний оклад уже не позволят мне вновь опуститься до этого уровня. Так как же быть то? Если зайти на hh.ru и ввести в поиске запрос «it специалист», «веб разработчик», «веб дизайнер», «веб мастер» и т.д., то выдаются в основном профильные вакансии, типа «требуется Senior Php Developer» или «дизайнер интерфейсов» (на хорошую зарплату, естественно, высококвалифицированные специалисты). А я кто? «Крутой универсал», который на самом деле никому не нужен в такой своей модификации?
Как быть? Снова искать фирму, которая занимается фиг знает чем и ей нужен «веб-мастер», который будет поддерживать ее веб-сайты? Да, такие фирмы есть, но им наверное не нужен такой вот специалист, которому надо платить много (а запросы мои, в соответствии с моим текущим окладом, сейчас довольно велики). В свою фирму я тоже пришел в свое время на оклад в 2,5 раза меньше чем сейчас и вырос он только после того, как я реально много что сделал, разработал и это начало приносить доход. Плохо себе сейчас представляю такую фирму, которая могла бы привлечь на работу такого специалиста как я, сразу на нормальную зарплату, ведь, как правило, «заниматься веб-сайтами компании» — это должность для студентов, начинающих работников. А уж если нужен руководитель IT-отдела, то сразу стоит в требованиях: опыт управления командами (от 10 человек), отличное знание бухгалтерской системы 1с с целью разработки системы документооборота фирмы и бухгалтерии (это просто как частный пример), умение работать в команде (с баг-трекерами, системами управления версиями, GIT и.д.). По поводу работы в команде – это вообще моя отдельная боль. Часто вижу в вакансиях требование «опыт работы в команде», «SVN», баг-трекеры и т.д. Я, в силу того, что работаю в непрофильной IT компании, все это, к сожалению, миновал. Языки программирования, графические пакеты, принципы, тенденции, технологии и т.д. – все это можно изучать и в моей ситуации. Но вот изучить принципы работы в команде, над большими проектами – этого в моей ситуации не дано. Или я просто не знаю как это делать.
Знаю, на хабре много людей разного возраста, разных положений, разных специальностей, разного уровня профессионализма и т.д. Вот и хочу к вам обратиться: подскажите, исходя из своего опыта, как мне быть, что делать. Был ли кто-нибудь в похожей ситуации. Напрасно или не напрасно ли я паникую, т.е. нужны ли на рынке люди такой специфики. Знаю, что будут советы, типа «меняй место работы, иди в профильную контору, иди на повышении з/п, в дальнейшем это окупится». Сразу скажу, что есть причины для того, чтобы я этого не делал. По крайней мене пока.
Нужны ли кому-нибудь специалисты подобного рода? Или в свое время я сделал ошибку и нужно было развиваться по какой-то одной области?
Или может еще не поздно? Нужно открыть hh, увидеть там, что одна из самых востребованных специальностей Java-программист и начать учиться на Java-программиста?
P.S. Ради бога, не сочтите что плачусь или наоборот пиарюсь. Хотя, скорее, конечно плачу. Не очень хорошее настроение и оценка своей жизни и деятельности побудили на написание такого текста. В надежде, что комментарии (если они будут) станут неким толчком к принятию каких-либо дальнейших решений.

ссылка на оригинал статьи http://habrahabr.ru/post/188514/

YouTrack 5.0: Твой Язык. Твой Agile. Твои правила

image

С чего же стоит начать историю про YouTrack 5.0?

YouTrack 5.0 под кодовым названием ‘Gentle’ создан для того, чтобы удовлетворить всем вашим запросам. Теперь YouTrack доступен и на русском языке!

Salut! Hallo! Привет! Hola!

Давайте начнем с самой ожидаемой всеми фичи YouTrack: теперь наш баг-трекер говорит на немецком, французском, и русском, и испанском, и в будущих релизах на многих других языках.

Чтобы поменять язык в YouTrack, нужно зайти в настройки: Administration > Settings (для этого у вас должны быть права администратора) и выбрать один из четырех доступных языков (в дополнение к английскому, конечно же):
image

И более того, если вашего языка в списке доступных не оказалось, то вы можете перевести YouTrack самостоятельно или даже создать свой собственный YouTrack с использованием слэнга. Все подробно изложено в Руководстве как перевести YouTrack UI.

Обновленный UI: Новый снаружи и привычный изнутри.

При создании новой версии баг-трекера мы старались сохранить баланс между формой и содержанием. Теперь работа над задачами стала более быстрой, понятной и простой. Мы постарались переработать экраны работы с задачей, создание задачи и редактирование задачи, приправить их новым look-and-feel, чтобы управлять задачами можно было быстрее и интереснее.

Самые важные улучшения и новые возможности пятого YouTrack:

  • Унифицированный дизайн и расположение полей для всех основных экранов: полный экран задачи, создание и редактирование задачи
  • Теперь названия полей всегда видны
  • Прикреплять файлы стало быстрее и увлекательнее: можно просто перетащить файлы на экран создания или редактирования задачи
  • Создайте URL-ссылку на шаблон задачи и отправьте ее своим клиентам или коллегам. Или используйте шаблон для себя при создании будущих задач
  • Ясный и лаконичный новый вид комментариев
  • Обновленный дизайн иконок меню
  • Новый дизайн кнопок «Edit» и «Delete»

image

Безграничные возможности Agile

Теперь вы можете насладиться значительными улучшениями, которые мы внесли в Agile board. Мы будем рады, если теперь вы сможете выжать из Agile по максимуму.

Ключевые улучшения:

  • Доска Agile, охватывающая несколько проектов
  • Полностью новый Backlog management
  • Формирование доски по поисковому запросу
  • Настройки видимости доски
  • Несколько раздельных досок одновременно
  • Свимлэйны на основе атрибутов
  • Возможность спрятать колонки доски
  • Новый дизайн карточек доски

image

Darcula TV look and feel

Множество продуктов JetBrains уже шагнули на темную сторону, наконец очередь дошла и до YouTrack.

Если вы придерживаетесь Agile методологии в вашей работе, то вы должны знать, что самое сложное – продолжать оставаться Agile. Чтобы с этим справиться, ваша Agile доска должна располагаться на самом видном месте или даже постоянно транслироваться на экраны ваших офисных телевизоров.

Вот почему мы сделали новый вид для Agile доски в стиле Darcula. Она (доска) хорошо заметна на расстоянии и на неё удобно смотреть даже на экране монитора своего компьютера:
image

Исследуйте темную сторону Agile!

Задачи-близнецы

Скажите нет дубликатам, благодаря новой вкладке “Похожие задачи”. Теперь во время редактирования на полном экране задачи вы можете видеть список задач, схожих с вашей текущей:
image

Обновленный инструмент для снимков экрана

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

  • Абсолютно новый look-and-feel
  • Добавление комментариев прямо на скриншоте
  • Новый инструмент выделения
  • Легко рисуйте прямые линии, удерживая CTRL

image

Wiki Разметка

Среди прочих улучшений – мы обновили wiki разметку для лучшего восприятия и комментариев.

  • Используйте HTML тэги
  • Выделяйте пользователей с помощью @ перед именем
  • Легко используйте длинные параграфы с новым форматированием списков

Клонировать задачу

С самого начала YouTrack был уникальным инструментом благодаря полнофункциональной работе с помощью клавиатуры. В этот раз, мы хотим представить вашему вниманию новую команду “Клонировать задачу”. С помощью этой команды вы можете клонировать одну или сразу несколько задач. Для этого просто начните писать clone или откройте командный диалог, чтобы применить новую команду к задаче!
image

Расширенная система уведомлений

Мы добавили больше возможностей по настройке YouTrack для администраторов. Теперь вы можете показать system-wide сообщение всем вашим пользователям, чтобы предупредить их о работах на сервере, обновлениях, недавних событиях, да и вообще обо всем, что захотите.

Database Performance

Конечно изменения не могли ни коснуться внутренностей YouTrack: мы также улучшили работу нашей базы данных, разработанной специально для YouTrack. Теперь она быстрее, умнее и безопаснее.

Что еще новенького есть в YouTrack 5.0? И где посмотреть полные детали релиза?

Новый YouTrack можно поставить и поизучать уже сейчас. А если вы используете YouTrack в облаке, тогда ваш баг-треккер должен обновиться автоматически согласно нашему расписанию.

Сохраняйте спокойствие и работайте с удовольствием!
Команда JetBrains

ссылка на оригинал статьи http://habrahabr.ru/company/JetBrains/blog/188518/