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

WebLogic Server. Encrypt & Decrypt password.

На днях возникла задача хранения некоторой части данных в базе данных. Из темы ясно, что данные должны быть зашифрованы. Чтобы не изобретать велосипед, первым делом отправился в www.google.com с вопросом как же шифруются пароли weblogic'а.

В результате получился маленький класс для шифровки и расшифровки паролей по аналогии как это делает weblogic server.

package com.kalinchyk.util;

import weblogic.security.internal.SerializedSystemIni;
import weblogic.security.internal.encryption.*;

public final class WebLogicSecure {
    
    private static EncryptionService es = null;
    private static ClearOrEncryptedService ces = null;

    public static String decrypt(String pwd) throws Exception {
        es = SerializedSystemIni.getExistingEncryptionService();
        if (es == null)
            throw new Exception("Unable to initialize decryption service");
        ces = new ClearOrEncryptedService(es);
        return ces.decrypt(pwd);
    }    

    public static String encrypt(String pwd) throws Exception {
        es = SerializedSystemIni.getExistingEncryptionService();
        if (es == null)
            throw new Exception("Unable to initialize encryption service");
        ces = new ClearOrEncryptedService(es);
        return ces.encrypt(pwd);
    }
}

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

Для тестирования на локальной машине можно использовать файл SerializedSystemIni.dat из IntegratedWebLogicServer, который необходимо сохранить в директорию с вашим проектом.

понедельник, 27 апреля 2015 г.

JavaScript Frameworks Day 2015

На прошедших выходных (26 апреля 2015 года) прошел очередной ивент от frameworksdays по тематике JavaScript. Как обычно было очень много интересных докладов, конкурсов, подарков!

Спасибо организаторам за яркое воскресенье. 

Есть желание посетить следующие ивенты? Регистрируйтесь и приходите.


пятница, 20 марта 2015 г.

Отчеты BI Publisher и шрифт Times New Roman (кириллица)

Столкнулся с необходимостью формировать отчеты в старой версии Oracle BI Publisher Enterprise (10.1.3.4.1) и сразу возникла сложность со шрифтам. Причем проблема возникала только при формировании отчета в формате pdf. Вместо правильных шрифтов статически указывался Alban WT J и вся кириллица смотрелась ужасно, стили не соответствовали шаблону - небыло выделения жирным и остальные странные артефакты.

Решение:

Первым делом скопировать необходимые шрифты из windows (c:\windows\fonts\), например, Times New Roman, Arial и т.д. в директорию jre/lib/fonts (тут необходимо четко понимать, какой из jre использует ваш BIP, так например на нашей тестовой среде используется не родной).

Следующим шагом прописать группу шрифтов в конфигурационный файл (xdo.cfg). В зависимости от задачи - это может быть глобальный файл (расположен %BIP%/xmlp/XMLP/Admin/Configuration) или локальный для определенного отчета. Мой конфиг выглядит теперь так:
<config version="1.0.0" xmlns="http://xmlns.oracle.com/oxp/config/">

   <properties>
      <property name="pdf-compression">true</property>
   </properties>
   <fonts>
        <font family="Arial" style="normal" weight="normal"> 
            <truetype path="/arial.ttf" /> 
        </font> 
        <font family="Arial" style="italic" weight="normal"> 
            <truetype path="/ariali.ttf" /> 
        </font> 
        <font family="Arial" style="normal" weight="bold"> 
            <truetype path="/arialbd.ttf" /> 
        </font> 
        <font family="Arial" style="italic" weight="bold"> 
            <truetype path="/arialbi.ttf" /> 
        </font>    

        <font family="Times New Roman" style="normal" weight="normal"> 
            <truetype path="/times.ttf" /> 
        </font> 
        <font family="Times New Roman" style="italic" weight="normal"> 
            <truetype path="/timesi.ttf" /> 
        </font> 
        <font family="Times New Roman" style="normal" weight="bold"> 
            <truetype path="/timesbd.ttf" /> 
        </font> 
        <font family="Times New Roman" style="italic" weight="bold"> 
            <truetype path="/timesbi.ttf" /> 
        </font>    

      <font family="Default" style="normal" weight="normal">
         <truetype path="/times.ttf" />
      </font>

      <!--Font substitute setting (for PDFForm filling etc...) -->
      <font-substitute name="MSGothic"> 
         <truetype path="/msgothic.ttc" ttcno="0" />
      </font-substitute>  
   </fonts>
</config>

среда, 11 марта 2015 г.

CodenJoy. 2048


В предыдущем посте я написал о посещении frameworksdays, на котором нас познакомили с проектом codenjoy. Очередные головоломки для разработчиков. В перечне задачек была предложена игра 2048 - суть задания написать алгоритм (бота), позволяющий набрать максимальное количество баллов из всех зарегистрированных участников.

Взаимодействие с сервером осуществляется посредством websoсket'ов. Значит нет привязки к языку программирования - что не может не радовать. 

Установил себе модуль https://pypi.python.org/pypi/websocket-client для работы с вебсокетами через python и начеркал примитивный алгоритм, который может прийти в голову - постоянно жмем кнопку вниз, когда строка (двумерный массив разложенный в строку) не изменилась от предыдущего действия, то нажимаем влево. В результате имеем следующий код:


import websocket

def on_message(ws, message):
    ws.send("LEFT" if message == ws.last_message else "DOWN")
    ws.last_message = message

if __name__ == "__main__":
    ws = websocket.WebSocketApp( "ws://tetrisj.jvmhost.net:12270/codenjoy-contest/ws?user=[user]"
                               , on_message = on_message)
    ws.last_message = ""
    ws.run_forever()


Такой бот смог набрать 7938 и занять 3е место в рейтинге, к заметке - второе место имеет такое же количество баллов.

Для сброса текущего счета (перерегистрация) клиента:
curl http://codenjoy.com/codenjoy-contest/register -d "name=[user]&password=[pass]&gameName=a2048"

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

вторник, 10 марта 2015 г.

Java Frameworks Day 2015

7 марта посетил великолепный ивент frameworksdays с тематиками для java разработчиков, хоть java не моя стихия, но было очень захватывающе. Спасибо большое организаторам за проведенное мероприятие и докладчикам за интересные презентации.