пятница, 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 не моя стихия, но было очень захватывающе. Спасибо большое организаторам за проведенное мероприятие и докладчикам за интересные презентации.