вівторок, 27 грудня 2016 р.

Загрузить BLOB в TImage Delphi

Есть у меня простая табличка в ORACLE, в которой есть 2 поля: ИД и BLOB (картинка в PNG). Понадобилось отображать эту картинку на клиенте (Delphi XE3). Погуглив, нашел подходящий вариант, доработал под себя и вот что получилось:



субота, 27 серпня 2016 р.

Raspberry Pi, датчик движения и отправка смс через Twilio

Появилось свободное время, которое я решил потратить на Raspberry Pi. Пару месяцев назад, я уже пробовал фиксировать движение с помощью датчика, подключенного к малине. О проблеме, которая возникла в тот момент я написал в блоге. Сейчас, я решил продолжить развивать эту тему и прикрутить смс оповещение в момент срабатывания датчика. Погуглив, я нашел сайт Twilio, который предоставляет бесплатный вариант отправки смс на верифицированный номер.
Далее я зарегистрировался на сайте, прошел верификацию своего номера, получил триальный номер Twilio и закачал пакет для работы с Twilio:
sudo pip3 install twilio

Также в интернете нашел пример работы с Twilio, который соединил вместе с кодом для работы с датчиком, внес кое-какие свои корректировки и вот что получилось:


Смс приходит следующего вида:
Sent from your Twilio trial account
- Some movement. Time: 2016-08-27 16:34:09 

Фото процесса:

понеділок, 22 серпня 2016 р.

Pythonchallenge №10

Продолжаю изучать Python и пробую выполнять задачки с его помощью. На этот раз сайт pythonchallenge.com задание номер 10.
Суть задания заключается в нахождении длины 30-го элемента списка. Также даны начальные элементы последовательности, которую надо продолжить:
a = [1, 11, 21, 1211, 111221, 

Понять алгоритм, по которому строится список мне помог гугл и википедия: https://en.wikipedia.org/wiki/Look-and-say_sequence
В википедии, я обратил внимание на вот этот абзац:
"No digits other than 1, 2, and 3 appear in the sequence..."
и согласно этому ограничению написал свой алгоритм решения этой задачи:


середа, 17 серпня 2016 р.

Projecteuler проблема №5

Недавно начал изучать Python и нашел интересный сайт с задачками, которые пробую решать с помощью Python.
Решил выложить свой вариант решения проблемы №5:


По поводу сайта https://projecteuler.net/problem=N: для перехода к новому заданию меняем N на номер "проблемы"

неділя, 31 липня 2016 р.

Как убрать метод ввода РУС-US в windows 10

У меня данная проблема проявилась при удаленном подключении к моему рабочему компьютеру. Вот как она выглядит:
Добавляя и удаляя разные языки в панели инструментов ни к чему не привели. Погуглив я нашел вот такое решение:
В регистре, в [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout] добавить ключ "IgnoreRemoteKeyboardLayout"=dword:00000001

середа, 30 березня 2016 р.

Определяем блокирующие сессии

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

select distinct orakill from (
 select
        /*+ ordered */
        w1.sid waiting_session,
        h1.sid holding_session,
        w.kgllktype lock_or_pin,
        w.kgllkhdl address,
       (
         select 'ALTER SYSTEM DISCONNECT SESSION ''' || s.SID || ',' || s.SERIAL# || ''' IMMEDIATE;' sqll1
           from v$session s , v$process p
          where s.PADDR=p.ADDR and s.sid = h1.sid
       ) orakill,
        decode (h.kgllkmod, 0, 'None', 1, 'Null', 2, 'Share', 3, 'Exclusive', 'Unknown' ) mode_held,
        decode (w.kgllkreq, 0, 'None', 1, 'Null', 2, 'Share', 3, 'Exclusive', 'Unknown' ) mode_requested
   from dba_kgllock w,
        dba_kgllock h,
        v$session w1,
        v$session h1
  where ( ( (h.kgllkmod != 0)
    and (h.kgllkmod     != 1)
    and ((h.kgllkreq     = 0)
     or (h.kgllkreq      = 1)) )
    and ( ((w.kgllkmod   = 0)
     or (w.kgllkmod      = 1))
    and ((w.kgllkreq    != 0)
    and (w.kgllkreq     != 1)) ) )
    and w.kgllktype      = h.kgllktype
    and w.kgllkhdl       = h.kgllkhdl
    and w.kgllkuse       = w1.saddr
    and h.kgllkuse       = h1.saddr
)

Пересоздание отключенного триггера включает его

Сегодня столкнулись с проблемой - начала выполняться лишняя проверка. Оказалось, что проверка выполнялась в триггере, который уже очень давно был disable, а сейчас он enable. Посмотрели по логам: один из наших программистов внес изменения в функцию и решил везде, где вызывается эта функция внести те же изменения. Поиск всех мест вызовов он проводил через поиск в PL/SQL Developer. Наш триггер тоже попал в результаты поиска. Проблема только в том, что в окне поиска PL/SQL Developer не пишется, что триггер отключен. И вот, он открыл на редактирование триггер с формы поиска, внес корректировки и нажал F8 (компил). После этого триггер стал enable.
По-умолчанию триггеры создаются сразу включенными. Только после создания их статус можно поменять через ALTER TRIGGER. Начиная с 11 версии Оракла можно явно, при создании, задавать в каком статусе будет создан этот триггер.
Наш триггер начинался с текста:
CREATE OR REPLACE TRIGGER ...
И оказывается, что при REPLACE также происходит включение триггера.