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

JTLS: дата и время

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
...
<c:set var="now" value="<%=new java.util.Date()%>"/>
<fmt:formatDate type="both" dateStyle="medium" timeStyle="medium" value="${now}"/>

источник

среда, 14 декабря 2016 г.

Установка Windows 10

Начать ее следует отсюда: https://www.microsoft.com/ru-ru/software-download/windows10.

Logback: описание идентификаторов тэга pattern

http://logback.qos.ch/manual/layouts.html#conversionWord

Пример строки настройки паттерна из Azk2logback.xml:
<pattern>%d{dd.MM.yy HH:mm:ss.SSS},%t,%p,%c{0},%m%n</pattern>
Пример вывода информации в журнал по настроенному паттерну:
12.12.16 20:06:34.732,Scheduler,DEBUG,SQL-execute,SELECT 1 FROM SchPlan WHERE Id={800000000361} FOR UPDATE (0 ms)

Описание ключевых слов:
  • %d{dd.MM.yy HH:mm:ss.SSS} - (date) дата;

  • %t - (thread) имя потока, создавшего информацию для журнала;

  • %p - уровень журнализации;

  • %c{0} - имя логгера, {0} - говорит о том, то выводить нужно только "хвостик" от полного имени, например, если полное имя "mainPackage.sub.sample.Bar", то при "%c{0}" будет выведен только "Bar";

  • %m - (msg) собственно сообщение для журнала;

  • %n - (new_line) сепаратор, он же символ новой строки, комбинация спецсимволов для новой строки, зависит от платформы (например, для Linux это "#10#10", а для Windows - "#13#10").
  • вторник, 13 декабря 2016 г.

    Delphi 7: Количество вхождений подстроки в строку

    Источник

    uses StrUtils;

    ...

    function Substr_Count(const Substring, Text: string): integer;
    var
    offset: integer;
    begin
    result := 0;
    offset := PosEx(Substring, Text, 1);
    while offset <> 0 do
    begin
    inc(result);
    offset := PosEx(Substring, Text, offset + length(Substring));
    end;
    end;

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

    PostgreSQL: перенос БД (временное решение)

    БД перенесена сюда:
    /mnt/diska/postgresql/9.5/data
    Конфигурационные файлы, например, pg_hba.conf, считываются оттуда же.

    (Временно) Запуск службы из под пользователя «postgres» с помощью команды:
    /usr/pgsql-9.5/bin/postmaster -D /mnt/diska/postgresql/9.5/data

    (Временно) Использовать команду
    service postgresql-9.5 start
    пока запрещено.

    четверг, 8 декабря 2016 г.

    Oracle: importdp.sh: UDI-00014: invalid value for parameter, 'remap_schema'

    После включения опции подкрашивания результатов команды grep
    модифицированная версия утилиты импорта дампов importdp.sh стала выдавать ошибку:

    ./importdp.sh MY_NEW_SCHEMA mydumpfile.dmp

    -----------------------------------------
    Restoring from E USER to MY_NEW_SCHEMA using dump mydumpfile.dmp ...
    -----------------------------------------

    Import: Release 11.2.0.4.0 - Production on Thu Dec 8 19:23:40 2016

    Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

    Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    UDI-00014: invalid value for parameter, 'remap_schema'

    Оказалось, что для подкрашивания текста grep добавляет к найденной строке дополнительные символы, что влияет на длину результирующей строки: визуально строка выглядит прежней, но на деле она становится длиннее за счет доп.символов, например, команда
    echo "foo"
    выведет на экран слово из 3-х букв:
    foo
    команда
    expr length `echo "foo"`
    сообщит, что слово длиной 3 символа:
    3
    команда
    echo "foo"|grep foo
    выведет на экран все то же слово "foo", только в этот раз оно будет подкрашено (по-умолчанию красным):
    foo
    вроде бы, ничего особенного, визуально, также 3 символа, но если посчитать количество символов в строке с помощью команды
    expr length `echo "foo"|grep foo`
    то результат будет:
    19
    потому что на самом деле строка уже состоит не только из слова, но еще и из управляющих символов, которые можно увидеть с помощью команды:
    echo "foo"|grep foo|less
    результатом которой будет
    ESC[01;31mfooESC[00mESC[K

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

    Можно ли запустить на одном компьютере одновременно два AzkExchange с форматами AzkFinance или AzkPlanning?

    Можно.
    Создайте 2 пакетных файла (батника) со следующим содержимым:

    AzkFinance.bat (строка приведена для примера, у вас будут свои пути к файлам и папкам):
    start C:\azk\exch\bin\NR-6.2.0.4-3-1.8j\AzkExchange.exe /mutex=AzkFinance /dir=c:\azk\exch\format\AzkFinance\v2_37-5.0.1.6-66

    AzkPlanning.bat (строка приведена для примера, у вас будут свои пути к файлам и папкам):
    start C:\azk\exch\bin\NR-6.2.0.4-3-1.8j\AzkExchange.exe /mutex=AzkPlanning /dir=c:\azk\exch\format\AzkPlanning\4.3.2.15-264


    Примечание: с какой-то версии вместо /mutex можно использовать привычный /INSTANCE.

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

    JSTL: Пример обработки двух кнопок одной формы

    index.jsp:
    <form method="post" action="checkbox.jsp">
    <P>Включите одну или несколько галочек:</p>

    <P>Галочка 1
    <input type="checkbox" name="mychkbox" value="Галочка 1"/></p>
    <P>Галочка 2
    <input type="checkbox" name="mychkbox" value="Галочка 2"/></p>
    <P>Галочка 3
    <input type="checkbox" name="mychkbox" value="Галочка 3"/></p>
    <P>Галочка 4
    <input type="checkbox" name="mychkbox" value="Галочка 4"/></p>

    <P><input type="submit" name="button1" value="Кнопка 1" /></p>
    <P><input type="submit" name="button2" value="Кнопка 2" /></p>
    </form>

    checkbox.jsp:
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

    <c:choose>
    <c:when test="${not empty paramValues.button1}">
    <% // Проверяем, была ли нажата кнопка "Кнопка 1" %>
    Вы нажали кнопку "Кнопка 1"
    <c:choose>
    <c:when test="${not empty paramValues.mychkbox}">
    <% // Проверяем, были ли включены чекбоксы %>
    и выбрали галочки:
    <c:forEach items="${paramValues.mychkbox}" var="myvar">
    <br><c:out value="${myvar}"/>
    </c:forEach>
    </c:when>
    <c:otherwise>
    , но не включили ни одной галочки.
    </c:otherwise>
    </c:choose>
    </c:when>
    <c:when test="${not empty paramValues.button2}">
    <% // Проверяем, была ли нажата кнопка "Кнопка 2" %>
    Вы нажали кнопку "Кнопка 2".
    </c:when>
    <c:otherwise>
    <% // Заглушка на невозможный случай %>
    Что-то не так. Если вы видите этот текст, обратитесь к администратору.
    </c:otherwise>
    </c:choose>


    отсюда

    четверг, 17 ноября 2016 г.

    Получение значения из SQL-запроса с вычисляемым наименованием колонки

    /* Пример блочного выполнения PL/SQL с вычисляемым наименованием колонки в переменной myCOLUMN и запоминанием результата такого запроса в переменной myRESULT */
    DECLARE
        myRESULT varchar(255);
        myCOLUMN varchar(255) := 'user_id';
    BEGIN
        execute immediate 'select '||myCOLUMN||' from dba_users where rownum = 1' into myRESULT;
        dbms_output.put_line(myRESULT);
    END;

    Для сравнения
    Тот же пример, но без вычисляемого наименования колонки, т.е. без "execute immediate":
    DECLARE
        myRESULT varchar(255);
    BEGIN
        select user_id into myRESULT from dba_users where rownum = 1;
        dbms_output.put_line(myRESULT);
    END;

    Вызов хранимой PL/SQL-процедуры с помощью JSTL

    В базу была добавлена хранимая процедура:
    "create or replace procedure VACUUM as begin ... end"

    Ее вызов из WEB-приложения организован следующим образом:

    index.jsp (кроме остальной части) есть кнопка вызова страницы, вызывающей хранимую процедуру:
    <form action="vacuum.jsp" method="POST">
    <input type="submit" style="width:150px" value="Актуализировать" title="Убрать &quot;мертвые души&quot;">
    </form>

    vacuum.jsp:
    <%@ page contentType="text/html; charset=utf-8" pageEncoding="UTF-8" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
    <%//Антикракозябриковая кодировка
    request.setCharacterEncoding("UTF-8");%>
    <sql:update dataSource="${dbConnection}">
    begin VACUUM; end;
    </sql:update>
    <%response.sendRedirect("index.jsp");%>

    воскресенье, 23 октября 2016 г.

    PostgreSQL for Beginners x2i.pdf, pg_hba.conf, appdb

    В методичке для новичков "PostgreSQL for Beginners x2i.pdf" есть задание: нужно подключиться к созданной своими руками БД с помощью команды в "psql":
    \c appdb app localhost 5432
    которая заканчивается ошибкой:
    ВАЖНО: пользователь "app" не прошёл проверку подлинности (Ident)
    Сохранено предыдущее подключение

    Помогло переключение метода (столбец "METHOD") определения доступа в файле "pg_hba.conf".
    Было:
    # TYPE DATABASE USER ADDRESS METHOD
    # "local" is for Unix domain socket connections only
    local all all peer
    # IPv4 local connections:
    host all all 127.0.0.1/32 ident
    # IPv6 local connections:
    host all all ::1/128 ident

    Стало:
    # TYPE DATABASE USER ADDRESS METHOD
    # "local" is for Unix domain socket connections only
    local all all trust
    # IPv4 local connections:
    host all all 127.0.0.1/32 trust
    # IPv6 local connections:
    host all all ::1/128 trust

    Установка PostgreSQL 9.5 на Oracle Linux 5

    По мотивам: http://tecadmin.net/install-postgresql-9-5-on-centos/#

    1) yum install postgresql95-server postgresql95
    2) service postgresql-9.5 initdb
    3) service postgresql-9.5 start
    4) для автозапуска при старте сервера:
    chkconfig postgresql-9.5 on

    P.S. Пришлось вручную добавить в /var/lib/pgsql/.bash_profile:
    alias psql = '/usr/pgsql-9.5/bin/psql'

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

    PostgreSQL: расположение конфигурационных файлов и другие параметры СУБД

    В "PostgreSQL for Beginners v2i.pdf" написано, что конфигурационные файлы СУБД находятся по следующим путям:
    об автозагрузке:
    /etc/postgresql/9.5/main/start.conf
    параметры сервера:
    /etc/postgresql/9.5/main/postgresql.conf
    настройки доступа:
    /etc/postgresql/9.5/main/pg_hba.conf

    Но на практике, по крайней мере на виртуальном образе с Xubuntu, скачаного с оф.сайта, после установки СУБД конфигурационные сайты удалось найти только с помощью команды в psql:
    postgres=# show hba_file;
    hba_file
    -----------------------------------
    /usr/local/pgsql/data/pg_hba.conf
    (1 row)

    Вообще, команда "SHOW" очень удобная, например, с помощью команды:
    SHOW ALL;
    можно получить список всех параметров СУБД вместе с их значениями.
    Например, параметр "data_directory" указывает на место расположения файлов данных СУБД в хранилище:
    postgres=# show data_directory;
    data_directory
    -----------------------
    /usr/local/pgsql/data
    (1 row)

    понедельник, 17 октября 2016 г.

    PostgreSQL: образы виртуальных машин

    https://files.postgrespro.ru/departments/edu/www/
    Мое знакомство с Linux началось с Oracle Enterprise Linux 5.11, поэтому для меня было неожиданностью то, что в Ubuntu пользователь "root" заблокирован и не имеет пароля.
    Все команды из методички по "PostgreSQL DBA1", для которой предназначены образы виртуальных машин, нужно выполнять с командой "sudo" и вводить пароль для пользователя с логином "student" - пароль такой же - "student".

    PostgreSQL: make distclean

    Ошибка невнимательного админа :)
    При выполнении команды по сбросу состояния дистрибутива, не заметил надпись, что выполнять ее нужно при повторной установке. В первый раз она выдает ошибка:
    [root@myserver postgresql-9.5.4]# make distclean
    You need to run the 'configure' program first. See the file
    'INSTALL' for installation instructions.
    make: *** [distclean] Ошибка 1

    Windows 7 для USB

    Следуя инструкции по подготовке USB-носителя для установки с него Windows 7 x64 (https://www.microsoft.com/ru-ru/download/windows-usb-dvd-download-tool) столкнулся с проблемой:
    рекомендуемая утилита (Windows USB/DVD Download Tool) для записи ISO-образа на USB-носитель, при попытке считать ISO-образ, сообщила об ошибке:

    ---------------------------
    Invalid ISO File
    ---------------------------
    The selected file is not a valid ISO file. Please select a valid ISO file and try again.
    ---------------------------
    ОК
    ---------------------------

    Помогла конвертация ISO-образа с флагом использования файловой системы UDF (воспользовался одним из редакторов образов - DAEMON Tools Ultra.

    Генераторы в PostgreSQL

    1) Генерация следующего значения:
    insert into table1(ID, ...) values (NEXTVAL('table1_seq'), ...);
    2) Получение текущего значения генератора:
    CURRVAL('table1_seq')

    Подробнее: https://postgrespro.ru/docs/postgrespro/9.5/functions-sequence.html

    пятница, 14 октября 2016 г.

    Идентификатор платежа

    https://www.consultant.ru/document/cons_doc_LAW_155187/c885f4dbade21c0302734b4246a04815a96d5264/

    /home/oracle/.bash_profile

    # .bash_profile

    # Get the aliases and functions
    if [ -f ~/.bashrc ]; then
    . ~/.bashrc
    fi

    # User specific environment and startup programs
    export ORACLE_BASE=/mnt/hd2tb/oracle_ee
    export ORACLE_HOME=$ORACLE_BASE/product/11.2.0.4
    export ORACLE_SID=ORACL11B

    # Для рестора дампов Минфина Иркутской области, Ангарска, Братска и Волгограда:
    # export NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251

    # Для рестора дампа Екатеринбурга (Сопровождение 2016-2, #5475)
    export NLS_DATE_FORMAT=YYYY-MM-DD
    export NLS_LANG=AMERICAN_CIS.CL8MSWIN1251

    export LD_LIBRARY_PATH=$PATH:$ORACLE_HOME/bin:/usr/bin:/sbin:/bin:/usr/local/bin
    export LIBPATH=$ORACLE_HOME/lib
    export THREADS_FLAG=native
    export ORACLE_UNQNAME=ORACL11B

    #export TZ=Etc/GMT+8

    export JAVA_HOME=/usr/java/jdk1.8.0_101
    export JRE_HOME=$JAVA_HOME/jre
    PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
    export LANG=ru_RU.UTF-8
    export PATH

    alias sqlplus='rlwrap sqlplus'

    четверг, 13 октября 2016 г.

    VMWare: ошибка сетевого адаптера

    Запуск виртуальной машины встретил меня ошибкой (сетевой адаптер виртуальной машины настроен в режиме "Bridge"):
    «
    The network bridge on device 'VMnet0' is not running. The virtual machine will not be able to communicate with the host or with other machines on your network.
    Failed to connect virtual device 'Ethernet0'.
    ».

    Помогло добавление службы "VMWare Bridge Protocol" в настройках сетевого адаптера на хост-машине.

    понедельник, 3 октября 2016 г.

    Сброс пароля Windows 7

    http://winkomp.ru/kak-sbrosit-parol-v-windows-7
    Способ хорош тем, что не нужны никакие утилиты, все делается за счет имеющегося ПО на борту самой винды.

    Сделать резервную копию утилиты "sethc.exe", например, на диске D:\
    copy D:\Windows\System32\sethc.exe D:\

    Затем, заменить ее средой выполнения командной строки:
    copy D:\Windows\System32\sethc.exe D:\Windows\System32\cmd.exe

    После этого нужно загрузить Windows 7, нажать 5 раз клавишу Shift - откроется командная строка.
    Выполните команду (показывает список пользователей - нужно выбрать того, у которого администраторские привилегии):
    net user
    Затем, сбросить этому пользователю (например, "Admin") пароль:
    net user Admin 111

    среда, 21 сентября 2016 г.

    (черновик) В Skype не загружаются картинки/фотографии

    В окне бесед и групповых чатах Skype не загружаются картинки. Такое только на рабочем компьютере.
    Грешу на КриптоПро (до его установки проблемы не было).
    Может быть аналог http://beepings.blogspot.ru/2016/08/800b0001-windows.html

    четверг, 15 сентября 2016 г.

    (черновик) Параметры для строк лога (Logback)

    https://logging.apache.org/log4php/docs/layouts/pattern.html

    КриптоПро 3.6 и Windows 10

    Подружил "Win10 x64" с:
    - csp-x64-kc2-rus.msi;
    - cades-x64.msi (это для TLS- и OCSP-клиентов).

    ----
    При установке "csp-x64-kc1-rus.msi" приложение "Skype for Business" выдавало при запуске ошибку:
    «
    Не удается войти в Skype для бизнеса
    Сервер временно недоступен. Если проблема сохранится, обратитесь в группу поддержки.
    »,
    при этом в журнале событий "Система" (Windows) появлялось сообщение:
    «
    Имя журнала: System
    Источник: Schannel
    Дата: 15.09.2016 9:54:31
    Код события: 36876
    Категория задачи:Отсутствует
    Уровень: Ошибка
    Ключевые слова:
    Пользователь: IRK-NK-14-4\lool
    Компьютер: IRK-NK-14-4.bft.local
    Описание:
    Сертификат, полученный от удаленного сервера, не прошел проверку. Код ошибки: 0x80092012. Запрос на TLS-соединение не удалось выполнить. Сертификат сервера содержится в прилагаемых данных.
    Xml события:



    36876
    0
    2
    0
    0
    0x8000000000000000

    20795


    System
    IRK-NK-14-4.bft.local



    0x80092012
    308206663082054EA00302010202106D073776F021FFF0584DD913FC211230300D06092A864886F70D01010B05003044310B300906035504061302555331163014060355040A130D47656F547275737420496E632E311D301B0603550403131447656F54727573742053534C204341202D204733301E170D3136303632313030303030305A170D3138303931343233353935395A3072310B3009060355040613025255311B301906035504080C125255535349414E2046454445524154494F4E310F300D06035504070C064D6F73636F7731143012060355040A0C0B4C4C43204D61696C2E5275310B3009060355040B0C0249543112301006035504030C092A2E6D61696C2E727530820122300D06092A864886F70D01010105000382010F003082010A0282010100C495A2410B9AD556CD27DA125C734BCF8A4495A4C94FC31A87EA9CF9F3DE84A8663CA43F63693EAAD759D2F1458C83D6BD90FBA412DE2C946FA691BF6B3AF60E360EA9DCE57B1835174EEEA9E54B8F7B70725FA091E643C55A7388AF2C2C1563C8AF8FCFF5D1A1514874EEABC36166BCC349FCEF4FB4D71D2D7FDC1478AEE94B3C6EC5042CB55A91E54068006CDA5E91A4057356264F0CF338A8F2353FD144DD3C32EEE77105C18B859AF7D74FEE8B81465D802922B1A440905604B7C787CCB95E83DDB04E4D20BAC1271D0A4860C58B78E9C23E8D8C87F02FF243319A9F32AF481E7377FEB51E986EF472E4FF4D8CC0A076B20604DEDC64E12001664DAE7CA50203010001A382032430820320301D0603551D110416301482092A2E6D61696C2E727582076D61696C2E727530090603551D1304023000300E0603551D0F0101FF0404030205A0302B0603551D1F042430223020A01EA01C861A687474703A2F2F676E2E73796D63622E636F6D2F676E2E63726C30819D0603551D2004819530819230818F060667810C010202308184303F06082B06010505070201163368747470733A2F2F7777772E67656F74727573742E636F6D2F7265736F75726365732F7265706F7369746F72792F6C6567616C304106082B0601050507020230350C3368747470733A2F2F7777772E67656F74727573742E636F6D2F7265736F75726365732F7265706F7369746F72792F6C6567616C301D0603551D250416301406082B0601050507030106082B06010505070302301F0603551D23041830168014D26FF796F4853F723C307D23DA85789BA37C5A7C305706082B06010505070101044B3049301F06082B060105050730018613687474703A2F2F676E2E73796D63642E636F6D302606082B06010505073002861A687474703A2F2F676E2E73796D63622E636F6D2F676E2E6372743082017C060A2B06010401D6790204020482016C048201680166007500DDEB1D2B7A0D4FA6208B81AD8168707E2E8E9D01D55C888D3D11C4CDB6ECBECC0000015572F4EA7E000004030046304402205AB9002DBA39817E23E4523467DA550F1A1BFC2AC553A2898CDB1F46B3DBE33C022072352B4A8F0A04FEE922FA39E03496F39D90651FF72E28FF47FD8994AC5C2EA4007400A4B90990B418581487BB13A2CC67700A3C359804F91BDFB8E377CD0EC80DDC100000015572F4EAA50000040300453043021F532E1F721B633CA115BBF152BA4FC14D2216F143AB4CDDAFBB4662B0177A3202201209280498FB1D0B4C00C2BFB9F1FB01E6C67D4981DE5B9648CB3F09659E66B200770068F698F81F6482BE3A8CEEB9281D4CFC71515D6793D444D10A67ACBB4F4FFBC40000015572F4EABD0000040300483046022100F8A5642656F52AD54AAA180FC6B91FD7093FE1D0BEB107BF63AC74E053BE66D9022100C0DE7D8B983CA5109865EC82E0DC809E2332885E8A4DF13545EAE154E9528A8D300D06092A864886F70D01010B05000382010100AC69EBFFD6A995286A030D642BA8B732BD35BCA0CB375C2ABF68C19AD3B9E21084A859F2D3E573A5646D683F8A8C234EC1FB1F31FF1F97F3F5EDEA8859B431388388E3EF478C48051D23DFB375C0C298CC89383F85D143D1C05E434ECE2CA21DE45EEB312B4D765DB8FCB2434CA09B6BF029CFD9891C276945BB25237C69268A53C9450CCBFCE4F82D12680747E73664EAD6BA2D60D6C3725B68C04B195F4195E81874E976AC15F4CEAF0E356FDAF37A08D570642914B96696B2BF3441F781049C4C841B815AABCFB9F0301C17E3D0534C82F8F901C7282634ED058645850B25C4DAB42CDF6488C12390210C65F0415679F2A3AE649CDFBAF8F7FAE3F6D71E65

    »

    суббота, 3 сентября 2016 г.

    Взаимодействие с ФК при ЛСФК (03 счета)

    После исполнения РР ФК предоставляет "Ведомость по движению свободного остатка" (RM-файл), загрузка которой переводит РР со статуса "Отправлен" на "Обработка завершена".
    Также с ее бумажной версии суммы вручную вводятся в новую запись справочника "Итоговые обороты по выписке банка", где после нажатия кнопки "ОК" расчитывается поле "Расхождение" (в идеале, его значение должно быть равно "0").

    «
    Орган Федерального казначейства не позднее следующего рабочего дня после получения банковской выписки со счета N 40201 (N 40204)
    »
    Система ГАРАНТ: http://base.garant.ru/12162844/#block_100085#ixzz4J872MXXS

    - Ведомость по движению свободного остатка (RM файлы)
    - Отчет об операциях клиентов ОрФК (IK файлы)
    - Реестр перечисленных поступлений (DP файлы)
    - Сводная ведомость по кассовым выплатам из бюджета (ежедневная) (IV файлы)
    - Сводная ведомость по кассовым поступлениям (ежедневная) (IP файлы)

    - Ведомость по движению свободного остатка (RM файлы)
    /* Переводит РР на "Обработка завершена" */

    - Отчет об операциях клиентов ОрФК (IK файлы)
    /* */

    - Реестр перечисленных поступлений (DP файлы)
    /* */

    - Сводная ведомость по кассовым выплатам из бюджета (ежедневная) (IV файлы)
    /* Создает ЭД "Приложение к выписке дебетовое" и квитует его в ЗОР(ЗКР) */

    - Сводная ведомость по кассовым поступлениям (ежедневная) (IP файлы)
    /* */

    воскресенье, 28 августа 2016 г.

    Именованные диапазоны в MS Excel

    По-умолчанию у каждой ячейки есть адрес, например, A1.
    У диапазона ячеек также есть адреса, основанные на адресе ячеек, например, A1:B4.

    Но есть возможность присваивать ячейкам и диапазонам другие имена, например: CELL_A1, RANGE_A1B4, SUMMA_DIAPAZONA, и т.д.
    Присвоить имя ячейке можно напечатав его (имя) в поле с адресом ячейки - сверху-слева.
    Присвоить имя диапазону можно также, как и ячейке, либо выделив его (диапазон), щелкнув правой кнопкой мыши и выбрав пункт меню "Присвоить имя".
    Либо, все операции по присвоению имени можно сделать в "Диспетчере имен", о котором написано ниже.
    Управлять именами ячеек/диапазонов можно в "диспетчере имен" - Ctrl+F3 (или на вкладке "Формулы" -> пункт "Диспетчер имен").

    суббота, 27 августа 2016 г.

    (черновик) МБТ

    Кузьмина Е.

    МБТ могут быть
    федеральными
    областными.

    В нашем понимании
    Федеральные с кодами цели.
    Областные, в принципе, тоже можно сюда засунуть, но по части процесса по этому вопросу идет работа в записи
    Внедрение (АЦК-Ф), #7108
    Примечание: ЭД класса 24 "Приложение к выписке кредитовое".

    Для МБТ должны быть отдельные бланки расходов.

    Общее описание:
    Есть МБТ, которые уходят из области в район.
    Часть этих субвенций, субсидий, дотаций, может дальше отправляться в поселения.
    Часть - может быть потречена учреждениями самого района.

    Область сначала присылает уведомление, потом - деньги, как доходы и потом, район по этим доходам должны провести некие расходы, но в пределах полученной суммы. Соответственно, для этих средств нужен план по доходам и по расходам.
    Для контроля непревышения расходов над доходами по этим МБТ мы можем использовать только коды цели, т.к. только с их помощью мы можем связать доход с расходом.

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

    Пример карточки бланка расходов (Зерноградский, 904) для исходящих МБТ:

    Scanner

    Старая программа, с которой началось мое знакомство с утилитами, визуализирующими занятое пространство носителей:
    Scanner - http://steffengerlach.de/freeware/:

    четверг, 25 августа 2016 г.

    800b0001 - ошибка обновления Windows

    Около 3-4 лет на корпоративном ноутбуке были проблемы с обновлениями
    "Microsoft Security Essentials" из-за ошибки: 0x800b0001, "Неизвестный поставщик доверия";
    "Центр обновления Windows" из-за ошибки: 800b0001.

    Дело решилось после удаления какой-то старой версии КриптоПро.

    пятница, 5 августа 2016 г.

    Создание схемы Oracle вручную

    Когда создаем схему под дамп Oracle, то можно сразу давать некоторые привилегии:
    create user <my_schema> identified by <my_password>;
    grant connect,resource to <my_schema>;
    grant select on v_$locked_object to <my_schema>;
    grant select any dictionary to <my_schema>;

    вторник, 2 августа 2016 г.

    [решено] Notepad++ и буква "И" в XML

    У "Notepad++" какая-то нездоровая потенция на большую букву "И" в XML-документах. При открытии/сохранении такого документа он каждый раз сообщает нечто подобное:
    «
    XML Parsing error at line 1:
    Premature end of data in tag REFERENCE line 3
    »
    или
    «
    XML Parsing error at line 1:
    start tag expected, '<' not found
    »

    Пример содержимого проблемного XML-файла:
    <?xml version="1.0" encoding="windows-1251"?>
    <NODE param="test1">
    <SUBNODE param="И"/>
    </NODE>

    Если в строке "<SUBNODE param="И"/>" вместо "И" указать любую другую букву, тогда ошибок не будет.

    ASCII-коды буквы "И": DEC 200, HEX C8.


    ---------ПРОВЕРИТЬ-----------
    NiTRO (12:30:55 1/08/2016)
    у меня - не выдает ошибку
    cодержимое взял с блога
    вин7 х64

    ---------ПОСТОЯННОЕ РЕШЕНИЕ-----------
    Помогло полное удаление, перезагрузка и установка с нуля версии 6.9.2.
    ОС Windows 10 x64.

    P.S.
    Возможно дело было в файлах:
    «
    C:\Program Files (x86)\Notepad++\libxml2.dll
    C:\Program Files (x86)\Notepad++\libxml2-2.dll
    ».
    После применения постоянного решения эти файлы исчезли.

    вторник, 26 июля 2016 г.

    Где CRL-файл?

    Актуально для "Центра Сертификации" на MS Windows Server 2003 Enterprise Edition".
    При выполнении действия "Опубликовать" ("Publish") над узлом "Отозванные сертификаты" ("Revoked Certificates") файл (.crl) создается здесь:
    %WINDIR%\system32\certsrv\CertEnroll\<CA_name>.crl

    понедельник, 25 июля 2016 г.

    *.tar.gz

    tar xvfz *.tar.gz

    Используемые в команде ключи

    x - позволяет вам извлекать файлы из архива.
    v - делает вывод tar подробным. Это означает, что на экран будут выведены все найденные в архиве файлы. Если эта опция опущена, информация, выводимая в процессе обработки, будет ограничена.
    f - является обязательной опцией. Без неё tar пытается использовать магнитную ленту вместо файла архива.
    z - позволяет вам обрабатывать архив, сжатый gzip'ом (с расширением .gz). Если вы забудете указать эту опцию, tar выдаст ошибку. И наоборот, эта опция не должна использоваться для несжатых архивов.

    Список обновлений ОС Windows и других программ

    На странице консоли "appwiz.cpl" (пункт "Просмотр установленных обновлений") виден список всех обновлений и ПО от Microsoft, в том числе, и обновления для MS Office.
    Появилась задача - получить этот список в текстовом виде.

    Оказалось, что "wmic" может получить список только самой ОС
    wmic qfe list full
    но не другого ПО, а значит он не покажет обновления MS Office.

    В связи с этим познакомился с MS PowerShell (поэтому способ ограничен версией MS Windows = по-умолчанию "MS PowerShell" установлен на ОС Windows 7 и выше, а на Windows XP его нужно дополнительно устанавливать)
    способ подглядел здесь.

    list_winupdates.ps1:
    «
    $wu = new-object -com “Microsoft.Update.Searcher”
    $totalupdates = $wu.GetTotalHistoryCount()
    $wu.QueryHistory(0,$totalupdates)| Export-CSV -delimiter "|" .\list_winupdates_result.csv -Encoding UTF8
    # по окончанию можно открыть файл с результатами: "ii .\list_winupdates_result.csv"
    ».

    Правой кнопкой по скрипту и "Выполнить с помощью PowerShell". По окончанию выполнения скрипта в папке, рядом со скриптом, появится файл "list_winupdates_result.csv".

    xcopy - подавление запроса типа назначения

    "xcopy" выдает запрос о типе назначения:
    «
    Что означает <file>:
    имя файла или каталога
    (F = файл, D = каталог)?
    ».

    Как его подавить, если "xcopy /I" не помогает?

    Решение, если тип назначения - это файл (имитируем нажатие клавиши "f"):
    echo f|xcopy ...

    Решение, если тип назначения - это директория (имитируем нажатие клавиши "d"):
    echo d|xcopy ...

    Восстановление DOCATTACHEX

    select
     ff.FOLDER||'atch#'||dae.ID "Файлы в хранилище"
    ,'insert into FileFolder(FILE_NAME,FOLDER,DEVICE_NAME,STORAGE_NAME) values('
     ||''''||ff.FILE_NAME||''','
     ||''''||ff.FOLDER||''','
     ||''''||ff.DEVICE_NAME||''','
     ||''''||ff.STORAGE_NAME||''');' "SQL для тестовой БД"
    ,'echo F|xcopy /Y '||replace(ff.FOLDER,'/','\')||'atch#'||trim(dae.ID)||' mydest\'||replace(ff.FOLDER,'/','\')||'atch#'||dae.ID "win_bat_copy" /*Строки этого столбца нужно копировать в BAT-файл для Windows - он скопирует в mydest нужные файлики-вложения*/
    from DOCATTACHEX dae join filefolder ff on ff.FILE_NAME=trim(dae.ID) where dae.DOCUMENT_ID in (
    select
     del.DOCUMENT_ID
    from DOCEVERRLOG del
    join document d on d.id = del.DOCUMENT_ID
    where del.EVENT_MSG like '%AZK-9038. Ошибка удаленного вызова задания%'
    and to_date(del.EVENT_BEGIN, 'DD.MM.YY') = to_date('06.07.16', 'DD.MM.YY')
    );

    понедельник, 18 июля 2016 г.

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

    Рестор дампа из нескольких файлов

    Впервые пришлось ресторить дамп, который расположен в двух файлах, а не в одном. Такой дамп нужно ресторить, перечислив названия его файлов через запятую в параметре "DUMPFILE" (спасибо Снытко А.), пример:
    impdp scott/tiger DIRECTORY=data_pump_dir DUMPFILE=demo01.dmp,demo02.dmp,demo03.dmp logfile=log01.log SCHEMAS=SCOTT

    Правда были свои нюансы:
    почти сразу стала появляться ошибка:
    ORA-00959: tablespace 'AZK2016' does not exist
    Т.к. на моем сервере только "USERS", поэтому в строку команды рестора я добавил
    REMAP_TABLESPACE=AZK2016:USERS

    После этого рестор закончился, но с двумя ошибками, не создались 2 таблицы:

    ORA-39083: Object type TABLE:"NEWBASE"."USERCERT" failed to create with error:
    ORA-01847: day of month must be between 1 and last day of month
    ...
    ORA-39083: Object type TABLE:"NEWBASE"."NOTIFYMSG" failed to create with error:
    ORA-01861: literal does not match format string

    Все из-за разности параметров
    NLS_LANG
    NLS_DATE_FORMAT
    между сервером БД откуда дамп пришел и моим сервером. Стоило их уравнять и рестор выполнился успешно.

    Дополнение:
    Согласно описания параметра DUMPFILE вместо записи
    impdp scott/tiger DIRECTORY=data_pump_dir DUMPFILE=demo01.dmp,demo02.dmp,demo03.dmp logfile=log01.log SCHEMAS=SCOTT
    можно использовать переменную "%U", диапазон значений которой варьируется от 01 до 99:
    impdp scott/tiger DIRECTORY=data_pump_dir DUMPFILE=demo%U.dmp logfile=log01.log SCHEMAS=SCOTT

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

    (Java) Lombok

    Lombok - плагин, позволяющий автоматизировать создание методов для объектов Java (сеттеров, геттеров, hashCode и прочий бойлерплейт код).
    Подробнее: https://urvanov.ru/2015/09/22/project-lombok/

    суббота, 18 июня 2016 г.

    (Oracle) Удалить таблицу, если она существует

    На примере данной задачи можно увидеть, как обрабатывать коды исключений в блоках Oracle:

    BEGIN
    EXECUTE IMMEDIATE 'DROP TABLE CTRL_74_9724';
    EXCEPTION
    WHEN OTHERS THEN
    IF SQLCODE != -942 THEN
    RAISE;
    END IF;
    END;

    четверг, 16 июня 2016 г.

    Схемы горячих клавиш в редакторе Delphi 7

    В схеме гор.клавиш "по-умолчанию" TAB не сдвигает выделенный текст, а просто вставляет табуляцию, стирая выделенное, но это можно изменить, выбрав другую схему:
    пункт меню Tools -> Editor Options -> вкладка "Key Mappings".
    Выбираем схему, например "Visual Studio" и таб сдвигает выделенный текст.

    среда, 15 июня 2016 г.

    Операции над логическими переменными в Java

    "И" = "AND": обозначение в Java: "&&"
    "ИЛИ" = "OR": обозначение в Java: "||"
    "НЕ" = "NOT": обозначение в Java: "!"

    "! (a && b)" - то же самое, что и "!a || !b"
    "! (a || b)" - то же самое, что и "!a && !b"

    Сокращенная запись "if" в Java

    Полная запись конструкции "if":

    public static int max(int a, int b)
    {
    if (a > b) return a;
    else return b;
    }

    То же самое, но в сокращенном виде:
    public static int max(int a, int b)
    {
    return a>b?a:b;
    }

    Пример для проверки четности числа:
    public static String even(int a)
    {
    return (a%2)==0?"четное":"нечетное";
    }

    четверг, 9 июня 2016 г.

    Java. Обращение к классам в пакете.

    C:\JavaSolutions\

    helloworld.java:
    package com.javarush.helloworld;

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;

    /**
     * Created by dpool on 08.06.2016.
     */
    public class helloworld {
        public static void main(String[] args) {
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            String myname = null;
            System.out.print("Введите ваше имя: ");
            try {
                myname = reader.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            System.out.println("Привет, " + myname + "!");

        }
    }

    Запуск:
    C:\JavaSolutions>javac helloworld.java
    C:\JavaSolutions>javac -cp . helloworld.java
    javac -cp C:\JavaSolutions helloworld.java

    C:\JavaSolutions>java com.javarush.helloworld.helloworld
    [com.javarush.helloworld].[helloworld] = [package_name].[class_name]

    среда, 8 июня 2016 г.

    Приложения для Android

    - www.musixmatch.com - считывает название песни и выводит ее слова во всплывающем окне во время проигрывания;
    - www.macrodroid.com - автоматизирует смартфон, используя различные события в качестве триггеров для разных действий;
    - Moosic - приложение для прослушивания и скачивания музыки из Майл.ру, Одноклассников и ВК;

    среда, 25 мая 2016 г.

    Закладка в тексте HTML-страницы

    Сама закладка оформляется так:
    <a name="закладка_1">
    Ссылка, ведущая на закладку:
    <a href="закладка_1">Ссылка на закладку 1</a>
    Переход к закладке в тексте страницы "textpage.html":
    <a href="textpage.html#закладка_1">Ссылка на закладку 1 на странице textpage.html</a>

    Отображение в браузере содержимого текстового файла

    Как отобразить в браузере содержимое текстового файла?

    Например, лога импорта дампа - \\myserver\logs\restore.log.
    Прямые ссылки (<a href="file://///myserver/logs/restore.log">show file</a>) не работают из-за ограничений безопасности браузеров (ссылка на странице отображается, но щелчок по ней ни к чему не приводит).

    Решение с помощью JSTL:
    Создаем jsp-страницу, например, "show_log.jsp", следующего содержания:
    <%@ page contentType="text/html; charset=utf-8" pageEncoding="UTF-8" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <%//Антикракозябриковая кодировка
    request.setCharacterEncoding("UTF-8");%>
    <pre><c:import url="file://///myserver/logs/restore.log" /></pre>

    На главную страницу добавляем ссылку на "show_log.jsp". Теперь при щелчке по такой ссылке в браузере откроется страница с содержимым текстового файла "\\myserver\logs\restore.log".

    Открыть ссылку в новой вкладке

    Чтобы ссылка открывалась в новой вкладке браузера нужно:
    <a href="..." target="_blank">blablabla</a>

    Oracle: директории

    Пример: чтобы утилита "impdp" сразу сохраняла лог импорта в определенной папке, например, "/mnt/oracle/dumps/logs", нужно:
    1) создать нужную папку (в примере "LOG_DIR"):
    create directory LOG_DIR as '/mnt/oracle/dumps/logs';
    2) указать ее в команде запуска:
    impdp ... LOGFILE=LOG_DIR:import.log

    понедельник, 16 мая 2016 г.

    (MS Outlook) Сохранение отправленных писем в папке "Отправленные" общего почтового ящика

    Если в рамках MS Exchange личной учетной записи на почтовом сервере предоставлен доступ к общему почтовому ящику, то, чтобы отправленные письма сохранялись в папке "Отправленные" общего ящика, нужно следовать инструкции:
    https://support.microsoft.com/en-us/kb/2843677.

    1. Click Start, click Run, type regedit, and then click OK.
    2. Locate and then click the following registry subkey:
    HKEY_CURRENT_USER\Software\Microsoft\Office\x.0\Outlook\Preferences
    Note The x.0 placeholder represents your version of Office (16.0 = Office 2016, 15.0 = Office 2013, 14.0 = Office 2010).
    3. On the Edit menu, point to New, and then click DWORD Value.
    4. Type DelegateSentItemsStyle, and then press Enter.
    5. Right-click DelegateSentItemsStyle, and then click Modify.
    6. In the Value data box, type 1, and then click OK.
    7. Exit Registry Editor.

    Пример для MS Office 2010 x32:

    четверг, 12 мая 2016 г.

    Пример запроса, который создает запросы по констрейнту

    Задача:
    Найти таблицы, в которых используется пара кодов из справочника "КЦСР", а именно: 7140450641 и 7140450642.

    Решение с помощью запроса, создающего подзапросы:
    1) Пишем запрос, результатом которого будет один большой запрос, состоящий из множества подзапросов объединенных оператором "union all":
    «
    select
    'select '''||c.table_name||'.'||cc.column_name||''',count(*) CNT from '
    ||c.table_name
    ||' t where t.'||cc.column_name||' in (''7140450641'', ''7140450642'') and t.BUDGET_ID=800000001309 union all'
    from user_constraints c join user_cons_columns cc on cc.constraint_name = c.constraint_name where c.r_constraint_name='UQ_KCSR' and cc.column_name <> 'BUDGET_ID'
    order by c.table_name,cc.column_name;
    »
    /* "cc.column_name <> 'BUDGET_ID'" - это условие добавлено, т.к. констрейнт "UQ_KCSR" содержит 2 колонки, в том числе и колонку "BUDGET_ID", поэтому без этого условия все подзапросы удвоятся */

    2) Пример результата:
    «
    select 'PROTOCOL.KCSR_CODE',count(*) CNT from PROTOCOL t where t.KCSR_CODE in ('7140450641', '7140450642') and t.BUDGET_ID=800000001309 union all
    select 'PURPOSEFULGRANT_EXPKBK.KCSR_CODE',count(*) CNT from PURPOSEFULGRANT_EXPKBK t where t.KCSR_CODE in ('7140450641', '7140450642') and t.BUDGET_ID=800000001309 union all
    ...;
    »


    3) Этот результат оформляем таким образом (см. первую и последнюю строки):
    «
    select * from (
    select 'PROTOCOL.KCSR_CODE',count(*) CNT from PROTOCOL t where t.KCSR_CODE in ('7140450641', '7140450642') and t.BUDGET_ID=800000001309 union all
    select 'PURPOSEFULGRANT_EXPKBK.KCSR_CODE',count(*) CNT from PURPOSEFULGRANT_EXPKBK t where t.KCSR_CODE in ('7140450641', '7140450642') and t.BUDGET_ID=800000001309 union all
    ...
    ) where CNT<>0;
    »
    /* "CNT<>0" - это условие добавлено, т.к. без него запрос будет показывать все таблицы, в том числе и где нужных нам записей нет */

    Итог:
    Решение сработало успешно, в результате запрос выдал (т.е. в таблице "PURPOSEFULGRANT_EXPKBK" есть 1 запись, содержащая искомый код КЦСР):
    «
    PURPOSEFULGRANT_EXPKBK.KCSR_CODE' 1
    »

    P.S. Запрос для запросов для Firebird:

    Пример №1 (простой):
    select
    'select '''
    ||trim(i.rdb$relation_name)||'.'||trim(isg.rdb$field_name)||''' as TABLE_NAME, count(*) as CNT from '
    ||trim(i.rdb$relation_name)||' where '||trim(isg.rdb$field_name)||'=777 union all'
    from rdb$indices i
    join rdb$index_segments isg on isg.rdb$index_name = i.rdb$index_name
    where i.rdb$foreign_key = 'PK_BUDGETLINE'
    order by
    i.rdb$relation_name
    ,isg.rdb$field_name;

    Пример №2 (сложный):
    select
    'select '''
    ||trim(i.rdb$relation_name)||''' as TABLE_NAME, count(*) as CNT from '
    ||trim(i.rdb$relation_name)||' as t where t.'
    ||trim(isg.rdb$field_name)||'=3250000000441 and t.KCSR_CODE is not null union all'
    from rdb$indices i
    join rdb$index_segments isg on isg.rdb$index_name = i.rdb$index_name
    where i.rdb$foreign_key = 'UQ_KCSR'
    and trim(isg.rdb$field_name) = 'BUDGET_ID'
    order by
    i.rdb$relation_name
    ,isg.rdb$field_name;

    понедельник, 25 апреля 2016 г.

    Sybase Backup

    Формат команды:
    dbbackup -c "uid=<username>;pwd=<password>;dbf=<database file>" <backup directory>

    Пример для Windows:
    C:\PROGRA~1\Sybase\SQLANY~1\win32\dbbackup -y -o C:\Backup\backup.log -c "uid=DBA;pwd=sql;dbf=C:\BASE\BASE.db" C:\Backup

    Описание ключей:
    -y: создает папку или заменяет уже существующий файл без запроса;
    -o <log-file>: выводит информацию о выполнения команды в лог-файл;
    -c "строка": содержит информацию о подключении к БД;
    дополнительную информацию о ключах можно получить с помощью команды: «dbbackup.exe /?».

    Преимущества:
    - использование штатной утилиты "dbbackup" позволяет создавать резервную копию БД даже если БД используется, т.е. отключать АЦК-Транспорт и останавливать сервис Sybase необязательно;
    - можно создать пакетный файл (*.bat);
    - можно создать запланированное задание, которое будет регулярно создавать резервную копию, можно, например, использовать встроенные в Linux или Windows планировщики заданий.

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

    Восстановление:
    в результате выполнения утилита "dbbackup" создает полную копию БД, чтобы ее использовать достаточно указать к ней путь или разместить на месте прежней БД.

    четверг, 21 апреля 2016 г.

    Версия Tomcat

    Команда:
    java -cp <папка tomcat>/lib/catalina.jar org.apache.catalina.util.ServerInfo
    Пример ответа:
    Server version: Apache Tomcat/6.0.29
    Server built: July 19 2010 1458
    Server number: 6.0.0.29
    OS Name: Windows 10
    OS Version: 10.0
    Architecture: amd64
    JVM Version: 1.8.0_60-b27
    JVM Vendor: Oracle Corporation

    четверг, 7 апреля 2016 г.

    Не династия

    [ 7 апреля 2016 г. 11:54 ]
    - у тебя дедушка гинеколог, папа гинеколог, ты на гинеколога учишься, у вас шо династия
    - НЕТ насмотреться не можем !

    Д.К.

    пятница, 1 апреля 2016 г.

    среда, 16 марта 2016 г.

    Если во время вывода информации в серверный вывод (serveroutput) произошло переполнение буфера:
    «ORA-20000: ORU-10027: buffer overflow, limit of 1000000 bytes»
    ,
    значит ты забыл воспользоваться пилюлькой:
    «dbms_output.enable(NULL);»

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

    Поле 106

    Содержимое "paytype.xml" продиктовано Приложением №3 к Приказу Минфина России от 12.11.2013 N 107н (ред. от 23.09.2015) "Об утверждении Правил указания информации в реквизитах распоряжений о переводе денежных средств в уплату платежей в бюджетную систему Российской Федерации"
    https://www.consultant.ru/document/cons_doc_LAW_155187/3a319b94ec6875cf7b20095f785a91d21822cb6f/

    среда, 9 марта 2016 г.

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

    Изменение регистра строки в bash c помощью awk

    Перевод в верхний регистр:
    str=Some string
    upper_str=`echo $str|awk '{print toupper($0)}'`
    echo $upper_str
    Результат:
    SOME STRING

    Перевод в нижний регистр:
    str=Some string
    lower_str=`echo $str|awk '{print tolower($0)}'`
    echo $lower_str
    Результат:
    some string

    Чтение файла параметров (properties-файл) через JSP с помощью <fmt:setBundle>

    Файл параметров (key-value pair) можно расположить здесь (будет доступно только в рамках WEB-приложения):
    <tomcat>/webapps/<webapp>/WEB-INF/classes/myparams.properties
    или здесь (будет доступно для всех WEB-приложений в рамках сервера:
    <tomcat>/lib/myparams.properties

    Тогда в JSP-файле (например, index.jsp) обращение к файлу параметров можно обратится так:
    (scope - используется для того, чтобы контекст о подключении к БД был доступен всем JSP-файлам в рамках данного WEB-приложения)

    <fmt:setBundle var="prop" basename="myparams"/>
    <fmt:message bundle="${prop}" key="db.driver" var="dbDrv"/>
    <fmt:message bundle="${prop}" key="db.url" var="dbUrl"/>
    <fmt:message bundle="${prop}" key="db.user" var="dbUser"/>
    <fmt:message bundle="${prop}" key="db.password" var="dbPswd"/>
    <sql:setDataSource var="dbConnection" driver="${dbDrv}" url="${dbUrl}" user="${dbUser}" password="${dbPswd}" scope="application"/>
    <sql:query var="result" dataSource="${dbConnection}" sql="select id, schemaname, azkversion, description from schemainfo" />

    Листинг <tomcat>/webapps/<webapp>/WEB-INF/classes/myparams.properties:

    db.driver=oracle.jdbc.driver.OracleDriver
    db.url=jdbc:oracle:thin:@dbserver:1521:ORACLESID
    db.user=MYSCHEMA
    db.password=password

    Включение JSTL в Tomcat

    Скопировать jstl-1.2.jar в <tomcat>/lib/ или в <webapp>/WEB-INF/lib/
    JSTL wiki page: http://stackoverflow.com/tags/jstl/info

    Доступ к параметрам JSP через EL-выражение

    Получение значения переменной "str" в JSP можно заменить с этого:
    <%=request.getParameter("str");%>
    на EL-выражения:
    ${param.str}
    или так:
    ${param["str"]}

    И короче, и обработка значения "null" правильнее, т.к. сразу вот это получаем.

    понедельник, 7 марта 2016 г.

    Обработка null у строковой переменной в JSP

    Если
    String str = null
    то "page.jsp" с содержимым:
    Переменная str = <%=str%>
    отобразиться в браузере так:
    Переменная str = null

    Чтобы пустая строка отобразилась в браузере пустой:
    Переменная str =
    нужно в "page.jsp" воспользоваться EL-выражением:
    Переменная str = ${str}

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

    Кодировка UTF-8 для GET-запросов в Tomcat

    Письмо самому себе:
    Дорогой я, если ты все еще тот лошарик, который так и не научился работать с POST-запросами и EL-expressions, а умеет работать только с GET-запросами, тогда тебе все еще пригодится навык превращать кракозябры в русские буквы из параметров. Для этого необходимо добавить «URIEncoding="UTF-8"» в файл
    <tomcat>/conf/server.xml
    в блок параметров коннектора, например:
    <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="UTF-8"

    Чтение файла параметров (properties-файл) через JSP

    Листинг index.jsp
    <%@ page import="java.io.FileInputStream" %>
    <%@ page import="java.util.Properties" %>
    <%
    FileInputStream file = new FileInputStream(request.getRealPath("test.file"));
    Properties prop = new Properties();
    prop.load(file);
    String db_url = prop.getProperty("db.url");
    %>
    <html>
    <head></head>
    <body>
    <%out.print("Test N 11");%>
    <br>
    <%out.print(request.getRealPath("/"));%>
    <br>
    <%out.print("From parfile: " + db_url);%>
    </body>
    </html>

    Листинг test.file
    db.driver=oracle.jdbc.driver.OracleDriver
    db.url=jdbc:oracle:thin:@dbserver:1521:ORACLESID
    db.user=MY_ORA_SCHEMA
    db.password=pass

    В браузере будет следующее:
    Test N 11
    /opt/apache-tomcat/webapps/my_app/
    From parfile: jdbc:oracle:thin:@jdbc:oracle:thin:@dbserver:1521:ORACLESID

    четверг, 3 марта 2016 г.

    Доступ к СУБД Oracle через JSP под Tomcat

    Пример доступа к БД Oracle через JSP под Tomcat.

    Чтобы научить tomcat подключаться к базам Oracle, копируем ojdbc6.jar в папку <tomcat>\lib.
    Создаем web-приложение: JSP-страница, которая будет выводить содержимое таблицы "USER" из БД "c:/data/base.fdb" сервера "dbserver"
    <tomcat>\webapps\test_app\index.jsp

    Листинг index.jsp:
    <%@page import="java.sql.*" %>
    <%Class.forName("oracle.jdbc.driver.OracleDriver"); %>
    <HTML>
        <HEAD>
            <TITLE>Database access through JSP</TITLE>
        </HEAD>
        <BODY>
            <H1>Result of select query</H1>
            <%
                Connection connection = DriverManager.getConnection(
                    "jdbc:oracle:thin:@dbserver:1521:ORACLESID",
                    "MY_ORA_SCHEMA",
                    "password");
                Statement statement = connection.createStatement();
                ResultSet resultset = statement.executeQuery("select id, name from user order by id asc");
            %>
            <TABLE BORDER="1">
                <TR>
                    <TH>id</TH>
                    <TH>name</TH>
                </TR>
                <% while(resultset.next()){ %>
                <TR>
                    <TD> <%= resultset.getString(1) %></TD>
                    <TD> <%= resultset.getString(2) %></TD>
                </TR>
                <% } %>
            </TABLE>
        </BODY>
    </HTML>

    Полезные ссылки:
    http://www.java2s.com/Tutorial/Java/0360__JSP/MakeDatabaseconnection.htm
    http://jaybirdwiki.firebirdsql.org/jaybird/doku.php?id=config:driver_config

    Проработать:
    http://www.tutorialspoint.com/jsp/jsp_database_access.htm

    Доступ к СУБД Firebird через JSP под Tomcat

    Пример доступа к БД Firebird через JSP под Tomcat.

    Чтобы научить tomcat подключаться к базам Firebird, копируем jaybird-full-2.2.9.jar в папку <tomcat>\lib.
    Создаем web-приложение: JSP-страница, которая будет выводить содержимое таблицы "USER" из БД "c:/data/base.fdb" сервера "dbserver"
    <tomcat>\webapps\test_app\index.jsp

    Листинг index.jsp:
    <%@page import="java.sql.*" %>
    <%Class.forName("org.firebirdsql.jdbc.FBDriver"); %>
    <HTML>
        <HEAD>
            <TITLE>Database access through JSP</TITLE>
        </HEAD>
        <BODY>
            <H1>Result of select query</H1>
            <%
                Connection connection = DriverManager.getConnection(
                    "jdbc:firebirdsql:dbserver/3255:c:/data/base.fdb",
                    "SYSDBA",
                    "masterkey");
                Statement statement = connection.createStatement();
                ResultSet resultset = statement.executeQuery("select id, name from user order by id asc");
            %>
            <TABLE BORDER="1">
                <TR>
                    <TH>id</TH>
                    <TH>name</TH>
                </TR>
                <% while(resultset.next()){ %>
                <TR>
                    <TD> <%= resultset.getString(1) %></TD>
                    <TD> <%= resultset.getString(2) %></TD>
                </TR>
                <% } %>
            </TABLE>
        </BODY>
    </HTML>

    Полезные ссылки:
    http://www.java2s.com/Tutorial/Java/0360__JSP/MakeDatabaseconnection.htm
    http://jaybirdwiki.firebirdsql.org/jaybird/doku.php?id=config:driver_config

    Проработать:
    http://www.tutorialspoint.com/jsp/jsp_database_access.htm

    воскресенье, 28 февраля 2016 г.

    JSP для Tomcat

    Проба пера в JSP, в качестве сервера выбрал Tomcat (из-за того, что я с ним уже знаком).

    В качестве учебного материала выбрана методичка "Примеры разработки страниц JSP":
    http://orlova.rsue.ru/content/sst/j2ee2.htm

    Дополнительная информация к упражнению 5 "Разработка простой страницы JSP, взаимодействующей с компонентом JavaBeans":
    Компиляция java-классов:
    javac -g simpleBean.java
    в результате будет скомпилирован
    simpleBean.class;
    Расположение файлов в папке приложения:
    <file>.jsp
    WEB-INF\classes\<java-package name>\<java-class name>.class
    Пример:
    SimpleBeanJSP.jsp
    WEB-INF\classes\servlets\simpleBean.class
    Создание war-архива:
    jar cvf <название архива>.war <папка с исходниками>
    Пример создания архива для файлов в текущей папке:
    jar cvf jbean_test.war .
    Расположение файлов на сервере Tomcat:
    <tomcat>/webapps/<file>.war

    Дополнительная информация к упражнению 6 "Пример взаимодействия страниц JSP и сервлетов":
    Если при компиляции появляются сообщения типа:
    "package javax.servlet does not exist"
    тогда нужно указать путь к пакету с компонентами "Java EE", его можно взять здесь:
    <tomcat>/lib/servlet-api.jar
    и упомянуть его в команде компиляции.
    Плюс, чтобы во время компиляции не было ошибки "cannot find symbol", нужно поместить все java-файлы в одну папку, например, папку "src":
    javac -cp servlet-api.jar src\*.java -d out

    Примечание:
    нужно ознакомится с правилами работы с "WEB-INF", "web.xml".

    P.S. Архитектуры моделей JSP:
    http://www.javable.com/javaworld/12_99/01/
    JSP модель 1:

    JSP модель 2:

    пятница, 19 февраля 2016 г.

    Как узнать SID пользователя Windows?

    Пример запроса для локального пользователя:
    wmic useraccount where name='%username%' get name,sid
    Пример запроса для пользователя домена:
    wmic useraccount where (name='%username%' and domain='%userdomain%') get name,sid

    Редко пригождается, например, когда нужно узнать, какая ветка реестра в разделе "HKEY_USERS" принадлежит тому или иному пользователю, которому запрещено запускать regedit.

    четверг, 18 февраля 2016 г.

    azk-m, java 8

    -Dfile.encoding=UTF-8
    -Xms128m
    -Xmx1024m
    -XX:+UseG1GC
    -XX:+DisableExplicitGC
    -XX:MaxGCPauseMillis=1000
    -XX:PermSize=3G
    -XX:MaxPermSize=3G
    -Dcatalina.home=.
    -Dcatalina.base=.
    -Djava.endorsed.dirs=.\endorsed
    -Djava.io.tmpdir=.\temp
    -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
    -Djava.util.logging.config.file=.\conf\logging.properties
    -XX:ReservedCodeCacheSize=64m

    вторник, 16 февраля 2016 г.

    (не проверено) Standby Database

    http://docs.oracle.com/cd/A87860_01/doc/server.817/a76995/standbyc.htm
    Топорков Юрий (11:26:00 16/02/2016)
    если кратко:
    1. создать на сервере стендбай стуктуру папок как на рабочей бд
    2. скопировать файл паролей и spfile с рабочей
    3. скопировать бэкапсет, автобэкап с рабочей.
    4. поднять бд в режим nomount, восстановить из автобэкапа контрфайл
    5. стартуем в mount
    6. ресторим БД
    7. на рабочей создаем стендбай контр файл
    8. меняем на стендабае обычные контрлфайлы на новые конрфайлы (для стенбая из п7)
    9. запускаем БД в режим стендбая, несколько команд.

    понедельник, 15 февраля 2016 г.

    Размер таблиц схемы

    При подсчете размера таблицы учитываются ее индексы и, если есть, LOB-сегменты (LOB-поля и LOB-индексы):

    select dd.TABLE_NAME, to_char(sum(dd.TABLE_SIZE)/1048576,'999G999G999G999D999') SIZE_MB from
    (
    /* LOB */
    select l.TABLE_NAME TABLE_NAME, sum(s.bytes) TABLE_SIZE from USER_LOBS l join USER_SEGMENTS s on s.SEGMENT_NAME=l.SEGMENT_NAME group by l.TABLE_NAME
    union all
    /* LOBINDEX,INDEX */
    select l.TABLE_NAME TABLE_NAME, sum(s.bytes) TABLE_SIZE from USER_INDEXES l join USER_SEGMENTS s on s.SEGMENT_NAME=l.INDEX_NAME group by l.TABLE_NAME
    union all
    /* TABLE */
    select l.TABLE_NAME TABLE_NAME, sum(s.bytes) TABLE_SIZE from USER_TABLES l join USER_SEGMENTS s on s.SEGMENT_NAME=l.TABLE_NAME group by l.TABLE_NAME
    ) dd
    group by dd.TABLE_NAME
    order by SUM(TABLE_SIZE) desc;

    Сериалы рекомендованные

    - "Вице-президент", ситком, Сергеич.
    - "Остров", ситком, Фоксе.

    среда, 13 января 2016 г.

    КриптоПро TSP Client, КриптоПро OCSP Client

    Согласно описанию на странице https://www.cryptopro.ru/products/pki/tsp/usage#tspclient:
    «"КриптоПро TSP Client" не имеет выделенного дистрибутива, его установка должна производиться совместно с установкой продукта, который использует его программный интерфейс»
    поэтому:
    ftp://ftp.bftcom.com/BFT2/!azk_update/!soft/
    - cades-win32.msi;
    - cades-x64.msi.

    Затем см. пункт меню Пуск -> Программы -> КРИПТО-ПРО -> "КриптоПро PKI":

    Архив